From fa05c56cf51771faef8bd824c32bf6e89634e496 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Wed, 7 Jan 2026 16:44:16 +0900 Subject: [PATCH] feat: initial release v0.1.0 --- .gitignore | 33 + GUIDE.md | 34 + README.md | 16 + docs/example.html | 2811 ++ electron/main.js | 149 + electron/preload.js | 8 + eslint.config.js | 29 + index.html | 13 + package-lock.json | 8076 ++++ package.json | 52 + public/fonts/NotoSansKR-Regular.otf | 1447 + public/fonts/NotoSansKR-Regular.woff2 | 11 + public/tinymce/icons/default/icons.js | 239 + public/tinymce/icons/default/icons.min.js | 1 + public/tinymce/icons/default/index.js | 7 + public/tinymce/models/dom/index.js | 7 + public/tinymce/models/dom/model.js | 8980 ++++ public/tinymce/models/dom/model.min.js | 1 + public/tinymce/skins/content/dark/content.css | 75 + public/tinymce/skins/content/dark/content.js | 10 + .../skins/content/dark/content.min.css | 10 + .../tinymce/skins/content/dark/content.min.ts | 3 + public/tinymce/skins/content/dark/content.ts | 3 + .../tinymce/skins/content/default/content.css | 70 + .../tinymce/skins/content/default/content.js | 10 + .../skins/content/default/content.min.css | 10 + .../skins/content/default/content.min.ts | 3 + .../tinymce/skins/content/default/content.ts | 3 + .../skins/content/document/content.css | 75 + .../tinymce/skins/content/document/content.js | 10 + .../skins/content/document/content.min.css | 10 + .../skins/content/document/content.min.ts | 3 + .../tinymce/skins/content/document/content.ts | 3 + .../skins/content/tinymce-5-dark/content.css | 75 + .../skins/content/tinymce-5-dark/content.js | 10 + .../content/tinymce-5-dark/content.min.css | 10 + .../content/tinymce-5-dark/content.min.ts | 3 + .../skins/content/tinymce-5-dark/content.ts | 3 + .../skins/content/tinymce-5/content.css | 70 + .../skins/content/tinymce-5/content.js | 10 + .../skins/content/tinymce-5/content.min.css | 10 + .../skins/content/tinymce-5/content.min.ts | 3 + .../skins/content/tinymce-5/content.ts | 3 + .../tinymce/skins/content/writer/content.css | 71 + .../tinymce/skins/content/writer/content.js | 10 + .../skins/content/writer/content.min.css | 10 + .../skins/content/writer/content.min.ts | 3 + .../tinymce/skins/content/writer/content.ts | 3 + .../tinymce/skins/ui/oxide-dark/content.css | 1025 + .../skins/ui/oxide-dark/content.inline.css | 1031 + .../skins/ui/oxide-dark/content.inline.js | 10 + .../ui/oxide-dark/content.inline.min.css | 10 + .../skins/ui/oxide-dark/content.inline.min.ts | 116 + .../skins/ui/oxide-dark/content.inline.ts | 116 + public/tinymce/skins/ui/oxide-dark/content.js | 10 + .../skins/ui/oxide-dark/content.min.css | 10 + .../skins/ui/oxide-dark/content.min.ts | 116 + public/tinymce/skins/ui/oxide-dark/content.ts | 116 + public/tinymce/skins/ui/oxide-dark/skin.css | 5618 +++ public/tinymce/skins/ui/oxide-dark/skin.js | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.css | 1 + .../tinymce/skins/ui/oxide-dark/skin.min.ts | 507 + .../skins/ui/oxide-dark/skin.shadowdom.css | 30 + .../skins/ui/oxide-dark/skin.shadowdom.js | 1 + .../ui/oxide-dark/skin.shadowdom.min.css | 1 + .../skins/ui/oxide-dark/skin.shadowdom.min.ts | 9 + .../skins/ui/oxide-dark/skin.shadowdom.ts | 9 + public/tinymce/skins/ui/oxide-dark/skin.ts | 507 + public/tinymce/skins/ui/oxide/content.css | 1037 + .../tinymce/skins/ui/oxide/content.inline.css | 1031 + .../tinymce/skins/ui/oxide/content.inline.js | 10 + .../skins/ui/oxide/content.inline.min.css | 10 + .../skins/ui/oxide/content.inline.min.ts | 116 + .../tinymce/skins/ui/oxide/content.inline.ts | 116 + public/tinymce/skins/ui/oxide/content.js | 10 + public/tinymce/skins/ui/oxide/content.min.css | 10 + public/tinymce/skins/ui/oxide/content.min.ts | 116 + public/tinymce/skins/ui/oxide/content.ts | 116 + public/tinymce/skins/ui/oxide/skin.css | 5615 +++ public/tinymce/skins/ui/oxide/skin.js | 1 + public/tinymce/skins/ui/oxide/skin.min.css | 1 + public/tinymce/skins/ui/oxide/skin.min.ts | 507 + .../tinymce/skins/ui/oxide/skin.shadowdom.css | 30 + .../tinymce/skins/ui/oxide/skin.shadowdom.js | 1 + .../skins/ui/oxide/skin.shadowdom.min.css | 1 + .../skins/ui/oxide/skin.shadowdom.min.ts | 9 + .../tinymce/skins/ui/oxide/skin.shadowdom.ts | 9 + public/tinymce/skins/ui/oxide/skin.ts | 507 + .../skins/ui/tinymce-5-dark/content.css | 1025 + .../ui/tinymce-5-dark/content.inline.css | 1031 + .../skins/ui/tinymce-5-dark/content.inline.js | 10 + .../ui/tinymce-5-dark/content.inline.min.css | 10 + .../ui/tinymce-5-dark/content.inline.min.ts | 116 + .../skins/ui/tinymce-5-dark/content.inline.ts | 116 + .../skins/ui/tinymce-5-dark/content.js | 10 + .../skins/ui/tinymce-5-dark/content.min.css | 10 + .../skins/ui/tinymce-5-dark/content.min.ts | 116 + .../skins/ui/tinymce-5-dark/content.ts | 116 + .../tinymce/skins/ui/tinymce-5-dark/skin.css | 5734 +++ .../tinymce/skins/ui/tinymce-5-dark/skin.js | 1 + .../skins/ui/tinymce-5-dark/skin.min.css | 1 + .../skins/ui/tinymce-5-dark/skin.min.ts | 508 + .../ui/tinymce-5-dark/skin.shadowdom.css | 30 + .../skins/ui/tinymce-5-dark/skin.shadowdom.js | 1 + .../ui/tinymce-5-dark/skin.shadowdom.min.css | 1 + .../ui/tinymce-5-dark/skin.shadowdom.min.ts | 9 + .../skins/ui/tinymce-5-dark/skin.shadowdom.ts | 9 + .../tinymce/skins/ui/tinymce-5-dark/skin.ts | 508 + public/tinymce/skins/ui/tinymce-5/content.css | 1037 + .../skins/ui/tinymce-5/content.inline.css | 1031 + .../skins/ui/tinymce-5/content.inline.js | 10 + .../skins/ui/tinymce-5/content.inline.min.css | 10 + .../skins/ui/tinymce-5/content.inline.min.ts | 116 + .../skins/ui/tinymce-5/content.inline.ts | 116 + public/tinymce/skins/ui/tinymce-5/content.js | 10 + .../skins/ui/tinymce-5/content.min.css | 10 + .../tinymce/skins/ui/tinymce-5/content.min.ts | 116 + public/tinymce/skins/ui/tinymce-5/content.ts | 116 + public/tinymce/skins/ui/tinymce-5/skin.css | 5734 +++ public/tinymce/skins/ui/tinymce-5/skin.js | 1 + .../tinymce/skins/ui/tinymce-5/skin.min.css | 1 + public/tinymce/skins/ui/tinymce-5/skin.min.ts | 508 + .../skins/ui/tinymce-5/skin.shadowdom.css | 30 + .../skins/ui/tinymce-5/skin.shadowdom.js | 1 + .../skins/ui/tinymce-5/skin.shadowdom.min.css | 1 + .../skins/ui/tinymce-5/skin.shadowdom.min.ts | 9 + .../skins/ui/tinymce-5/skin.shadowdom.ts | 9 + public/tinymce/skins/ui/tinymce-5/skin.ts | 508 + public/tinymce/themes/silver/index.js | 7 + public/tinymce/themes/silver/theme.js | 34748 ++++++++++++++++ public/tinymce/themes/silver/theme.min.js | 1 + public/vite.svg | 1 + scripts/copy-tinymce.js | 41 + src/App.css | 372 + src/App.jsx | 661 + src/assets/react.svg | 1 + src/index.css | 77 + src/main.jsx | 11 + vite.config.js | 8 + 139 files changed, 95667 insertions(+) create mode 100644 .gitignore create mode 100644 GUIDE.md create mode 100644 README.md create mode 100644 docs/example.html create mode 100644 electron/main.js create mode 100644 electron/preload.js create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/fonts/NotoSansKR-Regular.otf create mode 100644 public/fonts/NotoSansKR-Regular.woff2 create mode 100644 public/tinymce/icons/default/icons.js create mode 100644 public/tinymce/icons/default/icons.min.js create mode 100644 public/tinymce/icons/default/index.js create mode 100644 public/tinymce/models/dom/index.js create mode 100644 public/tinymce/models/dom/model.js create mode 100644 public/tinymce/models/dom/model.min.js create mode 100644 public/tinymce/skins/content/dark/content.css create mode 100644 public/tinymce/skins/content/dark/content.js create mode 100644 public/tinymce/skins/content/dark/content.min.css create mode 100644 public/tinymce/skins/content/dark/content.min.ts create mode 100644 public/tinymce/skins/content/dark/content.ts create mode 100644 public/tinymce/skins/content/default/content.css create mode 100644 public/tinymce/skins/content/default/content.js create mode 100644 public/tinymce/skins/content/default/content.min.css create mode 100644 public/tinymce/skins/content/default/content.min.ts create mode 100644 public/tinymce/skins/content/default/content.ts create mode 100644 public/tinymce/skins/content/document/content.css create mode 100644 public/tinymce/skins/content/document/content.js create mode 100644 public/tinymce/skins/content/document/content.min.css create mode 100644 public/tinymce/skins/content/document/content.min.ts create mode 100644 public/tinymce/skins/content/document/content.ts create mode 100644 public/tinymce/skins/content/tinymce-5-dark/content.css create mode 100644 public/tinymce/skins/content/tinymce-5-dark/content.js create mode 100644 public/tinymce/skins/content/tinymce-5-dark/content.min.css create mode 100644 public/tinymce/skins/content/tinymce-5-dark/content.min.ts create mode 100644 public/tinymce/skins/content/tinymce-5-dark/content.ts create mode 100644 public/tinymce/skins/content/tinymce-5/content.css create mode 100644 public/tinymce/skins/content/tinymce-5/content.js create mode 100644 public/tinymce/skins/content/tinymce-5/content.min.css create mode 100644 public/tinymce/skins/content/tinymce-5/content.min.ts create mode 100644 public/tinymce/skins/content/tinymce-5/content.ts create mode 100644 public/tinymce/skins/content/writer/content.css create mode 100644 public/tinymce/skins/content/writer/content.js create mode 100644 public/tinymce/skins/content/writer/content.min.css create mode 100644 public/tinymce/skins/content/writer/content.min.ts create mode 100644 public/tinymce/skins/content/writer/content.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/content.css create mode 100644 public/tinymce/skins/ui/oxide-dark/content.inline.css create mode 100644 public/tinymce/skins/ui/oxide-dark/content.inline.js create mode 100644 public/tinymce/skins/ui/oxide-dark/content.inline.min.css create mode 100644 public/tinymce/skins/ui/oxide-dark/content.inline.min.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/content.inline.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/content.js create mode 100644 public/tinymce/skins/ui/oxide-dark/content.min.css create mode 100644 public/tinymce/skins/ui/oxide-dark/content.min.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/content.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.css create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.js create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.min.css create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.min.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts create mode 100644 public/tinymce/skins/ui/oxide-dark/skin.ts create mode 100644 public/tinymce/skins/ui/oxide/content.css create mode 100644 public/tinymce/skins/ui/oxide/content.inline.css create mode 100644 public/tinymce/skins/ui/oxide/content.inline.js create mode 100644 public/tinymce/skins/ui/oxide/content.inline.min.css create mode 100644 public/tinymce/skins/ui/oxide/content.inline.min.ts create mode 100644 public/tinymce/skins/ui/oxide/content.inline.ts create mode 100644 public/tinymce/skins/ui/oxide/content.js create mode 100644 public/tinymce/skins/ui/oxide/content.min.css create mode 100644 public/tinymce/skins/ui/oxide/content.min.ts create mode 100644 public/tinymce/skins/ui/oxide/content.ts create mode 100644 public/tinymce/skins/ui/oxide/skin.css create mode 100644 public/tinymce/skins/ui/oxide/skin.js create mode 100644 public/tinymce/skins/ui/oxide/skin.min.css create mode 100644 public/tinymce/skins/ui/oxide/skin.min.ts create mode 100644 public/tinymce/skins/ui/oxide/skin.shadowdom.css create mode 100644 public/tinymce/skins/ui/oxide/skin.shadowdom.js create mode 100644 public/tinymce/skins/ui/oxide/skin.shadowdom.min.css create mode 100644 public/tinymce/skins/ui/oxide/skin.shadowdom.min.ts create mode 100644 public/tinymce/skins/ui/oxide/skin.shadowdom.ts create mode 100644 public/tinymce/skins/ui/oxide/skin.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.inline.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.inline.js create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.inline.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.js create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/content.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.js create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts create mode 100644 public/tinymce/skins/ui/tinymce-5-dark/skin.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/content.css create mode 100644 public/tinymce/skins/ui/tinymce-5/content.inline.css create mode 100644 public/tinymce/skins/ui/tinymce-5/content.inline.js create mode 100644 public/tinymce/skins/ui/tinymce-5/content.inline.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5/content.inline.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/content.inline.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/content.js create mode 100644 public/tinymce/skins/ui/tinymce-5/content.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5/content.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/content.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.css create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.js create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts create mode 100644 public/tinymce/skins/ui/tinymce-5/skin.ts create mode 100644 public/tinymce/themes/silver/index.js create mode 100644 public/tinymce/themes/silver/theme.js create mode 100644 public/tinymce/themes/silver/theme.min.js create mode 100644 public/vite.svg create mode 100644 scripts/copy-tinymce.js create mode 100644 src/App.css create mode 100644 src/App.jsx create mode 100644 src/assets/react.svg create mode 100644 src/index.css create mode 100644 src/main.jsx create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a3726a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + + # Local settings + settings.json + .env + .env.* + + # Antigravity/Brain artifacts + .gemini + .brain diff --git a/GUIDE.md b/GUIDE.md new file mode 100644 index 0000000..8a61192 --- /dev/null +++ b/GUIDE.md @@ -0,0 +1,34 @@ +# 웹 에디터 이미지 Export 프로그램 사용 가이드 + +이 프로그램은 Electron 기반으로 제작되었으며, 웹 에디터(Quill)에 작성한 내용을 지정된 넓이와 포맷의 이미지로 내보낼 수 있습니다. + +## 1. 실행 방법 + +### 개발 모드 (Development) +소스 코드를 수정하거나 디버깅할 때 사용합니다. +```bash +npm run electron:dev +``` +두 개의 터미널이 실행되며, 하나는 Vite 서버, 하나는 Electron 창입니다. + +### 프로덕션 빌드 및 실행 (Build & Run) +배포 가능한 형태로 빌드하고 실행합니다. +```bash +npm run electron:build +``` +`dist_electron` 폴더에 설치 파일(exe 등)이 생성됩니다. + +## 2. 사용 방법 + +1. **에디터 작성**: 화면 중앙의 에디터에 텍스트, 이미지를 자유롭게 작성합니다. +2. **옵션 설정**: + - **Width (px)**: 내보낼 이미지의 가로 폭을 픽셀 단위로 설정합니다. (예: 800) + - 이미지는 설정된 폭에 맞춰 자동으로 줄바꿈(Reflow)되어 캡처됩니다. + - **Format**: 내보낼 이미지 포맷을 선택합니다. (PNG, JPEG, WEBP) +3. **내보내기 (Export)**: + - 우측 상단의 **EXPORT** 버튼을 클릭합니다. + - 저장 대화상자가 뜨면 파일 이름과 위치를 지정하여 저장합니다. + +## 3. 주의 사항 +- 이미지가 매우 길거나 큰 경우 캡처에 시간이 소요될 수 있습니다. +- JPEG, WEBP는 배경이 투명할 경우 검은색이나 흰색으로 채워질 수 있습니다 (기본 흰색 설정됨). diff --git a/README.md b/README.md new file mode 100644 index 0000000..18bc70e --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/docs/example.html b/docs/example.html new file mode 100644 index 0000000..6aa4270 --- /dev/null +++ b/docs/example.html @@ -0,0 +1,2811 @@ +

[별지 1] + 개인정보 처리방침<개정 2021.10.5, 개정 + 2022.01.28, 개정 2022.7.6, 개정 2023.6.9, 개정 + 2024.1.30, + 개정 2025.8.14, 개정 2025.10.14>

+

  +

+

개인정보 + 처리방침

+

+ 광주은행(이하 당행)은 정보주체의 자유와 권리 보호를 위해 「개인정보 보호법」및 관계 법령이 정한 바를 + 준수하여, 적법하게 개인정보를 처리하고 안전하게 관리하고 있습니다. 이에 「개인정보 보호법」제30조에 따라 정보주체에게 개인정보 처리와 보호에 관한 절차 및 기준을 안내하고, 이와 관련한 고충을 신속하고 + 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립공개하고 있습니다.

+

+

+

+

+

+   +

+

+

+

+ ① 당행은 개인정보를 다음 각 호의 목적을 위해 + 필요최소한의 개인정보를 수집하여 처리합니다. 처리한 개인정보는 다음의 목적이외의 용도로는 사용되지 않으며 이용목적이 변경되는 경우에는 개인정보보호법 + 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.

+

+ 1. (금융)거래 관계 + 관련㈜¹

+

+ - (금융)거래와 + 관련하여 신용조회회사 또는 신용정보집중기관에 대한 개인신용정보의 조회, (금융)거래 관계의 설정 여부의 + 판단, (금융)거래 관계의 설정·유지·이행·관리, 금융사고 조사, 분쟁 해결, 민원 처리 및 법령상 의무이행 + 등의 목적으로 개인정보를 처리합니다.

+

+  

+

+ ㈜¹금융거래라 함은 은행업무(여신, 수신, 외국환, + 전자금융, 현금카드 등), 겸영업무(신용카드, 신탁, 퇴직연금, + 방카슈랑스, 펀드, 파생상품 등), + 부수업무(보증, 팩토링, 대여금고, 보호예수, 각종 대행업무 및 서비스 약정 등)와 관련된 거래를 + 의미합니다.

+

+  

+

+ 2. 상품·서비스 홍보 및 판매 권유 +

+

+ - 고객 만족도 조사를 통한 신규 서비스 개발 및 맞춤 서비스 + 제공, 인구통계학적 특성에 따른 서비스 제공 및 광고의 게재, 서비스의 유효성 확인, 경품지급, 사은행사 등 고객의 편의 및 참여기회 제공, + 접속빈도 파악, 회원의 서비스이용에 대한 통계 등의 목적으로 개인정보를 처리합니다. +

+

+  

+

+ 3. 회원 가입 및 관리

+

+ - 회원가입, + 회원제 서비스 이용, 제한적 본인 확인제에 따른 본인확인, 개인식별, 부정이용방지, 비인가 사용방지, 가입의사 확인, 14세 미만 아동 개인정보 수집 시 법정대리인 동의여부 확인, + 추후 법정 대리인 본인확인, 금융사고 조사, 분쟁해결, + 민원처리 및 고지사항 전달 등의 목적으로 개인정보를 처리합니다.

+

+  

+

+ 4. 온라인 거래 관련 목적

+

+ - 전자금융거래법 제21, 22조에 의해 전자금융거래의 내용 추적 및 + 검색, 보안정책 수립용 통계 자료로 활용 등을 목적으로 개인정보를 처리합니다.

+

+  

+

+  5. 통계작성, + 과학적 연구, 공익적 기록보전 목적

+

+ - 개인정보보호법 제28조의2에 의해 통계작성, 과학적 연구, 공익적 기록보전을 위하여 개인정보를 가명처리할 수 있습니다.

+

+  

+

+

+

+ 당행은 법령에 따른 개인정보 보유·이용기간 + 또는 정보주체로부터 개인정보를 수집 시에 동의 받은 개인정보 보유·이용기간 내에서 개인정보를 처리·보유합니다. 각각의 개인정보 + 처리 및 보유기간은 다음과 같습니다.

+

+   +

+

+ + (금융)거래 관계 관련

+

+ - (금융)거래와 + 관련한 개인(신용)정보는 수집·이용에 관한 동의일로부터 + (금융)거래 종료일 후 5년까지 제1조의 + 이용목적을 위하여 보유·이용됩니다. , (금융)거래 종료일 이후에는 금융사고 조사, 분쟁 해결, + 민원처리, 법령상 의무이행 및 당행의 리스크 관리업무만을 위하여 보유·이용됩니다.

+

+ - 개인(신용)정보의 조회를 목적으로 수집된 개인(신용)정보는 수집·이용에 대한 동의일로부터 고객에 대한 신용정보 제공·조회 동의의 효력 기간까지 보유·이용됩니다. , 신용정보 제공·조회 동의의 효력 기간 종료 후에는 금융사고 조사, 분쟁해결, 민원처리 및 법령상 의무 이행만을 위하여 보유·이용됩니다.

+

+  

+

+ ② 상품 및 서비스 홍보 및 판매 권유

+

+ - 상품·서비스 홍보 및 판매 권유 등과 관련한 + 개인(신용)정보는 수집·이용에 관한 동의일로부터 + (금융)거래 종료일 또는 동의 철회시까지 보유·이용됩니다. , 동의 철회일 후에는 제1조의 목적과 관련된 사고 조사, 분쟁 + 해결, 민원 처리, 법령상 의무이행만을 위하여 보유·이용됩니다.

+

+  

+

+ ③ 회원 가입 및 관리

+

+ - 회원 가입 및 관리 목적으로 수집된 개인(신용)정보는 고객의 회원 가입일로부터 회원 탈퇴일까지 보유·이용됩니다. , 회원 탈퇴일 후에는 제1조의 목적과 관련된 사고 + 조사, 분쟁 해결, 민원처리, 법령상 의무이행만을 위하여 + 보유·이용됩니다.

+

+  

+

+ ④ 온라인 거래 관련 목적

+

+ - 온라인 거래 관련한 개인(신용)정보는 전자금융거래법 시행령 제12조에서 정하는 기간까지 + 보유·이용 됩니다.

+

+  

+

+ ⑤ 통계작성, + 과학적 연구, 공익적 기록보전 목적

+

+ - 통계작성, + 과학적 연구, 공익적 기록보전에 활용하기 위해 가명처리한 개인정보는 가명처리 계획 수립 시 정한 목적을 달성하는 시간(시점)까지만 보유 및 이용됩니다

+

+ ⑥ 마이데이터서비스(본인신용정보관리업)

+

+  - 마이데이터서비스 종료일 또는 동의 철회 시까지 보유 및 이용됩니다.

+

+  

+

+  

+

+

+

+ ① 당행은 원칙적으로 정보주체의 개인정보를 제1조에서 명시한 목적 범위 내에서 처리하며, 정보주체의 사전 동의 없이는 본래의 범위를 초과하여 처리하거나 + 제3자에게 제공하지 않습니다. , 다음의 각 호의 경우에는 + 정보주체 또는 제3자의 이익을 부당하게 침해할 우려가 있을 때를 제외하고는 개인정보를 목적 외의 용도로 이용 하거나 이를 제3자에게 제공할 수 있습니다.

+

+ 1. 정보주체가 사전에 제3자 제공 및 공개에 동의한 경우

+

+ 2. 다른 법률에 특별한 규정이 있는 경우

+

+ 3. 명백히 정보주체 또는 제3자의 급박한 생명·신체·재산의 이익을 위하여 필요하다고 인정되는 경우

+

+ 4. 공중위생 등 공공의 안전과 안녕을 위하여 긴급히 필요한 + 경우

+

+ 5. 통계작성 및 학술연구 등의 목적을 위하여 필요한 경우로서 특정 + 개인을 알아볼 수 없는 형태로 개인 정보를 제공하는 경우

+

+  

+

+ ② 당행은 다음 각 호와 같이 개인정보를 제공하고 + 있습니다

+

+ 1. 제공받는 자

+

+ . + 신용정보집중기관 및 신용조회회사에 대한 제공

+

+ - 신용정보의 이용 및 보호에 관한 법률 제25조에 의한 신용정보집중기관 [한국신용정보원] +

+

+ - 신용정보의 이용 및 보호에 관한 법률 제4조에 의한 신용조회회사[코리아크레딧뷰로㈜, + NICE평가정보㈜,

+

+ 한국기업데이터㈜ 등]

+

+  

+

+ . + 제휴업체 등

+

+ - 홈페이지 > + 고객센터 > KJB보안센터 > 개인정보보호 활용체제 + > 3(제휴업체 등) + 참조

+

+  

+

+ 2. 제공받는 자의 이용 목적

+

+ . + 신용정보집중기관 및 신용조회회사에 대한 제공

+

+ - 신용정보집중기관 : + 신용정보 집중관리 및 활용 등 업무

+

+ - 신용조회회사 : + 신용도 평가, 실명확인 등 업무

+

+ . + 제휴업체 등에 대한 제공

+

+ - (금융)거래의 + 설정·유지·이행·관리 등에 필요한 제휴업무의 수행

+

+ - 상품·서비스의 제공 및 홍보·판매 + 권유 등에 필요한 제휴업무의 수행

+

+  

+

+ 3. 개인정보 제공항목

+

+ . + 신용정보집중기관 및 신용조회회사에 대한 제공

+

+ - 개인식별정보, + 신용거래정보, 신용능력정보, 신용평가를 위한 정보

+

+ . + 제휴업체 등에 대한 제공

+

+ - 수집·이용에 동의한 정보중 제휴계약 등에 따른 + 업무 수행에 필요한 정보에 한함.

+

+  

+

+ ※ 동의 이전에 수집된 개인(신용)정보도 포함됩니다.

+

+  

+

+ 4. 개인정보 보유 기간

+

+ - 개인(신용)정보는 제공된 날로부터 동의 철회시 또는 제공된 목적을 달성할 때까지 + 보유·이용됩니다. 동의 철회 또는 제공된 목적 달성 후에는 위에 기재된 이용목적과 관련된 금융사고 조사, + 분쟁 해결, 민원처리, 법령상 의무이행 만을 위하여 필요한 범위 내에서만 + 보유·이용됩니다.

+

+  

+

+ 당행은 개인정보보호법 제35조의4(개인정보 전송 관리 및 지원) 및 동법 시행령 + 제42조의15(개인정보전송지원

+

+ 플랫폼의 구축 및 운영 등)에 근거하여 마이데이터 지원 플랫폼 연계 정보를 다음과 같이 관계기관에 개인정보를

+

· 제공할 수 + 있습니다.

+

+  

+

+  

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

제공받는 + 자

+
+

제공 + 목적

+
+

제공 + 항목

+
+

보유·이용기간 +

+
+

  +

+

개인정보 보호위원회

+
+

전분야 마이데이터

+

개인정보전송지원플랫폼

+

이용 시 전송 요구한

+

내역 제공

+
+

회원 가입 여부, + 서비스목록수,

+

서비스목록, + 클라이언트 ID, 전송요구

+

내역 수, + 전송요구 내역 목록,

+

정보제공자 기관코드, 권한 범위,

+

전송요구 일자, + 전송요구 종료 시점

+
+

전분야 마이데이터

+

개인정보전송지원

+

플랫폼 전송 요구

+

내역 조회 서비스

+

목적 달성 시까지

+
+

  +

+

  +

+

개인정보 보호위원회

+
+

전분야 마이데이터

+

개인정보전송지원플랫폼

+

이용 시 제3자 제공

+

동의내역 제공

+
+

동의 내역 수, + 동의 내역 목록, 관리번호,

+

동의서 상태, + 일회성 제공 여부, 철회

+

일시, + 서비스명, 동의서명, 동의일시,

+

제공하는자, + 제공받는자, 제공받는자의

+

이용목적 구분, + 제공받는자의 이용목적,

+

보유 및 이용기간, + 제공항목

+
+

전분야 마이데이터

+

개인정보전송지원

+

플랫폼 제3자 제공

+

동의내역 조회 서비스

+

목적 달성시까지

+
+

  +

+

  +

+

신용정보원

+
+

전분야 마이데이터

+

개인정보전송지원플랫폼

+

이용 시 전송 요구한

+

내역 제공

+
+

회원 가입 여부, + 서비스목록수, 서비스목록,

+

클라이언트 ID, + 전송요구 내역 수,

+

전송요구 내역 목록, 정보제공자 기관코드,

+

권한 범위, + 전송요구 일자, 전송 요구

+

종료 시점

+
+

전분야 마이데이터

+

개인정보전송지원

+

플랫폼 전송요구내역

+

조회 서비스 목적

+

달성 시까지

+
+

  +

+

  +

+

신용정보원

+
+

전분야 마이데이터

+

개인정보전송지원플랫폼

+

이용 시 제3자 제공

+

동의내역 제공

+
+

동의 내역 수, + 동의 내역 목록,

+

관리번호, + 동의서 상태, 일회성 제공 여부,

+

철회 일시, + 서비스명, 동의서명, 동의일시,

+

제공하는자, + 제공받는자, 제공받는자의

+

이용목적 구분, + 제공받는자의 이용목적,

+

보유 및 이용기간, + 제공항목

+
+

전분야 마이데이터

+

개인정보전송지원

+

플랫폼 제3자 제공

+

동의내역 조회 서비스

+

목적 달성시까지

+
+

+  

+

+ • 당행은 다음과 같이 정보주체의 동의 없이 관계기관에 개인정보를 제공할 수 있습니다.

+ + + + + + + + + + + + + + + + + +
+

+ 관련근거 +

+
+

+ 제공받는 + 자

+
+

+ 제공목적 +

+
+

+ 제공항목 +

+
+

+ 보유 + 및 이용기간

+
+

개인정보보호법 제17조제1항제2,

+

15조제1항제2(법률에 특별한

+

규정), + 소득세법 제165(소득공제

+

및 세액공제 증명서류의 제출 및

+

행정지도)

+
+

국세청

+
+

연말정산

+

간소화를 위한

+

증명서류 발급

+
+

이름,

+

주민등록번호,

+

공제대상

+

금융상품 내역

+
+

제공받은 날로부터

+

5

+
+

+  

+

+ • 당행은 다음과 같이 재난, 감염병, 급박한 생명·신체 위험을 초래하는 사건사고, 급박한 재산 손실 등의 긴급

+

+     상황이 발생하는 경우 정보 주체의 동의 없이 관계기관에 개인정보를 제공할 수 있습니다.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

분류 +

+
+

근거법령 +

+
+

제공기관 +

+
+

제공되는 + 개인정보

+
+

+ 재난대응

+
+

재난안전법 제74조의3

+

(정보 제공 요청 등) +

+
+

중앙대책본부

+

또는

+

지역대책본부

+
+

성명, + 주민등록번호, 주소 및 전화번호

+

(휴대전화번호 포함) +

+

이동경로 파악 및 수색·구조를 + 위한

+

CCTV를 통해 수집된 정보, + 직불카드

+

사용일시, + 사용장소

+
+

감염병의 예방 및

+

관리

+
+

감염병예방법 제76조의2

+

(정보 제공 요청 및 정보

+

확인 등)

+
+

질병관리청

+

또는

+

전국 시·도

+
+

성명, + 주민등록번호, 주소 및 전화번호

+

(휴대전화번호 포함) +

+

이동경로를 파악하기 위한「여신전문금융업법」에 +

+

따른 직불카드 사용명세

+

「개인정보 보호법」에 따른 영상정보처리 +

+

기기를 통하여 수집된 영상정보

+
+

실종아동·정신

+

장애인·치매환자

+

등 발견

+
+

실종아동법 제9

+
+

경찰관서

+
+

인터넷주소, + 본인확인 관련자료

+
+

생계곤란 등의

+

위기상황 대처

+
+

긴급복지지원법 제7조의2

+

(위기상황의 발굴) +

+
+

국가 및

+

지방자치단체

+
+

생활이 곤란한 경우 등에 대한 긴급한 + 생계

+

지원 대상 발굴에 필요한 최소한의 정보 +

+
+

자살위험자 보호

+
+

자살예방법 제19조의3

+

(긴급구조대상자 구조를

+

 위한 정보 제공요청 등)

+
+

경찰관서

+

해양경찰

+

소방관서

+
+

긴급구조대상자의 성명, 주민등록번호

+

(주민등록번호가 없는 경우 생년월일), + 주소,

+

전화번호, + 아이디, 전자우편주소

+
+

납치, + 감금 등

+

범죄와 관련된

+

자의 개인정보

+

처리

+
+

개인정보 보호법 제18

+

2항 + 제7(개인정보의

+

목적 외 이용·제공 제한)

+
+

경찰관서

+
+

CCTV + 등 영상정보

+
+

전기통신사업법 제83

+

(통신비밀의 보호) +

+
+

수사관서

+
+

이용자의 성명, + 주민등록번호, 주소, 전화번호, +

+

아이디, + 가입일 또는 해지일

+
+

+  

+

+

+

+ ① 당행은 원활한 개인정보 업무처리를 위하여 다음 각 호와 + 같이 개인정보 처리업무를 위탁하고 있습니다.

+

+ 1. 수탁업체

+

+ - 홈페이지 > + 고객센터 > KJB보안센터 > 개인정보보호 활용체제 + > 수탁업체 참조

+

+  

+

+ 2. 수탁의 목적

+

+ - (금융)거래의 + 설정·유지·이행·관리 등에 필요한 위탁받은 업무의 수행

+

+ - 상품·서비스의 제공 및 홍보·판매 + 권유 등에 필요한 위탁받은 업무의 수행

+

+  

+

+ 3. 개인정보 제공항목

+

+ - 수집·이용에 동의한 정보중 위탁업무 목적 달성을 + 위해 필요한 정보에 한함.

+

+  

+

+ ※ 본 동의 이전에 수집된 개인(신용)정보도 포함됩니다.

+

+  

+

+ ② 당행은 위탁계약 시 + 개인정보보호 관련 법규의 준수,「개인정보 보호법」제26조에 따라 위탁업무 수행목적 외 개인정보 처리 + 금지, 기술적·관리적 보호조치, 재위탁 제한, + 수탁자에 대한 관리·감독, 손해배상 등 책임에 관한 사항을 계약서 등 문서에 명시하여 당해 계약내용을 서면 및 전자 보관하고 + 있고, 수탁자가 개인정보를 안전하게 처리하는지를 감독하고 있습니다.

+

+ ③ 위탁업무의 내용이나 + 수탁업체 변경 시 개인정보처리방침을 통해 공개하도록 하겠습니다.

+

+ ④「개인정보보호법」 제26조 제6항에 따라 수탁자가 당사의 개인정보 처리업무를 재위탁하는 경우 당행의 동의를 받고 있습니다.

+

+  

+

+

+

+ ① 정보주체는 당행에 대해 언제든지 개인정보 + 열람·정정·삭제·처리정지 및 철회 요구, 자동화된 결정에 대한 거부 또는 설명 요구 등의 권리를 행사할 수 + 있습니다. 권리행사는 영업점 또는 인터넷 홈페이지(www.kjbank.com), 고객센터를 통하여 하실 수 있으며, + 당행은 이에 대해 지체없이 조치하겠습니다.

+

+  

+

+ ② 만14세 미만 아동에 관한 개인정보의 열람 등 요구는 + 법정대리인이 직접 요청해야 하며, 14세 이상의 미성년자인 정보주체는 정보주체의 개인정보에 관하여 미성년자 + 본인이 권리를 행사하거나 법정대리인을 통하여 권리를 행사할 수 있습니다

+

+  

+

+ ③ 자신의 개인정보를 열람한 정보주체는 사실과 다르거나 + 확인할 수 없는 개인정보에 대하여 당행에 정정 또는 삭제를 요구할 수 있습니다. 다만, 다른 법령에서 그 + 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다.

+

+  

+

+ ④ 정보주체는 당행에 대하여 자신의 개인정보 처리의 정지를 + 요구할 수 있습니다. 다만 다음 각 호의 어느 하나에 해당하는 경우에는 당행은 해당 사유를 정보주체에게 알리고, + 처리정지 요구를 거절할 수 있습니다.

+

+ 1. 법률에 특별한 규정이 있거나 법령상 의무를 준수하기 위하여 + 불가피한 경우

+

+ 2. 다른 사람의 생명·신체를 해할 우려가 있거나 다른 + 사람의 재산과 그 밖의 이익을 부당하게 침해할 우려가 있는 경우

+

+ 3. 개인정보를 처리하지 아니하면 정보주체와 약정한 서비스를 + 제공하지 못하는 등 계약의 이행이 곤란한 경우로서 정보주체가 그 계약의 해지 의사를 명확하게 밝히지 아니한 경우

+

+  

+

⑤ 자동화된 결정이 이루어진다는 사실에 대해 정보주체의 동의를 + 받았거나, 계약 등을 통해 미리 알린 경우, 법률에 명확한 규정이 있는 경우에는 자동화된 결정에 대한 거부는 + 인정되지 않으며 설명 및 검토 요구만 가능합니다. 또한 자동화된 결정에 대한 거부·설명 요구는 다른 사람의 + 생명·신체·재산과 그 밖에 이익을 부당하게 침해할 우려가 있는 등 정당한 사유가 있는 경우에는 그 요구가 거절될 수 있습니다.

+

⑥ 당행은 정보주체 권리에 따른 열람의 요구,정정·삭제의 요구,처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인 인지를 + 확인합니다.

+

⑦ 권리 행사는 본인 또는 정보주체의 법정대리인이나 위임을 받은 자 등 + 대리인을 통하여 하실 수 있습니다.

+

이 경우“개인정보 처리 방법에 관한 고시”별지 + 제11호 서식에 따른 위임장을 제출하셔야 합니다.

+

 

+

※ 권리행사방법

+

+ 1.개인정보 열람.정정(당행 영업점 또는 인터넷홈페이지)

+

+ 개인뱅킹>마이뱅킹관리>개인정보조회/변동

+

+ 2.개인정보 동의철회의 권리행사(당행 영업점 또는 인터넷홈페이지)

+

+ 개인뱅킹>마이뱅킹관리>개인(신용)정보 수집·이용·제공 동의서(상품서비스 안내등)

+

+ 3.개인정보 삭제·처리 정지 요구의 권리행사(당행 영업점)

+

+ 4.자동화된 결정의 거부 및 설명요구(당행 영업점 또는 인터넷홈페이지)

+

+ 개인뱅킹>KJB서비스>고객센터>고객상담>직원상담

+

 

+

▷ 영업점 : 방문하여 신청(이용시간: 09:00~16:00)

+

▷ 인터넷뱅킹 : 인터넷뱅킹 홈페이지(WWW.kjbank.com) (이용시간: + 24시간)

+

▷ 고객센터 : 062-239-5000 , + 1588-3388

+

+  

+

+  

+

+  

+

+

+

+ ① 당행은 만 + 14세 미만 아동의 개인정보를 처리하기 위하여 동의가 필요한 경우에는 해당 아동의 법정대리인으로부터 동의를 받습니다. +

+

+  

+

+ ② 당행은 만 + 14세 미만 아동의 개인정보 처리에 관하여 그 법정대리인의 동의를 받을 때에는 아동에게 법정대리인의 성명, 연락처와 같이 최소한의 + 정보를 요구할 수 있으며, 법정대리인으로부터 서면 또는 법정대리인의 휴대전화 본인확인 등을 통하여 동의여부를 확인합니다.

+

+  

+

+ ③ 만 + 14세 미만 아동의 법정대리인은 그 아동의 개인정보에 대한 열람·정정·삭제 요구 등의 권리를 행사할 수 있습니다.

+

+  

+

+

+

+ 당행은 다음과 같은 개인정보 법적 근거로 정보주체의 + 개인정보를 수집 및 이용합니다.

+

+  

+

+ ① 정보주체의 동의를 받지 않고 처리하는 개인정보 + 항목

+

+  당행은 다음의 개인정보 항목을 정보주체의 동의 없이 처리하고 + 있습니다.

+

+  <법령상 의무를 준수하기 위하여 불가피한 경우>

+ + + + + + + + + + + + + + + + + + + + + + + +
+

구분 +

+
+

법적 + 근거

+
+

수집·이용항목 +

+
+

금융거래 시 실명확인 +

+
+

+ 개인정보보호법 제15조 제1항 제2(‘법령상

+

+ 의무 + 준수’), 금융실명거래 및 비밀보장에

+

+ 관한 법률 제3(금융실명거래) 1

+
+

성명, 주민등록번호, 연락처, + 실명확인증표 사본

+
+

고객확인의무 이행 및 신원확인 + 업무 수행

+
+

특정 + 금융거래정보의 보고 및 이용 등에 관한

+

법률 + 제5조의2 및 동법 시행령 제10조의4

+
+

성명, 주민등록번호 등 실지명의, 주소, + 연락처, 생년월일, 성별, + 주소, 계좌번호

+
+

전자금융거래 내용 추적 및 + 검색, 보안정책 수립, 사고 방지

+
+

개인정보보호법 제15조 제1항 제2(‘법령상

+

의무 + 준수’), 전자금융거래법 제21(안전성의

+

확보의무) 1항 및 제2, 22(전자금융거래 +

+

기록의 + 생성·보존 및 + 파기)1

+
+

- 전자금융거래의 내용 추적 및 검색 + 정보 : 고객 아이디, 접속일시, IP + Address, MAC address, HDD장치정보, OS정보, + 앱토큰정보, 기기식별정보

+

- 보안정책 수립용 통계자료 : 개인방화벽 설정, 운영체제 종류, + 운영체제 주요 보안패치 여부, 방화벽 설정, 원격접속 설정, 브라우저 정보, 키보드 타입

+

- 전자금융거래 사고 방지를 위한 + 정보 : 단말에 설치된 앱 중 위협이 될 수 있는 앱

+
+

+  

+

+ ② 정보주체의 동의를 받아 처리하는 개인정보 + 항목

+

+ 당행은 다음의 개인정보 항목을 개인정보보호법 제15조 제1항 제1호 및 제22조 제1항 제7호에 따라 정보주체의 동의를 받아 (금융)거래의 설정·유지·이행·관리 및 상품서비스의 제공을 위한 + 필수적정보 및 선택적정보를 다음 각 호와 같이 수집·이용하고 있습니다.

+

+ 1. (금융)거래 + 관련

+

+ 필수적 정보

+

+ . + 개인식별정보 : 성명, 고유식별정보(주민등록번호, 외국인등록번호, 여권번호, 운전면허번호), 연계정보(CI),

+

+  국내거소신고번호, + 국적, 직업군, 주소(자택, 직장), 전자우편 주소, 연락처(자택, 직장,

+

+ 휴대전화번호)

+

+ . + (금융)거래정보: 상품종류, + 거래조건(금액, 이자율, 만기, 담보), 거래일시, 금융거래내역, (금융)거래의 설정·유지·이행·관리를 위한 상담을 통해 생성되는 + 정보

+

+ . + 신용평가를 위한 정보(여신 등 거래에 한함)

+

+   - 신용거래정보 : + 대출(단기카드대출 포함), 신용(체크)카드, 개인채무보증 거래 설정 내역 정보

+

+ - 신용능력정보: + 재산·채무·소득의 총액, 납세실적, 담보현황, 신용거래능력을 판단할 수 있는 정보

+

+ - 신용도판단정보: + 연체, 대위변제, 대지급, 부도, 관련인정보, 신용도를 판단할 수 있는 정보

+

+ - 공공정보 : + 체납정보, 회생·파산·면책 정보, 신용회복지원정보, 개인신용평점정보

+

+   . 본인확인을 + 위한 정보 : 생체인식정보(얼굴사진 특징 정보) +

+

+ . 기타 + 금융거래의 설정·유지·이행·관리를 위한 상담, 채권관리 등을 통해 생성되는 정보

+

+  

+

+ 선택적 정보

+

+ - 상품별 금리·한도·수수료 우대 및 + 부가서비스 등의 혜택 제공을 위한 정보 : 1가구 3자녀 여부, + 60세이상 부모 또는 조부모 부양자 여부, 그린차보유 여부, + 근로장려금수급자 여부, 기초생활수급권자 여부, 다문화가정 여부, 한부모가정 여부, 차상위계층여부, 65세 이상 고령자 여부, 소년소녀가장 여부, 배우자 + 동일상품가입여부, 차량번호, 급여일

+

+  

+

+ 2. 상품 및 서비스 홍보 및 판매 권유(선택적 정보)

+

+  - 일반개인정보 : + 성명, 생년월일, 성별, 연락처, 주소, 국적, 이메일, + 직장정보, SNS계정, 가족사항, + 연계정보(CI), 행태정보

+

+  - 신용거래정보 : + 금융거래설정정보, 금융거래내역, 거래유형, + 상품종류, 거래조건, 거래일시, 금액, 자산정보, ‘오픈뱅킹서비스 이용 시 타 금융기관에 보유중인 상품의 상품명, 계좌번호, 잔액, 거래내역’.  전송요구권을 통해 수집한 신용거래정보(여신성거래정보, 보험거래정보, 금융투자상품거래정보, 그 외 금융거래정보, 상거래정보), 소득정보, 재산정보, 직업정보

+

+  

+

+ 3. 전자금융거래법에 따른 수집 정보(온라인 거래에 한함)

+

+ . + 전자금융거래의 내용 추적 및 검색: 고객 아이디, 접속 일시, + IP Address, HDD Serial, MAC Address

+

+ . + 보안정책 수립용 통계자료: 개인방화벽 설정, 운영체제 종류, + 브라우저 버전, 키보드 타입 등

+

+ . 안전한 + 금융거래를 위한 정보 : 전자금융거래 사고 방지를 위해 단말에 설치된 앱 중 위협이 될 수 있는 항목에 한해 수집

+

+  

+

+ 4. 통계작성, + 과학적 연구, 공익적 기록보전 목적

+

+  

+

+ ※ 당행은 고객의 사생활을 침해할 우려가 있는 민감정보에 + 대해서는 원칙적으로 수집하지 않으며, 필요한 경우 고객의 별도 동의를 받아 수집하고 동의 목적을 위해서만 제한적으로 이용합니다.

+

+  

+

+

+

+ 쿠키(cookie)

+

+ • + 당행은 이용자에게 사용자 인증, 사용성 개선, 고객특화 서비스를 제공하기 위해 이용정보를 저장하고 수시로 + 불러오는 ‘쿠키(cookie)’를 사용합니다.

+

+ • + 쿠키는 웹사이트를 운영하는데 이용되는 서버(http)가 정보주체의 브라우저에 보내는 소량의 정보이며 정보주체의 PC + 또는 모바일에 저장됩니다.

+

+ • + 정보주체는 웹 브라우저 옵션 설정을 통해 쿠기 허용, 차단 등의 설정을 할 수 있습니다. 다만, 쿠키 저장을 거부할 경우 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다.

+

+ 쿠키 + 설정 거부 방법

+

+ • + 웹 브라우저에서 쿠키 허용/차단

+

+ - + 크롬(Chrome): 웹 브라우저 설정 > 개인정보 보호 및 보안 > + 인터넷 사용 기록 삭제

+

+ - + 엣지(Edge): 웹 브라우저 설정 > 쿠키 및 사이트 권한 > + 쿠키 및 사이트 데이터 관리 및 삭제

+

+ • + 모바일 브라우저에서 쿠키 허용/차단

+

+ - + 크롬(Chrome): 모바일 브라우저 설정 > 개인정보 보호 및 보안 + > 인터넷 사용 기록 삭제

+

+ - + 사파리(Safari): 모바일 기기 설정 > 사파리(Safari) > + 고급 > 모든 쿠키 차단

+

+ - + 삼성 + 인터넷: 모바일 브라우저 설정 > 인터넷 사용 기록 > + 인터넷 사용 기록 삭제

+

+   +

+

+

+

+ • 당행은 서비스 이용과정에서 사용자에게 최적화된 + 맞춤형 서비스 및 혜택, 온라인 맞춤형 광고 등을 제공하기 위하여 쿠키를 활용하여 행태정보를 수집·이용하고 있습니다.

+

+ 당행은 디파이너리(DFINERY)에서 제공하는 adbrix를 사용하고 있고, adbrix를 통하여 제1항의 + 행태정보를 수집·처리하게 되며, 이 경우에도 개인을 식별할 수 없는 정보만 수집됩니다.

+

+ • 행태정보란 웹 사이트 방문 이력, 앱 사용 이력, 구매 및 검색 이력 등 이용자의 관심, 성향 + 등을 파악하고 분석할 수 있는 온라인상의 이용자 활동정보를 말합니다.

+

+ • 당행은 최적화된 맞춤형 서비스 및 + 혜택, 온라인 맞춤형 광고 등에 필요한 최소한의 행태정보만을 수집하며, 사상, 신념, 가족 및 친익척관계, 학력병력, 기타 사회활동 경력 등 개인의 권리이익이나 사생활을 뚜렷하게 침해할 우려가 있는 민감한 행태정보를 수집하지 않습니다.

+

+ • 당행은 만14세 미만임을 알고 있는 아동에게 맞춤형 광고를 제공하려는 경우 사전에 법정대리인의 동의를 받고 있으며, + 이외에는 맞춤형 광고를 목적으로 아동의 행태정보를 수집하지 않고, 아동에게 맞춤형 광고를 제공하지 않습니다.

+

+ 수집하는 행태정보 항목

+

+ - /앱 서비스 + 방문기록, 검색·클릭 등 사용기록, 광고 식별자(ADID/IDFA)

+

+ 행태정보 수집 방법

+

+ - 이용자가 웹/앱 + 내에서 행해지는 주요행동에 대해 생성 정보 수집 툴을 통해 자동 수집 전송

+

+ * 법적 근거 : + 개인정보 보호법 제15조 제1항 제1

+

+ 행태정보 수집 목적

+

+ - 상품·서비스 개발 및 통계, 고객분석 등 이용자 분석, 이용자 행태정보 기반 맞춤형 광고제공

+

+ 행태정보 보유·이용기간 및 이후 정보처리 방법

+

+ - 수집일로부터 최대 + 3년간 보유·이용되며, 이용기간 종료 시 행태정보는 지체없이 삭제

+

+ 이용자 통제권 행사 방법

+

+ - 정보주체는 웹 브라우저의 쿠키 설정 변경 등을 통해 맞춤형 + 광고를 일괄적으로 차단·허용할 수 있습니다. 다만, 쿠키 설정 변경은 웹사이트 자동로그인 등 + 일부 서비스의 이용이 제한될 수 있습니다.

+

+ - 웹 브라우저를 통한 맞춤형 광고 차단/허용

+

+ - 크롬(Chrome)

+

+ Chrome에서 오른쪽 상단 ‘’ 표시를 클릭한 후 「설정」 표시를 + 클릭합니다.

+

+ 설정 페이지 좌측에 「개인정보 보호 및 보안」을 + 클릭하고, 「인터넷 사용기록 삭제」를 클릭하여 인터넷 사용기록 삭제 여부를 선택합니다.

+

+ 동일하게 설정 페이지 좌측에 「개인정보 보호 및 보안」을 + 클릭하고, 「서드파티쿠키」를 클릭하 여 「서드파티쿠키 차단」 여부를 선택합니다.

+

+ - 엣지(Edge) +

+

+ Edge에서 오른쪽 상단 ‘…’ + 표시를 클릭한 후, 「설정」을 클릭합니다.

+

+ 설정 페이지 좌측에 「개인정보, 검색 및 서비스」를 클릭 후, 「추적방지」 섹션에서 「추적방지」 여부 및 수준을 선택합니다.

+

+ InPrivate를 검색할 때 항상 “엄격” 추적 방지 사용」 여부를 선택합니다.

+

+ - 정보주체는 모바일 단말기의 설정 변경을 통해 앱의 맞춤형 + 광고를 차단·허용할 수 있습니다.

+

+ - 모바일 단말기의 광고식별자 차단/허용

+

+ - 안드로이드 : + ① 설정 → ② 보안 및 개인정보보호 → ③ 개인정보 보호 → ④ 기타 개인정보 설정 → ⑤ 광고 → ⑥ 광고ID 재설정 또는 광고ID 삭제

+

+ - 아이폰 : ① + 설정 → ② 개인정보 보호 및 보안 → ③ 추적 → ④ 앱추적 허용 해제

+

+ ( OS버전에 + 따라 방법이 다소 상이할 수 있습니다.)

+

+ 이용자 피해구제 방법

+

+ - 정보주체는 아래의 연락처로 행태정보와 관련하여 궁금한 사항과 + 거부권 행사, 피해 신고 접수 등을 문의할 수 있습니다.

+

+ - 관련부서 및 고객문의 : + 광주은행 디지털플랫폼부 ( 1588-3388)

+

  +

+

+

+ ① 당행은 개인정보의 보유기간이 경과된 경우에는 다음 각 + 호의 사유가 없는 한 보유기간의 종료일로부터 5영업일 이내에, 개인정보의 처리 목적 달성, 해당 서비스의 폐지, 사업의 종료 등 그 개인정보가 불필요하게 되었을 때에는 다음 각 호의 사유가 없는 한 + 개인정보의 처리가 불필요한 것으로 인정되는 날로부터 5영업일 이내에 그 개인정보를 파기합니다. +

+

+ 1. 신용정보집중기관 또는 신용조회회사가 신용정보의 + 집중관리·활용 또는 개인의 신용도 등을 평가하기 위한 목적으로 개인신용정보를 보유하는 경우(보유기간에 한함)

+

+ 2. 신용정보회사 등이 민·형사상의 책임 또는 시효가 + 지속되거나 분쟁의 입증자료로서 개인신용정보를 보유하는 경우

+

+ 3. 법령에 따라 보존하여야 하는 경우

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

보존 + 근거

+
+

보존하는 + 개인정보 항목

+
+

보유기간 +

+
+

상법 + 제33

+
+

계약서, 거래 신청서 등 영업에 관한 중요 서류

+
+

10

+
+

전표 + 등 이와 유사한 서류

+
+

5

+
+

신용정보의 이용 및 보호에 관한 + 법률 제20조의2

+
+

계좌 + 개설 및 거래내역 등 금융거래정보

+
+

금융거래 등 상거래관계가 종료된 + 날부터 최장 5년 이내

+
+

소득세법 시행령 제201조의10

+
+

연도별 + 납입액, 인출액, 납입 전환 금액, + 확인 과세 제외 금액 등 연금 확인서 발급을 위한 정보

+
+

별도의 + 기간 제한 없이 보유(영구)

+
+

국세기본법 제26조의2

+

(국세의 부과제척기간) 1

+
+

원천징수에 관한 자료 +

+
+

국세를 + 부과할 수 있는 날로부터 5

+
+

전자문서 및 전자거래 기본법 + 제18조의5(유통증명서의 생성 및 발급) + 1, 동법 시행령 제2조의4(유통정보의 생성·보관) + 2

+
+

공인전자주소를 통하여 전자문서가 + 송신 또는 수신되거나 열람된 경우 생성·보관하는 정보(전자문서 송신자 및 수신자, 공인전자주소)

+
+

10

+
+

 

+

+ 4. 법원의 판결문 등 소송 관련 자료의 경우 (영구 보존)

+

+ 5. 기타 이와 유사한 정당한 사유가 있는 경우

+

+  

+

+ ② 개인정보의 파기의 절차 및 방법

+

+   1. 파기절차

+

+    - 당행은 파기하여야 하는 개인정보(또는 개인정보파일)에 대해 개인정보 파기 계획을 수립하여 파기합니다. + 파기사유가 발생한 개인정보(또는 개인정보파일)를 선정하고, + 당행의 개인정보보호책임자의 승인을 받아 개인정보(또는 개인정보파일)를 파기합니다.

+

+  2. 파기방법

+

+ - 당행은 개인정보가 기록된 출력물, 서면 등은 파쇄 또는 소각의 방법으로 파기하고, 전자적 파일형태의 개인정보는 복원이 불가능한 방법으로 영구 + 삭제하는 방법으로 파기합니다

+

+  

+

+

+

+ ① 당행은 개인정보보호법 제29, 동법 시행령 제30조 등에 따라 다음 각 호와 같이 + 안전성 확보에 필요한 기술적, 관리적, 물리적 조치를 하고 있습니다.

+

+ 1. 관리적 조치

+

+ - 내부관리계획 수립·시행, 전담조직 운영

+

+ - 개인정보 취급 직원의 최소화 및 교육 : 개인정보를 취급하는 직원을 지정하고 담당자에 한정시켜 최소화하여 개인정보를 관리하는 대책을 시행하고 있습니다.

+

+ 2. 기술적 조치

+

+ - 개인정보처리시스템 접근 제한(접근권한 관리) : 개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여, 변경, 말소를 통하여 개인정보에 대한 접근 통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 + 외부로부터의 무단접근을 통제하고 있습니다.

+

+ - 개인정보의 암호화 : + 고객의 고유식별정보, 비밀번호, 연계정보(CI) + 등 개인정보는 암호화 되어 저장 및 관리되고 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화하거나 파일 잠금 기능을 사용하는 등의 별도 보안기능을 사용하고 있습니다.

+

+ - 연계정보의 분리보관 : + 비인가자의 접근 등에 의해 연계정보(CI)와 주민등록번호가 함께 유출되지 않도록 분리하여 보관·관리하고 있습니다.  관련 법령에 의거, + 20275월부터 시행 예정

+

+ - 해킹 등에 대비한 기술적 대책 : 당행은 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 + 접근이 통제된 구역에 시스템을 설치하고 기술적·물리적으로 감시 및 차단하고 있습니다.

+

+ - 보안프로그램 설치 및 갱신

+

+ 3. 물리적 조치

+

+  - 전산실, + 자료보관실 등의 접근 통제

+

+  

+

+

+

+ 당행은 「개인정보 보호법」 제15조제3항 및 제17조제4항에 따라 「개인정보 보호법 시행령」 제14조의2에 따른 사항을 + 고려하여 정보주체의 동의 없이 개인정보를 추가적으로 이용·제공할 수 있습니다.

+

+ 이에 따라 당행은 정보주체의 동의 없이 추가적인 + 이용·제공을 하기 위해서 다음 사항을 고려하였습니다.

+

+ - 개인정보를 추가적으로 이용·제공하려는 목적이 당초 + 수집목적과 관련 있는지 여부

+

+ - 개인정보를 수집한 정황 또는 처리 관행에 비추어 볼 때 + 추가적인 이용·제공에 대한 예측 가능성이 있는지 여부

+

+ - 개인정보의 추가적인 이용·제공이 정보주체의 이익을 + 부당하게 침해하는지 여부

+

+ - 가명처리 또는 암호화 등 안전성 확보에 필요한 조치를 하였는지 + 여부

+

+  

+

+

+

+ • + 당행은 정보주체 이외로부터 수집한 개인정보를 처리하는 때에는 정당한 사유가 없는 한 정보주체의 요구가 있은 날로부터 3영업일 이내에 수집 출처, 처리 목적, 개인정보 처리의 정지를 요구할 권리가 있다는 사실을 정보주체에게 알립니다.

+

+ • + 개인정보 보호법 제20조 제4항 각 호에 근거하여 정보주체의 요구를 거부하는 경우에는 정당한 사유가 없는 한 + 정보주체의 요구가 있은 날로부터 3영업일 이내에 그 거부의 근거와 사유를 정보주체에게 알립니다. +

+

+  

+

+

+

+ ① 가명정보의 처리목적

+

+ -「개인정보 보호법」제28조의2에 의해 통계작성, 과학적 연구, 공익적 기록보존 등을 위하여 수집한 개인정보를 알아볼 수 없도록 가명처리할 수 있습니다. 당행이 처리하는 + 가명정보 처리목적은 아래 「가명정보 처리현황」에서 확인할 수 있습니다.

+

+ ② 가명처리하는 개인정보의 항목

+

+ - 당행이 처리하는 가명정보의 종류 및 항목, 이용목적은 아래 「가명정보 처리현황」에서 확인할 수 있습니다.

+

+ ③ 가명정보 처리 및 보유기간

+

+ - 가명정보는 가명처리 계획 수립 시 정한 목적을 달성하는 + 기간(시점)까지만 보유 및 이용됩니다. 당행이 처리하는 + 가명정보의 처리 및 보유기간은 아래 「가명정보 처리현황」에서 확인할 수 있습니다.

+

+ ④ 가명정보의 제3자 제공에 관한 사항

+

+ - 가명정보의 제3자 제공에 관한 사항은 아래 「가명정보 처리현황」에서 확인할 수 있습니다.

+

+ ⑤ 가명정보의 안전성 확보조치에 관한 사항 +

+

+   - 관리적 조치 : + 내부관리계획 수립·이행, 정기적 직원 교육

+

+ - 기술적 조치 : + 개인정보처리시스템 등의 접근권한 관리, 접근통제시스템 설치, 교유식별정보 등의 암호화,                + 보안프로그램 설치

+

+ - 물리적 조치 : + 전산실, 자료보관실 등의 접근 통제

+

+  

+

+ - 홈페이지 > + 고객센터 > KJB보안센터 > 개인정보보호 활용체제 + > 가명정보 처리현황 참조

+

+  

+

+

+

+ 당행이 개인정보 처리방침을 변경하는 경우에는 변경 및 + 시행의 시기, 변경된 내용을 지속적으로 공개하며, 이전의 개인정보 처리방침은 아래(버전정보 보기)에서 확인하실 수 있습니다.

+

+  

+

+  

+

+

+

+ 고객은 아래의 기관에 대해 개인정보 침해에 대한 + 피해구제, 상담 등을 문의하실 수 있습니다. (개정 + 2024.1.30)

+

+ 1. 개인정보분쟁조정위원회 : + 1833-6972 (www.kopico.go.kr)

+

+ 2. 한국인터넷진흥원 개인정보침해신고센터 : 국번없이 118 (privacy.kisa.or.kr)

+

+ 3. 대검찰청 사이버수사과 : + (대검찰청 대표번호) 1301 (www.spo.go.kr)

+

+ 4. 경찰청 사이버범죄 신고시스템 + : 국번없이 182 (ecrm.police.go.kr)

+

+  

+

+

+

+ • + 당행의 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 개인정보 보호법 제31조제1항에 따라 개인정보 보호책임자를 지정하고 있습니다.

+

+ • + 당행의 개인정보 보호법 제31조 제1항에 따른 개인정보보호 책임자는 다음과 같습니다. 정보주체는 당행의 상품 및 서비스를 이용하시면서 발생한 모든 개인정보보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서, 고충사항 처리 담당부서로 문의할 수 + 있습니다. 당행은 정보주체의 문의에 대해 지체없이 답변 및 처리해드릴 것입니다.

+ + + + + + + + + + + + + + + + + + + + + +
+

 

+
+

개인정보 + 보호책임자

+
+

개인정보 + 담당부서

+
+

개인정보 + 담당부서(민원처리)

+
+

+       담 + 당

+
+

부행장 + 이강현

+
+

정보보호부 +

+
+

금융소비자보호부 +

+
+

전화번호/FAX

+
+

062-239-5000 +

+
+

062-239-5861/0505-082-1413 +

+
+

062-239-6762 +

+
+

+  

\ No newline at end of file diff --git a/electron/main.js b/electron/main.js new file mode 100644 index 0000000..168bafc --- /dev/null +++ b/electron/main.js @@ -0,0 +1,149 @@ +import { app, BrowserWindow, ipcMain, dialog } from 'electron'; +import { fileURLToPath } from 'url'; +import path from 'path'; +import fs from 'fs'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const SETTINGS_FILE = path.join(app.getPath('userData'), 'settings.json'); + +let mainWindow; + +function loadSettings() { + try { + if (fs.existsSync(SETTINGS_FILE)) { + return JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf-8')); + } + } catch (err) { + console.error('Failed to load settings:', err); + } + return {}; +} + +function saveSettings(settings) { + try { + const current = loadSettings(); + const updated = { ...current, ...settings }; + fs.writeFileSync(SETTINGS_FILE, JSON.stringify(updated, null, 2)); + } catch (err) { + console.error('Failed to save settings:', err); + } +} + +function createWindow() { + const settings = loadSettings(); + const windowBounds = settings.windowBounds || { width: 1200, height: 800 }; + + mainWindow = new BrowserWindow({ + x: windowBounds.x, + y: windowBounds.y, + width: windowBounds.width, + height: windowBounds.height, + minWidth: 1000, + minHeight: 600, + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + contextIsolation: true, + nodeIntegration: false, + }, + }); + + const isDev = process.env.NODE_ENV === 'development'; + + if (isDev) { + mainWindow.loadURL('http://localhost:5173'); + mainWindow.webContents.openDevTools(); + } else { + // In production, use app.getAppPath() to correctly resolve the ASAR root + const appPath = app.getAppPath(); + mainWindow.loadFile(path.join(appPath, 'dist/index.html')); + } + + // Persist window bounds on change + const saveBounds = () => { + const bounds = mainWindow.getBounds(); + saveSettings({ windowBounds: bounds }); + }; + mainWindow.on('resize', saveBounds); + mainWindow.on('move', saveBounds); +} + +app.whenReady().then(() => { + createWindow(); + + app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } + }); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +// Settings Handlers +ipcMain.handle('get-settings', async () => { + return loadSettings(); +}); + +ipcMain.handle('update-settings', async (event, settings) => { + saveSettings(settings); + return { success: true }; +}); + +// IPC Handler for Image Export +// IPC Handler for Image/PDF/HTML Export +ipcMain.handle('save-image', async (event, dataUrl, format) => { + const isPdf = format === 'pdf'; + const isHtml = format === 'html'; + + let filters = [{ name: 'Images', extensions: [format] }]; + if (isPdf) filters = [{ name: 'PDF Documents', extensions: ['pdf'] }]; + if (isHtml) filters = [{ name: 'HTML Files', extensions: ['html'] }]; + + const { canceled, filePath } = await dialog.showSaveDialog(mainWindow, { + title: isPdf ? 'Save PDF' : (isHtml ? 'Save HTML' : 'Save Image'), + defaultPath: `export.${format}`, + filters: filters, + }); + + if (canceled || !filePath) { + return { success: false, message: 'Cancelled' }; + } + + // Remove header (e.g., "data:image/png;base64," or "data:application/pdf;base64," or "data:text/html;base64,") + const base64Data = dataUrl.replace(/^data:(image\/\w+|application\/pdf|text\/html);base64,/, ''); + + try { + fs.writeFileSync(filePath, base64Data, 'base64'); + return { success: true, filePath }; + } catch (error) { + console.error('Failed to save file:', error); + return { success: false, message: error.message }; + } +}); + +// IPC Handler for HTML Import +ipcMain.handle('open-file', async () => { + const { canceled, filePaths } = await dialog.showOpenDialog(mainWindow, { + title: 'Open HTML File', + filters: [{ name: 'HTML Files', extensions: ['html'] }], + properties: ['openFile'] + }); + + if (canceled || filePaths.length === 0) { + return { success: false, message: 'Cancelled' }; + } + + try { + const content = fs.readFileSync(filePaths[0], 'utf-8'); + return { success: true, content, filePath: filePaths[0] }; + } catch (error) { + console.error('Failed to open file:', error); + return { success: false, message: error.message }; + } +}); diff --git a/electron/preload.js b/electron/preload.js new file mode 100644 index 0000000..1e7e48a --- /dev/null +++ b/electron/preload.js @@ -0,0 +1,8 @@ +const { contextBridge, ipcRenderer } = require('electron'); + +contextBridge.exposeInMainWorld('electronAPI', { + saveImage: (dataUrl, format) => ipcRenderer.invoke('save-image', dataUrl, format), + openFile: () => ipcRenderer.invoke('open-file'), + getSettings: () => ipcRenderer.invoke('get-settings'), + updateSettings: (settings) => ipcRenderer.invoke('update-settings', settings), +}); diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..4fa125d --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..8079672 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + html-to-image + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..08c508e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8076 @@ +{ + "name": "html-to-image", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "html-to-image", + "version": "0.0.0", + "dependencies": { + "@tinymce/tinymce-react": "^6.3.0", + "html-to-image": "^1.11.13", + "jspdf": "^4.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-zoom-pan-pinch": "^3.7.0", + "tinymce": "^8.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "concurrently": "^9.2.1", + "cross-env": "^10.1.0", + "electron": "^39.2.7", + "electron-builder": "^26.0.12", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "vite": "^7.2.4", + "wait-on": "^9.0.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.2.18", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz", + "integrity": "sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/fuses/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/fuses/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/node-gyp": { + "version": "10.2.0-electron.1", + "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "integrity": "sha512-4MSBTT8y07YUDqf69/vSh80Hh791epYqGtWHO3zSKhYFwQg+gx9wi1PqbqP6YqC4WMsNxZ5l9oDmnWdK5pfCKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^8.1.0", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.2.1", + "nopt": "^6.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@electron/node-gyp/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/node-gyp/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/node-gyp/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/node-gyp/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", + "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/rebuild": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", + "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@electron/rebuild/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/rebuild/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/rebuild/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/rebuild/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", + "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.2.7", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/windows-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.4.tgz", + "integrity": "sha512-Fq+20dxsxLaUn5jSSWrdtSRcIUba2JquuorF9UW1wIJS5cSUwxIsO2GIhaWynPRflvxSzFN+gxKte2HEW1OuoA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.53", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", + "integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tinymce/tinymce-react": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@tinymce/tinymce-react/-/tinymce-react-6.3.0.tgz", + "integrity": "sha512-E++xnn0XzDzpKr40jno2Kj7umfAE6XfINZULEBBeNjTMvbACWzA6CjiR6V8eTDc9yVmdVhIPqVzV4PqD5TZ/4g==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0", + "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.1 || ^16.7.0", + "tinymce": "^8.0.0 || ^7.0.0 || ^6.0.0 || ^5.5.1" + }, + "peerDependenciesMeta": { + "tinymce": { + "optional": true + } + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", + "license": "MIT" + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz", + "integrity": "sha512-EcA07pHJouywpzsoTUqNh5NwGayl2PPVEJKUSinGGSxFGYn+shYbqMGBg6FXDqgXum9Ou/ecb+411ssw8HImJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.53", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-bin": { + "version": "5.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", + "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "26.0.12", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.12.tgz", + "integrity": "sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/asar": "3.2.18", + "@electron/fuses": "^1.8.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.1", + "@electron/rebuild": "3.7.0", + "@electron/universal": "2.0.1", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "builder-util": "26.0.11", + "builder-util-runtime": "9.3.1", + "chromium-pickle-js": "^0.2.0", + "config-file-ts": "0.2.8-rc1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.0.11", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.0.0", + "plist": "3.1.0", + "resedit": "^1.7.0", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.0.12", + "electron-builder-squirrel-windows": "26.0.12" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "26.0.11", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.0.11.tgz", + "integrity": "sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.12", + "builder-util-runtime": "9.3.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.3.1.tgz", + "integrity": "sha512-2/egrNDDnRaxVwK3A+cJq6UOlqOdedGA7JPqCeJjN2Zjk1/QB/6QUi3b714ScIGS7HafFXTyzJEOr5b44I3kvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/config-file-ts": { + "version": "0.2.8-rc1", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", + "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.12", + "typescript": "^5.4.3" + } + }, + "node_modules/config-file-ts/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-env": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", + "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dmg-builder": { + "version": "26.0.12", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.12.tgz", + "integrity": "sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.0.12", + "builder-util": "26.0.11", + "builder-util-runtime": "9.3.1", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "39.2.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.7.tgz", + "integrity": "sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "26.0.12", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.0.12.tgz", + "integrity": "sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.0.12", + "builder-util": "26.0.11", + "builder-util-runtime": "9.3.1", + "chalk": "^4.1.2", + "dmg-builder": "26.0.12", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.0.12", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.0.12.tgz", + "integrity": "sha512-kpwXM7c/ayRUbYVErQbsZ0nQZX4aLHQrPEG9C4h9vuJCXylwFH8a7Jgi2VpKIObzCXO7LKHiCw4KdioFLFOgqA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.0.12", + "builder-util": "26.0.11", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "26.0.11", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.11.tgz", + "integrity": "sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "26.0.11", + "builder-util-runtime": "9.3.1", + "chalk": "^4.1.2", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.26.tgz", + "integrity": "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-png": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", + "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", + "license": "MIT", + "dependencies": { + "@types/pako": "^2.0.3", + "iobuffer": "^5.3.2", + "pako": "^2.1.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/html-to-image": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", + "license": "MIT" + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "optional": true, + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "license": "MIT" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/joi": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.0.2.tgz", + "integrity": "sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jspdf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.0.0.tgz", + "integrity": "sha512-w12U97Z6edKd2tXDn3LzTLg7C7QLJlx0BPfM3ecjK2BckUl9/81vZ+r5gK4/3KQdhAcEZhENUxRhtgYBj75MqQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "fast-png": "^6.2.0", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.11", + "core-js": "^3.6.0", + "dompurify": "^3.2.4", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-api-version/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-zoom-pan-pinch": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.7.0.tgz", + "integrity": "sha512-UmReVZ0TxlKzxSbYiAj+LeGRW8s8LraAFTXRAxzMYnNRgGPsxCudwZKVkjvGmjtx7SW/hZamt69NUmGf4xrkXA==", + "license": "MIT", + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/temp/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinymce": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-8.3.1.tgz", + "integrity": "sha512-mdQdTAA90aEIyhEteIwy+QQ6UnxPCd3qQ5MlGvvByOvnjyOSdBzBcmnXeqWuhGz3fIs3XBJjIw7JyIMiHjebqw==", + "license": "SEE LICENSE IN license.md" + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/vite": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/wait-on": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.3.tgz", + "integrity": "sha512-13zBnyYvFDW1rBvWiJ6Av3ymAaq8EDQuvxZnPIw3g04UqGi4TyoIJABmfJ6zrvKo9yeFQExNkOk7idQbDJcuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.13.2", + "joi": "^18.0.1", + "lodash": "^4.17.21", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8988d5a --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "html-to-image", + "private": true, + "version": "0.1.0", + "type": "module", + "main": "electron/main.js", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview", + "electron:dev": "concurrently -k \"cross-env BROWSER=none npm run dev\" \"wait-on http://localhost:5173 && cross-env NODE_ENV=development electron .\"", + "electron:build": "npm run build && electron-builder" + }, + "dependencies": { + "@tinymce/tinymce-react": "^6.3.0", + "html-to-image": "^1.11.13", + "jspdf": "^4.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-zoom-pan-pinch": "^3.7.0", + "tinymce": "^8.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "concurrently": "^9.2.1", + "cross-env": "^10.1.0", + "electron": "^39.2.7", + "electron-builder": "^26.0.12", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "vite": "^7.2.4", + "wait-on": "^9.0.3" + }, + "build": { + "appId": "com.example.html-to-image", + "productName": "html-to-image", + "files": [ + "dist/**/*", + "electron/**/*", + "package.json" + ], + "directories": { + "output": "dist" + } + } +} \ No newline at end of file diff --git a/public/fonts/NotoSansKR-Regular.otf b/public/fonts/NotoSansKR-Regular.otf new file mode 100644 index 0000000..cabb73b --- /dev/null +++ b/public/fonts/NotoSansKR-Regular.otf @@ -0,0 +1,1447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/public/fonts/NotoSansKR-Regular.woff2 b/public/fonts/NotoSansKR-Regular.woff2 new file mode 100644 index 0000000..b0f0e6e --- /dev/null +++ b/public/fonts/NotoSansKR-Regular.woff2 @@ -0,0 +1,11 @@ + + + + + Error 404 (Not Found)!!1 + + +

404. That’s an error. +

The requested URL /s/notosanskr/v27/PbykFmXiEBPT4ITbgNA5Cgm20xz64Vxxh10.woff2 was not found on this server. That’s all we know. diff --git a/public/tinymce/icons/default/icons.js b/public/tinymce/icons/default/icons.js new file mode 100644 index 0000000..c394193 --- /dev/null +++ b/public/tinymce/icons/default/icons.js @@ -0,0 +1,239 @@ +tinymce.IconManager.add('default', { + icons: { + 'accessibility-check': '', + 'accordion-toggle': '', + 'accordion': '', + 'action-next': '', + 'action-prev': '', + 'add-file': '', + 'addtag': '', + 'adjustments': '', + 'ai-prompt': '', + 'ai': '', + 'align-center': '', + 'align-justify': '', + 'align-left': '', + 'align-none': '', + 'align-right': '', + 'alt-text': '', + 'arrow-left': '', + 'arrow-right': '', + 'auto-image-enhancement': '', + 'blur': '', + 'bold': '', + 'bookmark': '', + 'border-style': '', + 'border-width': '', + 'box': '', + 'brightness': '', + 'browse': '', + 'camera': '', + 'cancel': '', + 'caption': '', + 'cell-background-color': '', + 'cell-border-color': '', + 'change-case': '', + 'character-count': '', + 'checklist-rtl': '', + 'checklist': '', + 'checkmark-filled': '', + 'checkmark': '', + 'chevron-down': '', + 'chevron-left': '', + 'chevron-right': '', + 'chevron-up': '', + 'close-filled': '', + 'close': '', + 'code-sample': '', + 'color-levels': '', + 'color-picker': '', + 'color-swatch-remove-color': '', + 'color-swatch': '', + 'comment-add': '', + 'comment': '', + 'contrast': '', + 'copy': '', + 'crop': '', + 'cut-column': '', + 'cut-row': '', + 'cut': '', + 'document-gear-properties': '', + 'document-properties': '', + 'drag': '', + 'dropbox': '', + 'duplicate-column': '', + 'duplicate-row': '', + 'duplicate': '', + 'edit-block': '', + 'edit-image': '', + 'embed-page': '', + 'embed': '', + 'emoji': '', + 'evernote': '', + 'export-pdf': '', + 'export-word': '', + 'export': '', + 'exposure': '', + 'fb': '', + 'feedback': '', + 'fill': '', + 'flickr': '', + 'flip-horizontally': '', + 'flip-vertically': '', + 'folder': '', + 'footnote': '', + 'format-code': '', + 'format-painter': '', + 'format': '', + 'fullscreen': '', + 'gallery': '', + 'gamma': '', + 'google-drive': '', + 'google-photos': '', + 'grayscale': '', + 'help': '', + 'highlight-bg-color': '', + 'home': '', + 'horizontal-rule': '', + 'huddle': '', + 'image-decorative': '', + 'image-enhancements': '', + 'image-options': '', + 'image': '', + 'import-word': '', + 'indent': '', + 'info': '', + 'insert-character': '', + 'insert-time': '', + 'instagram': '', + 'invert': '', + 'italic': '', + 'language': '', + 'line-height': '', + 'line': '', + 'link': '', + 'list-bull-circle': '', + 'list-bull-default': '', + 'list-bull-disc': '', + 'list-bull-square': '', + 'list-num-default-rtl': '', + 'list-num-default': '', + 'list-num-lower-alpha-rtl': '', + 'list-num-lower-alpha': '', + 'list-num-lower-greek-rtl': '', + 'list-num-lower-greek': '', + 'list-num-lower-roman-rtl': '', + 'list-num-lower-roman': '', + 'list-num-upper-alpha-rtl': '', + 'list-num-upper-alpha': '', + 'list-num-upper-roman-rtl': '', + 'list-num-upper-roman': '', + 'lock': '', + 'ltr': '', + 'math-equation': '', + 'mentions': '', + 'minus': '', + 'more-drawer': '', + 'new-document': '', + 'new-tab': '', + 'non-breaking': '', + 'notice': '', + 'onedrive': '', + 'ordered-list-rtl': '', + 'ordered-list': '', + 'orientation': '', + 'outdent': '', + 'page-break': '', + 'paragraph': '', + 'paste-column-after': '', + 'paste-column-before': '', + 'paste-row-after': '', + 'paste-row-before': '', + 'paste-text': '', + 'paste': '', + 'permanent-pen': '', + 'photo-filter': '', + 'plus': '', + 'preferences': '', + 'preview': '', + 'print': '', + 'quote': '', + 'redo': '', + 'reload': '', + 'remove-formatting': '', + 'remove': '', + 'resize-handle': '', + 'resize': '', + 'restore-draft': '', + 'revert-changes': '', + 'revision-history': '', + 'rotate-left': '', + 'rotate-right': '', + 'rtl': '', + 'saturation': '', + 'save': '', + 'search': '', + 'select-all': '', + 'selected': '', + 'send': '', + 'settings': '', + 'sharpen': '', + 'sourcecode': '', + 'spell-check': '', + 'strike-through': '', + 'subscript': '', + 'suggestededits-badge': '', + 'suggestededits': '', + 'superscript': '', + 'table-caption': '', + 'table-cell-classes': '', + 'table-cell-properties': '', + 'table-cell-select-all': '', + 'table-cell-select-inner': '', + 'table-classes': '', + 'table-delete-column': '', + 'table-delete-row': '', + 'table-delete-table': '', + 'table-insert-column-after': '', + 'table-insert-column-before': '', + 'table-insert-row-above': '', + 'table-insert-row-after': '', + 'table-left-header': '', + 'table-merge-cells': '', + 'table-row-numbering-rtl': '', + 'table-row-numbering': '', + 'table-row-properties': '', + 'table-split-cells': '', + 'table-top-header': '', + 'table': '', + 'template-add': '', + 'template': '', + 'temporary-placeholder': '', + 'text-color': '', + 'text-size-decrease': '', + 'text-size-increase': '', + 'toc': '', + 'transform-image': '', + 'translate': '', + 'typography': '', + 'underline': '', + 'undo': '', + 'unlink': '', + 'unlock': '', + 'unordered-list': '', + 'unselected': '', + 'upload-from-device': '', + 'upload-from-link': '', + 'upload': '', + 'user': '', + 'vertical-align': '', + 'vibrance': '', + 'visualblocks': '', + 'visualchars': '', + 'vk': '', + 'warmth': '', + 'warning': '', + 'zoom-in': '', + 'zoom-out': '', + } +}); \ No newline at end of file diff --git a/public/tinymce/icons/default/icons.min.js b/public/tinymce/icons/default/icons.min.js new file mode 100644 index 0000000..9d5205b --- /dev/null +++ b/public/tinymce/icons/default/icons.min.js @@ -0,0 +1 @@ +tinymce.IconManager.add("default",{icons:{"accessibility-check":'',"accordion-toggle":'',accordion:'',"action-next":'',"action-prev":'',"add-file":'',addtag:'',adjustments:'',"ai-prompt":'',ai:'',"align-center":'',"align-justify":'',"align-left":'',"align-none":'',"align-right":'',"alt-text":'',"arrow-left":'',"arrow-right":'',"auto-image-enhancement":'',blur:'',bold:'',bookmark:'',"border-style":'',"border-width":'',box:'',brightness:'',browse:'',camera:'',cancel:'',caption:'',"cell-background-color":'',"cell-border-color":'',"change-case":'',"character-count":'',"checklist-rtl":'',checklist:'',"checkmark-filled":'',checkmark:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"close-filled":'',close:'',"code-sample":'',"color-levels":'',"color-picker":'',"color-swatch-remove-color":'',"color-swatch":'',"comment-add":'',comment:'',contrast:'',copy:'',crop:'',"cut-column":'',"cut-row":'',cut:'',"document-gear-properties":'',"document-properties":'',drag:'',dropbox:'',"duplicate-column":'',"duplicate-row":'',duplicate:'',"edit-block":'',"edit-image":'',"embed-page":'',embed:'',emoji:'',evernote:'',"export-pdf":'',"export-word":'',export:'',exposure:'',fb:'',feedback:'',fill:'',flickr:'',"flip-horizontally":'',"flip-vertically":'',folder:'',footnote:'',"format-code":'',"format-painter":'',format:'',fullscreen:'',gallery:'',gamma:'',"google-drive":'',"google-photos":'',grayscale:'',help:'',"highlight-bg-color":'',home:'',"horizontal-rule":'',huddle:'',"image-decorative":'',"image-enhancements":'',"image-options":'',image:'',"import-word":'',indent:'',info:'',"insert-character":'',"insert-time":'',instagram:'',invert:'',italic:'',language:'',"line-height":'',line:'',link:'',"list-bull-circle":'',"list-bull-default":'',"list-bull-disc":'',"list-bull-square":'',"list-num-default-rtl":'',"list-num-default":'',"list-num-lower-alpha-rtl":'',"list-num-lower-alpha":'',"list-num-lower-greek-rtl":'',"list-num-lower-greek":'',"list-num-lower-roman-rtl":'',"list-num-lower-roman":'',"list-num-upper-alpha-rtl":'',"list-num-upper-alpha":'',"list-num-upper-roman-rtl":'',"list-num-upper-roman":'',lock:'',ltr:'',"math-equation":'',mentions:'',minus:'',"more-drawer":'',"new-document":'',"new-tab":'',"non-breaking":'',notice:'',onedrive:'',"ordered-list-rtl":'',"ordered-list":'',orientation:'',outdent:'',"page-break":'',paragraph:'',"paste-column-after":'',"paste-column-before":'',"paste-row-after":'',"paste-row-before":'',"paste-text":'',paste:'',"permanent-pen":'',"photo-filter":'',plus:'',preferences:'',preview:'',print:'',quote:'',redo:'',reload:'',"remove-formatting":'',remove:'',"resize-handle":'',resize:'',"restore-draft":'',"revert-changes":'',"revision-history":'',"rotate-left":'',"rotate-right":'',rtl:'',saturation:'',save:'',search:'',"select-all":'',selected:'',send:'',settings:'',sharpen:'',sourcecode:'',"spell-check":'',"strike-through":'',subscript:'',"suggestededits-badge":'',suggestededits:'',superscript:'',"table-caption":'',"table-cell-classes":'',"table-cell-properties":'',"table-cell-select-all":'',"table-cell-select-inner":'',"table-classes":'',"table-delete-column":'',"table-delete-row":'',"table-delete-table":'',"table-insert-column-after":'',"table-insert-column-before":'',"table-insert-row-above":'',"table-insert-row-after":'',"table-left-header":'',"table-merge-cells":'',"table-row-numbering-rtl":'',"table-row-numbering":'',"table-row-properties":'',"table-split-cells":'',"table-top-header":'',table:'',"template-add":'',template:'',"temporary-placeholder":'',"text-color":'',"text-size-decrease":'',"text-size-increase":'',toc:'',"transform-image":'',translate:'',typography:'',underline:'',undo:'',unlink:'',unlock:'',"unordered-list":'',unselected:'',"upload-from-device":'',"upload-from-link":'',upload:'',user:'',"vertical-align":'',vibrance:'',visualblocks:'',visualchars:'',vk:'',warmth:'',warning:'',"zoom-in":'',"zoom-out":''}}); \ No newline at end of file diff --git a/public/tinymce/icons/default/index.js b/public/tinymce/icons/default/index.js new file mode 100644 index 0000000..ca4184a --- /dev/null +++ b/public/tinymce/icons/default/index.js @@ -0,0 +1,7 @@ +// Exports the "default" icons for usage with module loaders +// Usage: +// CommonJS: +// require('tinymce/icons/default') +// ES2015: +// import 'tinymce/icons/default' +require('./icons.js'); \ No newline at end of file diff --git a/public/tinymce/models/dom/index.js b/public/tinymce/models/dom/index.js new file mode 100644 index 0000000..7ed634a --- /dev/null +++ b/public/tinymce/models/dom/index.js @@ -0,0 +1,7 @@ +// Exports the "dom" model for usage with module loaders +// Usage: +// CommonJS: +// require('tinymce/models/dom') +// ES2015: +// import 'tinymce/models/dom' +require('./model.js'); \ No newline at end of file diff --git a/public/tinymce/models/dom/model.js b/public/tinymce/models/dom/model.js new file mode 100644 index 0000000..ea5a6df --- /dev/null +++ b/public/tinymce/models/dom/model.js @@ -0,0 +1,8980 @@ +/** + * TinyMCE version 8.3.1 (2025-12-17) + */ + +(function () { + 'use strict'; + + var global$1 = tinymce.util.Tools.resolve('tinymce.ModelManager'); + + /* eslint-disable @typescript-eslint/no-wrapper-object-types */ + const hasProto = (v, constructor, predicate) => { + if (predicate(v, constructor.prototype)) { + return true; + } + else { + // String-based fallback time + return v.constructor?.name === constructor.name; + } + }; + const typeOf = (x) => { + const t = typeof x; + if (x === null) { + return 'null'; + } + else if (t === 'object' && Array.isArray(x)) { + return 'array'; + } + else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) { + return 'string'; + } + else { + return t; + } + }; + const isType$1 = (type) => (value) => typeOf(value) === type; + const isSimpleType = (type) => (value) => typeof value === type; + const eq$2 = (t) => (a) => t === a; + const isString = isType$1('string'); + const isObject = isType$1('object'); + const isArray = isType$1('array'); + const isNull = eq$2(null); + const isBoolean = isSimpleType('boolean'); + const isUndefined = eq$2(undefined); + const isNullable = (a) => a === null || a === undefined; + const isNonNullable = (a) => !isNullable(a); + const isFunction = isSimpleType('function'); + const isNumber = isSimpleType('number'); + + const noop = () => { }; + /** Compose a unary function with an n-ary function */ + const compose = (fa, fb) => { + return (...args) => { + return fa(fb.apply(null, args)); + }; + }; + /** Compose two unary functions. Similar to compose, but avoids using Function.prototype.apply. */ + const compose1 = (fbc, fab) => (a) => fbc(fab(a)); + const constant = (value) => { + return () => { + return value; + }; + }; + const identity = (x) => { + return x; + }; + const tripleEquals = (a, b) => { + return a === b; + }; + function curry(fn, ...initialArgs) { + return (...restArgs) => { + const all = initialArgs.concat(restArgs); + return fn.apply(null, all); + }; + } + const not = (f) => (t) => !f(t); + const die = (msg) => { + return () => { + throw new Error(msg); + }; + }; + const apply = (f) => { + return f(); + }; + const never = constant(false); + const always = constant(true); + + /** + * The `Optional` type represents a value (of any type) that potentially does + * not exist. Any `Optional` can either be a `Some` (in which case the + * value does exist) or a `None` (in which case the value does not exist). This + * module defines a whole lot of FP-inspired utility functions for dealing with + * `Optional` objects. + * + * Comparison with null or undefined: + * - We don't get fancy null coalescing operators with `Optional` + * - We do get fancy helper functions with `Optional` + * - `Optional` support nesting, and allow for the type to still be nullable (or + * another `Optional`) + * - There is no option to turn off strict-optional-checks like there is for + * strict-null-checks + */ + class Optional { + tag; + value; + // Sneaky optimisation: every instance of Optional.none is identical, so just + // reuse the same object + static singletonNone = new Optional(false); + // The internal representation has a `tag` and a `value`, but both are + // private: able to be console.logged, but not able to be accessed by code + constructor(tag, value) { + this.tag = tag; + this.value = value; + } + // --- Identities --- + /** + * Creates a new `Optional` that **does** contain a value. + */ + static some(value) { + return new Optional(true, value); + } + /** + * Create a new `Optional` that **does not** contain a value. `T` can be + * any type because we don't actually have a `T`. + */ + static none() { + return Optional.singletonNone; + } + /** + * Perform a transform on an `Optional` type. Regardless of whether this + * `Optional` contains a value or not, `fold` will return a value of type `U`. + * If this `Optional` does not contain a value, the `U` will be created by + * calling `onNone`. If this `Optional` does contain a value, the `U` will be + * created by calling `onSome`. + * + * For the FP enthusiasts in the room, this function: + * 1. Could be used to implement all of the functions below + * 2. Forms a catamorphism + */ + fold(onNone, onSome) { + if (this.tag) { + return onSome(this.value); + } + else { + return onNone(); + } + } + /** + * Determine if this `Optional` object contains a value. + */ + isSome() { + return this.tag; + } + /** + * Determine if this `Optional` object **does not** contain a value. + */ + isNone() { + return !this.tag; + } + // --- Functor (name stolen from Haskell / maths) --- + /** + * Perform a transform on an `Optional` object, **if** there is a value. If + * you provide a function to turn a T into a U, this is the function you use + * to turn an `Optional` into an `Optional`. If this **does** contain + * a value then the output will also contain a value (that value being the + * output of `mapper(this.value)`), and if this **does not** contain a value + * then neither will the output. + */ + map(mapper) { + if (this.tag) { + return Optional.some(mapper(this.value)); + } + else { + return Optional.none(); + } + } + // --- Monad (name stolen from Haskell / maths) --- + /** + * Perform a transform on an `Optional` object, **if** there is a value. + * Unlike `map`, here the transform itself also returns an `Optional`. + */ + bind(binder) { + if (this.tag) { + return binder(this.value); + } + else { + return Optional.none(); + } + } + // --- Traversable (name stolen from Haskell / maths) --- + /** + * For a given predicate, this function finds out if there **exists** a value + * inside this `Optional` object that meets the predicate. In practice, this + * means that for `Optional`s that do not contain a value it returns false (as + * no predicate-meeting value exists). + */ + exists(predicate) { + return this.tag && predicate(this.value); + } + /** + * For a given predicate, this function finds out if **all** the values inside + * this `Optional` object meet the predicate. In practice, this means that + * for `Optional`s that do not contain a value it returns true (as all 0 + * objects do meet the predicate). + */ + forall(predicate) { + return !this.tag || predicate(this.value); + } + filter(predicate) { + if (!this.tag || predicate(this.value)) { + return this; + } + else { + return Optional.none(); + } + } + // --- Getters --- + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. + */ + getOr(replacement) { + return this.tag ? this.value : replacement; + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. Unlike `getOr`, in this method the `replacement` object is also + * `Optional` - meaning that this method will always return an `Optional`. + */ + or(replacement) { + return this.tag ? this : replacement; + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. Unlike `getOr`, in this method the `replacement` value is + * "thunked" - that is to say that you don't pass a value to `getOrThunk`, you + * pass a function which (if called) will **return** the `value` you want to + * use. + */ + getOrThunk(thunk) { + return this.tag ? this.value : thunk(); + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided Optional object does not contain a + * value. + * + * Unlike `or`, in this method the `replacement` value is "thunked" - that is + * to say that you don't pass a value to `orThunk`, you pass a function which + * (if called) will **return** the `value` you want to use. + * + * Unlike `getOrThunk`, in this method the `replacement` value is also + * `Optional`, meaning that this method will always return an `Optional`. + */ + orThunk(thunk) { + return this.tag ? this : thunk(); + } + /** + * Get the value out of the inside of the `Optional` object, throwing an + * exception if the provided `Optional` object does not contain a value. + * + * WARNING: + * You should only be using this function if you know that the `Optional` + * object **is not** empty (otherwise you're throwing exceptions in production + * code, which is bad). + * + * In tests this is more acceptable. + * + * Prefer other methods to this, such as `.each`. + */ + getOrDie(message) { + if (!this.tag) { + throw new Error(message ?? 'Called getOrDie on None'); + } + else { + return this.value; + } + } + // --- Interop with null and undefined --- + /** + * Creates an `Optional` value from a nullable (or undefined-able) input. + * Null, or undefined, is converted to `None`, and anything else is converted + * to `Some`. + */ + static from(value) { + return isNonNullable(value) ? Optional.some(value) : Optional.none(); + } + /** + * Converts an `Optional` to a nullable type, by getting the value if it + * exists, or returning `null` if it does not. + */ + getOrNull() { + return this.tag ? this.value : null; + } + /** + * Converts an `Optional` to an undefined-able type, by getting the value if + * it exists, or returning `undefined` if it does not. + */ + getOrUndefined() { + return this.value; + } + // --- Utilities --- + /** + * If the `Optional` contains a value, perform an action on that value. + * Unlike the rest of the methods on this type, `.each` has side-effects. If + * you want to transform an `Optional` **into** something, then this is not + * the method for you. If you want to use an `Optional` to **do** + * something, then this is the method for you - provided you're okay with not + * doing anything in the case where the `Optional` doesn't have a value inside + * it. If you're not sure whether your use-case fits into transforming + * **into** something or **doing** something, check whether it has a return + * value. If it does, you should be performing a transform. + */ + each(worker) { + if (this.tag) { + worker(this.value); + } + } + /** + * Turn the `Optional` object into an array that contains all of the values + * stored inside the `Optional`. In practice, this means the output will have + * either 0 or 1 elements. + */ + toArray() { + return this.tag ? [this.value] : []; + } + /** + * Turn the `Optional` object into a string for debugging or printing. Not + * recommended for production code, but good for debugging. Also note that + * these days an `Optional` object can be logged to the console directly, and + * its inner value (if it exists) will be visible. + */ + toString() { + return this.tag ? `some(${this.value})` : 'none()'; + } + } + + const nativeSlice = Array.prototype.slice; + const nativeIndexOf = Array.prototype.indexOf; + const nativePush = Array.prototype.push; + const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t); + const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1; + const exists = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return true; + } + } + return false; + }; + const range$1 = (num, f) => { + const r = []; + for (let i = 0; i < num; i++) { + r.push(f(i)); + } + return r; + }; + const map$1 = (xs, f) => { + // pre-allocating array size when it's guaranteed to be known + // http://jsperf.com/push-allocated-vs-dynamic/22 + const len = xs.length; + const r = new Array(len); + for (let i = 0; i < len; i++) { + const x = xs[i]; + r[i] = f(x, i); + } + return r; + }; + // Unwound implementing other functions in terms of each. + // The code size is roughly the same, and it should allow for better optimisation. + // const each = function(xs: T[], f: (x: T, i?: number, xs?: T[]) => void): void { + const each$2 = (xs, f) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + f(x, i); + } + }; + const eachr = (xs, f) => { + for (let i = xs.length - 1; i >= 0; i--) { + const x = xs[i]; + f(x, i); + } + }; + const partition = (xs, pred) => { + const pass = []; + const fail = []; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + const arr = pred(x, i) ? pass : fail; + arr.push(x); + } + return { pass, fail }; + }; + const filter$2 = (xs, pred) => { + const r = []; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + r.push(x); + } + } + return r; + }; + const foldr = (xs, f, acc) => { + eachr(xs, (x, i) => { + acc = f(acc, x, i); + }); + return acc; + }; + const foldl = (xs, f, acc) => { + each$2(xs, (x, i) => { + acc = f(acc, x, i); + }); + return acc; + }; + const findUntil = (xs, pred, until) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return Optional.some(x); + } + else if (until(x, i)) { + break; + } + } + return Optional.none(); + }; + const find$1 = (xs, pred) => { + return findUntil(xs, pred, never); + }; + const findIndex = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return Optional.some(i); + } + } + return Optional.none(); + }; + const flatten = (xs) => { + // Note, this is possible because push supports multiple arguments: + // http://jsperf.com/concat-push/6 + // Note that in the past, concat() would silently work (very slowly) for array-like objects. + // With this change it will throw an error. + const r = []; + for (let i = 0, len = xs.length; i < len; ++i) { + // Ensure that each value is an array itself + if (!isArray(xs[i])) { + throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); + } + nativePush.apply(r, xs[i]); + } + return r; + }; + const bind$2 = (xs, f) => flatten(map$1(xs, f)); + const forall = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; ++i) { + const x = xs[i]; + if (pred(x, i) !== true) { + return false; + } + } + return true; + }; + const reverse = (xs) => { + const r = nativeSlice.call(xs, 0); + r.reverse(); + return r; + }; + const mapToObject = (xs, f) => { + const r = {}; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + r[String(x)] = f(x, i); + } + return r; + }; + const sort$1 = (xs, comparator) => { + const copy = nativeSlice.call(xs, 0); + copy.sort(comparator); + return copy; + }; + const get$d = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); + const head = (xs) => get$d(xs, 0); + const last$2 = (xs) => get$d(xs, xs.length - 1); + const findMap = (arr, f) => { + for (let i = 0; i < arr.length; i++) { + const r = f(arr[i], i); + if (r.isSome()) { + return r; + } + } + return Optional.none(); + }; + + // There are many variations of Object iteration that are faster than the 'for-in' style: + // http://jsperf.com/object-keys-iteration/107 + // + // Use the native keys if it is available (IE9+), otherwise fall back to manually filtering + const keys = Object.keys; + const hasOwnProperty = Object.hasOwnProperty; + const each$1 = (obj, f) => { + const props = keys(obj); + for (let k = 0, len = props.length; k < len; k++) { + const i = props[k]; + const x = obj[i]; + f(x, i); + } + }; + const map = (obj, f) => { + return tupleMap(obj, (x, i) => ({ + k: i, + v: f(x, i) + })); + }; + const tupleMap = (obj, f) => { + const r = {}; + each$1(obj, (x, i) => { + const tuple = f(x, i); + r[tuple.k] = tuple.v; + }); + return r; + }; + const objAcc = (r) => (x, i) => { + r[i] = x; + }; + const internalFilter = (obj, pred, onTrue, onFalse) => { + each$1(obj, (x, i) => { + (pred(x, i) ? onTrue : onFalse)(x, i); + }); + }; + const filter$1 = (obj, pred) => { + const t = {}; + internalFilter(obj, pred, objAcc(t), noop); + return t; + }; + const mapToArray = (obj, f) => { + const r = []; + each$1(obj, (value, name) => { + r.push(f(value, name)); + }); + return r; + }; + const values = (obj) => { + return mapToArray(obj, identity); + }; + const get$c = (obj, key) => { + return has$1(obj, key) ? Optional.from(obj[key]) : Optional.none(); + }; + const has$1 = (obj, key) => hasOwnProperty.call(obj, key); + const hasNonNullableKey = (obj, key) => has$1(obj, key) && obj[key] !== undefined && obj[key] !== null; + const isEmpty = (r) => { + for (const x in r) { + if (hasOwnProperty.call(r, x)) { + return false; + } + } + return true; + }; + + /* + * Generates a church encoded ADT (https://en.wikipedia.org/wiki/Church_encoding) + * For syntax and use, look at the test code. + */ + const generate$1 = (cases) => { + // validation + if (!isArray(cases)) { + throw new Error('cases must be an array'); + } + if (cases.length === 0) { + throw new Error('there must be at least one case'); + } + const constructors = []; + // adt is mutated to add the individual cases + const adt = {}; + each$2(cases, (acase, count) => { + const keys$1 = keys(acase); + // validation + if (keys$1.length !== 1) { + throw new Error('one and only one name per case'); + } + const key = keys$1[0]; + const value = acase[key]; + // validation + if (adt[key] !== undefined) { + throw new Error('duplicate key detected:' + key); + } + else if (key === 'cata') { + throw new Error('cannot have a case named cata (sorry)'); + } + else if (!isArray(value)) { + // this implicitly checks if acase is an object + throw new Error('case arguments must be an array'); + } + constructors.push(key); + // + // constructor for key + // + adt[key] = (...args) => { + const argLength = args.length; + // validation + if (argLength !== value.length) { + throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength); + } + const match = (branches) => { + const branchKeys = keys(branches); + if (constructors.length !== branchKeys.length) { + throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(',')); + } + const allReqd = forall(constructors, (reqKey) => { + return contains$2(branchKeys, reqKey); + }); + if (!allReqd) { + throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', ')); + } + return branches[key].apply(null, args); + }; + // + // the fold function for key + // + return { + fold: (...foldArgs) => { + // runtime validation + if (foldArgs.length !== cases.length) { + throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length); + } + const target = foldArgs[count]; + return target.apply(null, args); + }, + match, + // NOTE: Only for debugging. + log: (label) => { + // eslint-disable-next-line no-console + console.log(label, { + constructors, + constructor: key, + params: args + }); + } + }; + }; + }); + return adt; + }; + const Adt = { + generate: generate$1 + }; + + const Cell = (initial) => { + let value = initial; + const get = () => { + return value; + }; + const set = (v) => { + value = v; + }; + return { + get, + set + }; + }; + + const sort = (arr) => { + return arr.slice(0).sort(); + }; + const reqMessage = (required, keys) => { + throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.'); + }; + const unsuppMessage = (unsupported) => { + throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', ')); + }; + const validateStrArr = (label, array) => { + if (!isArray(array)) { + throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.'); + } + each$2(array, (a) => { + if (!isString(a)) { + throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.'); + } + }); + }; + const invalidTypeMessage = (incorrect, type) => { + throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.'); + }; + const checkDupes = (everything) => { + const sorted = sort(everything); + const dupe = find$1(sorted, (s, i) => { + return i < sorted.length - 1 && s === sorted[i + 1]; + }); + dupe.each((d) => { + throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].'); + }); + }; + + // Ensure that the object has all required fields. They must be functions. + const base = (handleUnsupported, required) => { + return baseWith(handleUnsupported, required, { + validate: isFunction, + label: 'function' + }); + }; + // Ensure that the object has all required fields. They must satisy predicates. + const baseWith = (handleUnsupported, required, pred) => { + if (required.length === 0) { + throw new Error('You must specify at least one required field.'); + } + validateStrArr('required', required); + checkDupes(required); + return (obj) => { + const keys$1 = keys(obj); + // Ensure all required keys are present. + const allReqd = forall(required, (req) => { + return contains$2(keys$1, req); + }); + if (!allReqd) { + reqMessage(required, keys$1); + } + handleUnsupported(required, keys$1); + const invalidKeys = filter$2(required, (key) => { + return !pred.validate(obj[key], key); + }); + if (invalidKeys.length > 0) { + invalidTypeMessage(invalidKeys, pred.label); + } + return obj; + }; + }; + const handleExact = (required, keys) => { + const unsupported = filter$2(keys, (key) => { + return !contains$2(required, key); + }); + if (unsupported.length > 0) { + unsuppMessage(unsupported); + } + }; + const exactly = (required) => base(handleExact, required); + + /** + * Creates a new `Result` that **does** contain a value. + */ + const value$1 = (value) => { + const applyHelper = (fn) => fn(value); + const constHelper = constant(value); + const outputHelper = () => output; + const output = { + // Debug info + tag: true, + inner: value, + // Actual Result methods + fold: (_onError, onValue) => onValue(value), + isValue: always, + isError: never, + map: (mapper) => Result.value(mapper(value)), + mapError: outputHelper, + bind: applyHelper, + exists: applyHelper, + forall: applyHelper, + getOr: constHelper, + or: outputHelper, + getOrThunk: constHelper, + orThunk: outputHelper, + getOrDie: constHelper, + each: (fn) => { + // Can't write the function inline because we don't want to return something by mistake + fn(value); + }, + toOptional: () => Optional.some(value), + }; + return output; + }; + /** + * Creates a new `Result` that **does not** contain a value, and therefore + * contains an error. + */ + const error = (error) => { + const outputHelper = () => output; + const output = { + // Debug info + tag: false, + inner: error, + // Actual Result methods + fold: (onError, _onValue) => onError(error), + isValue: never, + isError: always, + map: outputHelper, + mapError: (mapper) => Result.error(mapper(error)), + bind: outputHelper, + exists: never, + forall: always, + getOr: identity, + or: identity, + getOrThunk: apply, + orThunk: apply, + getOrDie: die(String(error)), + each: noop, + toOptional: Optional.none, + }; + return output; + }; + /** + * Creates a new `Result` from an `Optional` and an `E`. If the + * `Optional` contains a value, so will the outputted `Result`. If it does not, + * the outputted `Result` will contain an error (and that error will be the + * error passed in). + */ + const fromOption = (optional, err) => optional.fold(() => error(err), value$1); + const Result = { + value: value$1, + error, + fromOption + }; + + // Use window object as the global if it's available since CSP will block script evals + // eslint-disable-next-line @typescript-eslint/no-implied-eval + const Global = typeof window !== 'undefined' ? window : Function('return this;')(); + + // This API is intended to give the capability to return namespaced strings. + // For CSS, since dots are not valid class names, the dots are turned into dashes. + const css = (namespace) => { + const dashNamespace = namespace.replace(/\./g, '-'); + const resolve = (str) => { + return dashNamespace + '-' + str; + }; + return { + resolve + }; + }; + + /** + * **Is** the value stored inside this Optional object equal to `rhs`? + */ + const is$2 = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left) => comparator(left, rhs)); + const cat = (arr) => { + const r = []; + const push = (x) => { + r.push(x); + }; + for (let i = 0; i < arr.length; i++) { + arr[i].each(push); + } + return r; + }; + const bindFrom = (a, f) => (a !== undefined && a !== null) ? f(a) : Optional.none(); + // This can help with type inference, by specifying the type param on the none case, so the caller doesn't have to. + const someIf = (b, a) => b ? Optional.some(a) : Optional.none(); + + /** path :: ([String], JsObj?) -> JsObj */ + const path = (parts, scope) => { + let o = scope !== undefined && scope !== null ? scope : Global; + for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) { + o = o[parts[i]]; + } + return o; + }; + /** resolve :: (String, JsObj?) -> JsObj */ + const resolve$2 = (p, scope) => { + const parts = p.split('.'); + return path(parts, scope); + }; + + const singleton = (doRevoke) => { + const subject = Cell(Optional.none()); + const revoke = () => subject.get().each(doRevoke); + const clear = () => { + revoke(); + subject.set(Optional.none()); + }; + const isSet = () => subject.get().isSome(); + const get = () => subject.get(); + const set = (s) => { + revoke(); + subject.set(Optional.some(s)); + }; + return { + clear, + isSet, + get, + set + }; + }; + const value = () => { + const subject = singleton(noop); + const on = (f) => subject.get().each(f); + return { + ...subject, + on + }; + }; + + const removeFromStart = (str, numChars) => { + return str.substring(numChars); + }; + + const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr; + const removeLeading = (str, prefix) => { + return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str; + }; + const contains$1 = (str, substr, start = 0, end) => { + const idx = str.indexOf(substr, start); + if (idx !== -1) { + return isUndefined(end) ? true : idx + substr.length <= end; + } + else { + return false; + } + }; + /** Does 'str' start with 'prefix'? + * Note: all strings start with the empty string. + * More formally, for all strings x, startsWith(x, ""). + * This is so that for all strings x and y, startsWith(y + x, y) + */ + const startsWith = (str, prefix) => { + return checkRange(str, prefix, 0); + }; + /** Does 'str' end with 'suffix'? + * Note: all strings end with the empty string. + * More formally, for all strings x, endsWith(x, ""). + * This is so that for all strings x and y, endsWith(x + y, y) + */ + const endsWith = (str, suffix) => { + return checkRange(str, suffix, str.length - suffix.length); + }; + const blank = (r) => (s) => s.replace(r, ''); + /** removes all leading and trailing spaces */ + const trim = blank(/^\s+|\s+$/g); + const isNotEmpty = (s) => s.length > 0; + const toFloat = (value) => { + const num = parseFloat(value); + return isNaN(num) ? Optional.none() : Optional.some(num); + }; + + // Run a function fn after rate ms. If another invocation occurs + // during the time it is waiting, reschedule the function again + // with the new arguments. + const last$1 = (fn, rate) => { + let timer = null; + const cancel = () => { + if (!isNull(timer)) { + clearTimeout(timer); + timer = null; + } + }; + const throttle = (...args) => { + cancel(); + timer = setTimeout(() => { + timer = null; + fn.apply(null, args); + }, rate); + }; + return { + cancel, + throttle + }; + }; + + const cached = (f) => { + let called = false; + let r; + return (...args) => { + if (!called) { + called = true; + r = f.apply(null, args); + } + return r; + }; + }; + + const nbsp = '\u00A0'; + + const validSectionList = ['tfoot', 'thead', 'tbody', 'colgroup']; + const isValidSection = (parentName) => contains$2(validSectionList, parentName); + const grid = (rows, columns) => ({ + rows, + columns + }); + const address = (row, column) => ({ + row, + column + }); + const detail = (element, rowspan, colspan) => ({ + element, + rowspan, + colspan + }); + const detailnew = (element, rowspan, colspan, isNew) => ({ + element, + rowspan, + colspan, + isNew + }); + const extended = (element, rowspan, colspan, row, column, isLocked) => ({ + element, + rowspan, + colspan, + row, + column, + isLocked + }); + const rowdetail = (element, cells, section) => ({ + element, + cells, + section + }); + const rowdetailnew = (element, cells, section, isNew) => ({ + element, + cells, + section, + isNew + }); + const elementnew = (element, isNew, isLocked) => ({ + element, + isNew, + isLocked + }); + const rowcells = (element, cells, section, isNew) => ({ + element, + cells, + section, + isNew + }); + const bounds = (startRow, startCol, finishRow, finishCol) => ({ + startRow, + startCol, + finishRow, + finishCol + }); + const columnext = (element, colspan, column) => ({ + element, + colspan, + column + }); + const colgroup = (element, columns) => ({ + element, + columns + }); + + const addCells = (gridRow, index, cells) => { + const existingCells = gridRow.cells; + const before = existingCells.slice(0, index); + const after = existingCells.slice(index); + const newCells = before.concat(cells).concat(after); + return setCells(gridRow, newCells); + }; + const addCell = (gridRow, index, cell) => addCells(gridRow, index, [cell]); + const mutateCell = (gridRow, index, cell) => { + const cells = gridRow.cells; + cells[index] = cell; + }; + const setCells = (gridRow, cells) => rowcells(gridRow.element, cells, gridRow.section, gridRow.isNew); + const mapCells = (gridRow, f) => { + const cells = gridRow.cells; + const r = map$1(cells, f); + return rowcells(gridRow.element, r, gridRow.section, gridRow.isNew); + }; + const getCell = (gridRow, index) => gridRow.cells[index]; + const getCellElement = (gridRow, index) => getCell(gridRow, index).element; + const cellLength = (gridRow) => gridRow.cells.length; + const extractGridDetails = (grid) => { + const result = partition(grid, (row) => row.section === 'colgroup'); + return { + rows: result.fail, + cols: result.pass + }; + }; + const clone$2 = (gridRow, cloneRow, cloneCell) => { + const newCells = map$1(gridRow.cells, cloneCell); + return rowcells(cloneRow(gridRow.element), newCells, gridRow.section, true); + }; + + const fromHtml$1 = (html, scope) => { + const doc = scope || document; + const div = doc.createElement('div'); + div.innerHTML = html; + if (!div.hasChildNodes() || div.childNodes.length > 1) { + const message = 'HTML does not have a single root node'; + // eslint-disable-next-line no-console + console.error(message, html); + throw new Error(message); + } + return fromDom$1(div.childNodes[0]); + }; + const fromTag = (tag, scope) => { + const doc = scope || document; + const node = doc.createElement(tag); + return fromDom$1(node); + }; + const fromText = (text, scope) => { + const doc = scope || document; + const node = doc.createTextNode(text); + return fromDom$1(node); + }; + const fromDom$1 = (node) => { + // TODO: Consider removing this check, but left atm for safety + if (node === null || node === undefined) { + throw new Error('Node cannot be null or undefined'); + } + return { + dom: node + }; + }; + const fromPoint$1 = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom$1); + // tslint:disable-next-line:variable-name + const SugarElement = { + fromHtml: fromHtml$1, + fromTag, + fromText, + fromDom: fromDom$1, + fromPoint: fromPoint$1 + }; + + const selectNode = (win, element) => { + const rng = win.document.createRange(); + rng.selectNode(element.dom); + return rng; + }; + const selectNodeContents = (win, element) => { + const rng = win.document.createRange(); + selectNodeContentsUsing(rng, element); + return rng; + }; + const selectNodeContentsUsing = (rng, element) => rng.selectNodeContents(element.dom); + // NOTE: Mutates the range. + const setStart = (rng, situ) => { + situ.fold((e) => { + rng.setStartBefore(e.dom); + }, (e, o) => { + rng.setStart(e.dom, o); + }, (e) => { + rng.setStartAfter(e.dom); + }); + }; + const setFinish = (rng, situ) => { + situ.fold((e) => { + rng.setEndBefore(e.dom); + }, (e, o) => { + rng.setEnd(e.dom, o); + }, (e) => { + rng.setEndAfter(e.dom); + }); + }; + const relativeToNative = (win, startSitu, finishSitu) => { + const range = win.document.createRange(); + setStart(range, startSitu); + setFinish(range, finishSitu); + return range; + }; + const exactToNative = (win, start, soffset, finish, foffset) => { + const rng = win.document.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }; + const toRect = (rect) => ({ + left: rect.left, + top: rect.top, + right: rect.right, + bottom: rect.bottom, + width: rect.width, + height: rect.height + }); + const getFirstRect$1 = (rng) => { + const rects = rng.getClientRects(); + // ASSUMPTION: The first rectangle is the start of the selection + const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect(); + return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none(); + }; + + const adt$6 = Adt.generate([ + { ltr: ['start', 'soffset', 'finish', 'foffset'] }, + { rtl: ['start', 'soffset', 'finish', 'foffset'] } + ]); + const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset); + const getRanges = (win, selection) => selection.match({ + domRange: (rng) => { + return { + ltr: constant(rng), + rtl: Optional.none + }; + }, + relative: (startSitu, finishSitu) => { + return { + ltr: cached(() => relativeToNative(win, startSitu, finishSitu)), + rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu))) + }; + }, + exact: (start, soffset, finish, foffset) => { + return { + ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)), + rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset))) + }; + } + }); + const doDiagnose = (win, ranges) => { + // If we cannot create a ranged selection from start > finish, it could be RTL + const rng = ranges.ltr(); + if (rng.collapsed) { + // Let's check if it's RTL ... if it is, then reversing the direction will not be collapsed + const reversed = ranges.rtl().filter((rev) => rev.collapsed === false); + return reversed.map((rev) => + // We need to use "reversed" here, because the original only has one point (collapsed) + adt$6.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$6.ltr, rng)); + } + else { + return fromRange(win, adt$6.ltr, rng); + } + }; + const diagnose = (win, selection) => { + const ranges = getRanges(win, selection); + return doDiagnose(win, ranges); + }; + const asLtrRange = (win, selection) => { + const diagnosis = diagnose(win, selection); + return diagnosis.match({ + ltr: (start, soffset, finish, foffset) => { + const rng = win.document.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }, + rtl: (start, soffset, finish, foffset) => { + // NOTE: Reversing start and finish + const rng = win.document.createRange(); + rng.setStart(finish.dom, foffset); + rng.setEnd(start.dom, soffset); + return rng; + } + }); + }; + adt$6.ltr; + adt$6.rtl; + + const COMMENT = 8; + const DOCUMENT = 9; + const DOCUMENT_FRAGMENT = 11; + const ELEMENT = 1; + const TEXT = 3; + + const is$1 = (element, selector) => { + const dom = element.dom; + if (dom.nodeType !== ELEMENT) { + return false; + } + else { + const elem = dom; + if (elem.matches !== undefined) { + return elem.matches(selector); + } + else if (elem.msMatchesSelector !== undefined) { + return elem.msMatchesSelector(selector); + } + else if (elem.webkitMatchesSelector !== undefined) { + return elem.webkitMatchesSelector(selector); + } + else if (elem.mozMatchesSelector !== undefined) { + // cast to any as mozMatchesSelector doesn't exist in TS DOM lib + return elem.mozMatchesSelector(selector); + } + else { + throw new Error('Browser lacks native selectors'); + } // unfortunately we can't throw this on startup :( + } + }; + const bypassSelector = (dom) => + // Only elements, documents and shadow roots support querySelector + // shadow root element type is DOCUMENT_FRAGMENT + dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || + // IE fix for complex queries on empty nodes: http://jsfiddle.net/spyder/fv9ptr5L/ + dom.childElementCount === 0; + const all$1 = (selector, scope) => { + const base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? [] : map$1(base.querySelectorAll(selector), SugarElement.fromDom); + }; + const one = (selector, scope) => { + const base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom); + }; + + const eq$1 = (e1, e2) => e1.dom === e2.dom; + // Returns: true if node e1 contains e2, otherwise false. + // (returns false if e1===e2: A node does not contain itself). + const contains = (e1, e2) => { + const d1 = e1.dom; + const d2 = e2.dom; + return d1 === d2 ? false : d1.contains(d2); + }; + const is = is$1; + + const DeviceType = (os, browser, userAgent, mediaMatch) => { + const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; + const isiPhone = os.isiOS() && !isiPad; + const isMobile = os.isiOS() || os.isAndroid(); + const isTouch = isMobile || mediaMatch('(pointer:coarse)'); + const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)'); + const isPhone = isiPhone || isMobile && !isTablet; + const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; + const isDesktop = !isPhone && !isTablet && !iOSwebview; + return { + isiPad: constant(isiPad), + isiPhone: constant(isiPhone), + isTablet: constant(isTablet), + isPhone: constant(isPhone), + isTouch: constant(isTouch), + isAndroid: os.isAndroid, + isiOS: os.isiOS, + isWebView: constant(iOSwebview), + isDesktop: constant(isDesktop) + }; + }; + + const firstMatch = (regexes, s) => { + for (let i = 0; i < regexes.length; i++) { + const x = regexes[i]; + if (x.test(s)) { + return x; + } + } + return undefined; + }; + const find = (regexes, agent) => { + const r = firstMatch(regexes, agent); + if (!r) { + return { major: 0, minor: 0 }; + } + const group = (i) => { + return Number(agent.replace(r, '$' + i)); + }; + return nu$2(group(1), group(2)); + }; + const detect$5 = (versionRegexes, agent) => { + const cleanedAgent = String(agent).toLowerCase(); + if (versionRegexes.length === 0) { + return unknown$2(); + } + return find(versionRegexes, cleanedAgent); + }; + const unknown$2 = () => { + return nu$2(0, 0); + }; + const nu$2 = (major, minor) => { + return { major, minor }; + }; + const Version = { + nu: nu$2, + detect: detect$5, + unknown: unknown$2 + }; + + const detectBrowser$1 = (browsers, userAgentData) => { + return findMap(userAgentData.brands, (uaBrand) => { + const lcBrand = uaBrand.brand.toLowerCase(); + return find$1(browsers, (browser) => lcBrand === browser.brand?.toLowerCase()) + .map((info) => ({ + current: info.name, + version: Version.nu(parseInt(uaBrand.version, 10), 0) + })); + }); + }; + + const detect$4 = (candidates, userAgent) => { + const agent = String(userAgent).toLowerCase(); + return find$1(candidates, (candidate) => { + return candidate.search(agent); + }); + }; + // They (browser and os) are the same at the moment, but they might + // not stay that way. + const detectBrowser = (browsers, userAgent) => { + return detect$4(browsers, userAgent).map((browser) => { + const version = Version.detect(browser.versionRegexes, userAgent); + return { + current: browser.name, + version + }; + }); + }; + const detectOs = (oses, userAgent) => { + return detect$4(oses, userAgent).map((os) => { + const version = Version.detect(os.versionRegexes, userAgent); + return { + current: os.name, + version + }; + }); + }; + + const normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; + const checkContains = (target) => { + return (uastring) => { + return contains$1(uastring, target); + }; + }; + const browsers = [ + // This is legacy Edge + { + name: 'Edge', + versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], + search: (uastring) => { + return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); + } + }, + // This is Google Chrome and Chromium Edge + { + name: 'Chromium', + brand: 'Chromium', + versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, normalVersionRegex], + search: (uastring) => { + return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); + } + }, + { + name: 'IE', + versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/], + search: (uastring) => { + return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); + } + }, + // INVESTIGATE: Is this still the Opera user agent? + { + name: 'Opera', + versionRegexes: [normalVersionRegex, /.*?opera\/([0-9]+)\.([0-9]+).*/], + search: checkContains('opera') + }, + { + name: 'Firefox', + versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], + search: checkContains('firefox') + }, + { + name: 'Safari', + versionRegexes: [normalVersionRegex, /.*?cpu os ([0-9]+)_([0-9]+).*/], + search: (uastring) => { + return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); + } + } + ]; + const oses = [ + { + name: 'Windows', + search: checkContains('win'), + versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'iOS', + search: (uastring) => { + return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); + }, + versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/] + }, + { + name: 'Android', + search: checkContains('android'), + versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'macOS', + search: checkContains('mac os x'), + versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/] + }, + { + name: 'Linux', + search: checkContains('linux'), + versionRegexes: [] + }, + { name: 'Solaris', + search: checkContains('sunos'), + versionRegexes: [] + }, + { + name: 'FreeBSD', + search: checkContains('freebsd'), + versionRegexes: [] + }, + { + name: 'ChromeOS', + search: checkContains('cros'), + versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/] + } + ]; + const PlatformInfo = { + browsers: constant(browsers), + oses: constant(oses) + }; + + const edge = 'Edge'; + const chromium = 'Chromium'; + const ie = 'IE'; + const opera = 'Opera'; + const firefox = 'Firefox'; + const safari = 'Safari'; + const unknown$1 = () => { + return nu$1({ + current: undefined, + version: Version.unknown() + }); + }; + const nu$1 = (info) => { + const current = info.current; + const version = info.version; + const isBrowser = (name) => () => current === name; + return { + current, + version, + isEdge: isBrowser(edge), + isChromium: isBrowser(chromium), + // NOTE: isIe just looks too weird + isIE: isBrowser(ie), + isOpera: isBrowser(opera), + isFirefox: isBrowser(firefox), + isSafari: isBrowser(safari) + }; + }; + const Browser = { + unknown: unknown$1, + nu: nu$1, + edge: constant(edge), + chromium: constant(chromium), + ie: constant(ie), + opera: constant(opera), + firefox: constant(firefox), + safari: constant(safari) + }; + + const windows = 'Windows'; + const ios = 'iOS'; + const android = 'Android'; + const linux = 'Linux'; + const macos = 'macOS'; + const solaris = 'Solaris'; + const freebsd = 'FreeBSD'; + const chromeos = 'ChromeOS'; + // Though there is a bit of dupe with this and Browser, trying to + // reuse code makes it much harder to follow and change. + const unknown = () => { + return nu({ + current: undefined, + version: Version.unknown() + }); + }; + const nu = (info) => { + const current = info.current; + const version = info.version; + const isOS = (name) => () => current === name; + return { + current, + version, + isWindows: isOS(windows), + // TODO: Fix capitalisation + isiOS: isOS(ios), + isAndroid: isOS(android), + isMacOS: isOS(macos), + isLinux: isOS(linux), + isSolaris: isOS(solaris), + isFreeBSD: isOS(freebsd), + isChromeOS: isOS(chromeos) + }; + }; + const OperatingSystem = { + unknown, + nu, + windows: constant(windows), + ios: constant(ios), + android: constant(android), + linux: constant(linux), + macos: constant(macos), + solaris: constant(solaris), + freebsd: constant(freebsd), + chromeos: constant(chromeos) + }; + + const detect$3 = (userAgent, userAgentDataOpt, mediaMatch) => { + const browsers = PlatformInfo.browsers(); + const oses = PlatformInfo.oses(); + const browser = userAgentDataOpt.bind((userAgentData) => detectBrowser$1(browsers, userAgentData)) + .orThunk(() => detectBrowser(browsers, userAgent)) + .fold(Browser.unknown, Browser.nu); + const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); + const deviceType = DeviceType(os, browser, userAgent, mediaMatch); + return { + browser, + os, + deviceType + }; + }; + const PlatformDetection = { + detect: detect$3 + }; + + const mediaMatch = (query) => window.matchMedia(query).matches; + // IMPORTANT: Must be in a thunk, otherwise rollup thinks calling this immediately + // causes side effects and won't tree shake this away + // Note: navigator.userAgentData is not part of the native typescript types yet + let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from((window.navigator.userAgentData)), mediaMatch)); + const detect$2 = () => platform(); + + const unsafe = (name, scope) => { + return resolve$2(name, scope); + }; + const getOrDie = (name, scope) => { + const actual = unsafe(name, scope); + if (actual === undefined || actual === null) { + throw new Error(name + ' not available on this browser'); + } + return actual; + }; + + const getPrototypeOf = Object.getPrototypeOf; + /* + * IE9 and above + * + * MDN no use on this one, but here's the link anyway: + * https://developer.mozilla.org/en/docs/Web/API/HTMLElement + */ + const sandHTMLElement = (scope) => { + return getOrDie('HTMLElement', scope); + }; + const isPrototypeOf = (x) => { + // use Resolve to get the window object for x and just return undefined if it can't find it. + // undefined scope later triggers using the global window. + const scope = resolve$2('ownerDocument.defaultView', x); + // TINY-7374: We can't rely on looking at the owner window HTMLElement as the element may have + // been constructed in a different window and then appended to the current window document. + return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf(x).constructor.name)); + }; + + const name = (element) => { + const r = element.dom.nodeName; + return r.toLowerCase(); + }; + const type = (element) => element.dom.nodeType; + const isType = (t) => (element) => type(element) === t; + const isComment = (element) => type(element) === COMMENT || name(element) === '#comment'; + const isHTMLElement = (element) => isElement(element) && isPrototypeOf(element.dom); + const isElement = isType(ELEMENT); + const isText = isType(TEXT); + const isDocument = isType(DOCUMENT); + const isDocumentFragment = isType(DOCUMENT_FRAGMENT); + const isTag = (tag) => (e) => isElement(e) && name(e) === tag; + + /** + * The document associated with the current element + * NOTE: this will throw if the owner is null. + */ + const owner = (element) => SugarElement.fromDom(element.dom.ownerDocument); + /** + * If the element is a document, return it. Otherwise, return its ownerDocument. + * @param dos + */ + const documentOrOwner = (dos) => isDocument(dos) ? dos : owner(dos); + const documentElement = (element) => SugarElement.fromDom(documentOrOwner(element).dom.documentElement); + /** + * The window element associated with the element + * NOTE: this will throw if the defaultView is null. + */ + const defaultView = (element) => SugarElement.fromDom(documentOrOwner(element).dom.defaultView); + const parent = (element) => Optional.from(element.dom.parentNode).map(SugarElement.fromDom); + const parentElement = (element) => Optional.from(element.dom.parentElement).map(SugarElement.fromDom); + const parents = (element, isRoot) => { + const stop = isFunction(isRoot) ? isRoot : never; + // This is used a *lot* so it needs to be performant, not recursive + let dom = element.dom; + const ret = []; + while (dom.parentNode !== null && dom.parentNode !== undefined) { + const rawParent = dom.parentNode; + const p = SugarElement.fromDom(rawParent); + ret.push(p); + if (stop(p) === true) { + break; + } + else { + dom = rawParent; + } + } + return ret; + }; + const prevSibling = (element) => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom); + const nextSibling = (element) => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom); + const children$2 = (element) => map$1(element.dom.childNodes, SugarElement.fromDom); + const child$2 = (element, index) => { + const cs = element.dom.childNodes; + return Optional.from(cs[index]).map(SugarElement.fromDom); + }; + const firstChild = (element) => child$2(element, 0); + + const makeRange = (start, soffset, finish, foffset) => { + const doc = owner(start); + // TODO: We need to think about a better place to put native range creation code. Does it even belong in sugar? + // Could the `Compare` checks (node.compareDocumentPosition) handle these situations better? + const rng = doc.dom.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }; + const after$5 = (start, soffset, finish, foffset) => { + const r = makeRange(start, soffset, finish, foffset); + const same = eq$1(start, finish) && soffset === foffset; + return r.collapsed && !same; + }; + + /** + * Is the element a ShadowRoot? + * + * Note: this is insufficient to test if any element is a shadow root, but it is sufficient to differentiate between + * a Document and a ShadowRoot. + */ + const isShadowRoot = (dos) => isDocumentFragment(dos) && isNonNullable(dos.dom.host); + const getRootNode = (e) => SugarElement.fromDom(e.dom.getRootNode()); + /** Where content needs to go. ShadowRoot or document body */ + const getContentContainer = (dos) => + // Can't use SugarBody.body without causing a circular module reference (since SugarBody.inBody uses SugarShadowDom) + isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body); + /** If this element is in a ShadowRoot, return it. */ + const getShadowRoot = (e) => { + const r = getRootNode(e); + return isShadowRoot(r) ? Optional.some(r) : Optional.none(); + }; + /** Return the host of a ShadowRoot. + * + * This function will throw if Shadow DOM is unsupported in the browser, or if the host is null. + * If you actually have a ShadowRoot, this shouldn't happen. + */ + const getShadowHost = (e) => SugarElement.fromDom(e.dom.host); + /** + * When Events bubble up through a ShadowRoot, the browser changes the target to be the shadow host. + * This function gets the "original" event target if possible. + * This only works if the shadow tree is open - if the shadow tree is closed, event.target is returned. + * See: https://developers.google.com/web/fundamentals/web-components/shadowdom#events + */ + const getOriginalEventTarget = (event) => { + if (isNonNullable(event.target)) { + const el = SugarElement.fromDom(event.target); + if (isElement(el) && isOpenShadowHost(el)) { + // When target element is inside Shadow DOM we need to take first element from composedPath + // otherwise we'll get Shadow Root parent, not actual target element. + if (event.composed && event.composedPath) { + const composedPath = event.composedPath(); + if (composedPath) { + return head(composedPath); + } + } + } + } + return Optional.from(event.target); + }; + /** Return true if the element is a host of an open shadow root. + * Return false if the element is a host of a closed shadow root, or if the element is not a host. + */ + const isOpenShadowHost = (element) => isNonNullable(element.dom.shadowRoot); + + const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({ + target, + x, + y, + stop, + prevent, + kill, + raw + }); + /** Wraps an Event in an EventArgs structure. + * The returned EventArgs structure has its target set to the "original" target if possible. + * See SugarShadowDom.getOriginalEventTarget + */ + const fromRawEvent$1 = (rawEvent) => { + const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target)); + const stop = () => rawEvent.stopPropagation(); + const prevent = () => rawEvent.preventDefault(); + const kill = compose(prevent, stop); // more of a sequence than a compose, but same effect + // FIX: Don't just expose the raw event. Need to identify what needs standardisation. + return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent); + }; + const handle$1 = (filter, handler) => (rawEvent) => { + if (filter(rawEvent)) { + handler(fromRawEvent$1(rawEvent)); + } + }; + const binder = (element, event, filter, handler, useCapture) => { + const wrapped = handle$1(filter, handler); + // IE9 minimum + element.dom.addEventListener(event, wrapped, useCapture); + return { + unbind: curry(unbind, element, event, wrapped, useCapture) + }; + }; + const bind$1 = (element, event, filter, handler) => binder(element, event, filter, handler, false); + const unbind = (element, event, handler, useCapture) => { + // IE9 minimum + element.dom.removeEventListener(event, handler, useCapture); + }; + + const filter = always; // no filter on plain DomEvents + const bind = (element, event, handler) => bind$1(element, event, filter, handler); + const fromRawEvent = fromRawEvent$1; + + const before$3 = (marker, element) => { + const parent$1 = parent(marker); + parent$1.each((v) => { + v.dom.insertBefore(element.dom, marker.dom); + }); + }; + const after$4 = (marker, element) => { + const sibling = nextSibling(marker); + sibling.fold(() => { + const parent$1 = parent(marker); + parent$1.each((v) => { + append$1(v, element); + }); + }, (v) => { + before$3(v, element); + }); + }; + const prepend = (parent, element) => { + const firstChild$1 = firstChild(parent); + firstChild$1.fold(() => { + append$1(parent, element); + }, (v) => { + parent.dom.insertBefore(element.dom, v.dom); + }); + }; + const append$1 = (parent, element) => { + parent.dom.appendChild(element.dom); + }; + const appendAt = (parent, element, index) => { + child$2(parent, index).fold(() => { + append$1(parent, element); + }, (v) => { + before$3(v, element); + }); + }; + const wrap = (element, wrapper) => { + before$3(element, wrapper); + append$1(wrapper, element); + }; + + const after$3 = (marker, elements) => { + each$2(elements, (x, i) => { + const e = i === 0 ? marker : elements[i - 1]; + after$4(e, x); + }); + }; + const append = (parent, elements) => { + each$2(elements, (x) => { + append$1(parent, x); + }); + }; + + const rawSet = (dom, key, value) => { + /* + * JQuery coerced everything to a string, and silently did nothing on text node/null/undefined. + * + * We fail on those invalid cases, only allowing numbers and booleans. + */ + if (isString(value) || isBoolean(value) || isNumber(value)) { + dom.setAttribute(key, value + ''); + } + else { + // eslint-disable-next-line no-console + console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); + throw new Error('Attribute value was not simple'); + } + }; + const set$2 = (element, key, value) => { + rawSet(element.dom, key, value); + }; + const setAll$1 = (element, attrs) => { + const dom = element.dom; + each$1(attrs, (v, k) => { + rawSet(dom, k, v); + }); + }; + const setOptions = (element, attrs) => { + each$1(attrs, (v, k) => { + v.fold(() => { + remove$6(element, k); + }, (value) => { + rawSet(element.dom, k, value); + }); + }); + }; + const get$b = (element, key) => { + const v = element.dom.getAttribute(key); + // undefined is the more appropriate value for JS, and this matches JQuery + return v === null ? undefined : v; + }; + const getOpt = (element, key) => Optional.from(get$b(element, key)); + const remove$6 = (element, key) => { + element.dom.removeAttribute(key); + }; + const clone$1 = (element) => foldl(element.dom.attributes, (acc, attr) => { + acc[attr.name] = attr.value; + return acc; + }, {}); + + const empty = (element) => { + // shortcut "empty node" trick. Requires IE 9. + element.dom.textContent = ''; + // If the contents was a single empty text node, the above doesn't remove it. But, it's still faster in general + // than removing every child node manually. + // The following is (probably) safe for performance as 99.9% of the time the trick works and + // Traverse.children will return an empty array. + each$2(children$2(element), (rogue) => { + remove$5(rogue); + }); + }; + const remove$5 = (element) => { + const dom = element.dom; + if (dom.parentNode !== null) { + dom.parentNode.removeChild(dom); + } + }; + const unwrap = (wrapper) => { + const children = children$2(wrapper); + if (children.length > 0) { + after$3(wrapper, children); + } + remove$5(wrapper); + }; + + const clone = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep)); + /** Shallow clone - just the tag, no children */ + const shallow = (original) => clone(original, false); + /** Deep clone - everything copied including children */ + const deep = (original) => clone(original, true); + /** Shallow clone, with a new tag */ + const shallowAs = (original, tag) => { + const nu = SugarElement.fromTag(tag); + const attributes = clone$1(original); + setAll$1(nu, attributes); + return nu; + }; + /** Deep clone, with a new tag */ + const copy$2 = (original, tag) => { + const nu = shallowAs(original, tag); + // NOTE + // previously this used serialisation: + // nu.dom.innerHTML = original.dom.innerHTML; + // + // Clone should be equivalent (and faster), but if TD <-> TH toggle breaks, put it back. + const cloneChildren = children$2(deep(original)); + append(nu, cloneChildren); + return nu; + }; + /** Change the tag name, but keep all children */ + const mutate$1 = (original, tag) => { + const nu = shallowAs(original, tag); + after$4(original, nu); + const children = children$2(original); + append(nu, children); + remove$5(original); + return nu; + }; + + const fromHtml = (html, scope) => { + const doc = scope || document; + const div = doc.createElement('div'); + div.innerHTML = html; + return children$2(SugarElement.fromDom(div)); + }; + const fromDom = (nodes) => map$1(nodes, SugarElement.fromDom); + + const get$a = (element) => element.dom.innerHTML; + const getOuter$2 = (element) => { + const container = SugarElement.fromTag('div'); + const clone = SugarElement.fromDom(element.dom.cloneNode(true)); + append$1(container, clone); + return get$a(container); + }; + + // some elements, such as mathml, don't have style attributes + // others, such as angular elements, have style attributes that aren't a CSSStyleDeclaration + const isSupported = (dom) => dom.style !== undefined && isFunction(dom.style.getPropertyValue); + + // Node.contains() is very, very, very good performance + // http://jsperf.com/closest-vs-contains/5 + const inBody = (element) => { + // Technically this is only required on IE, where contains() returns false for text nodes. + // But it's cheap enough to run everywhere and Sugar doesn't have platform detection (yet). + const dom = isText(element) ? element.dom.parentNode : element.dom; + // use ownerDocument.body to ensure this works inside iframes. + // Normally contains is bad because an element "contains" itself, but here we want that. + if (dom === undefined || dom === null || dom.ownerDocument === null) { + return false; + } + const doc = dom.ownerDocument; + return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost)); + }; + const getBody$1 = (doc) => { + const b = doc.dom.body; + if (b === null || b === undefined) { + throw new Error('Body is not available yet'); + } + return SugarElement.fromDom(b); + }; + + const internalSet = (dom, property, value) => { + // This is going to hurt. Apologies. + // JQuery coerces numbers to pixels for certain property names, and other times lets numbers through. + // we're going to be explicit; strings only. + if (!isString(value)) { + // eslint-disable-next-line no-console + console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); + throw new Error('CSS value must be a string: ' + value); + } + // removed: support for dom().style[property] where prop is camel case instead of normal property name + if (isSupported(dom)) { + dom.style.setProperty(property, value); + } + }; + const internalRemove = (dom, property) => { + /* + * IE9 and above - MDN doesn't have details, but here's a couple of random internet claims + * + * http://help.dottoro.com/ljopsjck.php + * http://stackoverflow.com/a/7901886/7546 + */ + if (isSupported(dom)) { + dom.style.removeProperty(property); + } + }; + const set$1 = (element, property, value) => { + const dom = element.dom; + internalSet(dom, property, value); + }; + const setAll = (element, css) => { + const dom = element.dom; + each$1(css, (v, k) => { + internalSet(dom, k, v); + }); + }; + /* + * NOTE: For certain properties, this returns the "used value" which is subtly different to the "computed value" (despite calling getComputedStyle). + * Blame CSS 2.0. + * + * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value + */ + const get$9 = (element, property) => { + const dom = element.dom; + /* + * IE9 and above per + * https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle + * + * Not in numerosity, because it doesn't memoize and looking this up dynamically in performance critical code would be horrendous. + * + * JQuery has some magic here for IE popups, but we don't really need that. + * It also uses element.ownerDocument.defaultView to handle iframes but that hasn't been required since FF 3.6. + */ + const styles = window.getComputedStyle(dom); + const r = styles.getPropertyValue(property); + // jquery-ism: If r is an empty string, check that the element is not in a document. If it isn't, return the raw value. + // Turns out we do this a lot. + return (r === '' && !inBody(element)) ? getUnsafeProperty(dom, property) : r; + }; + // removed: support for dom().style[property] where prop is camel case instead of normal property name + // empty string is what the browsers (IE11 and Chrome) return when the propertyValue doesn't exists. + const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : ''; + /* + * Gets the raw value from the style attribute. Useful for retrieving "used values" from the DOM: + * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value + * + * Returns NONE if the property isn't set, or the value is an empty string. + */ + const getRaw$2 = (element, property) => { + const dom = element.dom; + const raw = getUnsafeProperty(dom, property); + return Optional.from(raw).filter((r) => r.length > 0); + }; + const remove$4 = (element, property) => { + const dom = element.dom; + internalRemove(dom, property); + if (is$2(getOpt(element, 'style').map(trim), '')) { + // No more styles left, remove the style attribute as well + remove$6(element, 'style'); + } + }; + const copy$1 = (source, target) => { + const sourceDom = source.dom; + const targetDom = target.dom; + if (isSupported(sourceDom) && isSupported(targetDom)) { + targetDom.style.cssText = sourceDom.style.cssText; + } + }; + + const Dimension = (name, getOffset) => { + const set = (element, h) => { + if (!isNumber(h) && !h.match(/^[0-9]+$/)) { + throw new Error(name + '.set accepts only positive integer values. Value was ' + h); + } + const dom = element.dom; + if (isSupported(dom)) { + dom.style[name] = h + 'px'; + } + }; + /* + * jQuery supports querying width and height on the document and window objects. + * + * TBIO doesn't do this, so the code is removed to save space, but left here just in case. + */ + /* + var getDocumentWidth = (element) => { + var dom = element.dom; + if (Node.isDocument(element)) { + var body = dom.body; + var doc = dom.documentElement; + return Math.max( + body.scrollHeight, + doc.scrollHeight, + body.offsetHeight, + doc.offsetHeight, + doc.clientHeight + ); + } + }; + + var getWindowWidth = (element) => { + var dom = element.dom; + if (dom.window === dom) { + // There is no offsetHeight on a window, so use the clientHeight of the document + return dom.document.documentElement.clientHeight; + } + }; + */ + const get = (element) => { + const r = getOffset(element); + // zero or null means non-standard or disconnected, fall back to CSS + if (r <= 0 || r === null) { + const css = get$9(element, name); + // ugh this feels dirty, but it saves cycles + return parseFloat(css) || 0; + } + return r; + }; + // in jQuery, getOuter replicates (or uses) box-sizing: border-box calculations + // although these calculations only seem relevant for quirks mode, and edge cases TBIO doesn't rely on + const getOuter = get; + const aggregate = (element, properties) => foldl(properties, (acc, property) => { + const val = get$9(element, property); + const value = val === undefined ? 0 : parseInt(val, 10); + return isNaN(value) ? acc : acc + value; + }, 0); + const max = (element, value, properties) => { + const cumulativeInclusions = aggregate(element, properties); + // if max-height is 100px and your cumulativeInclusions is 150px, there is no way max-height can be 100px, so we return 0. + const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0; + return absoluteMax; + }; + return { + set, + get, + getOuter, + aggregate, + max + }; + }; + + const toNumber = (px, fallback) => toFloat(px).getOr(fallback); + const getProp = (element, name, fallback) => toNumber(get$9(element, name), fallback); + const calcContentBoxSize = (element, size, upper, lower) => { + const paddingUpper = getProp(element, `padding-${upper}`, 0); + const paddingLower = getProp(element, `padding-${lower}`, 0); + const borderUpper = getProp(element, `border-${upper}-width`, 0); + const borderLower = getProp(element, `border-${lower}-width`, 0); + return size - paddingUpper - paddingLower - borderUpper - borderLower; + }; + const getCalculatedWidth = (element, boxSizing) => { + const dom = element.dom; + const width = dom.getBoundingClientRect().width || dom.offsetWidth; + return boxSizing === 'border-box' ? width : calcContentBoxSize(element, width, 'left', 'right'); + }; + const getHeight$1 = (element) => getProp(element, 'height', element.dom.offsetHeight); + const getWidth = (element) => getProp(element, 'width', element.dom.offsetWidth); + const getInnerWidth = (element) => getCalculatedWidth(element, 'content-box'); + + const api$2 = Dimension('height', (element) => { + // getBoundingClientRect gives better results than offsetHeight for tables with captions on Firefox + const dom = element.dom; + return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight; + }); + const get$8 = (element) => api$2.get(element); + const getOuter$1 = (element) => api$2.getOuter(element); + const getRuntime$1 = getHeight$1; + + const api$1 = Dimension('width', (element) => { + const dom = element.dom; + return inBody(element) ? dom.getBoundingClientRect().width : dom.offsetWidth; + }); + const get$7 = (element) => api$1.get(element); + const getOuter = (element) => api$1.getOuter(element); + const getInner = getInnerWidth; + const getRuntime = getWidth; + + const r = (left, top) => { + const translate = (x, y) => r(left + x, top + y); + return { + left, + top, + translate + }; + }; + // tslint:disable-next-line:variable-name + const SugarPosition = r; + + const boxPosition = (dom) => { + const box = dom.getBoundingClientRect(); + return SugarPosition(box.left, box.top); + }; + // Avoids falsy false fallthrough + const firstDefinedOrZero = (a, b) => { + if (a !== undefined) { + return a; + } + else { + return b !== undefined ? b : 0; + } + }; + const absolute = (element) => { + const doc = element.dom.ownerDocument; + const body = doc.body; + const win = doc.defaultView; + const html = doc.documentElement; + if (body === element.dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + const scrollTop = firstDefinedOrZero(win?.pageYOffset, html.scrollTop); + const scrollLeft = firstDefinedOrZero(win?.pageXOffset, html.scrollLeft); + const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop); + const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft); + return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop); + }; + const viewport = (element) => { + const dom = element.dom; + const doc = dom.ownerDocument; + const body = doc.body; + if (body === dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + if (!inBody(element)) { + return SugarPosition(0, 0); + } + return boxPosition(dom); + }; + + // get scroll position (x,y) relative to document _doc (or global if not supplied) + const get$6 = (_DOC) => { + const doc = _DOC !== undefined ? _DOC.dom : document; + // ASSUMPTION: This is for cross-browser support, body works for Safari & EDGE, and when we have an iframe body scroller + const x = doc.body.scrollLeft || doc.documentElement.scrollLeft; + const y = doc.body.scrollTop || doc.documentElement.scrollTop; + return SugarPosition(x, y); + }; + // Scroll content by (x,y) relative to document _doc (or global if not supplied) + const by = (x, y, _DOC) => { + const doc = _DOC !== undefined ? _DOC.dom : document; + const win = doc.defaultView; + if (win) { + win.scrollBy(x, y); + } + }; + + const NodeValue = (is, name) => { + const get = (element) => { + if (!is(element)) { + throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); + } + return getOption(element).getOr(''); + }; + const getOption = (element) => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none(); + const set = (element, value) => { + if (!is(element)) { + throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); + } + element.dom.nodeValue = value; + }; + return { + get, + getOption, + set + }; + }; + + const api = NodeValue(isText, 'text'); + const get$5 = (element) => api.get(element); + const getOption = (element) => api.getOption(element); + const set = (element, value) => api.set(element, value); + + const onDirection = (isLtr, isRtl) => (element) => getDirection(element) === 'rtl' ? isRtl : isLtr; + const getDirection = (element) => get$9(element, 'direction') === 'rtl' ? 'rtl' : 'ltr'; + + // Methods for handling attributes that contain a list of values

+ const read = (element, attr) => { + const value = get$b(element, attr); + return value === undefined || value === '' ? [] : value.split(' '); + }; + const add$3 = (element, attr, id) => { + const old = read(element, attr); + const nu = old.concat([id]); + set$2(element, attr, nu.join(' ')); + return true; + }; + const remove$3 = (element, attr, id) => { + const nu = filter$2(read(element, attr), (v) => v !== id); + if (nu.length > 0) { + set$2(element, attr, nu.join(' ')); + } + else { + remove$6(element, attr); + } + return false; + }; + + var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => { + if (is(scope, a)) { + return Optional.some(scope); + } + else if (isFunction(isRoot) && isRoot(scope)) { + return Optional.none(); + } + else { + return ancestor(scope, a, isRoot); + } + }; + + const ancestor$2 = (scope, predicate, isRoot) => { + let element = scope.dom; + const stop = isFunction(isRoot) ? isRoot : never; + while (element.parentNode) { + element = element.parentNode; + const el = SugarElement.fromDom(element); + if (predicate(el)) { + return Optional.some(el); + } + else if (stop(el)) { + break; + } + } + return Optional.none(); + }; + const closest$2 = (scope, predicate, isRoot) => { + // This is required to avoid ClosestOrAncestor passing the predicate to itself + const is = (s, test) => test(s); + return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot); + }; + const child$1 = (scope, predicate) => { + const pred = (node) => predicate(SugarElement.fromDom(node)); + const result = find$1(scope.dom.childNodes, pred); + return result.map(SugarElement.fromDom); + }; + const descendant$1 = (scope, predicate) => { + const descend = (node) => { + // tslint:disable-next-line:prefer-for-of + for (let i = 0; i < node.childNodes.length; i++) { + const child = SugarElement.fromDom(node.childNodes[i]); + if (predicate(child)) { + return Optional.some(child); + } + const res = descend(node.childNodes[i]); + if (res.isSome()) { + return res; + } + } + return Optional.none(); + }; + return descend(scope.dom); + }; + + const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, (e) => is$1(e, selector), isRoot); + const child = (scope, selector) => child$1(scope, (e) => is$1(e, selector)); + const descendant = (scope, selector) => one(selector, scope); + // Returns Some(closest ancestor element (sugared)) matching 'selector' up to isRoot, or None() otherwise + const closest$1 = (scope, selector, isRoot) => { + const is = (element, selector) => is$1(element, selector); + return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot); + }; + + // IE11 Can return undefined for a classList on elements such as math, so we make sure it's not undefined before attempting to use it. + const supports = (element) => element.dom.classList !== undefined; + const get$4 = (element) => read(element, 'class'); + const add$2 = (element, clazz) => add$3(element, 'class', clazz); + const remove$2 = (element, clazz) => remove$3(element, 'class', clazz); + + /* + * ClassList is IE10 minimum: + * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList + * + * Note that IE doesn't support the second argument to toggle (at all). + * If it did, the toggler could be better. + */ + const add$1 = (element, clazz) => { + if (supports(element)) { + element.dom.classList.add(clazz); + } + else { + add$2(element, clazz); + } + }; + const cleanClass = (element) => { + const classList = supports(element) ? element.dom.classList : get$4(element); + // classList is a "live list", so this is up to date already + if (classList.length === 0) { + // No more classes left, remove the class attribute as well + remove$6(element, 'class'); + } + }; + const remove$1 = (element, clazz) => { + if (supports(element)) { + const classList = element.dom.classList; + classList.remove(clazz); + } + else { + remove$2(element, clazz); + } + cleanClass(element); + }; + const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz); + + const remove = (element, classes) => { + each$2(classes, (x) => { + remove$1(element, x); + }); + }; + + const closest = (target) => closest$1(target, '[contenteditable]'); + const isEditable$1 = (element, assumeEditable = false) => { + if (inBody(element)) { + return element.dom.isContentEditable; + } + else { + // Find the closest contenteditable element and check if it's editable + return closest(element).fold(constant(assumeEditable), (editable) => getRaw$1(editable) === 'true'); + } + }; + const getRaw$1 = (element) => element.dom.contentEditable; + + const addClass = (clazz) => (element) => { + add$1(element, clazz); + }; + const removeClasses = (classes) => (element) => { + remove(element, classes); + }; + + const ancestors$4 = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate); + const children$1 = (scope, predicate) => filter$2(children$2(scope), predicate); + const descendants$1 = (scope, predicate) => { + let result = []; + // Recurse.toArray() might help here + each$2(children$2(scope), (x) => { + if (predicate(x)) { + result = result.concat([x]); + } + result = result.concat(descendants$1(x, predicate)); + }); + return result; + }; + + // For all of the following: + // + // jQuery does siblings of firstChild. IE9+ supports scope.dom.children (similar to Traverse.children but elements only). + // Traverse should also do this (but probably not by default). + // + const ancestors$3 = (scope, selector, isRoot) => + // It may surprise you to learn this is exactly what JQuery does + // TODO: Avoid all this wrapping and unwrapping + ancestors$4(scope, (e) => is$1(e, selector), isRoot); + const children = (scope, selector) => + // It may surprise you to learn this is exactly what JQuery does + // TODO: Avoid all the wrapping and unwrapping + children$1(scope, (e) => is$1(e, selector)); + const descendants = (scope, selector) => all$1(selector, scope); + + const inParent = (parent, children, element, index) => ({ + parent, + children, + element, + index + }); + const indexInParent = (element) => parent(element).bind((parent) => { + const children = children$2(parent); + return indexOf(children, element).map((index) => inParent(parent, children, element, index)); + }); + const indexOf = (elements, element) => findIndex(elements, curry(eq$1, element)); + + const ancestor = (scope, predicate, isRoot) => ancestor$2(scope, predicate, isRoot).isSome(); + + const getEnd = (element) => name(element) === 'img' ? 1 : getOption(element).fold(() => children$2(element).length, (v) => v.length); + const isTextNodeWithCursorPosition = (el) => getOption(el).filter((text) => + // For the purposes of finding cursor positions only allow text nodes with content, + // but trim removes   and that's allowed + text.trim().length !== 0 || text.indexOf(nbsp) > -1).isSome(); + const isContentEditableFalse = (elem) => isHTMLElement(elem) && (get$b(elem, 'contenteditable') === 'false'); + const elementsWithCursorPosition = ['img', 'br']; + const isCursorPosition = (elem) => { + const hasCursorPosition = isTextNodeWithCursorPosition(elem); + return hasCursorPosition || contains$2(elementsWithCursorPosition, name(elem)) || isContentEditableFalse(elem); + }; + + const first = (element) => descendant$1(element, isCursorPosition); + const last = (element) => descendantRtl(element, isCursorPosition); + // Note, sugar probably needs some RTL traversals. + const descendantRtl = (scope, predicate) => { + const descend = (element) => { + const children = children$2(element); + for (let i = children.length - 1; i >= 0; i--) { + const child = children[i]; + if (predicate(child)) { + return Optional.some(child); + } + const res = descend(child); + if (res.isSome()) { + return res; + } + } + return Optional.none(); + }; + return descend(scope); + }; + + const create$4 = (start, soffset, finish, foffset) => ({ + start, + soffset, + finish, + foffset + }); + // tslint:disable-next-line:variable-name + const SimRange = { + create: create$4 + }; + + const adt$5 = Adt.generate([ + { before: ['element'] }, + { on: ['element', 'offset'] }, + { after: ['element'] } + ]); + // Probably don't need this given that we now have "match" + const cata$1 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter); + const getStart$1 = (situ) => situ.fold(identity, identity, identity); + const before$2 = adt$5.before; + const on = adt$5.on; + const after$2 = adt$5.after; + // tslint:disable-next-line:variable-name + const Situ = { + before: before$2, + on, + after: after$2, + cata: cata$1, + getStart: getStart$1 + }; + + // Consider adding a type for "element" + const adt$4 = Adt.generate([ + { domRange: ['rng'] }, + { relative: ['startSitu', 'finishSitu'] }, + { exact: ['start', 'soffset', 'finish', 'foffset'] } + ]); + const exactFromRange = (simRange) => adt$4.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset); + const getStart = (selection) => selection.match({ + domRange: (rng) => SugarElement.fromDom(rng.startContainer), + relative: (startSitu, _finishSitu) => Situ.getStart(startSitu), + exact: (start, _soffset, _finish, _foffset) => start + }); + const domRange = adt$4.domRange; + const relative = adt$4.relative; + const exact = adt$4.exact; + const getWin = (selection) => { + const start = getStart(selection); + return defaultView(start); + }; + // This is out of place but it's API so I can't remove it + const range = SimRange.create; + // tslint:disable-next-line:variable-name + const SimSelection = { + domRange, + relative, + exact, + exactFromRange, + getWin, + range + }; + + const caretPositionFromPoint = (doc, x, y) => Optional.from(doc.caretPositionFromPoint?.(x, y)) + .bind((pos) => { + // It turns out that Firefox can return null for pos.offsetNode + if (pos.offsetNode === null) { + return Optional.none(); + } + const r = doc.createRange(); + r.setStart(pos.offsetNode, pos.offset); + r.collapse(); + return Optional.some(r); + }); + const caretRangeFromPoint = (doc, x, y) => Optional.from(doc.caretRangeFromPoint?.(x, y)); + const availableSearch = (doc, x, y) => { + if (doc.caretPositionFromPoint) { + return caretPositionFromPoint(doc, x, y); // defined standard, firefox only + } + else if (doc.caretRangeFromPoint) { + return caretRangeFromPoint(doc, x, y); // webkit/blink implementation + } + else { + return Optional.none(); // unsupported browser + } + }; + const fromPoint = (win, x, y) => { + const doc = win.document; + return availableSearch(doc, x, y).map((rng) => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset)); + }; + + const beforeSpecial = (element, offset) => { + // From memory, we don't want to use
directly on Firefox because it locks the keyboard input. + // It turns out that directly on IE locks the keyboard as well. + // If the offset is 0, use before. If the offset is 1, use after. + // TBIO-3889: Firefox Situ.on results in a child of the ; Situ.before results in platform inconsistencies + const name$1 = name(element); + if ('input' === name$1) { + return Situ.after(element); + } + else if (!contains$2(['br', 'img'], name$1)) { + return Situ.on(element, offset); + } + else { + return offset === 0 ? Situ.before(element) : Situ.after(element); + } + }; + const preprocessRelative = (startSitu, finishSitu) => { + const start = startSitu.fold(Situ.before, beforeSpecial, Situ.after); + const finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after); + return SimSelection.relative(start, finish); + }; + const preprocessExact = (start, soffset, finish, foffset) => { + const startSitu = beforeSpecial(start, soffset); + const finishSitu = beforeSpecial(finish, foffset); + return SimSelection.relative(startSitu, finishSitu); + }; + + const getNativeSelection = (win) => Optional.from(win.getSelection()); + const doSetNativeRange = (win, rng) => { + getNativeSelection(win).each((selection) => { + selection.removeAllRanges(); + selection.addRange(rng); + }); + }; + const doSetRange = (win, start, soffset, finish, foffset) => { + const rng = exactToNative(win, start, soffset, finish, foffset); + doSetNativeRange(win, rng); + }; + const setLegacyRtlRange = (win, selection, start, soffset, finish, foffset) => { + selection.collapse(start.dom, soffset); + selection.extend(finish.dom, foffset); + }; + const setRangeFromRelative = (win, relative) => diagnose(win, relative).match({ + ltr: (start, soffset, finish, foffset) => { + doSetRange(win, start, soffset, finish, foffset); + }, + rtl: (start, soffset, finish, foffset) => { + getNativeSelection(win).each((selection) => { + // If this selection is backwards, then we need to use extend. + if (selection.setBaseAndExtent) { + selection.setBaseAndExtent(start.dom, soffset, finish.dom, foffset); + } + else if (selection.extend) { + // This try catch is for older browsers (Firefox 52) as they're sometimes unable to handle setting backwards selections using selection.extend and error out. + try { + setLegacyRtlRange(win, selection, start, soffset, finish, foffset); + } + catch { + // If it does fail, try again with ltr. + doSetRange(win, finish, foffset, start, soffset); + } + } + else { + doSetRange(win, finish, foffset, start, soffset); + } + }); + } + }); + const setExact = (win, start, soffset, finish, foffset) => { + const relative = preprocessExact(start, soffset, finish, foffset); + setRangeFromRelative(win, relative); + }; + const setRelative = (win, startSitu, finishSitu) => { + const relative = preprocessRelative(startSitu, finishSitu); + setRangeFromRelative(win, relative); + }; + // NOTE: We are still reading the range because it gives subtly different behaviour + // than using the anchorNode and focusNode. I'm not sure if this behaviour is any + // better or worse; it's just different. + const readRange = (selection) => { + if (selection.rangeCount > 0) { + const firstRng = selection.getRangeAt(0); + const lastRng = selection.getRangeAt(selection.rangeCount - 1); + return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset)); + } + else { + return Optional.none(); + } + }; + const doGetExact = (selection) => { + if (selection.anchorNode === null || selection.focusNode === null) { + return readRange(selection); + } + else { + const anchor = SugarElement.fromDom(selection.anchorNode); + const focus = SugarElement.fromDom(selection.focusNode); + // if this returns true anchor is _after_ focus, so we need a custom selection object to maintain the RTL selection + return after$5(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection); + } + }; + const setToElement = (win, element, selectNodeContents$1 = true) => { + const rngGetter = selectNodeContents$1 ? selectNodeContents : selectNode; + const rng = rngGetter(win, element); + doSetNativeRange(win, rng); + }; + const getExact = (win) => + // We want to retrieve the selection as it is. + getNativeSelection(win) + .filter((sel) => sel.rangeCount > 0) + .bind(doGetExact); + // TODO: Test this. + const get$3 = (win) => getExact(win).map((range) => SimSelection.exact(range.start, range.soffset, range.finish, range.foffset)); + const getFirstRect = (win, selection) => { + const rng = asLtrRange(win, selection); + return getFirstRect$1(rng); + }; + const getAtPoint = (win, x, y) => fromPoint(win, x, y); + const clear = (win) => { + getNativeSelection(win).each((selection) => selection.removeAllRanges()); + }; + + const units = { + // we don't really support all of these different ways to express a length + unsupportedLength: [ + 'em', + 'ex', + 'cap', + 'ch', + 'ic', + 'rem', + 'lh', + 'rlh', + 'vw', + 'vh', + 'vi', + 'vb', + 'vmin', + 'vmax', + 'cm', + 'mm', + 'Q', + 'in', + 'pc', + 'pt', + 'px' + ], + // these are the length values we do support + fixed: ['px', 'pt'], + relative: ['%'], + empty: [''] + }; + // Built from https://tc39.es/ecma262/#prod-StrDecimalLiteral + // Matches a float followed by a trailing set of characters + const pattern = (() => { + const decimalDigits = '[0-9]+'; + const signedInteger = '[+-]?' + decimalDigits; + const exponentPart = '[eE]' + signedInteger; + const dot = '\\.'; + const opt = (input) => `(?:${input})?`; + const unsignedDecimalLiteral = [ + 'Infinity', + decimalDigits + dot + opt(decimalDigits) + opt(exponentPart), + dot + decimalDigits + opt(exponentPart), + decimalDigits + opt(exponentPart) + ].join('|'); + const float = `[+-]?(?:${unsignedDecimalLiteral})`; + return new RegExp(`^(${float})(.*)$`); + })(); + const isUnit = (unit, accepted) => exists(accepted, (acc) => exists(units[acc], (check) => unit === check)); + const parse = (input, accepted) => { + const match = Optional.from(pattern.exec(input)); + return match.bind((array) => { + const value = Number(array[1]); + const unitRaw = array[2]; + if (isUnit(unitRaw, accepted)) { + return Optional.some({ + value, + unit: unitRaw + }); + } + else { + return Optional.none(); + } + }); + }; + + const zero = (array) => map$1(array, constant(0)); + const surround = (sizes, startIndex, endIndex, results, f) => f(sizes.slice(0, startIndex)).concat(results).concat(f(sizes.slice(endIndex))); + // Clamp positive or negative delta so that a column/row cannot be reduced past its min size + const clampDeltaHelper = (predicate) => (sizes, index, delta, minCellSize) => { + if (!predicate(delta)) { + return delta; + } + else { + const newSize = Math.max(minCellSize, sizes[index] - Math.abs(delta)); + const diff = Math.abs(newSize - sizes[index]); + return delta >= 0 ? diff : -diff; + } + }; + const clampNegativeDelta = clampDeltaHelper((delta) => delta < 0); + const clampDelta = clampDeltaHelper(always); + // Preserve the size of the columns/rows and adjust the table size + const resizeTable = () => { + const calcFixedDeltas = (sizes, index, next, delta, minCellSize) => { + const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize); + return surround(sizes, index, next + 1, [clampedDelta, 0], zero); + }; + // Calculate delta for adjusted column + // Also need to calculate deltas for all other columns/rows to ensure they stay at the same visual width/height + // when the table width/height is adjusted + const calcRelativeDeltas = (sizes, index, delta, minCellSize) => { + // ASSUMPTION: The delta will be a percentage. This may not be correct if other relative sizing is added, so we probably + // need a better way to calc the ratio. + const ratio = (100 + delta) / 100; + const newThis = Math.max(minCellSize, (sizes[index] + delta) / ratio); + return map$1(sizes, (size, idx) => { + const newSize = idx === index ? newThis : size / ratio; + return newSize - size; + }); + }; + // Calculations for the inner columns/rows + const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize, isRelative) => { + if (isRelative) { + return calcRelativeDeltas(sizes, index, delta, minCellSize); + } + else { + return calcFixedDeltas(sizes, index, next, delta, minCellSize); + } + }; + const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize, isRelative) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize, isRelative); + const resizeTable = (resizer, delta) => resizer(delta); + // Calculations for the last column/row resizer + const calcRightEdgeDeltas = (sizes, _prev, index, delta, minCellSize, isRelative) => { + if (isRelative) { + return calcRelativeDeltas(sizes, index, delta, minCellSize); + } + else { + const clampedDelta = clampNegativeDelta(sizes, index, delta, minCellSize); + return zero(sizes.slice(0, index)).concat([clampedDelta]); + } + }; + const calcRedestributedWidths = (sizes, totalWidth, pixelDelta, isRelative) => { + if (isRelative) { + const tableWidth = totalWidth + pixelDelta; + const ratio = tableWidth / totalWidth; + const newSizes = map$1(sizes, (size) => size / ratio); + return { + delta: (ratio * 100) - 100, + newSizes, + }; + } + else { + return { + delta: pixelDelta, + newSizes: sizes, + }; + } + }; + return { + resizeTable, + clampTableDelta: clampNegativeDelta, + calcLeftEdgeDeltas, + calcMiddleDeltas, + calcRightEdgeDeltas, + calcRedestributedWidths, + }; + }; + // Distribute the column/rows and try to preserve the table size + const preserveTable = () => { + // Calculations for the inner columns/rows + const calcLeftEdgeDeltas = (sizes, index, next, delta, minCellSize) => { + const idx = delta >= 0 ? next : index; + const clampedDelta = clampDelta(sizes, idx, delta, minCellSize); + // negative delta -> deltas becomes [ neg, pos ], positive delta -> deltas becomes [ pos, neg ] + return surround(sizes, index, next + 1, [clampedDelta, -clampedDelta], zero); + }; + const calcMiddleDeltas = (sizes, _prev, index, next, delta, minCellSize) => calcLeftEdgeDeltas(sizes, index, next, delta, minCellSize); + const resizeTable = (resizer, delta, isLastColumn) => { + if (isLastColumn) { + resizer(delta); + } + }; + // Calculations for the last column/row resizer + const calcRightEdgeDeltas = (sizes, _prev, _index, delta, _minCellSize, isRelative) => { + if (isRelative) { + return zero(sizes); + } + else { + // Distribute the delta amongst all of the columns/rows + const diff = delta / sizes.length; + return map$1(sizes, constant(diff)); + } + }; + const clampTableDelta = (sizes, index, delta, minCellSize, isLastColumn) => { + // Don't clamp the last resizer using normal methods + // Need to allow table width to be reduced past the last column position to allow for distributive resizing + if (isLastColumn) { + if (delta >= 0) { + return delta; + } + else { + // Clamp delta so that none of the columns/rows can reduce below their min size + const maxDelta = foldl(sizes, (a, b) => a + b - minCellSize, 0); + return Math.max(-maxDelta, delta); + } + } + else { + return clampNegativeDelta(sizes, index, delta, minCellSize); + } + }; + const calcRedestributedWidths = (sizes, _totalWidth, _pixelDelta, _isRelative) => ({ + delta: 0, + newSizes: sizes, + }); + return { + resizeTable, + clampTableDelta, + calcLeftEdgeDeltas, + calcMiddleDeltas, + calcRightEdgeDeltas, + calcRedestributedWidths + }; + }; + + const getAttrValue = (cell, name, fallback = 0) => getOpt(cell, name).map((value) => parseInt(value, 10)).getOr(fallback); + const getSpan = (cell, type) => getAttrValue(cell, type, 1); + const hasColspan = (cellOrCol) => { + if (isTag('col')(cellOrCol)) { + return getAttrValue(cellOrCol, 'span', 1) > 1; + } + else { + return getSpan(cellOrCol, 'colspan') > 1; + } + }; + const hasRowspan = (cell) => getSpan(cell, 'rowspan') > 1; + const getCssValue = (element, property) => parseInt(get$9(element, property), 10); + const minWidth = constant(10); + const minHeight = constant(10); + + const firstLayer = (scope, selector) => { + return filterFirstLayer(scope, selector, always); + }; + const filterFirstLayer = (scope, selector, predicate) => { + return bind$2(children$2(scope), (x) => { + if (is$1(x, selector)) { + return predicate(x) ? [x] : []; + } + else { + return filterFirstLayer(x, selector, predicate); + } + }); + }; + + // lookup inside this table + const lookup = (tags, element, isRoot = never) => { + // If the element we're inspecting is the root, we definitely don't want it. + if (isRoot(element)) { + return Optional.none(); + } + // This looks a lot like SelectorFind.closest, with one big exception - the isRoot check. + // The code here will look for parents if passed a table, SelectorFind.closest with that specific isRoot check won't. + if (contains$2(tags, name(element))) { + return Optional.some(element); + } + const isRootOrUpperTable = (elm) => is$1(elm, 'table') || isRoot(elm); + return ancestor$1(element, tags.join(','), isRootOrUpperTable); + }; + /* + * Identify the optional cell that element represents. + */ + const cell = (element, isRoot) => lookup(['td', 'th'], element, isRoot); + const cells$1 = (ancestor) => firstLayer(ancestor, 'th,td'); + const columns$1 = (ancestor) => { + if (is$1(ancestor, 'colgroup')) { + return children(ancestor, 'col'); + } + else { + return bind$2(columnGroups(ancestor), (columnGroup) => children(columnGroup, 'col')); + } + }; + const table = (element, isRoot) => closest$1(element, 'table', isRoot); + const rows$1 = (ancestor) => firstLayer(ancestor, 'tr'); + const columnGroups = (ancestor) => table(ancestor).fold(constant([]), (table) => children(table, 'colgroup')); + + const isHeaderCell = isTag('th'); + const isHeaderCells = (cells) => forall(cells, (cell) => isHeaderCell(cell.element)); + const getRowHeaderType = (isHeaderRow, isHeaderCells) => { + if (isHeaderRow && isHeaderCells) { + return 'sectionCells'; + } + else if (isHeaderRow) { + return 'section'; + } + else { + return 'cells'; + } + }; + const getRowType = (row) => { + // Header rows can use a combination of theads and ths - want to detect the different combinations + const isHeaderRow = row.section === 'thead'; + const isHeaderCells = is$2(findCommonCellType(row.cells), 'th'); + if (row.section === 'tfoot') { + return { type: 'footer' }; + } + else if (isHeaderRow || isHeaderCells) { + return { type: 'header', subType: getRowHeaderType(isHeaderRow, isHeaderCells) }; + } + else { + return { type: 'body' }; + } + }; + const findCommonCellType = (cells) => { + const headerCells = filter$2(cells, (cell) => isHeaderCell(cell.element)); + if (headerCells.length === 0) { + return Optional.some('td'); + } + else if (headerCells.length === cells.length) { + return Optional.some('th'); + } + else { + return Optional.none(); + } + }; + const findCommonRowType = (rows) => { + const rowTypes = map$1(rows, (row) => getRowType(row).type); + const hasHeader = contains$2(rowTypes, 'header'); + const hasFooter = contains$2(rowTypes, 'footer'); + if (!hasHeader && !hasFooter) { + return Optional.some('body'); + } + else { + const hasBody = contains$2(rowTypes, 'body'); + if (hasHeader && !hasBody && !hasFooter) { + return Optional.some('header'); + } + else if (!hasHeader && !hasBody && hasFooter) { + return Optional.some('footer'); + } + else { + return Optional.none(); + } + } + }; + const findTableRowHeaderType = (warehouse) => findMap(warehouse.all, (row) => { + const rowType = getRowType(row); + return rowType.type === 'header' ? Optional.from(rowType.subType) : Optional.none(); + }); + + const fromRowsOrColGroups = (elems, getSection) => map$1(elems, (row) => { + if (name(row) === 'colgroup') { + const cells = map$1(columns$1(row), (column) => { + const colspan = getAttrValue(column, 'span', 1); + return detail(column, 1, colspan); + }); + return rowdetail(row, cells, 'colgroup'); + } + else { + const cells = map$1(cells$1(row), (cell) => { + const rowspan = getAttrValue(cell, 'rowspan', 1); + const colspan = getAttrValue(cell, 'colspan', 1); + return detail(cell, rowspan, colspan); + }); + return rowdetail(row, cells, getSection(row)); + } + }); + const getParentSection = (group) => parent(group).map((parent) => { + const parentName = name(parent); + return isValidSection(parentName) ? parentName : 'tbody'; + }).getOr('tbody'); + /* + * Takes a DOM table and returns a list of list of: + element: row element + cells: (id, rowspan, colspan) structs + */ + const fromTable$1 = (table) => { + const rows = rows$1(table); + const columnGroups$1 = columnGroups(table); + const elems = [...columnGroups$1, ...rows]; + return fromRowsOrColGroups(elems, getParentSection); + }; + const fromPastedRows = (elems, section) => fromRowsOrColGroups(elems, () => section); + + const LOCKED_COL_ATTR = 'data-snooker-locked-cols'; + const getLockedColumnsFromTable = (table) => getOpt(table, LOCKED_COL_ATTR) + .bind((lockedColStr) => Optional.from(lockedColStr.match(/\d+/g))) + .map((lockedCols) => mapToObject(lockedCols, always)); + // Need to check all of the cells to determine which columns are locked - reasoning is because rowspan and colspan cells where the same cell is used by multiple columns + const getLockedColumnsFromGrid = (grid) => { + const locked = foldl(extractGridDetails(grid).rows, (acc, row) => { + each$2(row.cells, (cell, idx) => { + if (cell.isLocked) { + acc[idx] = true; + } + }); + return acc; + }, {}); + const lockedArr = mapToArray(locked, (_val, key) => parseInt(key, 10)); + return sort$1(lockedArr); + }; + + const key = (row, column) => { + return row + ',' + column; + }; + const getAt = (warehouse, row, column) => Optional.from(warehouse.access[key(row, column)]); + const findItem = (warehouse, item, comparator) => { + const filtered = filterItems(warehouse, (detail) => { + return comparator(item, detail.element); + }); + return filtered.length > 0 ? Optional.some(filtered[0]) : Optional.none(); + }; + const filterItems = (warehouse, predicate) => { + const all = bind$2(warehouse.all, (r) => { + return r.cells; + }); + return filter$2(all, predicate); + }; + const generateColumns = (rowData) => { + const columnsGroup = {}; + let index = 0; + each$2(rowData.cells, (column) => { + const colspan = column.colspan; + range$1(colspan, (columnIndex) => { + const colIndex = index + columnIndex; + columnsGroup[colIndex] = columnext(column.element, colspan, colIndex); + }); + index += colspan; + }); + return columnsGroup; + }; + /* + * From a list of list of Detail, generate three pieces of information: + * 1. the grid size + * 2. a data structure which can efficiently identify which cell is in which row,column position + * 3. a list of all cells in order left-to-right, top-to-bottom + */ + const generate = (list) => { + // list is an array of objects, made by cells and elements + // elements: is the TR + // cells: is an array of objects representing the cells in the row. + // It is made of: + // colspan (merge cell) + // element + // rowspan (merge cols) + const access = {}; + const cells = []; + const tableOpt = head(list).map((rowData) => rowData.element).bind(table); + const lockedColumns = tableOpt.bind(getLockedColumnsFromTable).getOr({}); + let maxRows = 0; + let maxColumns = 0; + let rowCount = 0; + const { pass: colgroupRows, fail: rows } = partition(list, (rowData) => rowData.section === 'colgroup'); + // Handle rows first + each$2(rows, (rowData) => { + const currentRow = []; + each$2(rowData.cells, (rowCell) => { + let start = 0; + // If this spot has been taken by a previous rowspan, skip it. + while (access[key(rowCount, start)] !== undefined) { + start++; + } + const isLocked = hasNonNullableKey(lockedColumns, start.toString()); + const current = extended(rowCell.element, rowCell.rowspan, rowCell.colspan, rowCount, start, isLocked); + // Occupy all the (row, column) positions that this cell spans for. + for (let occupiedColumnPosition = 0; occupiedColumnPosition < rowCell.colspan; occupiedColumnPosition++) { + for (let occupiedRowPosition = 0; occupiedRowPosition < rowCell.rowspan; occupiedRowPosition++) { + const rowPosition = rowCount + occupiedRowPosition; + const columnPosition = start + occupiedColumnPosition; + const newpos = key(rowPosition, columnPosition); + access[newpos] = current; + maxColumns = Math.max(maxColumns, columnPosition + 1); + } + } + currentRow.push(current); + }); + maxRows++; + cells.push(rowdetail(rowData.element, currentRow, rowData.section)); + rowCount++; + }); + // Handle colgroups + // Note: Currently only a single colgroup is supported so just use the last one + const { columns, colgroups } = last$2(colgroupRows).map((rowData) => { + const columns = generateColumns(rowData); + const colgroup$1 = colgroup(rowData.element, values(columns)); + return { + colgroups: [colgroup$1], + columns + }; + }).getOrThunk(() => ({ + colgroups: [], + columns: {} + })); + const grid$1 = grid(maxRows, maxColumns); + return { + grid: grid$1, + access, + all: cells, + columns, + colgroups + }; + }; + const fromTable = (table) => { + const list = fromTable$1(table); + return generate(list); + }; + const justCells = (warehouse) => bind$2(warehouse.all, (w) => w.cells); + const justColumns = (warehouse) => values(warehouse.columns); + const hasColumns = (warehouse) => keys(warehouse.columns).length > 0; + const getColumnAt = (warehouse, columnIndex) => Optional.from(warehouse.columns[columnIndex]); + const Warehouse = { + fromTable, + generate, + getAt, + findItem, + filterItems, + justCells, + justColumns, + hasColumns, + getColumnAt + }; + + const transformCell = (cell, comparator, substitution) => elementnew(substitution(cell.element, comparator), true, cell.isLocked); + const transformRow = (row, section) => row.section !== section ? rowcells(row.element, row.cells, section, row.isNew) : row; + const section = () => ({ + transformRow, + transformCell: (cell, comparator, substitution) => { + const newCell = substitution(cell.element, comparator); + // Convert the cell to a td element as "section" should always use td element + const fixedCell = name(newCell) !== 'td' ? mutate$1(newCell, 'td') : newCell; + return elementnew(fixedCell, cell.isNew, cell.isLocked); + } + }); + const sectionCells = () => ({ + transformRow, + transformCell + }); + const cells = () => ({ + transformRow: (row, section) => { + // Ensure that cells are always within the tbody for headers + const newSection = section === 'thead' ? 'tbody' : section; + return transformRow(row, newSection); + }, + transformCell + }); + // A fallback legacy type that won't adjust the row/section type + // and instead will only modify cells + const fallback = () => ({ + transformRow: identity, + transformCell + }); + const getTableSectionType = (table, fallback) => { + const warehouse = Warehouse.fromTable(table); + const type = findTableRowHeaderType(warehouse).getOr(fallback); + switch (type) { + case 'section': + return section(); + case 'sectionCells': + return sectionCells(); + case 'cells': + return cells(); + } + }; + const TableSection = { + getTableSectionType, + section, + sectionCells, + cells, + fallback + }; + + /* + * Identify for each column, a cell that has colspan 1. Note, this + * may actually fail, and future work will be to calculate column + * sizes that are only available through the difference of two + * spanning columns. + */ + const columns = (warehouse, isValidCell = always) => { + const grid = warehouse.grid; + const cols = range$1(grid.columns, identity); + const rowsArr = range$1(grid.rows, identity); + return map$1(cols, (col) => { + const getBlock = () => bind$2(rowsArr, (r) => Warehouse.getAt(warehouse, r, col) + .filter((detail) => detail.column === col) + .toArray()); + const isValid = (detail) => detail.colspan === 1 && isValidCell(detail.element); + const getFallback = () => Warehouse.getAt(warehouse, 0, col); + return decide(getBlock, isValid, getFallback); + }); + }; + const decide = (getBlock, isValid, getFallback) => { + const inBlock = getBlock(); + const validInBlock = find$1(inBlock, isValid); + const detailOption = validInBlock.orThunk(() => Optional.from(inBlock[0]).orThunk(getFallback)); + return detailOption.map((detail) => detail.element); + }; + const rows = (warehouse) => { + const grid = warehouse.grid; + const rowsArr = range$1(grid.rows, identity); + const cols = range$1(grid.columns, identity); + return map$1(rowsArr, (row) => { + const getBlock = () => bind$2(cols, (c) => Warehouse.getAt(warehouse, row, c) + .filter((detail) => detail.row === row) + .fold(constant([]), (detail) => [detail])); + const isSingle = (detail) => detail.rowspan === 1; + const getFallback = () => Warehouse.getAt(warehouse, row, 0); + return decide(getBlock, isSingle, getFallback); + }); + }; + + const deduce = (xs, index) => { + if (index < 0 || index >= xs.length - 1) { + return Optional.none(); + } + const current = xs[index].fold(() => { + const rest = reverse(xs.slice(0, index)); + return findMap(rest, (a, i) => a.map((aa) => ({ value: aa, delta: i + 1 }))); + }, (c) => Optional.some({ value: c, delta: 0 })); + const next = xs[index + 1].fold(() => { + const rest = xs.slice(index + 1); + return findMap(rest, (a, i) => a.map((aa) => ({ value: aa, delta: i + 1 }))); + }, (n) => Optional.some({ value: n, delta: 1 })); + return current.bind((c) => next.map((n) => { + const extras = n.delta + c.delta; + return Math.abs(n.value - c.value) / extras; + })); + }; + + const rowInfo = (row, y) => ({ + row, + y + }); + const colInfo = (col, x) => ({ + col, + x + }); + const rtlEdge = (cell) => { + const pos = absolute(cell); + return pos.left + getOuter(cell); + }; + const ltrEdge = (cell) => { + return absolute(cell).left; + }; + const getLeftEdge = (index, cell) => { + return colInfo(index, ltrEdge(cell)); + }; + const getRightEdge = (index, cell) => { + return colInfo(index, rtlEdge(cell)); + }; + const getTop$1 = (cell) => { + return absolute(cell).top; + }; + const getTopEdge = (index, cell) => { + return rowInfo(index, getTop$1(cell)); + }; + const getBottomEdge = (index, cell) => { + return rowInfo(index, getTop$1(cell) + getOuter$1(cell)); + }; + const findPositions = (getInnerEdge, getOuterEdge, array) => { + if (array.length === 0) { + return []; + } + const lines = map$1(array.slice(1), (cellOption, index) => { + return cellOption.map((cell) => { + return getInnerEdge(index, cell); + }); + }); + const lastLine = array[array.length - 1].map((cell) => { + return getOuterEdge(array.length - 1, cell); + }); + return lines.concat([lastLine]); + }; + const negate = (step) => { + return -step; + }; + const height = { + delta: identity, + positions: (optElements) => findPositions(getTopEdge, getBottomEdge, optElements), + edge: getTop$1 + }; + const ltr$1 = { + delta: identity, + edge: ltrEdge, + positions: (optElements) => findPositions(getLeftEdge, getRightEdge, optElements) + }; + const rtl$1 = { + delta: negate, + edge: rtlEdge, + positions: (optElements) => findPositions(getRightEdge, getLeftEdge, optElements) + }; + const detect$1 = onDirection(ltr$1, rtl$1); + const width = { + delta: (amount, table) => detect$1(table).delta(amount, table), + positions: (cols, table) => detect$1(table).positions(cols, table), + edge: (cell) => detect$1(cell).edge(cell) + }; + + const rPercentageBasedSizeRegex = /(\d+(\.\d+)?)%/; + const rPixelBasedSizeRegex = /(\d+(\.\d+)?)px|em/; + const isCol$2 = isTag('col'); + const isRow$2 = isTag('tr'); + const getPercentSize = (elm, outerGetter, innerGetter) => { + const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm))); + return outerGetter(elm) / innerGetter(relativeParent) * 100; + }; + const setPixelWidth = (cell, amount) => { + set$1(cell, 'width', amount + 'px'); + }; + const setPercentageWidth = (cell, amount) => { + set$1(cell, 'width', amount + '%'); + }; + const setHeight = (cell, amount) => { + set$1(cell, 'height', amount + 'px'); + }; + const removeHeight = (cell) => { + remove$4(cell, 'height'); + }; + const getHeightValue = (cell) => getRuntime$1(cell) + 'px'; + const convert = (cell, number, getter, setter) => { + const newSize = table(cell).map((table) => { + const total = getter(table); + return Math.floor((number / 100.0) * total); + }).getOr(number); + setter(cell, newSize); + return newSize; + }; + const normalizePixelSize = (value, cell, getter, setter) => { + const number = parseFloat(value); + return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number; + }; + const getTotalHeight = (cell) => { + const value = getHeightValue(cell); + if (!value) { + return get$8(cell); + } + return normalizePixelSize(value, cell, get$8, setHeight); + }; + const get$2 = (cell, type, f) => { + const v = f(cell); + const span = getSpan(cell, type); + return v / span; + }; + const getRaw = (element, prop) => { + // Try to use the style first, otherwise attempt to get the value from an attribute + return getRaw$2(element, prop).orThunk(() => { + return getOpt(element, prop).map((val) => val + 'px'); + }); + }; + const getRawWidth$1 = (element) => getRaw(element, 'width'); + const getRawHeight$1 = (element) => getRaw(element, 'height'); + // Get a percentage size for a percentage parent table + const getPercentageWidth = (cell) => getPercentSize(cell, get$7, getInner); + const getPixelWidth$1 = (cell) => + // For col elements use the computed width as col elements aren't affected by borders, padding, etc... + isCol$2(cell) ? Math.round(get$7(cell)) : getRuntime(cell); + const getHeight = (cell) => { + return isRow$2(cell) ? get$8(cell) : get$2(cell, 'rowspan', getTotalHeight); + }; + const getGenericWidth = (cell) => { + const width = getRawWidth$1(cell); + return width.bind((w) => parse(w, ['fixed', 'relative', 'empty'])); + }; + const setGenericWidth = (cell, amount, unit) => { + set$1(cell, 'width', amount + unit); + }; + const getPixelTableWidth = (table) => get$7(table) + 'px'; + const getPixelTableHeight = (table) => get$8(table) + 'px'; + const getPercentTableWidth = (table) => getPercentSize(table, get$7, getInner) + '%'; + const isPercentSizing$1 = (table) => getRawWidth$1(table).exists((size) => rPercentageBasedSizeRegex.test(size)); + const isPixelSizing$1 = (table) => getRawWidth$1(table).exists((size) => rPixelBasedSizeRegex.test(size)); + const isNoneSizing$1 = (table) => getRawWidth$1(table).isNone(); + const percentageBasedSizeRegex = constant(rPercentageBasedSizeRegex); + + const isCol$1 = isTag('col'); + const getRawW = (cell) => { + return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px'); + }; + const getRawH = (cell) => { + return getRawHeight$1(cell).getOrThunk(() => getHeight(cell) + 'px'); + }; + const justCols = (warehouse) => map$1(Warehouse.justColumns(warehouse), (column) => Optional.from(column.element)); + // Col elements don't have valid computed widths/positions in all browsers, so treat them as invalid in that case + const isValidColumn = (cell) => { + const browser = detect$2().browser; + const supportsColWidths = browser.isChromium() || browser.isFirefox(); + return isCol$1(cell) ? supportsColWidths : true; + }; + const getDimension = (cellOpt, index, backups, filter, getter, fallback) => cellOpt.filter(filter).fold( + // Can't just read the width of a cell, so calculate. + () => fallback(deduce(backups, index)), (cell) => getter(cell)); + const getWidthFrom = (warehouse, table, getWidth, fallback) => { + // Only treat a cell as being valid for a column representation if it has a raw width, otherwise we won't be able to calculate the expected width. + // This is needed as one cell may have a width but others may not, so we need to try and use one with a specified width first. + const columnCells = columns(warehouse); + const columns$1 = Warehouse.hasColumns(warehouse) ? justCols(warehouse) : columnCells; + const backups = [Optional.some(width.edge(table))].concat(map$1(width.positions(columnCells, table), (pos) => pos.map((p) => p.x))); + // Only use the width of cells that have no column span (or colspan 1) + const colFilter = not(hasColspan); + return map$1(columns$1, (cellOption, c) => { + return getDimension(cellOption, c, backups, colFilter, (column) => { + if (isValidColumn(column)) { + return getWidth(column); + } + else { + // Invalid column so fallback to trying to get the computed width from the cell + const cell = bindFrom(columnCells[c], identity); + return getDimension(cell, c, backups, colFilter, (cell) => fallback(Optional.some(Math.round(get$7(cell)))), fallback); + } + }, fallback); + }); + }; + const getDeduced = (deduced) => { + return deduced.map((d) => { + return d + 'px'; + }).getOr(''); + }; + const getRawWidths = (warehouse, table) => { + return getWidthFrom(warehouse, table, getRawW, getDeduced); + }; + const getPercentageWidths = (warehouse, table, tableSize) => { + return getWidthFrom(warehouse, table, getPercentageWidth, (deduced) => { + return deduced.fold(() => { + return tableSize.minCellWidth(); + }, (cellWidth) => { + return cellWidth / tableSize.pixelWidth() * 100; + }); + }); + }; + const getPixelWidths = (warehouse, table, tableSize) => { + return getWidthFrom(warehouse, table, getPixelWidth$1, (deduced) => { + // Minimum cell width when all else fails. + return deduced.getOrThunk(tableSize.minCellWidth); + }); + }; + const getHeightFrom = (warehouse, table, getHeight, fallback) => { + const rowCells = rows(warehouse); + const rows$1 = map$1(warehouse.all, (r) => Optional.some(r.element)); + const backups = [Optional.some(height.edge(table))].concat(map$1(height.positions(rowCells, table), (pos) => pos.map((p) => p.y))); + return map$1(rows$1, (row, i) => getDimension(row, i, backups, always, getHeight, fallback)); + }; + const getPixelHeights = (warehouse, table) => { + return getHeightFrom(warehouse, table, getHeight, (deduced) => { + return deduced.getOrThunk(minHeight); + }); + }; + const getRawHeights = (warehouse, table) => { + return getHeightFrom(warehouse, table, getRawH, getDeduced); + }; + + const widthLookup = (table, getter) => () => { + // Use the actual width if attached, otherwise fallback to the raw width + if (inBody(table)) { + return getter(table); + } + else { + return parseFloat(getRaw$2(table, 'width').getOr('0')); + } + }; + const noneSize = (table) => { + const getWidth = widthLookup(table, get$7); + const zero = constant(0); + const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize); + // Note: The 3 delta functions below return 0 to signify a change shouldn't be made + // however this is currently not used, so may need changing if ever used + return { + width: getWidth, + pixelWidth: getWidth, + getWidths, + getCellDelta: zero, + singleColumnWidth: constant([0]), + minCellWidth: zero, + setElementWidth: noop, + adjustTableWidth: noop, + isRelative: true, + label: 'none' + }; + }; + const percentageSize = (table) => { + const getFloatWidth = widthLookup(table, (elem) => parseFloat(getPercentTableWidth(elem))); + const getWidth = widthLookup(table, get$7); + const getCellDelta = (delta) => delta / getWidth() * 100; + // If we have one column in a percent based table, that column should be 100% of the width of the table. + const singleColumnWidth = (w, _delta) => [100 - w]; + // Get the width of a 10 pixel wide cell over the width of the table as a percentage + const minCellWidth = () => minWidth() / getWidth() * 100; + const adjustTableWidth = (delta) => { + const currentWidth = getFloatWidth(); + const change = delta / 100 * currentWidth; + const newWidth = currentWidth + change; + setPercentageWidth(table, newWidth); + }; + const getWidths = (warehouse, tableSize) => getPercentageWidths(warehouse, table, tableSize); + return { + width: getFloatWidth, + pixelWidth: getWidth, + getWidths, + getCellDelta, + singleColumnWidth, + minCellWidth, + setElementWidth: setPercentageWidth, + adjustTableWidth, + isRelative: true, + label: 'percent' + }; + }; + const pixelSize = (table) => { + const getWidth = widthLookup(table, get$7); + const getCellDelta = identity; + const singleColumnWidth = (w, delta) => { + const newNext = Math.max(minWidth(), w + delta); + return [newNext - w]; + }; + const adjustTableWidth = (delta) => { + const newWidth = getWidth() + delta; + setPixelWidth(table, newWidth); + }; + const getWidths = (warehouse, tableSize) => getPixelWidths(warehouse, table, tableSize); + return { + width: getWidth, + pixelWidth: getWidth, + getWidths, + getCellDelta, + singleColumnWidth, + minCellWidth: minWidth, + setElementWidth: setPixelWidth, + adjustTableWidth, + isRelative: false, + label: 'pixel' + }; + }; + const chooseSize = (element, width) => { + const percentMatch = percentageBasedSizeRegex().exec(width); + if (percentMatch !== null) { + return percentageSize(element); + } + else { + return pixelSize(element); + } + }; + const getTableSize = (table) => { + const width = getRawWidth$1(table); + return width.fold(() => noneSize(table), (w) => chooseSize(table, w)); + }; + const TableSize = { + getTableSize, + pixelSize, + percentageSize, + noneSize + }; + + const setIfNot = (element, property, value, ignore) => { + if (value === ignore) { + remove$6(element, property); + } + else { + set$2(element, property, value); + } + }; + const insert$1 = (table, selector, element) => { + last$2(children(table, selector)).fold(() => prepend(table, element), (child) => after$4(child, element)); + }; + const generateSection = (table, sectionName) => { + const section = child(table, sectionName).getOrThunk(() => { + const newSection = SugarElement.fromTag(sectionName, owner(table).dom); + if (sectionName === 'thead') { + insert$1(table, 'caption,colgroup', newSection); + } + else if (sectionName === 'colgroup') { + insert$1(table, 'caption', newSection); + } + else { + append$1(table, newSection); + } + return newSection; + }); + empty(section); + return section; + }; + const render$1 = (table, grid) => { + const newRows = []; + const newCells = []; + const syncRows = (gridSection) => map$1(gridSection, (row) => { + if (row.isNew) { + newRows.push(row.element); + } + const tr = row.element; + empty(tr); + each$2(row.cells, (cell) => { + if (cell.isNew) { + newCells.push(cell.element); + } + setIfNot(cell.element, 'colspan', cell.colspan, 1); + setIfNot(cell.element, 'rowspan', cell.rowspan, 1); + append$1(tr, cell.element); + }); + return tr; + }); + // Assumption we should only ever have 1 colgroup. The spec allows for multiple, however it's currently unsupported + const syncColGroup = (gridSection) => bind$2(gridSection, (colGroup) => map$1(colGroup.cells, (col) => { + setIfNot(col.element, 'span', col.colspan, 1); + return col.element; + })); + const renderSection = (gridSection, sectionName) => { + const section = generateSection(table, sectionName); + const sync = sectionName === 'colgroup' ? syncColGroup : syncRows; + const sectionElems = sync(gridSection); + append(section, sectionElems); + }; + const removeSection = (sectionName) => { + child(table, sectionName).each(remove$5); + }; + const renderOrRemoveSection = (gridSection, sectionName) => { + if (gridSection.length > 0) { + renderSection(gridSection, sectionName); + } + else { + removeSection(sectionName); + } + }; + const headSection = []; + const bodySection = []; + const footSection = []; + const columnGroupsSection = []; + each$2(grid, (row) => { + switch (row.section) { + case 'thead': + headSection.push(row); + break; + case 'tbody': + bodySection.push(row); + break; + case 'tfoot': + footSection.push(row); + break; + case 'colgroup': + columnGroupsSection.push(row); + break; + } + }); + renderOrRemoveSection(columnGroupsSection, 'colgroup'); + renderOrRemoveSection(headSection, 'thead'); + renderOrRemoveSection(bodySection, 'tbody'); + renderOrRemoveSection(footSection, 'tfoot'); + return { + newRows, + newCells + }; + }; + const copy = (grid) => map$1(grid, (row) => { + // Shallow copy the row element + const tr = shallow(row.element); + each$2(row.cells, (cell) => { + const clonedCell = deep(cell.element); + setIfNot(clonedCell, 'colspan', cell.colspan, 1); + setIfNot(clonedCell, 'rowspan', cell.rowspan, 1); + append$1(tr, clonedCell); + }); + return tr; + }); + + const getColumn = (grid, index) => { + return map$1(grid, (row) => { + return getCell(row, index); + }); + }; + const getRow = (grid, index) => { + return grid[index]; + }; + const findDiff = (xs, comp) => { + if (xs.length === 0) { + return 0; + } + const first = xs[0]; + const index = findIndex(xs, (x) => { + return !comp(first.element, x.element); + }); + return index.getOr(xs.length); + }; + /* + * grid is the grid + * row is the row index into the grid + * column in the column index into the grid + * + * Return + * colspan: column span of the cell at (row, column) + * rowspan: row span of the cell at (row, column) + */ + const subgrid = (grid, row, column, comparator) => { + const gridRow = getRow(grid, row); + const isColRow = gridRow.section === 'colgroup'; + const colspan = findDiff(gridRow.cells.slice(column), comparator); + const rowspan = isColRow ? 1 : findDiff(getColumn(grid.slice(row), column), comparator); + return { + colspan, + rowspan + }; + }; + + const toDetails = (grid, comparator) => { + const seen = map$1(grid, (row) => map$1(row.cells, never)); + const updateSeen = (rowIndex, columnIndex, rowspan, colspan) => { + for (let row = rowIndex; row < rowIndex + rowspan; row++) { + for (let column = columnIndex; column < columnIndex + colspan; column++) { + seen[row][column] = true; + } + } + }; + return map$1(grid, (row, rowIndex) => { + const details = bind$2(row.cells, (cell, columnIndex) => { + // if we have seen this one, then skip it. + if (seen[rowIndex][columnIndex] === false) { + const result = subgrid(grid, rowIndex, columnIndex, comparator); + updateSeen(rowIndex, columnIndex, result.rowspan, result.colspan); + return [detailnew(cell.element, result.rowspan, result.colspan, cell.isNew)]; + } + else { + return []; + } + }); + return rowdetailnew(row.element, details, row.section, row.isNew); + }); + }; + const toGrid = (warehouse, generators, isNew) => { + const grid = []; + each$2(warehouse.colgroups, (colgroup) => { + const colgroupCols = []; + // This will add missing cols as well as clamp the number of cols to the max number of actual columns + // Note: Spans on cols are unsupported so clamping cols may result in a span on a col element being incorrect + for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) { + const element = Warehouse.getColumnAt(warehouse, columnIndex) + .map((column) => elementnew(column.element, isNew, false)) + .getOrThunk(() => elementnew(generators.colGap(), true, false)); + colgroupCols.push(element); + } + grid.push(rowcells(colgroup.element, colgroupCols, 'colgroup', isNew)); + }); + for (let rowIndex = 0; rowIndex < warehouse.grid.rows; rowIndex++) { + const rowCells = []; + for (let columnIndex = 0; columnIndex < warehouse.grid.columns; columnIndex++) { + // The element is going to be the element at that position, or a newly generated gap. + const element = Warehouse.getAt(warehouse, rowIndex, columnIndex).map((item) => elementnew(item.element, isNew, item.isLocked)).getOrThunk(() => elementnew(generators.gap(), true, false)); + rowCells.push(element); + } + const rowDetail = warehouse.all[rowIndex]; + const row = rowcells(rowDetail.element, rowCells, rowDetail.section, isNew); + grid.push(row); + } + return grid; + }; + + const fromWarehouse = (warehouse, generators) => toGrid(warehouse, generators, false); + const toDetailList = (grid) => toDetails(grid, eq$1); + const findInWarehouse = (warehouse, element) => findMap(warehouse.all, (r) => find$1(r.cells, (e) => eq$1(element, e.element))); + const extractCells = (warehouse, target, predicate) => { + const details = map$1(target.selection, (cell$1) => { + return cell(cell$1) + .bind((lc) => findInWarehouse(warehouse, lc)) + .filter(predicate); + }); + const cells = cat(details); + return someIf(cells.length > 0, cells); + }; + const run = (operation, extract, adjustment, postAction, genWrappers, table, target, generators, behaviours) => { + const warehouse = Warehouse.fromTable(table); + const tableSection = Optional.from(behaviours?.section).getOrThunk(TableSection.fallback); + const output = extract(warehouse, target).map((info) => { + const model = fromWarehouse(warehouse, generators); + const result = operation(model, info, eq$1, genWrappers(generators), tableSection); + const lockedColumns = getLockedColumnsFromGrid(result.grid); + const grid = toDetailList(result.grid); + return { + info, + grid, + cursor: result.cursor, + lockedColumns + }; + }); + return output.bind((out) => { + const newElements = render$1(table, out.grid); + const tableSizing = Optional.from(behaviours?.sizing).getOrThunk(() => TableSize.getTableSize(table)); + const resizing = Optional.from(behaviours?.resize).getOrThunk(preserveTable); + adjustment(table, out.grid, out.info, { sizing: tableSizing, resize: resizing, section: tableSection }); + postAction(table); + // Update locked cols attribute + remove$6(table, LOCKED_COL_ATTR); + if (out.lockedColumns.length > 0) { + set$2(table, LOCKED_COL_ATTR, out.lockedColumns.join(',')); + } + return Optional.some({ + cursor: out.cursor, + newRows: newElements.newRows, + newCells: newElements.newCells + }); + }); + }; + const onPaste = (warehouse, target) => cell(target.element).bind((cell) => findInWarehouse(warehouse, cell).map((details) => { + const value = { + ...details, + generators: target.generators, + clipboard: target.clipboard + }; + return value; + })); + const onPasteByEditor = (warehouse, target) => extractCells(warehouse, target, always).map((cells) => ({ + cells, + generators: target.generators, + clipboard: target.clipboard + })); + const onMergable = (_warehouse, target) => target.mergable; + const onUnmergable = (_warehouse, target) => target.unmergable; + const onCells = (warehouse, target) => extractCells(warehouse, target, always); + const onUnlockedCells = (warehouse, target) => extractCells(warehouse, target, (detail) => !detail.isLocked); + const isUnlockedTableCell = (warehouse, cell) => findInWarehouse(warehouse, cell).exists((detail) => !detail.isLocked); + const allUnlocked = (warehouse, cells) => forall(cells, (cell) => isUnlockedTableCell(warehouse, cell)); + // If any locked columns are present in the selection, then don't want to be able to merge + const onUnlockedMergable = (warehouse, target) => onMergable(warehouse, target).filter((mergeable) => allUnlocked(warehouse, mergeable.cells)); + // If any locked columns are present in the selection, then don't want to be able to unmerge + const onUnlockedUnmergable = (warehouse, target) => onUnmergable(warehouse, target).filter((cells) => allUnlocked(warehouse, cells)); + + const adt$3 = Adt.generate([ + { none: [] }, + { only: ['index'] }, + { left: ['index', 'next'] }, + { middle: ['prev', 'index', 'next'] }, + { right: ['prev', 'index'] } + ]); + const ColumnContext = { + ...adt$3 + }; + + /* + * Based on the column index, identify the context + */ + const neighbours = (input, index) => { + if (input.length === 0) { + return ColumnContext.none(); + } + if (input.length === 1) { + return ColumnContext.only(0); + } + if (index === 0) { + return ColumnContext.left(0, 1); + } + if (index === input.length - 1) { + return ColumnContext.right(index - 1, index); + } + if (index > 0 && index < input.length - 1) { + return ColumnContext.middle(index - 1, index, index + 1); + } + return ColumnContext.none(); + }; + /* + * Calculate the offsets to apply to each column width (not the absolute widths themselves) + * based on a resize at column: column of step: step + */ + const determine = (input, column, step, tableSize, resize) => { + const result = input.slice(0); + const context = neighbours(input, column); + const onNone = constant(map$1(result, constant(0))); + const onOnly = (index) => tableSize.singleColumnWidth(result[index], step); + const onLeft = (index, next) => resize.calcLeftEdgeDeltas(result, index, next, step, tableSize.minCellWidth(), tableSize.isRelative); + const onMiddle = (prev, index, next) => resize.calcMiddleDeltas(result, prev, index, next, step, tableSize.minCellWidth(), tableSize.isRelative); + // Applies to the last column bar + const onRight = (prev, index) => resize.calcRightEdgeDeltas(result, prev, index, step, tableSize.minCellWidth(), tableSize.isRelative); + return context.fold(onNone, onOnly, onLeft, onMiddle, onRight); + }; + + // Returns the sum of elements of measures in the half-open range [start, end) + // Measures is in pixels, treated as an array of integers or integers in string format. + // NOTE: beware of accumulated rounding errors over multiple columns - could result in noticeable table width changes + const total = (start, end, measures) => { + let r = 0; + for (let i = start; i < end; i++) { + r += measures[i] !== undefined ? measures[i] : 0; + } + return r; + }; + // Returns an array of all cells in warehouse with updated cell-widths, using + // the array 'widths' of the representative widths of each column of the table 'warehouse' + const recalculateWidthForCells = (warehouse, widths) => { + const all = Warehouse.justCells(warehouse); + return map$1(all, (cell) => { + // width of a spanning cell is sum of widths of representative columns it spans + const width = total(cell.column, cell.column + cell.colspan, widths); + return { + element: cell.element, + width, + colspan: cell.colspan + }; + }); + }; + const recalculateWidthForColumns = (warehouse, widths) => { + const groups = Warehouse.justColumns(warehouse); + return map$1(groups, (column, index) => ({ + element: column.element, + width: widths[index], + colspan: column.colspan + })); + }; + const matchRowHeight = (warehouse, heights) => { + return map$1(warehouse.all, (row, i) => { + return { + element: row.element, + height: heights[i] + }; + }); + }; + + const sumUp = (newSize) => foldr(newSize, (b, a) => b + a, 0); + const recalculate = (warehouse, widths) => { + if (Warehouse.hasColumns(warehouse)) { + return recalculateWidthForColumns(warehouse, widths); + } + else { + return recalculateWidthForCells(warehouse, widths); + } + }; + const recalculateAndApply = (warehouse, widths, tableSize) => { + // Set the width of each cell based on the column widths + const newSizes = recalculate(warehouse, widths); + each$2(newSizes, (cell) => { + tableSize.setElementWidth(cell.element, cell.width); + }); + }; + const adjustWidth = (table, delta, index, resizing, tableSize) => { + const warehouse = Warehouse.fromTable(table); + const step = tableSize.getCellDelta(delta); + const widths = tableSize.getWidths(warehouse, tableSize); + const isLastColumn = index === warehouse.grid.columns - 1; + const clampedStep = resizing.clampTableDelta(widths, index, step, tableSize.minCellWidth(), isLastColumn); + // Calculate all of the new widths for columns + const deltas = determine(widths, index, clampedStep, tableSize, resizing); + const newWidths = map$1(deltas, (dx, i) => dx + widths[i]); + recalculateAndApply(warehouse, newWidths, tableSize); + resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn); + }; + const adjustHeight = (table, delta, index) => { + const warehouse = Warehouse.fromTable(table); + const heights = getPixelHeights(warehouse, table); + const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy); + const newRowSizes = matchRowHeight(warehouse, newHeights); + each$2(newRowSizes, (row) => { + setHeight(row.element, row.height); + }); + each$2(Warehouse.justCells(warehouse), (cell) => { + removeHeight(cell.element); + }); + const total = sumUp(newHeights); + setHeight(table, total); + }; + // Using the width of the added/removed columns gathered on extraction (pixelDelta), get and apply the new column sizes and overall table width delta + const adjustAndRedistributeWidths$1 = (_table, list, details, tableSize, resizeBehaviour) => { + const warehouse = Warehouse.generate(list); + const sizes = tableSize.getWidths(warehouse, tableSize); + const tablePixelWidth = tableSize.pixelWidth(); + const { newSizes, delta } = resizeBehaviour.calcRedestributedWidths(sizes, tablePixelWidth, details.pixelDelta, tableSize.isRelative); + recalculateAndApply(warehouse, newSizes, tableSize); + tableSize.adjustTableWidth(delta); + }; + // Ensure that the width of table cells match the passed in table information. + const adjustWidthTo = (_table, list, _info, tableSize) => { + const warehouse = Warehouse.generate(list); + const widths = tableSize.getWidths(warehouse, tableSize); + recalculateAndApply(warehouse, widths, tableSize); + }; + + const halve = (main, other) => { + // Only set width on the new cell if we have a colspan of 1 (or no colspan) as we can only safely do that for cells + // that are a single column, since we don't know the individual column widths for a cell with a colspan. + // Instead, we'll rely on the adjustments/postAction logic to set the widths based on other cells in the column + if (!hasColspan(main)) { + const width = getGenericWidth(main); + width.each((w) => { + const newWidth = w.value / 2; + setGenericWidth(main, newWidth, w.unit); + setGenericWidth(other, newWidth, w.unit); + }); + } + }; + + const constrainSpan = (element, property, value) => { + const currentColspan = getAttrValue(element, property, 1); + if (value === 1 || currentColspan <= 1) { + remove$6(element, property); + } + else { + set$2(element, property, Math.min(value, currentColspan)); + } + }; + const isColInRange = (minColRange, maxColRange) => (cell) => { + const endCol = cell.column + cell.colspan - 1; + const startCol = cell.column; + return endCol >= minColRange && startCol < maxColRange; + }; + const generateColGroup = (house, minColRange, maxColRange) => { + if (Warehouse.hasColumns(house)) { + const colsToCopy = filter$2(Warehouse.justColumns(house), isColInRange(minColRange, maxColRange)); + const copiedCols = map$1(colsToCopy, (c) => { + const clonedCol = deep(c.element); + constrainSpan(clonedCol, 'span', maxColRange - minColRange); + return clonedCol; + }); + const fakeColgroup = SugarElement.fromTag('colgroup'); + append(fakeColgroup, copiedCols); + return [fakeColgroup]; + } + else { + return []; + } + }; + const generateRows = (house, minColRange, maxColRange) => map$1(house.all, (row) => { + const cellsToCopy = filter$2(row.cells, isColInRange(minColRange, maxColRange)); + const copiedCells = map$1(cellsToCopy, (cell) => { + const clonedCell = deep(cell.element); + constrainSpan(clonedCell, 'colspan', maxColRange - minColRange); + return clonedCell; + }); + const fakeTR = SugarElement.fromTag('tr'); + append(fakeTR, copiedCells); + return fakeTR; + }); + const copyCols = (table, target) => { + const house = Warehouse.fromTable(table); + const details = onUnlockedCells(house, target); + return details.map((selectedCells) => { + const lastSelectedCell = selectedCells[selectedCells.length - 1]; + const minColRange = selectedCells[0].column; + const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan; + const fakeColGroups = generateColGroup(house, minColRange, maxColRange); + const fakeRows = generateRows(house, minColRange, maxColRange); + return [...fakeColGroups, ...fakeRows]; + }); + }; + + const copyRows = (table, target, generators) => { + const warehouse = Warehouse.fromTable(table); + // Cannot use onUnlockedCells like extractor here as if only cells in a locked column are selected, then this will be Optional.none and + // there is now no way of knowing which rows are selected + const details = onCells(warehouse, target); + return details.bind((selectedCells) => { + const grid = toGrid(warehouse, generators, false); + const rows = extractGridDetails(grid).rows; + const slicedGrid = rows.slice(selectedCells[0].row, selectedCells[selectedCells.length - 1].row + selectedCells[selectedCells.length - 1].rowspan); + // Remove any locked cells from the copied grid rows + const filteredGrid = bind$2(slicedGrid, (row) => { + const newCells = filter$2(row.cells, (cell) => !cell.isLocked); + return newCells.length > 0 ? [{ ...row, cells: newCells }] : []; + }); + const slicedDetails = toDetailList(filteredGrid); + return someIf(slicedDetails.length > 0, slicedDetails); + }).map((slicedDetails) => copy(slicedDetails)); + }; + + const statsStruct = (minRow, minCol, maxRow, maxCol, allCells, selectedCells) => ({ + minRow, + minCol, + maxRow, + maxCol, + allCells, + selectedCells, + }); + const findSelectedStats = (house, isSelected) => { + const totalColumns = house.grid.columns; + const totalRows = house.grid.rows; + /* Refactor into a method returning a struct to hide the mutation */ + let minRow = totalRows; + let minCol = totalColumns; + let maxRow = 0; + let maxCol = 0; + const allCells = []; + const selectedCells = []; + each$1(house.access, (detail) => { + allCells.push(detail); + if (isSelected(detail)) { + selectedCells.push(detail); + const startRow = detail.row; + const endRow = startRow + detail.rowspan - 1; + const startCol = detail.column; + const endCol = startCol + detail.colspan - 1; + if (startRow < minRow) { + minRow = startRow; + } + else if (endRow > maxRow) { + maxRow = endRow; + } + if (startCol < minCol) { + minCol = startCol; + } + else if (endCol > maxCol) { + maxCol = endCol; + } + } + }); + return statsStruct(minRow, minCol, maxRow, maxCol, allCells, selectedCells); + }; + const makeCell = (list, seenSelected, rowIndex) => { + // no need to check bounds, as anything outside this index is removed in the nested for loop + const row = list[rowIndex].element; + const td = SugarElement.fromTag('td'); + append$1(td, SugarElement.fromTag('br')); + const f = seenSelected ? append$1 : prepend; + f(row, td); + }; + const fillInGaps = (list, house, stats, isSelected) => { + const rows = filter$2(list, (row) => row.section !== 'colgroup'); + const totalColumns = house.grid.columns; + const totalRows = house.grid.rows; + // unselected cells have been deleted, now fill in the gaps in the model + for (let i = 0; i < totalRows; i++) { + let seenSelected = false; + for (let j = 0; j < totalColumns; j++) { + if (!(i < stats.minRow || i > stats.maxRow || j < stats.minCol || j > stats.maxCol)) { + // if there is a hole in the table itself, or it's an unselected position, we need a cell + const needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone(); + if (needCell) { + makeCell(rows, seenSelected, i); + } + else { + seenSelected = true; + } + } + } + } + }; + const clean = (replica, stats, house, widthDelta) => { + // remove columns that are not in the new table + each$1(house.columns, (col) => { + if (col.column < stats.minCol || col.column > stats.maxCol) { + remove$5(col.element); + } + }); + // can't use :empty selector as that will not include TRs made up of whitespace + const emptyRows = filter$2(firstLayer(replica, 'tr'), (row) => + // there is no sugar method for this, and Traverse.children() does too much processing + row.dom.childElementCount === 0); + each$2(emptyRows, remove$5); + // If there is only one column, or only one row, delete all the colspan/rowspan + if (stats.minCol === stats.maxCol || stats.minRow === stats.maxRow) { + each$2(firstLayer(replica, 'th,td'), (cell) => { + remove$6(cell, 'rowspan'); + remove$6(cell, 'colspan'); + }); + } + // Remove any attributes that should not be in the replicated table + remove$6(replica, LOCKED_COL_ATTR); + // TODO: TINY-6944 - need to figure out a better way of handling this + remove$6(replica, 'data-snooker-col-series'); // For advtable series column feature + const tableSize = TableSize.getTableSize(replica); + tableSize.adjustTableWidth(widthDelta); + // TODO TINY-6863: If using relative widths, ensure cell and column widths are redistributed + }; + const getTableWidthDelta = (table, warehouse, tableSize, stats) => { + // short circuit entire table selected + if (stats.minCol === 0 && warehouse.grid.columns === stats.maxCol + 1) { + return 0; + } + const colWidths = getPixelWidths(warehouse, table, tableSize); + const allColsWidth = foldl(colWidths, (acc, width) => acc + width, 0); + const selectedColsWidth = foldl(colWidths.slice(stats.minCol, stats.maxCol + 1), (acc, width) => acc + width, 0); + const newWidth = (selectedColsWidth / allColsWidth) * tableSize.pixelWidth(); + const delta = newWidth - tableSize.pixelWidth(); + return tableSize.getCellDelta(delta); + }; + const extract$1 = (table, selectedSelector) => { + const isSelected = (detail) => is$1(detail.element, selectedSelector); + const replica = deep(table); + const list = fromTable$1(replica); + const tableSize = TableSize.getTableSize(table); + const replicaHouse = Warehouse.generate(list); + const replicaStats = findSelectedStats(replicaHouse, isSelected); + // remove unselected cells + const selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')'; + const unselectedCells = filterFirstLayer(replica, 'th,td', (cell) => is$1(cell, selector)); + each$2(unselectedCells, remove$5); + fillInGaps(list, replicaHouse, replicaStats, isSelected); + const house = Warehouse.fromTable(table); + const widthDelta = getTableWidthDelta(table, house, tableSize, replicaStats); + clean(replica, replicaStats, replicaHouse, widthDelta); + return replica; + }; + + const isCol = isTag('col'); + const isColgroup = isTag('colgroup'); + const isRow$1 = (element) => name(element) === 'tr' || isColgroup(element); + const elementToData = (element) => { + const colspan = getAttrValue(element, 'colspan', 1); + const rowspan = getAttrValue(element, 'rowspan', 1); + return { + element, + colspan, + rowspan + }; + }; + // note that `toData` seems to be only for testing + const modification = (generators, toData = elementToData) => { + const nuCell = (data) => isCol(data.element) ? generators.col(data) : generators.cell(data); + const nuRow = (data) => isColgroup(data.element) ? generators.colgroup(data) : generators.row(data); + const add = (element) => { + if (isRow$1(element)) { + return nuRow({ element }); + } + else { + const cell = element; + const replacement = nuCell(toData(cell)); + recent = Optional.some({ item: cell, replacement }); + return replacement; + } + }; + let recent = Optional.none(); + const getOrInit = (element, comparator) => { + return recent.fold(() => { + return add(element); + }, (p) => { + return comparator(element, p.item) ? p.replacement : add(element); + }); + }; + return { + getOrInit + }; + }; + const transform$1 = (tag) => { + return (generators) => { + const list = []; + const find = (element, comparator) => { + return find$1(list, (x) => { + return comparator(x.item, element); + }); + }; + const makeNew = (element) => { + // Ensure scope is never set on a td element as it's a deprecated attribute + const attrs = tag === 'td' ? { scope: null } : {}; + const cell = generators.replace(element, tag, attrs); + list.push({ + item: element, + sub: cell + }); + return cell; + }; + const replaceOrInit = (element, comparator) => { + if (isRow$1(element) || isCol(element)) { + return element; + } + else { + const cell = element; + return find(cell, comparator).fold(() => { + return makeNew(cell); + }, (p) => { + return comparator(element, p.item) ? p.sub : makeNew(cell); + }); + } + }; + return { + replaceOrInit + }; + }; + }; + const getScopeAttribute = (cell) => getOpt(cell, 'scope').map( + // Attribute can be col, colgroup, row, and rowgroup. + // As col and colgroup are to be treated as if they are the same, lob off everything after the first three characters and there is no difference. + (attribute) => attribute.substr(0, 3)); + const merging = (generators) => { + const unmerge = (cell) => { + const scope = getScopeAttribute(cell); + scope.each((attribute) => set$2(cell, 'scope', attribute)); + return () => { + const raw = generators.cell({ + element: cell, + colspan: 1, + rowspan: 1 + }); + // Remove any width calculations because they are no longer relevant. + remove$4(raw, 'width'); + remove$4(cell, 'width'); + scope.each((attribute) => set$2(raw, 'scope', attribute)); + return raw; + }; + }; + const merge = (cells) => { + const getScopeProperty = () => { + const stringAttributes = cat(map$1(cells, getScopeAttribute)); + if (stringAttributes.length === 0) { + return Optional.none(); + } + else { + const baseScope = stringAttributes[0]; + const scopes = ['row', 'col']; + const isMixed = exists(stringAttributes, (attribute) => { + return attribute !== baseScope && contains$2(scopes, attribute); + }); + return isMixed ? Optional.none() : Optional.from(baseScope); + } + }; + remove$4(cells[0], 'width'); + getScopeProperty().fold(() => remove$6(cells[0], 'scope'), (attribute) => set$2(cells[0], 'scope', attribute + 'group')); + return constant(cells[0]); + }; + return { + unmerge, + merge + }; + }; + const Generators = { + modification, + transform: transform$1, + merging + }; + + const getUpOrLeftCells = (grid, selectedCells) => { + // Get rows up or at the row of the bottom right cell + const upGrid = grid.slice(0, selectedCells[selectedCells.length - 1].row + 1); + const upDetails = toDetailList(upGrid); + // Get an array of the cells up or to the left of the bottom right cell + return bind$2(upDetails, (detail) => { + const slicedCells = detail.cells.slice(0, selectedCells[selectedCells.length - 1].column + 1); + return map$1(slicedCells, (cell) => cell.element); + }); + }; + const getDownOrRightCells = (grid, selectedCells) => { + // Get rows down or at the row of the top left cell (including rowspans) + const downGrid = grid.slice(selectedCells[0].row + selectedCells[0].rowspan - 1, grid.length); + const downDetails = toDetailList(downGrid); + // Get an array of the cells down or to the right of the bottom right cell + return bind$2(downDetails, (detail) => { + const slicedCells = detail.cells.slice(selectedCells[0].column + selectedCells[0].colspan - 1, detail.cells.length); + return map$1(slicedCells, (cell) => cell.element); + }); + }; + const getOtherCells = (table, target, generators) => { + const warehouse = Warehouse.fromTable(table); + const details = onCells(warehouse, target); + return details.map((selectedCells) => { + const grid = toGrid(warehouse, generators, false); + const { rows } = extractGridDetails(grid); + const upOrLeftCells = getUpOrLeftCells(rows, selectedCells); + const downOrRightCells = getDownOrRightCells(rows, selectedCells); + return { + upOrLeftCells, + downOrRightCells + }; + }); + }; + + const only = (element, isResizable) => { + // If element is a 'document', use the document element ('HTML' tag) for appending. + const parent = isDocument(element) ? documentElement(element) : element; + return { + parent: constant(parent), + view: constant(element), + dragContainer: constant(parent), + origin: constant(SugarPosition(0, 0)), + isResizable + }; + }; + const detached = (editable, chrome, isResizable) => { + const origin = () => absolute(chrome); + return { + parent: constant(chrome), + view: constant(editable), + dragContainer: constant(chrome), + origin, + isResizable + }; + }; + const body = (editable, isResizable) => { + return { + parent: constant(editable), + view: constant(editable), + dragContainer: constant(editable), + origin: () => absolute(editable), + isResizable + }; + }; + const ResizeWire = { + only, + detached, + body + }; + + const adt$2 = Adt.generate([ + { invalid: ['raw'] }, + { pixels: ['value'] }, + { percent: ['value'] } + ]); + const validateFor = (suffix, type, value) => { + const rawAmount = value.substring(0, value.length - suffix.length); + const amount = parseFloat(rawAmount); + return rawAmount === amount.toString() ? type(amount) : adt$2.invalid(value); + }; + const from = (value) => { + if (endsWith(value, '%')) { + return validateFor('%', adt$2.percent, value); + } + if (endsWith(value, 'px')) { + return validateFor('px', adt$2.pixels, value); + } + return adt$2.invalid(value); + }; + const Size = { + ...adt$2, + from + }; + + // Convert all column widths to percent. + const redistributeToPercent = (widths, totalWidth) => { + return map$1(widths, (w) => { + const colType = Size.from(w); + return colType.fold(() => { + return w; + }, (px) => { + const ratio = px / totalWidth * 100; + return ratio + '%'; + }, (pc) => { + return pc + '%'; + }); + }); + }; + const redistributeToPx = (widths, totalWidth, newTotalWidth) => { + const scale = newTotalWidth / totalWidth; + return map$1(widths, (w) => { + const colType = Size.from(w); + return colType.fold(() => { + return w; + }, (px) => { + return (px * scale) + 'px'; + }, (pc) => { + return (pc / 100 * newTotalWidth) + 'px'; + }); + }); + }; + const redistributeEmpty = (newWidthType, columns) => { + const f = newWidthType.fold(() => constant(''), (pixels) => { + const num = pixels / columns; + return constant(num + 'px'); + }, () => { + const num = 100 / columns; + return constant(num + '%'); + }); + return range$1(columns, f); + }; + const redistributeValues = (newWidthType, widths, totalWidth) => { + return newWidthType.fold(() => { + return widths; + }, (px) => { + return redistributeToPx(widths, totalWidth, px); + }, (_pc) => { + return redistributeToPercent(widths, totalWidth); + }); + }; + const redistribute$1 = (widths, totalWidth, newWidth) => { + const newType = Size.from(newWidth); + const floats = forall(widths, (s) => { + return s === '0px'; + }) ? redistributeEmpty(newType, widths.length) : redistributeValues(newType, widths, totalWidth); + return normalize(floats); + }; + const sum = (values, fallback) => { + if (values.length === 0) { + return fallback; + } + return foldr(values, (rest, v) => { + return Size.from(v).fold(constant(0), identity, identity) + rest; + }, 0); + }; + const roundDown = (num, unit) => { + const floored = Math.floor(num); + return { value: floored + unit, remainder: num - floored }; + }; + const add = (value, amount) => { + return Size.from(value).fold(constant(value), (px) => { + return (px + amount) + 'px'; + }, (pc) => { + return (pc + amount) + '%'; + }); + }; + const normalize = (values) => { + if (values.length === 0) { + return values; + } + const scan = foldr(values, (rest, value) => { + const info = Size.from(value).fold(() => ({ value, remainder: 0 }), (num) => roundDown(num, 'px'), (num) => ({ value: num + '%', remainder: 0 })); + return { + output: [info.value].concat(rest.output), + remainder: rest.remainder + info.remainder + }; + }, { output: [], remainder: 0 }); + const r = scan.output; + return r.slice(0, r.length - 1).concat([add(r[r.length - 1], Math.round(scan.remainder))]); + }; + const validate = Size.from; + + const redistributeToW = (newWidths, cells, unit) => { + each$2(cells, (cell) => { + const widths = newWidths.slice(cell.column, cell.colspan + cell.column); + const w = sum(widths, minWidth()); + set$1(cell.element, 'width', w + unit); + }); + }; + const redistributeToColumns = (newWidths, columns, unit) => { + each$2(columns, (column, index) => { + const width = sum([newWidths[index]], minWidth()); + set$1(column.element, 'width', width + unit); + }); + }; + const redistributeToH = (newHeights, rows, cells) => { + each$2(cells, (cell) => { + remove$4(cell.element, 'height'); + }); + each$2(rows, (row, i) => { + set$1(row.element, 'height', newHeights[i]); + }); + }; + const getUnit = (newSize) => { + return validate(newSize).fold(constant('px'), constant('px'), constant('%')); + }; + // Procedure to resize table dimensions to optWidth x optHeight and redistribute cell and row dimensions. + // Updates CSS of the table, rows, and cells. + const redistribute = (table, optWidth, optHeight) => { + const warehouse = Warehouse.fromTable(table); + const rows = warehouse.all; + const cells = Warehouse.justCells(warehouse); + const columns = Warehouse.justColumns(warehouse); + optWidth.each((newWidth) => { + const widthUnit = getUnit(newWidth); + const totalWidth = get$7(table); + const oldWidths = getRawWidths(warehouse, table); + const nuWidths = redistribute$1(oldWidths, totalWidth, newWidth); + if (Warehouse.hasColumns(warehouse)) { + redistributeToColumns(nuWidths, columns, widthUnit); + } + else { + redistributeToW(nuWidths, cells, widthUnit); + } + set$1(table, 'width', newWidth); + }); + optHeight.each((newHeight) => { + const totalHeight = get$8(table); + const oldHeights = getRawHeights(warehouse, table); + const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight); + redistributeToH(nuHeights, rows, cells); + set$1(table, 'height', newHeight); + }); + }; + const isPercentSizing = isPercentSizing$1; + const isPixelSizing = isPixelSizing$1; + const isNoneSizing = isNoneSizing$1; + + var TagBoundaries = [ + 'body', + 'p', + 'div', + 'article', + 'aside', + 'figcaption', + 'figure', + 'footer', + 'header', + 'nav', + 'section', + 'ol', + 'ul', + 'li', + 'table', + 'thead', + 'tbody', + 'tfoot', + 'caption', + 'tr', + 'td', + 'th', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'blockquote', + 'pre', + 'address' + ]; + + var DomUniverse = () => { + const clone = (element) => { + return SugarElement.fromDom(element.dom.cloneNode(false)); + }; + const document = (element) => documentOrOwner(element).dom; + const isBoundary = (element) => { + if (!isElement(element)) { + return false; + } + if (name(element) === 'body') { + return true; + } + return contains$2(TagBoundaries, name(element)); + }; + const isEmptyTag = (element) => { + if (!isElement(element)) { + return false; + } + return contains$2(['br', 'img', 'hr', 'input'], name(element)); + }; + const isNonEditable = (element) => isElement(element) && get$b(element, 'contenteditable') === 'false'; + const comparePosition = (element, other) => { + return element.dom.compareDocumentPosition(other.dom); + }; + const copyAttributesTo = (source, destination) => { + const as = clone$1(source); + setAll$1(destination, as); + }; + const isSpecial = (element) => { + const tag = name(element); + return contains$2([ + 'script', 'noscript', 'iframe', 'noframes', 'noembed', 'title', 'style', 'textarea', 'xmp' + ], tag); + }; + const getLanguage = (element) => isElement(element) ? getOpt(element, 'lang') : Optional.none(); + return { + up: constant({ + selector: ancestor$1, + closest: closest$1, + predicate: ancestor$2, + all: parents + }), + down: constant({ + selector: descendants, + predicate: descendants$1 + }), + styles: constant({ + get: get$9, + getRaw: getRaw$2, + set: set$1, + remove: remove$4 + }), + attrs: constant({ + get: get$b, + set: set$2, + remove: remove$6, + copyTo: copyAttributesTo + }), + insert: constant({ + before: before$3, + after: after$4, + afterAll: after$3, + append: append$1, + appendAll: append, + prepend: prepend, + wrap: wrap + }), + remove: constant({ + unwrap: unwrap, + remove: remove$5 + }), + create: constant({ + nu: SugarElement.fromTag, + clone, + text: SugarElement.fromText + }), + query: constant({ + comparePosition, + prevSibling: prevSibling, + nextSibling: nextSibling + }), + property: constant({ + children: children$2, + name: name, + parent: parent, + document, + isText: isText, + isComment: isComment, + isElement: isElement, + isSpecial, + getLanguage, + getText: get$5, + setText: set, + isBoundary, + isEmptyTag, + isNonEditable + }), + eq: eq$1, + is: is + }; + }; + + const traverse = (item, mode) => ({ + item, + mode + }); + const backtrack = (universe, item, _direction, transition = sidestep) => { + return universe.property().parent(item).map((p) => { + return traverse(p, transition); + }); + }; + const sidestep = (universe, item, direction, transition = advance) => { + return direction.sibling(universe, item).map((p) => { + return traverse(p, transition); + }); + }; + const advance = (universe, item, direction, transition = advance) => { + const children = universe.property().children(item); + const result = direction.first(children); + return result.map((r) => { + return traverse(r, transition); + }); + }; + /* + * Rule breakdown: + * + * current: the traversal that we are applying. + * next: the next traversal to apply if the current traversal succeeds (e.g. advance after sidestepping) + * fallback: the traversal to fallback to when the current traversal does not find a node + */ + const successors = [ + { current: backtrack, next: sidestep, fallback: Optional.none() }, + { current: sidestep, next: advance, fallback: Optional.some(backtrack) }, + { current: advance, next: advance, fallback: Optional.some(sidestep) } + ]; + const go = (universe, item, mode, direction, rules = successors) => { + // INVESTIGATE: Find a way which doesn't require an array search first to identify the current mode. + const ruleOpt = find$1(rules, (succ) => { + return succ.current === mode; + }); + return ruleOpt.bind((rule) => { + // Attempt the current mode. If not, use the fallback and try again. + return rule.current(universe, item, direction, rule.next).orThunk(() => { + return rule.fallback.bind((fb) => { + return go(universe, item, fb, direction); + }); + }); + }); + }; + + const left$1 = () => { + const sibling = (universe, item) => { + return universe.query().prevSibling(item); + }; + const first = (children) => { + return children.length > 0 ? Optional.some(children[children.length - 1]) : Optional.none(); + }; + return { + sibling, + first + }; + }; + const right$1 = () => { + const sibling = (universe, item) => { + return universe.query().nextSibling(item); + }; + const first = (children) => { + return children.length > 0 ? Optional.some(children[0]) : Optional.none(); + }; + return { + sibling, + first + }; + }; + const Walkers = { + left: left$1, + right: right$1 + }; + + const hone = (universe, item, predicate, mode, direction, isRoot) => { + const next = go(universe, item, mode, direction); + return next.bind((n) => { + if (isRoot(n.item)) { + return Optional.none(); + } + else { + return predicate(n.item) ? Optional.some(n.item) : hone(universe, n.item, predicate, n.mode, direction, isRoot); + } + }); + }; + const left = (universe, item, predicate, isRoot) => { + return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot); + }; + const right = (universe, item, predicate, isRoot) => { + return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot); + }; + + const point = (element, offset) => ({ + element, + offset + }); + + const scan$1 = (universe, element, direction) => { + // if a comment or zero-length text, scan the siblings + if ((universe.property().isText(element) && universe.property().getText(element).trim().length === 0) + || universe.property().isComment(element)) { + return direction(element).bind((elem) => { + return scan$1(universe, elem, direction).orThunk(() => { + return Optional.some(elem); + }); + }); + } + else { + return Optional.none(); + } + }; + const toEnd = (universe, element) => { + if (universe.property().isText(element)) { + return universe.property().getText(element).length; + } + const children = universe.property().children(element); + return children.length; + }; + const freefallRtl$2 = (universe, element) => { + const candidate = scan$1(universe, element, universe.query().prevSibling).getOr(element); + if (universe.property().isText(candidate)) { + return point(candidate, toEnd(universe, candidate)); + } + const children = universe.property().children(candidate); + return children.length > 0 ? freefallRtl$2(universe, children[children.length - 1]) : point(candidate, toEnd(universe, candidate)); + }; + + const freefallRtl$1 = freefallRtl$2; + + const universe$3 = DomUniverse(); + const freefallRtl = (element) => { + return freefallRtl$1(universe$3, element); + }; + + const isLeaf = (universe) => (element) => universe.property().children(element).length === 0; + const before$1 = (universe, item, isRoot) => { + return seekLeft$1(universe, item, isLeaf(universe), isRoot); + }; + const after$1 = (universe, item, isRoot) => { + return seekRight$1(universe, item, isLeaf(universe), isRoot); + }; + const seekLeft$1 = left; + const seekRight$1 = right; + go; + + const universe$2 = DomUniverse(); + const before = (element, isRoot) => { + return before$1(universe$2, element, isRoot); + }; + const after = (element, isRoot) => { + return after$1(universe$2, element, isRoot); + }; + const seekLeft = (element, predicate, isRoot) => { + return seekLeft$1(universe$2, element, predicate, isRoot); + }; + const seekRight = (element, predicate, isRoot) => { + return seekRight$1(universe$2, element, predicate, isRoot); + }; + + const blockList = [ + 'body', + 'p', + 'div', + 'article', + 'aside', + 'figcaption', + 'figure', + 'footer', + 'header', + 'nav', + 'section', + 'ol', + 'ul', + // --- NOTE, TagBoundaries has li here. That means universe.isBoundary => true for li tags. + 'table', + 'thead', + 'tfoot', + 'tbody', + 'caption', + 'tr', + 'td', + 'th', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'blockquote', + 'pre', + 'address' + ]; + const isList$1 = (universe, item) => { + const tagName = universe.property().name(item); + return contains$2(['ol', 'ul'], tagName); + }; + const isBlock$1 = (universe, item) => { + const tagName = universe.property().name(item); + return contains$2(blockList, tagName); + }; + const isEmptyTag$1 = (universe, item) => { + return contains$2(['br', 'img', 'hr', 'input'], universe.property().name(item)); + }; + + const leftRight = (left, right) => ({ + left, + right + }); + const brokenPath = (first, second, splits) => ({ + first, + second, + splits + }); + const bisect = (universe, parent, child) => { + const children = universe.property().children(parent); + const index = findIndex(children, curry(universe.eq, child)); + return index.map((ind) => { + return { + before: children.slice(0, ind), + after: children.slice(ind + 1) + }; + }); + }; + /** + * Clone parent to the RIGHT and move everything after child in the parent element into + * a clone of the parent (placed after parent). + */ + const breakToRight = (universe, parent, child) => { + return bisect(universe, parent, child).map((parts) => { + const second = universe.create().clone(parent); + universe.insert().appendAll(second, parts.after); + universe.insert().after(parent, second); + return leftRight(parent, second); + }); + }; + /** + * Clone parent to the LEFT and move everything before and including child into + * the a clone of the parent (placed before parent) + */ + const breakToLeft = (universe, parent, child) => { + return bisect(universe, parent, child).map((parts) => { + const prior = universe.create().clone(parent); + universe.insert().appendAll(prior, parts.before.concat([child])); + universe.insert().appendAll(parent, parts.after); + universe.insert().before(parent, prior); + return leftRight(prior, parent); + }); + }; + /* + * Using the breaker, break from the child up to the top element defined by the predicate. + * It returns three values: + * first: the top level element that completed the break + * second: the optional element representing second part of the top-level split if the breaking completed successfully to the top + * splits: a list of (Element, Element) pairs that represent the splits that have occurred on the way to the top. + */ + const breakPath = (universe, item, isTop, breaker) => { + const next = (child, group, splits) => { + const fallback = brokenPath(child, Optional.none(), splits); + // Found the top, so stop. + if (isTop(child)) { + return brokenPath(child, group, splits); + } + else { + // Split the child at parent, and keep going + return universe.property().parent(child).bind((parent) => { + return breaker(universe, parent, child).map((breakage) => { + const extra = [{ first: breakage.left, second: breakage.right }]; + // Our isTop is based on the left-side parent, so keep it regardless of split. + const nextChild = isTop(parent) ? parent : breakage.left; + return next(nextChild, Optional.some(breakage.right), splits.concat(extra)); + }); + }).getOr(fallback); + } + }; + return next(item, Optional.none(), []); + }; + + const all = (universe, look, elements, f) => { + const head = elements[0]; + const tail = elements.slice(1); + return f(universe, look, head, tail); + }; + /** + * Check if look returns the same element for all elements, and return it if it exists. + */ + const oneAll = (universe, look, elements) => { + return elements.length > 0 ? + all(universe, look, elements, unsafeOne) : + Optional.none(); + }; + const unsafeOne = (universe, look, head, tail) => { + const start = look(universe, head); + return foldr(tail, (b, a) => { + const current = look(universe, a); + return commonElement(universe, b, current); + }, start); + }; + const commonElement = (universe, start, end) => { + return start.bind((s) => { + return end.filter(curry(universe.eq, s)); + }); + }; + + const eq = (universe, item) => { + return curry(universe.eq, item); + }; + // Note: this can be exported if it is required in the future. + const ancestors$2 = (universe, start, end, isRoot = never) => { + // Inefficient if no isRoot is supplied. + // TODO: Andy knows there is a graph-based algorithm to find a common parent, but can't remember it + // This also includes something to get the subset after finding the common parent + const ps1 = [start].concat(universe.up().all(start)); + const ps2 = [end].concat(universe.up().all(end)); + const prune = (path) => { + const index = findIndex(path, isRoot); + return index.fold(() => { + return path; + }, (ind) => { + return path.slice(0, ind + 1); + }); + }; + const pruned1 = prune(ps1); + const pruned2 = prune(ps2); + const shared = find$1(pruned1, (x) => { + return exists(pruned2, eq(universe, x)); + }); + return { + firstpath: pruned1, + secondpath: pruned2, + shared + }; + }; + + const sharedOne$1 = oneAll; + const ancestors$1 = ancestors$2; + breakToLeft; + breakToRight; + breakPath; + + const universe$1 = DomUniverse(); + const sharedOne = (look, elements) => { + return sharedOne$1(universe$1, (_universe, element) => { + return look(element); + }, elements); + }; + const ancestors = (start, finish, isRoot) => { + return ancestors$1(universe$1, start, finish, isRoot); + }; + + const universe = DomUniverse(); + const isBlock = (element) => { + return isBlock$1(universe, element); + }; + const isList = (element) => { + return isList$1(universe, element); + }; + const isEmptyTag = (element) => { + return isEmptyTag$1(universe, element); + }; + + const merge$2 = (cells) => { + const isBr = isTag('br'); + const advancedBr = (children) => { + return forall(children, (c) => { + return isBr(c) || (isText(c) && get$5(c).trim().length === 0); + }); + }; + const isListItem = (el) => { + return name(el) === 'li' || ancestor$2(el, isList).isSome(); + }; + const siblingIsBlock = (el) => { + return nextSibling(el).map((rightSibling) => { + if (isBlock(rightSibling)) { + return true; + } + if (isEmptyTag(rightSibling)) { + return name(rightSibling) === 'img' ? false : true; + } + return false; + }).getOr(false); + }; + const markCell = (cell) => { + return last(cell).bind((rightEdge) => { + const rightSiblingIsBlock = siblingIsBlock(rightEdge); + return parent(rightEdge).map((parent) => { + return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || (isBlock(parent) && !eq$1(cell, parent)) ? [] : [SugarElement.fromTag('br')]; + }); + }).getOr([]); + }; + const markContent = () => { + const content = bind$2(cells, (cell) => { + const children = children$2(cell); + return advancedBr(children) ? [] : children.concat(markCell(cell)); + }); + return content.length === 0 ? [SugarElement.fromTag('br')] : content; + }; + const contents = markContent(); + empty(cells[0]); + append(cells[0], contents); + }; + + // Remove legacy sizing attributes such as "width" + const cleanupLegacyAttributes = (element) => { + remove$6(element, 'width'); + remove$6(element, 'height'); + }; + const convertToPercentSizeWidth = (table) => { + const newWidth = getPercentTableWidth(table); + redistribute(table, Optional.some(newWidth), Optional.none()); + cleanupLegacyAttributes(table); + }; + const convertToPixelSizeWidth = (table) => { + const newWidth = getPixelTableWidth(table); + redistribute(table, Optional.some(newWidth), Optional.none()); + cleanupLegacyAttributes(table); + }; + const convertToPixelSizeHeight = (table) => { + const newHeight = getPixelTableHeight(table); + redistribute(table, Optional.none(), Optional.some(newHeight)); + cleanupLegacyAttributes(table); + }; + const convertToNoneSizeWidth = (table) => { + remove$4(table, 'width'); + const columns = columns$1(table); + const rowElements = columns.length > 0 ? columns : cells$1(table); + each$2(rowElements, (cell) => { + remove$4(cell, 'width'); + cleanupLegacyAttributes(cell); + }); + cleanupLegacyAttributes(table); + }; + + const transferableAttributes = { + scope: [ + 'row', + 'col' + ] + }; + // NOTE: This may create a td instead of a th, but it is for irregular table handling. + const createCell = (doc) => () => { + const td = SugarElement.fromTag('td', doc.dom); + append$1(td, SugarElement.fromTag('br', doc.dom)); + return td; + }; + const createCol = (doc) => () => { + return SugarElement.fromTag('col', doc.dom); + }; + const createColgroup = (doc) => () => { + return SugarElement.fromTag('colgroup', doc.dom); + }; + const createRow$1 = (doc) => () => { + return SugarElement.fromTag('tr', doc.dom); + }; + const replace$1 = (cell, tag, attrs) => { + const replica = copy$2(cell, tag); + // TODO: Snooker passes null to indicate 'remove attribute' + each$1(attrs, (v, k) => { + if (v === null) { + remove$6(replica, k); + } + else { + set$2(replica, k, v); + } + }); + return replica; + }; + // eslint-disable-next-line @tinymce/prefer-fun + const pasteReplace = (cell) => { + // TODO: check for empty content and don't return anything + return cell; + }; + const cloneFormats = (oldCell, newCell, formats) => { + const first$1 = first(oldCell); + return first$1.map((firstText) => { + const formatSelector = formats.join(','); + // Find the ancestors of the first text node that match the given formats. + const parents = ancestors$3(firstText, formatSelector, (element) => { + return eq$1(element, oldCell); + }); + // Add the matched ancestors to the new cell, then return the new cell. + return foldr(parents, (last, parent) => { + const clonedFormat = shallow(parent); + append$1(last, clonedFormat); + return clonedFormat; + }, newCell); + }).getOr(newCell); + }; + const cloneAppropriateAttributes = (original, clone) => { + each$1(transferableAttributes, (validAttributes, attributeName) => getOpt(original, attributeName) + .filter((attribute) => contains$2(validAttributes, attribute)) + .each((attribute) => set$2(clone, attributeName, attribute))); + }; + const cellOperations = (mutate, doc, formatsToClone) => { + const cloneCss = (prev, clone) => { + // inherit the style and width, dont inherit the row height + copy$1(prev.element, clone); + remove$4(clone, 'height'); + // dont inherit the width of spanning columns + if (prev.colspan !== 1) { + remove$4(clone, 'width'); + } + }; + const newCell = (prev) => { + const td = SugarElement.fromTag(name(prev.element), doc.dom); + const formats = formatsToClone.getOr(['strong', 'em', 'b', 'i', 'span', 'font', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'div']); + // If we aren't cloning the child formatting, we can just give back the new td immediately. + const lastNode = formats.length > 0 ? cloneFormats(prev.element, td, formats) : td; + append$1(lastNode, SugarElement.fromTag('br')); + cloneCss(prev, td); + cloneAppropriateAttributes(prev.element, td); + mutate(prev.element, td); + return td; + }; + const newCol = (prev) => { + const col = SugarElement.fromTag(name(prev.element), doc.dom); + cloneCss(prev, col); + mutate(prev.element, col); + return col; + }; + return { + col: newCol, + colgroup: createColgroup(doc), + row: createRow$1(doc), + cell: newCell, + replace: replace$1, + colGap: createCol(doc), + gap: createCell(doc) + }; + }; + const paste$1 = (doc) => { + return { + col: createCol(doc), + colgroup: createColgroup(doc), + row: createRow$1(doc), + cell: createCell(doc), + replace: pasteReplace, + colGap: createCol(doc), + gap: createCell(doc) + }; + }; + + const getGridSize = (table) => { + const warehouse = Warehouse.fromTable(table); + return warehouse.grid; + }; + + // substitution: () -> item + const merge$1 = (grid, bounds, comparator, substitution) => { + const rows = extractGridDetails(grid).rows; + // Mutating. Do we care about the efficiency gain? + if (rows.length === 0) { + return grid; + } + for (let i = bounds.startRow; i <= bounds.finishRow; i++) { + for (let j = bounds.startCol; j <= bounds.finishCol; j++) { + // We can probably simplify this again now that we aren't reusing merge. + const row = rows[i]; + const isLocked = getCell(row, j).isLocked; + mutateCell(row, j, elementnew(substitution(), false, isLocked)); + } + } + return grid; + }; + // substitution: () -> item + const unmerge = (grid, target, comparator, substitution) => { + const rows = extractGridDetails(grid).rows; + // Mutating. Do we care about the efficiency gain? + let first = true; + // tslint:disable-next-line:prefer-for-of + for (let i = 0; i < rows.length; i++) { + for (let j = 0; j < cellLength(rows[0]); j++) { + const row = rows[i]; + const currentCell = getCell(row, j); + const currentCellElm = currentCell.element; + const isToReplace = comparator(currentCellElm, target); + if (isToReplace && !first) { + mutateCell(row, j, elementnew(substitution(), true, currentCell.isLocked)); + } + else if (isToReplace) { + first = false; + } + } + } + return grid; + }; + const uniqueCells = (row, comparator) => { + return foldl(row, (rest, cell) => { + return exists(rest, (currentCell) => { + return comparator(currentCell.element, cell.element); + }) ? rest : rest.concat([cell]); + }, []); + }; + const splitCols = (grid, index, comparator, substitution) => { + // We don't need to split rows if we're inserting at the first or last row of the old table + if (index > 0 && index < grid[0].cells.length) { + each$2(grid, (row) => { + const prevCell = row.cells[index - 1]; + let offset = 0; + const substitute = substitution(); + while (row.cells.length > index + offset && comparator(prevCell.element, row.cells[index + offset].element)) { + mutateCell(row, index + offset, elementnew(substitute, true, row.cells[index + offset].isLocked)); + offset++; + } + }); + } + return grid; + }; + const splitRows = (grid, index, comparator, substitution) => { + // We don't need to split rows if we're inserting at the first or last row of the old table + const rows = extractGridDetails(grid).rows; + if (index > 0 && index < rows.length) { + const rowPrevCells = rows[index - 1].cells; + const cells = uniqueCells(rowPrevCells, comparator); + each$2(cells, (cell) => { + // only make a sub when we have to + let replacement = Optional.none(); + for (let i = index; i < rows.length; i++) { + for (let j = 0; j < cellLength(rows[0]); j++) { + const row = rows[i]; + const current = getCell(row, j); + const isToReplace = comparator(current.element, cell.element); + if (isToReplace) { + if (replacement.isNone()) { + replacement = Optional.some(substitution()); + } + replacement.each((sub) => { + mutateCell(row, j, elementnew(sub, true, current.isLocked)); + }); + } + } + } + }); + } + return grid; + }; + + /* + Fitment, is a module used to ensure that the Inserted table (gridB) can fit squareley within the Host table (gridA). + - measure returns a delta of rows and cols, eg: + - col: 3 means gridB can fit with 3 spaces to spare + - row: -5 means gridB can needs 5 more rows to completely fit into gridA + - col: 0, row: 0 depics perfect fitment + + - tailor, requires a delta and returns grid that is built to match the delta, tailored to fit. + eg: 3x3 gridA, with a delta col: -3, row: 2 returns a new grid 3 rows x 6 cols + + - assumptions: All grids used by this module should be rectangular + */ + const measure = (startAddress, gridA, gridB) => { + if (startAddress.row >= gridA.length || startAddress.column > cellLength(gridA[0])) { + return Result.error('invalid start address out of table bounds, row: ' + startAddress.row + ', column: ' + startAddress.column); + } + const rowRemainder = gridA.slice(startAddress.row); + const colRemainder = rowRemainder[0].cells.slice(startAddress.column); + const colRequired = cellLength(gridB[0]); + const rowRequired = gridB.length; + return Result.value({ + rowDelta: rowRemainder.length - rowRequired, + colDelta: colRemainder.length - colRequired + }); + }; + const measureWidth = (gridA, gridB) => { + const colLengthA = cellLength(gridA[0]); + const colLengthB = cellLength(gridB[0]); + return { + rowDelta: 0, + colDelta: colLengthA - colLengthB + }; + }; + const measureHeight = (gridA, gridB) => { + const rowLengthA = gridA.length; + const rowLengthB = gridB.length; + return { + rowDelta: rowLengthA - rowLengthB, + colDelta: 0 + }; + }; + const generateElements = (amount, row, generators, isLocked) => { + const generator = row.section === 'colgroup' ? generators.col : generators.cell; + return range$1(amount, (idx) => elementnew(generator(), true, isLocked(idx))); + }; + const rowFill = (grid, amount, generators, lockedColumns) => { + const exampleRow = grid[grid.length - 1]; + return grid.concat(range$1(amount, () => { + const generator = exampleRow.section === 'colgroup' ? generators.colgroup : generators.row; + const row = clone$2(exampleRow, generator, identity); + const elements = generateElements(row.cells.length, row, generators, (idx) => has$1(lockedColumns, idx.toString())); + return setCells(row, elements); + })); + }; + const colFill = (grid, amount, generators, startIndex) => map$1(grid, (row) => { + const newChildren = generateElements(amount, row, generators, never); + return addCells(row, startIndex, newChildren); + }); + const lockedColFill = (grid, generators, lockedColumns) => map$1(grid, (row) => { + return foldl(lockedColumns, (acc, colNum) => { + const newChild = generateElements(1, row, generators, always)[0]; + return addCell(acc, colNum, newChild); + }, row); + }); + const tailor = (gridA, delta, generators) => { + const fillCols = delta.colDelta < 0 ? colFill : identity; + const fillRows = delta.rowDelta < 0 ? rowFill : identity; + const lockedColumns = getLockedColumnsFromGrid(gridA); + const gridWidth = cellLength(gridA[0]); + const isLastColLocked = exists(lockedColumns, (locked) => locked === gridWidth - 1); + const modifiedCols = fillCols(gridA, Math.abs(delta.colDelta), generators, isLastColLocked ? gridWidth - 1 : gridWidth); + // Need to recalculate locked column positions + const newLockedColumns = getLockedColumnsFromGrid(modifiedCols); + return fillRows(modifiedCols, Math.abs(delta.rowDelta), generators, mapToObject(newLockedColumns, always)); + }; + + const isSpanning = (grid, row, col, comparator) => { + const candidate = getCell(grid[row], col); + const matching = curry(comparator, candidate.element); + const currentRow = grid[row]; + // sanity check, 1x1 has no spans + return grid.length > 1 && cellLength(currentRow) > 1 && + ( + // search left, if we're not on the left edge + // search down, if we're not on the bottom edge + (col > 0 && matching(getCellElement(currentRow, col - 1))) || + // search right, if we're not on the right edge + (col < currentRow.cells.length - 1 && matching(getCellElement(currentRow, col + 1))) || + // search up, if we're not on the top edge + (row > 0 && matching(getCellElement(grid[row - 1], col))) || + (row < grid.length - 1 && matching(getCellElement(grid[row + 1], col)))); + }; + const mergeTables = (startAddress, gridA, gridBRows, generator, comparator, lockedColumns) => { + // Assumes + // - gridA is square and gridB is square + const startRow = startAddress.row; + const startCol = startAddress.column; + const mergeHeight = gridBRows.length; + const mergeWidth = cellLength(gridBRows[0]); + const endRow = startRow + mergeHeight; + const endCol = startCol + mergeWidth + lockedColumns.length; + const lockedColumnObj = mapToObject(lockedColumns, always); + // embrace the mutation - I think this is easier to follow? To discuss. + for (let r = startRow; r < endRow; r++) { + let skippedCol = 0; + for (let c = startCol; c < endCol; c++) { + if (lockedColumnObj[c]) { + skippedCol++; + continue; + } + if (isSpanning(gridA, r, c, comparator)) { + // mutation within mutation, it's mutatception + unmerge(gridA, getCellElement(gridA[r], c), comparator, generator.cell); + } + const gridBColIndex = c - startCol - skippedCol; + const newCell = getCell(gridBRows[r - startRow], gridBColIndex); + // This can't be a col element at this point so we can cast it to a cell + const newCellElm = newCell.element; + const replacement = generator.replace(newCellElm); + mutateCell(gridA[r], c, elementnew(replacement, true, newCell.isLocked)); + } + } + return gridA; + }; + const getValidStartAddress = (currentStartAddress, grid, lockedColumns) => { + const gridColLength = cellLength(grid[0]); + /* + When we paste from a table without colgroups to a table that has them, we need to ensure we are inserting them at + the correct row index (the `col`s are treated as cells in the Structs.RowCells array). + + To do this, we get the number of `col`s in the destination table and add that to the startAddress row. + */ + const adjustedRowAddress = extractGridDetails(grid).cols.length + currentStartAddress.row; + const possibleColAddresses = range$1(gridColLength - currentStartAddress.column, (num) => num + currentStartAddress.column); + // Find a starting column address that isn't a locked column + const validColAddress = find$1(possibleColAddresses, (num) => forall(lockedColumns, (col) => col !== num)).getOr(gridColLength - 1); + return { + row: adjustedRowAddress, + column: validColAddress + }; + }; + const getLockedColumnsWithinBounds = (startAddress, rows, lockedColumns) => filter$2(lockedColumns, (colNum) => colNum >= startAddress.column && colNum <= cellLength(rows[0]) + startAddress.column); + const merge = (startAddress, gridA, gridB, generator, comparator) => { + const lockedColumns = getLockedColumnsFromGrid(gridA); + const validStartAddress = getValidStartAddress(startAddress, gridA, lockedColumns); + /* + We always remove the cols (extract the rows) from the table being pasted. This ensures that if we are pasting from a table with colgroups into a table + without them, we don't insert the `col` elements as if they were `td`s + */ + const gridBRows = extractGridDetails(gridB).rows; + const lockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, lockedColumns); + const result = measure(validStartAddress, gridA, gridBRows); + /* + Need to subtract extra delta for locked columns between startAddress and the startAddress + gridB column count as + locked column cells cannot be merged into. Therefore, extra column cells need to be added to gridA to allow gridB cells to be merged + */ + return result.map((diff) => { + const delta = { + ...diff, + colDelta: diff.colDelta - lockedColumnsWithinBounds.length + }; + const fittedGrid = tailor(gridA, delta, generator); + // Need to recalculate lockedColumnsWithinBounds as tailoring may have inserted columns before last locked column which changes the locked index + const newLockedColumns = getLockedColumnsFromGrid(fittedGrid); + const newLockedColumnsWithinBounds = getLockedColumnsWithinBounds(validStartAddress, gridBRows, newLockedColumns); + return mergeTables(validStartAddress, fittedGrid, gridBRows, generator, comparator, newLockedColumnsWithinBounds); + }); + }; + const insertCols = (index, gridA, gridB, generator, comparator) => { + splitCols(gridA, index, comparator, generator.cell); + const delta = measureHeight(gridB, gridA); + const fittedNewGrid = tailor(gridB, delta, generator); + const secondDelta = measureHeight(gridA, fittedNewGrid); + const fittedOldGrid = tailor(gridA, secondDelta, generator); + return map$1(fittedOldGrid, (gridRow, i) => { + return addCells(gridRow, index, fittedNewGrid[i].cells); + }); + }; + /* + Inserting rows with locked columns + - Tailor gridA first (this needs to be done first as the position of the locked columns may change when tailoring gridA and the location of the locked columns needs to be stable before tailoring gridB) + - measure delta between gridA and gridB (pasted rows) - if negative colDelta, gridA needs extra columns added to match gridB + - need to calculate how many columns in gridB cannot be directly inserted into gridA - this is how many extra columns need to be added to gridA (this consideres the fact locked column cannot be inserted into) + - nonLockedGridA + lockedGridA - gridB = colDelta (By subtracting locked column count, can get required diff) + - tailor gridA by adding the required extra columns if necessary either at the end of gridA or before the last column depending on whether it is locked + - Recalculate where the locked columns are in gridA after tailoring + - Measure and determine if extra columns need to be added to gridB (locked columns should not count towards the delta as colFilling (adding extra columns) for locked columns is handled separately) + - Do a lockedColFill on gridB + - Tailor gridB by adding extra columns to end of gridB if required + */ + const insertRows = (index, gridA, gridB, generator, comparator) => { + splitRows(gridA, index, comparator, generator.cell); + const locked = getLockedColumnsFromGrid(gridA); + const diff = measureWidth(gridA, gridB); + const delta = { + ...diff, + colDelta: diff.colDelta - locked.length + }; + const fittedOldGrid = tailor(gridA, delta, generator); + const { cols: oldCols, rows: oldRows } = extractGridDetails(fittedOldGrid); + const newLocked = getLockedColumnsFromGrid(fittedOldGrid); + const secondDiff = measureWidth(gridB, gridA); + // Don't want the locked columns to count towards to the colDelta as column filling for locked columns is handled separately + const secondDelta = { + ...secondDiff, + colDelta: secondDiff.colDelta + newLocked.length + }; + const fittedGridB = lockedColFill(gridB, generator, newLocked); + const fittedNewGrid = tailor(fittedGridB, secondDelta, generator); + return [ + ...oldCols, + ...oldRows.slice(0, index), + ...fittedNewGrid, + ...oldRows.slice(index, oldRows.length) + ]; + }; + + const cloneRow = (row, cloneCell, comparator, substitution) => clone$2(row, (elem) => substitution(elem, comparator), cloneCell); + // substitution :: (item, comparator) -> item + // example is the location of the cursor (the row index) + // index is the insert position (at - or after - example) (the row index) + const insertRowAt = (grid, index, example, comparator, substitution) => { + const { rows, cols } = extractGridDetails(grid); + const before = rows.slice(0, index); + const after = rows.slice(index); + const newRow = cloneRow(rows[example], (ex, c) => { + const withinSpan = index > 0 && index < rows.length && comparator(getCellElement(rows[index - 1], c), getCellElement(rows[index], c)); + const ret = withinSpan ? getCell(rows[index], c) : elementnew(substitution(ex.element, comparator), true, ex.isLocked); + return ret; + }, comparator, substitution); + return [ + ...cols, + ...before, + newRow, + ...after + ]; + }; + const getElementFor = (row, column, section, withinSpan, example, comparator, substitution) => { + if (section === 'colgroup' || !withinSpan) { + const cell = getCell(row, example); + // locked is explicitly set to false so the newly inserted column doesn't inherit example column locked state + return elementnew(substitution(cell.element, comparator), true, false); + } + else { + return getCell(row, column); + } + }; + // substitution :: (item, comparator) -> item + // example is the location of the cursor (the column index) + // index is the insert position (at - or after - example) (the column index) + const insertColumnAt = (grid, index, example, comparator, substitution) => map$1(grid, (row) => { + const withinSpan = index > 0 && index < cellLength(row) && comparator(getCellElement(row, index - 1), getCellElement(row, index)); + const sub = getElementFor(row, index, row.section, withinSpan, example, comparator, substitution); + return addCell(row, index, sub); + }); + const deleteColumnsAt = (grid, columns) => bind$2(grid, (row) => { + const existingCells = row.cells; + const cells = foldr(columns, (acc, column) => column >= 0 && column < acc.length ? acc.slice(0, column).concat(acc.slice(column + 1)) : acc, existingCells); + return cells.length > 0 ? [rowcells(row.element, cells, row.section, row.isNew)] : []; + }); + const deleteRowsAt = (grid, start, finish) => { + const { rows, cols } = extractGridDetails(grid); + return [ + ...cols, + ...rows.slice(0, start), + ...rows.slice(finish + 1) + ]; + }; + + const notInStartRow = (grid, rowIndex, colIndex, comparator) => getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(getCellElement(grid[rowIndex - 1], colIndex), getCellElement(grid[rowIndex], colIndex))); + const notInStartColumn = (row, index, comparator) => index > 0 && comparator(getCellElement(row, index - 1), getCellElement(row, index)); + // This checks for cells that aren't in the "start" position as the model will create duplicate element references for + // each column/row that the cell spans. As an example, for a merged cell with rowspan="2", the cell in the second row is a duplicate + // of the cell in the first row. + const isDuplicatedCell = (grid, rowIndex, colIndex, comparator) => notInStartRow(grid, rowIndex, colIndex, comparator) || notInStartColumn(grid[rowIndex], colIndex, comparator); + const rowReplacerPredicate = (targetRow, columnHeaders) => { + const entireTableIsHeader = forall(columnHeaders, identity) && isHeaderCells(targetRow.cells); + return entireTableIsHeader ? always : (cell, _rowIndex, colIndex) => { + const type = name(cell.element); + return !(type === 'th' && columnHeaders[colIndex]); + }; + }; + const columnReplacePredicate = (targetColumn, rowHeaders) => { + const entireTableIsHeader = forall(rowHeaders, identity) && isHeaderCells(targetColumn); + return entireTableIsHeader ? always : (cell, rowIndex, _colIndex) => { + const type = name(cell.element); + return !(type === 'th' && rowHeaders[rowIndex]); + }; + }; + const determineScope = (applyScope, cell, newScope, isInHeader) => { + const hasSpan = (scope) => scope === 'row' ? hasRowspan(cell) : hasColspan(cell); + const getScope = (scope) => hasSpan(scope) ? `${scope}group` : scope; + if (applyScope) { + return isHeaderCell(cell) ? getScope(newScope) : null; + } + else if (isInHeader && isHeaderCell(cell)) { + // The cell is still in a header row/column so ensure the right scope is reverted to + const oppositeScope = newScope === 'row' ? 'col' : 'row'; + return getScope(oppositeScope); + } + else { + // No longer a header so ensure the scope is removed + return null; + } + }; + const rowScopeGenerator = (applyScope, columnHeaders) => (cell, rowIndex, columnIndex) => Optional.some(determineScope(applyScope, cell.element, 'col', columnHeaders[columnIndex])); + const columnScopeGenerator = (applyScope, rowHeaders) => (cell, rowIndex) => Optional.some(determineScope(applyScope, cell.element, 'row', rowHeaders[rowIndex])); + const replace = (cell, comparator, substitute) => elementnew(substitute(cell.element, comparator), true, cell.isLocked); + const replaceIn = (grid, targets, comparator, substitute, replacer, genScope, shouldReplace) => { + const isTarget = (cell) => { + return exists(targets, (target) => { + return comparator(cell.element, target.element); + }); + }; + return map$1(grid, (row, rowIndex) => { + return mapCells(row, (cell, colIndex) => { + if (isTarget(cell)) { + const newCell = shouldReplace(cell, rowIndex, colIndex) ? replacer(cell, comparator, substitute) : cell; + // Update the scope + genScope(newCell, rowIndex, colIndex).each((scope) => { + setOptions(newCell.element, { scope: Optional.from(scope) }); + }); + return newCell; + } + else { + return cell; + } + }); + }); + }; + const getColumnCells = (rows, columnIndex, comparator) => bind$2(rows, (row, i) => { + // check if already added. + return isDuplicatedCell(rows, i, columnIndex, comparator) ? [] : [getCell(row, columnIndex)]; + }); + const getRowCells = (rows, rowIndex, comparator) => { + const targetRow = rows[rowIndex]; + return bind$2(targetRow.cells, (item, i) => { + // Check that we haven't already added this one. + return isDuplicatedCell(rows, rowIndex, i, comparator) ? [] : [item]; + }); + }; + const replaceColumns = (grid, indexes, applyScope, comparator, substitution) => { + // Make this efficient later. + const rows = extractGridDetails(grid).rows; + const targets = bind$2(indexes, (index) => getColumnCells(rows, index, comparator)); + const rowHeaders = map$1(rows, (row) => isHeaderCells(row.cells)); + const shouldReplaceCell = columnReplacePredicate(targets, rowHeaders); + const scopeGenerator = columnScopeGenerator(applyScope, rowHeaders); + return replaceIn(grid, targets, comparator, substitution, replace, scopeGenerator, shouldReplaceCell); + }; + const replaceRows = (grid, indexes, section, applyScope, comparator, substitution, tableSection) => { + const { cols, rows } = extractGridDetails(grid); + const targetRow = rows[indexes[0]]; + const targets = bind$2(indexes, (index) => getRowCells(rows, index, comparator)); + const columnHeaders = map$1(targetRow.cells, (_cell, index) => isHeaderCells(getColumnCells(rows, index, comparator))); + // Transform and replace the target row + // TODO: TINY-7776: This doesn't deal with rowspans which can break the layout when moving to a new section + const newRows = [...rows]; + each$2(indexes, (index) => { + newRows[index] = tableSection.transformRow(rows[index], section); + }); + const newGrid = [...cols, ...newRows]; + const shouldReplaceCell = rowReplacerPredicate(targetRow, columnHeaders); + const scopeGenerator = rowScopeGenerator(applyScope, columnHeaders); + return replaceIn(newGrid, targets, comparator, substitution, tableSection.transformCell, scopeGenerator, shouldReplaceCell); + }; + const replaceCells = (grid, details, comparator, substitution) => { + const rows = extractGridDetails(grid).rows; + const targetCells = map$1(details, (detail) => getCell(rows[detail.row], detail.column)); + return replaceIn(grid, targetCells, comparator, substitution, replace, Optional.none, always); + }; + + const uniqueColumns = (details) => { + const uniqueCheck = (rest, detail) => { + const columnExists = exists(rest, (currentDetail) => currentDetail.column === detail.column); + return columnExists ? rest : rest.concat([detail]); + }; + return foldl(details, uniqueCheck, []).sort((detailA, detailB) => detailA.column - detailB.column); + }; + + // This uses a slight variation to the default `ContentEditable.isEditable` behaviour, + // as when the element is detached we assume it is editable because it is a new cell. + const isEditable = (elem) => isEditable$1(elem, true); + const prune = (table) => { + const cells = cells$1(table); + if (cells.length === 0) { + remove$5(table); + } + }; + const outcome = (grid, cursor) => ({ + grid, + cursor + }); + const findEditableCursorPosition = (rows) => findMap(rows, (row) => findMap(row.cells, (cell) => { + const elem = cell.element; + return someIf(isEditable(elem), elem); + })); + const elementFromGrid = (grid, row, column) => { + const rows = extractGridDetails(grid).rows; + return Optional.from(rows[row]?.cells[column]?.element) + .filter(isEditable) + // Fallback to the first valid position in the table + .orThunk(() => findEditableCursorPosition(rows)); + }; + const bundle = (grid, row, column) => { + const cursorElement = elementFromGrid(grid, row, column); + return outcome(grid, cursorElement); + }; + const uniqueRows = (details) => { + const rowCompilation = (rest, detail) => { + const rowExists = exists(rest, (currentDetail) => currentDetail.row === detail.row); + return rowExists ? rest : rest.concat([detail]); + }; + return foldl(details, rowCompilation, []).sort((detailA, detailB) => detailA.row - detailB.row); + }; + const opInsertRowsBefore = (grid, details, comparator, genWrappers) => { + const targetIndex = details[0].row; + const rows = uniqueRows(details); + const newGrid = foldr(rows, (acc, row) => { + const newG = insertRowAt(acc.grid, targetIndex, row.row + acc.delta, comparator, genWrappers.getOrInit); + return { grid: newG, delta: acc.delta + 1 }; + }, { grid, delta: 0 }).grid; + return bundle(newGrid, targetIndex, details[0].column); + }; + const opInsertRowsAfter = (grid, details, comparator, genWrappers) => { + const rows = uniqueRows(details); + const target = rows[rows.length - 1]; + const targetIndex = target.row + target.rowspan; + const newGrid = foldr(rows, (newG, row) => { + return insertRowAt(newG, targetIndex, row.row, comparator, genWrappers.getOrInit); + }, grid); + return bundle(newGrid, targetIndex, details[0].column); + }; + const opInsertColumnsBefore = (grid, extractDetail, comparator, genWrappers) => { + const details = extractDetail.details; + const columns = uniqueColumns(details); + const targetIndex = columns[0].column; + const newGrid = foldr(columns, (acc, col) => { + const newG = insertColumnAt(acc.grid, targetIndex, col.column + acc.delta, comparator, genWrappers.getOrInit); + return { grid: newG, delta: acc.delta + 1 }; + }, { grid, delta: 0 }).grid; + return bundle(newGrid, details[0].row, targetIndex); + }; + const opInsertColumnsAfter = (grid, extractDetail, comparator, genWrappers) => { + const details = extractDetail.details; + const target = details[details.length - 1]; + const targetIndex = target.column + target.colspan; + const columns = uniqueColumns(details); + const newGrid = foldr(columns, (newG, col) => { + return insertColumnAt(newG, targetIndex, col.column, comparator, genWrappers.getOrInit); + }, grid); + return bundle(newGrid, details[0].row, targetIndex); + }; + const opMakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => { + const columns = uniqueColumns(details); + const columnIndexes = map$1(columns, (detail) => detail.column); + const newGrid = replaceColumns(initialGrid, columnIndexes, true, comparator, genWrappers.replaceOrInit); + return bundle(newGrid, details[0].row, details[0].column); + }; + const opMakeCellsHeader = (initialGrid, details, comparator, genWrappers) => { + const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit); + return bundle(newGrid, details[0].row, details[0].column); + }; + const opUnmakeColumnsHeader = (initialGrid, details, comparator, genWrappers) => { + const columns = uniqueColumns(details); + const columnIndexes = map$1(columns, (detail) => detail.column); + const newGrid = replaceColumns(initialGrid, columnIndexes, false, comparator, genWrappers.replaceOrInit); + return bundle(newGrid, details[0].row, details[0].column); + }; + const opUnmakeCellsHeader = (initialGrid, details, comparator, genWrappers) => { + const newGrid = replaceCells(initialGrid, details, comparator, genWrappers.replaceOrInit); + return bundle(newGrid, details[0].row, details[0].column); + }; + const makeRowsSection = (section, applyScope) => (initialGrid, details, comparator, genWrappers, tableSection) => { + const rows = uniqueRows(details); + const rowIndexes = map$1(rows, (detail) => detail.row); + const newGrid = replaceRows(initialGrid, rowIndexes, section, applyScope, comparator, genWrappers.replaceOrInit, tableSection); + return bundle(newGrid, details[0].row, details[0].column); + }; + const opMakeRowsHeader = makeRowsSection('thead', true); + const opMakeRowsBody = makeRowsSection('tbody', false); + const opMakeRowsFooter = makeRowsSection('tfoot', false); + const opEraseColumns = (grid, extractDetail, _comparator, _genWrappers) => { + const columns = uniqueColumns(extractDetail.details); + const newGrid = deleteColumnsAt(grid, map$1(columns, (column) => column.column)); + const maxColIndex = newGrid.length > 0 ? newGrid[0].cells.length - 1 : 0; + return bundle(newGrid, columns[0].row, Math.min(columns[0].column, maxColIndex)); + }; + const opEraseRows = (grid, details, _comparator, _genWrappers) => { + const rows = uniqueRows(details); + const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row); + const maxRowIndex = Math.max(extractGridDetails(newGrid).rows.length - 1, 0); + return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column); + }; + const opMergeCells = (grid, mergable, comparator, genWrappers) => { + const cells = mergable.cells; + merge$2(cells); + const newGrid = merge$1(grid, mergable.bounds, comparator, genWrappers.merge(cells)); + return outcome(newGrid, Optional.from(cells[0])); + }; + const opUnmergeCells = (grid, unmergable, comparator, genWrappers) => { + const unmerge$1 = (b, cell) => unmerge(b, cell, comparator, genWrappers.unmerge(cell)); + const newGrid = foldr(unmergable, unmerge$1, grid); + return outcome(newGrid, Optional.from(unmergable[0])); + }; + const opPasteCells = (grid, pasteDetails, comparator, _genWrappers) => { + const gridify = (table, generators) => { + const wh = Warehouse.fromTable(table); + return toGrid(wh, generators, true); + }; + const gridB = gridify(pasteDetails.clipboard, pasteDetails.generators); + const startAddress = address(pasteDetails.row, pasteDetails.column); + const mergedGrid = merge(startAddress, grid, gridB, pasteDetails.generators, comparator); + return mergedGrid.fold(() => outcome(grid, Optional.some(pasteDetails.element)), (newGrid) => { + return bundle(newGrid, pasteDetails.row, pasteDetails.column); + }); + }; + const gridifyRows = (rows, generators, context) => { + const pasteDetails = fromPastedRows(rows, context.section); + const wh = Warehouse.generate(pasteDetails); + return toGrid(wh, generators, true); + }; + const opPasteColsBefore = (grid, pasteDetails, comparator, _genWrappers) => { + const rows = extractGridDetails(grid).rows; + const index = pasteDetails.cells[0].column; + const context = rows[pasteDetails.cells[0].row]; + const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context); + const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator); + return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column); + }; + const opPasteColsAfter = (grid, pasteDetails, comparator, _genWrappers) => { + const rows = extractGridDetails(grid).rows; + const index = pasteDetails.cells[pasteDetails.cells.length - 1].column + pasteDetails.cells[pasteDetails.cells.length - 1].colspan; + const context = rows[pasteDetails.cells[0].row]; + const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context); + const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator); + return bundle(mergedGrid, pasteDetails.cells[0].row, index); + }; + const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => { + const rows = extractGridDetails(grid).rows; + const index = pasteDetails.cells[0].row; + const context = rows[index]; + const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context); + const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator); + return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column); + }; + const opPasteRowsAfter = (grid, pasteDetails, comparator, _genWrappers) => { + const rows = extractGridDetails(grid).rows; + const index = pasteDetails.cells[pasteDetails.cells.length - 1].row + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan; + const context = rows[pasteDetails.cells[0].row]; + const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context); + const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator); + return bundle(mergedGrid, index, pasteDetails.cells[0].column); + }; + const opGetColumnsType = (table, target) => { + const house = Warehouse.fromTable(table); + const details = onCells(house, target); + return details.bind((selectedCells) => { + const lastSelectedCell = selectedCells[selectedCells.length - 1]; + const minColRange = selectedCells[0].column; + const maxColRange = lastSelectedCell.column + lastSelectedCell.colspan; + const selectedColumnCells = flatten(map$1(house.all, (row) => filter$2(row.cells, (cell) => cell.column >= minColRange && cell.column < maxColRange))); + return findCommonCellType(selectedColumnCells); + }).getOr(''); + }; + const opGetCellsType = (table, target) => { + const house = Warehouse.fromTable(table); + const details = onCells(house, target); + return details.bind(findCommonCellType).getOr(''); + }; + const opGetRowsType = (table, target) => { + const house = Warehouse.fromTable(table); + const details = onCells(house, target); + return details.bind((selectedCells) => { + const lastSelectedCell = selectedCells[selectedCells.length - 1]; + const minRowRange = selectedCells[0].row; + const maxRowRange = lastSelectedCell.row + lastSelectedCell.rowspan; + const selectedRows = house.all.slice(minRowRange, maxRowRange); + return findCommonRowType(selectedRows); + }).getOr(''); + }; + // Only column modifications force a resizing. Everything else just tries to preserve the table as is. + const resize = (table, list, details, behaviours) => adjustWidthTo(table, list, details, behaviours.sizing); + const adjustAndRedistributeWidths = (table, list, details, behaviours) => adjustAndRedistributeWidths$1(table, list, details, behaviours.sizing, behaviours.resize); + // Custom selection extractors + const firstColumnIsLocked = (_warehouse, details) => exists(details, (detail) => detail.column === 0 && detail.isLocked); + // TODO: Maybe have an Arr.existsR which would be more efficient for most cases below + const lastColumnIsLocked = (warehouse, details) => exists(details, (detail) => detail.column + detail.colspan >= warehouse.grid.columns && detail.isLocked); + const getColumnsWidth = (warehouse, details) => { + const columns$1 = columns(warehouse); + const uniqueCols = uniqueColumns(details); + return foldl(uniqueCols, (acc, detail) => { + const column = columns$1[detail.column]; + const colWidth = column.map(getOuter).getOr(0); + return acc + colWidth; + }, 0); + }; + const insertColumnsExtractor = (before) => (warehouse, target) => onCells(warehouse, target).filter((details) => { + const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked; + return !checkLocked(warehouse, details); + }).map((details) => ({ + details, + pixelDelta: getColumnsWidth(warehouse, details), + })); + const eraseColumnsExtractor = (warehouse, target) => onUnlockedCells(warehouse, target).map((details) => ({ + details, + pixelDelta: -getColumnsWidth(warehouse, details), // needs to be negative as we are removing columns + })); + const pasteColumnsExtractor = (before) => (warehouse, target) => onPasteByEditor(warehouse, target).filter((details) => { + const checkLocked = before ? firstColumnIsLocked : lastColumnIsLocked; + return !checkLocked(warehouse, details.cells); + }); + const headerCellGenerator = Generators.transform('th'); + const bodyCellGenerator = Generators.transform('td'); + const insertRowsBefore = (table, target, generators, behaviours) => run(opInsertRowsBefore, onCells, noop, noop, Generators.modification, table, target, generators, behaviours); + const insertRowsAfter = (table, target, generators, behaviours) => run(opInsertRowsAfter, onCells, noop, noop, Generators.modification, table, target, generators, behaviours); + const insertColumnsBefore = (table, target, generators, behaviours) => run(opInsertColumnsBefore, insertColumnsExtractor(true), adjustAndRedistributeWidths, noop, Generators.modification, table, target, generators, behaviours); + const insertColumnsAfter = (table, target, generators, behaviours) => run(opInsertColumnsAfter, insertColumnsExtractor(false), adjustAndRedistributeWidths, noop, Generators.modification, table, target, generators, behaviours); + const eraseColumns = (table, target, generators, behaviours) => run(opEraseColumns, eraseColumnsExtractor, adjustAndRedistributeWidths, prune, Generators.modification, table, target, generators, behaviours); + const eraseRows = (table, target, generators, behaviours) => run(opEraseRows, onCells, noop, prune, Generators.modification, table, target, generators, behaviours); + const makeColumnsHeader = (table, target, generators, behaviours) => run(opMakeColumnsHeader, onUnlockedCells, noop, noop, headerCellGenerator, table, target, generators, behaviours); + const unmakeColumnsHeader = (table, target, generators, behaviours) => run(opUnmakeColumnsHeader, onUnlockedCells, noop, noop, bodyCellGenerator, table, target, generators, behaviours); + const makeRowsHeader = (table, target, generators, behaviours) => run(opMakeRowsHeader, onCells, noop, noop, headerCellGenerator, table, target, generators, behaviours); + const makeRowsBody = (table, target, generators, behaviours) => run(opMakeRowsBody, onCells, noop, noop, bodyCellGenerator, table, target, generators, behaviours); + const makeRowsFooter = (table, target, generators, behaviours) => run(opMakeRowsFooter, onCells, noop, noop, bodyCellGenerator, table, target, generators, behaviours); + const makeCellsHeader = (table, target, generators, behaviours) => run(opMakeCellsHeader, onUnlockedCells, noop, noop, headerCellGenerator, table, target, generators, behaviours); + const unmakeCellsHeader = (table, target, generators, behaviours) => run(opUnmakeCellsHeader, onUnlockedCells, noop, noop, bodyCellGenerator, table, target, generators, behaviours); + const mergeCells = (table, target, generators, behaviours) => run(opMergeCells, onUnlockedMergable, resize, noop, Generators.merging, table, target, generators, behaviours); + const unmergeCells = (table, target, generators, behaviours) => run(opUnmergeCells, onUnlockedUnmergable, resize, noop, Generators.merging, table, target, generators, behaviours); + const pasteCells = (table, target, generators, behaviours) => run(opPasteCells, onPaste, resize, noop, Generators.modification, table, target, generators, behaviours); + const pasteColsBefore = (table, target, generators, behaviours) => run(opPasteColsBefore, pasteColumnsExtractor(true), noop, noop, Generators.modification, table, target, generators, behaviours); + const pasteColsAfter = (table, target, generators, behaviours) => run(opPasteColsAfter, pasteColumnsExtractor(false), noop, noop, Generators.modification, table, target, generators, behaviours); + const pasteRowsBefore = (table, target, generators, behaviours) => run(opPasteRowsBefore, onPasteByEditor, noop, noop, Generators.modification, table, target, generators, behaviours); + const pasteRowsAfter = (table, target, generators, behaviours) => run(opPasteRowsAfter, onPasteByEditor, noop, noop, Generators.modification, table, target, generators, behaviours); + const getColumnsType = opGetColumnsType; + const getCellsType = opGetCellsType; + const getRowsType = opGetRowsType; + + const inSelection = (bounds, detail) => { + const leftEdge = detail.column; + const rightEdge = detail.column + detail.colspan - 1; + const topEdge = detail.row; + const bottomEdge = detail.row + detail.rowspan - 1; + return (leftEdge <= bounds.finishCol && rightEdge >= bounds.startCol) && (topEdge <= bounds.finishRow && bottomEdge >= bounds.startRow); + }; + // Note, something is *within* if it is completely contained within the bounds. + const isWithin = (bounds, detail) => { + return (detail.column >= bounds.startCol && + (detail.column + detail.colspan - 1) <= bounds.finishCol && + detail.row >= bounds.startRow && + (detail.row + detail.rowspan - 1) <= bounds.finishRow); + }; + const isRectangular = (warehouse, bounds) => { + let isRect = true; + const detailIsWithin = curry(isWithin, bounds); + for (let i = bounds.startRow; i <= bounds.finishRow; i++) { + for (let j = bounds.startCol; j <= bounds.finishCol; j++) { + isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin); + } + } + return isRect ? Optional.some(bounds) : Optional.none(); + }; + + const getBounds = (detailA, detailB) => { + return bounds(Math.min(detailA.row, detailB.row), Math.min(detailA.column, detailB.column), Math.max(detailA.row + detailA.rowspan - 1, detailB.row + detailB.rowspan - 1), Math.max(detailA.column + detailA.colspan - 1, detailB.column + detailB.colspan - 1)); + }; + const getAnyBox = (warehouse, startCell, finishCell) => { + const startCoords = Warehouse.findItem(warehouse, startCell, eq$1); + const finishCoords = Warehouse.findItem(warehouse, finishCell, eq$1); + return startCoords.bind((sc) => { + return finishCoords.map((fc) => { + return getBounds(sc, fc); + }); + }); + }; + const getBox$1 = (warehouse, startCell, finishCell) => { + return getAnyBox(warehouse, startCell, finishCell).bind((bounds) => { + return isRectangular(warehouse, bounds); + }); + }; + + const moveBy$1 = (warehouse, cell, row, column) => { + return Warehouse.findItem(warehouse, cell, eq$1).bind((detail) => { + const startRow = row > 0 ? detail.row + detail.rowspan - 1 : detail.row; + const startCol = column > 0 ? detail.column + detail.colspan - 1 : detail.column; + const dest = Warehouse.getAt(warehouse, startRow + row, startCol + column); + return dest.map((d) => { + return d.element; + }); + }); + }; + const intercepts$1 = (warehouse, start, finish) => { + return getAnyBox(warehouse, start, finish).map((bounds) => { + const inside = Warehouse.filterItems(warehouse, curry(inSelection, bounds)); + return map$1(inside, (detail) => { + return detail.element; + }); + }); + }; + const parentCell = (warehouse, innerCell) => { + const isContainedBy = (c1, c2) => { + return contains(c2, c1); + }; + return Warehouse.findItem(warehouse, innerCell, isContainedBy).map((detail) => { + return detail.element; + }); + }; + + const moveBy = (cell, deltaRow, deltaColumn) => { + return table(cell).bind((table) => { + const warehouse = getWarehouse(table); + return moveBy$1(warehouse, cell, deltaRow, deltaColumn); + }); + }; + const intercepts = (table, first, last) => { + const warehouse = getWarehouse(table); + return intercepts$1(warehouse, first, last); + }; + const nestedIntercepts = (table, first, firstTable, last, lastTable) => { + const warehouse = getWarehouse(table); + const optStartCell = eq$1(table, firstTable) ? Optional.some(first) : parentCell(warehouse, first); + const optLastCell = eq$1(table, lastTable) ? Optional.some(last) : parentCell(warehouse, last); + return optStartCell.bind((startCell) => optLastCell.bind((lastCell) => intercepts$1(warehouse, startCell, lastCell))); + }; + const getBox = (table, first, last) => { + const warehouse = getWarehouse(table); + return getBox$1(warehouse, first, last); + }; + // Private method ... keep warehouse in snooker, please. + const getWarehouse = Warehouse.fromTable; + + const DefaultRenderOptions = { + styles: { + 'border-collapse': 'collapse', + 'width': '100%' + }, + attributes: { + border: '1' + }, + colGroups: false + }; + const tableHeaderCell = () => SugarElement.fromTag('th'); + const tableCell = () => SugarElement.fromTag('td'); + const tableColumn = () => SugarElement.fromTag('col'); + const createRow = (columns, rowHeaders, columnHeaders, rowIndex) => { + const tr = SugarElement.fromTag('tr'); + for (let j = 0; j < columns; j++) { + const td = rowIndex < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell(); + if (j < columnHeaders) { + set$2(td, 'scope', 'row'); + } + if (rowIndex < rowHeaders) { + set$2(td, 'scope', 'col'); + } + // Note, this is a placeholder so that the cells have height. The unicode character didn't work in IE10. + append$1(td, SugarElement.fromTag('br')); + append$1(tr, td); + } + return tr; + }; + const createGroupRow = (columns) => { + const columnGroup = SugarElement.fromTag('colgroup'); + range$1(columns, () => append$1(columnGroup, tableColumn())); + return columnGroup; + }; + const createRows = (rows, columns, rowHeaders, columnHeaders) => range$1(rows, (r) => createRow(columns, rowHeaders, columnHeaders, r)); + const render = (rows, columns, rowHeaders, columnHeaders, headerType, renderOpts = DefaultRenderOptions) => { + const table = SugarElement.fromTag('table'); + const rowHeadersGoInThead = headerType !== 'cells'; + setAll(table, renderOpts.styles); + setAll$1(table, renderOpts.attributes); + if (renderOpts.colGroups) { + append$1(table, createGroupRow(columns)); + } + const actualRowHeaders = Math.min(rows, rowHeaders); + if (rowHeadersGoInThead && rowHeaders > 0) { + const thead = SugarElement.fromTag('thead'); + append$1(table, thead); + const theadRowHeaders = headerType === 'sectionCells' ? actualRowHeaders : 0; + const theadRows = createRows(rowHeaders, columns, theadRowHeaders, columnHeaders); + append(thead, theadRows); + } + const tbody = SugarElement.fromTag('tbody'); + append$1(table, tbody); + const numRows = rowHeadersGoInThead ? rows - actualRowHeaders : rows; + const numRowHeaders = rowHeadersGoInThead ? 0 : rowHeaders; + const tbodyRows = createRows(numRows, columns, numRowHeaders, columnHeaders); + append(tbody, tbodyRows); + return table; + }; + + const Event = (fields) => { + let handlers = []; + const bind = (handler) => { + if (handler === undefined) { + throw new Error('Event bind error: undefined handler'); + } + handlers.push(handler); + }; + const unbind = (handler) => { + // This is quite a bit slower than handlers.splice() but we hate mutation. + // Unbind isn't used very often so it should be ok. + handlers = filter$2(handlers, (h) => { + return h !== handler; + }); + }; + const trigger = (...args) => { + const event = {}; + each$2(fields, (name, i) => { + event[name] = args[i]; + }); + each$2(handlers, (handler) => { + handler(event); + }); + }; + return { + bind, + unbind, + trigger + }; + }; + + /** :: {name : Event} -> Events */ + const create$3 = (typeDefs) => { + const registry = map(typeDefs, (event) => { + return { + bind: event.bind, + unbind: event.unbind + }; + }); + const trigger = map(typeDefs, (event) => { + return event.trigger; + }); + return { + registry, + trigger + }; + }; + + const DragMode = exactly([ + 'compare', + 'extract', + 'mutate', + 'sink' + ]); + const DragSink = exactly([ + 'element', + 'start', + 'stop', + 'destroy' + ]); + const DragApi = exactly([ + 'forceDrop', + 'drop', + 'move', + 'delayDrop' + ]); + + const InDrag = () => { + let previous = Optional.none(); + const reset = () => { + previous = Optional.none(); + }; + // Return position delta between previous position and nu position, + // or None if this is the first. Set the previous position to nu. + const update = (mode, nu) => { + const result = previous.map((old) => { + return mode.compare(old, nu); + }); + previous = Optional.some(nu); + return result; + }; + const onEvent = (event, mode) => { + const dataOption = mode.extract(event); + // Dragster move events require a position delta. The moveevent is only triggered + // on the second and subsequent dragster move events. The first is dropped. + dataOption.each((data) => { + const offset = update(mode, data); + offset.each((d) => { + events.trigger.move(d); + }); + }); + }; + const events = create$3({ + move: Event(['info']) + }); + return { + onEvent, + reset, + events: events.registry + }; + }; + + const NoDrag = () => { + const events = create$3({ + move: Event(['info']) + }); + return { + onEvent: noop, + reset: noop, + events: events.registry + }; + }; + + const Movement = () => { + const noDragState = NoDrag(); + const inDragState = InDrag(); + let dragState = noDragState; + const on = () => { + dragState.reset(); + dragState = inDragState; + }; + const off = () => { + dragState.reset(); + dragState = noDragState; + }; + const onEvent = (event, mode) => { + dragState.onEvent(event, mode); + }; + const isOn = () => { + return dragState === inDragState; + }; + return { + on, + off, + isOn, + onEvent, + events: inDragState.events + }; + }; + + const setup = (mutation, mode, settings) => { + let active = false; + const events = create$3({ + start: Event([]), + stop: Event([]) + }); + const movement = Movement(); + const drop = () => { + sink.stop(); + if (movement.isOn()) { + movement.off(); + events.trigger.stop(); + } + }; + const throttledDrop = last$1(drop, 200); + const go = (parent) => { + sink.start(parent); + movement.on(); + events.trigger.start(); + }; + const mousemove = (event) => { + throttledDrop.cancel(); + movement.onEvent(event, mode); + }; + movement.events.move.bind((event) => { + mode.mutate(mutation, event.info); + }); + const on = () => { + active = true; + }; + const off = () => { + active = false; + // acivate some events here? + }; + const isActive = () => active; + const runIfActive = (f) => { + return (...args) => { + if (active) { + f.apply(null, args); + } + }; + }; + const sink = mode.sink(DragApi({ + // ASSUMPTION: runIfActive is not needed for mousedown. This is pretty much a safety measure for + // inconsistent situations so that we don't block input. + forceDrop: drop, + drop: runIfActive(drop), + move: runIfActive(mousemove), + delayDrop: runIfActive(throttledDrop.throttle) + }), settings); + const destroy = () => { + sink.destroy(); + }; + return { + element: sink.element, + go, + on, + off, + isActive, + destroy, + events: events.registry + }; + }; + + const styles$1 = css('ephox-dragster'); + const resolve$1 = styles$1.resolve; + + const Blocker = (options) => { + const settings = { + layerClass: resolve$1('blocker'), + ...options + }; + const div = SugarElement.fromTag('div'); + set$2(div, 'role', 'presentation'); + set$2(div, 'data-mce-bogus', 'all'); + setAll(div, { + position: 'fixed', + left: '0px', + top: '0px', + width: '100%', + height: '100%' + }); + add$1(div, resolve$1('blocker')); + add$1(div, settings.layerClass); + const element = constant(div); + const destroy = () => { + remove$5(div); + }; + return { + element, + destroy + }; + }; + + const compare = (old, nu) => { + return SugarPosition(nu.left - old.left, nu.top - old.top); + }; + const extract = (event) => { + return Optional.some(SugarPosition(event.x, event.y)); + }; + const mutate = (mutation, info) => { + mutation.mutate(info.left, info.top); + }; + const sink = (dragApi, settings) => { + const blocker = Blocker(settings); + // Included for safety. If the blocker has stayed on the screen, get rid of it on a click. + const mdown = bind(blocker.element(), 'mousedown', dragApi.forceDrop); + const mup = bind(blocker.element(), 'mouseup', dragApi.drop); + const mmove = bind(blocker.element(), 'mousemove', dragApi.move); + const mout = bind(blocker.element(), 'mouseout', dragApi.delayDrop); + const destroy = () => { + blocker.destroy(); + mup.unbind(); + mmove.unbind(); + mout.unbind(); + mdown.unbind(); + }; + const start = (parent) => { + append$1(parent, blocker.element()); + }; + const stop = () => { + remove$5(blocker.element()); + }; + return DragSink({ + element: blocker.element, + start, + stop, + destroy + }); + }; + var MouseDrag = DragMode({ + compare, + extract, + sink, + mutate + }); + + const transform = (mutation, settings = {}) => { + const mode = settings.mode ?? MouseDrag; + return setup(mutation, mode, settings); + }; + + const styles = css('ephox-snooker'); + const resolve = styles.resolve; + + const Mutation = () => { + const events = create$3({ + drag: Event(['xDelta', 'yDelta']) + }); + const mutate = (x, y) => { + events.trigger.drag(x, y); + }; + return { + mutate, + events: events.registry + }; + }; + + const BarMutation = () => { + const events = create$3({ + drag: Event(['xDelta', 'yDelta', 'target']) + }); + let target = Optional.none(); + const delegate = Mutation(); + delegate.events.drag.bind((event) => { + target.each((t) => { + // There is always going to be this padding / border collapse / margin problem with widths. I'll have to resolve that. + events.trigger.drag(event.xDelta, event.yDelta, t); + }); + }); + const assign = (t) => { + target = Optional.some(t); + }; + const get = () => { + return target; + }; + return { + assign, + get, + mutate: delegate.mutate, + events: events.registry + }; + }; + + const col = (column, x, y, w, h) => { + const bar = SugarElement.fromTag('div'); + setAll(bar, { + position: 'absolute', + left: x - w / 2 + 'px', + top: y + 'px', + height: h + 'px', + width: w + 'px' + }); + setAll$1(bar, { 'data-mce-bogus': 'all', 'data-column': column, 'role': 'presentation' }); + return bar; + }; + const row = (r, x, y, w, h) => { + const bar = SugarElement.fromTag('div'); + setAll(bar, { + position: 'absolute', + left: x + 'px', + top: y - h / 2 + 'px', + height: h + 'px', + width: w + 'px' + }); + setAll$1(bar, { 'data-mce-bogus': 'all', 'data-row': r, 'role': 'presentation' }); + return bar; + }; + + const resizeBar = resolve('resizer-bar'); + const resizeRowBar = resolve('resizer-rows'); + const resizeColBar = resolve('resizer-cols'); + const BAR_THICKNESS = 7; + const resizableRows = (warehouse, isResizable) => bind$2(warehouse.all, (row, i) => isResizable(row.element) ? [i] : []); + const resizableColumns = (warehouse, isResizable) => { + const resizableCols = []; + // Check col elements and see if they are resizable + range$1(warehouse.grid.columns, (index) => { + // With use of forall, index will be included if col doesn't exist meaning the column cells will be checked below + const colElmOpt = Warehouse.getColumnAt(warehouse, index).map((col) => col.element); + if (colElmOpt.forall(isResizable)) { + resizableCols.push(index); + } + }); + // Check cells of the resizable columns and make sure they are resizable + return filter$2(resizableCols, (colIndex) => { + const columnCells = Warehouse.filterItems(warehouse, (cell) => cell.column === colIndex); + return forall(columnCells, (cell) => isResizable(cell.element)); + }); + }; + const destroy = (wire) => { + const previous = descendants(wire.parent(), '.' + resizeBar); + each$2(previous, remove$5); + }; + const drawBar = (wire, positions, create) => { + const origin = wire.origin(); + each$2(positions, (cpOption) => { + cpOption.each((cp) => { + const bar = create(origin, cp); + add$1(bar, resizeBar); + append$1(wire.parent(), bar); + }); + }); + }; + const refreshCol = (wire, colPositions, position, tableHeight) => { + drawBar(wire, colPositions, (origin, cp) => { + const colBar = col(cp.col, cp.x - origin.left, position.top - origin.top, BAR_THICKNESS, tableHeight); + add$1(colBar, resizeColBar); + return colBar; + }); + }; + const refreshRow = (wire, rowPositions, position, tableWidth) => { + drawBar(wire, rowPositions, (origin, cp) => { + const rowBar = row(cp.row, position.left - origin.left, cp.y - origin.top, tableWidth, BAR_THICKNESS); + add$1(rowBar, resizeRowBar); + return rowBar; + }); + }; + const refreshGrid = (warhouse, wire, table, rows, cols) => { + const position = absolute(table); + const isResizable = wire.isResizable; + const rowPositions = rows.length > 0 ? height.positions(rows, table) : []; + const resizableRowBars = rowPositions.length > 0 ? resizableRows(warhouse, isResizable) : []; + const resizableRowPositions = filter$2(rowPositions, (_pos, i) => exists(resizableRowBars, (barIndex) => i === barIndex)); + refreshRow(wire, resizableRowPositions, position, getOuter(table)); + const colPositions = cols.length > 0 ? width.positions(cols, table) : []; + const resizableColBars = colPositions.length > 0 ? resizableColumns(warhouse, isResizable) : []; + const resizableColPositions = filter$2(colPositions, (_pos, i) => exists(resizableColBars, (barIndex) => i === barIndex)); + refreshCol(wire, resizableColPositions, position, getOuter$1(table)); + }; + const refresh = (wire, table) => { + destroy(wire); + if (wire.isResizable(table)) { + const warehouse = Warehouse.fromTable(table); + const rows$1 = rows(warehouse); + const cols = columns(warehouse); + refreshGrid(warehouse, wire, table, rows$1, cols); + } + }; + const each = (wire, f) => { + const bars = descendants(wire.parent(), '.' + resizeBar); + each$2(bars, f); + }; + const hide = (wire) => { + each(wire, (bar) => { + set$1(bar, 'display', 'none'); + }); + }; + const show = (wire) => { + each(wire, (bar) => { + set$1(bar, 'display', 'block'); + }); + }; + const isRowBar = (element) => { + return has(element, resizeRowBar); + }; + const isColBar = (element) => { + return has(element, resizeColBar); + }; + + const resizeBarDragging = resolve('resizer-bar-dragging'); + const BarManager = (wire) => { + const mutation = BarMutation(); + const resizing = transform(mutation, {}); + let hoverTable = Optional.none(); + const getResizer = (element, type) => { + return Optional.from(get$b(element, type)); + }; + /* Reposition the bar as the user drags */ + mutation.events.drag.bind((event) => { + getResizer(event.target, 'data-row').each((_dataRow) => { + const currentRow = getCssValue(event.target, 'top'); + set$1(event.target, 'top', currentRow + event.yDelta + 'px'); + }); + getResizer(event.target, 'data-column').each((_dataCol) => { + const currentCol = getCssValue(event.target, 'left'); + set$1(event.target, 'left', currentCol + event.xDelta + 'px'); + }); + }); + const getDelta = (target, dir) => { + const newX = getCssValue(target, dir); + const oldX = getAttrValue(target, 'data-initial-' + dir, 0); + return newX - oldX; + }; + /* Resize the column once the user releases the mouse */ + resizing.events.stop.bind(() => { + mutation.get().each((target) => { + hoverTable.each((table) => { + getResizer(target, 'data-row').each((row) => { + const delta = getDelta(target, 'top'); + remove$6(target, 'data-initial-top'); + events.trigger.adjustHeight(table, delta, parseInt(row, 10)); + }); + getResizer(target, 'data-column').each((column) => { + const delta = getDelta(target, 'left'); + remove$6(target, 'data-initial-left'); + events.trigger.adjustWidth(table, delta, parseInt(column, 10)); + }); + refresh(wire, table); + }); + }); + }); + const handler = (target, dir) => { + events.trigger.startAdjust(); + mutation.assign(target); + set$2(target, 'data-initial-' + dir, getCssValue(target, dir)); + add$1(target, resizeBarDragging); + set$1(target, 'opacity', '0.2'); + resizing.go(wire.dragContainer()); + }; + /* mousedown on resize bar: start dragging when the bar is clicked, storing the initial position. */ + const mousedown = bind(wire.parent(), 'mousedown', (event) => { + if (isRowBar(event.target)) { + handler(event.target, 'top'); + } + if (isColBar(event.target)) { + handler(event.target, 'left'); + } + }); + const isRoot = (e) => { + return eq$1(e, wire.view()); + }; + const findClosestEditableTable = (target) => closest$1(target, 'table', isRoot).filter(isEditable$1); + const isResizer = (target) => has(target, 'ephox-snooker-resizer-bar') || has(target, 'ephox-dragster-blocker'); + /* mouseover on table: When the mouse moves within the CONTENT AREA (NOT THE TABLE), refresh the bars. */ + const mouseover = bind(wire.view(), 'mouseover', (event) => { + findClosestEditableTable(event.target).fold(() => { + /* + * mouseout is not reliable within ContentEditable, so for all other mouseover events we clear bars. + * This is fairly safe to do frequently; it's a single querySelectorAll() on the content and Arr.map on the result. + * If we _really_ need to optimise it further, we can start caching the bar references in the wire somehow. + * + * Because the resizers were moved into the editor for inline mode, we need to check if the event target is not a resizer. + */ + if (inBody(event.target) && !isResizer(event.target)) { + destroy(wire); + } + }, (table) => { + if (resizing.isActive()) { + hoverTable = Optional.some(table); + refresh(wire, table); + } + }); + }); + const destroy$1 = () => { + mousedown.unbind(); + mouseover.unbind(); + resizing.destroy(); + destroy(wire); + }; + const refresh$1 = (tbl) => { + refresh(wire, tbl); + }; + const events = create$3({ + adjustHeight: Event(['table', 'delta', 'row']), + adjustWidth: Event(['table', 'delta', 'column']), + startAdjust: Event([]) + }); + return { + destroy: destroy$1, + refresh: refresh$1, + on: resizing.on, + off: resizing.off, + hideBars: curry(hide, wire), + showBars: curry(show, wire), + events: events.registry + }; + }; + + const create$2 = (wire, resizing, lazySizing) => { + const hdirection = height; + const vdirection = width; + const manager = BarManager(wire); + const events = create$3({ + beforeResize: Event(['table', 'type']), + afterResize: Event(['table', 'type']), + startDrag: Event([]), + }); + manager.events.adjustHeight.bind((event) => { + const table = event.table; + events.trigger.beforeResize(table, 'row'); + const delta = hdirection.delta(event.delta, table); + // TODO: Use the resizing behaviour for heights as well + adjustHeight(table, delta, event.row); + events.trigger.afterResize(table, 'row'); + }); + manager.events.startAdjust.bind((_event) => { + events.trigger.startDrag(); + }); + manager.events.adjustWidth.bind((event) => { + const table = event.table; + events.trigger.beforeResize(table, 'col'); + const delta = vdirection.delta(event.delta, table); + const tableSize = lazySizing(table); + adjustWidth(table, delta, event.column, resizing, tableSize); + events.trigger.afterResize(table, 'col'); + }); + return { + on: manager.on, + off: manager.off, + refreshBars: manager.refresh, + hideBars: manager.hideBars, + showBars: manager.showBars, + destroy: manager.destroy, + events: events.registry + }; + }; + const TableResize = { + create: create$2 + }; + + const option = (name) => (editor) => editor.options.get(name); + // Note: This is also contained in the table plugin Options.ts file + const defaultWidth = '100%'; + const getPixelForcedWidth = (editor) => { + // Determine the inner size of the parent block element where the table will be inserted + const dom = editor.dom; + const parentBlock = dom.getParent(editor.selection.getStart(), dom.isBlock) ?? editor.getBody(); + return getInner(SugarElement.fromDom(parentBlock)) + 'px'; + }; + // Note: This is also contained in the table plugin Options.ts file + const determineDefaultTableStyles = (editor, defaultStyles) => { + if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) { + return defaultStyles; + } + else if (isTablePixelsForced(editor)) { + return { ...defaultStyles, width: getPixelForcedWidth(editor) }; + } + else { + return { ...defaultStyles, width: defaultWidth }; + } + }; + // Note: This is also contained in the table plugin Options.ts file + const determineDefaultTableAttributes = (editor, defaultAttributes) => { + if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) { + return defaultAttributes; + } + else if (isTablePixelsForced(editor)) { + return { ...defaultAttributes, width: getPixelForcedWidth(editor) }; + } + else { + return { ...defaultAttributes, width: defaultWidth }; + } + }; + const register = (editor) => { + const registerOption = editor.options.register; + registerOption('table_clone_elements', { + processor: 'string[]' + }); + registerOption('table_use_colgroups', { + processor: 'boolean', + default: true + }); + registerOption('table_header_type', { + processor: (value) => { + const valid = contains$2(['section', 'cells', 'sectionCells', 'auto'], value); + return valid ? { value, valid } : { valid: false, message: 'Must be one of: section, cells, sectionCells or auto.' }; + }, + default: 'section' + }); + registerOption('table_sizing_mode', { + processor: 'string', + default: 'auto' + }); + registerOption('table_default_attributes', { + processor: 'object', + default: { + border: '1' + } + }); + registerOption('table_default_styles', { + processor: 'object', + default: { + 'border-collapse': 'collapse', + } + }); + registerOption('table_column_resizing', { + processor: (value) => { + const valid = contains$2(['preservetable', 'resizetable'], value); + return valid ? { value, valid } : { valid: false, message: 'Must be preservetable, or resizetable.' }; + }, + default: 'preservetable' + }); + registerOption('table_resize_bars', { + processor: 'boolean', + default: true + }); + registerOption('table_style_by_css', { + processor: 'boolean', + default: true + }); + registerOption('table_merge_content_on_paste', { + processor: 'boolean', + default: true + }); + }; + const getTableCloneElements = (editor) => { + return Optional.from(editor.options.get('table_clone_elements')); + }; + const hasTableObjectResizing = (editor) => { + const objectResizing = editor.options.get('object_resizing'); + return contains$2(objectResizing.split(','), 'table'); + }; + const getTableHeaderType = option('table_header_type'); + const getTableColumnResizingBehaviour = option('table_column_resizing'); + const isPreserveTableColumnResizing = (editor) => getTableColumnResizingBehaviour(editor) === 'preservetable'; + const isResizeTableColumnResizing = (editor) => getTableColumnResizingBehaviour(editor) === 'resizetable'; + const getTableSizingMode = option('table_sizing_mode'); + const isTablePercentagesForced = (editor) => getTableSizingMode(editor) === 'relative'; + const isTablePixelsForced = (editor) => getTableSizingMode(editor) === 'fixed'; + const isTableResponsiveForced = (editor) => getTableSizingMode(editor) === 'responsive'; + const hasTableResizeBars = option('table_resize_bars'); + const shouldStyleWithCss = option('table_style_by_css'); + const shouldMergeContentOnPaste = option('table_merge_content_on_paste'); + const getTableDefaultAttributes = (editor) => { + // Note: The we don't rely on the default here as we need to dynamically lookup the widths based on the current editor state + const options = editor.options; + const defaultAttributes = options.get('table_default_attributes'); + return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes); + }; + const getTableDefaultStyles = (editor) => { + // Note: The we don't rely on the default here as we need to dynamically lookup the widths based on the current editor state + const options = editor.options; + const defaultStyles = options.get('table_default_styles'); + return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles); + }; + const tableUseColumnGroup = option('table_use_colgroups'); + + /* + NOTE: This file is partially duplicated in the following locations: + - plugins/table/core/Utils.ts + - advtable + Make sure that if making changes to this file, the other files are updated as well + */ + const getBody = (editor) => SugarElement.fromDom(editor.getBody()); + const getIsRoot = (editor) => (element) => eq$1(element, getBody(editor)); + const removeDataStyle = (table) => { + remove$6(table, 'data-mce-style'); + const removeStyleAttribute = (element) => remove$6(element, 'data-mce-style'); + each$2(cells$1(table), removeStyleAttribute); + each$2(columns$1(table), removeStyleAttribute); + each$2(rows$1(table), removeStyleAttribute); + }; + const getSelectionStart = (editor) => SugarElement.fromDom(editor.selection.getStart()); + const getPixelWidth = (elm) => elm.getBoundingClientRect().width; + const getPixelHeight = (elm) => elm.getBoundingClientRect().height; + const getRawValue = (prop) => (editor, elm) => { + const raw = editor.dom.getStyle(elm, prop) || editor.dom.getAttrib(elm, prop); + return Optional.from(raw).filter(isNotEmpty); + }; + const getRawWidth = getRawValue('width'); + const getRawHeight = getRawValue('height'); + const isPercentage$1 = (value) => /^(\d+(\.\d+)?)%$/.test(value); + const isPixel = (value) => /^(\d+(\.\d+)?)px$/.test(value); + const isInEditableContext$1 = (cell) => closest$2(cell, isTag('table')).exists(isEditable$1); + + const lookupTable = (container) => { + return ancestor$1(container, 'table'); + }; + const identify = (start, finish, isRoot) => { + const getIsRoot = (rootTable) => { + return (element) => { + return (isRoot !== undefined && isRoot(element)) || eq$1(element, rootTable); + }; + }; + // Optimisation: If the cells are equal, it's a single cell array + if (eq$1(start, finish)) { + return Optional.some({ + boxes: Optional.some([start]), + start, + finish + }); + } + else { + return lookupTable(start).bind((startTable) => { + return lookupTable(finish).bind((finishTable) => { + if (eq$1(startTable, finishTable)) { // Selecting from within the same table. + return Optional.some({ + boxes: intercepts(startTable, start, finish), + start, + finish + }); + } + else if (contains(startTable, finishTable)) { // Selecting from the parent table to the nested table. + const ancestorCells = ancestors$3(finish, 'td,th', getIsRoot(startTable)); + const finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish; + return Optional.some({ + boxes: nestedIntercepts(startTable, start, startTable, finish, finishTable), + start, + finish: finishCell + }); + } + else if (contains(finishTable, startTable)) { // Selecting from the nested table to the parent table. + const ancestorCells = ancestors$3(start, 'td,th', getIsRoot(finishTable)); + const startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start; + return Optional.some({ + boxes: nestedIntercepts(finishTable, start, startTable, finish, finishTable), + start, + finish: startCell + }); + } + else { // Selecting from a nested table to a different nested table. + return ancestors(start, finish).shared.bind((lca) => { + return closest$1(lca, 'table', isRoot).bind((lcaTable) => { + const finishAncestorCells = ancestors$3(finish, 'td,th', getIsRoot(lcaTable)); + const finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish; + const startAncestorCells = ancestors$3(start, 'td,th', getIsRoot(lcaTable)); + const startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start; + return Optional.some({ + boxes: nestedIntercepts(lcaTable, start, startTable, finish, finishTable), + start: startCell, + finish: finishCell + }); + }); + }); + } + }); + }); + } + }; + const retrieve$1 = (container, selector) => { + const sels = descendants(container, selector); + return sels.length > 0 ? Optional.some(sels) : Optional.none(); + }; + const getLast = (boxes, lastSelectedSelector) => { + return find$1(boxes, (box) => { + return is$1(box, lastSelectedSelector); + }); + }; + const getEdges = (container, firstSelectedSelector, lastSelectedSelector) => { + return descendant(container, firstSelectedSelector).bind((first) => { + return descendant(container, lastSelectedSelector).bind((last) => { + return sharedOne(lookupTable, [first, last]).map((table) => { + return { + first, + last, + table + }; + }); + }); + }); + }; + const expandTo = (finish, firstSelectedSelector) => { + return ancestor$1(finish, 'table').bind((table) => { + return descendant(table, firstSelectedSelector).bind((start) => { + return identify(start, finish).bind((identified) => { + return identified.boxes.map((boxes) => { + return { + boxes, + start: identified.start, + finish: identified.finish + }; + }); + }); + }); + }); + }; + const shiftSelection = (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) => { + return getLast(boxes, lastSelectedSelector).bind((last) => { + return moveBy(last, deltaRow, deltaColumn).bind((finish) => { + return expandTo(finish, firstSelectedSelector); + }); + }); + }; + + // Explicitly calling CellSelection.retrieve so that we can see the API signature. + const retrieve = (container, selector) => { + return retrieve$1(container, selector); + }; + const retrieveBox = (container, firstSelectedSelector, lastSelectedSelector) => { + return getEdges(container, firstSelectedSelector, lastSelectedSelector).bind((edges) => { + const isRoot = (ancestor) => { + return eq$1(container, ancestor); + }; + const sectionSelector = 'thead,tfoot,tbody,table'; + const firstAncestor = ancestor$1(edges.first, sectionSelector, isRoot); + const lastAncestor = ancestor$1(edges.last, sectionSelector, isRoot); + return firstAncestor.bind((fA) => { + return lastAncestor.bind((lA) => { + return eq$1(fA, lA) ? getBox(edges.table, edges.first, edges.last) : Optional.none(); + }); + }); + }); + }; + + const selection = identity; + const unmergable = (selectedCells) => { + const hasSpan = (elem, type) => getOpt(elem, type).exists((span) => parseInt(span, 10) > 1); + const hasRowOrColSpan = (elem) => hasSpan(elem, 'rowspan') || hasSpan(elem, 'colspan'); + return selectedCells.length > 0 && forall(selectedCells, hasRowOrColSpan) ? Optional.some(selectedCells) : Optional.none(); + }; + const mergable = (table, selectedCells, ephemera) => { + if (selectedCells.length <= 1) { + return Optional.none(); + } + else { + return retrieveBox(table, ephemera.firstSelectedSelector, ephemera.lastSelectedSelector) + .map((bounds) => ({ bounds, cells: selectedCells })); + } + }; + + const create$1 = (selection, kill) => ({ + selection, + kill + }); + const Response = { + create: create$1 + }; + + const fold = (subject, onNone, onMultiple, onSingle) => { + switch (subject.tag) { + case "none" /* SelectionTypeTag.None */: + return onNone(); + case "single" /* SelectionTypeTag.Single */: + return onSingle(subject.element); + case "multiple" /* SelectionTypeTag.Multiple */: + return onMultiple(subject.elements); + } + }; + const none = () => ({ tag: "none" /* SelectionTypeTag.None */ }); + const multiple = (elements) => ({ tag: "multiple" /* SelectionTypeTag.Multiple */, elements }); + const single = (element) => ({ tag: "single" /* SelectionTypeTag.Single */, element }); + + const Selections = (lazyRoot, getStart, selectedSelector) => { + const get = () => retrieve(lazyRoot(), selectedSelector).fold(() => getStart().fold(none, single), multiple); + return { + get + }; + }; + + const create = (start, soffset, finish, foffset) => { + return { + start: Situ.on(start, soffset), + finish: Situ.on(finish, foffset) + }; + }; + const Situs = { + create + }; + + const convertToRange = (win, selection) => { + // TODO: Use API packages of sugar + const rng = asLtrRange(win, selection); + return SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset); + }; + const makeSitus = Situs.create; + + // Based on a start and finish, select the appropriate box of cells + const sync = (container, isRoot, start, soffset, finish, foffset, selectRange) => { + if (!(eq$1(start, finish) && soffset === foffset)) { + return closest$1(start, 'td,th', isRoot).bind((s) => { + return closest$1(finish, 'td,th', isRoot).bind((f) => { + return detect(container, isRoot, s, f, selectRange); + }); + }); + } + else { + return Optional.none(); + } + }; + // If the cells are different, and there is a rectangle to connect them, select the cells. + const detect = (container, isRoot, start, finish, selectRange) => { + if (!eq$1(start, finish)) { + return identify(start, finish, isRoot).bind((cellSel) => { + const boxes = cellSel.boxes.getOr([]); + if (boxes.length > 1) { + selectRange(container, boxes, cellSel.start, cellSel.finish); + return Optional.some(Response.create(Optional.some(makeSitus(start, 0, start, getEnd(start))), true)); + } + else { + return Optional.none(); + } + }); + } + else { + return Optional.none(); + } + }; + const update = (rows, columns, container, selected, annotations) => { + const updateSelection = (newSels) => { + annotations.clearBeforeUpdate(container); + annotations.selectRange(container, newSels.boxes, newSels.start, newSels.finish); + return newSels.boxes; + }; + return shiftSelection(selected, rows, columns, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map(updateSelection); + }; + + const adt$1 = Adt.generate([ + { none: ['message'] }, + { success: [] }, + { failedUp: ['cell'] }, + { failedDown: ['cell'] } + ]); + // Let's get some bounding rects, and see if they overlap (x-wise) + const isOverlapping = (bridge, before, after) => { + const beforeBounds = bridge.getRect(before); + const afterBounds = bridge.getRect(after); + return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right; + }; + const isRow = (elem) => { + return closest$1(elem, 'tr'); + }; + const verify = (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) => { + // Identify the cells that the before and after are in. + return closest$1(after, 'td,th', isRoot).bind((afterCell) => { + return closest$1(before, 'td,th', isRoot).map((beforeCell) => { + // If they are not in the same cell + if (!eq$1(afterCell, beforeCell)) { + return sharedOne(isRow, [afterCell, beforeCell]).fold(() => { + // No shared row, and they overlap x-wise -> success, otherwise: failed + return isOverlapping(bridge, beforeCell, afterCell) ? adt$1.success() : failure(beforeCell); + }, (_sharedRow) => { + // In the same row, so it failed. + return failure(beforeCell); + }); + } + else { + return eq$1(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$1.none('in same cell'); + } + }); + }).getOr(adt$1.none('default')); + }; + const cata = (subject, onNone, onSuccess, onFailedUp, onFailedDown) => { + return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown); + }; + const BeforeAfter = { + ...adt$1, + verify, + cata + }; + + const isBr = isTag('br'); + const gatherer = (cand, gather, isRoot) => { + return gather(cand, isRoot).bind((target) => { + return isText(target) && get$5(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Optional.some(target); + }); + }; + const handleBr = (isRoot, element, direction) => { + // 1. Has a neighbouring sibling ... position relative to neighbouring element + // 2. Has no neighbouring sibling ... position relative to gathered element + return direction.traverse(element).orThunk(() => { + return gatherer(element, direction.gather, isRoot); + }).map(direction.relative); + }; + const findBr = (element, offset) => { + return child$2(element, offset).filter(isBr).orThunk(() => { + // Can be either side of the br, and still be a br. + return child$2(element, offset - 1).filter(isBr); + }); + }; + const handleParent = (isRoot, element, offset, direction) => { + // 1. Has no neighbouring sibling, position relative to gathered element + // 2. Has a neighbouring sibling, position at the neighbouring sibling with respect to parent + return findBr(element, offset).bind((br) => { + return direction.traverse(br).fold(() => { + return gatherer(br, direction.gather, isRoot).map(direction.relative); + }, (adjacent) => { + return indexInParent(adjacent).map((info) => { + return Situ.on(info.parent, info.index); + }); + }); + }); + }; + const tryBr = (isRoot, element, offset, direction) => { + // Three different situations + // 1. the br is the child, and it has a previous sibling. Use parent, index-1) + // 2. the br is the child and it has no previous sibling, set to before the previous gather result + // 3. the br is the element and it has a previous sibling, use parent index-1) + // 4. the br is the element and it has no previous sibling, set to before the previous gather result. + // 2. the element is the br itself, + const target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction); + return target.map((tgt) => { + return { + start: tgt, + finish: tgt + }; + }); + }; + const process = (analysis) => { + return BeforeAfter.cata(analysis, (_message) => { + return Optional.none(); + }, () => { + return Optional.none(); + }, (cell) => { + return Optional.some(point(cell, 0)); + }, (cell) => { + return Optional.some(point(cell, getEnd(cell))); + }); + }; + + const moveDown = (caret, amount) => { + return { + left: caret.left, + top: caret.top + amount, + right: caret.right, + bottom: caret.bottom + amount + }; + }; + const moveUp = (caret, amount) => { + return { + left: caret.left, + top: caret.top - amount, + right: caret.right, + bottom: caret.bottom - amount + }; + }; + const translate = (caret, xDelta, yDelta) => { + return { + left: caret.left + xDelta, + top: caret.top + yDelta, + right: caret.right + xDelta, + bottom: caret.bottom + yDelta + }; + }; + const getTop = (caret) => { + return caret.top; + }; + const getBottom = (caret) => { + return caret.bottom; + }; + + const getPartialBox = (bridge, element, offset) => { + if (offset >= 0 && offset < getEnd(element)) { + return bridge.getRangedRect(element, offset, element, offset + 1); + } + else if (offset > 0) { + return bridge.getRangedRect(element, offset - 1, element, offset); + } + return Optional.none(); + }; + const toCaret = (rect) => ({ + left: rect.left, + top: rect.top, + right: rect.right, + bottom: rect.bottom + }); + const getElemBox = (bridge, element) => { + return Optional.some(bridge.getRect(element)); + }; + const getBoxAt = (bridge, element, offset) => { + // Note, we might need to consider this offset and descend. + if (isElement(element)) { + return getElemBox(bridge, element).map(toCaret); + } + else if (isText(element)) { + return getPartialBox(bridge, element, offset).map(toCaret); + } + else { + return Optional.none(); + } + }; + const getEntireBox = (bridge, element) => { + if (isElement(element)) { + return getElemBox(bridge, element).map(toCaret); + } + else if (isText(element)) { + return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret); + } + else { + return Optional.none(); + } + }; + + const JUMP_SIZE = 5; + const NUM_RETRIES = 100; + const adt = Adt.generate([ + { none: [] }, + { retry: ['caret'] } + ]); + const isOutside = (caret, box) => { + return caret.left < box.left || Math.abs(box.right - caret.left) < 1 || caret.left > box.right; + }; + // Find the block and determine whether or not that block is outside. If it is outside, move up/down and right. + const inOutsideBlock = (bridge, element, caret) => { + return closest$2(element, isBlock).fold(never, (cell) => { + return getEntireBox(bridge, cell).exists((box) => { + return isOutside(caret, box); + }); + }); + }; + /* + * The approach is as follows. + * + * The browser APIs for caret ranges return elements that are the closest text elements to your (x, y) position, even if those + * closest elements are miles away. This causes problems when you are trying to identify what is immediately above or below + * a cell, because often the closest text is in a cell that is in a completely different column. Therefore, the approach needs + * to keep moving down until the thing that we are hitting is likely to be a true positive. + * + * Steps: + * + * 1. If the y position of the next guess is not different from the original, keep going. + * 2a. If the guess box doesn't actually include the position looked for, then the browser has returned a node that does not have + * a rectangle which truly intercepts the point. So, keep going. Note, we used to jump straight away here, but that means that + * we might skip over something that wasn't considered close enough but was a better guess than just making the y value skip. + * 2b. If the guess box exactly aligns with the caret, then adjust by 1 and go again. This is to get a more accurate offset. + * 3. if the guess box does include the caret, but the guess box's parent cell does not *really* contain the caret, try again shifting + * only the x value. If the guess box's parent cell does *really* contain the caret (i.e. it is horizontally-aligned), then stop + * because the guess is GOOD. + */ + const adjustDown = (bridge, element, guessBox, original, caret) => { + const lowerCaret = moveDown(caret, JUMP_SIZE); + if (Math.abs(guessBox.bottom - original.bottom) < 1) { + return adt.retry(lowerCaret); + } + else if (guessBox.top > caret.bottom) { + return adt.retry(lowerCaret); + } + else if (guessBox.top === caret.bottom) { + return adt.retry(moveDown(caret, 1)); + } + else { + return inOutsideBlock(bridge, element, caret) ? adt.retry(translate(lowerCaret, JUMP_SIZE, 0)) : adt.none(); + } + }; + const adjustUp = (bridge, element, guessBox, original, caret) => { + const higherCaret = moveUp(caret, JUMP_SIZE); + if (Math.abs(guessBox.top - original.top) < 1) { + return adt.retry(higherCaret); + } + else if (guessBox.bottom < caret.top) { + return adt.retry(higherCaret); + } + else if (guessBox.bottom === caret.top) { + return adt.retry(moveUp(caret, 1)); + } + else { + return inOutsideBlock(bridge, element, caret) ? adt.retry(translate(higherCaret, JUMP_SIZE, 0)) : adt.none(); + } + }; + const upMovement = { + point: getTop, + adjuster: adjustUp, + move: moveUp, + gather: before + }; + const downMovement = { + point: getBottom, + adjuster: adjustDown, + move: moveDown, + gather: after + }; + const isAtTable = (bridge, x, y) => { + return bridge.elementFromPoint(x, y).filter((elm) => { + return name(elm) === 'table'; + }).isSome(); + }; + const adjustForTable = (bridge, movement, original, caret, numRetries) => { + return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries); + }; + const adjustTil = (bridge, movement, original, caret, numRetries) => { + if (numRetries === 0) { + return Optional.some(caret); + } + if (isAtTable(bridge, caret.left, movement.point(caret))) { + return adjustForTable(bridge, movement, original, caret, numRetries - 1); + } + return bridge.situsFromPoint(caret.left, movement.point(caret)).bind((guess) => { + return guess.start.fold(Optional.none, (element) => { + return getEntireBox(bridge, element).bind((guessBox) => { + return movement.adjuster(bridge, element, guessBox, original, caret).fold(Optional.none, (newCaret) => { + return adjustTil(bridge, movement, original, newCaret, numRetries - 1); + }); + }).orThunk(() => { + return Optional.some(caret); + }); + }, Optional.none); + }); + }; + const checkScroll = (movement, adjusted, bridge) => { + // I'm not convinced that this is right. Let's re-examine it later. + if (movement.point(adjusted) > bridge.getInnerHeight()) { + return Optional.some(movement.point(adjusted) - bridge.getInnerHeight()); + } + else if (movement.point(adjusted) < 0) { + return Optional.some(-movement.point(adjusted)); + } + else { + return Optional.none(); + } + }; + const retry = (movement, bridge, caret) => { + const moved = movement.move(caret, JUMP_SIZE); + const adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved); + return checkScroll(movement, adjusted, bridge).fold(() => { + return bridge.situsFromPoint(adjusted.left, movement.point(adjusted)); + }, (delta) => { + bridge.scrollBy(0, delta); + return bridge.situsFromPoint(adjusted.left, movement.point(adjusted) - delta); + }); + }; + const Retries = { + tryUp: curry(retry, upMovement), + tryDown: curry(retry, downMovement), + getJumpSize: constant(JUMP_SIZE) + }; + + const MAX_RETRIES = 20; + const findSpot = (bridge, isRoot, direction) => { + return bridge.getSelection().bind((sel) => { + return tryBr(isRoot, sel.finish, sel.foffset, direction).fold(() => { + return Optional.some(point(sel.finish, sel.foffset)); + }, (brNeighbour) => { + const range = bridge.fromSitus(brNeighbour); + const analysis = BeforeAfter.verify(bridge, sel.finish, sel.foffset, range.finish, range.foffset, direction.failure, isRoot); + return process(analysis); + }); + }); + }; + const scan = (bridge, isRoot, element, offset, direction, numRetries) => { + if (numRetries === 0) { + return Optional.none(); + } + // Firstly, move the (x, y) and see what element we end up on. + return tryCursor(bridge, isRoot, element, offset, direction).bind((situs) => { + const range = bridge.fromSitus(situs); + // Now, check to see if the element is a new cell. + const analysis = BeforeAfter.verify(bridge, element, offset, range.finish, range.foffset, direction.failure, isRoot); + return BeforeAfter.cata(analysis, () => { + return Optional.none(); + }, () => { + // We have a new cell, so we stop looking. + return Optional.some(situs); + }, (cell) => { + if (eq$1(element, cell) && offset === 0) { + return tryAgain(bridge, element, offset, moveUp, direction); + } + else { // We need to look again from the start of our current cell + return scan(bridge, isRoot, cell, 0, direction, numRetries - 1); + } + }, (cell) => { + // If we were here last time, move and try again. + if (eq$1(element, cell) && offset === getEnd(cell)) { + return tryAgain(bridge, element, offset, moveDown, direction); + } + else { // We need to look again from the end of our current cell + return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1); + } + }); + }); + }; + const tryAgain = (bridge, element, offset, move, direction) => { + return getBoxAt(bridge, element, offset).bind((box) => { + return tryAt(bridge, direction, move(box, Retries.getJumpSize())); + }); + }; + const tryAt = (bridge, direction, box) => { + const browser = detect$2().browser; + // NOTE: As we attempt to take over selection everywhere, we'll probably need to separate these again. + if (browser.isChromium() || browser.isSafari() || browser.isFirefox()) { + return direction.retry(bridge, box); + } + else { + return Optional.none(); + } + }; + const tryCursor = (bridge, isRoot, element, offset, direction) => { + return getBoxAt(bridge, element, offset).bind((box) => { + return tryAt(bridge, direction, box); + }); + }; + const handle = (bridge, isRoot, direction) => { + return findSpot(bridge, isRoot, direction).bind((spot) => { + // There is a point to start doing box-hitting from + return scan(bridge, isRoot, spot.element, spot.offset, direction, MAX_RETRIES).map(bridge.fromSitus); + }); + }; + + const inSameTable = (elem, table) => { + return ancestor(elem, (e) => { + return parent(e).exists((p) => { + return eq$1(p, table); + }); + }); + }; + // Note: initial is the finishing element, because that's where the cursor starts from + // Anchor is the starting element, and is only used to work out if we are in the same table + const simulate = (bridge, isRoot, direction, initial, anchor) => { + return closest$1(initial, 'td,th', isRoot).bind((start) => { + return closest$1(start, 'table', isRoot).bind((table) => { + if (!inSameTable(anchor, table)) { + return Optional.none(); + } + return handle(bridge, isRoot, direction).bind((range) => { + return closest$1(range.finish, 'td,th', isRoot).map((finish) => { + return { + start, + finish, + range + }; + }); + }); + }); + }); + }; + const navigate = (bridge, isRoot, direction, initial, anchor, precheck) => { + return precheck(initial, isRoot).orThunk(() => { + return simulate(bridge, isRoot, direction, initial, anchor).map((info) => { + const range = info.range; + return Response.create(Optional.some(makeSitus(range.start, range.soffset, range.finish, range.foffset)), true); + }); + }); + }; + const firstUpCheck = (initial, isRoot) => { + return closest$1(initial, 'tr', isRoot).bind((startRow) => { + return closest$1(startRow, 'table', isRoot).bind((table) => { + const rows = descendants(table, 'tr'); + if (eq$1(startRow, rows[0])) { + return seekLeft(table, (element) => { + return last(element).isSome(); + }, isRoot).map((last) => { + const lastOffset = getEnd(last); + return Response.create(Optional.some(makeSitus(last, lastOffset, last, lastOffset)), true); + }); + } + else { + return Optional.none(); + } + }); + }); + }; + const lastDownCheck = (initial, isRoot) => { + return closest$1(initial, 'tr', isRoot).bind((startRow) => { + return closest$1(startRow, 'table', isRoot).bind((table) => { + const rows = descendants(table, 'tr'); + if (eq$1(startRow, rows[rows.length - 1])) { + return seekRight(table, (element) => { + return first(element).isSome(); + }, isRoot).map((first) => { + return Response.create(Optional.some(makeSitus(first, 0, first, 0)), true); + }); + } + else { + return Optional.none(); + } + }); + }); + }; + const select = (bridge, container, isRoot, direction, initial, anchor, selectRange) => { + return simulate(bridge, isRoot, direction, initial, anchor).bind((info) => { + return detect(container, isRoot, info.start, info.finish, selectRange); + }); + }; + + const findCell = (target, isRoot) => closest$1(target, 'td,th', isRoot); + const isInEditableContext = (cell) => parentElement(cell).exists(isEditable$1); + const MouseSelection = (bridge, container, isRoot, annotations) => { + const cursor = value(); + const clearstate = cursor.clear; + const applySelection = (event) => { + cursor.on((start) => { + annotations.clearBeforeUpdate(container); + findCell(event.target, isRoot).each((finish) => { + identify(start, finish, isRoot).each((cellSel) => { + const boxes = cellSel.boxes.getOr([]); + if (boxes.length === 1) { + // If a single noneditable cell is selected and the actual selection target within the cell + // is also noneditable, make sure it is annotated + const singleCell = boxes[0]; + const isNonEditableCell = getRaw$1(singleCell) === 'false'; + const isCellClosestContentEditable = is$2(closest(event.target), singleCell, eq$1); + if (isNonEditableCell && isCellClosestContentEditable) { + // Not selecting the contents or the node of the actual cell as shown below, keeping the selection on the offscreen element. + annotations.selectRange(container, boxes, singleCell, singleCell); + } + } + else if (boxes.length > 1) { + // Wait until we have more than one, otherwise you can't do text selection inside a cell. + annotations.selectRange(container, boxes, cellSel.start, cellSel.finish); + // stop the browser from creating a big text selection, select the cell where the cursor is + bridge.selectContents(finish); + } + }); + }); + }); + }; + /* Keep this as lightweight as possible when we're not in a table selection, it runs constantly */ + const mousedown = (event) => { + annotations.clear(container); + findCell(event.target, isRoot).filter(isInEditableContext).each(cursor.set); + }; + /* Keep this as lightweight as possible when we're not in a table selection, it runs constantly */ + const mouseover = (event) => { + applySelection(event); + }; + /* Keep this as lightweight as possible when we're not in a table selection, it runs constantly */ + const mouseup = (event) => { + // Needed as Firefox will change the selection between the mouseover and mouseup when selecting + // just 2 cells as Firefox supports multiple selection ranges + applySelection(event); + clearstate(); + }; + return { + clearstate, + mousedown, + mouseover, + mouseup + }; + }; + + const down = { + traverse: nextSibling, + gather: after, + relative: Situ.before, + retry: Retries.tryDown, + failure: BeforeAfter.failedDown + }; + const up = { + traverse: prevSibling, + gather: before, + relative: Situ.before, + retry: Retries.tryUp, + failure: BeforeAfter.failedUp + }; + + const isKey = (key) => { + return (keycode) => { + return keycode === key; + }; + }; + const isUp = isKey(38); + const isDown = isKey(40); + const isNavigation = (keycode) => { + return keycode >= 37 && keycode <= 40; + }; + const ltr = { + // We need to move KEYS out of keytar and into something much more low-level. + isBackward: isKey(37), + isForward: isKey(39) + }; + const rtl = { + isBackward: isKey(39), + isForward: isKey(37) + }; + + const WindowBridge = (win) => { + const elementFromPoint = (x, y) => { + return SugarElement.fromPoint(SugarElement.fromDom(win.document), x, y); + }; + const getRect = (element) => { + return element.dom.getBoundingClientRect(); + }; + const getRangedRect = (start, soffset, finish, foffset) => { + const sel = SimSelection.exact(start, soffset, finish, foffset); + return getFirstRect(win, sel); + }; + const getSelection = () => { + return get$3(win).map((exactAdt) => { + return convertToRange(win, exactAdt); + }); + }; + const fromSitus = (situs) => { + const relative = SimSelection.relative(situs.start, situs.finish); + return convertToRange(win, relative); + }; + const situsFromPoint = (x, y) => { + return getAtPoint(win, x, y).map((exact) => { + return Situs.create(exact.start, exact.soffset, exact.finish, exact.foffset); + }); + }; + const clearSelection = () => { + clear(win); + }; + const collapseSelection = (toStart = false) => { + get$3(win).each((sel) => sel.fold((rng) => rng.collapse(toStart), (startSitu, finishSitu) => { + const situ = toStart ? startSitu : finishSitu; + setRelative(win, situ, situ); + }, (start, soffset, finish, foffset) => { + const node = toStart ? start : finish; + const offset = toStart ? soffset : foffset; + setExact(win, node, offset, node, offset); + })); + }; + const selectNode = (element) => { + setToElement(win, element, false); + }; + const selectContents = (element) => { + setToElement(win, element); + }; + const setSelection = (sel) => { + setExact(win, sel.start, sel.soffset, sel.finish, sel.foffset); + }; + const setRelativeSelection = (start, finish) => { + setRelative(win, start, finish); + }; + const getInnerHeight = () => { + return win.innerHeight; + }; + const getScrollY = () => { + const pos = get$6(SugarElement.fromDom(win.document)); + return pos.top; + }; + const scrollBy = (x, y) => { + by(x, y, SugarElement.fromDom(win.document)); + }; + return { + elementFromPoint, + getRect, + getRangedRect, + getSelection, + fromSitus, + situsFromPoint, + clearSelection, + collapseSelection, + setSelection, + setRelativeSelection, + selectNode, + selectContents, + getInnerHeight, + getScrollY, + scrollBy + }; + }; + + const rc = (rows, cols) => ({ rows, cols }); + const mouse = (win, container, isRoot, annotations) => { + const bridge = WindowBridge(win); + const handlers = MouseSelection(bridge, container, isRoot, annotations); + return { + clearstate: handlers.clearstate, + mousedown: handlers.mousedown, + mouseover: handlers.mouseover, + mouseup: handlers.mouseup + }; + }; + const isEditableNode = (node) => closest$2(node, isHTMLElement).exists(isEditable$1); + const isEditableSelection = (start, finish) => isEditableNode(start) || isEditableNode(finish); + const keyboard = (win, container, isRoot, annotations) => { + const bridge = WindowBridge(win); + const clearToNavigate = () => { + annotations.clear(container); + return Optional.none(); + }; + const keydown = (event, start, soffset, finish, foffset, direction) => { + const realEvent = event.raw; + const keycode = realEvent.which; + const shiftKey = realEvent.shiftKey === true; + const handler = retrieve$1(container, annotations.selectedSelector).fold(() => { + // Make sure any possible lingering annotations are cleared + if (isNavigation(keycode) && !shiftKey) { + annotations.clearBeforeUpdate(container); + } + // Shift down should predict the movement and set the selection. + if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) { + return Optional.none; + } + else if (isDown(keycode) && shiftKey) { + return curry(select, bridge, container, isRoot, down, finish, start, annotations.selectRange); + } + else if (isUp(keycode) && shiftKey) { // Shift up should predict the movement and set the selection. + return curry(select, bridge, container, isRoot, up, finish, start, annotations.selectRange); + } + else if (isDown(keycode)) { // Down should predict the movement and set the cursor + return curry(navigate, bridge, isRoot, down, finish, start, lastDownCheck); + } + else if (isUp(keycode)) { // Up should predict the movement and set the cursor + return curry(navigate, bridge, isRoot, up, finish, start, firstUpCheck); + } + else { + return Optional.none; + } + }, (selected) => { + const update$1 = (attempts) => { + return () => { + const navigation = findMap(attempts, (delta) => { + return update(delta.rows, delta.cols, container, selected, annotations); + }); + // Shift the selected rows and update the selection. + return navigation.fold(() => { + // The cell selection went outside the table, so clear it and bridge from the first box to before/after + // the table + return getEdges(container, annotations.firstSelectedSelector, annotations.lastSelectedSelector).map((edges) => { + const relative = isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before; + bridge.setRelativeSelection(Situ.on(edges.first, 0), relative(edges.table)); + annotations.clear(container); + return Response.create(Optional.none(), true); + }); + }, (_) => { + return Optional.some(Response.create(Optional.none(), true)); + }); + }; + }; + if (isNavigation(keycode) && shiftKey && !isEditableSelection(start, finish)) { + return Optional.none; + } + else if (isDown(keycode) && shiftKey) { + return update$1([rc(+1, 0)]); + } + else if (isUp(keycode) && shiftKey) { + return update$1([rc(-1, 0)]); + } + else if (direction.isBackward(keycode) && shiftKey) { // Left and right should try up/down respectively if they fail. + return update$1([rc(0, -1), rc(-1, 0)]); + } + else if (direction.isForward(keycode) && shiftKey) { + return update$1([rc(0, +1), rc(+1, 0)]); + } + else if (isNavigation(keycode) && !shiftKey) { // Clear the selection on normal arrow keys. + return clearToNavigate; + } + else { + return Optional.none; + } + }); + return handler(); + }; + const keyup = (event, start, soffset, finish, foffset) => { + return retrieve$1(container, annotations.selectedSelector).fold(() => { + const realEvent = event.raw; + const keycode = realEvent.which; + const shiftKey = realEvent.shiftKey === true; + if (!shiftKey) { + return Optional.none(); + } + if (isNavigation(keycode) && isEditableSelection(start, finish)) { + return sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange); + } + else { + return Optional.none(); + } + }, Optional.none); + }; + return { + keydown, + keyup + }; + }; + const external = (win, container, isRoot, annotations) => { + const bridge = WindowBridge(win); + return (start, finish) => { + annotations.clearBeforeUpdate(container); + identify(start, finish, isRoot).each((cellSel) => { + const boxes = cellSel.boxes.getOr([]); + annotations.selectRange(container, boxes, cellSel.start, cellSel.finish); + // stop the browser from creating a big text selection, place the selection at the end of the cell where the cursor is + bridge.selectContents(finish); + bridge.collapseSelection(); + }); + }; + }; + + const byClass = (ephemera) => { + const addSelectionClass = addClass(ephemera.selected); + const removeSelectionClasses = removeClasses([ephemera.selected, ephemera.lastSelected, ephemera.firstSelected]); + const clear = (container) => { + const sels = descendants(container, ephemera.selectedSelector); + each$2(sels, removeSelectionClasses); + }; + const selectRange = (container, cells, start, finish) => { + clear(container); + each$2(cells, addSelectionClass); + add$1(start, ephemera.firstSelected); + add$1(finish, ephemera.lastSelected); + }; + return { + clearBeforeUpdate: clear, + clear, + selectRange, + selectedSelector: ephemera.selectedSelector, + firstSelectedSelector: ephemera.firstSelectedSelector, + lastSelectedSelector: ephemera.lastSelectedSelector + }; + }; + const byAttr = (ephemera, onSelection, onClear) => { + const removeSelectionAttributes = (element) => { + remove$6(element, ephemera.selected); + remove$6(element, ephemera.firstSelected); + remove$6(element, ephemera.lastSelected); + }; + const addSelectionAttribute = (element) => { + set$2(element, ephemera.selected, '1'); + }; + const clear = (container) => { + clearBeforeUpdate(container); + onClear(); + }; + const clearBeforeUpdate = (container) => { + const sels = descendants(container, `${ephemera.selectedSelector},${ephemera.firstSelectedSelector},${ephemera.lastSelectedSelector}`); + each$2(sels, removeSelectionAttributes); + }; + const selectRange = (container, cells, start, finish) => { + clear(container); + each$2(cells, addSelectionAttribute); + set$2(start, ephemera.firstSelected, '1'); + set$2(finish, ephemera.lastSelected, '1'); + onSelection(cells, start, finish); + }; + return { + clearBeforeUpdate, + clear, + selectRange, + selectedSelector: ephemera.selectedSelector, + firstSelectedSelector: ephemera.firstSelectedSelector, + lastSelectedSelector: ephemera.lastSelectedSelector + }; + }; + const SelectionAnnotation = { + byClass, + byAttr + }; + + /* + NOTE: This file is duplicated in the following locations: + - plugins/table/selection/Ephemera.ts + - advtable + Make sure that if making changes to this file, the other files are updated as well + */ + const strSelected = 'data-mce-selected'; + const strSelectedSelector = 'td[' + strSelected + '],th[' + strSelected + ']'; + // used with not selectors + const strAttributeSelector = '[' + strSelected + ']'; + const strFirstSelected = 'data-mce-first-selected'; + const strFirstSelectedSelector = 'td[' + strFirstSelected + '],th[' + strFirstSelected + ']'; + const strLastSelected = 'data-mce-last-selected'; + const strLastSelectedSelector = 'td[' + strLastSelected + '],th[' + strLastSelected + ']'; + const attributeSelector = strAttributeSelector; + const ephemera = { + selected: strSelected, + selectedSelector: strSelectedSelector, + firstSelected: strFirstSelected, + firstSelectedSelector: strFirstSelectedSelector, + lastSelected: strLastSelected, + lastSelectedSelector: strLastSelectedSelector + }; + + /* + NOTE: This file is partially duplicated in the following locations: + - plugins/table/queries/TableTargets.ts + - advtable + Make sure that if making changes to this file, the other files are updated as well + */ + const forMenu = (selectedCells, table, cell) => ({ + element: cell, + mergable: mergable(table, selectedCells, ephemera), + unmergable: unmergable(selectedCells), + selection: selection(selectedCells) + }); + const paste = (element, clipboard, generators) => ({ + element, + clipboard, + generators + }); + const pasteRows = (selectedCells, _cell, clipboard, generators) => ({ + selection: selection(selectedCells), + clipboard, + generators + }); + + /* + NOTE: This file is partially duplicated in the following locations: + - plugins/table/selection/TableSelection.ts + - advtable + Make sure that if making changes to this file, the other files are updated as well + */ + const getSelectionCellFallback = (element) => table(element).bind((table) => retrieve(table, ephemera.firstSelectedSelector)).fold(constant(element), (cells) => cells[0]); + const getSelectionFromSelector = (selector) => (initCell, isRoot) => { + const cellName = name(initCell); + const cell = cellName === 'col' || cellName === 'colgroup' ? getSelectionCellFallback(initCell) : initCell; + return closest$1(cell, selector, isRoot); + }; + const getSelectionCellOrCaption = getSelectionFromSelector('th,td,caption'); + const getSelectionCell = getSelectionFromSelector('th,td'); + // Note: Includes single cell if the start of the selection whether collapsed or ranged is within a table cell + const getCellsFromSelection = (editor) => fromDom(editor.model.table.getSelectedCells()); + const getCellsFromFakeSelection = (editor) => filter$2(getCellsFromSelection(editor), (cell) => is$1(cell, ephemera.selectedSelector)); + + const extractSelected = (cells) => { + // Assume for now that we only have one table (also handles the case where we multi select outside a table) + return table(cells[0]).map((table) => { + const replica = extract$1(table, attributeSelector); + removeDataStyle(replica); + return [replica]; + }); + }; + const serializeElements = (editor, elements) => map$1(elements, (elm) => editor.selection.serializer.serialize(elm.dom, {})).join(''); + const getTextContent = (editor, replicaElements) => { + const doc = editor.getDoc(); + const dos = getRootNode(SugarElement.fromDom(editor.getBody())); + // Set up offscreen div so that the extracted table element can be inserted into the DOM + // TINY-10847: If the table element is detached from the DOM, calling innerText is equivalent to calling + // textContent which does not include '\n' and '\t' characters to separate rows and cells respectively + const offscreenDiv = SugarElement.fromTag('div', doc); + set$2(offscreenDiv, 'data-mce-bogus', 'all'); + setAll(offscreenDiv, { + position: 'fixed', + left: '-9999999px', + top: '0', + overflow: 'hidden', + opacity: '0' + }); + const root = getContentContainer(dos); + append(offscreenDiv, replicaElements); + append$1(root, offscreenDiv); + const textContent = offscreenDiv.dom.innerText; + remove$5(offscreenDiv); + return textContent; + }; + const registerEvents = (editor, actions) => { + editor.on('BeforeGetContent', (e) => { + const multiCellContext = (cells) => { + e.preventDefault(); + extractSelected(cells).each((replicaElements) => { + const content = e.format === 'text' ? getTextContent(editor, replicaElements) : serializeElements(editor, replicaElements); + e.content = content; + }); + }; + if (e.selection === true) { + const cells = getCellsFromFakeSelection(editor); + if (cells.length >= 1) { + multiCellContext(cells); + } + } + }); + editor.on('BeforeSetContent', (e) => { + if (e.selection === true && e.paste === true) { + const selectedCells = getCellsFromSelection(editor); + head(selectedCells).each((cell) => { + table(cell).each((table) => { + const elements = filter$2(fromHtml(e.content), (content) => { + return name(content) !== 'meta'; + }); + const isTable = isTag('table'); + if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) { + e.preventDefault(); + const doc = SugarElement.fromDom(editor.getDoc()); + const generators = paste$1(doc); + const targets = paste(cell, elements[0], generators); + actions.pasteCells(table, targets).each(() => { + editor.focus(); + }); + } + }); + }); + } + }); + }; + + /* + NOTE: This file is duplicated in the following locations: + - core/api/TableEvents.ts + - plugins/table/api/Events.ts + - advtable + Make sure that if making changes to this file, the other files are updated as well + */ + const fireNewRow = (editor, row) => editor.dispatch('NewRow', { node: row }); + const fireNewCell = (editor, cell) => editor.dispatch('NewCell', { node: cell }); + const fireTableModified = (editor, table, data) => { + editor.dispatch('TableModified', { ...data, table }); + }; + const fireTableSelectionChange = (editor, cells, start, finish, otherCells) => { + editor.dispatch('TableSelectionChange', { + cells, + start, + finish, + otherCells + }); + }; + const fireTableSelectionClear = (editor) => { + editor.dispatch('TableSelectionClear'); + }; + const fireObjectResizeStart = (editor, target, width, height, origin) => { + editor.dispatch('ObjectResizeStart', { target, width, height, origin }); + }; + const fireObjectResized = (editor, target, width, height, origin) => { + editor.dispatch('ObjectResized', { target, width, height, origin }); + }; + const styleModified = { structure: false, style: true }; + const structureModified = { structure: true, style: false }; + const styleAndStructureModified = { structure: true, style: true }; + + const get$1 = (editor, table) => { + // Note: We can't enforce none (responsive), as if someone manually resizes a table + // then it must switch to either pixel (fixed) or percentage (relative) sizing + if (isTablePercentagesForced(editor)) { + return TableSize.percentageSize(table); + } + else if (isTablePixelsForced(editor)) { + return TableSize.pixelSize(table); + } + else { + // Detect based on the table width + return TableSize.getTableSize(table); + } + }; + + const TableActions = (editor, resizeHandler, cellSelectionHandler) => { + const isTableBody = (editor) => name(getBody(editor)) === 'table'; + const lastRowGuard = (table) => !isTableBody(editor) || getGridSize(table).rows > 1; + const lastColumnGuard = (table) => !isTableBody(editor) || getGridSize(table).columns > 1; + // Optional.none gives the default cloneFormats. + const cloneFormats = getTableCloneElements(editor); + const colMutationOp = isResizeTableColumnResizing(editor) ? noop : halve; + const getTableSectionType = (table) => { + switch (getTableHeaderType(editor)) { + case 'section': + return TableSection.section(); + case 'sectionCells': + return TableSection.sectionCells(); + case 'cells': + return TableSection.cells(); + default: + // Attempt to automatically find the type. If a type can't be found + // then fallback to "section" to maintain backwards compatibility. + return TableSection.getTableSectionType(table, 'section'); + } + }; + const setSelectionFromAction = (table, result) => result.cursor.fold(() => { + // Snooker has reported we don't have a good cursor position. However, we may have a locked column + // with noneditable cells, so lets check if we have a noneditable cell and if so place the selection + const cells = cells$1(table); + return head(cells).filter(inBody).map((firstCell) => { + cellSelectionHandler.clearSelectedCells(table.dom); + const rng = editor.dom.createRng(); + rng.selectNode(firstCell.dom); + editor.selection.setRng(rng); + set$2(firstCell, 'data-mce-selected', '1'); + return rng; + }); + }, (cell) => { + const des = freefallRtl(cell); + const rng = editor.dom.createRng(); + rng.setStart(des.element.dom, des.offset); + rng.setEnd(des.element.dom, des.offset); + editor.selection.setRng(rng); + cellSelectionHandler.clearSelectedCells(table.dom); + return Optional.some(rng); + }); + const execute = (operation, guard, mutate, effect) => (table, target, noEvents = false) => { + removeDataStyle(table); + const doc = SugarElement.fromDom(editor.getDoc()); + const generators = cellOperations(mutate, doc, cloneFormats); + const behaviours = { + sizing: get$1(editor, table), + resize: isResizeTableColumnResizing(editor) ? resizeTable() : preserveTable(), + section: getTableSectionType(table) + }; + return guard(table) ? operation(table, target, generators, behaviours).bind((result) => { + // Update the resize bars after the table operation + resizeHandler.refresh(table.dom); + // INVESTIGATE: Should "noEvents" prevent these from firing as well? + each$2(result.newRows, (row) => { + fireNewRow(editor, row.dom); + }); + each$2(result.newCells, (cell) => { + fireNewCell(editor, cell.dom); + }); + const range = setSelectionFromAction(table, result); + if (inBody(table)) { + removeDataStyle(table); + if (!noEvents) { + fireTableModified(editor, table.dom, effect); + } + } + return range.map((rng) => ({ + rng, + effect + })); + }) : Optional.none(); + }; + const deleteRow = execute(eraseRows, lastRowGuard, noop, structureModified); + const deleteColumn = execute(eraseColumns, lastColumnGuard, noop, structureModified); + const insertRowsBefore$1 = execute(insertRowsBefore, always, noop, structureModified); + const insertRowsAfter$1 = execute(insertRowsAfter, always, noop, structureModified); + const insertColumnsBefore$1 = execute(insertColumnsBefore, always, colMutationOp, structureModified); + const insertColumnsAfter$1 = execute(insertColumnsAfter, always, colMutationOp, structureModified); + const mergeCells$1 = execute(mergeCells, always, noop, structureModified); + const unmergeCells$1 = execute(unmergeCells, always, noop, structureModified); + const pasteColsBefore$1 = execute(pasteColsBefore, always, noop, structureModified); + const pasteColsAfter$1 = execute(pasteColsAfter, always, noop, structureModified); + const pasteRowsBefore$1 = execute(pasteRowsBefore, always, noop, structureModified); + const pasteRowsAfter$1 = execute(pasteRowsAfter, always, noop, structureModified); + const pasteCells$1 = execute(pasteCells, always, noop, styleAndStructureModified); + const makeCellsHeader$1 = execute(makeCellsHeader, always, noop, structureModified); + const unmakeCellsHeader$1 = execute(unmakeCellsHeader, always, noop, structureModified); + const makeColumnsHeader$1 = execute(makeColumnsHeader, always, noop, structureModified); + const unmakeColumnsHeader$1 = execute(unmakeColumnsHeader, always, noop, structureModified); + const makeRowsHeader$1 = execute(makeRowsHeader, always, noop, structureModified); + const makeRowsBody$1 = execute(makeRowsBody, always, noop, structureModified); + const makeRowsFooter$1 = execute(makeRowsFooter, always, noop, structureModified); + const getTableCellType = getCellsType; + const getTableColType = getColumnsType; + const getTableRowType = getRowsType; + return { + deleteRow, + deleteColumn, + insertRowsBefore: insertRowsBefore$1, + insertRowsAfter: insertRowsAfter$1, + insertColumnsBefore: insertColumnsBefore$1, + insertColumnsAfter: insertColumnsAfter$1, + mergeCells: mergeCells$1, + unmergeCells: unmergeCells$1, + pasteColsBefore: pasteColsBefore$1, + pasteColsAfter: pasteColsAfter$1, + pasteRowsBefore: pasteRowsBefore$1, + pasteRowsAfter: pasteRowsAfter$1, + pasteCells: pasteCells$1, + makeCellsHeader: makeCellsHeader$1, + unmakeCellsHeader: unmakeCellsHeader$1, + makeColumnsHeader: makeColumnsHeader$1, + unmakeColumnsHeader: unmakeColumnsHeader$1, + makeRowsHeader: makeRowsHeader$1, + makeRowsBody: makeRowsBody$1, + makeRowsFooter: makeRowsFooter$1, + getTableRowType, + getTableCellType, + getTableColType + }; + }; + + const placeCaretInCell = (editor, cell) => { + editor.selection.select(cell.dom, true); + editor.selection.collapse(true); + }; + const selectFirstCellInTable = (editor, tableElm) => { + descendant(tableElm, 'td,th').each(curry(placeCaretInCell, editor)); + }; + const fireEvents = (editor, table) => { + each$2(descendants(table, 'tr'), (row) => { + fireNewRow(editor, row.dom); + each$2(descendants(row, 'th,td'), (cell) => { + fireNewCell(editor, cell.dom); + }); + }); + }; + const isPercentage = (width) => isString(width) && width.indexOf('%') !== -1; + const insert = (editor, columns, rows, colHeaders, rowHeaders) => { + const defaultStyles = getTableDefaultStyles(editor); + const options = { + styles: defaultStyles, + attributes: getTableDefaultAttributes(editor), + colGroups: tableUseColumnGroup(editor) + }; + // Don't create an undo level when inserting the base table HTML otherwise we can end up with 2 undo levels + editor.undoManager.ignore(() => { + const table = render(rows, columns, rowHeaders, colHeaders, getTableHeaderType(editor), options); + set$2(table, 'data-mce-id', '__mce'); + const html = getOuter$2(table); + editor.insertContent(html); + editor.addVisual(); + }); + // Enforce the sizing mode of the table + return descendant(getBody(editor), 'table[data-mce-id="__mce"]').map((table) => { + if (isTablePixelsForced(editor)) { + convertToPixelSizeWidth(table); + } + else if (isTableResponsiveForced(editor)) { + convertToNoneSizeWidth(table); + } + else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) { + convertToPercentSizeWidth(table); + } + removeDataStyle(table); + remove$6(table, 'data-mce-id'); + fireEvents(editor, table); + selectFirstCellInTable(editor, table); + return table.dom; + }).getOrNull(); + }; + const insertTable = (editor, rows, columns, options = {}) => { + const checkInput = (val) => isNumber(val) && val > 0; + if (checkInput(rows) && checkInput(columns)) { + const headerRows = options.headerRows || 0; + const headerColumns = options.headerColumns || 0; + return insert(editor, columns, rows, headerColumns, headerRows); + } + else { + // eslint-disable-next-line no-console + console.error('Invalid values for mceInsertTable - rows and columns values are required to insert a table.'); + return null; + } + }; + + var global = tinymce.util.Tools.resolve('tinymce.FakeClipboard'); + + /* + NOTE: This file is duplicated in the following locations: + - plugins/table/api/Clipboard.ts + Make sure that if making changes to this file, the other files are updated as well + */ + const tableTypeBase = 'x-tinymce/dom-table-'; + const tableTypeRow = tableTypeBase + 'rows'; + const tableTypeColumn = tableTypeBase + 'columns'; + const setData = (items) => { + const fakeClipboardItem = global.FakeClipboardItem(items); + global.write([fakeClipboardItem]); + }; + const getData = (type) => { + const items = global.read() ?? []; + return findMap(items, (item) => Optional.from(item.getType(type))); + }; + const clearData = (type) => { + if (getData(type).isSome()) { + global.clear(); + } + }; + const setRows = (rowsOpt) => { + rowsOpt.fold(clearRows, (rows) => setData({ [tableTypeRow]: rows })); + }; + const getRows = () => getData(tableTypeRow); + const clearRows = () => clearData(tableTypeRow); + const setColumns = (columnsOpt) => { + columnsOpt.fold(clearColumns, (columns) => setData({ [tableTypeColumn]: columns })); + }; + const getColumns = () => getData(tableTypeColumn); + const clearColumns = () => clearData(tableTypeColumn); + + const getSelectionStartCellOrCaption = (editor) => getSelectionCellOrCaption(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1); + const getSelectionStartCell = (editor) => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)).filter(isInEditableContext$1); + const registerCommands = (editor, actions) => { + const isRoot = getIsRoot(editor); + const eraseTable = () => getSelectionStartCellOrCaption(editor).each((cellOrCaption) => { + table(cellOrCaption, isRoot).filter(not(isRoot)).each((table) => { + const cursor = SugarElement.fromText(''); + after$4(table, cursor); + remove$5(table); + if (editor.dom.isEmpty(editor.getBody())) { + editor.setContent(''); + editor.selection.setCursorLocation(); + } + else { + const rng = editor.dom.createRng(); + rng.setStart(cursor.dom, 0); + rng.setEnd(cursor.dom, 0); + editor.selection.setRng(rng); + editor.nodeChanged(); + } + }); + }); + const setSizingMode = (sizing) => getSelectionStartCellOrCaption(editor).each((cellOrCaption) => { + // Do nothing if tables are forced to use a specific sizing mode + const isForcedSizing = isTableResponsiveForced(editor) || isTablePixelsForced(editor) || isTablePercentagesForced(editor); + if (!isForcedSizing) { + table(cellOrCaption, isRoot).each((table) => { + if (sizing === 'relative' && !isPercentSizing(table)) { + convertToPercentSizeWidth(table); + } + else if (sizing === 'fixed' && !isPixelSizing(table)) { + convertToPixelSizeWidth(table); + } + else if (sizing === 'responsive' && !isNoneSizing(table)) { + convertToNoneSizeWidth(table); + } + removeDataStyle(table); + fireTableModified(editor, table.dom, structureModified); + }); + } + }); + const getTableFromCell = (cell) => table(cell, isRoot); + const performActionOnSelection = (action) => getSelectionStartCell(editor).bind((cell) => getTableFromCell(cell).map((table) => action(table, cell))); + const toggleTableClass = (_ui, clazz) => { + performActionOnSelection((table) => { + editor.formatter.toggle('tableclass', { value: clazz }, table.dom); + fireTableModified(editor, table.dom, styleModified); + }); + }; + const toggleTableCellClass = (_ui, clazz) => { + performActionOnSelection((table) => { + const selectedCells = getCellsFromSelection(editor); + const allHaveClass = forall(selectedCells, (cell) => editor.formatter.match('tablecellclass', { value: clazz }, cell.dom)); + const formatterAction = allHaveClass ? editor.formatter.remove : editor.formatter.apply; + each$2(selectedCells, (cell) => formatterAction('tablecellclass', { value: clazz }, cell.dom)); + fireTableModified(editor, table.dom, styleModified); + }); + }; + const toggleCaption = () => { + getSelectionStartCellOrCaption(editor).each((cellOrCaption) => { + table(cellOrCaption, isRoot).each((table) => { + child(table, 'caption').fold(() => { + const caption = SugarElement.fromTag('caption'); + append$1(caption, SugarElement.fromText('Caption')); + appendAt(table, caption, 0); + editor.selection.setCursorLocation(caption.dom, 0); + }, (caption) => { + if (isTag('caption')(cellOrCaption)) { + one('td', table).each((td) => editor.selection.setCursorLocation(td.dom, 0)); + } + remove$5(caption); + }); + fireTableModified(editor, table.dom, structureModified); + }); + }); + }; + const postExecute = (_data) => { + editor.focus(); + }; + const actOnSelection = (execute, noEvents = false) => performActionOnSelection((table, startCell) => { + const targets = forMenu(getCellsFromSelection(editor), table, startCell); + execute(table, targets, noEvents).each(postExecute); + }); + const copyRowSelection = () => performActionOnSelection((table, startCell) => { + const targets = forMenu(getCellsFromSelection(editor), table, startCell); + const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), Optional.none()); + return copyRows(table, targets, generators); + }); + const copyColSelection = () => performActionOnSelection((table, startCell) => { + const targets = forMenu(getCellsFromSelection(editor), table, startCell); + return copyCols(table, targets); + }); + const pasteOnSelection = (execute, getRows) => + // If we have FakeClipboard rows to paste + getRows().each((rows) => { + const clonedRows = map$1(rows, (row) => deep(row)); + performActionOnSelection((table, startCell) => { + const generators = paste$1(SugarElement.fromDom(editor.getDoc())); + const targets = pasteRows(getCellsFromSelection(editor), startCell, clonedRows, generators); + execute(table, targets).each(postExecute); + }); + }); + const actOnType = (getAction) => (_ui, args) => get$c(args, 'type').each((type) => { + actOnSelection(getAction(type), args.no_events); + }); + // Register action commands + each$1({ + mceTableSplitCells: () => actOnSelection(actions.unmergeCells), + mceTableMergeCells: () => actOnSelection(actions.mergeCells), + mceTableInsertRowBefore: () => actOnSelection(actions.insertRowsBefore), + mceTableInsertRowAfter: () => actOnSelection(actions.insertRowsAfter), + mceTableInsertColBefore: () => actOnSelection(actions.insertColumnsBefore), + mceTableInsertColAfter: () => actOnSelection(actions.insertColumnsAfter), + mceTableDeleteCol: () => actOnSelection(actions.deleteColumn), + mceTableDeleteRow: () => actOnSelection(actions.deleteRow), + mceTableCutCol: () => copyColSelection().each((selection) => { + setColumns(selection); + actOnSelection(actions.deleteColumn); + }), + mceTableCutRow: () => copyRowSelection().each((selection) => { + setRows(selection); + actOnSelection(actions.deleteRow); + }), + mceTableCopyCol: () => copyColSelection().each((selection) => setColumns(selection)), + mceTableCopyRow: () => copyRowSelection().each((selection) => setRows(selection)), + mceTablePasteColBefore: () => pasteOnSelection(actions.pasteColsBefore, getColumns), + mceTablePasteColAfter: () => pasteOnSelection(actions.pasteColsAfter, getColumns), + mceTablePasteRowBefore: () => pasteOnSelection(actions.pasteRowsBefore, getRows), + mceTablePasteRowAfter: () => pasteOnSelection(actions.pasteRowsAfter, getRows), + mceTableDelete: eraseTable, + mceTableCellToggleClass: toggleTableCellClass, + mceTableToggleClass: toggleTableClass, + mceTableToggleCaption: toggleCaption, + mceTableSizingMode: (_ui, sizing) => setSizingMode(sizing), + mceTableCellType: actOnType((type) => type === 'th' ? actions.makeCellsHeader : actions.unmakeCellsHeader), + mceTableColType: actOnType((type) => type === 'th' ? actions.makeColumnsHeader : actions.unmakeColumnsHeader), + mceTableRowType: actOnType((type) => { + switch (type) { + case 'header': + return actions.makeRowsHeader; + case 'footer': + return actions.makeRowsFooter; + default: + return actions.makeRowsBody; + } + }) + }, (func, name) => editor.addCommand(name, func)); + editor.addCommand('mceInsertTable', (_ui, args) => { + insertTable(editor, args.rows, args.columns, args.options); + }); + // Apply cell style using command (background color, border color, border style and border width) + // tinyMCE.activeEditor.execCommand('mceTableApplyCellStyle', false, { backgroundColor: 'red', borderColor: 'blue' }) + // Remove cell style using command (an empty string indicates to remove the style) + // tinyMCE.activeEditor.execCommand('mceTableApplyCellStyle', false, { backgroundColor: '' }) + editor.addCommand('mceTableApplyCellStyle', (_ui, args) => { + const getFormatName = (style) => 'tablecell' + style.toLowerCase().replace('-', ''); + if (!isObject(args)) { + return; + } + const cells = filter$2(getCellsFromSelection(editor), isInEditableContext$1); + if (cells.length === 0) { + return; + } + const validArgs = filter$1(args, (value, style) => editor.formatter.has(getFormatName(style)) && isString(value)); + if (isEmpty(validArgs)) { + return; + } + each$1(validArgs, (value, style) => { + const formatName = getFormatName(style); + each$2(cells, (cell) => { + if (value === '') { + editor.formatter.remove(formatName, { value: null }, cell.dom, true); + } + else { + editor.formatter.apply(formatName, { value }, cell.dom); + } + }); + }); + /* + Use the first cell in the selection to get the table and fire the TableModified event. + If this command is applied over multiple tables, only the first table selected + will have a TableModified event thrown. + */ + getTableFromCell(cells[0]).each((table) => fireTableModified(editor, table.dom, styleModified)); + }); + }; + + const registerQueryCommands = (editor, actions) => { + const isRoot = getIsRoot(editor); + const lookupOnSelection = (action) => getSelectionCell(getSelectionStart(editor)).bind((cell) => table(cell, isRoot).map((table) => { + const targets = forMenu(getCellsFromSelection(editor), table, cell); + return action(table, targets); + })).getOr(''); + each$1({ + mceTableRowType: () => lookupOnSelection(actions.getTableRowType), + mceTableCellType: () => lookupOnSelection(actions.getTableCellType), + mceTableColType: () => lookupOnSelection(actions.getTableColType) + }, (func, name) => editor.addQueryValueHandler(name, func)); + }; + + const hasInternalTarget = (e) => !has(SugarElement.fromDom(e.target), 'ephox-snooker-resizer-bar'); + const TableCellSelectionHandler = (editor, resizeHandler) => { + const cellSelection = Selections(() => SugarElement.fromDom(editor.getBody()), () => getSelectionCell(getSelectionStart(editor), getIsRoot(editor)), ephemera.selectedSelector); + const onSelection = (cells, start, finish) => { + const tableOpt = table(start); + tableOpt.each((table) => { + const cellsDom = map$1(cells, (cell) => cell.dom); + const cloneFormats = getTableCloneElements(editor); + const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats); + const selectedCells = getCellsFromSelection(editor); + const otherCellsDom = getOtherCells(table, { selection: selectedCells }, generators) + .map((otherCells) => map(otherCells, (cellArr) => map$1(cellArr, (cell) => cell.dom))) + .getOrUndefined(); + fireTableSelectionChange(editor, cellsDom, start.dom, finish.dom, otherCellsDom); + }); + }; + const onClear = () => fireTableSelectionClear(editor); + const annotations = SelectionAnnotation.byAttr(ephemera, onSelection, onClear); + editor.on('init', (_e) => { + const win = editor.getWin(); + const body = getBody(editor); + const isRoot = getIsRoot(editor); + // When the selection changes through either the mouse or keyboard, and the selection is no longer within the table. + // Remove the selection. + const syncSelection = () => { + const sel = editor.selection; + const start = SugarElement.fromDom(sel.getStart()); + const end = SugarElement.fromDom(sel.getEnd()); + const shared = sharedOne(table, [start, end]); + shared.fold(() => annotations.clear(body), noop); + }; + const mouseHandlers = mouse(win, body, isRoot, annotations); + const keyHandlers = keyboard(win, body, isRoot, annotations); + const external$1 = external(win, body, isRoot, annotations); + const hasShiftKey = (event) => event.raw.shiftKey === true; + editor.on('TableSelectorChange', (e) => external$1(e.start, e.finish)); + const handleResponse = (event, response) => { + // Only handle shift key non shiftkey cell navigation is handled by core + if (!hasShiftKey(event)) { + return; + } + if (response.kill) { + event.kill(); + } + response.selection.each((ns) => { + const relative = SimSelection.relative(ns.start, ns.finish); + const rng = asLtrRange(win, relative); + editor.selection.setRng(rng); + }); + }; + const keyup = (event) => { + const wrappedEvent = fromRawEvent(event); + // Note, this is an optimisation. + if (wrappedEvent.raw.shiftKey && isNavigation(wrappedEvent.raw.which)) { + const rng = editor.selection.getRng(); + const start = SugarElement.fromDom(rng.startContainer); + const end = SugarElement.fromDom(rng.endContainer); + keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each((response) => { + handleResponse(wrappedEvent, response); + }); + } + }; + const keydown = (event) => { + const wrappedEvent = fromRawEvent(event); + resizeHandler.hide(); + const rng = editor.selection.getRng(); + const start = SugarElement.fromDom(rng.startContainer); + const end = SugarElement.fromDom(rng.endContainer); + const direction = onDirection(ltr, rtl)(SugarElement.fromDom(editor.selection.getStart())); + keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each((response) => { + handleResponse(wrappedEvent, response); + }); + resizeHandler.show(); + }; + const isLeftMouse = (raw) => raw.button === 0; + // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons + const isLeftButtonPressed = (raw) => { + // Only added by Chrome/Firefox in June 2015. + // This is only to fix a 1px bug (TBIO-2836) so return true if we're on an older browser + if (raw.buttons === undefined) { + return true; + } + // use bitwise & for optimal comparison + // eslint-disable-next-line no-bitwise + return (raw.buttons & 1) !== 0; + }; + const dragStart = (_e) => { + mouseHandlers.clearstate(); + }; + const mouseDown = (e) => { + if (isLeftMouse(e) && hasInternalTarget(e)) { + mouseHandlers.mousedown(fromRawEvent(e)); + } + }; + const mouseOver = (e) => { + if (isLeftButtonPressed(e) && hasInternalTarget(e)) { + mouseHandlers.mouseover(fromRawEvent(e)); + } + }; + const mouseUp = (e) => { + if (isLeftMouse(e) && hasInternalTarget(e)) { + mouseHandlers.mouseup(fromRawEvent(e)); + } + }; + const getDoubleTap = () => { + const lastTarget = Cell(SugarElement.fromDom(body)); + const lastTimeStamp = Cell(0); + const touchEnd = (t) => { + const target = SugarElement.fromDom(t.target); + if (isTag('td')(target) || isTag('th')(target)) { + const lT = lastTarget.get(); + const lTS = lastTimeStamp.get(); + if (eq$1(lT, target) && (t.timeStamp - lTS) < 300) { + t.preventDefault(); + external$1(target, target); + } + } + lastTarget.set(target); + lastTimeStamp.set(t.timeStamp); + }; + return { + touchEnd + }; + }; + const doubleTap = getDoubleTap(); + editor.on('dragstart', dragStart); + editor.on('mousedown', mouseDown); + editor.on('mouseover', mouseOver); + editor.on('mouseup', mouseUp); + editor.on('touchend', doubleTap.touchEnd); + editor.on('keyup', keyup); + editor.on('keydown', keydown); + editor.on('NodeChange', syncSelection); + }); + editor.on('PreInit', () => { + editor.serializer.addTempAttr(ephemera.firstSelected); + editor.serializer.addTempAttr(ephemera.lastSelected); + }); + const clearSelectedCells = (container) => annotations.clear(SugarElement.fromDom(container)); + const getSelectedCells = () => fold(cellSelection.get(), + // No fake selected cells + constant([]), + // This path is taken whenever there is fake cell selection even for just a single selected cell + (cells) => { + return map$1(cells, (cell) => cell.dom); + }, + // For this path, the start of the selection whether collapsed or ranged is within a table cell + (cell) => [cell.dom]); + return { + getSelectedCells, + clearSelectedCells + }; + }; + + const get = (editor, isResizable) => { + const editorBody = SugarElement.fromDom(editor.getBody()); + return ResizeWire.body(editorBody, isResizable); + }; + + const isTable = (node) => isNonNullable(node) && node.nodeName === 'TABLE'; + const barResizerPrefix = 'bar-'; + const isResizable = (elm) => get$b(elm, 'data-mce-resize') !== 'false'; + const syncTableCellPixels = (table) => { + const warehouse = Warehouse.fromTable(table); + if (!Warehouse.hasColumns(warehouse)) { + // Ensure the specified width matches the actual cell width + each$2(cells$1(table), (cell) => { + const computedWidth = get$9(cell, 'width'); + set$1(cell, 'width', computedWidth); + remove$6(cell, 'width'); + }); + } + }; + const isCornerResize = (origin) => startsWith(origin, 'corner-'); + const getCornerLocation = (origin) => removeLeading(origin, 'corner-'); + const TableResizeHandler = (editor) => { + const selectionRng = value(); + const tableResize = value(); + const resizeWire = value(); + let startW; + let startRawW; + let startH; + let startRawH; + const lazySizing = (table) => get$1(editor, table); + const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable(); + const getNumColumns = (table) => getGridSize(table).columns; + const getNumRows = (table) => getGridSize(table).rows; + const afterCornerResize = (table, origin, width, height) => { + // Origin will tell us which handle was clicked, eg corner-se or corner-nw + // so check to see if it ends with `e` (eg east edge) + const location = getCornerLocation(origin); + const isRightEdgeResize = endsWith(location, 'e'); + const isNorthEdgeResize = startsWith(location, 'n'); + // Responsive tables don't have a width so we need to convert it to a relative/percent + // table instead, as that's closer to responsive sizing than fixed sizing + if (startRawW === '') { + convertToPercentSizeWidth(table); + } + // Responsive tables don't have a height so we need to convert it to a fixed value to be able to resize the table height + if (startRawH === '') { + convertToPixelSizeHeight(table); + } + // Adjust the column sizes and update the table width to use the right sizing, if the table changed size. + // This is needed as core will always use pixels when setting the width. + if (width !== startW && startRawW !== '') { + // Restore the original size and then let snooker resize appropriately + set$1(table, 'width', startRawW); + const resizing = lazyResizingBehaviour(); + const tableSize = lazySizing(table); + // For preserve table we want to always resize the entire table. So pretend the last column is being resized + const col = isPreserveTableColumnResizing(editor) || isRightEdgeResize ? getNumColumns(table) - 1 : 0; + adjustWidth(table, width - startW, col, resizing, tableSize); + // Handle the edge case where someone might fire this event without resizing. + // If so then we need to ensure the table is still using percent + } + else if (isPercentage$1(startRawW)) { + const percentW = parseFloat(startRawW.replace('%', '')); + const targetPercentW = width * percentW / startW; + set$1(table, 'width', targetPercentW + '%'); + } + // Sync the cell sizes, as the core resizing logic doesn't update them, but snooker does + if (isPixel(startRawW)) { + syncTableCellPixels(table); + } + // NOTE: This will only change the height of the first or last tr + if (height !== startH && startRawH !== '') { + // Restore the original size and then let snooker resize appropriately + set$1(table, 'height', startRawH); + const idx = isNorthEdgeResize ? 0 : getNumRows(table) - 1; + adjustHeight(table, height - startH, idx); + } + }; + const destroy = () => { + tableResize.on((sz) => { + sz.destroy(); + }); + }; + editor.on('init', () => { + const rawWire = get(editor, isResizable); + resizeWire.set(rawWire); + if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) { + const resizing = lazyResizingBehaviour(); + const sz = TableResize.create(rawWire, resizing, lazySizing); + if (!editor.mode.isReadOnly()) { + sz.on(); + } + sz.events.startDrag.bind((_event) => { + selectionRng.set(editor.selection.getRng()); + }); + sz.events.beforeResize.bind((event) => { + const rawTable = event.table.dom; + fireObjectResizeStart(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type); + }); + sz.events.afterResize.bind((event) => { + const table = event.table; + const rawTable = table.dom; + removeDataStyle(table); + selectionRng.on((rng) => { + editor.selection.setRng(rng); + editor.focus(); + }); + fireObjectResized(editor, rawTable, getPixelWidth(rawTable), getPixelHeight(rawTable), barResizerPrefix + event.type); + editor.undoManager.add(); + }); + tableResize.set(sz); + } + }); + // If we're updating the table width via the old mechanic, we need to update the constituent cells' widths/heights too. + editor.on('ObjectResizeStart', (e) => { + const targetElm = e.target; + if (isTable(targetElm) && !editor.mode.isReadOnly()) { + const table = SugarElement.fromDom(targetElm); + // Add a class based on the resizing mode + each$2(editor.dom.select('.mce-clonedresizable'), (clone) => { + editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns'); + }); + if (!isPixelSizing(table) && isTablePixelsForced(editor)) { + convertToPixelSizeWidth(table); + } + else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) { + convertToPercentSizeWidth(table); + } + // TINY-6601: If resizing using a bar, then snooker will base the resizing on the initial size. So + // when using a responsive table we need to ensure we convert to a relative table before resizing + if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) { + convertToPercentSizeWidth(table); + } + startW = e.width; + startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr(''); + startH = e.height; + startRawH = getRawHeight(editor, targetElm).getOr(''); + } + }); + editor.on('ObjectResized', (e) => { + const targetElm = e.target; + if (isTable(targetElm)) { + const table = SugarElement.fromDom(targetElm); + // Resize based on the snooker logic to adjust the individual col/rows if resized from a corner + const origin = e.origin; + if (isCornerResize(origin)) { + afterCornerResize(table, origin, e.width, e.height); + } + removeDataStyle(table); + fireTableModified(editor, table.dom, styleModified); + } + }); + const showResizeBars = () => { + tableResize.on((resize) => { + resize.on(); + resize.showBars(); + }); + }; + const hideResizeBars = () => { + tableResize.on((resize) => { + resize.off(); + resize.hideBars(); + }); + }; + editor.on('DisabledStateChange', (e) => { + e.state ? hideResizeBars() : showResizeBars(); + }); + editor.on('SwitchMode', () => { + editor.mode.isReadOnly() ? hideResizeBars() : showResizeBars(); + }); + editor.on('dragstart dragend', (e) => { + e.type === 'dragstart' ? hideResizeBars() : showResizeBars(); + }); + editor.on('remove', () => { + destroy(); + }); + const refresh = (table) => { + tableResize.on((resize) => resize.refreshBars(SugarElement.fromDom(table))); + }; + const hide = () => { + tableResize.on((resize) => resize.hideBars()); + }; + const show = () => { + tableResize.on((resize) => resize.showBars()); + }; + return { + refresh, + hide, + show + }; + }; + + const setupTable = (editor) => { + register(editor); + const resizeHandler = TableResizeHandler(editor); + const cellSelectionHandler = TableCellSelectionHandler(editor, resizeHandler); + const actions = TableActions(editor, resizeHandler, cellSelectionHandler); + registerCommands(editor, actions); + registerQueryCommands(editor, actions); + // TODO: TINY-8385 Maybe move to core. Although, will need RTC to have that working first + registerEvents(editor, actions); + return { + getSelectedCells: cellSelectionHandler.getSelectedCells, + clearSelectedCells: cellSelectionHandler.clearSelectedCells + }; + }; + + const DomModel = (editor) => { + const table = setupTable(editor); + return { + table + }; + }; + var Model = () => { + global$1.add('dom', DomModel); + }; + + Model(); + /** ***** + * DO NOT EXPORT ANYTHING + * + * IF YOU DO ROLLUP WILL LEAVE A GLOBAL ON THE PAGE + *******/ + +})(); diff --git a/public/tinymce/models/dom/model.min.js b/public/tinymce/models/dom/model.min.js new file mode 100644 index 0000000..edb473b --- /dev/null +++ b/public/tinymce/models/dom/model.min.js @@ -0,0 +1 @@ +!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.ModelManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||n.constructor?.name===r.name)?"string":t;var o,n,r})(t)===e,o=e=>t=>typeof t===e,n=e=>t=>e===t,r=t("string"),s=t("object"),l=t("array"),a=n(null),c=o("boolean"),i=n(void 0),m=e=>!(e=>null==e)(e),d=o("function"),u=o("number"),f=()=>{},g=e=>()=>e,h=e=>e,p=(e,t)=>e===t;function b(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const w=e=>t=>!e(t),v=e=>e(),y=g(!1),x=g(!0);class C{tag;value;static singletonNone=new C(!1);constructor(e,t){this.tag=e,this.value=t}static some(e){return new C(!0,e)}static none(){return C.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?C.some(e(this.value)):C.none()}bind(e){return this.tag?e(this.value):C.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:C.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(e??"Called getOrDie on None")}static from(e){return m(e)?C.some(e):C.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}const S=Array.prototype.slice,T=Array.prototype.indexOf,R=Array.prototype.push,D=(e,t)=>{return o=e,n=t,T.call(o,n)>-1;var o,n},O=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;o{const o=[],n=[];for(let r=0,s=e.length;r{const o=[];for(let n=0,r=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),A=(e,t,o)=>(N(e,((e,n)=>{o=t(o,e,n)})),o),L=(e,t)=>((e,t,o)=>{for(let n=0,r=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oW(E(e,t)),P=(e,t)=>{for(let o=0,n=e.length;o{const o={};for(let n=0,r=e.length;nt>=0&&tF(e,0),$=e=>F(e,e.length-1),V=(e,t)=>{for(let o=0;o{const o=q(e);for(let n=0,r=o.length;nY(e,((e,o)=>({k:o,v:t(e,o)}))),Y=(e,t)=>{const o={};return G(e,((e,n)=>{const r=t(e,n);o[r.k]=r.v})),o},J=(e,t)=>{const o=[];return G(e,((e,n)=>{o.push(t(e,n))})),o},Q=e=>J(e,h),X=(e,t)=>U.call(e,t),Z=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return N(e,((n,r)=>{const s=q(n);if(1!==s.length)throw new Error("one and only one name per case");const a=s[0],c=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(c))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==c.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+c.length+" ("+c+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[r].apply(null,o)},match:e=>{const n=q(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!P(t,(e=>D(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},ee=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},te=e=>e.slice(0).sort(),oe=(e,t)=>{const o=_(t,(t=>!D(e,t)));o.length>0&&(e=>{throw new Error("Unsupported keys for object: "+te(e).join(", "))})(o)},ne=e=>((e,t)=>((e,t,o)=>{if(0===t.length)throw new Error("You must specify at least one required field.");return((e,t)=>{if(!l(t))throw new Error("The "+e+" fields must be an array. Was: "+t+".");N(t,(t=>{if(!r(t))throw new Error("The value "+t+" in the "+e+" fields was not a string.")}))})("required",t),(e=>{const t=te(e);L(t,((e,o)=>o{throw new Error("The field: "+e+" occurs more than once in the combined fields: ["+t.join(", ")+"].")}))})(t),n=>{const r=q(n);P(t,(e=>D(r,e)))||((e,t)=>{throw new Error("All required keys ("+te(e).join(", ")+") were not specified. Specified keys were: "+te(t).join(", ")+".")})(t,r),e(t,r);const s=_(t,(e=>!o.validate(n[e],e)));return s.length>0&&((e,t)=>{throw new Error("All values need to be of type: "+t+". Keys ("+te(e).join(", ")+") were not.")})(s,o.label),n}})(e,t,{validate:d,label:"function"}))(oe,e),re=e=>{const t=t=>t(e),o=g(e),n=()=>r,r={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:x,isError:y,map:t=>le.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>C.some(e)};return r},se=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:y,isError:x,map:t,mapError:t=>le.error(t(e)),bind:t,exists:y,forall:x,getOr:h,or:h,getOrThunk:v,orThunk:v,getOrDie:(n=String(e),()=>{throw new Error(n)}),each:f,toOptional:C.none};var n;return o},le={value:re,error:se,fromOption:(e,t)=>e.fold((()=>se(t)),re)},ae="undefined"!=typeof window?window:Function("return this;")(),ce=e=>{const t=e.replace(/\./g,"-");return{resolve:e=>t+"-"+e}},ie=(e,t,o=p)=>e.exists((e=>o(e,t))),me=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te?C.some(t):C.none(),ue=(e,t)=>((e,t)=>{let o=null!=t?t:ae;for(let t=0;t{const e=(e=>{const t=ee(C.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(C.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(C.some(e))}}})(f);return{...e,on:t=>e.get().each(t)}},ge=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,he=(e,t,o=0,n)=>{const r=e.indexOf(t,o);return-1!==r&&(!!i(n)||r+t.length<=n)},pe=(e,t)=>ge(e,t,0),be=(e,t)=>ge(e,t,e.length-t.length),we=(e=>t=>t.replace(e,""))(/^\s+|\s+$/g),ve=e=>e.length>0,ye=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},xe=["tfoot","thead","tbody","colgroup"],Ce=(e,t,o)=>({element:e,rowspan:t,colspan:o}),Se=(e,t,o)=>({element:e,cells:t,section:o}),Te=(e,t,o)=>({element:e,isNew:t,isLocked:o}),Re=(e,t,o,n)=>({element:e,cells:t,section:o,isNew:n}),De=(e,t,o)=>{const n=e.cells,r=n.slice(0,t),s=n.slice(t),l=r.concat(o).concat(s);return Ee(e,l)},Oe=(e,t,o)=>De(e,t,[o]),ke=(e,t,o)=>{e.cells[t]=o},Ee=(e,t)=>Re(e.element,t,e.section,e.isNew),Ne=(e,t)=>e.cells[t],Be=(e,t)=>Ne(e,t).element,_e=e=>e.cells.length,ze=e=>{const t=B(e,(e=>"colgroup"===e.section));return{rows:t.fail,cols:t.pass}},Ae=(e,t,o)=>{const n=E(e.cells,o);return Re(t(e.element),n,e.section,!0)},Le=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},Me={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return Le(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return Le(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return Le(o)},fromDom:Le,fromPoint:(e,t,o)=>C.from(e.dom.elementFromPoint(t,o)).map(Le)},We=(e,t)=>{const o=e.document.createRange();return o.selectNode(t.dom),o},je=(e,t)=>{const o=e.document.createRange();return Pe(o,t),o},Pe=(e,t)=>e.selectNodeContents(t.dom),Ie=(e,t,o)=>{const n=e.document.createRange();var r;return r=n,t.fold((e=>{r.setStartBefore(e.dom)}),((e,t)=>{r.setStart(e.dom,t)}),(e=>{r.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},Fe=(e,t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},He=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),$e=Z([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),Ve=(e,t,o)=>t(Me.fromDom(o.startContainer),o.startOffset,Me.fromDom(o.endContainer),o.endOffset),qe=(e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:g(e),rtl:C.none}),relative:(t,o)=>({ltr:ye((()=>Ie(e,t,o))),rtl:ye((()=>C.some(Ie(e,o,t))))}),exact:(t,o,n,r)=>({ltr:ye((()=>Fe(e,t,o,n,r))),rtl:ye((()=>C.some(Fe(e,n,r,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>$e.rtl(Me.fromDom(e.endContainer),e.endOffset,Me.fromDom(e.startContainer),e.startOffset))).getOrThunk((()=>Ve(0,$e.ltr,o))):Ve(0,$e.ltr,o)})(0,o)},Ue=(e,t)=>qe(e,t).match({ltr:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(t.dom,o),s.setEnd(n.dom,r),s},rtl:(t,o,n,r)=>{const s=e.document.createRange();return s.setStart(n.dom,r),s.setEnd(t.dom,o),s}});$e.ltr,$e.rtl;const Ge=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},Ke=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,Ye=(e,t)=>{const o=void 0===t?document:t.dom;return Ke(o)?C.none():C.from(o.querySelector(e)).map(Me.fromDom)},Je=(e,t)=>e.dom===t.dom,Qe=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},Xe=Ge,Ze=()=>et(0,0),et=(e,t)=>({major:e,minor:t}),tt={nu:et,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?Ze():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return et(n(1),n(2))})(e,o)},unknown:Ze},ot=(e,t)=>{const o=String(t).toLowerCase();return L(e,(e=>e.search(o)))},nt=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,rt=e=>t=>he(t,e),st=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>he(e,"edge/")&&he(e,"chrome")&&he(e,"safari")&&he(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,nt],search:e=>he(e,"chrome")&&!he(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>he(e,"msie")||he(e,"trident")},{name:"Opera",versionRegexes:[nt,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:rt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:rt("firefox")},{name:"Safari",versionRegexes:[nt,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(he(e,"safari")||he(e,"mobile/"))&&he(e,"applewebkit")}],lt=[{name:"Windows",search:rt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>he(e,"iphone")||he(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:rt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:rt("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:rt("linux"),versionRegexes:[]},{name:"Solaris",search:rt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:rt("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:rt("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],at={browsers:g(st),oses:g(lt)},ct="Edge",it="Chromium",mt="Opera",dt="Firefox",ut="Safari",ft=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(ct),isChromium:n(it),isIE:n("IE"),isOpera:n(mt),isFirefox:n(dt),isSafari:n(ut)}},gt=()=>ft({current:void 0,version:tt.unknown()}),ht=ft,pt=(g(ct),g(it),g("IE"),g(mt),g(dt),g(ut),"Windows"),bt="Android",wt="Linux",vt="macOS",yt="Solaris",xt="FreeBSD",Ct="ChromeOS",St=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(pt),isiOS:n("iOS"),isAndroid:n(bt),isMacOS:n(vt),isLinux:n(wt),isSolaris:n(yt),isFreeBSD:n(xt),isChromeOS:n(Ct)}},Tt=()=>St({current:void 0,version:tt.unknown()}),Rt=St,Dt=(g(pt),g("iOS"),g(bt),g(wt),g(vt),g(yt),g(xt),g(Ct),e=>window.matchMedia(e).matches);let Ot=ye((()=>((e,t,o)=>{const n=at.browsers(),r=at.oses(),s=t.bind((e=>((e,t)=>V(t.brands,(t=>{const o=t.brand.toLowerCase();return L(e,(e=>o===e.brand?.toLowerCase())).map((e=>({current:e.name,version:tt.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>ot(e,t).map((e=>{const o=tt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(gt,ht),l=((e,t)=>ot(e,t).map((e=>{const o=tt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(r,e).fold(Tt,Rt),a=((e,t,o,n)=>{const r=e.isiOS()&&!0===/ipad/i.test(o),s=e.isiOS()&&!r,l=e.isiOS()||e.isAndroid(),a=l||n("(pointer:coarse)"),c=r||!s&&l&&n("(min-device-width:768px)"),i=s||l&&!c,m=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),d=!i&&!c&&!m;return{isiPad:g(r),isiPhone:g(s),isTablet:g(c),isPhone:g(i),isTouch:g(a),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(m),isDesktop:g(d)}})(l,s,e,o);return{browser:s,os:l,deviceType:a}})(window.navigator.userAgent,C.from(window.navigator.userAgentData),Dt)));const kt=()=>Ot(),Et=Object.getPrototypeOf,Nt=e=>{const t=ue("ownerDocument.defaultView",e);return s(e)&&((e=>((e,t)=>{const o=((e,t)=>ue(e,t))(e,t);if(null==o)throw new Error(e+" not available on this browser");return o})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(Et(e).constructor.name))},Bt=e=>e.dom.nodeName.toLowerCase(),_t=e=>e.dom.nodeType,zt=e=>t=>_t(t)===e,At=e=>8===_t(e)||"#comment"===Bt(e),Lt=e=>Mt(e)&&Nt(e.dom),Mt=zt(1),Wt=zt(3),jt=zt(9),Pt=zt(11),It=e=>t=>Mt(t)&&Bt(t)===e,Ft=e=>Me.fromDom(e.dom.ownerDocument),Ht=e=>jt(e)?e:Ft(e),$t=e=>C.from(e.dom.parentNode).map(Me.fromDom),Vt=e=>C.from(e.dom.parentElement).map(Me.fromDom),qt=(e,t)=>{const o=d(t)?t:y;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=Me.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r},Ut=e=>C.from(e.dom.previousSibling).map(Me.fromDom),Gt=e=>C.from(e.dom.nextSibling).map(Me.fromDom),Kt=e=>E(e.dom.childNodes,Me.fromDom),Yt=(e,t)=>{const o=e.dom.childNodes;return C.from(o[t]).map(Me.fromDom)},Jt=e=>Pt(e)&&m(e.dom.host),Qt=e=>Me.fromDom(e.dom.getRootNode()),Xt=e=>Me.fromDom(e.dom.host),Zt=e=>{const t=Me.fromDom((e=>{if(m(e.target)){const t=Me.fromDom(e.target);if(Mt(t)&&m(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return H(t)}}return C.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),r=(s=n,l=o,(...e)=>s(l.apply(null,e)));var s,l;return((e,t,o,n,r,s,l)=>({target:e,x:t,y:o,stop:n,prevent:r,kill:s,raw:l}))(t,e.clientX,e.clientY,o,n,r,e)},eo=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},to=x,oo=(e,t,o)=>((e,t,o,n)=>((e,t,o,n,r)=>{const s=((e,t)=>o=>{e(o)&&t(Zt(o))})(o,n);return e.dom.addEventListener(t,s,r),{unbind:b(eo,e,t,s,r)}})(e,t,o,n,!1))(e,t,to,o),no=Zt,ro=(e,t)=>{$t(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},so=(e,t)=>{Gt(e).fold((()=>{$t(e).each((e=>{ao(e,t)}))}),(e=>{ro(e,t)}))},lo=(e,t)=>{const o=(e=>Yt(e,0))(e);o.fold((()=>{ao(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},ao=(e,t)=>{e.dom.appendChild(t.dom)},co=(e,t)=>{ro(e,t),ao(t,e)},io=(e,t)=>{N(t,((o,n)=>{const r=0===n?e:t[n-1];so(r,o)}))},mo=(e,t)=>{N(t,(t=>{ao(e,t)}))},uo=(e,t,o)=>{if(!(r(o)||c(o)||u(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},fo=(e,t,o)=>{uo(e.dom,t,o)},go=(e,t)=>{const o=e.dom;G(t,((e,t)=>{uo(o,t,e)}))},ho=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},po=(e,t)=>C.from(ho(e,t)),bo=(e,t)=>{e.dom.removeAttribute(t)},wo=e=>A(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),vo=e=>{e.dom.textContent="",N(Kt(e),(e=>{yo(e)}))},yo=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},xo=e=>{const t=Kt(e);t.length>0&&io(e,t),yo(e)},Co=(e,t)=>Me.fromDom(e.dom.cloneNode(t)),So=e=>Co(e,!1),To=e=>Co(e,!0),Ro=(e,t)=>{const o=Me.fromTag(t),n=wo(e);return go(o,n),o},Do=e=>void 0!==e.style&&d(e.style.getPropertyValue),Oo=e=>{const t=Wt(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=Qt(e);return Jt(t)?C.some(t):C.none()})(Me.fromDom(t)).fold((()=>o.body.contains(t)),(n=Oo,r=Xt,e=>n(r(e))));var n,r},ko=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);Do(e)&&e.style.setProperty(t,o)},Eo=(e,t,o)=>{const n=e.dom;ko(n,t,o)},No=(e,t)=>{const o=e.dom;G(t,((e,t)=>{ko(o,t,e)}))},Bo=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||Oo(e)?n:_o(o,t)},_o=(e,t)=>Do(e)?e.style.getPropertyValue(t):"",zo=(e,t)=>{const o=e.dom,n=_o(o,t);return C.from(n).filter((e=>e.length>0))},Ao=(e,t)=>{((e,t)=>{Do(e)&&e.style.removeProperty(t)})(e.dom,t),ie(po(e,"style").map(we),"")&&bo(e,"style")},Lo=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=Bo(o,e);return parseFloat(t)||0}return n},n=(e,t)=>A(t,((t,o)=>{const n=Bo(e,o),r=void 0===n?0:parseInt(n,10);return isNaN(r)?t:t+r}),0);return{set:(t,o)=>{if(!u(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;Do(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const r=n(e,o);return t>r?t-r:0}}},Mo=(e,t,o)=>((e,t)=>(e=>{const t=parseFloat(e);return isNaN(t)?C.none():C.some(t)})(e).getOr(t))(Bo(e,t),o),Wo=Lo("height",(e=>{const t=e.dom;return Oo(e)?t.getBoundingClientRect().height:t.offsetHeight})),jo=e=>Wo.get(e),Po=e=>Wo.getOuter(e),Io=Lo("width",(e=>{const t=e.dom;return Oo(e)?t.getBoundingClientRect().width:t.offsetWidth})),Fo=e=>Io.get(e),Ho=e=>Io.getOuter(e),$o=e=>((e,t)=>{const o=e.dom,n=o.getBoundingClientRect().width||o.offsetWidth;return"border-box"===t?n:((e,t,o,n)=>t-Mo(e,`padding-${o}`,0)-Mo(e,`padding-${n}`,0)-Mo(e,`border-${o}-width`,0)-Mo(e,`border-${n}-width`,0))(e,n,"left","right")})(e,"content-box"),Vo=(e,t)=>({left:e,top:t,translate:(o,n)=>Vo(e+o,t+n)}),qo=Vo,Uo=(e,t)=>void 0!==e?e:void 0!==t?t:0,Go=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,r=t.documentElement;if(o===e.dom)return qo(o.offsetLeft,o.offsetTop);const s=Uo(n?.pageYOffset,r.scrollTop),l=Uo(n?.pageXOffset,r.scrollLeft),a=Uo(r.clientTop,o.clientTop),c=Uo(r.clientLeft,o.clientLeft);return Ko(e).translate(l-c,s-a)},Ko=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?qo(o.offsetLeft,o.offsetTop):Oo(e)?(e=>{const t=e.getBoundingClientRect();return qo(t.left,t.top)})(t):qo(0,0)},Yo=(e=>{const t=t=>e(t)?C.from(t.dom.nodeValue):C.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(Wt),Jo=e=>Yo.get(e),Qo=e=>Yo.getOption(e),Xo=(e,t)=>Yo.set(e,t),Zo=(e,t)=>o=>"rtl"===en(o)?t:e,en=e=>"rtl"===Bo(e,"direction")?"rtl":"ltr";var tn=(e,t,o,n,r)=>e(o,n)?C.some(o):d(r)&&r(o)?C.none():t(o,n,r);const on=(e,t,o)=>{let n=e.dom;const r=d(o)?o:y;for(;n.parentNode;){n=n.parentNode;const e=Me.fromDom(n);if(t(e))return C.some(e);if(r(e))break}return C.none()},nn=(e,t,o)=>tn(((e,t)=>t(e)),on,e,t,o),rn=(e,t,o)=>on(e,(e=>Ge(e,t)),o),sn=(e,t)=>(e=>L(e.dom.childNodes,(e=>{return o=Me.fromDom(e),Ge(o,t);var o})).map(Me.fromDom))(e),ln=(e,t)=>Ye(t,e),an=(e,t,o)=>tn(((e,t)=>Ge(e,t)),rn,e,t,o),cn=e=>void 0!==e.dom.classList,mn=(e,t)=>((e,t,o)=>{const n=((e,t)=>{const o=ho(e,t);return void 0===o||""===o?[]:o.split(" ")})(e,t).concat([o]);return fo(e,t,n.join(" ")),!0})(e,"class",t),dn=(e,t)=>{cn(e)?e.dom.classList.add(t):mn(e,t)},un=(e,t)=>cn(e)&&e.dom.classList.contains(t),fn=e=>an(e,"[contenteditable]"),gn=(e,t=!1)=>Oo(e)?e.dom.isContentEditable:fn(e).fold(g(t),(e=>"true"===hn(e))),hn=e=>e.dom.contentEditable,pn=(e,t)=>{let o=[];return N(Kt(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(pn(e,t))})),o},bn=(e,t,o)=>((e,o,n)=>_(qt(e,n),(e=>Ge(e,t))))(e,0,o),wn=(e,t)=>(e=>_(Kt(e),(e=>Ge(e,t))))(e),vn=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return Ke(o)?[]:E(o.querySelectorAll(e),Me.fromDom)})(t,e),yn=e=>"img"===Bt(e)?1:Qo(e).fold((()=>Kt(e).length),(e=>e.length)),xn=["img","br"],Cn=e=>Qo(e).filter((e=>0!==e.trim().length||e.indexOf("\xa0")>-1)).isSome()||D(xn,Bt(e))||(e=>Lt(e)&&"false"===ho(e,"contenteditable"))(e),Sn=e=>((e,t)=>{const o=e=>{for(let n=0;nRn(e,Cn),Rn=(e,t)=>{const o=e=>{const n=Kt(e);for(let e=n.length-1;e>=0;e--){const r=n[e];if(t(r))return C.some(r);const s=o(r);if(s.isSome())return s}return C.none()};return o(e)},Dn=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),On=Z([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),kn={before:On.before,on:On.on,after:On.after,cata:(e,t,o,n)=>e.fold(t,o,n),getStart:e=>e.fold(h,h,h)},En=Z([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Nn={domRange:En.domRange,relative:En.relative,exact:En.exact,exactFromRange:e=>En.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>Me.fromDom(e.startContainer),relative:(e,t)=>kn.getStart(e),exact:(e,t,o,n)=>e}))(e);return Me.fromDom(Ht(t).dom.defaultView)},range:Dn},Bn=(e,t)=>{const o=Bt(e);return"input"===o?kn.after(e):D(["br","img"],o)?0===t?kn.before(e):kn.after(e):kn.on(e,t)},_n=e=>C.from(e.getSelection()),zn=(e,t)=>{_n(e).each((e=>{e.removeAllRanges(),e.addRange(t)}))},An=(e,t,o,n,r)=>{const s=Fe(e,t,o,n,r);zn(e,s)},Ln=(e,t)=>qe(e,t).match({ltr:(t,o,n,r)=>{An(e,t,o,n,r)},rtl:(t,o,n,r)=>{_n(e).each((s=>{if(s.setBaseAndExtent)s.setBaseAndExtent(t.dom,o,n.dom,r);else if(s.extend)try{((e,t,o,n,r,s)=>{t.collapse(o.dom,n),t.extend(r.dom,s)})(0,s,t,o,n,r)}catch{An(e,n,r,t,o)}else An(e,n,r,t,o)}))}}),Mn=(e,t,o,n,r)=>{const s=((e,t,o,n)=>{const r=Bn(e,t),s=Bn(o,n);return Nn.relative(r,s)})(t,o,n,r);Ln(e,s)},Wn=(e,t,o)=>{const n=((e,t)=>{const o=e.fold(kn.before,Bn,kn.after),n=t.fold(kn.before,Bn,kn.after);return Nn.relative(o,n)})(t,o);Ln(e,n)},jn=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return C.some(Dn(Me.fromDom(t.startContainer),t.startOffset,Me.fromDom(o.endContainer),o.endOffset))}return C.none()},Pn=e=>{if(null===e.anchorNode||null===e.focusNode)return jn(e);{const t=Me.fromDom(e.anchorNode),o=Me.fromDom(e.focusNode);return((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=Ft(e).dom.createRange();return r.setStart(e.dom,t),r.setEnd(o.dom,n),r})(e,t,o,n),s=Je(e,o)&&t===n;return r.collapsed&&!s})(t,e.anchorOffset,o,e.focusOffset)?C.some(Dn(t,e.anchorOffset,o,e.focusOffset)):jn(e)}},In=(e,t,o=!0)=>{const n=(o?je:We)(e,t);zn(e,n)},Fn=e=>(e=>_n(e).filter((e=>e.rangeCount>0)).bind(Pn))(e).map((e=>Nn.exact(e.start,e.soffset,e.finish,e.foffset))),Hn=(e,t,o)=>((e,t,o)=>((e,t,o)=>e.caretPositionFromPoint?((e,t,o)=>C.from(e.caretPositionFromPoint?.(t,o)).bind((t=>{if(null===t.offsetNode)return C.none();const o=e.createRange();return o.setStart(t.offsetNode,t.offset),o.collapse(),C.some(o)})))(e,t,o):e.caretRangeFromPoint?((e,t,o)=>C.from(e.caretRangeFromPoint?.(t,o)))(e,t,o):C.none())(e.document,t,o).map((e=>Dn(Me.fromDom(e.startContainer),e.startOffset,Me.fromDom(e.endContainer),e.endOffset))))(e,t,o),$n={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},Vn=(()=>{const e="[0-9]+",t="[eE][+-]?"+e,o=e=>`(?:${e})?`,n=["Infinity",e+"\\."+o(e)+o(t),"\\."+e+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),qn=e=>E(e,g(0)),Un=(e,t,o,n,r)=>r(e.slice(0,t)).concat(n).concat(r(e.slice(o))),Gn=e=>(t,o,n,r)=>{if(e(n)){const e=Math.max(r,t[o]-Math.abs(n)),s=Math.abs(e-t[o]);return n>=0?s:-s}return n},Kn=Gn((e=>e<0)),Yn=Gn(x),Jn=()=>{const e=(e,t,o,n)=>{const r=(100+o)/100,s=Math.max(n,(e[t]+o)/r);return E(e,((e,o)=>(o===t?s:e/r)-e))},t=(t,o,n,r,s,l)=>l?e(t,o,r,s):((e,t,o,n,r)=>{const s=Kn(e,t,n,r);return Un(e,t,o+1,[s,0],qn)})(t,o,n,r,s);return{resizeTable:(e,t)=>e(t),clampTableDelta:Kn,calcLeftEdgeDeltas:t,calcMiddleDeltas:(e,o,n,r,s,l,a)=>t(e,n,r,s,l,a),calcRightEdgeDeltas:(t,o,n,r,s,l)=>{if(l)return e(t,n,r,s);{const e=Kn(t,n,r,s);return qn(t.slice(0,n)).concat([e])}},calcRedestributedWidths:(e,t,o,n)=>{if(n){const n=(t+o)/t,r=E(e,(e=>e/n));return{delta:100*n-100,newSizes:r}}return{delta:o,newSizes:e}}}},Qn=()=>{const e=(e,t,o,n,r)=>{const s=Yn(e,n>=0?o:t,n,r);return Un(e,t,o+1,[s,-s],qn)};return{resizeTable:(e,t,o)=>{o&&e(t)},clampTableDelta:(e,t,o,n,r)=>{if(r){if(o>=0)return o;{const t=A(e,((e,t)=>e+t-n),0);return Math.max(-t,o)}}return Kn(e,t,o,n)},calcLeftEdgeDeltas:e,calcMiddleDeltas:(t,o,n,r,s,l)=>e(t,n,r,s,l),calcRightEdgeDeltas:(e,t,o,n,r,s)=>{if(s)return qn(e);{const t=n/e.length;return E(e,g(t))}},calcRedestributedWidths:(e,t,o,n)=>({delta:0,newSizes:e})}},Xn=(e,t,o=0)=>po(e,t).map((e=>parseInt(e,10))).getOr(o),Zn=(e,t)=>Xn(e,t,1),er=e=>It("col")(e)?Xn(e,"span",1)>1:Zn(e,"colspan")>1,tr=(e,t)=>parseInt(Bo(e,t),10),or=g(10),nr=g(10),rr=(e,t)=>sr(e,t,x),sr=(e,t,o)=>j(Kt(e),(e=>Ge(e,t)?o(e)?[e]:[]:sr(e,t,o))),lr=(e,t)=>((e,t,o=y)=>o(t)?C.none():D(e,Bt(t))?C.some(t):rn(t,e.join(","),(e=>Ge(e,"table")||o(e))))(["td","th"],e,t),ar=e=>rr(e,"th,td"),cr=e=>Ge(e,"colgroup")?wn(e,"col"):j(dr(e),(e=>wn(e,"col"))),ir=(e,t)=>an(e,"table",t),mr=e=>rr(e,"tr"),dr=e=>ir(e).fold(g([]),(e=>wn(e,"colgroup"))),ur=It("th"),fr=e=>P(e,(e=>ur(e.element))),gr=(e,t)=>e&&t?"sectionCells":e?"section":"cells",hr=e=>{const t="thead"===e.section,o=ie(pr(e.cells),"th");return"tfoot"===e.section?{type:"footer"}:t||o?{type:"header",subType:gr(t,o)}:{type:"body"}},pr=e=>{const t=_(e,(e=>ur(e.element)));return 0===t.length?C.some("td"):t.length===e.length?C.some("th"):C.none()},br=(e,t)=>E(e,(e=>{if("colgroup"===Bt(e)){const t=E(cr(e),(e=>{const t=Xn(e,"span",1);return Ce(e,1,t)}));return Se(e,t,"colgroup")}{const o=E(ar(e),(e=>{const t=Xn(e,"rowspan",1),o=Xn(e,"colspan",1);return Ce(e,t,o)}));return Se(e,o,t(e))}})),wr=e=>$t(e).map((e=>{const t=Bt(e);return(e=>D(xe,e))(t)?t:"tbody"})).getOr("tbody"),vr=e=>{const t=mr(e),o=[...dr(e),...t];return br(o,wr)},yr="data-snooker-locked-cols",xr=e=>po(e,yr).bind((e=>C.from(e.match(/\d+/g)))).map((e=>I(e,x))),Cr=e=>{const t=A(ze(e).rows,((e,t)=>(N(t.cells,((t,o)=>{t.isLocked&&(e[o]=!0)})),e)),{}),o=J(t,((e,t)=>parseInt(t,10)));return(e=>{const t=S.call(e,0);return t.sort(void 0),t})(o)},Sr=(e,t)=>e+","+t,Tr=(e,t)=>{const o=j(e.all,(e=>e.cells));return _(o,t)},Rr=e=>{const t={},o=[],n=H(e).map((e=>e.element)).bind(ir).bind(xr).getOr({});let r=0,s=0,l=0;const{pass:a,fail:c}=B(e,(e=>"colgroup"===e.section));N(c,(e=>{const a=[];N(e.cells,(e=>{let o=0;for(;void 0!==t[Sr(l,o)];)o++;const r=((e,t)=>X(e,t)&&void 0!==e[t]&&null!==e[t])(n,o.toString()),c=((e,t,o,n,r,s)=>({element:e,rowspan:t,colspan:o,row:n,column:r,isLocked:s}))(e.element,e.rowspan,e.colspan,l,o,r);for(let n=0;n{const t=(e=>{const t={};let o=0;return N(e.cells,(e=>{const n=e.colspan;k(n,(r=>{const s=o+r;t[s]=((e,t,o)=>({element:e,colspan:t,column:o}))(e.element,n,s)})),o+=n})),t})(e),o=((e,t)=>({element:e,columns:t}))(e.element,Q(t));return{colgroups:[o],columns:t}})).getOrThunk((()=>({colgroups:[],columns:{}}))),d=((e,t)=>({rows:e,columns:t}))(r,s);return{grid:d,access:t,all:o,columns:i,colgroups:m}},Dr=e=>{const t=vr(e);return Rr(t)},Or=Rr,kr=(e,t,o)=>C.from(e.access[Sr(t,o)]),Er=(e,t,o)=>{const n=Tr(e,(e=>o(t,e.element)));return n.length>0?C.some(n[0]):C.none()},Nr=Tr,Br=e=>j(e.all,(e=>e.cells)),_r=e=>Q(e.columns),zr=e=>q(e.columns).length>0,Ar=(e,t)=>C.from(e.columns[t]),Lr=(e,t,o)=>Te(o(e.element,t),!0,e.isLocked),Mr=(e,t)=>e.section!==t?Re(e.element,e.cells,t,e.isNew):e,Wr=()=>({transformRow:Mr,transformCell:(e,t,o)=>{const n=o(e.element,t),r="td"!==Bt(n)?(e=>{const t=Ro(e,"td");so(e,t);const o=Kt(e);return mo(t,o),yo(e),t})(n):n;return Te(r,e.isNew,e.isLocked)}}),jr=()=>({transformRow:Mr,transformCell:Lr}),Pr=()=>({transformRow:(e,t)=>Mr(e,"thead"===t?"tbody":t),transformCell:Lr}),Ir=Wr,Fr=jr,Hr=Pr,$r=()=>({transformRow:h,transformCell:Lr}),Vr=(e,t=x)=>{const o=e.grid,n=k(o.columns,h),r=k(o.rows,h);return E(n,(o=>qr((()=>j(r,(t=>kr(e,t,o).filter((e=>e.column===o)).toArray()))),(e=>1===e.colspan&&t(e.element)),(()=>kr(e,0,o)))))},qr=(e,t,o)=>{const n=e();return L(n,t).orThunk((()=>C.from(n[0]).orThunk(o))).map((e=>e.element))},Ur=e=>{const t=e.grid,o=k(t.rows,h),n=k(t.columns,h);return E(o,(t=>qr((()=>j(n,(o=>kr(e,t,o).filter((e=>e.row===t)).fold(g([]),(e=>[e]))))),(e=>1===e.rowspan),(()=>kr(e,t,0)))))},Gr=(e,t)=>({row:e,y:t}),Kr=(e,t)=>({col:e,x:t}),Yr=e=>Go(e).left+Ho(e),Jr=e=>Go(e).left,Qr=(e,t)=>Kr(e,Jr(t)),Xr=(e,t)=>Kr(e,Yr(t)),Zr=e=>Go(e).top,es=(e,t)=>Gr(e,Zr(t)),ts=(e,t)=>Gr(e,Zr(t)+Po(t)),os=(e,t,o)=>{if(0===o.length)return[];const n=E(o.slice(1),((t,o)=>t.map((t=>e(o,t))))),r=o[o.length-1].map((e=>t(o.length-1,e)));return n.concat([r])},ns={delta:h,positions:e=>os(es,ts,e),edge:Zr},rs=Zo({delta:h,edge:Jr,positions:e=>os(Qr,Xr,e)},{delta:e=>-e,edge:Yr,positions:e=>os(Xr,Qr,e)}),ss={delta:(e,t)=>rs(t).delta(e,t),positions:(e,t)=>rs(t).positions(e,t),edge:e=>rs(e).edge(e)},ls=/(\d+(\.\d+)?)%/,as=/(\d+(\.\d+)?)px|em/,cs=It("col"),is=It("tr"),ms=(e,t,o)=>{const n=Vt(e).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return Me.fromDom(t)})(Ft(e))));return t(e)/o(n)*100},ds=(e,t)=>{Eo(e,"width",t+"px")},us=(e,t)=>{Eo(e,"width",t+"%")},fs=(e,t)=>{Eo(e,"height",t+"px")},gs=e=>{const t=(e=>{return Mo(t=e,"height",t.dom.offsetHeight)+"px";var t})(e);return t?((e,t,o,n)=>{const r=parseFloat(e);return be(e,"%")&&"table"!==Bt(t)?((e,t,o,n)=>{const r=ir(e).map((e=>{const n=o(e);return Math.floor(t/100*n)})).getOr(t);return n(e,r),r})(t,r,o,n):r})(t,e,jo,fs):jo(e)},hs=(e,t)=>zo(e,t).orThunk((()=>po(e,t).map((e=>e+"px")))),ps=e=>hs(e,"width"),bs=e=>ms(e,Fo,$o),ws=e=>{return cs(e)?Math.round(Fo(e)):Mo(t=e,"width",t.dom.offsetWidth);var t},vs=e=>is(e)?jo(e):((e,t,o)=>o(e)/Zn(e,"rowspan"))(e,0,gs),ys=(e,t,o)=>{Eo(e,"width",t+o)},xs=e=>ms(e,Fo,$o)+"%",Cs=g(ls),Ss=It("col"),Ts=e=>ps(e).getOrThunk((()=>ws(e)+"px")),Rs=e=>{return(t=e,hs(t,"height")).getOrThunk((()=>vs(e)+"px"));var t},Ds=(e,t,o,n,r,s)=>e.filter(n).fold((()=>s(((e,t)=>{if(t<0||t>=e.length-1)return C.none();const o=e[t].fold((()=>{const o=(e=>{const t=S.call(e,0);return t.reverse(),t})(e.slice(0,t));return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:0}))),n=e[t+1].fold((()=>{const o=e.slice(t+1);return V(o,((e,t)=>e.map((e=>({value:e,delta:t+1})))))}),(e=>C.some({value:e,delta:1})));return o.bind((e=>n.map((t=>{const o=t.delta+e.delta;return Math.abs(t.value-e.value)/o}))))})(o,t))),(e=>r(e))),Os=(e,t,o,n)=>{const r=Vr(e),s=zr(e)?(e=>E(_r(e),(e=>C.from(e.element))))(e):r,l=[C.some(ss.edge(t))].concat(E(ss.positions(r,t),(e=>e.map((e=>e.x))))),a=w(er);return E(s,((e,t)=>Ds(e,t,l,a,(e=>{if((e=>{const t=kt().browser,o=t.isChromium()||t.isFirefox();return!Ss(e)||o})(e))return o(e);{const e=null!=(s=r[t])?h(s):C.none();return Ds(e,t,l,a,(e=>n(C.some(Math.round(Fo(e))))),n)}var s}),n)))},ks=e=>e.map((e=>e+"px")).getOr(""),Es=(e,t,o)=>Os(e,t,ws,(e=>e.getOrThunk(o.minCellWidth))),Ns=(e,t,o,n)=>{const r=Ur(e),s=E(e.all,(e=>C.some(e.element))),l=[C.some(ns.edge(t))].concat(E(ns.positions(r,t),(e=>e.map((e=>e.y)))));return E(s,((e,t)=>Ds(e,t,l,x,o,n)))},Bs=(e,t)=>()=>Oo(e)?t(e):parseFloat(zo(e,"width").getOr("0")),_s=e=>{const t=Bs(e,(e=>parseFloat(xs(e)))),o=Bs(e,Fo);return{width:t,pixelWidth:o,getWidths:(t,o)=>((e,t,o)=>Os(e,t,bs,(e=>e.fold((()=>o.minCellWidth()),(e=>e/o.pixelWidth()*100)))))(t,e,o),getCellDelta:e=>e/o()*100,singleColumnWidth:(e,t)=>[100-e],minCellWidth:()=>or()/o()*100,setElementWidth:us,adjustTableWidth:o=>{const n=t();us(e,n+o/100*n)},isRelative:!0,label:"percent"}},zs=e=>{const t=Bs(e,Fo);return{width:t,pixelWidth:t,getWidths:(t,o)=>Es(t,e,o),getCellDelta:h,singleColumnWidth:(e,t)=>[Math.max(or(),e+t)-e],minCellWidth:or,setElementWidth:ds,adjustTableWidth:o=>{const n=t()+o;ds(e,n)},isRelative:!1,label:"pixel"}},As=e=>ps(e).fold((()=>(e=>{const t=Bs(e,Fo),o=g(0);return{width:t,pixelWidth:t,getWidths:(t,o)=>Es(t,e,o),getCellDelta:o,singleColumnWidth:g([0]),minCellWidth:o,setElementWidth:f,adjustTableWidth:f,isRelative:!0,label:"none"}})(e)),(t=>((e,t)=>null!==Cs().exec(t)?_s(e):zs(e))(e,t))),Ls=zs,Ms=_s,Ws=(e,t,o,n)=>{o===n?bo(e,t):fo(e,t,o)},js=(e,t,o)=>{$(wn(e,t)).fold((()=>lo(e,o)),(e=>so(e,o)))},Ps=(e,t)=>{const o=[],n=[],r=e=>E(e,(e=>{e.isNew&&o.push(e.element);const t=e.element;return vo(t),N(e.cells,(e=>{e.isNew&&n.push(e.element),Ws(e.element,"colspan",e.colspan,1),Ws(e.element,"rowspan",e.rowspan,1),ao(t,e.element)})),t})),s=e=>j(e,(e=>E(e.cells,(e=>(Ws(e.element,"span",e.colspan,1),e.element))))),l=(t,o)=>{const n=((e,t)=>{const o=sn(e,t).getOrThunk((()=>{const o=Me.fromTag(t,Ft(e).dom);return"thead"===t?js(e,"caption,colgroup",o):"colgroup"===t?js(e,"caption",o):ao(e,o),o}));return vo(o),o})(e,o),l=("colgroup"===o?s:r)(t);mo(n,l)},a=(t,o)=>{t.length>0?l(t,o):(t=>{sn(e,t).each(yo)})(o)},c=[],i=[],m=[],d=[];return N(t,(e=>{switch(e.section){case"thead":c.push(e);break;case"tbody":i.push(e);break;case"tfoot":m.push(e);break;case"colgroup":d.push(e)}})),a(d,"colgroup"),a(c,"thead"),a(i,"tbody"),a(m,"tfoot"),{newRows:o,newCells:n}},Is=(e,t)=>{if(0===e.length)return 0;const o=e[0];return M(e,(e=>!t(o.element,e.element))).getOr(e.length)},Fs=(e,t)=>{const o=E(e,(e=>E(e.cells,y)));return E(e,((n,r)=>{const s=j(n.cells,((n,s)=>{if(!1===o[r][s]){const m=((e,t,o,n)=>{const r=((e,t)=>e[t])(e,t),s="colgroup"===r.section,l=Is(r.cells.slice(o),n),a=s?1:Is(((e,t)=>E(e,(e=>Ne(e,t))))(e.slice(t),o),n);return{colspan:l,rowspan:a}})(e,r,s,t);return((e,t,n,r)=>{for(let s=e;s({element:e,cells:t,section:o,isNew:n}))(n.element,s,n.section,n.isNew)}))},Hs=(e,t,o)=>{const n=[];N(e.colgroups,(r=>{const s=[];for(let n=0;nTe(e.element,o,!1))).getOrThunk((()=>Te(t.colGap(),!0,!1)));s.push(r)}n.push(Re(r.element,s,"colgroup",o))}));for(let r=0;rTe(e.element,o,e.isLocked))).getOrThunk((()=>Te(t.gap(),!0,!1)));s.push(l)}const l=e.all[r],a=Re(l.element,s,l.section,o);n.push(a)}return n},$s=e=>Fs(e,Je),Vs=(e,t)=>V(e.all,(e=>L(e.cells,(e=>Je(t,e.element))))),qs=(e,t,o)=>{const n=E(t.selection,(t=>lr(t).bind((t=>Vs(e,t))).filter(o))),r=me(n);return de(r.length>0,r)},Us=(e,t,o,n,r,s,l,a,c)=>{const i=Dr(s),m=C.from(c?.section).getOrThunk($r);return t(i,l).map((t=>{const o=((e,t)=>Hs(e,t,!1))(i,a),n=e(o,t,Je,r(a),m),s=Cr(n.grid);return{info:t,grid:$s(n.grid),cursor:n.cursor,lockedColumns:s}})).bind((e=>{const t=Ps(s,e.grid),r=C.from(c?.sizing).getOrThunk((()=>As(s))),l=C.from(c?.resize).getOrThunk(Qn);return o(s,e.grid,e.info,{sizing:r,resize:l,section:m}),n(s),bo(s,yr),e.lockedColumns.length>0&&fo(s,yr,e.lockedColumns.join(",")),C.some({cursor:e.cursor,newRows:t.newRows,newCells:t.newCells})}))},Gs=(e,t)=>lr(t.element).bind((o=>Vs(e,o).map((e=>({...e,generators:t.generators,clipboard:t.clipboard}))))),Ks=(e,t)=>qs(e,t,x).map((e=>({cells:e,generators:t.generators,clipboard:t.clipboard}))),Ys=(e,t)=>qs(e,t,x),Js=(e,t)=>qs(e,t,(e=>!e.isLocked)),Qs=(e,t)=>P(t,(t=>((e,t)=>Vs(e,t).exists((e=>!e.isLocked)))(e,t))),Xs=(e,t)=>((e,t)=>t.mergable)(0,t).filter((t=>Qs(e,t.cells))),Zs=(e,t)=>((e,t)=>t.unmergable)(0,t).filter((t=>Qs(e,t))),el={...Z([{none:[]},{only:["index"]},{left:["index","next"]},{middle:["prev","index","next"]},{right:["prev","index"]}])},tl=(e,t,o)=>{const n=((e,t)=>zr(e)?((e,t)=>{const o=_r(e);return E(o,((e,o)=>({element:e.element,width:t[o],colspan:e.colspan})))})(e,t):((e,t)=>{const o=Br(e);return E(o,(e=>{const o=((e,t,o)=>{let n=0;for(let r=e;r{o.setElementWidth(e.element,e.width)}))},ol=(e,t,o,n,r)=>{const s=Dr(e),l=r.getCellDelta(t),a=r.getWidths(s,r),c=o===s.grid.columns-1,i=n.clampTableDelta(a,o,l,r.minCellWidth(),c),m=((e,t,o,n,r)=>{const s=e.slice(0),l=((e,t)=>0===e.length?el.none():1===e.length?el.only(0):0===t?el.left(0,1):t===e.length-1?el.right(t-1,t):t>0&&tn.singleColumnWidth(s[e],o)),((e,t)=>r.calcLeftEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)),((e,t,l)=>r.calcMiddleDeltas(s,e,t,l,o,n.minCellWidth(),n.isRelative)),((e,t)=>r.calcRightEdgeDeltas(s,e,t,o,n.minCellWidth(),n.isRelative)))})(a,o,i,r,n),d=E(m,((e,t)=>e+a[t]));tl(s,d,r),n.resizeTable(r.adjustTableWidth,i,c)},nl=(e,t,o)=>{const n=Dr(e),r=((e,t)=>Ns(e,t,vs,(e=>e.getOrThunk(nr))))(n,e),s=E(r,((e,n)=>o===n?Math.max(t+e,nr()):e)),l=((e,t)=>E(e.all,((e,o)=>({element:e.element,height:t[o]}))))(n,s);N(l,(e=>{fs(e.element,e.height)})),N(Br(n),(e=>{(e=>{Ao(e,"height")})(e.element)}));const a=z(s,((e,t)=>e+t),0);fs(e,a)},rl=(e,t)=>{if(!er(e)){const o=(e=>ps(e).bind((e=>{return t=e,o=["fixed","relative","empty"],C.from(Vn.exec(t)).bind((e=>{const t=Number(e[1]),n=e[2];return((e,t)=>O(t,(t=>O($n[t],(t=>e===t)))))(n,o)?C.some({value:t,unit:n}):C.none()}));var t,o})))(e);o.each((o=>{const n=o.value/2;ys(e,n,o.unit),ys(t,n,o.unit)}))}},sl=(e,t,o)=>{const n=Xn(e,t,1);1===o||n<=1?bo(e,t):fo(e,t,Math.min(o,n))},ll=(e,t)=>o=>{const n=o.column+o.colspan-1,r=o.column;return n>=e&&r{const n=e[o].element,r=Me.fromTag("td");ao(r,Me.fromTag("br")),(t?ao:lo)(n,r)},cl=It("col"),il=It("colgroup"),ml=e=>"tr"===Bt(e)||il(e),dl=e=>({element:e,colspan:Xn(e,"colspan",1),rowspan:Xn(e,"rowspan",1)}),ul=e=>po(e,"scope").map((e=>e.substr(0,3))),fl=(e,t=dl)=>{const o=o=>{if(ml(o))return il((r={element:o}).element)?e.colgroup(r):e.row(r);{const r=o,s=(t=>cl(t.element)?e.col(t):e.cell(t))(t(r));return n=C.some({item:r,replacement:s}),s}var r};let n=C.none();return{getOrInit:(e,t)=>n.fold((()=>o(e)),(n=>t(e,n.item)?n.replacement:o(e)))}},gl=e=>t=>{const o=[],n=n=>{const r="td"===e?{scope:null}:{},s=t.replace(n,e,r);return o.push({item:n,sub:s}),s};return{replaceOrInit:(e,t)=>{if(ml(e)||cl(e))return e;{const r=e;return((e,t)=>L(o,(o=>t(o.item,e))))(r,t).fold((()=>n(r)),(o=>t(e,o.item)?o.sub:n(r)))}}}},hl=e=>({unmerge:t=>{const o=ul(t);return o.each((e=>fo(t,"scope",e))),()=>{const n=e.cell({element:t,colspan:1,rowspan:1});return Ao(n,"width"),Ao(t,"width"),o.each((e=>fo(n,"scope",e))),n}},merge:e=>(Ao(e[0],"width"),(()=>{const t=me(E(e,ul));if(0===t.length)return C.none();{const e=t[0],o=["row","col"];return O(t,(t=>t!==e&&D(o,t)))?C.none():C.from(e)}})().fold((()=>bo(e[0],"scope")),(t=>fo(e[0],"scope",t+"group"))),g(e[0]))}),pl=Z([{invalid:["raw"]},{pixels:["value"]},{percent:["value"]}]),bl=(e,t,o)=>{const n=o.substring(0,o.length-e.length),r=parseFloat(n);return n===r.toString()?t(r):pl.invalid(o)},wl={...pl,from:e=>be(e,"%")?bl("%",pl.percent,e):be(e,"px")?bl("px",pl.pixels,e):pl.invalid(e)},vl=(e,t,o)=>{const n=wl.from(o),r=P(e,(e=>"0px"===e))?((e,t)=>{const o=e.fold((()=>g("")),(e=>g(e/t+"px")),(()=>g(100/t+"%")));return k(t,o)})(n,e.length):((e,t,o)=>e.fold((()=>t),(e=>((e,t,o)=>{const n=o/t;return E(e,(e=>wl.from(e).fold((()=>e),(e=>e*n+"px"),(e=>e/100*o+"px"))))})(t,o,e)),(e=>((e,t)=>E(e,(e=>wl.from(e).fold((()=>e),(e=>e/t*100+"%"),(e=>e+"%")))))(t,o))))(n,e,t);return Cl(r)},yl=(e,t)=>0===e.length?t:z(e,((e,t)=>wl.from(t).fold(g(0),h,h)+e),0),xl=(e,t)=>wl.from(e).fold(g(e),(e=>e+t+"px"),(e=>e+t+"%")),Cl=e=>{if(0===e.length)return e;const t=z(e,((e,t)=>{const o=wl.from(t).fold((()=>({value:t,remainder:0})),(e=>(e=>{const t=Math.floor(e);return{value:t+"px",remainder:e-t}})(e)),(e=>({value:e+"%",remainder:0})));return{output:[o.value].concat(e.output),remainder:e.remainder+o.remainder}}),{output:[],remainder:0}),o=t.output;return o.slice(0,o.length-1).concat([xl(o[o.length-1],Math.round(t.remainder))])},Sl=wl.from,Tl=(e,t,o)=>{const n=Dr(e),r=n.all,s=Br(n),l=_r(n);t.each((t=>{const o=Sl(t).fold(g("px"),g("px"),g("%")),r=Fo(e),a=((e,t)=>Os(e,t,Ts,ks))(n,e),c=vl(a,r,t);zr(n)?((e,t,o)=>{N(t,((t,n)=>{const r=yl([e[n]],or());Eo(t.element,"width",r+o)}))})(c,l,o):((e,t,o)=>{N(t,(t=>{const n=e.slice(t.column,t.colspan+t.column),r=yl(n,or());Eo(t.element,"width",r+o)}))})(c,s,o),Eo(e,"width",t)})),o.each((t=>{const o=jo(e),l=((e,t)=>Ns(e,t,Rs,ks))(n,e);((e,t,o)=>{N(o,(e=>{Ao(e.element,"height")})),N(t,((t,o)=>{Eo(t.element,"height",e[o])}))})(vl(l,o,t),r,s),Eo(e,"height",t)}))},Rl=e=>ps(e).exists((e=>ls.test(e))),Dl=e=>ps(e).exists((e=>as.test(e))),Ol=e=>ps(e).isNone();var kl=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],El=()=>({up:g({selector:rn,closest:an,predicate:on,all:qt}),down:g({selector:vn,predicate:pn}),styles:g({get:Bo,getRaw:zo,set:Eo,remove:Ao}),attrs:g({get:ho,set:fo,remove:bo,copyTo:(e,t)=>{const o=wo(e);go(t,o)}}),insert:g({before:ro,after:so,afterAll:io,append:ao,appendAll:mo,prepend:lo,wrap:co}),remove:g({unwrap:xo,remove:yo}),create:g({nu:Me.fromTag,clone:e=>Me.fromDom(e.dom.cloneNode(!1)),text:Me.fromText}),query:g({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:Ut,nextSibling:Gt}),property:g({children:Kt,name:Bt,parent:$t,document:e=>Ht(e).dom,isText:Wt,isComment:At,isElement:Mt,isSpecial:e=>{const t=Bt(e);return D(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>Mt(e)?po(e,"lang"):C.none(),getText:Jo,setText:Xo,isBoundary:e=>!!Mt(e)&&("body"===Bt(e)||D(kl,Bt(e))),isEmptyTag:e=>!!Mt(e)&&D(["br","img","hr","input"],Bt(e)),isNonEditable:e=>Mt(e)&&"false"===ho(e,"contenteditable")}),eq:Je,is:Xe});const Nl=(e,t)=>({item:e,mode:t}),Bl=(e,t,o,n=_l)=>e.property().parent(t).map((e=>Nl(e,n))),_l=(e,t,o,n=zl)=>o.sibling(e,t).map((e=>Nl(e,n))),zl=(e,t,o,n=zl)=>{const r=e.property().children(t);return o.first(r).map((e=>Nl(e,n)))},Al=[{current:Bl,next:_l,fallback:C.none()},{current:_l,next:zl,fallback:C.some(Bl)},{current:zl,next:zl,fallback:C.some(_l)}],Ll=(e,t,o,n,r=Al)=>L(r,(e=>e.current===o)).bind((o=>o.current(e,t,n,o.next).orThunk((()=>o.fallback.bind((o=>Ll(e,t,o,n))))))),Ml=(e,t,o,n,r,s)=>Ll(e,t,n,r).bind((t=>s(t.item)?C.none():o(t.item)?C.some(t.item):Ml(e,t.item,o,t.mode,r,s))),Wl=(e,t)=>({element:e,offset:t}),jl=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>jl(e,t,o).orThunk((()=>C.some(t))))):C.none(),Pl=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,Il=(e,t)=>{const o=jl(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return Wl(o,Pl(e,o));const n=e.property().children(o);return n.length>0?Il(e,n[n.length-1]):Wl(o,Pl(e,o))},Fl=Il,Hl=El(),$l=e=>t=>0===e.property().children(t).length,Vl=(e,t,o,n)=>Ml(e,t,o,_l,{sibling:(e,t)=>e.query().prevSibling(t),first:e=>e.length>0?C.some(e[e.length-1]):C.none()},n),ql=(e,t,o,n)=>Ml(e,t,o,_l,{sibling:(e,t)=>e.query().nextSibling(t),first:e=>e.length>0?C.some(e[0]):C.none()},n),Ul=El(),Gl=(e,t)=>((e,t,o)=>Vl(e,t,$l(e),o))(Ul,e,t),Kl=(e,t)=>((e,t,o)=>ql(e,t,$l(e),o))(Ul,e,t),Yl=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","table","thead","tfoot","tbody","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"],Jl=(e,t,o,n)=>{const r=t(e,o);return z(n,((o,n)=>{const r=t(e,n);return Ql(e,o,r)}),r)},Ql=(e,t,o)=>t.bind((t=>o.filter(b(e.eq,t)))),Xl=El(),Zl=(e,t)=>((e,t,o)=>o.length>0?((e,t,o,n)=>n(e,t,o[0],o.slice(1)))(e,t,o,Jl):C.none())(Xl,((t,o)=>e(o)),t),ea=El(),ta=e=>((e,t)=>{const o=e.property().name(t);return D(Yl,o)})(ea,e),oa=e=>((e,t)=>{const o=e.property().name(t);return D(["ol","ul"],o)})(ea,e),na=e=>{const t=It("br"),o=e=>Tn(e).bind((o=>{const n=Gt(o).map((e=>!!ta(e)||!!((e,t)=>D(["br","img","hr","input"],e.property().name(t)))(ea,e)&&"img"!==Bt(e))).getOr(!1);return $t(o).map((r=>{return!0===n||("li"===Bt(s=r)||on(s,oa).isSome())||t(o)||ta(r)&&!Je(e,r)?[]:[Me.fromTag("br")];var s}))})).getOr([]),n=(()=>{const n=j(e,(e=>{const n=Kt(e);return(e=>P(e,(e=>t(e)||Wt(e)&&0===Jo(e).trim().length)))(n)?[]:n.concat(o(e))}));return 0===n.length?[Me.fromTag("br")]:n})();vo(e[0]),mo(e[0],n)},ra=e=>{bo(e,"width"),bo(e,"height")},sa=e=>{const t=xs(e);Tl(e,C.some(t),C.none()),ra(e)},la=e=>{const t=(e=>Fo(e)+"px")(e);Tl(e,C.some(t),C.none()),ra(e)},aa=e=>{Ao(e,"width");const t=cr(e),o=t.length>0?t:ar(e);N(o,(e=>{Ao(e,"width"),ra(e)})),ra(e)},ca={scope:["row","col"]},ia=e=>()=>{const t=Me.fromTag("td",e.dom);return ao(t,Me.fromTag("br",e.dom)),t},ma=e=>()=>Me.fromTag("col",e.dom),da=e=>()=>Me.fromTag("colgroup",e.dom),ua=e=>()=>Me.fromTag("tr",e.dom),fa=(e,t,o)=>{const n=((e,t)=>{const o=Ro(e,t),n=Kt(To(e));return mo(o,n),o})(e,t);return G(o,((e,t)=>{null===e?bo(n,t):fo(n,t,e)})),n},ga=e=>e,ha=(e,t,o)=>{const n=(e,t)=>{((e,t)=>{const o=e.dom,n=t.dom;Do(o)&&Do(n)&&(n.style.cssText=o.style.cssText)})(e.element,t),Ao(t,"height"),1!==e.colspan&&Ao(t,"width")};return{col:o=>{const r=Me.fromTag(Bt(o.element),t.dom);return n(o,r),e(o.element,r),r},colgroup:da(t),row:ua(t),cell:r=>{const s=Me.fromTag(Bt(r.element),t.dom),l=o.getOr(["strong","em","b","i","span","font","h1","h2","h3","h4","h5","h6","p","div"]),a=l.length>0?((e,t,o)=>Sn(e).map((n=>{const r=o.join(","),s=bn(n,r,(t=>Je(t,e)));return z(s,((e,t)=>{const o=So(t);return ao(e,o),o}),t)})).getOr(t))(r.element,s,l):s;return ao(a,Me.fromTag("br")),n(r,s),((e,t)=>{G(ca,((o,n)=>po(e,n).filter((e=>D(o,e))).each((e=>fo(t,n,e)))))})(r.element,s),e(r.element,s),s},replace:fa,colGap:ma(t),gap:ia(t)}},pa=e=>({col:ma(e),colgroup:da(e),row:ua(e),cell:ia(e),replace:ga,colGap:ma(e),gap:ia(e)}),ba=e=>Dr(e).grid,wa=(e,t,o,n)=>{const r=ze(e).rows;let s=!0;for(let e=0;e({rowDelta:0,colDelta:_e(e[0])-_e(t[0])}),ya=(e,t)=>({rowDelta:e.length-t.length,colDelta:0}),xa=(e,t,o,n)=>{const r="colgroup"===t.section?o.col:o.cell;return k(e,(e=>Te(r(),!0,n(e))))},Ca=(e,t,o,n)=>{const r=e[e.length-1];return e.concat(k(t,(()=>{const e="colgroup"===r.section?o.colgroup:o.row,t=Ae(r,e,h),s=xa(t.cells.length,t,o,(e=>X(n,e.toString())));return Ee(t,s)})))},Sa=(e,t,o,n)=>E(e,(e=>{const r=xa(t,e,o,y);return De(e,n,r)})),Ta=(e,t,o)=>{const n=t.colDelta<0?Sa:h,r=t.rowDelta<0?Ca:h,s=Cr(e),l=_e(e[0]),a=O(s,(e=>e===l-1)),c=n(e,Math.abs(t.colDelta),o,a?l-1:l),i=Cr(c);return r(c,Math.abs(t.rowDelta),o,I(i,x))},Ra=(e,t,o,n)=>{const r=b(n,Ne(e[t],o).element),s=e[t];return e.length>1&&_e(s)>1&&(o>0&&r(Be(s,o-1))||o0&&r(Be(e[t-1],o))||t_(o,(o=>o>=e.column&&o<=_e(t[0])+e.column)),Oa=(e,t,o,n,r)=>{((e,t,o,n)=>{t>0&&t{const r=e.cells[t-1];let s=0;const l=n();for(;e.cells.length>t+s&&o(r.element,e.cells[t+s].element);)ke(e,t+s,Te(l,!0,e.cells[t+s].isLocked)),s++}))})(t,e,r,n.cell);const s=ya(o,t),l=Ta(o,s,n),a=ya(t,l),c=Ta(t,a,n);return E(c,((t,o)=>De(t,e,l[o].cells)))},ka=(e,t,o,n,r)=>{((e,t,o,n)=>{const r=ze(e).rows;if(t>0&&tA(e,((e,o)=>O(e,(e=>t(e.element,o.element)))?e:e.concat([o])),[]))(r[t-1].cells,o);N(e,(e=>{let s=C.none();for(let l=t;l{ke(a,t,Te(e,!0,c.isLocked))})))}}))}})(t,e,r,n.cell);const s=Cr(t),l=va(t,o),a={...l,colDelta:l.colDelta-s.length},c=Ta(t,a,n),{cols:i,rows:m}=ze(c),d=Cr(c),u=va(o,t),f={...u,colDelta:u.colDelta+d.length},g=(p=n,b=d,E(o,(e=>A(b,((t,o)=>{const n=xa(1,e,p,x)[0];return Oe(t,o,n)}),e)))),h=Ta(g,f,n);var p,b;return[...i,...m.slice(0,e),...h,...m.slice(e,m.length)]},Ea=(e,t,o,n,r)=>{const{rows:s,cols:l}=ze(e),a=s.slice(0,t),c=s.slice(t);return[...l,...a,((e,t,o,n)=>Ae(e,(e=>n(e,o)),t))(s[o],((e,o)=>t>0&&tE(e,(e=>{const s=t>0&&t<_e(e)&&n(Be(e,t-1),Be(e,t)),l=((e,t,o,n,r,s,l)=>{if("colgroup"!==o&&n)return Ne(e,t);{const t=Ne(e,r);return Te(l(t.element,s),!0,!1)}})(e,t,e.section,s,o,n,r);return Oe(e,t,l)})),Ba=(e,t,o,n)=>((e,t,o,n)=>void 0!==Be(e[t],o)&&t>0&&n(Be(e[t-1],o),Be(e[t],o)))(e,t,o,n)||((e,t,o)=>t>0&&o(Be(e,t-1),Be(e,t)))(e[t],o,n),_a=(e,t,o,n)=>{const r=e=>(e=>"row"===e?(e=>Zn(e,"rowspan")>1)(t):er(t))(e)?`${e}group`:e;return e?ur(t)?r(o):null:n&&ur(t)?r("row"===o?"col":"row"):null},za=(e,t,o)=>Te(o(e.element,t),!0,e.isLocked),Aa=(e,t,o,n,r,s,l)=>E(e,((e,a)=>(e=>{const c=e.cells,i=E(c,((e,c)=>{if((e=>O(t,(t=>o(e.element,t.element))))(e)){const t=l(e,a,c)?r(e,o,n):e;return s(t,a,c).each((e=>{var o,n;o=t.element,n={scope:C.from(e)},G(n,((e,t)=>{e.fold((()=>{bo(o,t)}),(e=>{uo(o.dom,t,e)}))}))})),t}return e}));return Re(e.element,i,e.section,e.isNew)})(e))),La=(e,t,o)=>j(e,((n,r)=>Ba(e,r,t,o)?[]:[Ne(n,t)])),Ma=(e,t,o,n,r)=>{const s=ze(e).rows,l=j(t,(e=>La(s,e,n))),a=E(s,(e=>fr(e.cells))),c=((e,t)=>P(t,h)&&fr(e)?x:(e,o,n)=>!("th"===Bt(e.element)&&t[o]))(l,a),i=((e,t)=>(o,n)=>C.some(_a(e,o.element,"row",t[n])))(o,a);return Aa(e,l,n,r,za,i,c)},Wa=(e,t,o,n)=>{const r=ze(e).rows,s=E(t,(e=>Ne(r[e.row],e.column)));return Aa(e,s,o,n,za,C.none,x)},ja=e=>A(e,((e,t)=>O(e,(e=>e.column===t.column))?e:e.concat([t])),[]).sort(((e,t)=>e.column-t.column)),Pa=e=>gn(e,!0),Ia=e=>{0===ar(e).length&&yo(e)},Fa=(e,t)=>({grid:e,cursor:t}),Ha=(e,t,o)=>{const n=((e,t,o)=>{const n=ze(e).rows;return C.from(n[t]?.cells[o]?.element).filter(Pa).orThunk((()=>(e=>V(e,(e=>V(e.cells,(e=>{const t=e.element;return de(Pa(t),t)})))))(n)))})(e,t,o);return Fa(e,n)},$a=e=>A(e,((e,t)=>O(e,(e=>e.row===t.row))?e:e.concat([t])),[]).sort(((e,t)=>e.row-t.row)),Va=(e,t,o,n)=>{const r=t[0].row,s=$a(t),l=z(s,((e,t)=>({grid:Ea(e.grid,r,t.row+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Ha(l,r,t[0].column)},qa=(e,t,o,n)=>{const r=$a(t),s=r[r.length-1],l=s.row+s.rowspan,a=z(r,((e,t)=>Ea(e,l,t.row,o,n.getOrInit)),e);return Ha(a,l,t[0].column)},Ua=(e,t,o,n)=>{const r=t.details,s=ja(r),l=s[0].column,a=z(s,((e,t)=>({grid:Na(e.grid,l,t.column+e.delta,o,n.getOrInit),delta:e.delta+1})),{grid:e,delta:0}).grid;return Ha(a,r[0].row,l)},Ga=(e,t,o,n)=>{const r=t.details,s=r[r.length-1],l=s.column+s.colspan,a=ja(r),c=z(a,((e,t)=>Na(e,l,t.column,o,n.getOrInit)),e);return Ha(c,r[0].row,l)},Ka=(e,t,o,n)=>{const r=ja(t),s=E(r,(e=>e.column)),l=Ma(e,s,!0,o,n.replaceOrInit);return Ha(l,t[0].row,t[0].column)},Ya=(e,t,o,n)=>{const r=Wa(e,t,o,n.replaceOrInit);return Ha(r,t[0].row,t[0].column)},Ja=(e,t,o,n)=>{const r=ja(t),s=E(r,(e=>e.column)),l=Ma(e,s,!1,o,n.replaceOrInit);return Ha(l,t[0].row,t[0].column)},Qa=(e,t,o,n)=>{const r=Wa(e,t,o,n.replaceOrInit);return Ha(r,t[0].row,t[0].column)},Xa=(e,t)=>(o,n,r,s,l)=>{const a=$a(n),c=E(a,(e=>e.row)),i=((e,t,o,n,r,s,l)=>{const{cols:a,rows:c}=ze(e),i=c[t[0]],m=j(t,(e=>((e,t,o)=>{const n=e[t];return j(n.cells,((n,r)=>Ba(e,t,r,o)?[]:[n]))})(c,e,r))),d=E(i.cells,((e,t)=>fr(La(c,t,r)))),u=[...c];N(t,(e=>{u[e]=l.transformRow(c[e],o)}));const f=[...a,...u],g=((e,t)=>P(t,h)&&fr(e.cells)?x:(e,o,n)=>!("th"===Bt(e.element)&&t[n]))(i,d),p=((e,t)=>(o,n,r)=>C.some(_a(e,o.element,"col",t[r])))(n,d);return Aa(f,m,r,s,l.transformCell,p,g)})(o,c,e,t,r,s.replaceOrInit,l);return Ha(i,n[0].row,n[0].column)},Za=Xa("thead",!0),ec=Xa("tbody",!1),tc=Xa("tfoot",!1),oc=(e,t,o,n)=>{const r=ja(t.details),s=((e,t)=>j(e,(e=>{const o=e.cells,n=z(t,((e,t)=>t>=0&&t0?[Re(e.element,n,e.section,e.isNew)]:[]})))(e,E(r,(e=>e.column))),l=s.length>0?s[0].cells.length-1:0;return Ha(s,r[0].row,Math.min(r[0].column,l))},nc=(e,t,o,n)=>{const r=$a(t),s=((e,t,o)=>{const{rows:n,cols:r}=ze(e);return[...r,...n.slice(0,t),...n.slice(o+1)]})(e,r[0].row,r[r.length-1].row),l=Math.max(ze(s).rows.length-1,0);return Ha(s,Math.min(t[0].row,l),t[0].column)},rc=(e,t,o,n)=>{const r=t.cells;na(r);const s=((e,t,o,n)=>{const r=ze(e).rows;if(0===r.length)return e;for(let e=t.startRow;e<=t.finishRow;e++)for(let o=t.startCol;o<=t.finishCol;o++){const t=r[e],s=Ne(t,o).isLocked;ke(t,o,Te(n(),!1,s))}return e})(e,t.bounds,0,n.merge(r));return Fa(s,C.from(r[0]))},sc=(e,t,o,n)=>{const r=z(t,((e,t)=>wa(e,t,o,n.unmerge(t))),e);return Fa(r,C.from(t[0]))},lc=(e,t,o,n)=>{const r=((e,t)=>{const o=Dr(e);return Hs(o,t,!0)})(t.clipboard,t.generators);var s,l;return((e,t,o,n,r)=>{const s=Cr(t),l=((e,t,o)=>{const n=_e(t[0]),r=ze(t).cols.length+e.row,s=k(n-e.column,(t=>t+e.column));return{row:r,column:L(s,(e=>P(o,(t=>t!==e)))).getOr(n-1)}})(e,t,s),a=ze(o).rows,c=Da(l,a,s),i=((e,t,o)=>{if(e.row>=t.length||e.column>_e(t[0]))return le.error("invalid start address out of table bounds, row: "+e.row+", column: "+e.column);const n=t.slice(e.row),r=n[0].cells.slice(e.column),s=_e(o[0]),l=o.length;return le.value({rowDelta:n.length-l,colDelta:r.length-s})})(l,t,a);return i.map((e=>{const o={...e,colDelta:e.colDelta-c.length},s=Ta(t,o,n),i=Cr(s),m=Da(l,a,i);return((e,t,o,n,r,s)=>{const l=e.row,a=e.column,c=l+o.length,i=a+_e(o[0])+s.length,m=I(s,x);for(let e=l;eFa(e,C.some(t.element))),(e=>Ha(e,t.row,t.column)))},ac=(e,t,o)=>{const n=((e,t)=>br(e,(()=>t)))(e,o.section),r=Or(n);return Hs(r,t,!0)},cc=(e,t,o,n)=>{const r=ze(e).rows,s=t.cells[0].column,l=r[t.cells[0].row],a=ac(t.clipboard,t.generators,l),c=Oa(s,e,a,t.generators,o);return Ha(c,t.cells[0].row,t.cells[0].column)},ic=(e,t,o,n)=>{const r=ze(e).rows,s=t.cells[t.cells.length-1].column+t.cells[t.cells.length-1].colspan,l=r[t.cells[0].row],a=ac(t.clipboard,t.generators,l),c=Oa(s,e,a,t.generators,o);return Ha(c,t.cells[0].row,s)},mc=(e,t,o,n)=>{const r=ze(e).rows,s=t.cells[0].row,l=r[s],a=ac(t.clipboard,t.generators,l),c=ka(s,e,a,t.generators,o);return Ha(c,t.cells[0].row,t.cells[0].column)},dc=(e,t,o,n)=>{const r=ze(e).rows,s=t.cells[t.cells.length-1].row+t.cells[t.cells.length-1].rowspan,l=r[t.cells[0].row],a=ac(t.clipboard,t.generators,l),c=ka(s,e,a,t.generators,o);return Ha(c,s,t.cells[0].column)},uc=(e,t,o,n)=>((e,t,o,n)=>{const r=Or(t),s=n.getWidths(r,n);tl(r,s,n)})(0,t,0,n.sizing),fc=(e,t,o,n)=>((e,t,o,n,r)=>{const s=Or(t),l=n.getWidths(s,n),a=n.pixelWidth(),{newSizes:c,delta:i}=r.calcRedestributedWidths(l,a,o.pixelDelta,n.isRelative);tl(s,c,n),n.adjustTableWidth(i)})(0,t,o,n.sizing,n.resize),gc=(e,t)=>O(t,(e=>0===e.column&&e.isLocked)),hc=(e,t)=>O(t,(t=>t.column+t.colspan>=e.grid.columns&&t.isLocked)),pc=(e,t)=>{const o=Vr(e),n=ja(t);return A(n,((e,t)=>e+o[t.column].map(Ho).getOr(0)),0)},bc=e=>(t,o)=>Ys(t,o).filter((o=>!(e?gc:hc)(t,o))).map((e=>({details:e,pixelDelta:pc(t,e)}))),wc=(e,t)=>Js(e,t).map((t=>({details:t,pixelDelta:-pc(e,t)}))),vc=e=>(t,o)=>Ks(t,o).filter((o=>!(e?gc:hc)(t,o.cells))),yc=gl("th"),xc=gl("td"),Cc=(e,t,o,n)=>Us(Va,Ys,f,f,fl,e,t,o,n),Sc=(e,t,o,n)=>Us(qa,Ys,f,f,fl,e,t,o,n),Tc=(e,t,o,n)=>Us(Ua,bc(!0),fc,f,fl,e,t,o,n),Rc=(e,t,o,n)=>Us(Ga,bc(!1),fc,f,fl,e,t,o,n),Dc=(e,t,o,n)=>Us(oc,wc,fc,Ia,fl,e,t,o,n),Oc=(e,t,o,n)=>Us(nc,Ys,f,Ia,fl,e,t,o,n),kc=(e,t,o,n)=>Us(Ka,Js,f,f,yc,e,t,o,n),Ec=(e,t,o,n)=>Us(Ja,Js,f,f,xc,e,t,o,n),Nc=(e,t,o,n)=>Us(Za,Ys,f,f,yc,e,t,o,n),Bc=(e,t,o,n)=>Us(ec,Ys,f,f,xc,e,t,o,n),_c=(e,t,o,n)=>Us(tc,Ys,f,f,xc,e,t,o,n),zc=(e,t,o,n)=>Us(Ya,Js,f,f,yc,e,t,o,n),Ac=(e,t,o,n)=>Us(Qa,Js,f,f,xc,e,t,o,n),Lc=(e,t,o,n)=>Us(rc,Xs,uc,f,hl,e,t,o,n),Mc=(e,t,o,n)=>Us(sc,Zs,uc,f,hl,e,t,o,n),Wc=(e,t,o,n)=>Us(lc,Gs,uc,f,fl,e,t,o,n),jc=(e,t,o,n)=>Us(cc,vc(!0),f,f,fl,e,t,o,n),Pc=(e,t,o,n)=>Us(ic,vc(!1),f,f,fl,e,t,o,n),Ic=(e,t,o,n)=>Us(mc,Ks,f,f,fl,e,t,o,n),Fc=(e,t,o,n)=>Us(dc,Ks,f,f,fl,e,t,o,n),Hc=(e,t)=>{const o=Dr(e);return Ys(o,t).bind((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=W(E(o.all,(e=>_(e.cells,(e=>e.column>=n&&e.column{const o=Dr(e);return Ys(o,t).bind(pr).getOr("")},Vc=(e,t)=>{const o=Dr(e);return Ys(o,t).bind((e=>{const t=e[e.length-1],n=e[0].row,r=t.row+t.rowspan;return(e=>{const t=E(e,(e=>hr(e).type)),o=D(t,"header"),n=D(t,"footer");if(o||n){const e=D(t,"body");return!o||e||n?o||e||!n?C.none():C.some("footer"):C.some("header")}return C.some("body")})(o.all.slice(n,r))})).getOr("")},qc=(e,t)=>{const o=t.column,n=t.column+t.colspan-1,r=t.row,s=t.row+t.rowspan-1;return o<=e.finishCol&&n>=e.startCol&&r<=e.finishRow&&s>=e.startRow},Uc=(e,t)=>t.column>=e.startCol&&t.column+t.colspan-1<=e.finishCol&&t.row>=e.startRow&&t.row+t.rowspan-1<=e.finishRow,Gc=(e,t,o)=>{const n=Er(e,t,Je),r=Er(e,o,Je);return n.bind((e=>r.map((t=>{return o=e,n=t,{startRow:Math.min(o.row,n.row),startCol:Math.min(o.column,n.column),finishRow:Math.max(o.row+o.rowspan-1,n.row+n.rowspan-1),finishCol:Math.max(o.column+o.colspan-1,n.column+n.colspan-1)};var o,n}))))},Kc=(e,t,o)=>Gc(e,t,o).map((t=>{const o=Nr(e,b(qc,t));return E(o,(e=>e.element))})),Yc=(e,t)=>Er(e,t,((e,t)=>Qe(t,e))).map((e=>e.element)),Jc=(e,t,o)=>{const n=Xc(e);return Kc(n,t,o)},Qc=(e,t,o,n,r)=>{const s=Xc(e),l=Je(e,o)?C.some(t):Yc(s,t),a=Je(e,r)?C.some(n):Yc(s,n);return l.bind((e=>a.bind((t=>Kc(s,e,t)))))},Xc=Dr,Zc={styles:{"border-collapse":"collapse",width:"100%"},attributes:{border:"1"},colGroups:!1},ei=(e,t,o,n)=>k(e,(e=>((e,t,o,n)=>{const r=Me.fromTag("tr");for(let s=0;s{let t=[];return{bind:e=>{if(void 0===e)throw new Error("Event bind error: undefined handler");t.push(e)},unbind:e=>{t=_(t,(t=>t!==e))},trigger:(...o)=>{const n={};N(e,((e,t)=>{n[e]=o[t]})),N(t,(e=>{e(n)}))}}},oi=e=>({registry:K(e,(e=>({bind:e.bind,unbind:e.unbind}))),trigger:K(e,(e=>e.trigger))}),ni=ne(["compare","extract","mutate","sink"]),ri=ne(["element","start","stop","destroy"]),si=ne(["forceDrop","drop","move","delayDrop"]),li=()=>{const e=(()=>{const e=oi({move:ti(["info"])});return{onEvent:f,reset:f,events:e.registry}})(),t=(()=>{let e=C.none();const t=oi({move:ti(["info"])});return{onEvent:(o,n)=>{n.extract(o).each((o=>{const r=((t,o)=>{const n=e.map((e=>t.compare(e,o)));return e=C.some(o),n})(n,o);r.each((e=>{t.trigger.move(e)}))}))},reset:()=>{e=C.none()},events:t.registry}})();let o=e;return{on:()=>{o.reset(),o=t},off:()=>{o.reset(),o=e},isOn:()=>o===t,onEvent:(e,t)=>{o.onEvent(e,t)},events:t.events}},ai=ce("ephox-dragster").resolve;var ci=ni({compare:(e,t)=>qo(t.left-e.left,t.top-e.top),extract:e=>C.some(qo(e.x,e.y)),sink:(e,t)=>{const o=(e=>{const t={layerClass:ai("blocker"),...e},o=Me.fromTag("div");return fo(o,"role","presentation"),fo(o,"data-mce-bogus","all"),No(o,{position:"fixed",left:"0px",top:"0px",width:"100%",height:"100%"}),dn(o,ai("blocker")),dn(o,t.layerClass),{element:g(o),destroy:()=>{yo(o)}}})(t),n=oo(o.element(),"mousedown",e.forceDrop),r=oo(o.element(),"mouseup",e.drop),s=oo(o.element(),"mousemove",e.move),l=oo(o.element(),"mouseout",e.delayDrop);return ri({element:o.element,start:e=>{ao(e,o.element())},stop:()=>{yo(o.element())},destroy:()=>{o.destroy(),r.unbind(),s.unbind(),l.unbind(),n.unbind()}})},mutate:(e,t)=>{e.mutate(t.left,t.top)}});const ii=ce("ephox-snooker").resolve,mi=ii("resizer-bar"),di=ii("resizer-rows"),ui=ii("resizer-cols"),fi=e=>{const t=vn(e.parent(),"."+mi);N(t,yo)},gi=(e,t,o)=>{const n=e.origin();N(t,(t=>{t.each((t=>{const r=o(n,t);dn(r,mi),ao(e.parent(),r)}))}))},hi=(e,t,o,n,r)=>{const s=Go(o),l=t.isResizable,a=n.length>0?ns.positions(n,o):[],c=a.length>0?((e,t)=>j(e.all,((e,o)=>t(e.element)?[o]:[])))(e,l):[];((e,t,o,n)=>{gi(e,t,((e,t)=>{const r=((e,t,o,n)=>{const r=Me.fromTag("div");return No(r,{position:"absolute",left:t+"px",top:o-3.5+"px",height:"7px",width:n+"px"}),go(r,{"data-mce-bogus":"all","data-row":e,role:"presentation"}),r})(t.row,o.left-e.left,t.y-e.top,n);return dn(r,di),r}))})(t,_(a,((e,t)=>O(c,(e=>t===e)))),s,Ho(o));const i=r.length>0?ss.positions(r,o):[],m=i.length>0?((e,t)=>{const o=[];return k(e.grid.columns,(n=>{Ar(e,n).map((e=>e.element)).forall(t)&&o.push(n)})),_(o,(o=>{const n=Nr(e,(e=>e.column===o));return P(n,(e=>t(e.element)))}))})(e,l):[];((e,t,o,n)=>{gi(e,t,((e,t)=>{const r=((e,t,o,n,r)=>{const s=Me.fromTag("div");return No(s,{position:"absolute",left:t-3.5+"px",top:o+"px",height:r+"px",width:"7px"}),go(s,{"data-mce-bogus":"all","data-column":e,role:"presentation"}),s})(t.col,t.x-e.left,o.top-e.top,0,n);return dn(r,ui),r}))})(t,_(i,((e,t)=>O(m,(e=>t===e)))),s,Po(o))},pi=(e,t)=>{if(fi(e),e.isResizable(t)){const o=Dr(t),n=Ur(o),r=Vr(o);hi(o,e,t,n,r)}},bi=(e,t)=>{const o=vn(e.parent(),"."+mi);N(o,t)},wi=e=>{bi(e,(e=>{Eo(e,"display","none")}))},vi=e=>{bi(e,(e=>{Eo(e,"display","block")}))},yi=ii("resizer-bar-dragging"),xi=e=>{const t=(()=>{const e=oi({drag:ti(["xDelta","yDelta","target"])});let t=C.none();const o=(()=>{const e=oi({drag:ti(["xDelta","yDelta"])});return{mutate:(t,o)=>{e.trigger.drag(t,o)},events:e.registry}})();return o.events.drag.bind((o=>{t.each((t=>{e.trigger.drag(o.xDelta,o.yDelta,t)}))})),{assign:e=>{t=C.some(e)},get:()=>t,mutate:o.mutate,events:e.registry}})(),o=((e,t={})=>((e,t,o)=>{let n=!1;const r=oi({start:ti([]),stop:ti([])}),s=li(),l=()=>{m.stop(),s.isOn()&&(s.off(),r.trigger.stop())},c=(e=>{let t=null;const o=()=>{a(t)||(clearTimeout(t),t=null)};return{cancel:o,throttle:(...n)=>{o(),t=setTimeout((()=>{t=null,e.apply(null,n)}),200)}}})(l);s.events.move.bind((o=>{t.mutate(e,o.info)}));const i=e=>(...t)=>{n&&e.apply(null,t)},m=t.sink(si({forceDrop:l,drop:i(l),move:i((e=>{c.cancel(),s.onEvent(e,t)})),delayDrop:i(c.throttle)}),o);return{element:m.element,go:e=>{m.start(e),s.on(),r.trigger.start()},on:()=>{n=!0},off:()=>{n=!1},isActive:()=>n,destroy:()=>{m.destroy()},events:r.registry}})(e,t.mode??ci,t))(t,{});let n=C.none();const r=(e,t)=>C.from(ho(e,t));t.events.drag.bind((e=>{r(e.target,"data-row").each((t=>{const o=tr(e.target,"top");Eo(e.target,"top",o+e.yDelta+"px")})),r(e.target,"data-column").each((t=>{const o=tr(e.target,"left");Eo(e.target,"left",o+e.xDelta+"px")}))}));const s=(e,t)=>tr(e,t)-Xn(e,"data-initial-"+t,0);o.events.stop.bind((()=>{t.get().each((t=>{n.each((o=>{r(t,"data-row").each((e=>{const n=s(t,"top");bo(t,"data-initial-top"),d.trigger.adjustHeight(o,n,parseInt(e,10))})),r(t,"data-column").each((e=>{const n=s(t,"left");bo(t,"data-initial-left"),d.trigger.adjustWidth(o,n,parseInt(e,10))})),pi(e,o)}))}))}));const l=(n,r)=>{d.trigger.startAdjust(),t.assign(n),fo(n,"data-initial-"+r,tr(n,r)),dn(n,yi),Eo(n,"opacity","0.2"),o.go(e.dragContainer())},c=oo(e.parent(),"mousedown",(e=>{var t;t=e.target,un(t,di)&&l(e.target,"top"),(e=>un(e,ui))(e.target)&&l(e.target,"left")})),i=t=>Je(t,e.view()),m=oo(e.view(),"mouseover",(t=>{var r;(r=t.target,an(r,"table",i).filter(gn)).fold((()=>{Oo(t.target)&&!(e=>un(e,"ephox-snooker-resizer-bar")||un(e,"ephox-dragster-blocker"))(t.target)&&fi(e)}),(t=>{o.isActive()&&(n=C.some(t),pi(e,t))}))})),d=oi({adjustHeight:ti(["table","delta","row"]),adjustWidth:ti(["table","delta","column"]),startAdjust:ti([])});return{destroy:()=>{c.unbind(),m.unbind(),o.destroy(),fi(e)},refresh:t=>{pi(e,t)},on:o.on,off:o.off,hideBars:b(wi,e),showBars:b(vi,e),events:d.registry}},Ci=e=>t=>t.options.get(e),Si="100%",Ti=e=>{const t=e.dom,o=t.getParent(e.selection.getStart(),t.isBlock)??e.getBody();return $o(Me.fromDom(o))+"px"},Ri=e=>C.from(e.options.get("table_clone_elements")),Di=Ci("table_header_type"),Oi=Ci("table_column_resizing"),ki=e=>"preservetable"===Oi(e),Ei=e=>"resizetable"===Oi(e),Ni=Ci("table_sizing_mode"),Bi=e=>"relative"===Ni(e),_i=e=>"fixed"===Ni(e),zi=e=>"responsive"===Ni(e),Ai=Ci("table_resize_bars"),Li=Ci("table_style_by_css"),Mi=Ci("table_merge_content_on_paste"),Wi=e=>{const t=e.options,o=t.get("table_default_attributes");return t.isSet("table_default_attributes")?o:((e,t)=>zi(e)||Li(e)?t:_i(e)?{...t,width:Ti(e)}:{...t,width:Si})(e,o)},ji=Ci("table_use_colgroups"),Pi=e=>Me.fromDom(e.getBody()),Ii=e=>t=>Je(t,Pi(e)),Fi=e=>{bo(e,"data-mce-style");const t=e=>bo(e,"data-mce-style");N(ar(e),t),N(cr(e),t),N(mr(e),t)},Hi=e=>Me.fromDom(e.selection.getStart()),$i=e=>e.getBoundingClientRect().width,Vi=e=>e.getBoundingClientRect().height,qi=e=>(t,o)=>{const n=t.dom.getStyle(o,e)||t.dom.getAttrib(o,e);return C.from(n).filter(ve)},Ui=qi("width"),Gi=qi("height"),Ki=e=>nn(e,It("table")).exists(gn),Yi=e=>rn(e,"table"),Ji=(e,t,o)=>{const n=e=>t=>void 0!==o&&o(t)||Je(t,e);return Je(e,t)?C.some({boxes:C.some([e]),start:e,finish:t}):Yi(e).bind((r=>Yi(t).bind((s=>{if(Je(r,s))return C.some({boxes:Jc(r,e,t),start:e,finish:t});if(Qe(r,s)){const o=bn(t,"td,th",n(r)),l=o.length>0?o[o.length-1]:t;return C.some({boxes:Qc(r,e,r,t,s),start:e,finish:l})}if(Qe(s,r)){const o=bn(e,"td,th",n(s)),l=o.length>0?o[o.length-1]:e;return C.some({boxes:Qc(s,e,r,t,s),start:e,finish:l})}return((e,t)=>((e,t,o,n=y)=>{const r=[t].concat(e.up().all(t)),s=[o].concat(e.up().all(o)),l=e=>M(e,n).fold((()=>e),(t=>e.slice(0,t+1))),a=l(r),c=l(s),i=L(a,(t=>O(c,((e,t)=>b(e.eq,t))(e,t))));return{firstpath:a,secondpath:c,shared:i}})(Xl,e,t,void 0))(e,t).shared.bind((l=>an(l,"table",o).bind((o=>{const l=bn(t,"td,th",n(o)),a=l.length>0?l[l.length-1]:t,c=bn(e,"td,th",n(o)),i=c.length>0?c[c.length-1]:e;return C.some({boxes:Qc(o,e,r,t,s),start:i,finish:a})}))))}))))},Qi=(e,t)=>{const o=vn(e,t);return o.length>0?C.some(o):C.none()},Xi=(e,t,o)=>ln(e,t).bind((t=>ln(e,o).bind((e=>Zl(Yi,[t,e]).map((o=>({first:t,last:e,table:o}))))))),Zi=(e,t,o,n,r)=>((e,t)=>L(e,(e=>Ge(e,t))))(e,r).bind((e=>((e,t,o)=>ir(e).bind((n=>((e,t,o,n)=>Er(e,t,Je).bind((t=>{const r=o>0?t.row+t.rowspan-1:t.row,s=n>0?t.column+t.colspan-1:t.column;return kr(e,r+o,s+n).map((e=>e.element))})))(Xc(n),e,t,o))))(e,t,o).bind((e=>((e,t)=>rn(e,"table").bind((o=>ln(o,t).bind((t=>Ji(t,e).bind((e=>e.boxes.map((t=>({boxes:t,start:e.start,finish:e.finish}))))))))))(e,n))))),em=(e,t)=>Qi(e,t),tm=(e,t,o)=>Xi(e,t,o).bind((t=>{const o=t=>Je(e,t),n="thead,tfoot,tbody,table",r=rn(t.first,n,o),s=rn(t.last,n,o);return r.bind((e=>s.bind((o=>Je(e,o)?((e,t,o)=>((e,t,o)=>Gc(e,t,o).bind((t=>((e,t)=>{let o=!0;const n=b(Uc,t);for(let r=t.startRow;r<=t.finishRow;r++)for(let s=t.startCol;s<=t.finishCol;s++)o=o&&kr(e,r,s).exists(n);return o?C.some(t):C.none()})(e,t))))(Xc(e),t,o))(t.table,t.first,t.last):C.none()))))})),om=h,nm=e=>{const t=(e,t)=>po(e,t).exists((e=>parseInt(e,10)>1));return e.length>0&&P(e,(e=>t(e,"rowspan")||t(e,"colspan")))?C.some(e):C.none()},rm=(e,t,o)=>t.length<=1?C.none():tm(e,o.firstSelectedSelector,o.lastSelectedSelector).map((e=>({bounds:e,cells:t}))),sm=(e,t)=>({selection:e,kill:t}),lm=()=>({tag:"none"}),am=e=>({tag:"multiple",elements:e}),cm=e=>({tag:"single",element:e}),im=(e,t,o,n)=>({start:kn.on(e,t),finish:kn.on(o,n)}),mm=(e,t)=>{const o=Ue(e,t);return Dn(Me.fromDom(o.startContainer),o.startOffset,Me.fromDom(o.endContainer),o.endOffset)},dm=im,um=(e,t,o,n,r)=>Je(o,n)?C.none():Ji(o,n,t).bind((t=>{const n=t.boxes.getOr([]);return n.length>1?(r(e,n,t.start,t.finish),C.some(sm(C.some(dm(o,0,o,yn(o))),!0))):C.none()})),fm=Z([{none:["message"]},{success:[]},{failedUp:["cell"]},{failedDown:["cell"]}]),gm=e=>an(e,"tr"),hm={...fm,verify:(e,t,o,n,r,s,l)=>an(n,"td,th",l).bind((o=>an(t,"td,th",l).map((t=>Je(o,t)?Je(n,o)&&yn(o)===r?s(t):fm.none("in same cell"):Zl(gm,[o,t]).fold((()=>((e,t,o)=>{const n=e.getRect(t),r=e.getRect(o);return r.right>n.left&&r.lefts(t))))))).getOr(fm.none("default")),cata:(e,t,o,n,r)=>e.fold(t,o,n,r)},pm=It("br"),bm=(e,t,o)=>t(e,o).bind((e=>Wt(e)&&0===Jo(e).trim().length?bm(e,t,o):C.some(e))),wm=(e,t,o,n)=>((e,t)=>Yt(e,t).filter(pm).orThunk((()=>Yt(e,t-1).filter(pm))))(t,o).bind((t=>n.traverse(t).fold((()=>bm(t,n.gather,e).map(n.relative)),(e=>(e=>$t(e).bind((t=>{const o=Kt(t);return((e,t)=>M(e,b(Je,t)))(o,e).map((n=>((e,t,o,n)=>({parent:e,children:t,element:o,index:n}))(t,o,e,n)))})))(e).map((e=>kn.on(e.parent,e.index))))))),vm=(e,t)=>({left:e.left,top:e.top+t,right:e.right,bottom:e.bottom+t}),ym=(e,t)=>({left:e.left,top:e.top-t,right:e.right,bottom:e.bottom-t}),xm=(e,t,o)=>({left:e.left+t,top:e.top+o,right:e.right+t,bottom:e.bottom+o}),Cm=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom}),Sm=(e,t)=>C.some(e.getRect(t)),Tm=(e,t,o)=>Mt(t)?Sm(e,t).map(Cm):Wt(t)?((e,t,o)=>o>=0&&o0?e.getRangedRect(t,o-1,t,o):C.none())(e,t,o).map(Cm):C.none(),Rm=(e,t)=>Mt(t)?Sm(e,t).map(Cm):Wt(t)?e.getRangedRect(t,0,t,yn(t)).map(Cm):C.none(),Dm=Z([{none:[]},{retry:["caret"]}]),Om=(e,t,o)=>nn(t,ta).fold(y,(t=>Rm(e,t).exists((e=>((e,t)=>e.leftt.right)(o,e))))),km={point:e=>e.bottom,adjuster:(e,t,o,n,r)=>{const s=vm(r,5);return Math.abs(o.bottom-n.bottom)<1||o.top>r.bottom?Dm.retry(s):o.top===r.bottom?Dm.retry(vm(r,1)):Om(e,t,r)?Dm.retry(xm(s,5,0)):Dm.none()},move:vm,gather:Kl},Em=(e,t,o,n,r)=>0===r?C.some(n):((e,t,o)=>e.elementFromPoint(t,o).filter((e=>"table"===Bt(e))).isSome())(e,n.left,t.point(n))?((e,t,o,n,r)=>Em(e,t,o,t.move(n,5),r))(e,t,o,n,r-1):e.situsFromPoint(n.left,t.point(n)).bind((s=>s.start.fold(C.none,(s=>Rm(e,s).bind((l=>t.adjuster(e,s,l,o,n).fold(C.none,(n=>Em(e,t,o,n,r-1))))).orThunk((()=>C.some(n)))),C.none))),Nm=(e,t,o)=>{const n=e.move(o,5),r=Em(t,e,o,n,100).getOr(n);return((e,t,o)=>e.point(t)>o.getInnerHeight()?C.some(e.point(t)-o.getInnerHeight()):e.point(t)<0?C.some(-e.point(t)):C.none())(e,r,t).fold((()=>t.situsFromPoint(r.left,e.point(r))),(o=>(t.scrollBy(0,o),t.situsFromPoint(r.left,e.point(r)-o))))},Bm={tryUp:b(Nm,{point:e=>e.top,adjuster:(e,t,o,n,r)=>{const s=ym(r,5);return Math.abs(o.top-n.top)<1||o.bottome.getSelection().bind((n=>((e,t,o,n)=>{const r=pm(t)?((e,t,o)=>o.traverse(t).orThunk((()=>bm(t,o.gather,e))).map(o.relative))(e,t,n):wm(e,t,o,n);return r.map((e=>({start:e,finish:e})))})(t,n.finish,n.foffset,o).fold((()=>C.some(Wl(n.finish,n.foffset))),(r=>{const s=e.fromSitus(r);return l=hm.verify(e,n.finish,n.foffset,s.finish,s.foffset,o.failure,t),hm.cata(l,(e=>C.none()),(()=>C.none()),(e=>C.some(Wl(e,0))),(e=>C.some(Wl(e,yn(e)))));var l})))),zm=(e,t,o,n,r,s)=>0===s?C.none():Mm(e,t,o,n,r).bind((l=>{const a=e.fromSitus(l),c=hm.verify(e,o,n,a.finish,a.foffset,r.failure,t);return hm.cata(c,(()=>C.none()),(()=>C.some(l)),(l=>Je(o,l)&&0===n?Am(e,o,n,ym,r):zm(e,t,l,0,r,s-1)),(l=>Je(o,l)&&n===yn(l)?Am(e,o,n,vm,r):zm(e,t,l,yn(l),r,s-1)))})),Am=(e,t,o,n,r)=>Tm(e,t,o).bind((t=>Lm(e,r,n(t,Bm.getJumpSize())))),Lm=(e,t,o)=>{const n=kt().browser;return n.isChromium()||n.isSafari()||n.isFirefox()?t.retry(e,o):C.none()},Mm=(e,t,o,n,r)=>Tm(e,o,n).bind((t=>Lm(e,r,t))),Wm=(e,t,o,n,r)=>an(n,"td,th",t).bind((n=>an(n,"table",t).bind((s=>((e,t)=>on(e,(e=>$t(e).exists((e=>Je(e,t)))),void 0).isSome())(r,s)?((e,t,o)=>_m(e,t,o).bind((n=>zm(e,t,n.element,n.offset,o,20).map(e.fromSitus))))(e,t,o).bind((e=>an(e.finish,"td,th",t).map((t=>({start:n,finish:t,range:e}))))):C.none())))),jm=(e,t,o,n,r,s)=>s(n,t).orThunk((()=>Wm(e,t,o,n,r).map((e=>{const t=e.range;return sm(C.some(dm(t.start,t.soffset,t.finish,t.foffset)),!0)})))),Pm=(e,t)=>an(e,"tr",t).bind((e=>an(e,"table",t).bind((o=>{const n=vn(o,"tr");return Je(e,n[0])?((e,t,o)=>Vl(Ul,e,(e=>Tn(e).isSome()),o))(o,0,t).map((e=>{const t=yn(e);return sm(C.some(dm(e,t,e,t)),!0)})):C.none()})))),Im=(e,t)=>an(e,"tr",t).bind((e=>an(e,"table",t).bind((o=>{const n=vn(o,"tr");return Je(e,n[n.length-1])?((e,t,o)=>ql(Ul,e,(e=>Sn(e).isSome()),o))(o,0,t).map((e=>sm(C.some(dm(e,0,e,0)),!0))):C.none()})))),Fm=(e,t,o,n,r,s,l)=>Wm(e,o,n,r,s).bind((e=>um(t,o,e.start,e.finish,l))),Hm=(e,t)=>an(e,"td,th",t),$m=e=>Vt(e).exists(gn),Vm={traverse:Gt,gather:Kl,relative:kn.before,retry:Bm.tryDown,failure:hm.failedDown},qm={traverse:Ut,gather:Gl,relative:kn.before,retry:Bm.tryUp,failure:hm.failedUp},Um=e=>t=>t===e,Gm=Um(38),Km=Um(40),Ym=e=>e>=37&&e<=40,Jm={isBackward:Um(37),isForward:Um(39)},Qm={isBackward:Um(39),isForward:Um(37)},Xm=e=>({elementFromPoint:(t,o)=>Me.fromPoint(Me.fromDom(e.document),t,o),getRect:e=>e.dom.getBoundingClientRect(),getRangedRect:(t,o,n,r)=>{const s=Nn.exact(t,o,n,r);return((e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?C.some(o).map(He):C.none()})(Ue(e,t)))(e,s)},getSelection:()=>Fn(e).map((t=>mm(e,t))),fromSitus:t=>{const o=Nn.relative(t.start,t.finish);return mm(e,o)},situsFromPoint:(t,o)=>Hn(e,t,o).map((e=>im(e.start,e.soffset,e.finish,e.foffset))),clearSelection:()=>{(e=>{_n(e).each((e=>e.removeAllRanges()))})(e)},collapseSelection:(t=!1)=>{Fn(e).each((o=>o.fold((e=>e.collapse(t)),((o,n)=>{const r=t?o:n;Wn(e,r,r)}),((o,n,r,s)=>{const l=t?o:r,a=t?n:s;Mn(e,l,a,l,a)}))))},setSelection:t=>{Mn(e,t.start,t.soffset,t.finish,t.foffset)},setRelativeSelection:(t,o)=>{Wn(e,t,o)},selectNode:t=>{In(e,t,!1)},selectContents:t=>{In(e,t)},getInnerHeight:()=>e.innerHeight,getScrollY:()=>(e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return qo(o,n)})(Me.fromDom(e.document)).top,scrollBy:(t,o)=>{((e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollBy(e,t)})(t,o,Me.fromDom(e.document))}}),Zm=(e,t)=>({rows:e,cols:t}),ed=e=>nn(e,Lt).exists(gn),td=(e,t)=>ed(e)||ed(t),od="data-mce-selected",nd="data-mce-first-selected",rd="data-mce-last-selected",sd="["+od+"]",ld={selected:od,selectedSelector:"td["+od+"],th["+od+"]",firstSelected:nd,firstSelectedSelector:"td["+nd+"],th["+nd+"]",lastSelected:rd,lastSelectedSelector:"td["+rd+"],th["+rd+"]"},ad=(e,t,o)=>({element:o,mergable:rm(t,e,ld),unmergable:nm(e),selection:om(e)}),cd=e=>(t,o)=>{const n=Bt(t),r="col"===n||"colgroup"===n?ir(s=t).bind((e=>em(e,ld.firstSelectedSelector))).fold(g(s),(e=>e[0])):t;var s;return an(r,e,o)},id=cd("th,td,caption"),md=cd("th,td"),dd=e=>{return t=e.model.table.getSelectedCells(),E(t,Me.fromDom);var t},ud=(e,t)=>{e.on("BeforeGetContent",(t=>{const o=o=>{t.preventDefault(),(e=>ir(e[0]).map((e=>{const t=((e,t)=>{const o=e=>Ge(e.element,t),n=To(e),r=vr(n),s=As(e),l=Or(r),a=((e,t)=>{const o=e.grid.columns;let n=e.grid.rows,r=o,s=0,l=0;const a=[],c=[];return G(e.access,(e=>{if(a.push(e),t(e)){c.push(e);const t=e.row,o=t+e.rowspan-1,a=e.column,i=a+e.colspan-1;ts&&(s=o),al&&(l=i)}})),((e,t,o,n,r,s)=>({minRow:e,minCol:t,maxRow:o,maxCol:n,allCells:r,selectedCells:s}))(n,r,s,l,a,c)})(l,o),c="th:not("+t+"),td:not("+t+")",i=sr(n,"th,td",(e=>Ge(e,c)));N(i,yo),((e,t,o,n)=>{const r=_(e,(e=>"colgroup"!==e.section)),s=t.grid.columns,l=t.grid.rows;for(let e=0;eo.maxRow||ao.maxCol||(kr(t,e,a).filter(n).isNone()?al(r,l,e):l=!0)}})(r,l,a,o);const m=((e,t,o,n)=>{if(0===n.minCol&&t.grid.columns===n.maxCol+1)return 0;const r=Es(t,e,o),s=A(r,((e,t)=>e+t),0),l=A(r.slice(n.minCol,n.maxCol+1),((e,t)=>e+t),0),a=l/s*o.pixelWidth()-o.pixelWidth();return o.getCellDelta(a)})(e,Dr(e),s,a);return((e,t,o,n)=>{G(o.columns,(e=>{(e.columnt.maxCol)&&yo(e.element)}));const r=_(rr(e,"tr"),(e=>0===e.dom.childElementCount));N(r,yo),t.minCol!==t.maxCol&&t.minRow!==t.maxRow||N(rr(e,"th,td"),(e=>{bo(e,"rowspan"),bo(e,"colspan")})),bo(e,yr),bo(e,"data-snooker-col-series"),As(e).adjustTableWidth(n)})(n,a,l,m),n})(e,sd);return Fi(t),[t]})))(o).each((o=>{const n="text"===t.format?((e,t)=>{const o=e.getDoc(),n=Qt(Me.fromDom(e.getBody())),r=Me.fromTag("div",o);fo(r,"data-mce-bogus","all"),No(r,{position:"fixed",left:"-9999999px",top:"0",overflow:"hidden",opacity:"0"});const s=(e=>Jt(e)?e:Me.fromDom(Ht(e).dom.body))(n);mo(r,t),ao(s,r);const l=r.dom.innerText;return yo(r),l})(e,o):((e,t)=>E(t,(t=>e.selection.serializer.serialize(t.dom,{}))).join(""))(e,o);t.content=n}))};if(!0===t.selection){const t=(e=>_(dd(e),(e=>Ge(e,ld.selectedSelector))))(e);t.length>=1&&o(t)}})),e.on("BeforeSetContent",(o=>{if(!0===o.selection&&!0===o.paste){const n=dd(e);H(n).each((n=>{ir(n).each((r=>{const s=_((e=>{const t=document.createElement("div");return t.innerHTML=e,Kt(Me.fromDom(t))})(o.content),(e=>"meta"!==Bt(e))),l=It("table");if(Mi(e)&&1===s.length&&l(s[0])){o.preventDefault();const l=Me.fromDom(e.getDoc()),a=pa(l),c=((e,t,o)=>({element:e,clipboard:t,generators:o}))(n,s[0],a);t.pasteCells(r,c).each((()=>{e.focus()}))}}))}))}}))},fd=(e,t)=>e.dispatch("NewRow",{node:t}),gd=(e,t)=>e.dispatch("NewCell",{node:t}),hd=(e,t,o)=>{e.dispatch("TableModified",{...o,table:t})},pd={structure:!1,style:!0},bd={structure:!0,style:!1},wd={structure:!0,style:!0},vd=(e,t)=>Bi(e)?Ms(t):_i(e)?Ls(t):As(t),yd=(e,t,o)=>{const n=e=>"table"===Bt(Pi(e)),r=Ri(e),s=Ei(e)?f:rl,l=t=>{switch(Di(e)){case"section":return Ir();case"sectionCells":return Fr();case"cells":return Hr();default:return((e,t)=>{var o;switch((o=Dr(e),V(o.all,(e=>{const t=hr(e);return"header"===t.type?C.from(t.subType):C.none()}))).getOr(t)){case"section":return Wr();case"sectionCells":return jr();case"cells":return Pr()}})(t,"section")}},a=(n,s,a,c)=>(i,m,d=!1)=>{Fi(i);const u=Me.fromDom(e.getDoc()),f=ha(a,u,r),g={sizing:vd(e,i),resize:Ei(e)?Jn():Qn(),section:l(i)};return s(i)?n(i,m,f,g).bind((n=>{t.refresh(i.dom),N(n.newRows,(t=>{fd(e,t.dom)})),N(n.newCells,(t=>{gd(e,t.dom)}));const r=((t,n)=>n.cursor.fold((()=>{const n=ar(t);return H(n).filter(Oo).map((n=>{o.clearSelectedCells(t.dom);const r=e.dom.createRng();return r.selectNode(n.dom),e.selection.setRng(r),fo(n,"data-mce-selected","1"),r}))}),(n=>{const r=Fl(Hl,n),s=e.dom.createRng();return s.setStart(r.element.dom,r.offset),s.setEnd(r.element.dom,r.offset),e.selection.setRng(s),o.clearSelectedCells(t.dom),C.some(s)})))(i,n);return Oo(i)&&(Fi(i),d||hd(e,i.dom,c)),r.map((e=>({rng:e,effect:c})))})):C.none()},c=a(Oc,(t=>!n(e)||ba(t).rows>1),f,bd),i=a(Dc,(t=>!n(e)||ba(t).columns>1),f,bd);return{deleteRow:c,deleteColumn:i,insertRowsBefore:a(Cc,x,f,bd),insertRowsAfter:a(Sc,x,f,bd),insertColumnsBefore:a(Tc,x,s,bd),insertColumnsAfter:a(Rc,x,s,bd),mergeCells:a(Lc,x,f,bd),unmergeCells:a(Mc,x,f,bd),pasteColsBefore:a(jc,x,f,bd),pasteColsAfter:a(Pc,x,f,bd),pasteRowsBefore:a(Ic,x,f,bd),pasteRowsAfter:a(Fc,x,f,bd),pasteCells:a(Wc,x,f,wd),makeCellsHeader:a(zc,x,f,bd),unmakeCellsHeader:a(Ac,x,f,bd),makeColumnsHeader:a(kc,x,f,bd),unmakeColumnsHeader:a(Ec,x,f,bd),makeRowsHeader:a(Nc,x,f,bd),makeRowsBody:a(Bc,x,f,bd),makeRowsFooter:a(_c,x,f,bd),getTableRowType:Vc,getTableCellType:$c,getTableColType:Hc}},xd=(e,t)=>{e.selection.select(t.dom,!0),e.selection.collapse(!0)},Cd=(e,t,o,n,s)=>{const l=(e=>{const t=e.options,o=t.get("table_default_styles");return t.isSet("table_default_styles")?o:((e,t)=>zi(e)||!Li(e)?t:_i(e)?{...t,width:Ti(e)}:{...t,width:Si})(e,o)})(e),a={styles:l,attributes:Wi(e),colGroups:ji(e)};return e.undoManager.ignore((()=>{const r=((e,t,o,n,r,s=Zc)=>{const l=Me.fromTag("table"),a="cells"!==r;No(l,s.styles),go(l,s.attributes),s.colGroups&&ao(l,(e=>{const t=Me.fromTag("colgroup");return k(e,(()=>ao(t,Me.fromTag("col")))),t})(t));const c=Math.min(e,o);if(a&&o>0){const e=Me.fromTag("thead");ao(l,e);const s=ei(o,t,"sectionCells"===r?c:0,n);mo(e,s)}const i=Me.fromTag("tbody");ao(l,i);const m=ei(a?e-c:e,t,a?0:o,n);return mo(i,m),l})(o,t,s,n,Di(e),a);fo(r,"data-mce-id","__mce");const l=(e=>{const t=Me.fromTag("div"),o=Me.fromDom(e.dom.cloneNode(!0));return ao(t,o),(e=>e.dom.innerHTML)(t)})(r);e.insertContent(l),e.addVisual()})),ln(Pi(e),'table[data-mce-id="__mce"]').map((t=>(_i(e)?la(t):zi(e)?aa(t):(Bi(e)||(e=>r(e)&&-1!==e.indexOf("%"))(l.width))&&sa(t),Fi(t),bo(t,"data-mce-id"),((e,t)=>{N(vn(t,"tr"),(t=>{fd(e,t.dom),N(vn(t,"th,td"),(t=>{gd(e,t.dom)}))}))})(e,t),((e,t)=>{ln(t,"td,th").each(b(xd,e))})(e,t),t.dom))).getOrNull()};var Sd=tinymce.util.Tools.resolve("tinymce.FakeClipboard");const Td="x-tinymce/dom-table-",Rd=Td+"rows",Dd=Td+"columns",Od=e=>{const t=Sd.FakeClipboardItem(e);Sd.write([t])},kd=e=>{const t=Sd.read()??[];return V(t,(t=>C.from(t.getType(e))))},Ed=e=>{kd(e).isSome()&&Sd.clear()},Nd=e=>{e.fold(_d,(e=>Od({[Rd]:e})))},Bd=()=>kd(Rd),_d=()=>Ed(Rd),zd=e=>{e.fold(Ld,(e=>Od({[Dd]:e})))},Ad=()=>kd(Dd),Ld=()=>Ed(Dd),Md=e=>id(Hi(e),Ii(e)).filter(Ki),Wd=(e,t)=>{const o=Ii(e),n=e=>ir(e,o),l=t=>(e=>md(Hi(e),Ii(e)).filter(Ki))(e).bind((e=>n(e).map((o=>t(o,e))))),a=t=>{e.focus()},c=(t,o=!1)=>l(((n,r)=>{const s=ad(dd(e),n,r);t(n,s,o).each(a)})),i=()=>l(((t,o)=>((e,t,o)=>{const n=Dr(e);return Ys(n,t).bind((e=>{const t=Hs(n,o,!1),r=ze(t).rows.slice(e[0].row,e[e.length-1].row+e[e.length-1].rowspan),s=j(r,(e=>{const t=_(e.cells,(e=>!e.isLocked));return t.length>0?[{...e,cells:t}]:[]})),l=$s(s);return de(l.length>0,l)})).map((e=>E(e,(e=>{const t=So(e.element);return N(e.cells,(e=>{const o=To(e.element);Ws(o,"colspan",e.colspan,1),Ws(o,"rowspan",e.rowspan,1),ao(t,o)})),t}))))})(t,ad(dd(e),t,o),ha(f,Me.fromDom(e.getDoc()),C.none())))),m=()=>l(((t,o)=>((e,t)=>{const o=Dr(e);return Js(o,t).map((e=>{const t=e[e.length-1],n=e[0].column,r=t.column+t.colspan,s=((e,t,o)=>{if(zr(e)){const n=_(_r(e),ll(t,o)),r=E(n,(e=>{const n=To(e.element);return sl(n,"span",o-t),n})),s=Me.fromTag("colgroup");return mo(s,r),[s]}return[]})(o,n,r),l=((e,t,o)=>E(e.all,(e=>{const n=_(e.cells,ll(t,o)),r=E(n,(e=>{const n=To(e.element);return sl(n,"colspan",o-t),n})),s=Me.fromTag("tr");return mo(s,r),s})))(o,n,r);return[...s,...l]}))})(t,ad(dd(e),t,o)))),d=(t,o)=>o().each((o=>{const n=E(o,(e=>To(e)));l(((o,r)=>{const s=pa(Me.fromDom(e.getDoc())),l=((e,t,o,n)=>({selection:om(e),clipboard:o,generators:n}))(dd(e),0,n,s);t(o,l).each(a)}))})),g=e=>(t,o)=>((e,t)=>X(e,t)?C.from(e[t]):C.none())(o,"type").each((t=>{c(e(t),o.no_events)}));G({mceTableSplitCells:()=>c(t.unmergeCells),mceTableMergeCells:()=>c(t.mergeCells),mceTableInsertRowBefore:()=>c(t.insertRowsBefore),mceTableInsertRowAfter:()=>c(t.insertRowsAfter),mceTableInsertColBefore:()=>c(t.insertColumnsBefore),mceTableInsertColAfter:()=>c(t.insertColumnsAfter),mceTableDeleteCol:()=>c(t.deleteColumn),mceTableDeleteRow:()=>c(t.deleteRow),mceTableCutCol:()=>m().each((e=>{zd(e),c(t.deleteColumn)})),mceTableCutRow:()=>i().each((e=>{Nd(e),c(t.deleteRow)})),mceTableCopyCol:()=>m().each((e=>zd(e))),mceTableCopyRow:()=>i().each((e=>Nd(e))),mceTablePasteColBefore:()=>d(t.pasteColsBefore,Ad),mceTablePasteColAfter:()=>d(t.pasteColsAfter,Ad),mceTablePasteRowBefore:()=>d(t.pasteRowsBefore,Bd),mceTablePasteRowAfter:()=>d(t.pasteRowsAfter,Bd),mceTableDelete:()=>Md(e).each((t=>{ir(t,o).filter(w(o)).each((t=>{const o=Me.fromText("");if(so(t,o),yo(t),e.dom.isEmpty(e.getBody()))e.setContent(""),e.selection.setCursorLocation();else{const t=e.dom.createRng();t.setStart(o.dom,0),t.setEnd(o.dom,0),e.selection.setRng(t),e.nodeChanged()}}))})),mceTableCellToggleClass:(t,o)=>{l((t=>{const n=dd(e),r=P(n,(t=>e.formatter.match("tablecellclass",{value:o},t.dom))),s=r?e.formatter.remove:e.formatter.apply;N(n,(e=>s("tablecellclass",{value:o},e.dom))),hd(e,t.dom,pd)}))},mceTableToggleClass:(t,o)=>{l((t=>{e.formatter.toggle("tableclass",{value:o},t.dom),hd(e,t.dom,pd)}))},mceTableToggleCaption:()=>{Md(e).each((t=>{ir(t,o).each((o=>{sn(o,"caption").fold((()=>{const t=Me.fromTag("caption");ao(t,Me.fromText("Caption")),((e,t)=>{Yt(e,0).fold((()=>{ao(e,t)}),(e=>{ro(e,t)}))})(o,t),e.selection.setCursorLocation(t.dom,0)}),(n=>{It("caption")(t)&&Ye("td",o).each((t=>e.selection.setCursorLocation(t.dom,0))),yo(n)})),hd(e,o.dom,bd)}))}))},mceTableSizingMode:(t,n)=>(t=>Md(e).each((n=>{zi(e)||_i(e)||Bi(e)||ir(n,o).each((o=>{"relative"!==t||Rl(o)?"fixed"!==t||Dl(o)?"responsive"!==t||Ol(o)||aa(o):la(o):sa(o),Fi(o),hd(e,o.dom,bd)}))})))(n),mceTableCellType:g((e=>"th"===e?t.makeCellsHeader:t.unmakeCellsHeader)),mceTableColType:g((e=>"th"===e?t.makeColumnsHeader:t.unmakeColumnsHeader)),mceTableRowType:g((e=>{switch(e){case"header":return t.makeRowsHeader;case"footer":return t.makeRowsFooter;default:return t.makeRowsBody}}))},((t,o)=>e.addCommand(o,t))),e.addCommand("mceInsertTable",((t,o)=>{((e,t,o,n={})=>{const r=e=>u(e)&&e>0;if(r(t)&&r(o)){const r=n.headerRows||0,s=n.headerColumns||0;return Cd(e,o,t,s,r)}console.error("Invalid values for mceInsertTable - rows and columns values are required to insert a table.")})(e,o.rows,o.columns,o.options)})),e.addCommand("mceTableApplyCellStyle",((t,o)=>{const l=e=>"tablecell"+e.toLowerCase().replace("-","");if(!s(o))return;const a=_(dd(e),Ki);if(0===a.length)return;const c=((e,t)=>{const o={};return((e,t,o,n)=>{G(e,((e,r)=>{(t(e,r)?o:n)(e,r)}))})(e,t,(e=>(t,o)=>{e[o]=t})(o),f),o})(o,((t,o)=>e.formatter.has(l(o))&&r(t)));(e=>{for(const t in e)if(U.call(e,t))return!1;return!0})(c)||(G(c,((t,o)=>{const n=l(o);N(a,(o=>{""===t?e.formatter.remove(n,{value:null},o.dom,!0):e.formatter.apply(n,{value:t},o.dom)}))})),n(a[0]).each((t=>hd(e,t.dom,pd))))}))},jd=e=>!un(Me.fromDom(e.target),"ephox-snooker-resizer-bar"),Pd=(e,t)=>{const o=(r=ld.selectedSelector,{get:()=>em(Me.fromDom(e.getBody()),r).fold((()=>md(Hi(e),Ii(e)).fold(lm,cm)),am)}),n=((e,t,o)=>{const n=t=>{bo(t,e.selected),bo(t,e.firstSelected),bo(t,e.lastSelected)},r=t=>{fo(t,e.selected,"1")},s=e=>{l(e),o()},l=t=>{const o=vn(t,`${e.selectedSelector},${e.firstSelectedSelector},${e.lastSelectedSelector}`);N(o,n)};return{clearBeforeUpdate:l,clear:s,selectRange:(o,n,l,a)=>{s(o),N(n,r),fo(l,e.firstSelected,"1"),fo(a,e.lastSelected,"1"),t(n,l,a)},selectedSelector:e.selectedSelector,firstSelectedSelector:e.firstSelectedSelector,lastSelectedSelector:e.lastSelectedSelector}})(ld,((t,o,n)=>{ir(o).each((r=>{const s=E(t,(e=>e.dom)),l=Ri(e),a=ha(f,Me.fromDom(e.getDoc()),l),c=((e,t,o)=>{const n=Dr(e);return Ys(n,t).map((e=>{const t=Hs(n,o,!1),{rows:r}=ze(t),s=((e,t)=>{const o=e.slice(0,t[t.length-1].row+1),n=$s(o);return j(n,(e=>{const o=e.cells.slice(0,t[t.length-1].column+1);return E(o,(e=>e.element))}))})(r,e),l=((e,t)=>{const o=e.slice(t[0].row+t[0].rowspan-1,e.length),n=$s(o);return j(n,(e=>{const o=e.cells.slice(t[0].column+t[0].colspan-1,e.cells.length);return E(o,(e=>e.element))}))})(r,e);return{upOrLeftCells:s,downOrRightCells:l}}))})(r,{selection:dd(e)},a).map((e=>K(e,(e=>E(e,(e=>e.dom)))))).getOrUndefined();((e,t,o,n,r)=>{e.dispatch("TableSelectionChange",{cells:t,start:o,finish:n,otherCells:r})})(e,s,o.dom,n.dom,c)}))}),(()=>(e=>{e.dispatch("TableSelectionClear")})(e)));var r;return e.on("init",(o=>{const r=e.getWin(),s=Pi(e),l=Ii(e),a=((e,t,o,n)=>{const r=((e,t,o,n)=>{const r=fe(),s=r.clear,l=s=>{r.on((r=>{n.clearBeforeUpdate(t),Hm(s.target,o).each((l=>{Ji(r,l,o).each((o=>{const r=o.boxes.getOr([]);if(1===r.length){const e=r[0],o="false"===hn(e),l=ie(fn(s.target),e,Je);o&&l&&n.selectRange(t,r,e,e)}else r.length>1&&(n.selectRange(t,r,o.start,o.finish),e.selectContents(l))}))}))}))};return{clearstate:s,mousedown:e=>{n.clear(t),Hm(e.target,o).filter($m).each(r.set)},mouseover:e=>{l(e)},mouseup:e=>{l(e),s()}}})(Xm(e),t,o,n);return{clearstate:r.clearstate,mousedown:r.mousedown,mouseover:r.mouseover,mouseup:r.mouseup}})(r,s,l,n),c=((e,t,o,n)=>{const r=Xm(e),s=()=>(n.clear(t),C.none());return{keydown:(e,l,a,c,i,m)=>{const d=e.raw,u=d.which,f=!0===d.shiftKey,g=Qi(t,n.selectedSelector).fold((()=>(Ym(u)&&!f&&n.clearBeforeUpdate(t),Ym(u)&&f&&!td(l,c)?C.none:Km(u)&&f?b(Fm,r,t,o,Vm,c,l,n.selectRange):Gm(u)&&f?b(Fm,r,t,o,qm,c,l,n.selectRange):Km(u)?b(jm,r,o,Vm,c,l,Im):Gm(u)?b(jm,r,o,qm,c,l,Pm):C.none)),(e=>{const o=o=>()=>{const s=V(o,(o=>((e,t,o,n,r)=>Zi(n,e,t,r.firstSelectedSelector,r.lastSelectedSelector).map((e=>(r.clearBeforeUpdate(o),r.selectRange(o,e.boxes,e.start,e.finish),e.boxes))))(o.rows,o.cols,t,e,n)));return s.fold((()=>Xi(t,n.firstSelectedSelector,n.lastSelectedSelector).map((e=>{const o=Km(u)||m.isForward(u)?kn.after:kn.before;return r.setRelativeSelection(kn.on(e.first,0),o(e.table)),n.clear(t),sm(C.none(),!0)}))),(e=>C.some(sm(C.none(),!0))))};return Ym(u)&&f&&!td(l,c)?C.none:Km(u)&&f?o([Zm(1,0)]):Gm(u)&&f?o([Zm(-1,0)]):m.isBackward(u)&&f?o([Zm(0,-1),Zm(-1,0)]):m.isForward(u)&&f?o([Zm(0,1),Zm(1,0)]):Ym(u)&&!f?s:C.none}));return g()},keyup:(e,r,s,l,a)=>Qi(t,n.selectedSelector).fold((()=>{const c=e.raw,i=c.which;return!0===c.shiftKey&&Ym(i)&&td(r,l)?((e,t,o,n,r,s,l)=>Je(o,r)&&n===s?C.none():an(o,"td,th",t).bind((o=>an(r,"td,th",t).bind((n=>um(e,t,o,n,l))))))(t,o,r,s,l,a,n.selectRange):C.none()}),C.none)}})(r,s,l,n),i=((e,t,o,n)=>{const r=Xm(e);return(e,s)=>{n.clearBeforeUpdate(t),Ji(e,s,o).each((e=>{const o=e.boxes.getOr([]);n.selectRange(t,o,e.start,e.finish),r.selectContents(s),r.collapseSelection()}))}})(r,s,l,n);e.on("TableSelectorChange",(e=>i(e.start,e.finish)));const m=(t,o)=>{(e=>!0===e.raw.shiftKey)(t)&&(o.kill&&t.kill(),o.selection.each((t=>{const o=Nn.relative(t.start,t.finish),n=Ue(r,o);e.selection.setRng(n)})))},d=e=>0===e.button,u=(()=>{const e=ee(Me.fromDom(s)),t=ee(0);return{touchEnd:o=>{const n=Me.fromDom(o.target);if(It("td")(n)||It("th")(n)){const r=e.get(),s=t.get();Je(r,n)&&o.timeStamp-s<300&&(o.preventDefault(),i(n,n))}e.set(n),t.set(o.timeStamp)}}})();e.on("dragstart",(e=>{a.clearstate()})),e.on("mousedown",(e=>{d(e)&&jd(e)&&a.mousedown(no(e))})),e.on("mouseover",(e=>{var t;(void 0===(t=e).buttons||1&t.buttons)&&jd(e)&&a.mouseover(no(e))})),e.on("mouseup",(e=>{d(e)&&jd(e)&&a.mouseup(no(e))})),e.on("touchend",u.touchEnd),e.on("keyup",(t=>{const o=no(t);if(o.raw.shiftKey&&Ym(o.raw.which)){const t=e.selection.getRng(),n=Me.fromDom(t.startContainer),r=Me.fromDom(t.endContainer);c.keyup(o,n,t.startOffset,r,t.endOffset).each((e=>{m(o,e)}))}})),e.on("keydown",(o=>{const n=no(o);t.hide();const r=e.selection.getRng(),s=Me.fromDom(r.startContainer),l=Me.fromDom(r.endContainer),a=Zo(Jm,Qm)(Me.fromDom(e.selection.getStart()));c.keydown(n,s,r.startOffset,l,r.endOffset,a).each((e=>{m(n,e)})),t.show()})),e.on("NodeChange",(()=>{const t=e.selection,o=Me.fromDom(t.getStart()),r=Me.fromDom(t.getEnd());Zl(ir,[o,r]).fold((()=>n.clear(s)),f)}))})),e.on("PreInit",(()=>{e.serializer.addTempAttr(ld.firstSelected),e.serializer.addTempAttr(ld.lastSelected)})),{getSelectedCells:()=>((e,t)=>{switch(e.tag){case"none":return t();case"single":return(e=>[e.dom])(e.element);case"multiple":return(e=>E(e,(e=>e.dom)))(e.elements)}})(o.get(),g([])),clearSelectedCells:e=>n.clear(Me.fromDom(e))}},Id=e=>m(e)&&"TABLE"===e.nodeName,Fd="bar-",Hd=e=>"false"!==ho(e,"data-mce-resize"),$d=e=>{const t=fe(),o=fe(),n=fe();let r,s,l,a;const c=t=>vd(e,t),i=()=>ki(e)?Qn():Jn(),m=(t,o,n,m)=>{const d=(e=>{return pe(t=e,"corner-")?(e=>e.substring(7))(t):t;var t})(o),u=be(d,"e"),f=pe(d,"n");if(""===s&&sa(t),""===a&&(e=>{const t=(e=>jo(e)+"px")(e);Tl(e,C.none(),C.some(t)),ra(e)})(t),n!==r&&""!==s){Eo(t,"width",s);const o=i(),l=c(t),a=ki(e)||u?(e=>ba(e).columns)(t)-1:0;ol(t,n-r,a,o,l)}else if((e=>/^(\d+(\.\d+)?)%$/.test(e))(s)){const e=parseFloat(s.replace("%",""));Eo(t,"width",n*e/r+"%")}if((e=>/^(\d+(\.\d+)?)px$/.test(e))(s)&&(e=>{const t=Dr(e);zr(t)||N(ar(e),(e=>{const t=Bo(e,"width");Eo(e,"width",t),bo(e,"width")}))})(t),m!==l&&""!==a){Eo(t,"height",a);const e=f?0:(e=>ba(e).rows)(t)-1;nl(t,m-l,e)}};e.on("init",(()=>{const r=((e,t)=>((e,t)=>({parent:g(e),view:g(e),dragContainer:g(e),origin:()=>Go(e),isResizable:t}))(Me.fromDom(e.getBody()),t))(e,Hd);if(n.set(r),(e=>{const t=e.options.get("object_resizing");return D(t.split(","),"table")})(e)&&Ai(e)){const n=((e,t,o)=>{const n=ns,r=ss,s=xi(e),l=oi({beforeResize:ti(["table","type"]),afterResize:ti(["table","type"]),startDrag:ti([])});return s.events.adjustHeight.bind((e=>{const t=e.table;l.trigger.beforeResize(t,"row");const o=n.delta(e.delta,t);nl(t,o,e.row),l.trigger.afterResize(t,"row")})),s.events.startAdjust.bind((e=>{l.trigger.startDrag()})),s.events.adjustWidth.bind((e=>{const n=e.table;l.trigger.beforeResize(n,"col");const s=r.delta(e.delta,n),a=o(n);ol(n,s,e.column,t,a),l.trigger.afterResize(n,"col")})),{on:s.on,off:s.off,refreshBars:s.refresh,hideBars:s.hideBars,showBars:s.showBars,destroy:s.destroy,events:l.registry}})(r,i(),c);e.mode.isReadOnly()||n.on(),n.events.startDrag.bind((o=>{t.set(e.selection.getRng())})),n.events.beforeResize.bind((t=>{const o=t.table.dom;((e,t,o,n,r)=>{e.dispatch("ObjectResizeStart",{target:t,width:o,height:n,origin:r})})(e,o,$i(o),Vi(o),Fd+t.type)})),n.events.afterResize.bind((o=>{const n=o.table,r=n.dom;Fi(n),t.on((t=>{e.selection.setRng(t),e.focus()})),((e,t,o,n,r)=>{e.dispatch("ObjectResized",{target:t,width:o,height:n,origin:r})})(e,r,$i(r),Vi(r),Fd+o.type),e.undoManager.add()})),o.set(n)}})),e.on("ObjectResizeStart",(t=>{const o=t.target;if(Id(o)&&!e.mode.isReadOnly()){const n=Me.fromDom(o);N(e.dom.select(".mce-clonedresizable"),(t=>{e.dom.addClass(t,"mce-"+Oi(e)+"-columns")})),!Dl(n)&&_i(e)?la(n):!Rl(n)&&Bi(e)&&sa(n),Ol(n)&&pe(t.origin,Fd)&&sa(n),r=t.width,s=zi(e)?"":Ui(e,o).getOr(""),l=t.height,a=Gi(e,o).getOr("")}})),e.on("ObjectResized",(t=>{const o=t.target;if(Id(o)){const n=Me.fromDom(o),r=t.origin;(e=>pe(e,"corner-"))(r)&&m(n,r,t.width,t.height),Fi(n),hd(e,n.dom,pd)}}));const d=()=>{o.on((e=>{e.on(),e.showBars()}))},u=()=>{o.on((e=>{e.off(),e.hideBars()}))};return e.on("DisabledStateChange",(e=>{e.state?u():d()})),e.on("SwitchMode",(()=>{e.mode.isReadOnly()?u():d()})),e.on("dragstart dragend",(e=>{"dragstart"===e.type?u():d()})),e.on("remove",(()=>{o.on((e=>{e.destroy()}))})),{refresh:e=>{o.on((t=>t.refreshBars(Me.fromDom(e))))},hide:()=>{o.on((e=>e.hideBars()))},show:()=>{o.on((e=>e.showBars()))}}},Vd=e=>{(e=>{const t=e.options.register;t("table_clone_elements",{processor:"string[]"}),t("table_use_colgroups",{processor:"boolean",default:!0}),t("table_header_type",{processor:e=>{const t=D(["section","cells","sectionCells","auto"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be one of: section, cells, sectionCells or auto."}},default:"section"}),t("table_sizing_mode",{processor:"string",default:"auto"}),t("table_default_attributes",{processor:"object",default:{border:"1"}}),t("table_default_styles",{processor:"object",default:{"border-collapse":"collapse"}}),t("table_column_resizing",{processor:e=>{const t=D(["preservetable","resizetable"],e);return t?{value:e,valid:t}:{valid:!1,message:"Must be preservetable, or resizetable."}},default:"preservetable"}),t("table_resize_bars",{processor:"boolean",default:!0}),t("table_style_by_css",{processor:"boolean",default:!0}),t("table_merge_content_on_paste",{processor:"boolean",default:!0})})(e);const t=$d(e),o=Pd(e,t),n=yd(e,t,o);return Wd(e,n),((e,t)=>{const o=Ii(e),n=t=>md(Hi(e)).bind((n=>ir(n,o).map((o=>{const r=ad(dd(e),o,n);return t(o,r)})))).getOr("");G({mceTableRowType:()=>n(t.getTableRowType),mceTableCellType:()=>n(t.getTableCellType),mceTableColType:()=>n(t.getTableColType)},((t,o)=>e.addQueryValueHandler(o,t)))})(e,n),ud(e,n),{getSelectedCells:o.getSelectedCells,clearSelectedCells:o.clearSelectedCells}};e.add("dom",(e=>({table:Vd(e)})))}(); \ No newline at end of file diff --git a/public/tinymce/skins/content/dark/content.css b/public/tinymce/skins/content/dark/content.css new file mode 100644 index 0000000..32e8ebd --- /dev/null +++ b/public/tinymce/skins/content/dark/content.css @@ -0,0 +1,75 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body { + background-color: #222f3e; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem; +} +a { + color: #4099ff; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #6d737b; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #8a8f97; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #6d737b; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #6d737b; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #6d737b; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #6d737b; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/dark/content.js b/public/tinymce/skins/content/dark/content.js new file mode 100644 index 0000000..f6a4e70 --- /dev/null +++ b/public/tinymce/skins/content/dark/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/dark/content.css', `body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/dark/content.min.css b/public/tinymce/skins/content/dark/content.min.css new file mode 100644 index 0000000..b0fd16d --- /dev/null +++ b/public/tinymce/skins/content/dark/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/dark/content.min.ts b/public/tinymce/skins/content/dark/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/dark/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/dark/content.ts b/public/tinymce/skins/content/dark/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/dark/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/default/content.css b/public/tinymce/skins/content/default/content.css new file mode 100644 index 0000000..84253b6 --- /dev/null +++ b/public/tinymce/skins/content/default/content.css @@ -0,0 +1,70 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #ccc; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #999; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #ccc; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #e8e8e8; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #ccc; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #ccc; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/default/content.js b/public/tinymce/skins/content/default/content.js new file mode 100644 index 0000000..b8156a4 --- /dev/null +++ b/public/tinymce/skins/content/default/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/default/content.css', `body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/default/content.min.css b/public/tinymce/skins/content/default/content.min.css new file mode 100644 index 0000000..44e18ac --- /dev/null +++ b/public/tinymce/skins/content/default/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/default/content.min.ts b/public/tinymce/skins/content/default/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/default/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/default/content.ts b/public/tinymce/skins/content/default/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/default/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/document/content.css b/public/tinymce/skins/content/document/content.css new file mode 100644 index 0000000..54ce586 --- /dev/null +++ b/public/tinymce/skins/content/document/content.css @@ -0,0 +1,75 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@media screen { + html { + background: #f4f4f4; + min-height: 100%; + } +} +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} +@media screen { + body { + background-color: #fff; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.15); + box-sizing: border-box; + margin: 1rem auto 0; + max-width: 820px; + min-height: calc(100vh - 1rem); + padding: 4rem 6rem 6rem 6rem; + } +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #ccc; +} +figure figcaption { + color: #999; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #ccc; + border-style: solid; + border-width: 1px 0 0 0; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #ccc; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #ccc; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/document/content.js b/public/tinymce/skins/content/document/content.js new file mode 100644 index 0000000..a7c3c47 --- /dev/null +++ b/public/tinymce/skins/content/document/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/document/content.css', `@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/document/content.min.css b/public/tinymce/skins/content/document/content.min.css new file mode 100644 index 0000000..af24a0b --- /dev/null +++ b/public/tinymce/skins/content/document/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/document/content.min.ts b/public/tinymce/skins/content/document/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/document/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/document/content.ts b/public/tinymce/skins/content/document/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/document/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/tinymce-5-dark/content.css b/public/tinymce/skins/content/tinymce-5-dark/content.css new file mode 100644 index 0000000..87e17f2 --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5-dark/content.css @@ -0,0 +1,75 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body { + background-color: #2f3742; + color: #dfe0e4; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem; +} +a { + color: #4099ff; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #6d737b; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #8a8f97; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #6d737b; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #6d737b; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #6d737b; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #6d737b; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/tinymce-5-dark/content.js b/public/tinymce/skins/content/tinymce-5-dark/content.js new file mode 100644 index 0000000..52320f3 --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5-dark/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/tinymce-5-dark/content.css', `body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/tinymce-5-dark/content.min.css b/public/tinymce/skins/content/tinymce-5-dark/content.min.css new file mode 100644 index 0000000..8568f66 --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5-dark/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/tinymce-5-dark/content.min.ts b/public/tinymce/skins/content/tinymce-5-dark/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5-dark/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/tinymce-5-dark/content.ts b/public/tinymce/skins/content/tinymce-5-dark/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5-dark/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/tinymce-5/content.css b/public/tinymce/skins/content/tinymce-5/content.css new file mode 100644 index 0000000..84253b6 --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5/content.css @@ -0,0 +1,70 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #ccc; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #999; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #ccc; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #e8e8e8; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #ccc; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #ccc; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/tinymce-5/content.js b/public/tinymce/skins/content/tinymce-5/content.js new file mode 100644 index 0000000..1a0da2d --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/tinymce-5/content.css', `body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/tinymce-5/content.min.css b/public/tinymce/skins/content/tinymce-5/content.min.css new file mode 100644 index 0000000..44e18ac --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/tinymce-5/content.min.ts b/public/tinymce/skins/content/tinymce-5/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/tinymce-5/content.ts b/public/tinymce/skins/content/tinymce-5/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/tinymce-5/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/writer/content.css b/public/tinymce/skins/content/writer/content.css new file mode 100644 index 0000000..bdf30d1 --- /dev/null +++ b/public/tinymce/skins/content/writer/content.css @@ -0,0 +1,71 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem auto; + max-width: 900px; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #ccc; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #999; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #ccc; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #e8e8e8; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #ccc; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #ccc; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/tinymce/skins/content/writer/content.js b/public/tinymce/skins/content/writer/content.js new file mode 100644 index 0000000..83f3a22 --- /dev/null +++ b/public/tinymce/skins/content/writer/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('content/writer/content.css', `body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}`) \ No newline at end of file diff --git a/public/tinymce/skins/content/writer/content.min.css b/public/tinymce/skins/content/writer/content.min.css new file mode 100644 index 0000000..44e53a8 --- /dev/null +++ b/public/tinymce/skins/content/writer/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} diff --git a/public/tinymce/skins/content/writer/content.min.ts b/public/tinymce/skins/content/writer/content.min.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/writer/content.min.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/content/writer/content.ts b/public/tinymce/skins/content/writer/content.ts new file mode 100644 index 0000000..e2fb5ef --- /dev/null +++ b/public/tinymce/skins/content/writer/content.ts @@ -0,0 +1,3 @@ +export interface Classes { + "mce-content-body": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/content.css b/public/tinymce/skins/ui/oxide-dark/content.css new file mode 100644 index 0000000..53f5ace --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.css @@ -0,0 +1,1025 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #1b3b60; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #006ce7; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #1b3b60; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #1b3b60; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #1b3b60; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #006ce7; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; + border-radius: 0.3em; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #282a36; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6272a4; +} +.token.punctuation { + color: #f8f8f2; +} +.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #ff79c6; +} +.token.boolean, +.token.number { + color: #bd93f9; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #50fa7b; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #f8f8f2; +} +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #f1fa8c; +} +.token.keyword { + color: #8be9fd; +} +.token.regex, +.token.important { + color: #ffb86c; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.3); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.3); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #4099ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #4099ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #4099ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #4099ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #4099ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #4099ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #4099ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid transparent; + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: lighten; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #4099ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #99c4f5; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #ffeb99; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #eb9999; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #99c4f5; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #ffeb99; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #eb9999; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/public/tinymce/skins/ui/oxide-dark/content.inline.css b/public/tinymce/skins/ui/oxide-dark/content.inline.css new file mode 100644 index 0000000..9037e9e --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.inline.css @@ -0,0 +1,1031 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} diff --git a/public/tinymce/skins/ui/oxide-dark/content.inline.js b/public/tinymce/skins/ui/oxide-dark/content.inline.js new file mode 100644 index 0000000..ca38598 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.inline.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/oxide-dark/content.inline.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide-dark/content.inline.min.css b/public/tinymce/skins/ui/oxide-dark/content.inline.min.css new file mode 100644 index 0000000..c82c8e0 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.inline.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static} diff --git a/public/tinymce/skins/ui/oxide-dark/content.inline.min.ts b/public/tinymce/skins/ui/oxide-dark/content.inline.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.inline.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/content.inline.ts b/public/tinymce/skins/ui/oxide-dark/content.inline.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.inline.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/content.js b/public/tinymce/skins/ui/oxide-dark/content.js new file mode 100644 index 0000000..9c0ba41 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/oxide-dark/content.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #1b3b60}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #006ce7}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#1b3b60;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#1b3b60}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#1b3b60;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #006ce7}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#99c4f5}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#ffeb99}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#eb9999}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#99c4f5;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#ffeb99;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#eb9999;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide-dark/content.min.css b/public/tinymce/skins/ui/oxide-dark/content.min.css new file mode 100644 index 0000000..58fe1cf --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #1b3b60}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #006ce7}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#1b3b60;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#1b3b60}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#1b3b60;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #006ce7}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#99c4f5}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#ffeb99}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#eb9999}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#99c4f5;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#ffeb99;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#eb9999;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse} diff --git a/public/tinymce/skins/ui/oxide-dark/content.min.ts b/public/tinymce/skins/ui/oxide-dark/content.min.ts new file mode 100644 index 0000000..03385ce --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "constant": string; + "deleted": string; + "property": string; + "symbol": string; + "tag": string; + "boolean": string; + "number": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "variable": string; + "atrule": string; + "attr-value": string; + "class-name": string; + "function": string; + "keyword": string; + "important": string; + "regex": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/content.ts b/public/tinymce/skins/ui/oxide-dark/content.ts new file mode 100644 index 0000000..2027406 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/content.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "constant": string; + "symbol": string; + "deleted": string; + "boolean": string; + "number": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "variable": string; + "atrule": string; + "attr-value": string; + "function": string; + "class-name": string; + "keyword": string; + "regex": string; + "important": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/skin.css b/public/tinymce/skins/ui/oxide-dark/skin.css new file mode 100644 index 0000000..ff6587c --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.css @@ -0,0 +1,5618 @@ +.tox { + box-shadow: none; + box-sizing: content-box; + cursor: auto; + font-style: normal; + font-weight: normal; + line-height: normal; + -webkit-tap-highlight-color: transparent; + -webkit-text-decoration: none; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; +} +.tox *:not(svg):not(rect) { + box-sizing: inherit; + color: inherit; + cursor: inherit; + direction: inherit; + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + line-height: inherit; + -webkit-tap-highlight-color: inherit; + text-align: inherit; + text-decoration: inherit; + text-shadow: inherit; + text-transform: inherit; + vertical-align: inherit; + white-space: inherit; +} +.tox *:not(svg):not(rect) { + /* stylelint-disable-line no-duplicate-selectors */ + background: transparent; + border: 0; + box-shadow: none; + float: none; + height: auto; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + width: auto; +} +.tox:not([dir=rtl]) { + direction: ltr; + text-align: left; +} +.tox[dir=rtl] { + direction: rtl; + text-align: right; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.tox { + color: var(--tox-private-color-black, #222f3e); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-font-size-base, 16px); +} +.tox-tinymce { + border: 2px solid #161f29; + border-radius: 10px; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + overflow: hidden; + position: relative; + visibility: inherit !important; +} +.tox.tox-tinymce-inline { + border: none; + box-shadow: none; + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-header { + background-color: #222F3E; + border: 2px solid #161f29; + border-radius: 10px; + box-shadow: none; + overflow: hidden; +} +.tox-tinymce-aux { + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + z-index: var(--tox-private-z-index-sink, 1300); +} +.tox[dir=rtl] .tox-icon--flip svg { + transform: rotateY(180deg); +} +.tox .tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-editor-header { + display: grid; + grid-template-columns: 1fr min-content; + z-index: 2; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: #222F3E; + border-bottom: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: none; + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { + transition: box-shadow 0.5s; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: none; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: #222F3E; + box-shadow: none; + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: none; +} +.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { + background: none; + border: none; + box-shadow: none; + padding: 0; +} +.tox-editor-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox-editor-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox-editor-dock-transition { + transition: visibility 0s linear 0.25s, opacity 0.25s ease; +} +.tox-editor-dock-transition.tox-editor-dock-fadein { + transition-delay: 0s; +} +.tox .accessibility-issue__header { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox #accessibility-issue__subheader { + font-size: 16px; + color: #fff; +} +.tox .accessbility-sr-only { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(0 0 99.9% 99.9%); + overflow: hidden; + height: 1px; + width: 1px; + padding: 0; + border: 0; +} +.tox .accessibility-issue__description { + align-items: stretch; + border-radius: 6px; + justify-content: space-between; +} +.tox .accessibility-issue__description > div { + padding-bottom: 4px; +} +.tox .accessibility-issue__description > div > div { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description > div > div .tox-icon svg { + display: block; +} +.tox #accessibility-issue__contentID { + margin-top: 8px; + margin-bottom: 8px; +} +.tox #accessibility-issue__contentID span:first-child { + font-weight: bold; +} +.tox #accessibility-issue__document { + padding-bottom: 8px; +} +.tox .accessibility-issue__repair { + margin-top: 8px; +} +.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error { + color: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { + background-color: #1f354f; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { + font-size: 14px; + color: #99c4f5; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg { + fill: #99c4f5; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { + background-color: #006ce7; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus { + background-color: #0060ce; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { + background-color: #0054b4; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { + background-color: #383f38; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { + font-size: 14px; + color: #ffeb99; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg { + fill: #ffeb99; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { + background-color: #FFE89D; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus { + background-color: #F2D574; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { + background-color: #E8C657; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { + background-color: #332a38; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { + font-size: 14px; + color: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg { + fill: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { + background-color: #F2BFBF; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus { + background-color: #E9A4A4; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { + background-color: #EE9494; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { + background-color: rgba(120, 171, 70, 0.5); + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child { + display: none; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg { + fill: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, +.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { + margin-top: 0; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { + padding: 8px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-right: 4px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-right: auto; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 8px 4px 4px; +} +.tox .mce-codemirror { + background: #fff; + bottom: 0; + font-size: 13px; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .mce-codemirror.tox-inline-codemirror { + margin: 8px; + position: absolute; +} +.tox .tox-advtemplate .tox-form__grid { + flex: 1; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child { + display: flex; + flex-direction: column; + width: 30%; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) { + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child { + width: 100%; + } +} +.tox .tox-advtemplate iframe { + border-color: #161f29; + border-radius: 10px; + border-style: solid; + border-width: 1px; + margin: 0 10px; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bottom-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + border-width: var(--tox-private-button-border-width, 1px); + border-style: var(--tox-private-button-border-style, solid); + border-radius: var(--tox-private-control-border-radius, 6px); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-button-font-size, 14px); + font-style: var(--tox-private-button-font-style, normal); + font-weight: var(--tox-private-button-font-weight, bold); + line-height: var(--tox-private-control-line-height, 24px); + padding: var(--tox-private-button-padding-y, 4px) var(--tox-private-button-padding-x, 16px); + text-align: center; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + letter-spacing: normal; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + outline: none; + position: relative; + white-space: nowrap; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 2px; +} +.tox .tox-button::before { + border-radius: var(--tox-private-control-border-radius, 6px); + bottom: calc(-1 * var(--tox-private-button-border-width, 1px)); + box-shadow: var(--tox-private-button-focus-outline, inset 0 0 0 1px #fff, 0 0 0 2px #006ce7); + content: ''; + left: calc(-1 * var(--tox-private-button-border-width, 1px)); + opacity: 0; + pointer-events: none; + position: absolute; + right: calc(-1 * var(--tox-private-button-border-width, 1px)); + top: calc(-1 * var(--tox-private-button-border-width, 1px)); +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-focus-background-color, #0060ce); + background-image: none; + border-color: var(--tox-private-button-focus-border-color, #0060ce); + box-shadow: var(--tox-private-button-focus-box-shadow, none); + color: var(--tox-private-button-focus-text-color, #fff); +} +.tox .tox-button:focus:not(:disabled)::before { + opacity: 1; +} +.tox .tox-button.tox-button--icon, +.tox .tox-button:has(.tox-icon:only-child) { + padding: 4px; +} +.tox .tox-button .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button .tox-icon.tox-icon--success svg { + fill: var(--tox-private-color-success, #78AB46); +} +.tox .tox-button .tox-icon.tox-icon--error svg { + fill: var(--tox-private-color-error, #c00); +} +.tox .tox-button--stretch { + width: 100%; +} +.tox-context-form__group .tox-button--icon, +.tox-context-form__group .tox-button.tox-button--icon { + margin: 6px 1px 5px 0; + padding: 0; +} +.tox { + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ +} +.tox .tox-button { + background-color: var(--tox-private-button-primary-background-color, #006ce7); + background-image: none; + background-position: 0 0; + background-repeat: repeat; + color: var(--tox-private-button-primary-text-color, #fff); + border-color: var(--tox-private-button-primary-border-color, #006ce7); + /* Enabled state */ +} +.tox .tox-button[disabled] { + background-color: var(--tox-private-button-primary-disabled-background-color, #006ce7); + background-image: none; + border-color: var(--tox-private-button-primary-disabled-border-color, #006ce7); + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-focus-background-color, #0060ce); + border-color: var(--tox-private-button-primary-focus-border-color, #0060ce); + color: var(--tox-private-button-primary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-hover-background-color, #0060ce); + border-color: var(--tox-private-button-primary-hover-border-color, #0060ce); + color: var(--tox-private-button-primary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:active:not(:disabled) { + background-color: var(--tox-private-button-primary-active-background-color, #0054b4); + border-color: var(--tox-private-button-primary-active-border-color, #0054b4); + color: var(--tox-private-button-primary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled { + background-color: var(--tox-private-button-primary-enabled-background-color, #0054b4); + border-color: var(--tox-private-button-primary-enabled-border-color, #0054b4); + color: var(--tox-private-button-primary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled[disabled] { + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-focus-background-color, #00489b); + border-color: var(--tox-private-button-primary-enabled-focus-border-color, #00489b); + color: var(--tox-private-button-primary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-hover-background-color, #00489b); + border-color: var(--tox-private-button-primary-enabled-hover-border-color, #00489b); + color: var(--tox-private-button-primary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-active-background-color, #003c81); + border-color: var(--tox-private-button-primary-enabled-active-border-color, #003c81); + color: var(--tox-private-button-primary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary { + background-color: var(--tox-private-button-secondary-background-color, #3d546f); + border-color: var(--tox-private-button-secondary-border-color, #3d546f); + color: var(--tox-private-button-secondary-text-color, #fff); + border-style: solid; + border-width: 1px; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-radius: 6px; + box-shadow: none; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + outline: none; + padding: 4px 16px; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + /* Enabled state */ +} +.tox .tox-button--secondary[disabled] { + background-color: var(--tox-private-button-secondary-disabled-background-color, #3d546f); + background-image: none; + border-color: var(--tox-private-button-secondary-disabled-border-color, #3d546f); + color: var(--tox-private-button-secondary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-focus-background-color, #34485f); + border-color: var(--tox-private-button-secondary-focus-border-color, #34485f); + color: var(--tox-private-button-secondary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-hover-background-color, #34485f); + border-color: var(--tox-private-button-secondary-hover-border-color, #34485f); + color: var(--tox-private-button-secondary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-active-background-color, #2b3b4e); + border-color: var(--tox-private-button-secondary-active-border-color, #2b3b4e); + color: var(--tox-private-button-secondary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled { + background-color: var(--tox-private-button-secondary-enabled-background-color, #2b5c93); + border-color: var(--tox-private-button-secondary-enabled-border-color, #2b5c93); + color: var(--tox-private-button-secondary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled[disabled] { + color: var(--tox-private-button-secondary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-focus-background-color, #254f80); + border-color: var(--tox-private-button-secondary-enabled-focus-border-color, #254f80); + color: var(--tox-private-button-secondary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-hover-background-color, #254f80); + border-color: var(--tox-private-button-secondary-enabled-hover-border-color, #254f80); + color: var(--tox-private-button-secondary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-active-background-color, #1f436c); + border-color: var(--tox-private-button-secondary-enabled-active-border-color, #1f436c); + color: var(--tox-private-button-secondary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: var(--tox-private-button-naked-text-color, #fff); +} +.tox .tox-button--naked[disabled] { + background-color: rgba(255, 255, 255, 0.2); + border-color: transparent; + color: var(--tox-private-button-naked-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: var(--tox-private-button-naked-focus-background-color, rgba(255, 255, 255, 0.2)); + border-color: var(--tox-private-button-naked-focus-border-color, transparent); + color: var(--tox-private-button-naked-focus-text-color, #fff); + box-shadow: unset; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: var(--tox-private-button-naked-hover-background-color, rgba(255, 255, 255, 0.2)); + border-color: var(--tox-private-button-naked-hover-background-color, transparent); + color: var(--tox-private-button-naked-hover-text-color, #fff); + box-shadow: unset; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: var(--tox-private-button-naked-active-background-color, rgba(255, 255, 255, 0.3)); + border-color: var(--tox-private-button-naked-active-border-color, transparent); + color: var(--tox-private-button-naked-active-text-color, #fff); + box-shadow: unset; +} +.tox .tox-button--secondary--outline { + background-color: transparent; + border-color: var(--tox-private-button-secondary-outline-border-color, #3d546f); + color: var(--tox-private-button-secondary-outline-text-color, #fff); +} +.tox .tox-button--secondary--outline:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-focus-background-color, #34485f); + border-color: var(--tox-private-button-secondary-outline-focus-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-focus-text-color, #fff); +} +.tox .tox-button--secondary--outline:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-hover-background-color, #3d546f); + border-color: var(--tox-private-button-secondary-outline-hover-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-hover-text-color, #fff); +} +.tox .tox-button--secondary--outline:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-active-background-color, #34485f); + border-color: var(--tox-private-button-secondary-outline-active-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-active-text-color, #fff); +} +.tox .tox-button--secondary--outline[disabled] { + background-color: var(--tox-private-button-secondary-outline-disabled-background-color, transparent); + border-color: var(--tox-private-button-secondary-outline-disabled-border-color, #3d546f); + color: var(--tox-private-button-secondary-outline-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox { + align-items: center; + border-radius: var(--tox-private-checkbox-border-radius, 6px); + cursor: pointer; + display: flex; + height: var(--tox-private-control-height, 36px); + min-width: var(--tox-private-control-height, 36px); +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + padding: var(--tox-private-pad-xs, calc(4px - 1px)); + border-radius: var(--tox-private-checkbox-border-radius, 6px); + box-shadow: 0 0 0 2px transparent; + height: var(--tox-private-control-line-height, 24px); + aspect-ratio: 1; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: var(--tox-private-checkbox-unselected-color, rgba(255, 255, 255, 0.2)); +} +@media (forced-colors: active) { + .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: currentColor !important; + } +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: var(--tox-private-checkbox-indeterminate-color, #006ce7); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: var(--tox-private-checkbox-selected-color, #006ce7); +} +.tox .tox-checkbox--disabled { + color: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + box-shadow: var(--tox-private-checkbox-focus-box-shadow, inset 0 0 0 1px #006ce7); +} +.tox:not([dir=rtl]) .tox-checkbox__label { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox:not([dir=rtl]) .tox-checkbox__input { + left: -10000px; +} +.tox:not([dir=rtl]) .tox-bar .tox-checkbox { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__label { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__input { + right: -10000px; +} +.tox[dir=rtl] .tox-bar .tox-checkbox { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: rgba(255, 255, 255, 0.15); + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.5); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + border-radius: 3px; + color: #fff; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector, +.tox .tox-image-selector-menu .tox-collection__item { + flex-direction: column; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark { + flex-grow: 1; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector label, +.tox .tox-image-selector-menu .tox-collection__item label { + width: 48px; + white-space: nowrap; + overflow: hidden; + font-size: 12px; + color: #fff; + text-align: center; + align-self: flex-end; +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark { + height: 24px; + width: 24px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path { + fill: #006ce7; + stroke: #006ce7; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #222F3E; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + z-index: 2; + background-color: #222F3E; + opacity: 0.8; + background-clip: content-box; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #2b3b4e; + color: #fff; +} +.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #006ce7; + color: #fff; +} +@media (forced-colors: active) { + .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + border: solid 1px; + } +} +.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #599fef; + color: #fff; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #2f4055; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff inset; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #599fef; + color: #fff; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #fff; + background-color: #2b3b4e; + position: relative; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + background-color: #2f4055; + color: #fff; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus { + background-color: #2f4055; + color: #fff; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection__item-image { + border: 1px solid #161f29; + border-radius: 6px; + display: flex; + flex-direction: column; + justify-content: center; + margin-bottom: 4px; + position: relative; +} +.tox .tox-collection__item-icon, +.tox .tox-collection__item-checkmark { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg, +.tox .tox-collection__item-checkmark svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + max-width: 100%; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection__item-accessory { + color: currentColor; + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + text-transform: none; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + min-height: 24px; +} +.tox .tox-collection__item-caret::after { + content: ''; + font-size: 0; + min-height: inherit; +} +.tox .tox-collection__item-caret svg { + fill: currentColor; +} +.tox .tox-collection__item--state-disabled { + background-color: transparent; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark { + display: none; +} +.tox .tox-collection--horizontal { + background-color: #2b3b4e; + border: 1px solid rgba(255, 255, 255, 0.15); + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: nowrap; + margin-bottom: 0; + overflow-x: auto; + padding: 0; +} +.tox .tox-collection--horizontal .tox-collection__group { + align-items: center; + display: flex; + flex-wrap: nowrap; + margin: 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item { + height: 28px; + margin: 6px 1px 5px 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item-label { + white-space: nowrap; +} +.tox .tox-collection--horizontal .tox-collection__item-caret { + margin-left: 4px; +} +.tox .tox-collection__item-container { + display: flex; +} +.tox .tox-collection__item-container--row { + align-items: center; + flex: 1 1 auto; + flex-direction: row; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-left { + margin-right: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-right { + justify-content: flex-end; + margin-left: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { + align-items: flex-start; + margin-bottom: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { + align-items: center; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { + align-items: flex-end; + margin-top: auto; +} +.tox .tox-collection__item-container--column { + align-self: center; + flex: 1 1 auto; + flex-direction: column; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-left { + align-items: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-right { + align-items: flex-end; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { + align-self: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { + align-self: center; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { + align-self: flex-end; +} +.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-collection__item-accessory { + margin-left: 16px; + text-align: right; +} +.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { + margin-left: 16px; +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-right: 8px; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-right: 4px; +} +.tox[dir=rtl] .tox-collection__item-accessory { + margin-right: 16px; + text-align: left; +} +.tox[dir=rtl] .tox-collection .tox-collection__item-caret { + margin-right: 16px; + transform: rotateY(180deg); +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { + margin-right: 4px; +} +@media (forced-colors: active) { + .tox .tox-hue-slider, + .tox .tox-rgb-form .tox-rgba-preview { + background-color: currentColor !important; + border: 1px solid highlight !important; + forced-color-adjust: none; + } +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + box-sizing: border-box; + display: flex; + height: 100%; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + box-sizing: content-box; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + box-sizing: border-box; + height: 100%; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-spectrum:focus, +.tox .tox-sv-palette-spectrum:focus { + outline: #08f solid; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + box-sizing: content-box; + height: 4px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + min-width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid #f00 !important; + box-shadow: 0 0 0 1px #f00; +} +.tox .tox-rgb-container { + position: relative; +} +.tox .tox-rgb-form .tox-invalid-icon { + align-content: center; + align-items: center; + display: none; + height: 100%; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid { + margin: 0; +} +.tox .tox-rgb-warning-note { + background-color: #442632; + border: 1px solid #55212b; + border-radius: 3px; + color: #e68080; + padding: 3px; +} +.tox input.tox-invalid + .tox-invalid-icon { + display: flex; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox:not([dir=rtl]) .tox-sv-palette { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider-thumb { + margin-left: -1px; +} +.tox:not([dir=rtl]) .tox-rgb-form label { + margin-right: 0.5em; +} +.tox[dir=rtl] .tox-sv-palette { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider-thumb { + margin-right: -1px; +} +.tox[dir=rtl] .tox-rgb-form label { + margin-left: 0.5em; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 5px 0 6px 11px; +} +.tox .tox-collection--list .tox-collection__group .tox-swatches-menu { + border: 0; + margin: -4px -4px; +} +.tox .tox-swatches__row { + display: flex; +} +@media (forced-colors: active) { + .tox .tox-swatches__row { + forced-color-adjust: none; + } +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + fill: #fff; + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #2f4055; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg { + display: none; + fill: #fff; + height: 24px; + margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2); + width: 24px; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg path { + fill: #fff; + paint-order: stroke; + stroke: #222f3e; + stroke-width: 2px; +} +.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { + display: block; +} +.tox:not([dir=rtl]) .tox-swatches__picker-btn { + margin-left: auto; +} +.tox[dir=rtl] .tox-swatches__picker-btn { + margin-right: auto; +} +.tox { + /* Animation for deleting a comment */ + /* A comment fades to 0 when it is being deleted, then is removed */ +} +.tox .tox-comment { + background: #222F3E; + border: 1px solid #222F3E; + border-radius: 6px; + padding: 8px; + padding-bottom: 16px; + position: relative; +} +.tox .tox-comment:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected { + background-color: #1b3b60; + border: 1px solid #006ce7; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected:focus { + border: 2px solid #fff; + margin: -1px; +} +.tox .tox-comment.tox-comment--selected:focus:not(:first-child) { + margin-top: 7px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single { + margin-bottom: 12px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus { + position: relative; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after { + top: -9px; + pointer-events: none; + position: absolute; + content: ""; + display: block; + bottom: -9px; + left: -9px; + right: -9px; + border-radius: 6px; + border: 2px solid #fff; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after { + bottom: calc((12px + 16px + 1px) * -1); +} +.tox .tox-comment__header { + align-items: center; + color: #fff; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-comment__body { + color: #fff; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); + white-space: pre-wrap; + /* We remove the transitions when wanting to measure and jump straight to collapsed or expanded */ +} +.tox .tox-comment__body.tox-comment__body--expanded { + max-height: 100em; + transition: max-height 1s ease-in-out; +} +.tox .tox-comment__body.tox-comment__body--pending { + transition: max-height 0s; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; + font-size: 16px; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #fff; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #222F3E; + box-shadow: 0 0 8px 8px #222F3E; + color: #fff; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: 0.8em; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; + font-style: normal; + /* Need a focus highlight on the show more/less button */ +} +.tox .tox-comment__expander p:focus { + font-weight: bold; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-tbtn.tox-comment__mention-btn { + display: flex; + width: 34px; + height: 34px; + padding: 5px; + justify-content: center; + align-items: center; + margin: 0; + background-color: transparent; +} +.tox .tox-comment-thread { + background: #222F3E; + position: relative; + border-radius: 6px; + background-color: transparent; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #222F3E; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(34, 47, 62, 0), #222F3E); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #222F3E; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #222F3E; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 20; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; + padding: 12px; + scroll-behavior: smooth; +} +.tox .tox-comment__scroll:has(textarea:focus) { + scroll-behavior: auto; +} +.tox .tox-comment--disappearing { + transition: opacity 0.5s ease; +} +.tox .tox-comment[data-transitioning-destination="deleting"] { + opacity: 0; +} +.tox .tox-ring-loader { + width: 10px; + height: 10px; + border: 1px solid #FFF; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: tox-rotation 1s linear infinite; +} +.tox:not([dir=rtl]) .tox-comment__edit { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child, +.tox:not([dir=rtl]) .tox-comment__edit > *:last-child, +.tox:not([dir=rtl]) .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox[dir=rtl] .tox-comment__edit { + margin-right: 8px; +} +.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child, +.tox[dir=rtl] .tox-comment__edit > *:last-child, +.tox[dir=rtl] .tox-comment__reply > *:last-child { + margin-right: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-user__avatar img { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-user__name { + color: #fff; + font-size: 14px; + font-style: normal; + font-weight: bold; + line-height: 18px; + text-transform: none; +} +.tox:not([dir=rtl]) .tox-user__avatar svg, +.tox:not([dir=rtl]) .tox-user__avatar img { + margin-right: 8px; +} +.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar svg, +.tox[dir=rtl] .tox-user__avatar img { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar + .tox-user__name { + margin-right: 8px; +} +.tox { + /* .tox-dialog-blocker-wrap { + // + } */ +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(34, 47, 62, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .tox-dialog-wrap__backdrop--opaque { + background-color: #222F3E; +} +.tox .tox-dialog { + background-color: #2b3b4e; + border-color: #161f29; + border-radius: 10px; + border-style: solid; + border-width: 0; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 2; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog { + align-self: flex-start; + margin: 8px auto; + max-height: calc(100vh - 8px * 2); + width: calc(100vw - 16px); + } +} +.tox .tox-dialog-inline { + z-index: 1100; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #2b3b4e; + border-bottom: none; + color: #fff; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: none; +} +.tox .tox-dialog__body { + color: #fff; + display: flex; + flex: 1; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + min-width: 0; + text-align: left; + text-transform: none; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body { + flex-direction: column; + } +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: 16px 16px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-dialog__body-nav { + max-width: 11em; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { + flex-direction: row; + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding-bottom: 0; + } +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(255, 255, 255, 0.5); + display: inline-block; + flex-shrink: 0; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + max-width: 13em; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item:focus { + background-color: rgba(0, 108, 231, 0.1); +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #67aeff; + color: #67aeff; +} +@media (forced-colors: active) { + .tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid highlight; + color: highlight; + } +} +.tox .tox-dialog__body-content { + box-sizing: border-box; + display: flex; + flex: 1; + flex-direction: column; + max-height: min(650px, calc(100vh - 110px)); + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 16px 16px; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content a { + color: #67aeff; + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:hover, +.tox .tox-dialog__body-content a:focus { + color: #cde5ff; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:focus-visible { + border-radius: 1px; + outline: 2px solid #67aeff; + outline-offset: 2px; +} +.tox .tox-dialog__body-content a:active { + color: #ffffff; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content svg { + fill: #fff; +} +.tox .tox-dialog__body-content strong { + font-weight: bold; +} +.tox .tox-dialog__body-content ul { + list-style-type: disc; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dd { + padding-inline-start: 2.5rem; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl, +.tox .tox-dialog__body-content dd, +.tox .tox-dialog__body-content dt { + display: block; + margin-inline-end: 0; + margin-inline-start: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1 { + color: #fff; + font-size: 20px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group h2 { + color: #fff; + font-size: 16px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group p { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content .tox-form__group h1:first-child, +.tox .tox-dialog__body-content .tox-form__group h2:first-child, +.tox .tox-dialog__body-content .tox-form__group p:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:last-child, +.tox .tox-dialog__body-content .tox-form__group h2:last-child, +.tox .tox-dialog__body-content .tox-form__group p:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:only-child, +.tox .tox-dialog__body-content .tox-form__group h2:only-child, +.tox .tox-dialog__body-content .tox-form__group p:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { + text-align: center; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { + text-align: end; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--fullscreen { + height: 100%; + max-width: 100%; +} +.tox .tox-dialog--fullscreen .tox-dialog__body-content { + max-height: 100%; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #2b3b4e; + border-top: none; + display: flex; + justify-content: space-between; + padding: 8px 16px; +} +.tox .tox-dialog__footer-start, +.tox .tox-dialog__footer-end { + display: flex; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(34, 47, 62, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table thead th:first-child { + padding-right: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #000000; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__table td:first-child { + padding-right: 8px; +} +.tox .tox-dialog__iframe { + min-height: 200px; +} +.tox .tox-dialog__iframe.tox-dialog__iframe--opaque { + background: #fff; +} +.tox .tox-navobj-bordered { + position: relative; +} +.tox .tox-navobj-bordered::before { + border: 1px solid #161f29; + border-radius: 6px; + content: ''; + inset: 0; + opacity: 1; + pointer-events: none; + position: absolute; + z-index: 1; +} +.tox .tox-navobj-bordered iframe { + border-radius: 6px; +} +.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +.tox .tox-dialog__body-iframe { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-dialog__body-iframe .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox .tox-dialog-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-dialog-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-dialog-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { + transition-delay: 0s; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { + margin-right: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { + margin-left: 8px; + } +} +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *, +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-dialog__body { + text-align: right; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { + margin-left: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { + margin-right: 8px; + } +} +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *, +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * { + margin-right: 8px; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #161f29; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(255, 255, 255, 0.5); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area::before { + border: 2px solid #FFFFFF; + border-radius: 4px; + content: ''; + inset: 0; + opacity: 0; + pointer-events: none; + position: absolute; + transition: opacity 0.15s; + z-index: 1; +} +@media (forced-colors: active) { + .tox .tox-edit-area::before { + border: 2px solid highlight; + } +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-edit-focus .tox-edit-area::before { + opacity: 1; +} +.tox.tox-inline-edit-area { + border: 1px dotted #161f29; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: green; +} +.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { + padding-right: 32px; +} +.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { + right: 4px; +} +.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { + padding-left: 32px; +} +.tox[dir=rtl] .tox-control-wrap__status-icon-wrap { + left: 4px; +} +.tox .tox-custom-preview { + border-color: #161f29; + border-radius: 6px; + border-style: solid; + border-width: 1px; + flex: 1; + padding: 8px; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + box-sizing: border-box; + max-width: 25em; +} +.tox .tox-autocompleter .tox-autocompleter-highlight { + font-weight: bold; +} +.tox .tox-color-input { + display: flex; + position: relative; + z-index: 1; +} +.tox .tox-color-input .tox-textfield { + z-index: -1; +} +.tox .tox-color-input span { + border-color: rgba(34 47 3.1%); + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + height: 24px; + position: absolute; + top: 6px; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-color-input span { + border-color: currentColor; + border-width: 2px !important; + forced-color-adjust: none; + } +} +.tox .tox-color-input span:hover:not([aria-disabled=true]), +.tox .tox-color-input span:focus:not([aria-disabled=true]) { + border-color: #006ce7; + cursor: pointer; +} +.tox .tox-color-input span::before { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%); + background-position: 0 0, 0 6px, 6px -6px, -6px 0; + background-size: 12px 12px; + border: 1px solid #2b3b4e; + border-radius: 6px; + box-sizing: border-box; + content: ''; + height: 24px; + left: -1px; + position: absolute; + top: -1px; + width: 24px; + z-index: -1; +} +@media (forced-colors: active) { + .tox .tox-color-input span::before { + border: none; + } +} +.tox .tox-color-input span[aria-disabled=true] { + cursor: not-allowed; +} +.tox:not([dir=rtl]) .tox-color-input .tox-textfield { + padding-left: 36px; +} +.tox:not([dir=rtl]) .tox-color-input span { + left: 6px; +} +.tox[dir="rtl"] .tox-color-input .tox-textfield { + padding-right: 36px; +} +.tox[dir="rtl"] .tox-color-input span { + right: 6px; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(255, 255, 255, 0.5); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: none; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox[dir=rtl] .tox-label { + padding: 0 0 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form-group--maximize { + flex: 1; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) { + margin-right: 4px; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input { + margin-left: 8px; + margin-right: 8px; +} +.tox .tox-textfield, +.tox .tox-toolbar-textfield, +.tox .tox-listboxfield .tox-listbox--select, +.tox .tox-textarea, +.tox .tox-textarea-wrap .tox-textarea:focus { + appearance: none; + background-color: #2b3b4e; + border-color: #161f29; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-textfield[disabled], +.tox .tox-toolbar-textfield[disabled], +.tox .tox-textarea[disabled] { + background-color: #222f3e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-textfield:focus, +.tox .tox-toolbar-textfield:focus, +.tox .tox-listboxfield .tox-listbox--select:focus, +.tox .tox-textarea-wrap:focus-within, +.tox .tox-textarea:focus, +.tox .tox-focusable-wrapper:focus, +.tox .tox-custom-editor:focus-within { + background-color: #2b3b4e; + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-toolbar-textfield { + max-width: 250px; + min-height: unset; + height: 28px; + margin: 5px 0 6px 0; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #006ce7; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #fff; +} +.tox .tox-textfield-size { + width: 80px; +} +.tox:not([dir=rtl]) .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-toolbar-textfield + * { + margin-right: 4px; +} +.tox .tox-listboxfield { + cursor: pointer; + position: relative; +} +.tox .tox-listboxfield .tox-listbox--select[disabled] { + background-color: #19232e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-listbox__select-label { + cursor: default; + flex: 1; + margin: 0 4px; +} +.tox .tox-listbox__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-listbox__select-chevron svg { + fill: #fff; +} +@media (forced-colors: active) { + .tox .tox-listbox__select-chevron svg { + fill: currentColor !important; + } +} +.tox .tox-listboxfield .tox-listbox--select { + align-items: center; + display: flex; +} +.tox:not([dir=rtl]) .tox-listboxfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-listboxfield svg { + left: 8px; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + appearance: none; + background-color: #2b3b4e; + border-color: #161f29; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-selectfield select[disabled] { + background-color: #19232e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield select:focus { + background-color: #2b3b4e; + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-selectfield select option:checked { + background-color: revert; + color: revert; +} +.tox:not([dir=rtl]) .tox-selectfield select[size="0"], +.tox:not([dir=rtl]) .tox-selectfield select[size="1"] { + padding-right: 24px; +} +.tox:not([dir=rtl]) .tox-selectfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-selectfield select[size="0"], +.tox[dir=rtl] .tox-selectfield select[size="1"] { + padding-left: 24px; +} +.tox[dir=rtl] .tox-selectfield svg { + left: 8px; +} +.tox .tox-textarea-wrap { + border-color: #161f29; + border-radius: 6px; + border-style: solid; + border-width: 1px; + display: flex; + flex: 1; + overflow: hidden; +} +.tox .tox-textarea { + appearance: textarea; + white-space: pre-wrap; +} +.tox .tox-textarea-wrap .tox-textarea { + border: none; +} +.tox .tox-textarea-wrap .tox-textarea:focus { + border: none; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-help__more-link { + list-style: none; + margin-top: 1em; +} +.tox .tox-imagepreview { + background-color: #666; + height: 380px; + overflow: hidden; + position: relative; + width: 100%; +} +.tox .tox-imagepreview.tox-imagepreview__loaded { + overflow: auto; +} +.tox .tox-imagepreview__container { + display: flex; + left: 100vw; + position: absolute; + top: 100vw; +} +.tox .tox-imagepreview__image { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools .tox-spacer { + flex: 1; +} +.tox .tox-image-tools .tox-bar { + align-items: center; + display: flex; + height: 60px; + justify-content: center; +} +.tox .tox-image-tools .tox-imagepreview, +.tox .tox-image-tools .tox-imagepreview + .tox-bar { + margin-top: 8px; +} +.tox .tox-image-tools .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: 0.5; + position: absolute; + zoom: 1; +} +.tox .tox-image-tools .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-image-tools .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-image-tools .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-image-tools .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-image-selector-loading-spinner-wrapper { + display: flex; + justify-content: center; + align-items: center; +} +.tox .tox-image-selector-loading-spinner { + position: absolute; + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox .tox-toolbar .tox-image-selector, +.tox .tox-toolbar__primary .tox-image-selector, +.tox .tox-toolbar__overflow .tox-image-selector { + margin: 5px 0 6px 11px; +} +.tox .tox-image-selector-menu { + border: 0; + border-radius: 3px; + margin: -4px -4px; + padding: 4px; +} +.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group { + border: 0; + padding: 0; + margin: -4px -4px; +} +.tox .tox-image-selector-menu .tox-collection__item { + max-width: 48px; +} +.tox .tox-image-selector-menu .tox-collection__item-icon { + border: 1px solid #161f29; + border-radius: 3px; + margin-bottom: 4px; + width: 100%; +} +.tox .tox-image-selector-menu .tox-collection__item-icon svg path { + stroke: #c00; +} +.tox .tox-image-selector__row { + display: flex; +} +.tox .tox-image-selector--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-selector--remove svg path { + stroke: #c00; +} +.tox .tox-image-selector-image-wrapper { + width: 46px; + height: 46px; + display: flex; + align-items: center; + justify-content: center; +} +.tox .tox-image-selector-image-img { + max-width: 100%; + max-height: 100%; +} +.tox .tox-image-selector__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-image-selector__picker-btn svg { + fill: #fff; + height: 24px; + width: 24px; +} +.tox .tox-image-selector__picker-btn:hover { + background: #2f4055; +} +.tox .tox-context-toolbar { + position: absolute; + position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; + z-index: 1150; + background-color: #ffffff; + border: 1px solid #e0e0e0; + border-radius: 9px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + padding: 4px; +} +.tox .tox-context-toolbar[popover] { + inset: auto; + margin: 0; +} +.tox .tox-context-toolbar .tox-toolbar { + display: flex; + flex-wrap: nowrap; + gap: 8px; +} +.tox .tox-context-toolbar .tox-toolbar__group { + display: flex; + flex-wrap: nowrap; + flex-shrink: 0; + gap: 4px; + align-items: center; +} +.tox .tox-insert-table-picker { + background-color: #222F3E; + display: flex; + flex-wrap: wrap; + width: 170px; +} +.tox .tox-insert-table-picker > div { + border-color: rgba(255, 255, 255, 0.15); + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: border-box; + height: 17px; + width: 17px; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px -4px; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: #006ce7; + border-color: rgba(255, 255, 255, 0.15); +} +@media (forced-colors: active) { + .tox .tox-insert-table-picker .tox-insert-table-picker__selected { + border-color: Highlight; + filter: contrast(50%); + } +} +.tox .tox-insert-table-picker__label { + color: #fff; + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) { + border-right: 0; +} +.tox-mentions__card-common { + z-index: 1200; +} +.tox.tox-mentions__card { + background: #222F3E; + border: 1px solid #161f29; + display: flex; + padding: 4px 8px; +} +.tox.tox-mentions__card .tox-mentions__container { + display: flex; + flex-direction: column; + align-self: center; + margin: 0 4px; +} +.tox .tox-mentions__avatar { + width: 42px; + height: 42px; + border-radius: 50%; + margin-right: 4px; +} +.tox .tox-mentions__username { + font-size: 14px; + line-height: 21px; + color: #fff; +} +.tox .tox-mentions__description { + font-size: 12px; + line-height: 21px; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-collection__item--active .tox-mentions__username, +.tox .tox-collection__item--active .tox-mentions__description { + color: inherit; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #2b3b4e; + border: 1px solid rgba(255, 255, 255, 0.15); + border-radius: 6px; + box-shadow: none; + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1150; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0 4px; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 8px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 8px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-menu .tox-collection__item-label { + overflow-wrap: break-word; + word-break: normal; + } + .tox .tox-dialog__popups .tox-menu .tox-collection__item-label { + word-break: break-all; + } +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: repeating-linear-gradient(transparent 0 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #222F3E; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + grid-column: 1 / -1; + grid-row: 1; + padding: 0 11px 0 12px; +} +.tox .tox-promotion + .tox-menubar { + grid-column: 1; +} +.tox .tox-promotion { + background: repeating-linear-gradient(transparent 0 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #222F3E; + grid-column: 2; + grid-row: 1; + padding-inline-end: 8px; + padding-inline-start: 4px; + padding-top: 5px; +} +.tox .tox-promotion-link { + align-items: unsafe center; + background-color: #E8F1F8; + border-radius: 5px; + color: #086BE6; + cursor: pointer; + display: flex; + font-size: 14px; + height: 26.6px; + padding: 4px 8px; + white-space: nowrap; +} +.tox .tox-promotion-link:hover { + background-color: #B4D7FF; +} +.tox .tox-promotion-link:focus { + background-color: #D9EDF7; +} +/* Deprecated. Remove in next major release */ +.tox .tox-mbtn { + align-items: center; + background: #222F3E; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 5px 1px 6px 0; + outline: none; + padding: 0 4px; + text-transform: none; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: #222F3E; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #222F3E; + border: 0; + box-shadow: none; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-mbtn:focus:not(:disabled)::after { + pointer-events: none; + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-mbtn:focus:not(:disabled)::after { + border: 2px solid highlight; + } +} +.tox .tox-mbtn--active, +.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { + background: #2f4055; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + display: grid; + font-size: 14px; + font-weight: normal; + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-left: auto; + margin-right: auto; + margin-top: 4px; + opacity: 0; + padding: 4px; + transition: transform 100ms ease-in, opacity 150ms ease-in; + width: max-content; +} +.tox .tox-notification a { + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification p { + font-size: 14px; + font-weight: normal; +} +.tox .tox-notification:focus { + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #334840; + border-color: #3c5440; + color: #fff; +} +.tox .tox-notification--success p { + color: #fff; +} +.tox .tox-notification--success a { + color: #b5d199; +} +.tox .tox-notification--success a:hover, +.tox .tox-notification--success a:focus { + color: #82b153; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success a:focus-visible { + border-radius: 1px; + outline: 2px solid #b5d199; + outline-offset: 2px; +} +.tox .tox-notification--success a:active { + color: #689041; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success svg { + fill: #fff; +} +.tox .tox-notification--error { + background-color: #442632; + border-color: #55212b; + color: #fff; +} +.tox .tox-notification--error p { + color: #fff; +} +.tox .tox-notification--error a { + color: #e68080; +} +.tox .tox-notification--error a:hover, +.tox .tox-notification--error a:focus { + color: #d42b2b; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error a:focus-visible { + border-radius: 1px; + outline: 2px solid #e68080; + outline-offset: 2px; +} +.tox .tox-notification--error a:active { + color: #aa2222; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error svg { + fill: #fff; +} +.tox .tox-notification--warn, +.tox .tox-notification--warning { + background-color: #222F3E; + border-color: rgba(255, 255, 255, 0.15); + color: #fff0b3; +} +.tox .tox-notification--warn p, +.tox .tox-notification--warning p { + color: #fff0b3; +} +.tox .tox-notification--warn a, +.tox .tox-notification--warning a { + color: #ffcc00; +} +.tox .tox-notification--warn a:hover, +.tox .tox-notification--warning a:hover, +.tox .tox-notification--warn a:focus, +.tox .tox-notification--warning a:focus { + color: #997a00; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn a:focus-visible, +.tox .tox-notification--warning a:focus-visible { + border-radius: 1px; + outline: 2px solid #ffcc00; + outline-offset: 2px; +} +.tox .tox-notification--warn a:active, +.tox .tox-notification--warning a:active { + color: #665200; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn svg, +.tox .tox-notification--warning svg { + fill: #fff0b3; +} +.tox .tox-notification--info { + background-color: #254161; + border-color: #264972; + color: #fff; +} +.tox .tox-notification--info p { + color: #fff; +} +.tox .tox-notification--info a { + color: #83b7f3; +} +.tox .tox-notification--info a:hover, +.tox .tox-notification--info a:focus { + color: #2681ea; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info a:focus-visible { + border-radius: 1px; + outline: 2px solid #83b7f3; + outline-offset: 2px; +} +.tox .tox-notification--info a:active { + color: #1368c9; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info svg { + fill: #fff; +} +.tox .tox-notification__body { + align-self: center; + color: #fff; + font-size: 14px; + grid-column-end: 3; + grid-column-start: 2; + grid-row-end: 2; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + align-self: center; + grid-column-end: 2; + grid-column-start: 1; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + align-self: start; + grid-column-end: 4; + grid-column-start: 3; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + grid-column-end: 4; + grid-column-start: 1; + grid-row-end: 3; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-notification-container-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-notification-container-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-notification-container-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein { + transition-delay: 0s; +} +.tox .tox-onboarding-overlay { + height: 100%; + background-color: #17202a; + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1302; + overflow: auto; + display: grid; + justify-content: center; + align-items: center; +} +.tox .tox-onboarding-dialog { + max-width: 512px; + background-color: #222F3E; + display: flex; + flex-direction: column; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + border-radius: 12px; + margin: 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-header { + color: #fff; + display: flex; + justify-content: center; + align-items: center; + font-size: 20px; + margin: 24px 0 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step { + display: grid; + grid-template-columns: min-content 1fr min-content; + align-items: center; + margin: 0 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child) { + border-bottom: 1px solid rgba(255, 255, 255, 0.15); +} +.tox .tox-onboarding-dialog .tox-onboarding-step--number { + width: 24px; + aspect-ratio: 1; + border-radius: 50%; + border: 1px solid #00AD0E; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + font-weight: bold; + color: #00AD0E; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body { + padding: 24px 0 24px 16px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-header { + color: #fff; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-details { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--action { + padding-left: 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer { + background-color: #2b3b4e; + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 24px; + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer p { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + font-size: 14px; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-onboarding-dialog svg { + width: 24px; + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin { + display: grid; + align-items: center; + grid-template-columns: min-content 1fr min-content; + border-bottom: 1px solid rgba(255, 255, 255, 0.15); + padding: 24px 0; + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body { + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header { + color: #fff; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon { + display: grid; + place-content: center; + width: 56px; + height: 56px; + line-height: 24px; + font-size: 24px; + border-radius: 12px; + background: linear-gradient(180deg, #2b3b4e 24%, #202d3b 100%); + box-shadow: 0px 1px 1px 0px #222f3e12, 0px 3px 6px 0px #222f3e06; + color: #006ce7; +} +.tox .tox-promotion-dialog--subtitle { + margin: 16px; + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore { + text-align: center; + margin: 16px; + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore a { + color: #006ce7; +} +.tox .tox-promotion-dialog--footer { + background-color: #17202a; + color: rgba(255, 255, 255, 0.5); + font-size: 12px; + text-align: center; + padding: 16px; +} +.tox .tox-promotion-button { + display: flex; + align-items: center; + height: 26.6px; + line-height: 26.6px; + font-size: 14px; + font-weight: bold; + background-color: #55367A; + color: #C290FB; + padding: 8px 16px; + cursor: pointer; + white-space: nowrap; + border-radius: 5px; +} +.tox .tox-promotion-button:focus { + outline: 1px solid #C290FB; +} +.tox .tox-onboarding-dialog a, +.tox .tox-promotion-dialog--footer a { + color: rgba(255, 255, 255, 0.5); + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:hover, +.tox .tox-promotion-dialog--footer a:hover, +.tox .tox-onboarding-dialog a:focus, +.tox .tox-promotion-dialog--footer a:focus { + color: #cde5ff; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:focus-visible, +.tox .tox-promotion-dialog--footer a:focus-visible { + border-radius: 1px; + outline: 2px solid #67aeff; + outline-offset: 2px; +} +.tox .tox-onboarding-dialog a:active, +.tox .tox-promotion-dialog--footer a:active { + color: #ffffff; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width 0.1s ease; +} +.tox .tox-pop--resizing .tox-toolbar, +.tox .tox-pop--resizing .tox-toolbar__group { + flex-wrap: nowrap; +} +.tox .tox-pop--transition { + transition: 0.15s ease; + transition-property: left, right, top, bottom; +} +.tox .tox-pop--transition::before, +.tox .tox-pop--transition::after { + transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s; +} +.tox .tox-pop__dialog { + background-color: #222F3E; + border: 1px solid #161f29; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; + margin-bottom: -1px; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + opacity: 1; + position: absolute; + width: 0; +} +@media (forced-colors: active) { + .tox .tox-pop::before, + .tox .tox-pop::after { + content: none; + } +} +.tox .tox-pop.tox-pop--inset::before, +.tox .tox-pop.tox-pop--inset::after { + opacity: 0; + transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #222F3E transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #161f29 transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #222F3E transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #161f29 transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #222F3E transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #161f29 transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #222F3E; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #161f29; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + background-color: var(--tox-private-sidebar-background-color, #34485f); + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width 0.5s ease, opacity 0.5s ease; +} +.tox .tox-sidebar-content { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + min-width: 300px; + max-width: 300px; + width: 300px; + border-left: 1px solid var(--tox-private-sidebar-border-color, #0e141a); +} +.tox .tox-sidebar-content__header { + align-items: center; + display: flex; + justify-content: space-between; + box-shadow: var(--tox-private-sidebar-header-box-shadow, 0 4px 8px 0 rgba(34, 47, 62, 0.1)); + padding: var(--tox-private-pad-sm, 8px) 12px; + background: var(--tox-private-background-color, #222F3E); + z-index: 1; +} +.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button { + margin-left: auto; +} +.tox .tox-sidebar-content__title { + font-size: var(--tox-private-font-size-lg, 20px); + font-weight: var(--tox-private-font-weight-normal, normal); + padding: var(--tox-private-pad-sm, 8px) 0 var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #fff); + line-height: 28px; +} +.tox .tox-floating-sidebar { + --tox-private-floating-sidebar-requested-height: 600px; + --tox-private-floating-sidebar-width: min(380px, 90vw); + --tox-private-floating-sidebar-height: min(var(--tox-private-floating-sidebar-requested-height), 80vh); + box-shadow: var(--tox-private-floating-sidebar-box-shadow, 0 0 40px 1px rgba(34, 47, 62, 0.15), 0 16px 16px -10px rgba(34, 47, 62, 0.15)); + width: var(--tox-private-floating-sidebar-width); + height: var(--tox-private-floating-sidebar-height); + background-color: var(--tox-private-background-color, #222F3E); + border-radius: 12px; + overflow: hidden; +} +.tox .tox-floating-sidebar__content-wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.tox .tox-floating-sidebar__header { + position: relative; +} +.tox-ai .tox-ai__user-prompt { + display: flex; + flex-direction: column; + margin-left: auto; + gap: inherit; +} +.tox-ai .tox-ai__user-prompt__context { + margin-left: auto; +} +.tox-ai .tox-ai__user-prompt__text { + background-color: var(--tox-private-ai-user-prompt-background, #17202a); + padding: var(--tox-private-pad-sm, 8px) 12px; + border-radius: var(--tox-private-control-border-radius, 6px); + max-width: 80%; + align-self: flex-end; + color: var(--tox-private-text-color, #fff); +} +.tox-ai .tox-ai__scroll { + overflow: auto; + background-color: var(--tox-private-background-color, #222F3E); + display: flex; + padding: 12px; + flex-direction: column; + align-items: flex-start; + gap: 12px; + flex: 1 0 0; + align-self: stretch; +} +.tox-ai .tox-ai__response-content { + padding: var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #fff); + font-feature-settings: 'liga' off, 'clig' off; + font-size: var(--tox-private-font-size-sm, 14px); + font-style: normal; + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-line-height, 18px); + white-space: pre-wrap; +} +.tox-ai .tox-ai__response.tox-ai__response-streaming { + background: linear-gradient(180deg, var(--tox-private-color-black, #222f3e) 0%, transparent 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.tox-ai .tox-ai__error-message { + border-radius: var(--tox-private-panel-border-radius, 6px); + border: 1px solid var(--tox-private-color-error, #c00); + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-error, #c00); + padding: var(--tox-private-pad-sm, 8px); + width: 100%; +} +.tox-ai .tox-ai__footer { + border-top: 1px solid var(--tox-private-ai-footer-border-color, #0e141a); + padding: 12px; + gap: var(--tox-private-pad-sm, 8px); + background-color: var(--tox-private-background-color, #222F3E); + display: flex; + flex-direction: column; +} +.tox-ai .tox-ai__context { + display: flex; + gap: 8px; +} +.tox-ai .tox-ai__footer-actions { + display: flex; + gap: var(--tox-private-pad-sm, 8px); +} +.tox .tox-selector { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: inline-block; + height: 10px; + position: absolute; + width: 10px; +} +.tox.tox-platform-touch .tox-selector { + height: 12px; + width: 12px; +} +.tox .tox-skeleton .tox-skeleton__line { + height: 16px; + width: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +.tox .tox-skeleton .tox-skeleton__circle { + height: 36px; + width: 36px; + margin-right: 8px; + border-radius: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +@keyframes wave { + 0% { + background-position: -268px 0; + } + 100% { + background-position: 268px 0; + } +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #161f29; + border-radius: 6px; + height: 10px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #006ce7; + border: 2px solid #0054b4; + border-radius: 6px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 14px; +} +.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) { + margin-inline-start: 8px; +} +.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider { + margin-inline-start: 32px; +} +.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group { + margin-inline-start: 32px; +} +.tox .tox-toolbar-slider { + align-items: center; + display: inline-flex; + height: 16px; +} +.tox .tox-toolbar-slider__input { + appearance: none; + background: #161f29; + border-radius: 16px; + width: 130px; + height: 2px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #006ce7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-thumb { + appearance: none; + background-color: #006ce7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input:focus-visible { + outline: none; +} +.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb { + background-color: #0060ce; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #006ce7; +} +.tox .tox-toolbar-slider__input:focus::-moz-range-thumb { + background-color: #0060ce; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #006ce7; +} +.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb { + background-color: #0060ce; +} +.tox .tox-toolbar-slider__input:hover::-moz-range-thumb { + background-color: #0060ce; +} +.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb { + background-color: #0054b4; +} +.tox .tox-toolbar-slider__input:active::-moz-range-thumb { + background-color: #0054b4; +} +.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(255, 255, 255, 0.5); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-spinner > div:not(:first-child) { + margin-right: 4px; +} +.tox .tox-ai__spinner { + width: 24px; + height: 24px; +} +.tox .tox-statusbar { + align-items: center; + background-color: #222F3E; + border-top: 1px solid rgba(255, 255, 255, 0.15); + color: rgba(255, 255, 255, 0.75); + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-weight: normal; + height: 25px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: none; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__right-container { + display: flex; + justify-content: flex-end; + white-space: nowrap; +} +.tox .tox-statusbar__help-text { + text-align: center; +} +.tox .tox-statusbar__text-container { + align-items: flex-start; + display: flex; + flex: 1 1 auto; + height: 16px; + justify-content: space-between; +} +@media only screen and (min-width: 768px ) { + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__help-text, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__right-container, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__path { + flex: 0 0 calc(100% / 3); + } +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end { + justify-content: flex-end; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start { + justify-content: flex-start; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around { + justify-content: space-around; +} +.tox .tox-statusbar__path > * { + display: inline; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount { + flex: 0 0 auto; + margin-left: 1ch; +} +@media only screen and (max-width: 767px ) { + .tox .tox-statusbar__text-container .tox-statusbar__help-text { + display: none; + } + .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child { + display: block; + } +} +.tox .tox-statusbar a, +.tox .tox-statusbar__path-item, +.tox .tox-statusbar__wordcount { + color: rgba(255, 255, 255, 0.75); + position: relative; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #fff; + cursor: pointer; +} +.tox .tox-statusbar a:focus-visible::after, +.tox .tox-statusbar__path-item:focus-visible::after, +.tox .tox-statusbar__wordcount:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar a:focus-visible::after, + .tox .tox-statusbar__path-item:focus-visible::after, + .tox .tox-statusbar__wordcount:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__branding svg { + fill: rgba(255, 255, 255, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #fff; +} +.tox .tox-statusbar__resize-cursor-default { + cursor: ns-resize; +} +.tox .tox-statusbar__resize-cursor-both { + cursor: nwse-resize; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-bottom: 3px; + margin-left: 4px; + margin-right: calc(3px - 8px); + margin-top: 3px; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + position: relative; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-statusbar__resize-handle:hover svg, +.tox .tox-statusbar__resize-handle:focus svg { + fill: #fff; +} +.tox .tox-statusbar__resize-handle:focus-visible { + background-color: transparent; + border-radius: 1px 1px 5px 1px; + box-shadow: 0 0 0 2px transparent; +} +.tox .tox-statusbar__resize-handle:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar__resize-handle:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__resize-handle:only-child { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-statusbar__path > * { + margin-right: 4px; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 2ch; +} +.tox[dir=rtl] .tox-statusbar { + flex-direction: row-reverse; +} +.tox[dir=rtl] .tox-statusbar__path > * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-tag { + width: -moz-fit-content; + width: fit-content; + display: flex; + padding: 4px 6px; + align-items: center; + gap: 4px; + border-radius: 3px; + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-tint, #006ce7); + line-height: var(--tox-private-base-value, 16px); + font-size: var(--tox-private-font-size-xs, 12px); +} +.tox .tox-tag .tox-tag__icon { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon { + border: 0; + padding: 0; +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before { + box-shadow: none; +} +.tox .tox-throbber { + z-index: 1299; +} +.tox .tox-throbber__busy-spinner { + align-items: center; + background-color: rgba(34, 47, 62, 0.6); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-toggle { + display: flex; + align-items: center; + gap: var(--tox-private-pad-xs, 4px); + padding: var(--tox-private-pad-xs, 4px); + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-control-line-height, 24px); + white-space: nowrap; + background-color: var(--tox-private-background-color, #222F3E); + color: var(--tox-private-text-color, #fff); +} +.tox .tox-toggle input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} +.tox .tox-toggle__slider { + position: relative; + cursor: pointer; + box-sizing: border-box; + transition: 0.4s; + border-radius: 34px; + width: 28px; + height: 16px; + background-color: var(--tox-private-slider-background-color, #222F3E); + border: 1px solid var(--tox-private-slider-border-color, rgba(255, 255, 255, 0.15)); +} +.tox .tox-toggle__slider::before { + position: absolute; + content: ""; + height: 12px; + width: 12px; + left: 1px; + bottom: 1px; + transition: 0.4s; + border-radius: 50%; + background-color: var(--tox-private-slider-handle-background-color, #fff); +} +.tox input:checked + .tox-toggle__slider { + background-color: var(--tox-private-slider-checked-background-color, #006ce7); + border: 1px solid var(--tox-private-slider-checked-border-color, #006ce7); +} +.tox input:focus + .tox-toggle__slider { + box-shadow: 0 0 0 1px var(--tox-private-color-white, #fff), 0 0 0 2px var(--tox-private-color-tint, #006ce7); +} +.tox input:checked + .tox-toggle__slider::before { + transform: translateX(12px); + background-color: var(--tox-private-slider-checked-handle-background-color, #fff); +} +.tox input:disabled + .tox-toggle__slider::before { + opacity: 50%; +} +.tox .tox-tbtn { + align-items: center; + background: #222F3E; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 6px 1px 5px 0; + outline: none; + padding: 0; + text-transform: none; + width: 34px; +} +.tox .tox-tbtn .tox-tbtn__icon-wrap { + pointer-events: none; +} +@media (forced-colors: active) { + .tox .tox-tbtn:hover, + .tox .tox-tbtn.tox-tbtn:hover { + outline: 1px dashed currentColor; + } + .tox .tox-tbtn.tox-tbtn--active, + .tox .tox-tbtn.tox-tbtn--enabled, + .tox .tox-tbtn.tox-tbtn--enabled:hover, + .tox .tox-tbtn.tox-tbtn--enabled:focus, + .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + outline: 1px solid currentColor; + position: relative; + } +} +.tox .tox-tbtn svg { + display: block; + fill: #fff; +} +@media (forced-colors: active) { + .tox .tox-tbtn svg { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--enabled, + .tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled) { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--disabled, + .tox .tox-tbtn svg.tox-tbtn--disabled:hover, + .tox .tox-tbtn svg .tox-tbtn:disabled, + .tox .tox-tbtn svg .tox-tbtn:disabled:hover { + filter: contrast(0%); + } +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn:focus { + background: #222F3E; + border: 0; + box-shadow: none; + position: relative; + z-index: 1; +} +.tox .tox-tbtn:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:hover { + background: #2f4055; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tbtn:hover svg { + fill: #fff; +} +.tox .tox-tbtn:active { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tbtn:active svg { + fill: #fff; +} +.tox .tox-tbtn--disabled .tox-tbtn--enabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: #222F3E; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--active, +.tox .tox-tbtn--enabled, +.tox .tox-tbtn--enabled:hover, +.tox .tox-tbtn--enabled:focus { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; + position: relative; +} +.tox .tox-tbtn--active > *, +.tox .tox-tbtn--enabled > *, +.tox .tox-tbtn--enabled:hover > *, +.tox .tox-tbtn--enabled:focus > * { + transform: none; +} +.tox .tox-tbtn--active svg, +.tox .tox-tbtn--enabled svg, +.tox .tox-tbtn--enabled:hover svg, +.tox .tox-tbtn--enabled:focus svg { + fill: #fff; +} +.tox .tox-tbtn--active.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--enabled:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn--enabled:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + color: #fff; +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { + fill: #fff; +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 42px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 56px; + width: 68px; +} +.tox .tox-tbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-label--context-toolbar { + margin: 6px 1px 5px 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-number-input { + background: #2f4055; + border-radius: 3px; + display: flex; + margin: 6px 1px 5px 0; + position: relative; + width: auto; +} +.tox .tox-number-input:focus { + background: #2f4055; +} +.tox .tox-number-input:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper { + display: flex; + pointer-events: none; + position: relative; + text-align: center; +} +.tox .tox-number-input .tox-input-wrapper:focus { + background-color: #2f4055; + z-index: 1; +} +.tox .tox-number-input .tox-input-wrapper:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input input { + border-radius: 3px; + color: #fff; + font-size: 14px; + margin: 2px 0; + pointer-events: all; + position: relative; + width: 60px; +} +.tox .tox-number-input input:hover { + background: #2f4055; + color: #fff; +} +.tox .tox-number-input input:focus { + background-color: #2f4055; +} +.tox .tox-number-input input:disabled { + background: #222F3E; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button { + color: #fff; + height: 28px; + position: relative; + text-align: center; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-number-input button:hover, + .tox .tox-number-input button:focus, + .tox .tox-number-input button:active { + outline: 1px solid currentColor !important; + } +} +.tox .tox-number-input button svg { + display: block; + fill: #fff; + margin: 0 auto; + transform: scale(0.67); +} +@media (forced-colors: active) { + .tox .tox-number-input button svg, + .tox .tox-number-input button svg:active, + .tox .tox-number-input button svg:hover { + fill: currentColor !important; + } + .tox .tox-number-input button svg:disabled { + filter: contrast(0); + } +} +.tox .tox-number-input button:focus { + background: #2f4055; + z-index: 1; +} +.tox .tox-number-input button:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input button:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input button:hover { + background: #2f4055; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-number-input button:hover svg { + fill: #fff; +} +.tox .tox-number-input button:active { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-number-input button:active svg { + fill: #fff; +} +.tox .tox-number-input button:disabled { + background: #222F3E; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button:disabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-number-input button.minus { + border-radius: 3px 0 0 3px; +} +.tox .tox-number-input button.plus { + border-radius: 0 3px 3px 0; +} +.tox .tox-number-input:focus:not(:active) > button, +.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper { + background: #2f4055; +} +.tox .tox-tbtn--select { + margin: 6px 1px 5px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #161f29; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + height: initial; + margin: 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(255, 255, 255, 0.5); +} +@media (forced-colors: active) { + .tox .tox-tbtn__select-chevron svg { + fill: currentColor; + } +} +.tox .tox-tbtn--bespoke { + background: #2f4055; +} +.tox .tox-tbtn--bespoke:focus { + background: #2f4055; +} +.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke { + margin-inline-start: 4px; +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-tbtn--disabled .tox-tbtn__select-label, +.tox .tox-tbtn--select:disabled .tox-tbtn__select-label { + cursor: not-allowed; +} +.tox .tox-split-button__main { + border-radius: 3px 0 0 3px; + margin-right: 0; +} +.tox .tox-split-button__main:focus { + border: 0; + box-shadow: none; + background: #222F3E; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-split-button__main:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px 0 0 3px; +} +@media (forced-colors: active) { + .tox .tox-split-button__main:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron { + width: 16px; + border-radius: 0 3px 3px 0; + margin-left: 0; +} +.tox .tox-split-button__chevron:focus { + border: 0; + box-shadow: none; + background: #222F3E; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-split-button__chevron:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 0 3px 3px 0; +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron svg { + fill: rgba(255, 255, 255, 0.5); +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron svg { + fill: currentColor; + } +} +.tox.tox-platform-touch .tox-split-button__main { + width: 30px; +} +.tox.tox-platform-touch .tox-split-button__chevron { + width: 20px; +} +.tox .tox-split-button__main.tox-tbtn--disabled, +.tox .tox-split-button__chevron.tox-tbtn--disabled { + background: #222F3E; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:hover, +.tox .tox-split-button__chevron.tox-tbtn--disabled:hover { + background: #222F3E; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:focus, +.tox .tox-split-button__chevron.tox-tbtn--disabled:focus { + background: #222F3E; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color, +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color { + opacity: 0.3; +} +.tox .tox-toolbar-overlord { + background-color: #222F3E; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background-attachment: local; + background-color: #222F3E; + background-image: repeating-linear-gradient(rgba(255, 255, 255, 0.15) 0 1px, transparent 1px 39px); + background-position: center top 40px; + background-repeat: no-repeat; + background-size: calc(100% - 11px * 2) calc(100% - 41px); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + padding: 0 0px; + transform: perspective(1px); +} +.tox .tox-toolbar-overlord > .tox-toolbar, +.tox .tox-toolbar-overlord > .tox-toolbar__primary, +.tox .tox-toolbar-overlord > .tox-toolbar__overflow { + background-position: center top 0px; + background-size: calc(100% - 11px * 2) calc(100% - 0px); +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + height: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; + visibility: hidden; +} +.tox .tox-toolbar__overflow--growing { + transition: height 0.3s ease, opacity 0.2s linear 0.1s; +} +.tox .tox-toolbar__overflow--shrinking { + transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s; +} +.tox .tox-toolbar-overlord, +.tox .tox-anchorbar { + grid-column: 1 / -1; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: 1px solid transparent; + margin-top: -1px; + padding-bottom: 1px; + padding-top: 1px; +} +@media (forced-colors: active) { + .tox .tox-menubar + .tox-toolbar, + .tox .tox-menubar + .tox-toolbar-overlord { + outline: 1px solid currentColor; + } +} +.tox .tox-toolbar--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, +.tox .tox-toolbar-overlord .tox-toolbar__primary { + background-position: center top 39px; +} +.tox .tox-editor-header > .tox-toolbar--scrolling, +.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { + background-image: none; +} +.tox .tox-focusable-wrapper { + border: 1px solid transparent; + margin-right: 2px; + pointer-events: none; +} +.tox .tox-focusable-wrapper .tox-textfield-size { + pointer-events: all; +} +.tox .tox-focusable-wrapper:focus { + background-color: #2f4055; + border-radius: 6px; + border-style: solid; + border-width: 1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + background-color: #222F3E; + background-position: center top 43px; + background-size: calc(100% - 8px * 2) calc(100% - 51px); + border: none; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + overscroll-behavior: none; + padding: 4px 0; +} +@media (forced-colors: active) { + .tox.tox-tinymce-aux .tox-toolbar__overflow { + border: solid; + } +} +.tox-pop .tox-pop__dialog .tox-toolbar { + background-position: center top 43px; + background-size: calc(100% - 11px * 2) calc(100% - 51px); + padding: 4px 0; +} +.tox-context-form__group { + display: flex; + align-items: center; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 11px 0 12px; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-toolbar--scrolling .tox-toolbar__group { + flex-shrink: 0; + flex-wrap: nowrap; +} +.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox .tox-tooltip { + display: inline-block; + max-width: min(80%, 15em); + padding: 8px 0 0 0; + position: relative; + width: max-content; + z-index: 1150; +} +.tox .tox-tooltip__body { + background-color: #324053; + border-radius: 6px; + box-shadow: none; + color: #fff; + font-size: 12px; + font-style: normal; + font-weight: 600; + overflow-wrap: break-word; + padding: 4px 6px; + text-transform: none; +} +@media (forced-colors: active) { + .tox .tox-tooltip__body { + outline: outset 1px; + } +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #324053; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #324053; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #324053; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #324053; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tree { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-trbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + margin-bottom: 4px; + margin-top: 4px; + outline: none; + overflow: hidden; + padding: 0; + padding-left: 8px; + text-transform: none; +} +.tox .tox-tree .tox-trbtn .tox-tree__label { + cursor: default; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tree .tox-trbtn svg { + display: block; + fill: #fff; +} +.tox .tox-tree .tox-trbtn:focus { + background: #2f4055; + border: 0; + box-shadow: none; +} +.tox .tox-tree .tox-trbtn:hover { + background: #2f4055; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn:hover svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:active { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn:active svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn--disabled, +.tox .tox-tree .tox-trbtn--disabled:hover, +.tox .tox-tree .tox-trbtn:disabled, +.tox .tox-tree .tox-trbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-tree .tox-trbtn--disabled svg, +.tox .tox-tree .tox-trbtn--disabled:hover svg, +.tox .tox-tree .tox-trbtn:disabled svg, +.tox .tox-tree .tox-trbtn:disabled:hover svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tree .tox-trbtn--enabled, +.tox .tox-tree .tox-trbtn--enabled:hover { + background: #599fef; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn--enabled > *, +.tox .tox-tree .tox-trbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--enabled svg, +.tox .tox-tree .tox-trbtn--enabled:hover svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { + color: #fff; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:active > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tree .tox-trbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tree .tox-trbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tree .tox-tree--directory { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label { + font-weight: bold; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { + margin-right: 6px; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { + transition: transform 0.5s ease-in-out; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { + transform: rotate(90deg); +} +.tox .tox-tree .tox-tree--leaf__label { + font-weight: normal; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #fff; +} +.tox .tox-tree .tox-icon-custom-state { + flex-grow: 1; + display: flex; + justify-content: flex-end; +} +.tox .tox-tree .tox-tree--directory__children { + overflow: hidden; + padding-left: 16px; +} +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { + transition: height 0.5s ease-in-out; +} +.tox .tox-tree .tox-trbtn.tox-tree--leaf__label { + display: flex; + justify-content: space-between; +} +[data-mce-name="uploadcare-enhance-filter"] .color-swatch-remove-color path { + fill: #c00; + stroke: #c00; +} +.tox .tox-view-wrap, +.tox .tox-view-wrap__slot-container { + background-color: #222F3E; + display: flex; + flex: 1; + flex-direction: column; + height: 100%; +} +.tox .tox-view { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; + background-color: #222F3E; +} +.tox .tox-view__header { + align-items: center; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 10px; + position: relative; +} +.tox .tox-view__label { + color: #fff; + font-weight: bold; + line-height: 24px; + padding: 4px 16px; + text-align: center; + white-space: nowrap; +} +.tox .tox-view__label--normal { + font-size: 16px; +} +.tox .tox-view__label--large { + font-size: 20px; +} +.tox .tox-view--mobile.tox-view__header, +.tox .tox-view--mobile.tox-view__toolbar { + padding: 8px; +} +.tox .tox-view--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-view__align-right { + margin-left: auto; +} +.tox .tox-view__toolbar { + display: flex; + flex-direction: row; + gap: 8px; + justify-content: space-between; + overflow-x: auto; + padding: 10px; +} +.tox .tox-view__toolbar__group { + display: flex; + flex-direction: row; + gap: 12px; +} +.tox .tox-view__header-start, +.tox .tox-view__header-end { + display: flex; +} +.tox .tox-view__pane { + height: 100%; + padding: 8px; + position: relative; + width: 100%; +} +.tox .tox-view__pane_panel { + border: 1px solid #161f29; + border-radius: 6px; +} +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *, +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-view__header .tox-view__header-start > *, +.tox[dir=rtl] .tox-view__header .tox-view__header-end > * { + margin-right: 8px; +} +.tox .tox-well { + border: 1px solid #161f29; + border-radius: 6px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #161f29; + border-radius: 6px; + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-view .tox-revisionhistory__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-revisionhistory__container { + display: flex; + flex-direction: column; + height: 100%; +} +.tox .tox-revisionhistory { + background-color: #222F3E; + border-top: 1px solid rgba(255, 255, 255, 0.15); + display: flex; + flex: 1; + height: 100%; + overflow-x: auto; + overflow-y: hidden; + position: relative; + width: 100%; +} +.tox .tox-revisionhistory__iframe { + flex: 1; +} +.tox .tox-revisionhistory__sidebar { + display: flex; + flex-direction: column; + height: 100%; + min-width: 248px; + width: 316px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title { + background-color: #222F3E; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + color: #fff; + font-size: 20px; + font-weight: 400; + line-height: 28px; + padding: 12px; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions { + background-color: #2b3b4e; + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow-y: auto; + padding: 10px 12px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus { + height: 100%; + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + bottom: 1px; + left: 1px; + right: 1px; + top: 1px; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card { + background-color: #222F3E; + border: 1px solid rgba(255, 255, 255, 0.15); + border-radius: 6px; + color: #fff; + cursor: pointer; + display: flex; + flex-direction: column; + font-size: 14px; + padding: 12px; + width: 100%; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus { + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff #285ec7; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #285ec7; + box-shadow: 0 0 0 2px #285ec7 !important; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected { + background-color: #1b3b60; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + position: relative; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #fff #cea215; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #cea215; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label { + display: block; + width: min-content; + padding: 4px 8px; + margin-bottom: 8px; + font-size: 12px; + font-weight: bold; + border-radius: 4px; + background: #4e5965; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content { + display: flex; + flex-direction: row; + gap: 8px; + align-items: center; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info { + display: flex; + flex-direction: column; + flex: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label { + font-size: 14px; + font-weight: bold; + line-height: 18px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 12px; + font-weight: normal; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision { + color: rgba(255, 255, 255, 0.5); + font-size: 16px; + line-height: 24px; + padding: 5px 5.5px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon { + color: #fff; + height: 24px; +} +.tox [data-mce-name="suggestededits"] .tox-icon .tox-icon--badge { + fill: #006ce7; +} +.tox .tox-view .tox-suggestededits__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-suggestededits__sink { + position: relative; + z-index: 1000; +} +.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list { + position: absolute; +} +.tox .tox-suggestededits__container { + height: 100%; + /* TINY-12393: Improve height calculation */ + display: flex; + flex-direction: column; +} +.tox .tox-suggestededits__container .tox-suggestededits { + background-color: #222F3E; + border-top: 1px solid #161f29; + display: flex; + flex: 1; + height: inherit; + overflow-x: auto; + overflow-y: hidden; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content { + flex: 1; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model { + height: 100%; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe { + height: 100%; + width: 100%; + overflow: scroll; + background-color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar { + background-color: #34485f; + display: flex; + flex-direction: column; + flex: 0 1 auto; + min-width: 248px; + width: 316px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header { + padding: 4px 12px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content { + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow: auto; + padding: 6px 12px 12px 12px; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card { + background-color: #222F3E; + border-radius: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider { + background-color: #34485f; + height: 1px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor { + align-items: flex-start; + align-self: stretch; + display: flex; + flex-direction: column; + gap: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header { + display: flex; + flex: auto; + justify-content: space-between; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar { + height: 36px; + width: 36px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #fff; + font-size: 14px; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution { + align-items: center; + border: 0; + border-radius: 20px; + height: 20px; + width: 20px; + display: flex; + flex: 0 0 auto; + justify-content: center; + text-align: center; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg { + fill: #78AB46; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg { + fill: #c00; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content { + display: flex; + flex-direction: column; + align-self: stretch; + flex: auto; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations { + display: flex; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar { + align-items: center; + border-radius: 6px; + display: flex; + flex-direction: column; + font-size: 12px; + justify-content: space-between; + width: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert { + background-color: #78AB46; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify { + background-color: #006ce7; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove { + background-color: #c00; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text { + color: #fff; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback { + color: #fff; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea { + border: 2px solid #161f29; + border-radius: 6px; + color: #fff; + gap: 8px; + padding: 5px 6px; + resize: none; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus { + border: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer { + display: flex; + flex-direction: column; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg { + fill: #FFFFFF80; + transform: translate(0px, 8px); + margin-top: -10px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons { + display: flex; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons { + justify-content: space-between; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons { + justify-content: flex-end; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden { + opacity: 0.5; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved { + background-color: #222f3e; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible { + outline: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single { + border-radius: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible { + outline: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover { + box-shadow: 0 4px 8px 0 #222f3e; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.15); +} diff --git a/public/tinymce/skins/ui/oxide-dark/skin.js b/public/tinymce/skins/ui/oxide-dark/skin.js new file mode 100644 index 0000000..2a1b719 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/oxide-dark/skin.css', `.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:2px solid #161f29;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:2px solid #161f29;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:1px solid rgba(255,255,255,.15);box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid rgba(255,255,255,.15);box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:none}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#fff}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#1f354f;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#99c4f5}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#99c4f5}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#383f38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#332a38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#161f29;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,6px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,6px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #006ce7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#0060ce);background-image:none;border-color:var(--tox-private-button-focus-border-color,#0060ce);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:6px 1px 5px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#006ce7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#006ce7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#006ce7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#006ce7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#0060ce);border-color:var(--tox-private-button-primary-focus-border-color,#0060ce);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#0060ce);border-color:var(--tox-private-button-primary-hover-border-color,#0060ce);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#0054b4);border-color:var(--tox-private-button-primary-active-border-color,#0054b4);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#0054b4);border-color:var(--tox-private-button-primary-enabled-border-color,#0054b4);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#00489b);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#00489b);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#003c81);border-color:var(--tox-private-button-primary-enabled-active-border-color,#003c81);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#3d546f);border-color:var(--tox-private-button-secondary-border-color,#3d546f);color:var(--tox-private-button-secondary-text-color,#fff);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:6px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#3d546f);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-focus-border-color,#34485f);color:var(--tox-private-button-secondary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#34485f);border-color:var(--tox-private-button-secondary-hover-border-color,#34485f);color:var(--tox-private-button-secondary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#2b3b4e);border-color:var(--tox-private-button-secondary-active-border-color,#2b3b4e);color:var(--tox-private-button-secondary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#2b5c93);border-color:var(--tox-private-button-secondary-enabled-border-color,#2b5c93);color:var(--tox-private-button-secondary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#254f80);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#254f80);color:var(--tox-private-button-secondary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#254f80);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#254f80);color:var(--tox-private-button-secondary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#1f436c);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#1f436c);color:var(--tox-private-button-secondary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#fff)}.tox .tox-button--naked[disabled]{background-color:rgba(255,255,255,.2);border-color:transparent;color:var(--tox-private-button-naked-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,rgba(255,255,255,.2));border-color:var(--tox-private-button-naked-focus-border-color,transparent);color:var(--tox-private-button-naked-focus-text-color,#fff);box-shadow:unset}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,rgba(255,255,255,.2));border-color:var(--tox-private-button-naked-hover-background-color,transparent);color:var(--tox-private-button-naked-hover-text-color,#fff);box-shadow:unset}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,rgba(255,255,255,.3));border-color:var(--tox-private-button-naked-active-border-color,transparent);color:var(--tox-private-button-naked-active-text-color,#fff);box-shadow:unset}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-text-color,#fff)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#34485f);color:var(--tox-private-button-secondary-outline-focus-text-color,#fff)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#3d546f);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#34485f);color:var(--tox-private-button-secondary-outline-hover-text-color,#fff)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-active-border-color,#34485f);color:var(--tox-private-button-secondary-outline-active-text-color,#fff)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(255,255,255,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,6px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,6px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(255,255,255,0.2))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#006ce7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#006ce7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #006ce7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:rgba(255,255,255,.15);border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.5);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#fff;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#006ce7;stroke:#006ce7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#222f3e}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#222f3e;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#006ce7;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#599fef;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#2f4055;color:#fff;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#599fef;color:#fff}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff;background-color:#2b3b4e;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#2f4055;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#2f4055;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #161f29;border-radius:6px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#442632;border:1px solid #55212b;border-radius:3px;color:#e68080;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#2f4055}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#222f3e;border:1px solid #222f3e;border-radius:6px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#1b3b60;border:1px solid #006ce7;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid #fff;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:6px;border:2px solid #fff}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#222f3e;box-shadow:0 0 8px 8px #222f3e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#222f3e;position:relative;border-radius:6px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#222f3e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(34,47,62,0),#222f3e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#222f3e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#222f3e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,0.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#161f29;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #67aeff;color:#67aeff}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#67aeff;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#cde5ff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #67aeff;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#fff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #161f29;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:6px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #161f29;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #fff;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:2px solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #161f29}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:28px;margin:5px 0 6px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:5px 0 6px 11px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px -4px;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px -4px}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #161f29;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#2f4055}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#222f3e;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:rgba(255,255,255,.15);border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:#006ce7;border-color:rgba(255,255,255,.15)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#222f3e;border:1px solid #161f29;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#fff}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(255,255,255,.5)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:none;display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#222f3e;border:0;box-shadow:none;color:#fff;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#82b153;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #b5d199;outline-offset:2px}.tox .tox-notification--success a:active{color:#689041;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#d42b2b;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #e68080;outline-offset:2px}.tox .tox-notification--error a:active{color:#a22;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:rgba(255,255,255,.15);color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#997a00;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #ffcc00;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#665200;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#2681ea;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #83b7f3;outline-offset:2px}.tox .tox-notification--info a:active{color:#1368c9;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#17202a;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#222f3e;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#fff;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid rgba(255,255,255,.15)}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#2b3b4e;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(255,255,255,.5)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(255,255,255,0.5)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid rgba(255,255,255,.15);padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#2b3b4e 24%,#202d3b 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#006ce7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#006ce7}.tox .tox-promotion-dialog--footer{background-color:#17202a;color:rgba(255,255,255,.5);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#55367a;color:#c290fb;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #C290FB}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(255,255,255,.5);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#cde5ff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #67aeff;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#fff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #161f29;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#161f29 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #161f29 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #161f29 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #161f29;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#34485f);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#0e141a)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#222f3e);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#222f3e);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#17202a);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,6px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#fff)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#222f3e);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,6px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#0e141a);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#222f3e);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #161f29;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#161f29;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.75);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(255,255,255,.75);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#fff}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#006ce7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#222f3e);color:var(--tox-private-text-color,#fff)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#222f3e);border:1px solid var(--tox-private-slider-border-color,rgba(255,255,255,.15))}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#fff)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#006ce7);border:1px solid var(--tox-private-slider-checked-border-color,#006ce7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#006ce7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#fff}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#222f3e;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:#2f4055;border-radius:3px;display:flex;margin:6px 1px 5px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#2f4055}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#2f4055;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#2f4055;color:#fff}.tox .tox-number-input input:focus{background-color:#2f4055}.tox .tox-number-input input:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{color:#fff;height:28px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#2f4055;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#2f4055}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #161f29}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:#2f4055}.tox .tox-tbtn--bespoke:focus{background:#2f4055}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#222f3e;color:#fff;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#222f3e;color:#fff;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(rgba(255,255,255,.15) 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#2f4055;border-radius:6px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#324053;border-radius:6px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #324053;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #324053;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #324053;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #324053;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#2f4055;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#222f3e}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:10px;position:relative}.tox .tox-view__label{color:#fff;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:10px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #161f29;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #161f29;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #161f29;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#222f3e;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#fff;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#2b3b4e;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#222f3e;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff #285ec7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #285ec7;box-shadow:0 0 0 2px #285ec7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#1b3b60;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff #cea215;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #cea215}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#4e5965}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(255,255,255,.5);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#fff;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#006ce7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#222f3e;border-top:1px solid #161f29;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#34485f;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#222f3e;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#34485f;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#006ce7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#fff;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#fff;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #161f29;border-radius:6px;color:#fff;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#FFFFFF80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #222f3e}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox.tox-tinymce-aux .tox-toolbar__overflow{box-shadow:0 0 0 1px rgba(255,255,255,.15)}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide-dark/skin.min.css b/public/tinymce/skins/ui/oxide-dark/skin.min.css new file mode 100644 index 0000000..1b688d7 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.min.css @@ -0,0 +1 @@ +.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:2px solid #161f29;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:2px solid #161f29;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:1px solid rgba(255,255,255,.15);box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid rgba(255,255,255,.15);box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:none}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#fff}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#1f354f;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#99c4f5}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#99c4f5}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#383f38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#332a38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#161f29;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,6px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,6px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #006ce7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#0060ce);background-image:none;border-color:var(--tox-private-button-focus-border-color,#0060ce);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:6px 1px 5px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#006ce7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#006ce7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#006ce7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#006ce7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#0060ce);border-color:var(--tox-private-button-primary-focus-border-color,#0060ce);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#0060ce);border-color:var(--tox-private-button-primary-hover-border-color,#0060ce);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#0054b4);border-color:var(--tox-private-button-primary-active-border-color,#0054b4);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#0054b4);border-color:var(--tox-private-button-primary-enabled-border-color,#0054b4);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#00489b);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#00489b);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#003c81);border-color:var(--tox-private-button-primary-enabled-active-border-color,#003c81);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#3d546f);border-color:var(--tox-private-button-secondary-border-color,#3d546f);color:var(--tox-private-button-secondary-text-color,#fff);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:6px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#3d546f);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-focus-border-color,#34485f);color:var(--tox-private-button-secondary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#34485f);border-color:var(--tox-private-button-secondary-hover-border-color,#34485f);color:var(--tox-private-button-secondary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#2b3b4e);border-color:var(--tox-private-button-secondary-active-border-color,#2b3b4e);color:var(--tox-private-button-secondary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#2b5c93);border-color:var(--tox-private-button-secondary-enabled-border-color,#2b5c93);color:var(--tox-private-button-secondary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#254f80);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#254f80);color:var(--tox-private-button-secondary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#254f80);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#254f80);color:var(--tox-private-button-secondary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#1f436c);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#1f436c);color:var(--tox-private-button-secondary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#fff)}.tox .tox-button--naked[disabled]{background-color:rgba(255,255,255,.2);border-color:transparent;color:var(--tox-private-button-naked-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,rgba(255,255,255,.2));border-color:var(--tox-private-button-naked-focus-border-color,transparent);color:var(--tox-private-button-naked-focus-text-color,#fff);box-shadow:unset}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,rgba(255,255,255,.2));border-color:var(--tox-private-button-naked-hover-background-color,transparent);color:var(--tox-private-button-naked-hover-text-color,#fff);box-shadow:unset}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,rgba(255,255,255,.3));border-color:var(--tox-private-button-naked-active-border-color,transparent);color:var(--tox-private-button-naked-active-text-color,#fff);box-shadow:unset}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-text-color,#fff)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#34485f);color:var(--tox-private-button-secondary-outline-focus-text-color,#fff)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#3d546f);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#34485f);color:var(--tox-private-button-secondary-outline-hover-text-color,#fff)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-active-border-color,#34485f);color:var(--tox-private-button-secondary-outline-active-text-color,#fff)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(255,255,255,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,6px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,6px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(255,255,255,0.2))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#006ce7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#006ce7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #006ce7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:rgba(255,255,255,.15);border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.5);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#fff;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#006ce7;stroke:#006ce7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#222f3e}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#222f3e;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#006ce7;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#599fef;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#2f4055;color:#fff;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#599fef;color:#fff}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff;background-color:#2b3b4e;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#2f4055;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#2f4055;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #161f29;border-radius:6px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#442632;border:1px solid #55212b;border-radius:3px;color:#e68080;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#2f4055}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#222f3e;border:1px solid #222f3e;border-radius:6px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#1b3b60;border:1px solid #006ce7;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid #fff;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:6px;border:2px solid #fff}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#222f3e;box-shadow:0 0 8px 8px #222f3e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#222f3e;position:relative;border-radius:6px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#222f3e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(34,47,62,0),#222f3e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#222f3e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#222f3e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,0.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#161f29;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #67aeff;color:#67aeff}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#67aeff;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#cde5ff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #67aeff;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#fff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #161f29;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:6px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #161f29;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #fff;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:2px solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #161f29}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:28px;margin:5px 0 6px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#2b3b4e;border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#161f29;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:5px 0 6px 11px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px -4px;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px -4px}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #161f29;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#2f4055}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#222f3e;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:rgba(255,255,255,.15);border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:#006ce7;border-color:rgba(255,255,255,.15)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#222f3e;border:1px solid #161f29;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#fff}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(255,255,255,.5)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#2b3b4e;border:1px solid rgba(255,255,255,.15);border-radius:6px;box-shadow:none;display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#222f3e;border:0;box-shadow:none;color:#fff;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#82b153;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #b5d199;outline-offset:2px}.tox .tox-notification--success a:active{color:#689041;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#d42b2b;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #e68080;outline-offset:2px}.tox .tox-notification--error a:active{color:#a22;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:rgba(255,255,255,.15);color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#997a00;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #ffcc00;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#665200;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#2681ea;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #83b7f3;outline-offset:2px}.tox .tox-notification--info a:active{color:#1368c9;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#17202a;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#222f3e;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#fff;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid rgba(255,255,255,.15)}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#2b3b4e;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(255,255,255,.5)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(255,255,255,0.5)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid rgba(255,255,255,.15);padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#2b3b4e 24%,#202d3b 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#006ce7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#006ce7}.tox .tox-promotion-dialog--footer{background-color:#17202a;color:rgba(255,255,255,.5);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#55367a;color:#c290fb;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #C290FB}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(255,255,255,.5);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#cde5ff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #67aeff;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#fff;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #161f29;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#161f29 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #161f29 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #161f29 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #161f29;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#34485f);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#0e141a)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#222f3e);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#222f3e);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#17202a);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,6px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#fff)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#222f3e);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,6px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#0e141a);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#222f3e);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #161f29;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#161f29;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.75);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(255,255,255,.75);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#fff}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#006ce7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#222f3e);color:var(--tox-private-text-color,#fff)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#222f3e);border:1px solid var(--tox-private-slider-border-color,rgba(255,255,255,.15))}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#fff)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#006ce7);border:1px solid var(--tox-private-slider-checked-border-color,#006ce7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#006ce7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#fff}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#222f3e;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:#2f4055;border-radius:3px;display:flex;margin:6px 1px 5px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#2f4055}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#2f4055;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#2f4055;color:#fff}.tox .tox-number-input input:focus{background-color:#2f4055}.tox .tox-number-input input:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{color:#fff;height:28px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#2f4055;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#2f4055}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #161f29}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:#2f4055}.tox .tox-tbtn--bespoke:focus{background:#2f4055}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#222f3e;color:#fff;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#222f3e;color:#fff;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(rgba(255,255,255,.15) 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#2f4055;border-radius:6px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#324053;border-radius:6px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #324053;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #324053;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #324053;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #324053;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#2f4055;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#2f4055;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#599fef;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#222f3e}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:10px;position:relative}.tox .tox-view__label{color:#fff;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:10px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #161f29;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #161f29;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #161f29;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#222f3e;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#fff;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#2b3b4e;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#222f3e;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff #285ec7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #285ec7;box-shadow:0 0 0 2px #285ec7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#1b3b60;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #fff #cea215;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #cea215}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#4e5965}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(255,255,255,.5);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#fff;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#006ce7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#222f3e;border-top:1px solid #161f29;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#34485f;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#222f3e;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#34485f;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#006ce7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#fff;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#fff;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #161f29;border-radius:6px;color:#fff;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#FFFFFF80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #222f3e}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox.tox-tinymce-aux .tox-toolbar__overflow{box-shadow:0 0 0 1px rgba(255,255,255,.15)} diff --git a/public/tinymce/skins/ui/oxide-dark/skin.min.ts b/public/tinymce/skins/ui/oxide-dark/skin.min.ts new file mode 100644 index 0000000..20e3c16 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.min.ts @@ -0,0 +1,507 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-checkmark": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__overflow": string; + "tox-toolbar__primary": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-end": string; + "tox-dialog__footer-start": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-toolbar-textfield": string; + "tox-custom-editor": string; + "tox-focusable-wrapper": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-highlight-bg-color__color": string; + "tox-icon-text-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-end": string; + "tox-view__header-start": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css new file mode 100644 index 0000000..25b0a37 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.css @@ -0,0 +1,30 @@ +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} diff --git a/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js new file mode 100644 index 0000000..ee202b4 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/oxide-dark/skin.shadowdom.css', `body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css new file mode 100644 index 0000000..8745951 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css @@ -0,0 +1 @@ +body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} diff --git a/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.shadowdom.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/oxide-dark/skin.ts b/public/tinymce/skins/ui/oxide-dark/skin.ts new file mode 100644 index 0000000..bc28c31 --- /dev/null +++ b/public/tinymce/skins/ui/oxide-dark/skin.ts @@ -0,0 +1,507 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-collection__item-checkmark": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__primary": string; + "tox-toolbar__overflow": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-start": string; + "tox-dialog__footer-end": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-toolbar-textfield": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-focusable-wrapper": string; + "tox-custom-editor": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-text-color__color": string; + "tox-icon-highlight-bg-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-start": string; + "tox-view__header-end": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; +}; diff --git a/public/tinymce/skins/ui/oxide/content.css b/public/tinymce/skins/ui/oxide/content.css new file mode 100644 index 0000000..49b803c --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.css @@ -0,0 +1,1037 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/public/tinymce/skins/ui/oxide/content.inline.css b/public/tinymce/skins/ui/oxide/content.inline.css new file mode 100644 index 0000000..9037e9e --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.inline.css @@ -0,0 +1,1031 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} diff --git a/public/tinymce/skins/ui/oxide/content.inline.js b/public/tinymce/skins/ui/oxide/content.inline.js new file mode 100644 index 0000000..8d8d680 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.inline.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/oxide/content.inline.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide/content.inline.min.css b/public/tinymce/skins/ui/oxide/content.inline.min.css new file mode 100644 index 0000000..c82c8e0 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.inline.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static} diff --git a/public/tinymce/skins/ui/oxide/content.inline.min.ts b/public/tinymce/skins/ui/oxide/content.inline.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.inline.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide/content.inline.ts b/public/tinymce/skins/ui/oxide/content.inline.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.inline.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide/content.js b/public/tinymce/skins/ui/oxide/content.js new file mode 100644 index 0000000..498e4b2 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/oxide/content.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide/content.min.css b/public/tinymce/skins/ui/oxide/content.min.css new file mode 100644 index 0000000..5d02559 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse} diff --git a/public/tinymce/skins/ui/oxide/content.min.ts b/public/tinymce/skins/ui/oxide/content.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide/content.ts b/public/tinymce/skins/ui/oxide/content.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/oxide/content.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/oxide/skin.css b/public/tinymce/skins/ui/oxide/skin.css new file mode 100644 index 0000000..ce14cad --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.css @@ -0,0 +1,5615 @@ +.tox { + box-shadow: none; + box-sizing: content-box; + cursor: auto; + font-style: normal; + font-weight: normal; + line-height: normal; + -webkit-tap-highlight-color: transparent; + -webkit-text-decoration: none; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; +} +.tox *:not(svg):not(rect) { + box-sizing: inherit; + color: inherit; + cursor: inherit; + direction: inherit; + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + line-height: inherit; + -webkit-tap-highlight-color: inherit; + text-align: inherit; + text-decoration: inherit; + text-shadow: inherit; + text-transform: inherit; + vertical-align: inherit; + white-space: inherit; +} +.tox *:not(svg):not(rect) { + /* stylelint-disable-line no-duplicate-selectors */ + background: transparent; + border: 0; + box-shadow: none; + float: none; + height: auto; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + width: auto; +} +.tox:not([dir=rtl]) { + direction: ltr; + text-align: left; +} +.tox[dir=rtl] { + direction: rtl; + text-align: right; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.tox { + color: var(--tox-private-color-black, #222f3e); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-font-size-base, 16px); +} +.tox-tinymce { + border: 2px solid #eeeeee; + border-radius: 10px; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + overflow: hidden; + position: relative; + visibility: inherit !important; +} +.tox.tox-tinymce-inline { + border: none; + box-shadow: none; + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-header { + background-color: #fff; + border: 2px solid #eeeeee; + border-radius: 10px; + box-shadow: none; + overflow: hidden; +} +.tox-tinymce-aux { + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + z-index: var(--tox-private-z-index-sink, 1300); +} +.tox[dir=rtl] .tox-icon--flip svg { + transform: rotateY(180deg); +} +.tox .tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-editor-header { + display: grid; + grid-template-columns: 1fr min-content; + z-index: 2; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: #fff; + border-bottom: none; + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { + transition: box-shadow 0.5s; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: 1px solid #e3e3e3; + box-shadow: none; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: #fff; + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15); +} +.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { + background: none; + border: none; + box-shadow: none; + padding: 0; +} +.tox-editor-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox-editor-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox-editor-dock-transition { + transition: visibility 0s linear 0.25s, opacity 0.25s ease; +} +.tox-editor-dock-transition.tox-editor-dock-fadein { + transition-delay: 0s; +} +.tox .accessibility-issue__header { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox #accessibility-issue__subheader { + font-size: 16px; + color: #222f3e; +} +.tox .accessbility-sr-only { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(0 0 99.9% 99.9%); + overflow: hidden; + height: 1px; + width: 1px; + padding: 0; + border: 0; +} +.tox .accessibility-issue__description { + align-items: stretch; + border-radius: 6px; + justify-content: space-between; +} +.tox .accessibility-issue__description > div { + padding-bottom: 4px; +} +.tox .accessibility-issue__description > div > div { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description > div > div .tox-icon svg { + display: block; +} +.tox #accessibility-issue__contentID { + margin-top: 8px; + margin-bottom: 8px; +} +.tox #accessibility-issue__contentID span:first-child { + font-weight: bold; +} +.tox #accessibility-issue__document { + padding-bottom: 8px; +} +.tox .accessibility-issue__repair { + margin-top: 8px; +} +.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error { + color: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { + background-color: #e6f0fd; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { + font-size: 14px; + color: #006ce7; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg { + fill: #006ce7; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { + background-color: #006ce7; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus { + background-color: #0060ce; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { + background-color: #0054b4; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { + background-color: #fffae6; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { + font-size: 14px; + color: #7a6e25; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg { + fill: #7a6e25; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { + background-color: #FFE89D; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus { + background-color: #F2D574; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { + background-color: #E8C657; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { + background-color: #fae6e6; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { + font-size: 14px; + color: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg { + fill: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { + background-color: #F2BFBF; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus { + background-color: #E9A4A4; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { + background-color: #EE9494; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { + background-color: rgba(120, 171, 70, 0.1); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child { + display: none; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { + color: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg { + fill: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, +.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { + margin-top: 0; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { + padding: 8px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-right: 4px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-right: auto; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 8px 4px 4px; +} +.tox .mce-codemirror { + background: #fff; + bottom: 0; + font-size: 13px; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .mce-codemirror.tox-inline-codemirror { + margin: 8px; + position: absolute; +} +.tox .tox-advtemplate .tox-form__grid { + flex: 1; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child { + display: flex; + flex-direction: column; + width: 30%; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) { + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child { + width: 100%; + } +} +.tox .tox-advtemplate iframe { + border-color: #eeeeee; + border-radius: 10px; + border-style: solid; + border-width: 1px; + margin: 0 10px; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bottom-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + border-width: var(--tox-private-button-border-width, 1px); + border-style: var(--tox-private-button-border-style, solid); + border-radius: var(--tox-private-control-border-radius, 6px); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-button-font-size, 14px); + font-style: var(--tox-private-button-font-style, normal); + font-weight: var(--tox-private-button-font-weight, bold); + line-height: var(--tox-private-control-line-height, 24px); + padding: var(--tox-private-button-padding-y, 4px) var(--tox-private-button-padding-x, 16px); + text-align: center; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + letter-spacing: normal; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + outline: none; + position: relative; + white-space: nowrap; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 2px; +} +.tox .tox-button::before { + border-radius: var(--tox-private-control-border-radius, 6px); + bottom: calc(-1 * var(--tox-private-button-border-width, 1px)); + box-shadow: var(--tox-private-button-focus-outline, inset 0 0 0 1px #fff, 0 0 0 2px #006ce7); + content: ''; + left: calc(-1 * var(--tox-private-button-border-width, 1px)); + opacity: 0; + pointer-events: none; + position: absolute; + right: calc(-1 * var(--tox-private-button-border-width, 1px)); + top: calc(-1 * var(--tox-private-button-border-width, 1px)); +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-focus-background-color, #0060ce); + background-image: none; + border-color: var(--tox-private-button-focus-border-color, #0060ce); + box-shadow: var(--tox-private-button-focus-box-shadow, none); + color: var(--tox-private-button-focus-text-color, #fff); +} +.tox .tox-button:focus:not(:disabled)::before { + opacity: 1; +} +.tox .tox-button.tox-button--icon, +.tox .tox-button:has(.tox-icon:only-child) { + padding: 4px; +} +.tox .tox-button .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button .tox-icon.tox-icon--success svg { + fill: var(--tox-private-color-success, #78AB46); +} +.tox .tox-button .tox-icon.tox-icon--error svg { + fill: var(--tox-private-color-error, #c00); +} +.tox .tox-button--stretch { + width: 100%; +} +.tox-context-form__group .tox-button--icon, +.tox-context-form__group .tox-button.tox-button--icon { + margin: 6px 1px 5px 0; + padding: 0; +} +.tox { + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ +} +.tox .tox-button { + background-color: var(--tox-private-button-primary-background-color, #006ce7); + background-image: none; + background-position: 0 0; + background-repeat: repeat; + color: var(--tox-private-button-primary-text-color, #fff); + border-color: var(--tox-private-button-primary-border-color, #006ce7); + /* Enabled state */ +} +.tox .tox-button[disabled] { + background-color: var(--tox-private-button-primary-disabled-background-color, #006ce7); + background-image: none; + border-color: var(--tox-private-button-primary-disabled-border-color, #006ce7); + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-focus-background-color, #0060ce); + border-color: var(--tox-private-button-primary-focus-border-color, #0060ce); + color: var(--tox-private-button-primary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-hover-background-color, #0060ce); + border-color: var(--tox-private-button-primary-hover-border-color, #0060ce); + color: var(--tox-private-button-primary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:active:not(:disabled) { + background-color: var(--tox-private-button-primary-active-background-color, #0054b4); + border-color: var(--tox-private-button-primary-active-border-color, #0054b4); + color: var(--tox-private-button-primary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled { + background-color: var(--tox-private-button-primary-enabled-background-color, #0054b4); + border-color: var(--tox-private-button-primary-enabled-border-color, #0054b4); + color: var(--tox-private-button-primary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled[disabled] { + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-focus-background-color, #00489b); + border-color: var(--tox-private-button-primary-enabled-focus-border-color, #00489b); + color: var(--tox-private-button-primary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-hover-background-color, #00489b); + border-color: var(--tox-private-button-primary-enabled-hover-border-color, #00489b); + color: var(--tox-private-button-primary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-active-background-color, #003c81); + border-color: var(--tox-private-button-primary-enabled-active-border-color, #003c81); + color: var(--tox-private-button-primary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary { + background-color: var(--tox-private-button-secondary-background-color, #f0f0f0); + border-color: var(--tox-private-button-secondary-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-text-color, #222f3e); + border-style: solid; + border-width: 1px; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-radius: 6px; + box-shadow: none; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + outline: none; + padding: 4px 16px; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + /* Enabled state */ +} +.tox .tox-button--secondary[disabled] { + background-color: var(--tox-private-button-secondary-disabled-background-color, #f0f0f0); + background-image: none; + border-color: var(--tox-private-button-secondary-disabled-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-focus-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-focus-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-focus-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-hover-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-hover-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-hover-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-active-background-color, #d6d6d6); + border-color: var(--tox-private-button-secondary-active-border-color, #d6d6d6); + color: var(--tox-private-button-secondary-active-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled { + background-color: var(--tox-private-button-secondary-enabled-background-color, #a8c8ed); + border-color: var(--tox-private-button-secondary-enabled-border-color, #a8c8ed); + color: var(--tox-private-button-secondary-enabled-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled[disabled] { + color: var(--tox-private-button-secondary-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-focus-background-color, #93bbe9); + border-color: var(--tox-private-button-secondary-enabled-focus-border-color, #93bbe9); + color: var(--tox-private-button-secondary-enabled-focus-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-hover-background-color, #93bbe9); + border-color: var(--tox-private-button-secondary-enabled-hover-border-color, #93bbe9); + color: var(--tox-private-button-secondary-enabled-hover-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-active-background-color, #7daee4); + border-color: var(--tox-private-button-secondary-enabled-active-border-color, #7daee4); + color: var(--tox-private-button-secondary-enabled-active-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: var(--tox-private-button-naked-text-color, #222f3e); +} +.tox .tox-button--naked[disabled] { + background-color: rgba(34, 47, 62, 0.12); + border-color: transparent; + color: var(--tox-private-button-naked-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: var(--tox-private-button-naked-focus-background-color, rgba(34, 47, 62, 0.12)); + border-color: var(--tox-private-button-naked-focus-border-color, transparent); + color: var(--tox-private-button-naked-focus-text-color, #222f3e); + box-shadow: unset; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: var(--tox-private-button-naked-hover-background-color, rgba(34, 47, 62, 0.12)); + border-color: var(--tox-private-button-naked-hover-background-color, transparent); + color: var(--tox-private-button-naked-hover-text-color, #222f3e); + box-shadow: unset; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: var(--tox-private-button-naked-active-background-color, rgba(34, 47, 62, 0.18)); + border-color: var(--tox-private-button-naked-active-border-color, transparent); + color: var(--tox-private-button-naked-active-text-color, #222f3e); + box-shadow: unset; +} +.tox .tox-button--secondary--outline { + background-color: transparent; + border-color: var(--tox-private-button-secondary-outline-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-outline-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-focus-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-outline-focus-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-focus-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-hover-background-color, #f0f0f0); + border-color: var(--tox-private-button-secondary-outline-hover-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-hover-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-active-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-outline-active-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-active-text-color, #222f3e); +} +.tox .tox-button--secondary--outline[disabled] { + background-color: var(--tox-private-button-secondary-outline-disabled-background-color, transparent); + border-color: var(--tox-private-button-secondary-outline-disabled-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-outline-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox { + align-items: center; + border-radius: var(--tox-private-checkbox-border-radius, 6px); + cursor: pointer; + display: flex; + height: var(--tox-private-control-height, 36px); + min-width: var(--tox-private-control-height, 36px); +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + padding: var(--tox-private-pad-xs, calc(4px - 1px)); + border-radius: var(--tox-private-checkbox-border-radius, 6px); + box-shadow: 0 0 0 2px transparent; + height: var(--tox-private-control-line-height, 24px); + aspect-ratio: 1; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: var(--tox-private-checkbox-unselected-color, rgba(34, 47, 62, 0.3)); +} +@media (forced-colors: active) { + .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: currentColor !important; + } +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: var(--tox-private-checkbox-indeterminate-color, #006ce7); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: var(--tox-private-checkbox-selected-color, #006ce7); +} +.tox .tox-checkbox--disabled { + color: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + box-shadow: var(--tox-private-checkbox-focus-box-shadow, inset 0 0 0 1px #006ce7); +} +.tox:not([dir=rtl]) .tox-checkbox__label { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox:not([dir=rtl]) .tox-checkbox__input { + left: -10000px; +} +.tox:not([dir=rtl]) .tox-bar .tox-checkbox { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__label { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__input { + right: -10000px; +} +.tox[dir=rtl] .tox-bar .tox-checkbox { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #e3e3e3; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #fcfcfc; + color: rgba(34, 47, 62, 0.7); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + border-radius: 3px; + color: #222f3e; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector, +.tox .tox-image-selector-menu .tox-collection__item { + flex-direction: column; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark { + flex-grow: 1; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector label, +.tox .tox-image-selector-menu .tox-collection__item label { + width: 48px; + white-space: nowrap; + overflow: hidden; + font-size: 12px; + color: #222f3e; + text-align: center; + align-self: flex-end; +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark { + height: 24px; + width: 24px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path { + fill: #006ce7; + stroke: #006ce7; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #fff; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + z-index: 2; + background-color: #fff; + opacity: 0.8; + background-clip: content-box; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #fff; + color: #222f3e; +} +.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #006ce7; + color: #fff; +} +@media (forced-colors: active) { + .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + border: solid 1px; + } +} +.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #a6ccf7; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #f0f0f0; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 inset; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #a6ccf7; + color: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #222f3e; + background-color: #fff; + position: relative; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + background-color: #f0f0f0; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus { + background-color: #f0f0f0; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection__item-image { + border: 1px solid #eeeeee; + border-radius: 6px; + display: flex; + flex-direction: column; + justify-content: center; + margin-bottom: 4px; + position: relative; +} +.tox .tox-collection__item-icon, +.tox .tox-collection__item-checkmark { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg, +.tox .tox-collection__item-checkmark svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + max-width: 100%; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection__item-accessory { + color: currentColor; + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + text-transform: none; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + min-height: 24px; +} +.tox .tox-collection__item-caret::after { + content: ''; + font-size: 0; + min-height: inherit; +} +.tox .tox-collection__item-caret svg { + fill: currentColor; +} +.tox .tox-collection__item--state-disabled { + background-color: transparent; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark { + display: none; +} +.tox .tox-collection--horizontal { + background-color: #fff; + border: 1px solid #e3e3e3; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: nowrap; + margin-bottom: 0; + overflow-x: auto; + padding: 0; +} +.tox .tox-collection--horizontal .tox-collection__group { + align-items: center; + display: flex; + flex-wrap: nowrap; + margin: 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item { + height: 28px; + margin: 6px 1px 5px 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item-label { + white-space: nowrap; +} +.tox .tox-collection--horizontal .tox-collection__item-caret { + margin-left: 4px; +} +.tox .tox-collection__item-container { + display: flex; +} +.tox .tox-collection__item-container--row { + align-items: center; + flex: 1 1 auto; + flex-direction: row; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-left { + margin-right: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-right { + justify-content: flex-end; + margin-left: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { + align-items: flex-start; + margin-bottom: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { + align-items: center; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { + align-items: flex-end; + margin-top: auto; +} +.tox .tox-collection__item-container--column { + align-self: center; + flex: 1 1 auto; + flex-direction: column; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-left { + align-items: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-right { + align-items: flex-end; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { + align-self: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { + align-self: center; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { + align-self: flex-end; +} +.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-collection__item-accessory { + margin-left: 16px; + text-align: right; +} +.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { + margin-left: 16px; +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-right: 8px; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-right: 4px; +} +.tox[dir=rtl] .tox-collection__item-accessory { + margin-right: 16px; + text-align: left; +} +.tox[dir=rtl] .tox-collection .tox-collection__item-caret { + margin-right: 16px; + transform: rotateY(180deg); +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { + margin-right: 4px; +} +@media (forced-colors: active) { + .tox .tox-hue-slider, + .tox .tox-rgb-form .tox-rgba-preview { + background-color: currentColor !important; + border: 1px solid highlight !important; + forced-color-adjust: none; + } +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + box-sizing: border-box; + display: flex; + height: 100%; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + box-sizing: content-box; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + box-sizing: border-box; + height: 100%; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-spectrum:focus, +.tox .tox-sv-palette-spectrum:focus { + outline: #08f solid; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + box-sizing: content-box; + height: 4px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + min-width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid #f00 !important; + box-shadow: 0 0 0 1px #f00; +} +.tox .tox-rgb-container { + position: relative; +} +.tox .tox-rgb-form .tox-invalid-icon { + align-content: center; + align-items: center; + display: none; + height: 100%; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid { + margin: 0; +} +.tox .tox-rgb-warning-note { + background-color: #f5cccc; + border: 1px solid #f0b3b3; + border-radius: 3px; + color: #77181f; + padding: 3px; +} +.tox input.tox-invalid + .tox-invalid-icon { + display: flex; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox:not([dir=rtl]) .tox-sv-palette { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider-thumb { + margin-left: -1px; +} +.tox:not([dir=rtl]) .tox-rgb-form label { + margin-right: 0.5em; +} +.tox[dir=rtl] .tox-sv-palette { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider-thumb { + margin-right: -1px; +} +.tox[dir=rtl] .tox-rgb-form label { + margin-left: 0.5em; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 5px 0 6px 11px; +} +.tox .tox-collection--list .tox-collection__group .tox-swatches-menu { + border: 0; + margin: -4px -4px; +} +.tox .tox-swatches__row { + display: flex; +} +@media (forced-colors: active) { + .tox .tox-swatches__row { + forced-color-adjust: none; + } +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + fill: #222f3e; + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #f0f0f0; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg { + display: none; + fill: #222f3e; + height: 24px; + margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2); + width: 24px; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg path { + fill: #fff; + paint-order: stroke; + stroke: #222f3e; + stroke-width: 2px; +} +.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { + display: block; +} +.tox:not([dir=rtl]) .tox-swatches__picker-btn { + margin-left: auto; +} +.tox[dir=rtl] .tox-swatches__picker-btn { + margin-right: auto; +} +.tox { + /* Animation for deleting a comment */ + /* A comment fades to 0 when it is being deleted, then is removed */ +} +.tox .tox-comment { + background: #fff; + border: 1px solid #fff; + border-radius: 6px; + padding: 8px; + padding-bottom: 16px; + position: relative; +} +.tox .tox-comment:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected { + background-color: #fff2c9; + border: 1px solid #ffcf30; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected:focus { + border: 2px solid #006ce7; + margin: -1px; +} +.tox .tox-comment.tox-comment--selected:focus:not(:first-child) { + margin-top: 7px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single { + margin-bottom: 12px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus { + position: relative; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after { + top: -9px; + pointer-events: none; + position: absolute; + content: ""; + display: block; + bottom: -9px; + left: -9px; + right: -9px; + border-radius: 6px; + border: 2px solid #006ce7; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after { + bottom: calc((12px + 16px + 1px) * -1); +} +.tox .tox-comment__header { + align-items: center; + color: #222f3e; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-comment__body { + color: #222f3e; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); + white-space: pre-wrap; + /* We remove the transitions when wanting to measure and jump straight to collapsed or expanded */ +} +.tox .tox-comment__body.tox-comment__body--expanded { + max-height: 100em; + transition: max-height 1s ease-in-out; +} +.tox .tox-comment__body.tox-comment__body--pending { + transition: max-height 0s; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; + font-size: 16px; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #222f3e; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #fff; + box-shadow: 0 0 8px 8px #fff; + color: #222f3e; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: 0.8em; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; + font-style: normal; + /* Need a focus highlight on the show more/less button */ +} +.tox .tox-comment__expander p:focus { + font-weight: bold; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-tbtn.tox-comment__mention-btn { + display: flex; + width: 34px; + height: 34px; + padding: 5px; + justify-content: center; + align-items: center; + margin: 0; + background-color: transparent; +} +.tox .tox-comment-thread { + background: #fff; + position: relative; + border-radius: 6px; + background-color: transparent; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #fff; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(255, 255, 255, 0), #fff); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #fff; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #fff; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 20; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; + padding: 12px; + scroll-behavior: smooth; +} +.tox .tox-comment__scroll:has(textarea:focus) { + scroll-behavior: auto; +} +.tox .tox-comment--disappearing { + transition: opacity 0.5s ease; +} +.tox .tox-comment[data-transitioning-destination="deleting"] { + opacity: 0; +} +.tox .tox-ring-loader { + width: 10px; + height: 10px; + border: 1px solid #FFF; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: tox-rotation 1s linear infinite; +} +.tox:not([dir=rtl]) .tox-comment__edit { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child, +.tox:not([dir=rtl]) .tox-comment__edit > *:last-child, +.tox:not([dir=rtl]) .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox[dir=rtl] .tox-comment__edit { + margin-right: 8px; +} +.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child, +.tox[dir=rtl] .tox-comment__edit > *:last-child, +.tox[dir=rtl] .tox-comment__reply > *:last-child { + margin-right: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(34, 47, 62, 0.7); +} +.tox .tox-user__avatar img { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-user__name { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: bold; + line-height: 18px; + text-transform: none; +} +.tox:not([dir=rtl]) .tox-user__avatar svg, +.tox:not([dir=rtl]) .tox-user__avatar img { + margin-right: 8px; +} +.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar svg, +.tox[dir=rtl] .tox-user__avatar img { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar + .tox-user__name { + margin-right: 8px; +} +.tox { + /* .tox-dialog-blocker-wrap { + // + } */ +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .tox-dialog-wrap__backdrop--opaque { + background-color: #fff; +} +.tox .tox-dialog { + background-color: #fff; + border-color: #eeeeee; + border-radius: 10px; + border-style: solid; + border-width: 0; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 2; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog { + align-self: flex-start; + margin: 8px auto; + max-height: calc(100vh - 8px * 2); + width: calc(100vw - 16px); + } +} +.tox .tox-dialog-inline { + z-index: 1100; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #fff; + border-bottom: none; + color: #222f3e; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: none; +} +.tox .tox-dialog__body { + color: #222f3e; + display: flex; + flex: 1; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + min-width: 0; + text-align: left; + text-transform: none; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body { + flex-direction: column; + } +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: 16px 16px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-dialog__body-nav { + max-width: 11em; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { + flex-direction: row; + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding-bottom: 0; + } +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(34, 47, 62, 0.7); + display: inline-block; + flex-shrink: 0; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + max-width: 13em; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item:focus { + background-color: rgba(0, 108, 231, 0.1); +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #144782; + color: #144782; +} +@media (forced-colors: active) { + .tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid highlight; + color: highlight; + } +} +.tox .tox-dialog__body-content { + box-sizing: border-box; + display: flex; + flex: 1; + flex-direction: column; + max-height: min(650px, calc(100vh - 110px)); + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 16px 16px; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content a { + color: #144782; + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:hover, +.tox .tox-dialog__body-content a:focus { + color: #071729; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:focus-visible { + border-radius: 1px; + outline: 2px solid #144782; + outline-offset: 2px; +} +.tox .tox-dialog__body-content a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content svg { + fill: #222f3e; +} +.tox .tox-dialog__body-content strong { + font-weight: bold; +} +.tox .tox-dialog__body-content ul { + list-style-type: disc; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dd { + padding-inline-start: 2.5rem; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl, +.tox .tox-dialog__body-content dd, +.tox .tox-dialog__body-content dt { + display: block; + margin-inline-end: 0; + margin-inline-start: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1 { + color: #222f3e; + font-size: 20px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group h2 { + color: #222f3e; + font-size: 16px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group p { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content .tox-form__group h1:first-child, +.tox .tox-dialog__body-content .tox-form__group h2:first-child, +.tox .tox-dialog__body-content .tox-form__group p:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:last-child, +.tox .tox-dialog__body-content .tox-form__group h2:last-child, +.tox .tox-dialog__body-content .tox-form__group p:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:only-child, +.tox .tox-dialog__body-content .tox-form__group h2:only-child, +.tox .tox-dialog__body-content .tox-form__group p:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { + text-align: center; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { + text-align: end; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--fullscreen { + height: 100%; + max-width: 100%; +} +.tox .tox-dialog--fullscreen .tox-dialog__body-content { + max-height: 100%; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #fff; + border-top: none; + display: flex; + justify-content: space-between; + padding: 8px 16px; +} +.tox .tox-dialog__footer-start, +.tox .tox-dialog__footer-end { + display: flex; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table thead th:first-child { + padding-right: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #626262; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__table td:first-child { + padding-right: 8px; +} +.tox .tox-dialog__iframe { + min-height: 200px; +} +.tox .tox-dialog__iframe.tox-dialog__iframe--opaque { + background: #fff; +} +.tox .tox-navobj-bordered { + position: relative; +} +.tox .tox-navobj-bordered::before { + border: 1px solid #eeeeee; + border-radius: 6px; + content: ''; + inset: 0; + opacity: 1; + pointer-events: none; + position: absolute; + z-index: 1; +} +.tox .tox-navobj-bordered iframe { + border-radius: 6px; +} +.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +.tox .tox-dialog__body-iframe { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-dialog__body-iframe .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox .tox-dialog-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-dialog-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-dialog-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { + transition-delay: 0s; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { + margin-right: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { + margin-left: 8px; + } +} +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *, +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-dialog__body { + text-align: right; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { + margin-left: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { + margin-right: 8px; + } +} +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *, +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * { + margin-right: 8px; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #eeeeee; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(34, 47, 62, 0.7); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area::before { + border: 2px solid #006ce7; + border-radius: 4px; + content: ''; + inset: 0; + opacity: 0; + pointer-events: none; + position: absolute; + transition: opacity 0.15s; + z-index: 1; +} +@media (forced-colors: active) { + .tox .tox-edit-area::before { + border: 2px solid highlight; + } +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-edit-focus .tox-edit-area::before { + opacity: 1; +} +.tox.tox-inline-edit-area { + border: 1px dotted #eeeeee; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: green; +} +.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { + padding-right: 32px; +} +.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { + right: 4px; +} +.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { + padding-left: 32px; +} +.tox[dir=rtl] .tox-control-wrap__status-icon-wrap { + left: 4px; +} +.tox .tox-custom-preview { + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + flex: 1; + padding: 8px; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + box-sizing: border-box; + max-width: 25em; +} +.tox .tox-autocompleter .tox-autocompleter-highlight { + font-weight: bold; +} +.tox .tox-color-input { + display: flex; + position: relative; + z-index: 1; +} +.tox .tox-color-input .tox-textfield { + z-index: -1; +} +.tox .tox-color-input span { + border-color: rgba(34 47 3.1%); + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + height: 24px; + position: absolute; + top: 6px; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-color-input span { + border-color: currentColor; + border-width: 2px !important; + forced-color-adjust: none; + } +} +.tox .tox-color-input span:hover:not([aria-disabled=true]), +.tox .tox-color-input span:focus:not([aria-disabled=true]) { + border-color: #006ce7; + cursor: pointer; +} +.tox .tox-color-input span::before { + background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%); + background-position: 0 0, 0 6px, 6px -6px, -6px 0; + background-size: 12px 12px; + border: 1px solid #fff; + border-radius: 6px; + box-sizing: border-box; + content: ''; + height: 24px; + left: -1px; + position: absolute; + top: -1px; + width: 24px; + z-index: -1; +} +@media (forced-colors: active) { + .tox .tox-color-input span::before { + border: none; + } +} +.tox .tox-color-input span[aria-disabled=true] { + cursor: not-allowed; +} +.tox:not([dir=rtl]) .tox-color-input .tox-textfield { + padding-left: 36px; +} +.tox:not([dir=rtl]) .tox-color-input span { + left: 6px; +} +.tox[dir="rtl"] .tox-color-input .tox-textfield { + padding-right: 36px; +} +.tox[dir="rtl"] .tox-color-input span { + right: 6px; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: none; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox[dir=rtl] .tox-label { + padding: 0 0 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form-group--maximize { + flex: 1; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) { + margin-right: 4px; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input { + margin-left: 8px; + margin-right: 8px; +} +.tox .tox-textfield, +.tox .tox-toolbar-textfield, +.tox .tox-listboxfield .tox-listbox--select, +.tox .tox-textarea, +.tox .tox-textarea-wrap .tox-textarea:focus { + appearance: none; + background-color: #fff; + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-textfield[disabled], +.tox .tox-toolbar-textfield[disabled], +.tox .tox-textarea[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-textfield:focus, +.tox .tox-toolbar-textfield:focus, +.tox .tox-listboxfield .tox-listbox--select:focus, +.tox .tox-textarea-wrap:focus-within, +.tox .tox-textarea:focus, +.tox .tox-focusable-wrapper:focus, +.tox .tox-custom-editor:focus-within { + background-color: #fff; + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-toolbar-textfield { + max-width: 250px; + min-height: unset; + height: 28px; + margin: 5px 0 6px 0; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #006ce7; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #222f3e; +} +.tox .tox-textfield-size { + width: 80px; +} +.tox:not([dir=rtl]) .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-toolbar-textfield + * { + margin-right: 4px; +} +.tox .tox-listboxfield { + cursor: pointer; + position: relative; +} +.tox .tox-listboxfield .tox-listbox--select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-listbox__select-label { + cursor: default; + flex: 1; + margin: 0 4px; +} +.tox .tox-listbox__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-listbox__select-chevron svg { + fill: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-listbox__select-chevron svg { + fill: currentColor !important; + } +} +.tox .tox-listboxfield .tox-listbox--select { + align-items: center; + display: flex; +} +.tox:not([dir=rtl]) .tox-listboxfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-listboxfield svg { + left: 8px; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + appearance: none; + background-color: #fff; + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-selectfield select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield select:focus { + background-color: #fff; + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; + outline: none; +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-selectfield select option:checked { + background-color: revert; + color: revert; +} +.tox:not([dir=rtl]) .tox-selectfield select[size="0"], +.tox:not([dir=rtl]) .tox-selectfield select[size="1"] { + padding-right: 24px; +} +.tox:not([dir=rtl]) .tox-selectfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-selectfield select[size="0"], +.tox[dir=rtl] .tox-selectfield select[size="1"] { + padding-left: 24px; +} +.tox[dir=rtl] .tox-selectfield svg { + left: 8px; +} +.tox .tox-textarea-wrap { + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + display: flex; + flex: 1; + overflow: hidden; +} +.tox .tox-textarea { + appearance: textarea; + white-space: pre-wrap; +} +.tox .tox-textarea-wrap .tox-textarea { + border: none; +} +.tox .tox-textarea-wrap .tox-textarea:focus { + border: none; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-help__more-link { + list-style: none; + margin-top: 1em; +} +.tox .tox-imagepreview { + background-color: #666; + height: 380px; + overflow: hidden; + position: relative; + width: 100%; +} +.tox .tox-imagepreview.tox-imagepreview__loaded { + overflow: auto; +} +.tox .tox-imagepreview__container { + display: flex; + left: 100vw; + position: absolute; + top: 100vw; +} +.tox .tox-imagepreview__image { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools .tox-spacer { + flex: 1; +} +.tox .tox-image-tools .tox-bar { + align-items: center; + display: flex; + height: 60px; + justify-content: center; +} +.tox .tox-image-tools .tox-imagepreview, +.tox .tox-image-tools .tox-imagepreview + .tox-bar { + margin-top: 8px; +} +.tox .tox-image-tools .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: 0.5; + position: absolute; + zoom: 1; +} +.tox .tox-image-tools .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-image-tools .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-image-tools .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-image-tools .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-image-selector-loading-spinner-wrapper { + display: flex; + justify-content: center; + align-items: center; +} +.tox .tox-image-selector-loading-spinner { + position: absolute; + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox .tox-toolbar .tox-image-selector, +.tox .tox-toolbar__primary .tox-image-selector, +.tox .tox-toolbar__overflow .tox-image-selector { + margin: 5px 0 6px 11px; +} +.tox .tox-image-selector-menu { + border: 0; + border-radius: 3px; + margin: -4px -4px; + padding: 4px; +} +.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group { + border: 0; + padding: 0; + margin: -4px -4px; +} +.tox .tox-image-selector-menu .tox-collection__item { + max-width: 48px; +} +.tox .tox-image-selector-menu .tox-collection__item-icon { + border: 1px solid #eeeeee; + border-radius: 3px; + margin-bottom: 4px; + width: 100%; +} +.tox .tox-image-selector-menu .tox-collection__item-icon svg path { + stroke: #c00; +} +.tox .tox-image-selector__row { + display: flex; +} +.tox .tox-image-selector--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-selector--remove svg path { + stroke: #c00; +} +.tox .tox-image-selector-image-wrapper { + width: 46px; + height: 46px; + display: flex; + align-items: center; + justify-content: center; +} +.tox .tox-image-selector-image-img { + max-width: 100%; + max-height: 100%; +} +.tox .tox-image-selector__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-image-selector__picker-btn svg { + fill: #222f3e; + height: 24px; + width: 24px; +} +.tox .tox-image-selector__picker-btn:hover { + background: #f0f0f0; +} +.tox .tox-context-toolbar { + position: absolute; + position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; + z-index: 1150; + background-color: #ffffff; + border: 1px solid #e0e0e0; + border-radius: 9px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + padding: 4px; +} +.tox .tox-context-toolbar[popover] { + inset: auto; + margin: 0; +} +.tox .tox-context-toolbar .tox-toolbar { + display: flex; + flex-wrap: nowrap; + gap: 8px; +} +.tox .tox-context-toolbar .tox-toolbar__group { + display: flex; + flex-wrap: nowrap; + flex-shrink: 0; + gap: 4px; + align-items: center; +} +.tox .tox-insert-table-picker { + background-color: #fff; + display: flex; + flex-wrap: wrap; + width: 170px; +} +.tox .tox-insert-table-picker > div { + border-color: #eeeeee; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: border-box; + height: 17px; + width: 17px; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px -4px; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: #006ce7; + border-color: #eeeeee; +} +@media (forced-colors: active) { + .tox .tox-insert-table-picker .tox-insert-table-picker__selected { + border-color: Highlight; + filter: contrast(50%); + } +} +.tox .tox-insert-table-picker__label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) { + border-right: 0; +} +.tox-mentions__card-common { + z-index: 1200; +} +.tox.tox-mentions__card { + background: #fff; + border: 1px solid #eeeeee; + display: flex; + padding: 4px 8px; +} +.tox.tox-mentions__card .tox-mentions__container { + display: flex; + flex-direction: column; + align-self: center; + margin: 0 4px; +} +.tox .tox-mentions__avatar { + width: 42px; + height: 42px; + border-radius: 50%; + margin-right: 4px; +} +.tox .tox-mentions__username { + font-size: 14px; + line-height: 21px; + color: #222f3e; +} +.tox .tox-mentions__description { + font-size: 12px; + line-height: 21px; + color: rgba(34, 47, 62, 0.7); +} +.tox .tox-collection__item--active .tox-mentions__username, +.tox .tox-collection__item--active .tox-mentions__description { + color: inherit; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #fff; + border: 1px solid transparent; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1150; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0 4px; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 8px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 8px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-menu .tox-collection__item-label { + overflow-wrap: break-word; + word-break: normal; + } + .tox .tox-dialog__popups .tox-menu .tox-collection__item-label { + word-break: break-all; + } +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: repeating-linear-gradient(transparent 0 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #fff; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + grid-column: 1 / -1; + grid-row: 1; + padding: 0 11px 0 12px; +} +.tox .tox-promotion + .tox-menubar { + grid-column: 1; +} +.tox .tox-promotion { + background: repeating-linear-gradient(transparent 0 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #fff; + grid-column: 2; + grid-row: 1; + padding-inline-end: 8px; + padding-inline-start: 4px; + padding-top: 5px; +} +.tox .tox-promotion-link { + align-items: unsafe center; + background-color: #E8F1F8; + border-radius: 5px; + color: #086BE6; + cursor: pointer; + display: flex; + font-size: 14px; + height: 26.6px; + padding: 4px 8px; + white-space: nowrap; +} +.tox .tox-promotion-link:hover { + background-color: #B4D7FF; +} +.tox .tox-promotion-link:focus { + background-color: #D9EDF7; +} +/* Deprecated. Remove in next major release */ +.tox .tox-mbtn { + align-items: center; + background: #fff; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 5px 1px 6px 0; + outline: none; + padding: 0 4px; + text-transform: none; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #fff; + border: 0; + box-shadow: none; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-mbtn:focus:not(:disabled)::after { + pointer-events: none; + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-mbtn:focus:not(:disabled)::after { + border: 2px solid highlight; + } +} +.tox .tox-mbtn--active, +.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { + background: #f0f0f0; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + display: grid; + font-size: 14px; + font-weight: normal; + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-left: auto; + margin-right: auto; + margin-top: 4px; + opacity: 0; + padding: 4px; + transition: transform 100ms ease-in, opacity 150ms ease-in; + width: max-content; +} +.tox .tox-notification a { + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification p { + font-size: 14px; + font-weight: normal; +} +.tox .tox-notification:focus { + border-color: #006ce7; + box-shadow: 0 0 0 1px #006ce7; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #e4eeda; + border-color: #d7e6c8; + color: #222f3e; +} +.tox .tox-notification--success p { + color: #222f3e; +} +.tox .tox-notification--success a { + color: #517342; +} +.tox .tox-notification--success a:hover, +.tox .tox-notification--success a:focus { + color: #24321d; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success a:focus-visible { + border-radius: 1px; + outline: 2px solid #517342; + outline-offset: 2px; +} +.tox .tox-notification--success a:active { + color: #0d120a; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success svg { + fill: #222f3e; +} +.tox .tox-notification--error { + background-color: #f5cccc; + border-color: #f0b3b3; + color: #222f3e; +} +.tox .tox-notification--error p { + color: #222f3e; +} +.tox .tox-notification--error a { + color: #77181f; +} +.tox .tox-notification--error a:hover, +.tox .tox-notification--error a:focus { + color: #220709; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error a:focus-visible { + border-radius: 1px; + outline: 2px solid #77181f; + outline-offset: 2px; +} +.tox .tox-notification--error a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error svg { + fill: #222f3e; +} +.tox .tox-notification--warn, +.tox .tox-notification--warning { + background-color: #fff5cc; + border-color: #fff0b3; + color: #222f3e; +} +.tox .tox-notification--warn p, +.tox .tox-notification--warning p { + color: #222f3e; +} +.tox .tox-notification--warn a, +.tox .tox-notification--warning a { + color: #7a6e25; +} +.tox .tox-notification--warn a:hover, +.tox .tox-notification--warning a:hover, +.tox .tox-notification--warn a:focus, +.tox .tox-notification--warning a:focus { + color: #2c280d; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn a:focus-visible, +.tox .tox-notification--warning a:focus-visible { + border-radius: 1px; + outline: 2px solid #7a6e25; + outline-offset: 2px; +} +.tox .tox-notification--warn a:active, +.tox .tox-notification--warning a:active { + color: #050502; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn svg, +.tox .tox-notification--warning svg { + fill: #222f3e; +} +.tox .tox-notification--info { + background-color: #d6e7fb; + border-color: #c1dbf9; + color: #222f3e; +} +.tox .tox-notification--info p { + color: #222f3e; +} +.tox .tox-notification--info a { + color: #2a64a6; +} +.tox .tox-notification--info a:hover, +.tox .tox-notification--info a:focus { + color: #163355; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info a:focus-visible { + border-radius: 1px; + outline: 2px solid #2a64a6; + outline-offset: 2px; +} +.tox .tox-notification--info a:active { + color: #0b1a2c; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info svg { + fill: #222f3e; +} +.tox .tox-notification__body { + align-self: center; + color: #222f3e; + font-size: 14px; + grid-column-end: 3; + grid-column-start: 2; + grid-row-end: 2; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + align-self: center; + grid-column-end: 2; + grid-column-start: 1; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + align-self: start; + grid-column-end: 4; + grid-column-start: 3; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + grid-column-end: 4; + grid-column-start: 1; + grid-row-end: 3; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-notification-container-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-notification-container-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-notification-container-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein { + transition-delay: 0s; +} +.tox .tox-onboarding-overlay { + height: 100%; + background-color: #f0f0f0; + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1302; + overflow: auto; + display: grid; + justify-content: center; + align-items: center; +} +.tox .tox-onboarding-dialog { + max-width: 512px; + background-color: #fff; + display: flex; + flex-direction: column; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + border-radius: 12px; + margin: 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-header { + color: #222f3e; + display: flex; + justify-content: center; + align-items: center; + font-size: 20px; + margin: 24px 0 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step { + display: grid; + grid-template-columns: min-content 1fr min-content; + align-items: center; + margin: 0 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child) { + border-bottom: 1px solid #e3e3e3; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--number { + width: 24px; + aspect-ratio: 1; + border-radius: 50%; + border: 1px solid #00AD0E; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + font-weight: bold; + color: #00AD0E; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body { + padding: 24px 0 24px 16px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-header { + color: #222f3e; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-details { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--action { + padding-left: 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer { + background-color: #f0f0f0; + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 24px; + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer p { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + font-size: 14px; + color: rgba(34, 47, 62, 0.7); +} +.tox .tox-onboarding-dialog svg { + width: 24px; + fill: rgba(34, 47, 62, 0.7); +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin { + display: grid; + align-items: center; + grid-template-columns: min-content 1fr min-content; + border-bottom: 1px solid #e3e3e3; + padding: 24px 0; + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body { + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header { + color: #222f3e; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon { + display: grid; + place-content: center; + width: 56px; + height: 56px; + line-height: 24px; + font-size: 24px; + border-radius: 12px; + background: linear-gradient(180deg, #fff 24%, #f0f0f0 100%); + box-shadow: 0px 1px 1px 0px #222f3e12, 0px 3px 6px 0px #222f3e06; + color: #006ce7; +} +.tox .tox-promotion-dialog--subtitle { + margin: 16px; + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore { + text-align: center; + margin: 16px; + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore a { + color: #006ce7; +} +.tox .tox-promotion-dialog--footer { + background-color: #f0f0f0; + color: rgba(34, 47, 62, 0.7); + font-size: 12px; + text-align: center; + padding: 16px; +} +.tox .tox-promotion-button { + display: flex; + align-items: center; + height: 26.6px; + line-height: 26.6px; + font-size: 14px; + font-weight: bold; + background-color: #F1EBF9; + color: #851AFF; + padding: 8px 16px; + cursor: pointer; + white-space: nowrap; + border-radius: 5px; +} +.tox .tox-promotion-button:focus { + outline: 1px solid #851AFF; +} +.tox .tox-onboarding-dialog a, +.tox .tox-promotion-dialog--footer a { + color: rgba(34, 47, 62, 0.7); + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:hover, +.tox .tox-promotion-dialog--footer a:hover, +.tox .tox-onboarding-dialog a:focus, +.tox .tox-promotion-dialog--footer a:focus { + color: #071729; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:focus-visible, +.tox .tox-promotion-dialog--footer a:focus-visible { + border-radius: 1px; + outline: 2px solid #144782; + outline-offset: 2px; +} +.tox .tox-onboarding-dialog a:active, +.tox .tox-promotion-dialog--footer a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width 0.1s ease; +} +.tox .tox-pop--resizing .tox-toolbar, +.tox .tox-pop--resizing .tox-toolbar__group { + flex-wrap: nowrap; +} +.tox .tox-pop--transition { + transition: 0.15s ease; + transition-property: left, right, top, bottom; +} +.tox .tox-pop--transition::before, +.tox .tox-pop--transition::after { + transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s; +} +.tox .tox-pop__dialog { + background-color: #fff; + border: 1px solid #eeeeee; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; + margin-bottom: -1px; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + opacity: 1; + position: absolute; + width: 0; +} +@media (forced-colors: active) { + .tox .tox-pop::before, + .tox .tox-pop::after { + content: none; + } +} +.tox .tox-pop.tox-pop--inset::before, +.tox .tox-pop.tox-pop--inset::after { + opacity: 0; + transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #fff transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #eeeeee transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #fff transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #eeeeee transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #fff transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #eeeeee transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #fff; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #eeeeee; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + background-color: var(--tox-private-sidebar-background-color, #f0f0f0); + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width 0.5s ease, opacity 0.5s ease; +} +.tox .tox-sidebar-content { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + min-width: 300px; + max-width: 300px; + width: 300px; + border-left: 1px solid var(--tox-private-sidebar-border-color, #e3e3e3); +} +.tox .tox-sidebar-content__header { + align-items: center; + display: flex; + justify-content: space-between; + box-shadow: var(--tox-private-sidebar-header-box-shadow, 0 4px 8px 0 rgba(34, 47, 62, 0.1)); + padding: var(--tox-private-pad-sm, 8px) 12px; + background: var(--tox-private-background-color, #fff); + z-index: 1; +} +.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button { + margin-left: auto; +} +.tox .tox-sidebar-content__title { + font-size: var(--tox-private-font-size-lg, 20px); + font-weight: var(--tox-private-font-weight-normal, normal); + padding: var(--tox-private-pad-sm, 8px) 0 var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #222f3e); + line-height: 28px; +} +.tox .tox-floating-sidebar { + --tox-private-floating-sidebar-requested-height: 600px; + --tox-private-floating-sidebar-width: min(380px, 90vw); + --tox-private-floating-sidebar-height: min(var(--tox-private-floating-sidebar-requested-height), 80vh); + box-shadow: var(--tox-private-floating-sidebar-box-shadow, 0 0 40px 1px rgba(34, 47, 62, 0.15), 0 16px 16px -10px rgba(34, 47, 62, 0.15)); + width: var(--tox-private-floating-sidebar-width); + height: var(--tox-private-floating-sidebar-height); + background-color: var(--tox-private-background-color, #fff); + border-radius: 12px; + overflow: hidden; +} +.tox .tox-floating-sidebar__content-wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.tox .tox-floating-sidebar__header { + position: relative; +} +.tox-ai .tox-ai__user-prompt { + display: flex; + flex-direction: column; + margin-left: auto; + gap: inherit; +} +.tox-ai .tox-ai__user-prompt__context { + margin-left: auto; +} +.tox-ai .tox-ai__user-prompt__text { + background-color: var(--tox-private-ai-user-prompt-background, #f0f0f0); + padding: var(--tox-private-pad-sm, 8px) 12px; + border-radius: var(--tox-private-control-border-radius, 6px); + max-width: 80%; + align-self: flex-end; + color: var(--tox-private-text-color, #222f3e); +} +.tox-ai .tox-ai__scroll { + overflow: auto; + background-color: var(--tox-private-background-color, #fff); + display: flex; + padding: 12px; + flex-direction: column; + align-items: flex-start; + gap: 12px; + flex: 1 0 0; + align-self: stretch; +} +.tox-ai .tox-ai__response-content { + padding: var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #222f3e); + font-feature-settings: 'liga' off, 'clig' off; + font-size: var(--tox-private-font-size-sm, 14px); + font-style: normal; + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-line-height, 18px); + white-space: pre-wrap; +} +.tox-ai .tox-ai__response.tox-ai__response-streaming { + background: linear-gradient(180deg, var(--tox-private-color-black, #222f3e) 0%, transparent 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.tox-ai .tox-ai__error-message { + border-radius: var(--tox-private-panel-border-radius, 6px); + border: 1px solid var(--tox-private-color-error, #c00); + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-error, #c00); + padding: var(--tox-private-pad-sm, 8px); + width: 100%; +} +.tox-ai .tox-ai__footer { + border-top: 1px solid var(--tox-private-ai-footer-border-color, #e3e3e3); + padding: 12px; + gap: var(--tox-private-pad-sm, 8px); + background-color: var(--tox-private-background-color, #fff); + display: flex; + flex-direction: column; +} +.tox-ai .tox-ai__context { + display: flex; + gap: 8px; +} +.tox-ai .tox-ai__footer-actions { + display: flex; + gap: var(--tox-private-pad-sm, 8px); +} +.tox .tox-selector { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: inline-block; + height: 10px; + position: absolute; + width: 10px; +} +.tox.tox-platform-touch .tox-selector { + height: 12px; + width: 12px; +} +.tox .tox-skeleton .tox-skeleton__line { + height: 16px; + width: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +.tox .tox-skeleton .tox-skeleton__circle { + height: 36px; + width: 36px; + margin-right: 8px; + border-radius: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +@keyframes wave { + 0% { + background-position: -268px 0; + } + 100% { + background-position: 268px 0; + } +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #eeeeee; + border-radius: 6px; + height: 10px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #006ce7; + border: 2px solid #0054b4; + border-radius: 6px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 14px; +} +.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) { + margin-inline-start: 8px; +} +.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider { + margin-inline-start: 32px; +} +.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group { + margin-inline-start: 32px; +} +.tox .tox-toolbar-slider { + align-items: center; + display: inline-flex; + height: 16px; +} +.tox .tox-toolbar-slider__input { + appearance: none; + background: #eeeeee; + border-radius: 16px; + width: 130px; + height: 2px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #006ce7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-thumb { + appearance: none; + background-color: #006ce7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input:focus-visible { + outline: none; +} +.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb { + background-color: #0060ce; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #006ce7; +} +.tox .tox-toolbar-slider__input:focus::-moz-range-thumb { + background-color: #0060ce; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #006ce7; +} +.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb { + background-color: #0060ce; +} +.tox .tox-toolbar-slider__input:hover::-moz-range-thumb { + background-color: #0060ce; +} +.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb { + background-color: #0054b4; +} +.tox .tox-toolbar-slider__input:active::-moz-range-thumb { + background-color: #0054b4; +} +.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(34, 47, 62, 0.7); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-spinner > div:not(:first-child) { + margin-right: 4px; +} +.tox .tox-ai__spinner { + width: 24px; + height: 24px; +} +.tox .tox-statusbar { + align-items: center; + background-color: #fff; + border-top: 1px solid #e3e3e3; + color: rgba(34, 47, 62, 0.7); + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-weight: normal; + height: 25px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: none; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__right-container { + display: flex; + justify-content: flex-end; + white-space: nowrap; +} +.tox .tox-statusbar__help-text { + text-align: center; +} +.tox .tox-statusbar__text-container { + align-items: flex-start; + display: flex; + flex: 1 1 auto; + height: 16px; + justify-content: space-between; +} +@media only screen and (min-width: 768px ) { + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__help-text, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__right-container, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__path { + flex: 0 0 calc(100% / 3); + } +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end { + justify-content: flex-end; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start { + justify-content: flex-start; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around { + justify-content: space-around; +} +.tox .tox-statusbar__path > * { + display: inline; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount { + flex: 0 0 auto; + margin-left: 1ch; +} +@media only screen and (max-width: 767px ) { + .tox .tox-statusbar__text-container .tox-statusbar__help-text { + display: none; + } + .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child { + display: block; + } +} +.tox .tox-statusbar a, +.tox .tox-statusbar__path-item, +.tox .tox-statusbar__wordcount { + color: rgba(34, 47, 62, 0.7); + position: relative; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #222f3e; + cursor: pointer; +} +.tox .tox-statusbar a:focus-visible::after, +.tox .tox-statusbar__path-item:focus-visible::after, +.tox .tox-statusbar__wordcount:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar a:focus-visible::after, + .tox .tox-statusbar__path-item:focus-visible::after, + .tox .tox-statusbar__wordcount:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__branding svg { + fill: rgba(34, 47, 62, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #222f3e; +} +.tox .tox-statusbar__resize-cursor-default { + cursor: ns-resize; +} +.tox .tox-statusbar__resize-cursor-both { + cursor: nwse-resize; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-bottom: 3px; + margin-left: 4px; + margin-right: calc(3px - 8px); + margin-top: 3px; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + position: relative; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-statusbar__resize-handle:hover svg, +.tox .tox-statusbar__resize-handle:focus svg { + fill: #222f3e; +} +.tox .tox-statusbar__resize-handle:focus-visible { + background-color: transparent; + border-radius: 1px 1px 5px 1px; + box-shadow: 0 0 0 2px transparent; +} +.tox .tox-statusbar__resize-handle:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar__resize-handle:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__resize-handle:only-child { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-statusbar__path > * { + margin-right: 4px; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 2ch; +} +.tox[dir=rtl] .tox-statusbar { + flex-direction: row-reverse; +} +.tox[dir=rtl] .tox-statusbar__path > * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-tag { + width: -moz-fit-content; + width: fit-content; + display: flex; + padding: 4px 6px; + align-items: center; + gap: 4px; + border-radius: 3px; + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-tint, #006ce7); + line-height: var(--tox-private-base-value, 16px); + font-size: var(--tox-private-font-size-xs, 12px); +} +.tox .tox-tag .tox-tag__icon { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon { + border: 0; + padding: 0; +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before { + box-shadow: none; +} +.tox .tox-throbber { + z-index: 1299; +} +.tox .tox-throbber__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.6); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-toggle { + display: flex; + align-items: center; + gap: var(--tox-private-pad-xs, 4px); + padding: var(--tox-private-pad-xs, 4px); + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-control-line-height, 24px); + white-space: nowrap; + background-color: var(--tox-private-background-color, #fff); + color: var(--tox-private-text-color, #222f3e); +} +.tox .tox-toggle input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} +.tox .tox-toggle__slider { + position: relative; + cursor: pointer; + box-sizing: border-box; + transition: 0.4s; + border-radius: 34px; + width: 28px; + height: 16px; + background-color: var(--tox-private-slider-background-color, #fff); + border: 1px solid var(--tox-private-slider-border-color, #e3e3e3); +} +.tox .tox-toggle__slider::before { + position: absolute; + content: ""; + height: 12px; + width: 12px; + left: 1px; + bottom: 1px; + transition: 0.4s; + border-radius: 50%; + background-color: var(--tox-private-slider-handle-background-color, #222f3e); +} +.tox input:checked + .tox-toggle__slider { + background-color: var(--tox-private-slider-checked-background-color, #006ce7); + border: 1px solid var(--tox-private-slider-checked-border-color, #006ce7); +} +.tox input:focus + .tox-toggle__slider { + box-shadow: 0 0 0 1px var(--tox-private-color-white, #fff), 0 0 0 2px var(--tox-private-color-tint, #006ce7); +} +.tox input:checked + .tox-toggle__slider::before { + transform: translateX(12px); + background-color: var(--tox-private-slider-checked-handle-background-color, #fff); +} +.tox input:disabled + .tox-toggle__slider::before { + opacity: 50%; +} +.tox .tox-tbtn { + align-items: center; + background: #fff; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 6px 1px 5px 0; + outline: none; + padding: 0; + text-transform: none; + width: 34px; +} +.tox .tox-tbtn .tox-tbtn__icon-wrap { + pointer-events: none; +} +@media (forced-colors: active) { + .tox .tox-tbtn:hover, + .tox .tox-tbtn.tox-tbtn:hover { + outline: 1px dashed currentColor; + } + .tox .tox-tbtn.tox-tbtn--active, + .tox .tox-tbtn.tox-tbtn--enabled, + .tox .tox-tbtn.tox-tbtn--enabled:hover, + .tox .tox-tbtn.tox-tbtn--enabled:focus, + .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + outline: 1px solid currentColor; + position: relative; + } +} +.tox .tox-tbtn svg { + display: block; + fill: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-tbtn svg { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--enabled, + .tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled) { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--disabled, + .tox .tox-tbtn svg.tox-tbtn--disabled:hover, + .tox .tox-tbtn svg .tox-tbtn:disabled, + .tox .tox-tbtn svg .tox-tbtn:disabled:hover { + filter: contrast(0%); + } +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn:focus { + background: #fff; + border: 0; + box-shadow: none; + position: relative; + z-index: 1; +} +.tox .tox-tbtn:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:hover { + background: #f0f0f0; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tbtn:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:active svg { + fill: #222f3e; +} +.tox .tox-tbtn--disabled .tox-tbtn--enabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--active, +.tox .tox-tbtn--enabled, +.tox .tox-tbtn--enabled:hover, +.tox .tox-tbtn--enabled:focus { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; + position: relative; +} +.tox .tox-tbtn--active > *, +.tox .tox-tbtn--enabled > *, +.tox .tox-tbtn--enabled:hover > *, +.tox .tox-tbtn--enabled:focus > * { + transform: none; +} +.tox .tox-tbtn--active svg, +.tox .tox-tbtn--enabled svg, +.tox .tox-tbtn--enabled:hover svg, +.tox .tox-tbtn--enabled:focus svg { + fill: #222f3e; +} +.tox .tox-tbtn--active.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--enabled:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn--enabled:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + color: #222f3e; +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 42px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 56px; + width: 68px; +} +.tox .tox-tbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-label--context-toolbar { + margin: 6px 1px 5px 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-number-input { + background: #f7f7f7; + border-radius: 3px; + display: flex; + margin: 6px 1px 5px 0; + position: relative; + width: auto; +} +.tox .tox-number-input:focus { + background: #f7f7f7; +} +.tox .tox-number-input:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper { + display: flex; + pointer-events: none; + position: relative; + text-align: center; +} +.tox .tox-number-input .tox-input-wrapper:focus { + background-color: #f7f7f7; + z-index: 1; +} +.tox .tox-number-input .tox-input-wrapper:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input input { + border-radius: 3px; + color: #222f3e; + font-size: 14px; + margin: 2px 0; + pointer-events: all; + position: relative; + width: 60px; +} +.tox .tox-number-input input:hover { + background: #f0f0f0; + color: #222f3e; +} +.tox .tox-number-input input:focus { + background-color: #f7f7f7; +} +.tox .tox-number-input input:disabled { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button { + color: #222f3e; + height: 28px; + position: relative; + text-align: center; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-number-input button:hover, + .tox .tox-number-input button:focus, + .tox .tox-number-input button:active { + outline: 1px solid currentColor !important; + } +} +.tox .tox-number-input button svg { + display: block; + fill: #222f3e; + margin: 0 auto; + transform: scale(0.67); +} +@media (forced-colors: active) { + .tox .tox-number-input button svg, + .tox .tox-number-input button svg:active, + .tox .tox-number-input button svg:hover { + fill: currentColor !important; + } + .tox .tox-number-input button svg:disabled { + filter: contrast(0); + } +} +.tox .tox-number-input button:focus { + background: #f7f7f7; + z-index: 1; +} +.tox .tox-number-input button:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input button:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input button:hover { + background: #f0f0f0; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:hover svg { + fill: #222f3e; +} +.tox .tox-number-input button:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:active svg { + fill: #222f3e; +} +.tox .tox-number-input button:disabled { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button:disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-number-input button.minus { + border-radius: 3px 0 0 3px; +} +.tox .tox-number-input button.plus { + border-radius: 0 3px 3px 0; +} +.tox .tox-number-input:focus:not(:active) > button, +.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper { + background: #f7f7f7; +} +.tox .tox-tbtn--select { + margin: 6px 1px 5px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #eeeeee; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + height: initial; + margin: 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +@media (forced-colors: active) { + .tox .tox-tbtn__select-chevron svg { + fill: currentColor; + } +} +.tox .tox-tbtn--bespoke { + background: #f7f7f7; +} +.tox .tox-tbtn--bespoke:focus { + background: #f7f7f7; +} +.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke { + margin-inline-start: 4px; +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-tbtn--disabled .tox-tbtn__select-label, +.tox .tox-tbtn--select:disabled .tox-tbtn__select-label { + cursor: not-allowed; +} +.tox .tox-split-button__main { + border-radius: 3px 0 0 3px; + margin-right: 0; +} +.tox .tox-split-button__main:focus { + border: 0; + box-shadow: none; + background: #fff; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-split-button__main:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px 0 0 3px; +} +@media (forced-colors: active) { + .tox .tox-split-button__main:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron { + width: 16px; + border-radius: 0 3px 3px 0; + margin-left: 0; +} +.tox .tox-split-button__chevron:focus { + border: 0; + box-shadow: none; + background: #fff; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-split-button__chevron:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 0 3px 3px 0; +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron svg { + fill: currentColor; + } +} +.tox.tox-platform-touch .tox-split-button__main { + width: 30px; +} +.tox.tox-platform-touch .tox-split-button__chevron { + width: 20px; +} +.tox .tox-split-button__main.tox-tbtn--disabled, +.tox .tox-split-button__chevron.tox-tbtn--disabled { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:hover, +.tox .tox-split-button__chevron.tox-tbtn--disabled:hover { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:focus, +.tox .tox-split-button__chevron.tox-tbtn--disabled:focus { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color, +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color { + opacity: 0.3; +} +.tox .tox-toolbar-overlord { + background-color: #fff; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background-attachment: local; + background-color: #fff; + background-image: repeating-linear-gradient(#e3e3e3 0 1px, transparent 1px 39px); + background-position: center top 40px; + background-repeat: no-repeat; + background-size: calc(100% - 11px * 2) calc(100% - 41px); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + padding: 0 0px; + transform: perspective(1px); +} +.tox .tox-toolbar-overlord > .tox-toolbar, +.tox .tox-toolbar-overlord > .tox-toolbar__primary, +.tox .tox-toolbar-overlord > .tox-toolbar__overflow { + background-position: center top 0px; + background-size: calc(100% - 11px * 2) calc(100% - 0px); +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + height: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; + visibility: hidden; +} +.tox .tox-toolbar__overflow--growing { + transition: height 0.3s ease, opacity 0.2s linear 0.1s; +} +.tox .tox-toolbar__overflow--shrinking { + transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s; +} +.tox .tox-toolbar-overlord, +.tox .tox-anchorbar { + grid-column: 1 / -1; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: 1px solid transparent; + margin-top: -1px; + padding-bottom: 1px; + padding-top: 1px; +} +@media (forced-colors: active) { + .tox .tox-menubar + .tox-toolbar, + .tox .tox-menubar + .tox-toolbar-overlord { + outline: 1px solid currentColor; + } +} +.tox .tox-toolbar--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, +.tox .tox-toolbar-overlord .tox-toolbar__primary { + background-position: center top 39px; +} +.tox .tox-editor-header > .tox-toolbar--scrolling, +.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { + background-image: none; +} +.tox .tox-focusable-wrapper { + border: 1px solid transparent; + margin-right: 2px; + pointer-events: none; +} +.tox .tox-focusable-wrapper .tox-textfield-size { + pointer-events: all; +} +.tox .tox-focusable-wrapper:focus { + background-color: #f7f7f7; + border-radius: 6px; + border-style: solid; + border-width: 1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + background-color: #fff; + background-position: center top 43px; + background-size: calc(100% - 8px * 2) calc(100% - 51px); + border: none; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + overscroll-behavior: none; + padding: 4px 0; +} +@media (forced-colors: active) { + .tox.tox-tinymce-aux .tox-toolbar__overflow { + border: solid; + } +} +.tox-pop .tox-pop__dialog .tox-toolbar { + background-position: center top 43px; + background-size: calc(100% - 11px * 2) calc(100% - 51px); + padding: 4px 0; +} +.tox-context-form__group { + display: flex; + align-items: center; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 11px 0 12px; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-toolbar--scrolling .tox-toolbar__group { + flex-shrink: 0; + flex-wrap: nowrap; +} +.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox .tox-tooltip { + display: inline-block; + max-width: min(80%, 15em); + padding: 8px 0 0 0; + position: relative; + width: max-content; + z-index: 1150; +} +.tox .tox-tooltip__body { + background-color: #222f3e; + border-radius: 6px; + box-shadow: none; + color: #fff; + font-size: 12px; + font-style: normal; + font-weight: 600; + overflow-wrap: break-word; + padding: 4px 6px; + text-transform: none; +} +@media (forced-colors: active) { + .tox .tox-tooltip__body { + outline: outset 1px; + } +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #222f3e; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #222f3e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #222f3e; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #222f3e; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tree { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-trbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + margin-bottom: 4px; + margin-top: 4px; + outline: none; + overflow: hidden; + padding: 0; + padding-left: 8px; + text-transform: none; +} +.tox .tox-tree .tox-trbtn .tox-tree__label { + cursor: default; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tree .tox-trbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus { + background: #f0f0f0; + border: 0; + box-shadow: none; +} +.tox .tox-tree .tox-trbtn:hover { + background: #f0f0f0; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:active svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn--disabled, +.tox .tox-tree .tox-trbtn--disabled:hover, +.tox .tox-tree .tox-trbtn:disabled, +.tox .tox-tree .tox-trbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tree .tox-trbtn--disabled svg, +.tox .tox-tree .tox-trbtn--disabled:hover svg, +.tox .tox-tree .tox-trbtn:disabled svg, +.tox .tox-tree .tox-trbtn:disabled:hover svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tree .tox-trbtn--enabled, +.tox .tox-tree .tox-trbtn--enabled:hover { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn--enabled > *, +.tox .tox-tree .tox-trbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--enabled svg, +.tox .tox-tree .tox-trbtn--enabled:hover svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tree .tox-trbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tree .tox-trbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tree .tox-tree--directory { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label { + font-weight: bold; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { + margin-right: 6px; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { + transition: transform 0.5s ease-in-out; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { + transform: rotate(90deg); +} +.tox .tox-tree .tox-tree--leaf__label { + font-weight: normal; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-icon-custom-state { + flex-grow: 1; + display: flex; + justify-content: flex-end; +} +.tox .tox-tree .tox-tree--directory__children { + overflow: hidden; + padding-left: 16px; +} +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { + transition: height 0.5s ease-in-out; +} +.tox .tox-tree .tox-trbtn.tox-tree--leaf__label { + display: flex; + justify-content: space-between; +} +[data-mce-name="uploadcare-enhance-filter"] .color-swatch-remove-color path { + fill: #c00; + stroke: #c00; +} +.tox .tox-view-wrap, +.tox .tox-view-wrap__slot-container { + background-color: #fff; + display: flex; + flex: 1; + flex-direction: column; + height: 100%; +} +.tox .tox-view { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; + background-color: #fff; +} +.tox .tox-view__header { + align-items: center; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 10px; + position: relative; +} +.tox .tox-view__label { + color: #222f3e; + font-weight: bold; + line-height: 24px; + padding: 4px 16px; + text-align: center; + white-space: nowrap; +} +.tox .tox-view__label--normal { + font-size: 16px; +} +.tox .tox-view__label--large { + font-size: 20px; +} +.tox .tox-view--mobile.tox-view__header, +.tox .tox-view--mobile.tox-view__toolbar { + padding: 8px; +} +.tox .tox-view--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-view__align-right { + margin-left: auto; +} +.tox .tox-view__toolbar { + display: flex; + flex-direction: row; + gap: 8px; + justify-content: space-between; + overflow-x: auto; + padding: 10px; +} +.tox .tox-view__toolbar__group { + display: flex; + flex-direction: row; + gap: 12px; +} +.tox .tox-view__header-start, +.tox .tox-view__header-end { + display: flex; +} +.tox .tox-view__pane { + height: 100%; + padding: 8px; + position: relative; + width: 100%; +} +.tox .tox-view__pane_panel { + border: 1px solid #eeeeee; + border-radius: 6px; +} +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *, +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-view__header .tox-view__header-start > *, +.tox[dir=rtl] .tox-view__header .tox-view__header-end > * { + margin-right: 8px; +} +.tox .tox-well { + border: 1px solid #eeeeee; + border-radius: 6px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #eeeeee; + border-radius: 6px; + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-view .tox-revisionhistory__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-revisionhistory__container { + display: flex; + flex-direction: column; + height: 100%; +} +.tox .tox-revisionhistory { + background-color: #fff; + border-top: 1px solid #f0f0f0; + display: flex; + flex: 1; + height: 100%; + overflow-x: auto; + overflow-y: hidden; + position: relative; + width: 100%; +} +.tox .tox-revisionhistory__iframe { + flex: 1; +} +.tox .tox-revisionhistory__sidebar { + display: flex; + flex-direction: column; + height: 100%; + min-width: 248px; + width: 316px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title { + background-color: #fff; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + color: #222f3e; + font-size: 20px; + font-weight: 400; + line-height: 28px; + padding: 12px; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions { + background-color: #f0f0f0; + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow-y: auto; + padding: 10px 12px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus { + height: 100%; + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + bottom: 1px; + left: 1px; + right: 1px; + top: 1px; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card { + background-color: #fff; + border: 1px solid #f0f0f0; + border-radius: 6px; + color: #222f3e; + cursor: pointer; + display: flex; + flex-direction: column; + font-size: 14px; + padding: 12px; + width: 100%; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus { + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 #006ce7; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #006ce7; + box-shadow: 0 0 0 2px #006ce7 !important; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected { + background-color: #fff5cc; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + position: relative; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 2px #006ce7 #e3b82a; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #e3b82a; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label { + display: block; + width: min-content; + padding: 4px 8px; + margin-bottom: 8px; + font-size: 12px; + font-weight: bold; + border-radius: 4px; + background: #d3d5d8; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content { + display: flex; + flex-direction: row; + gap: 8px; + align-items: center; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info { + display: flex; + flex-direction: column; + flex: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label { + font-size: 14px; + font-weight: bold; + line-height: 18px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 12px; + font-weight: normal; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision { + color: rgba(34, 47, 62, 0.7); + font-size: 16px; + line-height: 24px; + padding: 5px 5.5px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon { + color: #222f3e; + height: 24px; +} +.tox [data-mce-name="suggestededits"] .tox-icon .tox-icon--badge { + fill: #006ce7; +} +.tox .tox-view .tox-suggestededits__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-suggestededits__sink { + position: relative; + z-index: 1000; +} +.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list { + position: absolute; +} +.tox .tox-suggestededits__container { + height: 100%; + /* TINY-12393: Improve height calculation */ + display: flex; + flex-direction: column; +} +.tox .tox-suggestededits__container .tox-suggestededits { + background-color: #fff; + border-top: 1px solid #eeeeee; + display: flex; + flex: 1; + height: inherit; + overflow-x: auto; + overflow-y: hidden; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content { + flex: 1; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model { + height: 100%; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe { + height: 100%; + width: 100%; + overflow: scroll; + background-color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar { + background-color: #f0f0f0; + display: flex; + flex-direction: column; + flex: 0 1 auto; + min-width: 248px; + width: 316px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header { + padding: 4px 12px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content { + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow: auto; + padding: 6px 12px 12px 12px; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card { + background-color: #fff; + border-radius: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider { + background-color: #f0f0f0; + height: 1px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor { + align-items: flex-start; + align-self: stretch; + display: flex; + flex-direction: column; + gap: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header { + display: flex; + flex: auto; + justify-content: space-between; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #222f3e; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar { + height: 36px; + width: 36px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #222f3e; + font-size: 14px; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution { + align-items: center; + border: 0; + border-radius: 20px; + height: 20px; + width: 20px; + display: flex; + flex: 0 0 auto; + justify-content: center; + text-align: center; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg { + fill: #78AB46; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg { + fill: #c00; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content { + display: flex; + flex-direction: column; + align-self: stretch; + flex: auto; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations { + display: flex; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar { + align-items: center; + border-radius: 6px; + display: flex; + flex-direction: column; + font-size: 12px; + justify-content: space-between; + width: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert { + background-color: #78AB46; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify { + background-color: #006ce7; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove { + background-color: #c00; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text { + color: #222f3e; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback { + color: #222f3e; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea { + border: 2px solid #eeeeee; + border-radius: 6px; + color: #222f3e; + gap: 8px; + padding: 5px 6px; + resize: none; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus { + border: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer { + display: flex; + flex-direction: column; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg { + fill: #222F3E80; + transform: translate(0px, 8px); + margin-top: -10px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons { + display: flex; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons { + justify-content: space-between; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons { + justify-content: flex-end; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden { + opacity: 0.5; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved { + background-color: #d3d5d8; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible { + outline: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single { + border-radius: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible { + outline: 2px solid #006ce7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover { + box-shadow: 0 4px 8px 0 #d3d5d8; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; +} diff --git a/public/tinymce/skins/ui/oxide/skin.js b/public/tinymce/skins/ui/oxide/skin.js new file mode 100644 index 0000000..c6867e4 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/oxide/skin.css', `.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:2px solid #eee;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:2px solid #eee;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:0 2px 2px -2px rgba(34,47,62,.1),0 8px 8px -4px rgba(34,47,62,.07);padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #e3e3e3;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#222f3e}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#e6f0fd;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#fffae6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#fae6e6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#eee;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,6px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,6px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #006ce7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#0060ce);background-image:none;border-color:var(--tox-private-button-focus-border-color,#0060ce);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:6px 1px 5px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#006ce7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#006ce7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#006ce7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#006ce7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#0060ce);border-color:var(--tox-private-button-primary-focus-border-color,#0060ce);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#0060ce);border-color:var(--tox-private-button-primary-hover-border-color,#0060ce);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#0054b4);border-color:var(--tox-private-button-primary-active-border-color,#0054b4);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#0054b4);border-color:var(--tox-private-button-primary-enabled-border-color,#0054b4);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#00489b);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#00489b);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#003c81);border-color:var(--tox-private-button-primary-enabled-active-border-color,#003c81);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-border-color,#f0f0f0);color:var(--tox-private-button-secondary-text-color,#222f3e);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:6px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#f0f0f0);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#d6d6d6);border-color:var(--tox-private-button-secondary-active-border-color,#d6d6d6);color:var(--tox-private-button-secondary-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#a8c8ed);border-color:var(--tox-private-button-secondary-enabled-border-color,#a8c8ed);color:var(--tox-private-button-secondary-enabled-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#93bbe9);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#93bbe9);color:var(--tox-private-button-secondary-enabled-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#93bbe9);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#93bbe9);color:var(--tox-private-button-secondary-enabled-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#7daee4);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#7daee4);color:var(--tox-private-button-secondary-enabled-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#222f3e)}.tox .tox-button--naked[disabled]{background-color:rgba(34,47,62,.12);border-color:transparent;color:var(--tox-private-button-naked-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,rgba(34,47,62,.12));border-color:var(--tox-private-button-naked-focus-border-color,transparent);color:var(--tox-private-button-naked-focus-text-color,#222f3e);box-shadow:unset}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,rgba(34,47,62,.12));border-color:var(--tox-private-button-naked-hover-background-color,transparent);color:var(--tox-private-button-naked-hover-text-color,#222f3e);box-shadow:unset}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,rgba(34,47,62,.18));border-color:var(--tox-private-button-naked-active-border-color,transparent);color:var(--tox-private-button-naked-active-text-color,#222f3e);box-shadow:unset}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-text-color,#222f3e)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-focus-text-color,#222f3e)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-hover-text-color,#222f3e)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-active-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-active-text-color,#222f3e)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(34,47,62,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,6px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,6px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(34,47,62,0.3))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#006ce7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#006ce7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #006ce7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#e3e3e3;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#fcfcfc;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#222f3e;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#006ce7;stroke:#006ce7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#fff}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#fff;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#006ce7;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#f0f0f0;color:#222f3e;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#a6ccf7;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e;background-color:#fff;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#f0f0f0;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#f0f0f0;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #eee;border-radius:6px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #e3e3e3;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#f5cccc;border:1px solid #f0b3b3;border-radius:3px;color:#77181f;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#f0f0f0}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#fff;border:1px solid #fff;border-radius:6px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#fff2c9;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid #006ce7;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:6px;border:2px solid #006ce7}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#fff;position:relative;border-radius:6px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,0.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#eee;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #144782;color:#144782}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#144782;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#071729;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #144782;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #626262}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #eee;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:6px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #eee;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #006ce7;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:2px solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #eee}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:28px;margin:5px 0 6px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:5px 0 6px 11px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px -4px;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px -4px}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #eee;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#f0f0f0}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#fff;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#eee;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:#006ce7;border-color:#eee}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#fff;border:1px solid #eee;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#222f3e}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(34,47,62,.7)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#fff;border:1px solid transparent;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#fff;border:0;box-shadow:none;color:#222f3e;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#24321d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #517342;outline-offset:2px}.tox .tox-notification--success a:active{color:#0d120a;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#220709;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #77181f;outline-offset:2px}.tox .tox-notification--error a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#2c280d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #7a6e25;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#050502;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#163355;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #2a64a6;outline-offset:2px}.tox .tox-notification--info a:active{color:#0b1a2c;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#f0f0f0;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#222f3e;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #e3e3e3}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#f0f0f0;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(34,47,62,.7)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(34,47,62,0.7)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #e3e3e3;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#fff 24%,#f0f0f0 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#006ce7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#006ce7}.tox .tox-promotion-dialog--footer{background-color:#f0f0f0;color:rgba(34,47,62,.7);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#f1ebf9;color:#851aff;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #851AFF}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(34,47,62,.7);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#071729;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #144782;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#eee transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #eee transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #eee transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #eee;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#f0f0f0);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#e3e3e3)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#fff);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#fff);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#f0f0f0);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,6px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#222f3e)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#fff);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,6px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#e3e3e3);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#fff);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #eee;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#eee;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #e3e3e3;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#222f3e}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#006ce7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#fff);color:var(--tox-private-text-color,#222f3e)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#fff);border:1px solid var(--tox-private-slider-border-color,#e3e3e3)}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#222f3e)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#006ce7);border:1px solid var(--tox-private-slider-checked-border-color,#006ce7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#006ce7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#222f3e}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#fff;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:#f7f7f7;border-radius:3px;display:flex;margin:6px 1px 5px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#f7f7f7}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#f7f7f7;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#f0f0f0;color:#222f3e}.tox .tox-number-input input:focus{background-color:#f7f7f7}.tox .tox-number-input input:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{color:#222f3e;height:28px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#f7f7f7;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#f7f7f7}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #eee}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:#f7f7f7}.tox .tox-tbtn--bespoke:focus{background:#f7f7f7}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#fff;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#fff;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#e3e3e3 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#f7f7f7;border-radius:6px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:6px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#f0f0f0;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#fff}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:10px;position:relative}.tox .tox-view__label{color:#222f3e;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:10px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #eee;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #eee;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #eee;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#fff;border-top:1px solid #f0f0f0;display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#fff;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#222f3e;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#f0f0f0;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#fff;border:1px solid #f0f0f0;border-radius:6px;color:#222f3e;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #006ce7;box-shadow:0 0 0 2px #006ce7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#fff5cc;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 #e3b82a;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #e3b82a}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#d3d5d8}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(34,47,62,.7);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#222f3e;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#006ce7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#fff;border-top:1px solid #eee;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#f0f0f0;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#fff;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#f0f0f0;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#006ce7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#222f3e;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#222f3e;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #eee;border-radius:6px;color:#222f3e;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#222F3E80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#d3d5d8}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #d3d5d8}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide/skin.min.css b/public/tinymce/skins/ui/oxide/skin.min.css new file mode 100644 index 0000000..db9110f --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.min.css @@ -0,0 +1 @@ +.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:2px solid #eee;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:2px solid #eee;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:0 2px 2px -2px rgba(34,47,62,.1),0 8px 8px -4px rgba(34,47,62,.07);padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #e3e3e3;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#222f3e}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#e6f0fd;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#fffae6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#fae6e6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#eee;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,6px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,6px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #006ce7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#0060ce);background-image:none;border-color:var(--tox-private-button-focus-border-color,#0060ce);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:6px 1px 5px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#006ce7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#006ce7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#006ce7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#006ce7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#0060ce);border-color:var(--tox-private-button-primary-focus-border-color,#0060ce);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#0060ce);border-color:var(--tox-private-button-primary-hover-border-color,#0060ce);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#0054b4);border-color:var(--tox-private-button-primary-active-border-color,#0054b4);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#0054b4);border-color:var(--tox-private-button-primary-enabled-border-color,#0054b4);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#00489b);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#00489b);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#00489b);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#003c81);border-color:var(--tox-private-button-primary-enabled-active-border-color,#003c81);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-border-color,#f0f0f0);color:var(--tox-private-button-secondary-text-color,#222f3e);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:6px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#f0f0f0);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#d6d6d6);border-color:var(--tox-private-button-secondary-active-border-color,#d6d6d6);color:var(--tox-private-button-secondary-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#a8c8ed);border-color:var(--tox-private-button-secondary-enabled-border-color,#a8c8ed);color:var(--tox-private-button-secondary-enabled-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#93bbe9);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#93bbe9);color:var(--tox-private-button-secondary-enabled-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#93bbe9);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#93bbe9);color:var(--tox-private-button-secondary-enabled-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#7daee4);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#7daee4);color:var(--tox-private-button-secondary-enabled-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#222f3e)}.tox .tox-button--naked[disabled]{background-color:rgba(34,47,62,.12);border-color:transparent;color:var(--tox-private-button-naked-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,rgba(34,47,62,.12));border-color:var(--tox-private-button-naked-focus-border-color,transparent);color:var(--tox-private-button-naked-focus-text-color,#222f3e);box-shadow:unset}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,rgba(34,47,62,.12));border-color:var(--tox-private-button-naked-hover-background-color,transparent);color:var(--tox-private-button-naked-hover-text-color,#222f3e);box-shadow:unset}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,rgba(34,47,62,.18));border-color:var(--tox-private-button-naked-active-border-color,transparent);color:var(--tox-private-button-naked-active-text-color,#222f3e);box-shadow:unset}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-text-color,#222f3e)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-focus-text-color,#222f3e)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-hover-text-color,#222f3e)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-active-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-active-text-color,#222f3e)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(34,47,62,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,6px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,6px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(34,47,62,0.3))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#006ce7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#006ce7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #006ce7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#e3e3e3;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#fcfcfc;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#222f3e;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#006ce7;stroke:#006ce7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#fff}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#fff;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#006ce7;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#f0f0f0;color:#222f3e;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#a6ccf7;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e;background-color:#fff;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#f0f0f0;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#f0f0f0;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #eee;border-radius:6px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #e3e3e3;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#f5cccc;border:1px solid #f0b3b3;border-radius:3px;color:#77181f;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#f0f0f0}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#fff;border:1px solid #fff;border-radius:6px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#fff2c9;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid #006ce7;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:6px;border:2px solid #006ce7}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#fff;position:relative;border-radius:6px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,0.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#eee;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #144782;color:#144782}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#144782;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#071729;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #144782;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #626262}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #eee;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:6px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #eee;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #006ce7;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:2px solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #eee}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:28px;margin:5px 0 6px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 1px #006ce7;outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:5px 0 6px 11px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px -4px;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px -4px}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #eee;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#f0f0f0}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#fff;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#eee;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:#006ce7;border-color:#eee}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#fff;border:1px solid #eee;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#222f3e}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(34,47,62,.7)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#fff;border:1px solid transparent;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#fff;border:0;box-shadow:none;color:#222f3e;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#006ce7;box-shadow:0 0 0 1px #006ce7}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#24321d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #517342;outline-offset:2px}.tox .tox-notification--success a:active{color:#0d120a;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#220709;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #77181f;outline-offset:2px}.tox .tox-notification--error a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#2c280d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #7a6e25;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#050502;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#163355;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #2a64a6;outline-offset:2px}.tox .tox-notification--info a:active{color:#0b1a2c;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#f0f0f0;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#222f3e;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #e3e3e3}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#f0f0f0;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(34,47,62,.7)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(34,47,62,0.7)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #e3e3e3;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#fff 24%,#f0f0f0 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#006ce7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#006ce7}.tox .tox-promotion-dialog--footer{background-color:#f0f0f0;color:rgba(34,47,62,.7);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#f1ebf9;color:#851aff;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #851AFF}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(34,47,62,.7);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#071729;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #144782;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#eee transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #eee transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #eee transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #eee;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#f0f0f0);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#e3e3e3)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#fff);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#fff);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#f0f0f0);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,6px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#222f3e)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#fff);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,6px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#e3e3e3);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#fff);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #eee;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#eee;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#006ce7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#0060ce;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #006ce7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#0060ce}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#0054b4}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #e3e3e3;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#222f3e}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#006ce7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#fff);color:var(--tox-private-text-color,#222f3e)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#fff);border:1px solid var(--tox-private-slider-border-color,#e3e3e3)}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#222f3e)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#006ce7);border:1px solid var(--tox-private-slider-checked-border-color,#006ce7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#006ce7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#222f3e}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#fff;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:#f7f7f7;border-radius:3px;display:flex;margin:6px 1px 5px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#f7f7f7}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#f7f7f7;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#f0f0f0;color:#222f3e}.tox .tox-number-input input:focus{background-color:#f7f7f7}.tox .tox-number-input input:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{color:#222f3e;height:28px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#f7f7f7;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#f7f7f7}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #eee}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:#f7f7f7}.tox .tox-tbtn--bespoke:focus{background:#f7f7f7}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#fff;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#fff;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#e3e3e3 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#f7f7f7;border-radius:6px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:6px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#f0f0f0;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#f0f0f0;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#fff}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:10px;position:relative}.tox .tox-view__label{color:#222f3e;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:10px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #eee;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #eee;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #eee;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#fff;border-top:1px solid #f0f0f0;display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#fff;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#222f3e;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#f0f0f0;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#fff;border:1px solid #f0f0f0;border-radius:6px;color:#222f3e;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #006ce7;box-shadow:0 0 0 2px #006ce7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#fff5cc;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 2px #006ce7 #e3b82a;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #e3b82a}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#d3d5d8}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(34,47,62,.7);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#222f3e;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#006ce7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#fff;border-top:1px solid #eee;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#f0f0f0;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#fff;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#f0f0f0;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#006ce7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#222f3e;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#222f3e;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #eee;border-radius:6px;color:#222f3e;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#222F3E80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#d3d5d8}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #006ce7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #d3d5d8}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1} diff --git a/public/tinymce/skins/ui/oxide/skin.min.ts b/public/tinymce/skins/ui/oxide/skin.min.ts new file mode 100644 index 0000000..20e3c16 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.min.ts @@ -0,0 +1,507 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-checkmark": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__overflow": string; + "tox-toolbar__primary": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-end": string; + "tox-dialog__footer-start": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-toolbar-textfield": string; + "tox-custom-editor": string; + "tox-focusable-wrapper": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-highlight-bg-color__color": string; + "tox-icon-text-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-end": string; + "tox-view__header-start": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; +}; diff --git a/public/tinymce/skins/ui/oxide/skin.shadowdom.css b/public/tinymce/skins/ui/oxide/skin.shadowdom.css new file mode 100644 index 0000000..25b0a37 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.shadowdom.css @@ -0,0 +1,30 @@ +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} diff --git a/public/tinymce/skins/ui/oxide/skin.shadowdom.js b/public/tinymce/skins/ui/oxide/skin.shadowdom.js new file mode 100644 index 0000000..8d38ac7 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.shadowdom.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/oxide/skin.shadowdom.css', `body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css b/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css new file mode 100644 index 0000000..8745951 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.shadowdom.min.css @@ -0,0 +1 @@ +body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} diff --git a/public/tinymce/skins/ui/oxide/skin.shadowdom.min.ts b/public/tinymce/skins/ui/oxide/skin.shadowdom.min.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.shadowdom.min.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/oxide/skin.shadowdom.ts b/public/tinymce/skins/ui/oxide/skin.shadowdom.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.shadowdom.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/oxide/skin.ts b/public/tinymce/skins/ui/oxide/skin.ts new file mode 100644 index 0000000..bc28c31 --- /dev/null +++ b/public/tinymce/skins/ui/oxide/skin.ts @@ -0,0 +1,507 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-collection__item-checkmark": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__primary": string; + "tox-toolbar__overflow": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-start": string; + "tox-dialog__footer-end": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-toolbar-textfield": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-focusable-wrapper": string; + "tox-custom-editor": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-text-color__color": string; + "tox-icon-highlight-bg-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-start": string; + "tox-view__header-end": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.css b/public/tinymce/skins/ui/tinymce-5-dark/content.css new file mode 100644 index 0000000..c707232 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.css @@ -0,0 +1,1025 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #4e4f3b; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #4e4f3b; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #4e4f3b; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #4e4f3b; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; + border-radius: 0.3em; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #282a36; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6272a4; +} +.token.punctuation { + color: #f8f8f2; +} +.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #ff79c6; +} +.token.boolean, +.token.number { + color: #bd93f9; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #50fa7b; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #f8f8f2; +} +.token.atrule, +.token.attr-value, +.token.function, +.token.class-name { + color: #f1fa8c; +} +.token.keyword { + color: #8be9fd; +} +.token.regex, +.token.important { + color: #ffb86c; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.3); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.3); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #4099ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #4099ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #4099ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #4099ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #4099ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #4099ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #4099ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid transparent; + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: lighten; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #4099ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #99c4f5; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #ffeb99; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #eb9999; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #99c4f5; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #ffeb99; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #eb9999; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.inline.css b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.css new file mode 100644 index 0000000..9037e9e --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.css @@ -0,0 +1,1031 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js new file mode 100644 index 0000000..ba53508 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/tinymce-5-dark/content.inline.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css new file mode 100644 index 0000000..c82c8e0 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.inline.ts b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.inline.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.js b/public/tinymce/skins/ui/tinymce-5-dark/content.js new file mode 100644 index 0000000..1ed02db --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/tinymce-5-dark/content.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #4e4f3b}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#4e4f3b;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#4e4f3b}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#4e4f3b;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#99c4f5}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#ffeb99}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#eb9999}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#99c4f5;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#ffeb99;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#eb9999;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.min.css b/public/tinymce/skins/ui/tinymce-5-dark/content.min.css new file mode 100644 index 0000000..bc8508a --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #4e4f3b}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#4e4f3b;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#4e4f3b}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#4e4f3b;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#282a36}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#6272a4}.token.punctuation{color:#f8f8f2}.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#ff79c6}.token.boolean,.token.number{color:#bd93f9}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#50fa7b}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#f1fa8c}.token.keyword{color:#8be9fd}.token.important,.token.regex{color:#ffb86c}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.3)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.3);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #4099ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #4099ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #4099ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #4099ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #4099ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#4099ff}.mce-content-body .mce-edit-focus{outline:3px solid #4099ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid transparent;bottom:-1px;content:'';left:-1px;mix-blend-mode:lighten;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#4099ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#99c4f5}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#ffeb99}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#eb9999}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#99c4f5;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#ffeb99;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#eb9999;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.min.ts b/public/tinymce/skins/ui/tinymce-5-dark/content.min.ts new file mode 100644 index 0000000..03385ce --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "constant": string; + "deleted": string; + "property": string; + "symbol": string; + "tag": string; + "boolean": string; + "number": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "variable": string; + "atrule": string; + "attr-value": string; + "class-name": string; + "function": string; + "keyword": string; + "important": string; + "regex": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/content.ts b/public/tinymce/skins/ui/tinymce-5-dark/content.ts new file mode 100644 index 0000000..2027406 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/content.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "constant": string; + "symbol": string; + "deleted": string; + "boolean": string; + "number": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "variable": string; + "atrule": string; + "attr-value": string; + "function": string; + "class-name": string; + "keyword": string; + "regex": string; + "important": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.css b/public/tinymce/skins/ui/tinymce-5-dark/skin.css new file mode 100644 index 0000000..ccf1116 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.css @@ -0,0 +1,5734 @@ +.tox { + box-shadow: none; + box-sizing: content-box; + cursor: auto; + font-style: normal; + font-weight: normal; + line-height: normal; + -webkit-tap-highlight-color: transparent; + -webkit-text-decoration: none; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; +} +.tox *:not(svg):not(rect) { + box-sizing: inherit; + color: inherit; + cursor: inherit; + direction: inherit; + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + line-height: inherit; + -webkit-tap-highlight-color: inherit; + text-align: inherit; + text-decoration: inherit; + text-shadow: inherit; + text-transform: inherit; + vertical-align: inherit; + white-space: inherit; +} +.tox *:not(svg):not(rect) { + /* stylelint-disable-line no-duplicate-selectors */ + background: transparent; + border: 0; + box-shadow: none; + float: none; + height: auto; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + width: auto; +} +.tox:not([dir=rtl]) { + direction: ltr; + text-align: left; +} +.tox[dir=rtl] { + direction: rtl; + text-align: right; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.tox { + color: var(--tox-private-color-black, #2A3746); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-font-size-base, 16px); +} +.tox-tinymce { + border: 1px solid #000000; + border-radius: 0; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + overflow: hidden; + position: relative; + visibility: inherit !important; +} +.tox.tox-tinymce-inline { + border: none; + box-shadow: none; + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-header { + background-color: #222f3e; + border: 1px solid #000000; + border-radius: 0; + box-shadow: none; + overflow: hidden; +} +.tox-tinymce-aux { + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + z-index: var(--tox-private-z-index-sink, 1300); +} +.tox[dir=rtl] .tox-icon--flip svg { + transform: rotateY(180deg); +} +.tox .tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-editor-header { + display: grid; + grid-template-columns: 1fr min-content; + z-index: 2; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: #222f3e; + border-bottom: none; + box-shadow: none; + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { + transition: box-shadow 0.5s; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: 1px solid #000000; + box-shadow: none; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: #222f3e; + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); +} +.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { + background: none; + border: none; + box-shadow: none; + padding: 0; +} +.tox-editor-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox-editor-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox-editor-dock-transition { + transition: visibility 0s linear 0.25s, opacity 0.25s ease; +} +.tox-editor-dock-transition.tox-editor-dock-fadein { + transition-delay: 0s; +} +.tox .accessibility-issue__header { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox #accessibility-issue__subheader { + font-size: 16px; + color: #fff; +} +.tox .accessbility-sr-only { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(0 0 99.9% 99.9%); + overflow: hidden; + height: 1px; + width: 1px; + padding: 0; + border: 0; +} +.tox .accessibility-issue__description { + align-items: stretch; + border-radius: 3px; + justify-content: space-between; +} +.tox .accessibility-issue__description > div { + padding-bottom: 4px; +} +.tox .accessibility-issue__description > div > div { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description > div > div .tox-icon svg { + display: block; +} +.tox #accessibility-issue__contentID { + margin-top: 8px; + margin-bottom: 8px; +} +.tox #accessibility-issue__contentID span:first-child { + font-weight: bold; +} +.tox #accessibility-issue__document { + padding-bottom: 8px; +} +.tox .accessibility-issue__repair { + margin-top: 8px; +} +.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error { + color: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { + background-color: #22374a; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { + font-size: 14px; + color: #a6cae2; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg { + fill: #a6cae2; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { + background-color: #207ab7; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus { + background-color: #1c6ca1; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { + background-color: #185d8c; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { + background-color: #383f38; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { + font-size: 14px; + color: #ffeb99; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg { + fill: #ffeb99; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { + background-color: #FFE89D; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus { + background-color: #F2D574; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { + background-color: #E8C657; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { + background-color: #332a38; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { + font-size: 14px; + color: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg { + fill: #eb9999; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { + background-color: #F2BFBF; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus { + background-color: #E9A4A4; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { + background-color: #EE9494; + color: #2A3746; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { + background-color: rgba(120, 171, 70, 0.5); + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child { + display: none; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg { + fill: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, +.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { + margin-top: 0; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { + padding: 8px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-right: 4px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-right: auto; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 8px 4px 4px; +} +.tox .mce-codemirror { + background: #fff; + bottom: 0; + font-size: 13px; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .mce-codemirror.tox-inline-codemirror { + margin: 8px; + position: absolute; +} +.tox .tox-advtemplate .tox-form__grid { + flex: 1; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child { + display: flex; + flex-direction: column; + width: 30%; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) { + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child { + width: 100%; + } +} +.tox .tox-advtemplate iframe { + border-color: #000000; + border-radius: 0; + border-style: solid; + border-width: 1px; + margin: 0 10px; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bottom-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + border-width: var(--tox-private-button-border-width, 1px); + border-style: var(--tox-private-button-border-style, solid); + border-radius: var(--tox-private-control-border-radius, 3px); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-button-font-size, 14px); + font-style: var(--tox-private-button-font-style, normal); + font-weight: var(--tox-private-button-font-weight, bold); + line-height: var(--tox-private-control-line-height, 24px); + padding: var(--tox-private-button-padding-y, 4px) var(--tox-private-button-padding-x, 16px); + text-align: center; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + letter-spacing: normal; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + outline: none; + position: relative; + white-space: nowrap; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 2px; +} +.tox .tox-button::before { + border-radius: var(--tox-private-control-border-radius, 3px); + bottom: calc(-1 * var(--tox-private-button-border-width, 1px)); + box-shadow: var(--tox-private-button-focus-outline, inset 0 0 0 1px #fff, 0 0 0 2px #207ab7); + content: ''; + left: calc(-1 * var(--tox-private-button-border-width, 1px)); + opacity: 0; + pointer-events: none; + position: absolute; + right: calc(-1 * var(--tox-private-button-border-width, 1px)); + top: calc(-1 * var(--tox-private-button-border-width, 1px)); +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-focus-background-color, #1c6ca1); + background-image: none; + border-color: var(--tox-private-button-focus-border-color, #1c6ca1); + box-shadow: var(--tox-private-button-focus-box-shadow, none); + color: var(--tox-private-button-focus-text-color, #fff); +} +.tox .tox-button:focus:not(:disabled)::before { + opacity: 1; +} +.tox .tox-button.tox-button--icon, +.tox .tox-button:has(.tox-icon:only-child) { + padding: 4px; +} +.tox .tox-button .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button .tox-icon.tox-icon--success svg { + fill: var(--tox-private-color-success, #78AB46); +} +.tox .tox-button .tox-icon.tox-icon--error svg { + fill: var(--tox-private-color-error, #c00); +} +.tox .tox-button--stretch { + width: 100%; +} +.tox-context-form__group .tox-button--icon, +.tox-context-form__group .tox-button.tox-button--icon { + margin: 3px 0 2px 0; + padding: 0; +} +.tox { + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ +} +.tox .tox-button { + background-color: var(--tox-private-button-primary-background-color, #207ab7); + background-image: none; + background-position: 0 0; + background-repeat: repeat; + color: var(--tox-private-button-primary-text-color, #fff); + border-color: var(--tox-private-button-primary-border-color, #207ab7); + /* Enabled state */ +} +.tox .tox-button[disabled] { + background-color: var(--tox-private-button-primary-disabled-background-color, #207ab7); + background-image: none; + border-color: var(--tox-private-button-primary-disabled-border-color, #207ab7); + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-focus-background-color, #1c6ca1); + border-color: var(--tox-private-button-primary-focus-border-color, #1c6ca1); + color: var(--tox-private-button-primary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-hover-background-color, #1c6ca1); + border-color: var(--tox-private-button-primary-hover-border-color, #1c6ca1); + color: var(--tox-private-button-primary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:active:not(:disabled) { + background-color: var(--tox-private-button-primary-active-background-color, #185d8c); + border-color: var(--tox-private-button-primary-active-border-color, #185d8c); + color: var(--tox-private-button-primary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled { + background-color: var(--tox-private-button-primary-enabled-background-color, #185d8c); + border-color: var(--tox-private-button-primary-enabled-border-color, #185d8c); + color: var(--tox-private-button-primary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled[disabled] { + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-focus-background-color, #154f76); + border-color: var(--tox-private-button-primary-enabled-focus-border-color, #154f76); + color: var(--tox-private-button-primary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-hover-background-color, #154f76); + border-color: var(--tox-private-button-primary-enabled-hover-border-color, #154f76); + color: var(--tox-private-button-primary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-active-background-color, #114060); + border-color: var(--tox-private-button-primary-enabled-active-border-color, #114060); + color: var(--tox-private-button-primary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary { + background-color: var(--tox-private-button-secondary-background-color, #3d546f); + border-color: var(--tox-private-button-secondary-border-color, #3d546f); + color: var(--tox-private-button-secondary-text-color, #fff); + border-style: solid; + border-width: 1px; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-radius: 3px; + box-shadow: none; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + outline: none; + padding: 4px 16px; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + /* Enabled state */ +} +.tox .tox-button--secondary[disabled] { + background-color: var(--tox-private-button-secondary-disabled-background-color, #3d546f); + background-image: none; + border-color: var(--tox-private-button-secondary-disabled-border-color, #3d546f); + color: var(--tox-private-button-secondary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-focus-background-color, #34485f); + border-color: var(--tox-private-button-secondary-focus-border-color, #34485f); + color: var(--tox-private-button-secondary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-hover-background-color, #34485f); + border-color: var(--tox-private-button-secondary-hover-border-color, #34485f); + color: var(--tox-private-button-secondary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-active-background-color, #2b3b4e); + border-color: var(--tox-private-button-secondary-active-border-color, #2b3b4e); + color: var(--tox-private-button-secondary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled { + background-color: var(--tox-private-button-secondary-enabled-background-color, #346085); + border-color: var(--tox-private-button-secondary-enabled-border-color, #346085); + color: var(--tox-private-button-secondary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled[disabled] { + color: var(--tox-private-button-secondary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-focus-background-color, #2d5373); + border-color: var(--tox-private-button-secondary-enabled-focus-border-color, #2d5373); + color: var(--tox-private-button-secondary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-hover-background-color, #2d5373); + border-color: var(--tox-private-button-secondary-enabled-hover-border-color, #2d5373); + color: var(--tox-private-button-secondary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-active-background-color, #264560); + border-color: var(--tox-private-button-secondary-enabled-active-border-color, #264560); + color: var(--tox-private-button-secondary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: var(--tox-private-button-naked-text-color, #fff); +} +.tox .tox-button--naked[disabled] { + background-color: #3d546f; + border-color: #3d546f; + color: var(--tox-private-button-naked-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: var(--tox-private-button-naked-focus-background-color, #34485f); + border-color: var(--tox-private-button-naked-focus-border-color, #34485f); + color: var(--tox-private-button-naked-focus-text-color, #fff); + box-shadow: none; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: var(--tox-private-button-naked-hover-background-color, #34485f); + border-color: var(--tox-private-button-naked-hover-background-color, #34485f); + color: var(--tox-private-button-naked-hover-text-color, #fff); + box-shadow: none; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: var(--tox-private-button-naked-active-background-color, #2b3b4e); + border-color: var(--tox-private-button-naked-active-border-color, #2b3b4e); + color: var(--tox-private-button-naked-active-text-color, #fff); + box-shadow: none; +} +.tox .tox-button--secondary--outline { + background-color: transparent; + border-color: var(--tox-private-button-secondary-outline-border-color, #3d546f); + color: var(--tox-private-button-secondary-outline-text-color, #fff); +} +.tox .tox-button--secondary--outline:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-focus-background-color, #34485f); + border-color: var(--tox-private-button-secondary-outline-focus-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-focus-text-color, #fff); +} +.tox .tox-button--secondary--outline:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-hover-background-color, #3d546f); + border-color: var(--tox-private-button-secondary-outline-hover-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-hover-text-color, #fff); +} +.tox .tox-button--secondary--outline:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-active-background-color, #34485f); + border-color: var(--tox-private-button-secondary-outline-active-border-color, #34485f); + color: var(--tox-private-button-secondary-outline-active-text-color, #fff); +} +.tox .tox-button--secondary--outline[disabled] { + background-color: var(--tox-private-button-secondary-outline-disabled-background-color, transparent); + border-color: var(--tox-private-button-secondary-outline-disabled-border-color, #3d546f); + color: var(--tox-private-button-secondary-outline-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox { + align-items: center; + border-radius: var(--tox-private-checkbox-border-radius, 3px); + cursor: pointer; + display: flex; + height: var(--tox-private-control-height, 36px); + min-width: var(--tox-private-control-height, 36px); +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + padding: var(--tox-private-pad-xs, calc(4px - 1px)); + border-radius: var(--tox-private-checkbox-border-radius, 3px); + box-shadow: 0 0 0 2px transparent; + height: var(--tox-private-control-line-height, 24px); + aspect-ratio: 1; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: var(--tox-private-checkbox-unselected-color, rgba(255, 255, 255, 0.2)); +} +@media (forced-colors: active) { + .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: currentColor !important; + } +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: var(--tox-private-checkbox-indeterminate-color, #207ab7); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: var(--tox-private-checkbox-selected-color, #207ab7); +} +.tox .tox-checkbox--disabled { + color: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(255, 255, 255, 0.5)); +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + box-shadow: var(--tox-private-checkbox-focus-box-shadow, inset 0 0 0 1px #207ab7); +} +.tox:not([dir=rtl]) .tox-checkbox__label { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox:not([dir=rtl]) .tox-checkbox__input { + left: -10000px; +} +.tox:not([dir=rtl]) .tox-bar .tox-checkbox { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__label { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__input { + right: -10000px; +} +.tox[dir=rtl] .tox-bar .tox-checkbox { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #1a1a1a; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #333333; + color: #fff; + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + border-radius: 3px; + color: #fff; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector, +.tox .tox-image-selector-menu .tox-collection__item { + flex-direction: column; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark { + flex-grow: 1; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector label, +.tox .tox-image-selector-menu .tox-collection__item label { + width: 48px; + white-space: nowrap; + overflow: hidden; + font-size: 12px; + color: #fff; + text-align: center; + align-self: flex-end; +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark { + height: 24px; + width: 24px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path { + fill: #207ab7; + stroke: #207ab7; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #222f3e; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + z-index: 2; + background-color: #222f3e; + opacity: 0.8; + background-clip: content-box; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #2b3b4e; + color: #fff; +} +.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #4a5562; + color: #fff; +} +@media (forced-colors: active) { + .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + border: solid 1px; + } +} +.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #757d87; + color: #fff; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #4a5562; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent inset; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #757d87; + color: #fff; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #fff; + background-color: #2b3b4e; + position: relative; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + background-color: #4a5562; + color: #fff; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus { + background-color: #4a5562; + color: #fff; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection__item-image { + border: 1px solid #000000; + border-radius: 3px; + display: flex; + flex-direction: column; + justify-content: center; + margin-bottom: 4px; + position: relative; +} +.tox .tox-collection__item-icon, +.tox .tox-collection__item-checkmark { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg, +.tox .tox-collection__item-checkmark svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + max-width: 100%; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection__item-accessory { + color: currentColor; + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + text-transform: none; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + min-height: 24px; +} +.tox .tox-collection__item-caret::after { + content: ''; + font-size: 0; + min-height: inherit; +} +.tox .tox-collection__item-caret svg { + fill: currentColor; +} +.tox .tox-collection__item--state-disabled { + background-color: transparent; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark { + display: none; +} +.tox .tox-collection--horizontal { + background-color: #2b3b4e; + border: 1px solid #1a1a1a; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: nowrap; + margin-bottom: 0; + overflow-x: auto; + padding: 0; +} +.tox .tox-collection--horizontal .tox-collection__group { + align-items: center; + display: flex; + flex-wrap: nowrap; + margin: 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item { + height: 34px; + margin: 3px 0 2px 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item-label { + white-space: nowrap; +} +.tox .tox-collection--horizontal .tox-collection__item-caret { + margin-left: 4px; +} +.tox .tox-collection__item-container { + display: flex; +} +.tox .tox-collection__item-container--row { + align-items: center; + flex: 1 1 auto; + flex-direction: row; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-left { + margin-right: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-right { + justify-content: flex-end; + margin-left: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { + align-items: flex-start; + margin-bottom: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { + align-items: center; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { + align-items: flex-end; + margin-top: auto; +} +.tox .tox-collection__item-container--column { + align-self: center; + flex: 1 1 auto; + flex-direction: column; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-left { + align-items: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-right { + align-items: flex-end; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { + align-self: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { + align-self: center; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { + align-self: flex-end; +} +.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-right: 1px solid #000000; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-collection__item-accessory { + margin-left: 16px; + text-align: right; +} +.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { + margin-left: 16px; +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-left: 1px solid #000000; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-right: 8px; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-right: 4px; +} +.tox[dir=rtl] .tox-collection__item-accessory { + margin-right: 16px; + text-align: left; +} +.tox[dir=rtl] .tox-collection .tox-collection__item-caret { + margin-right: 16px; + transform: rotateY(180deg); +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { + margin-right: 4px; +} +@media (forced-colors: active) { + .tox .tox-hue-slider, + .tox .tox-rgb-form .tox-rgba-preview { + background-color: currentColor !important; + border: 1px solid highlight !important; + forced-color-adjust: none; + } +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + box-sizing: border-box; + display: flex; + height: 100%; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + box-sizing: content-box; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + box-sizing: border-box; + height: 100%; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-spectrum:focus, +.tox .tox-sv-palette-spectrum:focus { + outline: #08f solid; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + box-sizing: content-box; + height: 4px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + min-width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid #f00 !important; + box-shadow: 0 0 0 1px #f00; +} +.tox .tox-rgb-container { + position: relative; +} +.tox .tox-rgb-form .tox-invalid-icon { + align-content: center; + align-items: center; + display: none; + height: 100%; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid { + margin: 0; +} +.tox .tox-rgb-warning-note { + background-color: #442632; + border: 1px solid #55212b; + border-radius: 3px; + color: #e68080; + padding: 3px; +} +.tox input.tox-invalid + .tox-invalid-icon { + display: flex; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox:not([dir=rtl]) .tox-sv-palette { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider-thumb { + margin-left: -1px; +} +.tox:not([dir=rtl]) .tox-rgb-form label { + margin-right: 0.5em; +} +.tox[dir=rtl] .tox-sv-palette { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider-thumb { + margin-right: -1px; +} +.tox[dir=rtl] .tox-rgb-form label { + margin-left: 0.5em; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 2px 0 3px 4px; +} +.tox .tox-collection--list .tox-collection__group .tox-swatches-menu { + border: 0; + margin: -4px 0; +} +.tox .tox-swatches__row { + display: flex; +} +@media (forced-colors: active) { + .tox .tox-swatches__row { + forced-color-adjust: none; + } +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + fill: #fff; + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #4a5562; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg { + display: none; + fill: #fff; + height: 24px; + margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2); + width: 24px; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg path { + fill: #fff; + paint-order: stroke; + stroke: #222f3e; + stroke-width: 2px; +} +.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { + display: block; +} +.tox:not([dir=rtl]) .tox-swatches__picker-btn { + margin-left: auto; +} +.tox[dir=rtl] .tox-swatches__picker-btn { + margin-right: auto; +} +.tox { + /* Animation for deleting a comment */ + /* A comment fades to 0 when it is being deleted, then is removed */ +} +.tox .tox-comment { + background: #222f3e; + border: 1px solid #222f3e; + border-radius: 3px; + padding: 8px; + padding-bottom: 16px; + position: relative; +} +.tox .tox-comment:hover { + box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1); +} +.tox .tox-comment.tox-comment--selected { + background-color: #555542; + border: 1px solid #ffcf30; + box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1); +} +.tox .tox-comment.tox-comment--selected:focus { + border: 2px solid transparent; + margin: -1px; +} +.tox .tox-comment.tox-comment--selected:focus:not(:first-child) { + margin-top: 7px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single { + margin-bottom: 12px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus { + position: relative; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after { + top: -9px; + pointer-events: none; + position: absolute; + content: ""; + display: block; + bottom: -9px; + left: -9px; + right: -9px; + border-radius: 3px; + border: 2px solid transparent; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after { + bottom: calc((12px + 16px + 1px) * -1); +} +.tox .tox-comment__header { + align-items: center; + color: #fff; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-comment__body { + color: #fff; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); + white-space: pre-wrap; + /* We remove the transitions when wanting to measure and jump straight to collapsed or expanded */ +} +.tox .tox-comment__body.tox-comment__body--expanded { + max-height: 100em; + transition: max-height 1s ease-in-out; +} +.tox .tox-comment__body.tox-comment__body--pending { + transition: max-height 0s; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; + font-size: 16px; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #fff; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #222f3e; + box-shadow: 0 0 8px 8px #222f3e; + color: #fff; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: 0.8em; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; + font-style: normal; + /* Need a focus highlight on the show more/less button */ +} +.tox .tox-comment__expander p:focus { + font-weight: bold; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-tbtn.tox-comment__mention-btn { + display: flex; + width: 34px; + height: 34px; + padding: 5px; + justify-content: center; + align-items: center; + margin: 0; + background-color: transparent; +} +.tox .tox-comment-thread { + background: #222f3e; + position: relative; + border-radius: 3px; + background-color: transparent; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #222f3e; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(34, 47, 62, 0), #222f3e); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #222f3e; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #222f3e; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 20; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; + padding: 12px; + scroll-behavior: smooth; +} +.tox .tox-comment__scroll:has(textarea:focus) { + scroll-behavior: auto; +} +.tox .tox-comment--disappearing { + transition: opacity 0.5s ease; +} +.tox .tox-comment[data-transitioning-destination="deleting"] { + opacity: 0; +} +.tox .tox-ring-loader { + width: 10px; + height: 10px; + border: 1px solid #FFF; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: tox-rotation 1s linear infinite; +} +.tox:not([dir=rtl]) .tox-comment__edit { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child, +.tox:not([dir=rtl]) .tox-comment__edit > *:last-child, +.tox:not([dir=rtl]) .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox[dir=rtl] .tox-comment__edit { + margin-right: 8px; +} +.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child, +.tox[dir=rtl] .tox-comment__edit > *:last-child, +.tox[dir=rtl] .tox-comment__reply > *:last-child { + margin-right: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-user__avatar img { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-user__name { + color: #fff; + font-size: 14px; + font-style: normal; + font-weight: bold; + line-height: 18px; + text-transform: none; +} +.tox:not([dir=rtl]) .tox-user__avatar svg, +.tox:not([dir=rtl]) .tox-user__avatar img { + margin-right: 8px; +} +.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar svg, +.tox[dir=rtl] .tox-user__avatar img { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar + .tox-user__name { + margin-right: 8px; +} +.tox { + /* .tox-dialog-blocker-wrap { + // + } */ +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(34, 47, 62, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .tox-dialog-wrap__backdrop--opaque { + background-color: #222f3e; +} +.tox .tox-dialog { + background-color: #2b3b4e; + border-color: #000000; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: 0 16px 16px -10px rgba(42, 55, 70, 0.15), 0 0 40px 1px rgba(42, 55, 70, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 2; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog { + align-self: flex-start; + margin: 8px auto; + max-height: calc(100vh - 8px * 2); + width: calc(100vw - 16px); + } +} +.tox .tox-dialog-inline { + z-index: 1100; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #2b3b4e; + border-bottom: none; + color: #fff; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: none; +} +.tox .tox-dialog__body { + color: #fff; + display: flex; + flex: 1; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + min-width: 0; + text-align: left; + text-transform: none; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body { + flex-direction: column; + } +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: 16px 16px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-dialog__body-nav { + max-width: 11em; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { + flex-direction: row; + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding-bottom: 0; + } +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(255, 255, 255, 0.5); + display: inline-block; + flex-shrink: 0; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + max-width: 13em; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item:focus { + background-color: rgba(32, 122, 183, 0.1); +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #90bddb; + color: #90bddb; +} +@media (forced-colors: active) { + .tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid highlight; + color: highlight; + } +} +.tox .tox-dialog__body-content { + box-sizing: border-box; + display: flex; + flex: 1; + flex-direction: column; + max-height: min(650px, calc(100vh - 110px)); + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 16px 16px; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content a { + color: #90bddb; + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:hover, +.tox .tox-dialog__body-content a:focus { + color: #428fc2; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:focus-visible { + border-radius: 1px; + outline: 2px solid #90bddb; + outline-offset: 2px; +} +.tox .tox-dialog__body-content a:active { + color: #33739e; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content svg { + fill: #fff; +} +.tox .tox-dialog__body-content strong { + font-weight: bold; +} +.tox .tox-dialog__body-content ul { + list-style-type: disc; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dd { + padding-inline-start: 2.5rem; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl, +.tox .tox-dialog__body-content dd, +.tox .tox-dialog__body-content dt { + display: block; + margin-inline-end: 0; + margin-inline-start: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1 { + color: #fff; + font-size: 20px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group h2 { + color: #fff; + font-size: 16px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group p { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content .tox-form__group h1:first-child, +.tox .tox-dialog__body-content .tox-form__group h2:first-child, +.tox .tox-dialog__body-content .tox-form__group p:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:last-child, +.tox .tox-dialog__body-content .tox-form__group h2:last-child, +.tox .tox-dialog__body-content .tox-form__group p:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:only-child, +.tox .tox-dialog__body-content .tox-form__group h2:only-child, +.tox .tox-dialog__body-content .tox-form__group p:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { + text-align: center; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { + text-align: end; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--fullscreen { + height: 100%; + max-width: 100%; +} +.tox .tox-dialog--fullscreen .tox-dialog__body-content { + max-height: 100%; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #2b3b4e; + border-top: 1px solid #000000; + display: flex; + justify-content: space-between; + padding: 8px 16px; +} +.tox .tox-dialog__footer-start, +.tox .tox-dialog__footer-end { + display: flex; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(34, 47, 62, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table thead th:first-child { + padding-right: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #000000; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__table td:first-child { + padding-right: 8px; +} +.tox .tox-dialog__iframe { + min-height: 200px; +} +.tox .tox-dialog__iframe.tox-dialog__iframe--opaque { + background: #fff; +} +.tox .tox-navobj-bordered { + position: relative; +} +.tox .tox-navobj-bordered::before { + border: 1px solid #000000; + border-radius: 3px; + content: ''; + inset: 0; + opacity: 1; + pointer-events: none; + position: absolute; + z-index: 1; +} +.tox .tox-navobj-bordered iframe { + border-radius: 3px; +} +.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +.tox .tox-dialog__body-iframe { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-dialog__body-iframe .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox .tox-dialog-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-dialog-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-dialog-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { + transition-delay: 0s; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { + margin-right: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { + margin-left: 8px; + } +} +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *, +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-dialog__body { + text-align: right; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { + margin-left: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { + margin-right: 8px; + } +} +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *, +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * { + margin-right: 8px; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #000000; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(255, 255, 255, 0.5); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area::before { + border: 0 solid transparent; + border-radius: 4px; + content: ''; + inset: 0; + opacity: 0; + pointer-events: none; + position: absolute; + transition: opacity 0.15s; + z-index: 1; +} +@media (forced-colors: active) { + .tox .tox-edit-area::before { + border: 0 solid highlight; + } +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-edit-focus .tox-edit-area::before { + opacity: 1; +} +.tox.tox-inline-edit-area { + border: 1px dotted #000000; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: green; +} +.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { + padding-right: 32px; +} +.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { + right: 4px; +} +.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { + padding-left: 32px; +} +.tox[dir=rtl] .tox-control-wrap__status-icon-wrap { + left: 4px; +} +.tox .tox-custom-preview { + border-color: #000000; + border-radius: 3px; + border-style: solid; + border-width: 1px; + flex: 1; + padding: 8px; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + box-sizing: border-box; + max-width: 25em; +} +.tox .tox-autocompleter .tox-autocompleter-highlight { + font-weight: bold; +} +.tox .tox-color-input { + display: flex; + position: relative; + z-index: 1; +} +.tox .tox-color-input .tox-textfield { + z-index: -1; +} +.tox .tox-color-input span { + border-color: rgba(42 55 3.5%); + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + height: 24px; + position: absolute; + top: 6px; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-color-input span { + border-color: currentColor; + border-width: 2px !important; + forced-color-adjust: none; + } +} +.tox .tox-color-input span:hover:not([aria-disabled=true]), +.tox .tox-color-input span:focus:not([aria-disabled=true]) { + border-color: #207ab7; + cursor: pointer; +} +.tox .tox-color-input span::before { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(255, 255, 255, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.25) 75%); + background-position: 0 0, 0 6px, 6px -6px, -6px 0; + background-size: 12px 12px; + border: 1px solid #2b3b4e; + border-radius: 3px; + box-sizing: border-box; + content: ''; + height: 24px; + left: -1px; + position: absolute; + top: -1px; + width: 24px; + z-index: -1; +} +@media (forced-colors: active) { + .tox .tox-color-input span::before { + border: none; + } +} +.tox .tox-color-input span[aria-disabled=true] { + cursor: not-allowed; +} +.tox:not([dir=rtl]) .tox-color-input .tox-textfield { + padding-left: 36px; +} +.tox:not([dir=rtl]) .tox-color-input span { + left: 6px; +} +.tox[dir="rtl"] .tox-color-input .tox-textfield { + padding-right: 36px; +} +.tox[dir="rtl"] .tox-color-input span { + right: 6px; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(255, 255, 255, 0.5); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: none; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox[dir=rtl] .tox-label { + padding: 0 0 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form-group--maximize { + flex: 1; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) { + margin-right: 4px; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input { + margin-left: 8px; + margin-right: 8px; +} +.tox .tox-textfield, +.tox .tox-toolbar-textfield, +.tox .tox-listboxfield .tox-listbox--select, +.tox .tox-textarea, +.tox .tox-textarea-wrap .tox-textarea:focus { + appearance: none; + background-color: #2b3b4e; + border-color: #000000; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-textfield[disabled], +.tox .tox-toolbar-textfield[disabled], +.tox .tox-textarea[disabled] { + background-color: #222f3e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-textfield:focus, +.tox .tox-toolbar-textfield:focus, +.tox .tox-listboxfield .tox-listbox--select:focus, +.tox .tox-textarea-wrap:focus-within, +.tox .tox-textarea:focus, +.tox .tox-focusable-wrapper:focus, +.tox .tox-custom-editor:focus-within { + background-color: #2b3b4e; + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-toolbar-textfield { + max-width: 250px; + min-height: unset; + height: 34px; + margin: 2px 0 3px 0; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #207ab7; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #fff; +} +.tox .tox-textfield-size { + width: 80px; +} +.tox:not([dir=rtl]) .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-toolbar-textfield + * { + margin-right: 4px; +} +.tox .tox-listboxfield { + cursor: pointer; + position: relative; +} +.tox .tox-listboxfield .tox-listbox--select[disabled] { + background-color: #19232e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-listbox__select-label { + cursor: default; + flex: 1; + margin: 0 4px; +} +.tox .tox-listbox__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-listbox__select-chevron svg { + fill: #fff; +} +@media (forced-colors: active) { + .tox .tox-listbox__select-chevron svg { + fill: currentColor !important; + } +} +.tox .tox-listboxfield .tox-listbox--select { + align-items: center; + display: flex; +} +.tox:not([dir=rtl]) .tox-listboxfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-listboxfield svg { + left: 8px; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + appearance: none; + background-color: #2b3b4e; + border-color: #000000; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-selectfield select[disabled] { + background-color: #19232e; + color: rgba(255, 255, 255, 0.85); + cursor: not-allowed; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield select:focus { + background-color: #2b3b4e; + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-selectfield select option:checked { + background-color: revert; + color: revert; +} +.tox:not([dir=rtl]) .tox-selectfield select[size="0"], +.tox:not([dir=rtl]) .tox-selectfield select[size="1"] { + padding-right: 24px; +} +.tox:not([dir=rtl]) .tox-selectfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-selectfield select[size="0"], +.tox[dir=rtl] .tox-selectfield select[size="1"] { + padding-left: 24px; +} +.tox[dir=rtl] .tox-selectfield svg { + left: 8px; +} +.tox .tox-textarea-wrap { + border-color: #000000; + border-radius: 3px; + border-style: solid; + border-width: 1px; + display: flex; + flex: 1; + overflow: hidden; +} +.tox .tox-textarea { + appearance: textarea; + white-space: pre-wrap; +} +.tox .tox-textarea-wrap .tox-textarea { + border: none; +} +.tox .tox-textarea-wrap .tox-textarea:focus { + border: none; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-help__more-link { + list-style: none; + margin-top: 1em; +} +.tox .tox-imagepreview { + background-color: #666; + height: 380px; + overflow: hidden; + position: relative; + width: 100%; +} +.tox .tox-imagepreview.tox-imagepreview__loaded { + overflow: auto; +} +.tox .tox-imagepreview__container { + display: flex; + left: 100vw; + position: absolute; + top: 100vw; +} +.tox .tox-imagepreview__image { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools .tox-spacer { + flex: 1; +} +.tox .tox-image-tools .tox-bar { + align-items: center; + display: flex; + height: 60px; + justify-content: center; +} +.tox .tox-image-tools .tox-imagepreview, +.tox .tox-image-tools .tox-imagepreview + .tox-bar { + margin-top: 8px; +} +.tox .tox-image-tools .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: 0.5; + position: absolute; + zoom: 1; +} +.tox .tox-image-tools .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-image-tools .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-image-tools .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-image-tools .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-image-selector-loading-spinner-wrapper { + display: flex; + justify-content: center; + align-items: center; +} +.tox .tox-image-selector-loading-spinner { + position: absolute; + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #207ab7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox .tox-toolbar .tox-image-selector, +.tox .tox-toolbar__primary .tox-image-selector, +.tox .tox-toolbar__overflow .tox-image-selector { + margin: 2px 0 3px 4px; +} +.tox .tox-image-selector-menu { + border: 0; + border-radius: 3px; + margin: -4px 0; + padding: 4px; +} +.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group { + border: 0; + padding: 0; + margin: -4px 0; +} +.tox .tox-image-selector-menu .tox-collection__item { + max-width: 48px; +} +.tox .tox-image-selector-menu .tox-collection__item-icon { + border: 1px solid #000000; + border-radius: 3px; + margin-bottom: 4px; + width: 100%; +} +.tox .tox-image-selector-menu .tox-collection__item-icon svg path { + stroke: #c00; +} +.tox .tox-image-selector__row { + display: flex; +} +.tox .tox-image-selector--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-selector--remove svg path { + stroke: #c00; +} +.tox .tox-image-selector-image-wrapper { + width: 46px; + height: 46px; + display: flex; + align-items: center; + justify-content: center; +} +.tox .tox-image-selector-image-img { + max-width: 100%; + max-height: 100%; +} +.tox .tox-image-selector__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-image-selector__picker-btn svg { + fill: #fff; + height: 24px; + width: 24px; +} +.tox .tox-image-selector__picker-btn:hover { + background: #4a5562; +} +.tox .tox-context-toolbar { + position: absolute; + position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; + z-index: 1150; + background-color: #ffffff; + border: 1px solid #e0e0e0; + border-radius: 9px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + padding: 4px; +} +.tox .tox-context-toolbar[popover] { + inset: auto; + margin: 0; +} +.tox .tox-context-toolbar .tox-toolbar { + display: flex; + flex-wrap: nowrap; + gap: 8px; +} +.tox .tox-context-toolbar .tox-toolbar__group { + display: flex; + flex-wrap: nowrap; + flex-shrink: 0; + gap: 4px; + align-items: center; +} +.tox .tox-insert-table-picker { + background-color: #222f3e; + display: flex; + flex-wrap: wrap; + width: 170px; +} +.tox .tox-insert-table-picker > div { + border-color: #000000; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: border-box; + height: 17px; + width: 17px; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: 0 -4px; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: rgba(32, 122, 183, 0.5); + border-color: rgba(32, 122, 183, 0.5); +} +@media (forced-colors: active) { + .tox .tox-insert-table-picker .tox-insert-table-picker__selected { + border-color: Highlight; + filter: contrast(50%); + } +} +.tox .tox-insert-table-picker__label { + color: #fff; + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) { + border-right: 0; +} +.tox-mentions__card-common { + z-index: 1200; +} +.tox.tox-mentions__card { + background: #222f3e; + border: 1px solid #000000; + display: flex; + padding: 4px 8px; +} +.tox.tox-mentions__card .tox-mentions__container { + display: flex; + flex-direction: column; + align-self: center; + margin: 0 4px; +} +.tox .tox-mentions__avatar { + width: 42px; + height: 42px; + border-radius: 50%; + margin-right: 4px; +} +.tox .tox-mentions__username { + font-size: 14px; + line-height: 21px; + color: #fff; +} +.tox .tox-mentions__description { + font-size: 12px; + line-height: 21px; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-collection__item--active .tox-mentions__username, +.tox .tox-collection__item--active .tox-mentions__description { + color: inherit; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #2b3b4e; + border: 1px solid #000000; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(42, 55, 70, 0.1); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1150; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0 0; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 4px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 4px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-menu .tox-collection__item-label { + overflow-wrap: break-word; + word-break: normal; + } + .tox .tox-dialog__popups .tox-menu .tox-collection__item-label { + word-break: break-all; + } +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e; + background-color: #222f3e; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + grid-column: 1 / -1; + grid-row: 1; + padding: 0 4px 0 4px; +} +.tox .tox-promotion + .tox-menubar { + grid-column: 1; +} +.tox .tox-promotion { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e; + background-color: #222f3e; + grid-column: 2; + grid-row: 1; + padding-inline-end: 8px; + padding-inline-start: 4px; + padding-top: 5px; +} +.tox .tox-promotion-link { + align-items: unsafe center; + background-color: #E8F1F8; + border-radius: 5px; + color: #086BE6; + cursor: pointer; + display: flex; + font-size: 14px; + height: 26.6px; + padding: 4px 8px; + white-space: nowrap; +} +.tox .tox-promotion-link:hover { + background-color: #B4D7FF; +} +.tox .tox-promotion-link:focus { + background-color: #D9EDF7; +} +/* Deprecated. Remove in next major release */ +.tox .tox-mbtn { + align-items: center; + background: #222f3e; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + padding: 0 4px; + text-transform: none; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: #222f3e; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #4a5562; + border: 0; + box-shadow: none; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-mbtn:focus:not(:disabled)::after { + pointer-events: none; + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-mbtn:focus:not(:disabled)::after { + border: 2px solid highlight; + } +} +.tox .tox-mbtn--active, +.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus { + background: #757d87; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { + background: #4a5562; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + display: grid; + font-size: 14px; + font-weight: normal; + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-left: auto; + margin-right: auto; + margin-top: 4px; + opacity: 0; + padding: 4px; + transition: transform 100ms ease-in, opacity 150ms ease-in; + width: max-content; +} +.tox .tox-notification a { + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification p { + font-size: 14px; + font-weight: normal; +} +.tox .tox-notification:focus { + border-color: #207ab7; + box-shadow: none; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #334840; + border-color: #3c5440; + color: #fff; +} +.tox .tox-notification--success p { + color: #fff; +} +.tox .tox-notification--success a { + color: #b5d199; +} +.tox .tox-notification--success a:hover, +.tox .tox-notification--success a:focus { + color: #82b153; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success a:focus-visible { + border-radius: 1px; + outline: 2px solid #b5d199; + outline-offset: 2px; +} +.tox .tox-notification--success a:active { + color: #689041; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success svg { + fill: #fff; +} +.tox .tox-notification--error { + background-color: #442632; + border-color: #55212b; + color: #fff; +} +.tox .tox-notification--error p { + color: #fff; +} +.tox .tox-notification--error a { + color: #e68080; +} +.tox .tox-notification--error a:hover, +.tox .tox-notification--error a:focus { + color: #d42b2b; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error a:focus-visible { + border-radius: 1px; + outline: 2px solid #e68080; + outline-offset: 2px; +} +.tox .tox-notification--error a:active { + color: #aa2222; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error svg { + fill: #fff; +} +.tox .tox-notification--warn, +.tox .tox-notification--warning { + background-color: #222f3e; + border-color: #000000; + color: #fff0b3; +} +.tox .tox-notification--warn p, +.tox .tox-notification--warning p { + color: #fff0b3; +} +.tox .tox-notification--warn a, +.tox .tox-notification--warning a { + color: #ffcc00; +} +.tox .tox-notification--warn a:hover, +.tox .tox-notification--warning a:hover, +.tox .tox-notification--warn a:focus, +.tox .tox-notification--warning a:focus { + color: #997a00; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn a:focus-visible, +.tox .tox-notification--warning a:focus-visible { + border-radius: 1px; + outline: 2px solid #ffcc00; + outline-offset: 2px; +} +.tox .tox-notification--warn a:active, +.tox .tox-notification--warning a:active { + color: #665200; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn svg, +.tox .tox-notification--warning svg { + fill: #fff0b3; +} +.tox .tox-notification--info { + background-color: #254161; + border-color: #264972; + color: #fff; +} +.tox .tox-notification--info p { + color: #fff; +} +.tox .tox-notification--info a { + color: #83b7f3; +} +.tox .tox-notification--info a:hover, +.tox .tox-notification--info a:focus { + color: #2681ea; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info a:focus-visible { + border-radius: 1px; + outline: 2px solid #83b7f3; + outline-offset: 2px; +} +.tox .tox-notification--info a:active { + color: #1368c9; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info svg { + fill: #fff; +} +.tox .tox-notification__body { + align-self: center; + color: #fff; + font-size: 14px; + grid-column-end: 3; + grid-column-start: 2; + grid-row-end: 2; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + align-self: center; + grid-column-end: 2; + grid-column-start: 1; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + align-self: start; + grid-column-end: 4; + grid-column-start: 3; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + grid-column-end: 4; + grid-column-start: 1; + grid-row-end: 3; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-notification-container-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-notification-container-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-notification-container-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein { + transition-delay: 0s; +} +.tox .tox-onboarding-overlay { + height: 100%; + background-color: #17202a; + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1302; + overflow: auto; + display: grid; + justify-content: center; + align-items: center; +} +.tox .tox-onboarding-dialog { + max-width: 512px; + background-color: #222f3e; + display: flex; + flex-direction: column; + box-shadow: 0 16px 16px -10px rgba(42, 55, 70, 0.15), 0 0 40px 1px rgba(42, 55, 70, 0.15); + border-radius: 12px; + margin: 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-header { + color: #fff; + display: flex; + justify-content: center; + align-items: center; + font-size: 20px; + margin: 24px 0 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step { + display: grid; + grid-template-columns: min-content 1fr min-content; + align-items: center; + margin: 0 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child) { + border-bottom: 1px solid #000000; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--number { + width: 24px; + aspect-ratio: 1; + border-radius: 50%; + border: 1px solid #00AD0E; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + font-weight: bold; + color: #00AD0E; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body { + padding: 24px 0 24px 16px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-header { + color: #fff; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-details { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--action { + padding-left: 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer { + background-color: #2b3b4e; + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 24px; + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer p { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + font-size: 14px; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-onboarding-dialog svg { + width: 24px; + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin { + display: grid; + align-items: center; + grid-template-columns: min-content 1fr min-content; + border-bottom: 1px solid #000000; + padding: 24px 0; + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body { + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header { + color: #fff; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon { + display: grid; + place-content: center; + width: 56px; + height: 56px; + line-height: 24px; + font-size: 24px; + border-radius: 12px; + background: linear-gradient(180deg, #2b3b4e 24%, #202d3b 100%); + box-shadow: 0px 1px 1px 0px #222f3e12, 0px 3px 6px 0px #222f3e06; + color: #207ab7; +} +.tox .tox-promotion-dialog--subtitle { + margin: 16px; + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore { + text-align: center; + margin: 16px; + color: rgba(255, 255, 255, 0.5); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore a { + color: #207ab7; +} +.tox .tox-promotion-dialog--footer { + background-color: #17202a; + color: rgba(255, 255, 255, 0.5); + font-size: 12px; + text-align: center; + padding: 16px; +} +.tox .tox-promotion-button { + display: flex; + align-items: center; + height: 26.6px; + line-height: 26.6px; + font-size: 14px; + font-weight: bold; + background-color: #55367A; + color: #C290FB; + padding: 8px 16px; + cursor: pointer; + white-space: nowrap; + border-radius: 5px; +} +.tox .tox-promotion-button:focus { + outline: 1px solid #C290FB; +} +.tox .tox-onboarding-dialog a, +.tox .tox-promotion-dialog--footer a { + color: rgba(255, 255, 255, 0.5); + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:hover, +.tox .tox-promotion-dialog--footer a:hover, +.tox .tox-onboarding-dialog a:focus, +.tox .tox-promotion-dialog--footer a:focus { + color: #428fc2; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:focus-visible, +.tox .tox-promotion-dialog--footer a:focus-visible { + border-radius: 1px; + outline: 2px solid #90bddb; + outline-offset: 2px; +} +.tox .tox-onboarding-dialog a:active, +.tox .tox-promotion-dialog--footer a:active { + color: #33739e; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width 0.1s ease; +} +.tox .tox-pop--resizing .tox-toolbar, +.tox .tox-pop--resizing .tox-toolbar__group { + flex-wrap: nowrap; +} +.tox .tox-pop--transition { + transition: 0.15s ease; + transition-property: left, right, top, bottom; +} +.tox .tox-pop--transition::before, +.tox .tox-pop--transition::after { + transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s; +} +.tox .tox-pop__dialog { + background-color: #222f3e; + border: 1px solid #000000; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; + margin-bottom: -1px; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + opacity: 1; + position: absolute; + width: 0; +} +@media (forced-colors: active) { + .tox .tox-pop::before, + .tox .tox-pop::after { + content: none; + } +} +.tox .tox-pop.tox-pop--inset::before, +.tox .tox-pop.tox-pop--inset::after { + opacity: 0; + transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #222f3e transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #000000 transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #222f3e transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #000000 transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #222f3e transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #000000 transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #222f3e; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #000000; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + background-color: var(--tox-private-sidebar-background-color, #34485f); + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width 0.5s ease, opacity 0.5s ease; +} +.tox .tox-sidebar-content { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + min-width: 300px; + max-width: 300px; + width: 300px; + border-left: 1px solid var(--tox-private-sidebar-border-color, #0e141a); +} +.tox .tox-sidebar-content__header { + align-items: center; + display: flex; + justify-content: space-between; + box-shadow: var(--tox-private-sidebar-header-box-shadow, 0 4px 8px 0 rgba(42, 55, 70, 0.1)); + padding: var(--tox-private-pad-sm, 8px) 12px; + background: var(--tox-private-background-color, #222f3e); + z-index: 1; +} +.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button { + margin-left: auto; +} +.tox .tox-sidebar-content__title { + font-size: var(--tox-private-font-size-lg, 20px); + font-weight: var(--tox-private-font-weight-normal, normal); + padding: var(--tox-private-pad-sm, 8px) 0 var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #fff); + line-height: 28px; +} +.tox .tox-floating-sidebar { + --tox-private-floating-sidebar-requested-height: 600px; + --tox-private-floating-sidebar-width: min(380px, 90vw); + --tox-private-floating-sidebar-height: min(var(--tox-private-floating-sidebar-requested-height), 80vh); + box-shadow: var(--tox-private-floating-sidebar-box-shadow, 0 0 40px 1px rgba(42, 55, 70, 0.15), 0 16px 16px -10px rgba(42, 55, 70, 0.15)); + width: var(--tox-private-floating-sidebar-width); + height: var(--tox-private-floating-sidebar-height); + background-color: var(--tox-private-background-color, #222f3e); + border-radius: 12px; + overflow: hidden; +} +.tox .tox-floating-sidebar__content-wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.tox .tox-floating-sidebar__header { + position: relative; +} +.tox-ai .tox-ai__user-prompt { + display: flex; + flex-direction: column; + margin-left: auto; + gap: inherit; +} +.tox-ai .tox-ai__user-prompt__context { + margin-left: auto; +} +.tox-ai .tox-ai__user-prompt__text { + background-color: var(--tox-private-ai-user-prompt-background, #17202a); + padding: var(--tox-private-pad-sm, 8px) 12px; + border-radius: var(--tox-private-control-border-radius, 3px); + max-width: 80%; + align-self: flex-end; + color: var(--tox-private-text-color, #fff); +} +.tox-ai .tox-ai__scroll { + overflow: auto; + background-color: var(--tox-private-background-color, #222f3e); + display: flex; + padding: 12px; + flex-direction: column; + align-items: flex-start; + gap: 12px; + flex: 1 0 0; + align-self: stretch; +} +.tox-ai .tox-ai__response-content { + padding: var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #fff); + font-feature-settings: 'liga' off, 'clig' off; + font-size: var(--tox-private-font-size-sm, 14px); + font-style: normal; + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-line-height, 18px); + white-space: pre-wrap; +} +.tox-ai .tox-ai__response.tox-ai__response-streaming { + background: linear-gradient(180deg, var(--tox-private-color-black, #2A3746) 0%, transparent 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.tox-ai .tox-ai__error-message { + border-radius: var(--tox-private-panel-border-radius, 3px); + border: 1px solid var(--tox-private-color-error, #c00); + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-error, #c00); + padding: var(--tox-private-pad-sm, 8px); + width: 100%; +} +.tox-ai .tox-ai__footer { + border-top: 1px solid var(--tox-private-ai-footer-border-color, #0e141a); + padding: 12px; + gap: var(--tox-private-pad-sm, 8px); + background-color: var(--tox-private-background-color, #222f3e); + display: flex; + flex-direction: column; +} +.tox-ai .tox-ai__context { + display: flex; + gap: 8px; +} +.tox-ai .tox-ai__footer-actions { + display: flex; + gap: var(--tox-private-pad-sm, 8px); +} +.tox .tox-selector { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: inline-block; + height: 10px; + position: absolute; + width: 10px; +} +.tox.tox-platform-touch .tox-selector { + height: 12px; + width: 12px; +} +.tox .tox-skeleton .tox-skeleton__line { + height: 16px; + width: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +.tox .tox-skeleton .tox-skeleton__circle { + height: 36px; + width: 36px; + margin-right: 8px; + border-radius: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +@keyframes wave { + 0% { + background-position: -268px 0; + } + 100% { + background-position: 268px 0; + } +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #000000; + border-radius: 3px; + height: 10px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #207ab7; + border: 2px solid #185d8c; + border-radius: 3px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 14px; +} +.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) { + margin-inline-start: 8px; +} +.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider { + margin-inline-start: 32px; +} +.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group { + margin-inline-start: 32px; +} +.tox .tox-toolbar-slider { + align-items: center; + display: inline-flex; + height: 16px; +} +.tox .tox-toolbar-slider__input { + appearance: none; + background: #000000; + border-radius: 16px; + width: 130px; + height: 2px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #207ab7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-thumb { + appearance: none; + background-color: #207ab7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input:focus-visible { + outline: none; +} +.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb { + background-color: #1c6ca1; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #207ab7; +} +.tox .tox-toolbar-slider__input:focus::-moz-range-thumb { + background-color: #1c6ca1; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #207ab7; +} +.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb { + background-color: #1c6ca1; +} +.tox .tox-toolbar-slider__input:hover::-moz-range-thumb { + background-color: #1c6ca1; +} +.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb { + background-color: #185d8c; +} +.tox .tox-toolbar-slider__input:active::-moz-range-thumb { + background-color: #185d8c; +} +.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(255, 255, 255, 0.5); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-spinner > div:not(:first-child) { + margin-right: 4px; +} +.tox .tox-ai__spinner { + width: 24px; + height: 24px; +} +.tox .tox-statusbar { + align-items: center; + background-color: #222f3e; + border-top: 1px solid #000000; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 12px; + font-weight: normal; + height: 18px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: uppercase; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__right-container { + display: flex; + justify-content: flex-end; + white-space: nowrap; +} +.tox .tox-statusbar__help-text { + text-align: center; +} +.tox .tox-statusbar__text-container { + align-items: flex-start; + display: flex; + flex: 1 1 auto; + height: 16px; + justify-content: space-between; +} +@media only screen and (min-width: 768px ) { + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__help-text, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__right-container, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__path { + flex: 0 0 calc(100% / 3); + } +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end { + justify-content: flex-end; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start { + justify-content: flex-start; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around { + justify-content: space-around; +} +.tox .tox-statusbar__path > * { + display: inline; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount { + flex: 0 0 auto; + margin-left: 1ch; +} +@media only screen and (max-width: 767px ) { + .tox .tox-statusbar__text-container .tox-statusbar__help-text { + display: none; + } + .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child { + display: block; + } +} +.tox .tox-statusbar a, +.tox .tox-statusbar__path-item, +.tox .tox-statusbar__wordcount { + color: #fff; + position: relative; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #fff; + cursor: pointer; +} +.tox .tox-statusbar a:focus-visible::after, +.tox .tox-statusbar__path-item:focus-visible::after, +.tox .tox-statusbar__wordcount:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar a:focus-visible::after, + .tox .tox-statusbar__path-item:focus-visible::after, + .tox .tox-statusbar__wordcount:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__branding svg { + fill: rgba(255, 255, 255, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #fff; +} +.tox .tox-statusbar__resize-cursor-default { + cursor: ns-resize; +} +.tox .tox-statusbar__resize-cursor-both { + cursor: nwse-resize; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-bottom: 3px; + margin-left: 4px; + margin-right: calc(3px - 8px); + margin-top: 3px; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + position: relative; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-statusbar__resize-handle:hover svg, +.tox .tox-statusbar__resize-handle:focus svg { + fill: #fff; +} +.tox .tox-statusbar__resize-handle:focus-visible { + background-color: transparent; + border-radius: 1px 1px -4px 1px; + box-shadow: 0 0 0 2px transparent; +} +.tox .tox-statusbar__resize-handle:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar__resize-handle:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__resize-handle:only-child { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-statusbar__path > * { + margin-right: 4px; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 2ch; +} +.tox[dir=rtl] .tox-statusbar { + flex-direction: row-reverse; +} +.tox[dir=rtl] .tox-statusbar__path > * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-tag { + width: -moz-fit-content; + width: fit-content; + display: flex; + padding: 4px 6px; + align-items: center; + gap: 4px; + border-radius: 3px; + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-tint, #207ab7); + line-height: var(--tox-private-base-value, 16px); + font-size: var(--tox-private-font-size-xs, 12px); +} +.tox .tox-tag .tox-tag__icon { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon { + border: 0; + padding: 0; +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before { + box-shadow: none; +} +.tox .tox-throbber { + z-index: 1299; +} +.tox .tox-throbber__busy-spinner { + align-items: center; + background-color: rgba(34, 47, 62, 0.6); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-toggle { + display: flex; + align-items: center; + gap: var(--tox-private-pad-xs, 4px); + padding: var(--tox-private-pad-xs, 4px); + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-control-line-height, 24px); + white-space: nowrap; + background-color: var(--tox-private-background-color, #222f3e); + color: var(--tox-private-text-color, #fff); +} +.tox .tox-toggle input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} +.tox .tox-toggle__slider { + position: relative; + cursor: pointer; + box-sizing: border-box; + transition: 0.4s; + border-radius: 34px; + width: 28px; + height: 16px; + background-color: var(--tox-private-slider-background-color, #222f3e); + border: 1px solid var(--tox-private-slider-border-color, rgba(255, 255, 255, 0.15)); +} +.tox .tox-toggle__slider::before { + position: absolute; + content: ""; + height: 12px; + width: 12px; + left: 1px; + bottom: 1px; + transition: 0.4s; + border-radius: 50%; + background-color: var(--tox-private-slider-handle-background-color, #fff); +} +.tox input:checked + .tox-toggle__slider { + background-color: var(--tox-private-slider-checked-background-color, #207ab7); + border: 1px solid var(--tox-private-slider-checked-border-color, #207ab7); +} +.tox input:focus + .tox-toggle__slider { + box-shadow: 0 0 0 1px var(--tox-private-color-white, #fff), 0 0 0 2px var(--tox-private-color-tint, #207ab7); +} +.tox input:checked + .tox-toggle__slider::before { + transform: translateX(12px); + background-color: var(--tox-private-slider-checked-handle-background-color, #fff); +} +.tox input:disabled + .tox-toggle__slider::before { + opacity: 50%; +} +.tox .tox-tbtn { + align-items: center; + background: #222f3e; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 3px 0 2px 0; + outline: none; + padding: 0; + text-transform: none; + width: 34px; +} +.tox .tox-tbtn .tox-tbtn__icon-wrap { + pointer-events: none; +} +@media (forced-colors: active) { + .tox .tox-tbtn:hover, + .tox .tox-tbtn.tox-tbtn:hover { + outline: 1px dashed currentColor; + } + .tox .tox-tbtn.tox-tbtn--active, + .tox .tox-tbtn.tox-tbtn--enabled, + .tox .tox-tbtn.tox-tbtn--enabled:hover, + .tox .tox-tbtn.tox-tbtn--enabled:focus, + .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + outline: 1px solid currentColor; + position: relative; + } +} +.tox .tox-tbtn svg { + display: block; + fill: #fff; +} +@media (forced-colors: active) { + .tox .tox-tbtn svg { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--enabled, + .tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled) { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--disabled, + .tox .tox-tbtn svg.tox-tbtn--disabled:hover, + .tox .tox-tbtn svg .tox-tbtn:disabled, + .tox .tox-tbtn svg .tox-tbtn:disabled:hover { + filter: contrast(0%); + } +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn:focus { + background: #4a5562; + border: 0; + box-shadow: none; + position: relative; + z-index: 1; +} +.tox .tox-tbtn:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:hover { + background: #4a5562; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tbtn:hover svg { + fill: #fff; +} +.tox .tox-tbtn:active { + background: #757d87; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tbtn:active svg { + fill: #fff; +} +.tox .tox-tbtn--disabled .tox-tbtn--enabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: #222f3e; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--active, +.tox .tox-tbtn--enabled, +.tox .tox-tbtn--enabled:hover, +.tox .tox-tbtn--enabled:focus { + background: #757d87; + border: 0; + box-shadow: none; + color: #fff; + position: relative; +} +.tox .tox-tbtn--active > *, +.tox .tox-tbtn--enabled > *, +.tox .tox-tbtn--enabled:hover > *, +.tox .tox-tbtn--enabled:focus > * { + transform: none; +} +.tox .tox-tbtn--active svg, +.tox .tox-tbtn--enabled svg, +.tox .tox-tbtn--enabled:hover svg, +.tox .tox-tbtn--enabled:focus svg { + fill: #fff; +} +.tox .tox-tbtn--active.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tbtn--enabled:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn--enabled:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + color: #fff; +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { + fill: #fff; +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 51px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 68px; + width: 68px; +} +.tox .tox-tbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-label--context-toolbar { + margin: 6px 1px 5px 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-number-input { + background: transparent; + border-radius: 3px; + display: flex; + margin: 3px 0 2px 0; + position: relative; + width: auto; +} +.tox .tox-number-input:focus { + background: #4a5562; +} +.tox .tox-number-input:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper { + display: flex; + pointer-events: none; + position: relative; + text-align: center; +} +.tox .tox-number-input .tox-input-wrapper:focus { + background-color: #4a5562; + z-index: 1; +} +.tox .tox-number-input .tox-input-wrapper:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input input { + border-radius: 3px; + color: #fff; + font-size: 14px; + margin: 2px 0; + pointer-events: all; + position: relative; + width: 60px; +} +.tox .tox-number-input input:hover { + background: #4a5562; + color: #fff; +} +.tox .tox-number-input input:focus { + background-color: #4a5562; +} +.tox .tox-number-input input:disabled { + background: #222f3e; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button { + color: #fff; + height: 34px; + position: relative; + text-align: center; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-number-input button:hover, + .tox .tox-number-input button:focus, + .tox .tox-number-input button:active { + outline: 1px solid currentColor !important; + } +} +.tox .tox-number-input button svg { + display: block; + fill: #fff; + margin: 0 auto; + transform: scale(0.67); +} +@media (forced-colors: active) { + .tox .tox-number-input button svg, + .tox .tox-number-input button svg:active, + .tox .tox-number-input button svg:hover { + fill: currentColor !important; + } + .tox .tox-number-input button svg:disabled { + filter: contrast(0); + } +} +.tox .tox-number-input button:focus { + background: #4a5562; + z-index: 1; +} +.tox .tox-number-input button:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input button:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input button:hover { + background: #4a5562; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-number-input button:hover svg { + fill: #fff; +} +.tox .tox-number-input button:active { + background: #757d87; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-number-input button:active svg { + fill: #fff; +} +.tox .tox-number-input button:disabled { + background: #222f3e; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button:disabled svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-number-input button.minus { + border-radius: 3px 0 0 3px; +} +.tox .tox-number-input button.plus { + border-radius: 0 3px 3px 0; +} +.tox .tox-number-input:focus:not(:active) > button, +.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper { + background: #4a5562; +} +.tox .tox-tbtn--select { + margin: 3px 0 2px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #000000; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + height: initial; + margin: 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(255, 255, 255, 0.5); +} +@media (forced-colors: active) { + .tox .tox-tbtn__select-chevron svg { + fill: currentColor; + } +} +.tox .tox-tbtn--bespoke { + background: transparent; +} +.tox .tox-tbtn--bespoke:focus { + background: #4a5562; +} +.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke { + margin-inline-start: 0; +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-tbtn--disabled .tox-tbtn__select-label, +.tox .tox-tbtn--select:disabled .tox-tbtn__select-label { + cursor: not-allowed; +} +.tox .tox-split-button__main { + border-radius: 3px 0 0 3px; + margin-right: 0; +} +.tox .tox-split-button__main:focus { + border: 0; + box-shadow: none; + background: #4a5562; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-split-button__main:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px 0 0 3px; +} +@media (forced-colors: active) { + .tox .tox-split-button__main:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron { + width: 16px; + border-radius: 0 3px 3px 0; + margin-left: 0; +} +.tox .tox-split-button__chevron:focus { + border: 0; + box-shadow: none; + background: #4a5562; + color: #fff; + position: relative; + z-index: 1; +} +.tox .tox-split-button__chevron:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 0 3px 3px 0; +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron svg { + fill: rgba(255, 255, 255, 0.5); +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron svg { + fill: currentColor; + } +} +.tox.tox-platform-touch .tox-split-button__main { + width: 30px; +} +.tox.tox-platform-touch .tox-split-button__chevron { + width: 20px; +} +.tox .tox-split-button__main.tox-tbtn--disabled, +.tox .tox-split-button__chevron.tox-tbtn--disabled { + background: #222f3e; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:hover, +.tox .tox-split-button__chevron.tox-tbtn--disabled:hover { + background: #222f3e; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:focus, +.tox .tox-split-button__chevron.tox-tbtn--disabled:focus { + background: #222f3e; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color, +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color { + opacity: 0.3; +} +.tox .tox-toolbar-overlord { + background-color: #222f3e; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background-attachment: local; + background-color: #222f3e; + background-image: repeating-linear-gradient(#000000 0 1px, transparent 1px 39px); + background-position: center top 39px; + background-repeat: no-repeat; + background-size: calc(100% - 4px * 2) calc(100% - 39px); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + padding: 0 0px; + transform: perspective(1px); +} +.tox .tox-toolbar-overlord > .tox-toolbar, +.tox .tox-toolbar-overlord > .tox-toolbar__primary, +.tox .tox-toolbar-overlord > .tox-toolbar__overflow { + background-position: center top 0px; + background-size: calc(100% - 4px * 2) calc(100% - 0px); +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + height: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; + visibility: hidden; +} +.tox .tox-toolbar__overflow--growing { + transition: height 0.3s ease, opacity 0.2s linear 0.1s; +} +.tox .tox-toolbar__overflow--shrinking { + transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s; +} +.tox .tox-toolbar-overlord, +.tox .tox-anchorbar { + grid-column: 1 / -1; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: 1px solid #000000; + margin-top: -1px; + padding-bottom: 0; + padding-top: 0; +} +@media (forced-colors: active) { + .tox .tox-menubar + .tox-toolbar, + .tox .tox-menubar + .tox-toolbar-overlord { + outline: 1px solid currentColor; + } +} +.tox .tox-toolbar--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, +.tox .tox-toolbar-overlord .tox-toolbar__primary { + background-position: center top 39px; +} +.tox .tox-editor-header > .tox-toolbar--scrolling, +.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { + background-image: none; +} +.tox .tox-focusable-wrapper { + border: 1px solid transparent; + margin-right: 2px; + pointer-events: none; +} +.tox .tox-focusable-wrapper .tox-textfield-size { + pointer-events: all; +} +.tox .tox-focusable-wrapper:focus { + background-color: #4a5562; + border-radius: 3px; + border-style: solid; + border-width: 1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + background-color: #222f3e; + background-position: center top 43px; + background-size: calc(100% - 8px * 2) calc(100% - 51px); + border: none; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(42, 55, 70, 0.2), 0 4px 8px 0 rgba(42, 55, 70, 0.15); + overscroll-behavior: none; + padding: 4px 0; +} +@media (forced-colors: active) { + .tox.tox-tinymce-aux .tox-toolbar__overflow { + border: solid; + } +} +.tox-pop .tox-pop__dialog .tox-toolbar { + background-position: center top 43px; + background-size: calc(100% - 4px * 2) calc(100% - 51px); + padding: 4px 0; +} +.tox-context-form__group { + display: flex; + align-items: center; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 4px 0 4px; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-toolbar--scrolling .tox-toolbar__group { + flex-shrink: 0; + flex-wrap: nowrap; +} +.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid #000000; +} +.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { + border-left: 1px solid #000000; +} +.tox .tox-tooltip { + display: inline-block; + max-width: min(80%, 15em); + padding: 8px 0 0 0; + position: relative; + width: max-content; + z-index: 1150; +} +.tox .tox-tooltip__body { + background-color: #2A3746; + border-radius: 3px; + box-shadow: none; + color: #fff; + font-size: 12px; + font-style: normal; + font-weight: 600; + overflow-wrap: break-word; + padding: 4px 6px; + text-transform: none; +} +@media (forced-colors: active) { + .tox .tox-tooltip__body { + outline: outset 1px; + } +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #2A3746; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #2A3746; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #2A3746; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #2A3746; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tree { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-trbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + box-shadow: none; + color: #fff; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + margin-bottom: 4px; + margin-top: 4px; + outline: none; + overflow: hidden; + padding: 0; + padding-left: 8px; + text-transform: none; +} +.tox .tox-tree .tox-trbtn .tox-tree__label { + cursor: default; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tree .tox-trbtn svg { + display: block; + fill: #fff; +} +.tox .tox-tree .tox-trbtn:focus { + background: #4a5562; + border: 0; + box-shadow: none; +} +.tox .tox-tree .tox-trbtn:hover { + background: #4a5562; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn:hover svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:active { + background: #6ea9d0; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn:active svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn--disabled, +.tox .tox-tree .tox-trbtn--disabled:hover, +.tox .tox-tree .tox-trbtn:disabled, +.tox .tox-tree .tox-trbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-tree .tox-trbtn--disabled svg, +.tox .tox-tree .tox-trbtn--disabled:hover svg, +.tox .tox-tree .tox-trbtn:disabled svg, +.tox .tox-tree .tox-trbtn:disabled:hover svg { + fill: rgba(255, 255, 255, 0.5); +} +.tox .tox-tree .tox-trbtn--enabled, +.tox .tox-tree .tox-trbtn--enabled:hover { + background: #6ea9d0; + border: 0; + box-shadow: none; + color: #fff; +} +.tox .tox-tree .tox-trbtn--enabled > *, +.tox .tox-tree .tox-trbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--enabled svg, +.tox .tox-tree .tox-trbtn--enabled:hover svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { + color: #fff; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { + fill: #fff; +} +.tox .tox-tree .tox-trbtn:active > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tree .tox-trbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tree .tox-trbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tree .tox-tree--directory { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label { + font-weight: bold; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { + margin-right: 6px; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { + transition: transform 0.5s ease-in-out; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { + transform: rotate(90deg); +} +.tox .tox-tree .tox-tree--leaf__label { + font-weight: normal; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { + fill: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #fff; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #fff; +} +.tox .tox-tree .tox-icon-custom-state { + flex-grow: 1; + display: flex; + justify-content: flex-end; +} +.tox .tox-tree .tox-tree--directory__children { + overflow: hidden; + padding-left: 16px; +} +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { + transition: height 0.5s ease-in-out; +} +.tox .tox-tree .tox-trbtn.tox-tree--leaf__label { + display: flex; + justify-content: space-between; +} +[data-mce-name="uploadcare-enhance-filter"] .color-swatch-remove-color path { + fill: #c00; + stroke: #c00; +} +.tox .tox-view-wrap, +.tox .tox-view-wrap__slot-container { + background-color: #222f3e; + display: flex; + flex: 1; + flex-direction: column; + height: 100%; +} +.tox .tox-view { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; + background-color: #222f3e; +} +.tox .tox-view__header { + align-items: center; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px; + position: relative; +} +.tox .tox-view__label { + color: #fff; + font-weight: bold; + line-height: 24px; + padding: 4px 16px; + text-align: center; + white-space: nowrap; +} +.tox .tox-view__label--normal { + font-size: 16px; +} +.tox .tox-view__label--large { + font-size: 20px; +} +.tox .tox-view--mobile.tox-view__header, +.tox .tox-view--mobile.tox-view__toolbar { + padding: 8px; +} +.tox .tox-view--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-view__align-right { + margin-left: auto; +} +.tox .tox-view__toolbar { + display: flex; + flex-direction: row; + gap: 8px; + justify-content: space-between; + overflow-x: auto; + padding: 8px; +} +.tox .tox-view__toolbar__group { + display: flex; + flex-direction: row; + gap: 12px; +} +.tox .tox-view__header-start, +.tox .tox-view__header-end { + display: flex; +} +.tox .tox-view__pane { + height: 100%; + padding: 8px; + position: relative; + width: 100%; +} +.tox .tox-view__pane_panel { + border: 1px solid #000000; + border-radius: 3px; +} +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *, +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-view__header .tox-view__header-start > *, +.tox[dir=rtl] .tox-view__header .tox-view__header-end > * { + margin-right: 8px; +} +.tox .tox-well { + border: 1px solid #000000; + border-radius: 3px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #000000; + border-radius: 3px; + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-view .tox-revisionhistory__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-revisionhistory__container { + display: flex; + flex-direction: column; + height: 100%; +} +.tox .tox-revisionhistory { + background-color: #222f3e; + border-top: 1px solid rgba(255, 255, 255, 0.15); + display: flex; + flex: 1; + height: 100%; + overflow-x: auto; + overflow-y: hidden; + position: relative; + width: 100%; +} +.tox .tox-revisionhistory__iframe { + flex: 1; +} +.tox .tox-revisionhistory__sidebar { + display: flex; + flex-direction: column; + height: 100%; + min-width: 248px; + width: 316px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title { + background-color: #222f3e; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + color: #fff; + font-size: 20px; + font-weight: 400; + line-height: 28px; + padding: 12px; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions { + background-color: #2b3b4e; + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow-y: auto; + padding: 10px 12px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus { + height: 100%; + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px; + bottom: 1px; + left: 1px; + right: 1px; + top: 1px; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card { + background-color: #222f3e; + border: 1px solid rgba(255, 255, 255, 0.15); + border-radius: 6px; + color: #fff; + cursor: pointer; + display: flex; + flex-direction: column; + font-size: 14px; + padding: 12px; + width: 100%; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus { + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent #285ec7; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #285ec7; + box-shadow: 0 0 0 2px #285ec7 !important; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected { + background-color: #1b3b60; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + position: relative; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent #cea215; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #cea215; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label { + display: block; + width: min-content; + padding: 4px 8px; + margin-bottom: 8px; + font-size: 12px; + font-weight: bold; + border-radius: 4px; + background: #555f6b; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content { + display: flex; + flex-direction: row; + gap: 8px; + align-items: center; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info { + display: flex; + flex-direction: column; + flex: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label { + font-size: 14px; + font-weight: bold; + line-height: 18px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 12px; + font-weight: normal; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision { + color: rgba(255, 255, 255, 0.5); + font-size: 16px; + line-height: 24px; + padding: 5px 5.5px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon { + color: #fff; + height: 24px; +} +.tox [data-mce-name="suggestededits"] .tox-icon .tox-icon--badge { + fill: #207ab7; +} +.tox .tox-view .tox-suggestededits__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-suggestededits__sink { + position: relative; + z-index: 1000; +} +.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list { + position: absolute; +} +.tox .tox-suggestededits__container { + height: 100%; + /* TINY-12393: Improve height calculation */ + display: flex; + flex-direction: column; +} +.tox .tox-suggestededits__container .tox-suggestededits { + background-color: #222f3e; + border-top: 1px solid #000000; + display: flex; + flex: 1; + height: inherit; + overflow-x: auto; + overflow-y: hidden; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content { + flex: 1; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model { + height: 100%; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe { + height: 100%; + width: 100%; + overflow: scroll; + background-color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar { + background-color: #34485f; + display: flex; + flex-direction: column; + flex: 0 1 auto; + min-width: 248px; + width: 316px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header { + padding: 4px 12px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content { + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow: auto; + padding: 6px 12px 12px 12px; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card { + background-color: #222f3e; + border-radius: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider { + background-color: #34485f; + height: 1px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor { + align-items: flex-start; + align-self: stretch; + display: flex; + flex-direction: column; + gap: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header { + display: flex; + flex: auto; + justify-content: space-between; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar { + height: 36px; + width: 36px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #fff; + font-size: 14px; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution { + align-items: center; + border: 0; + border-radius: 20px; + height: 20px; + width: 20px; + display: flex; + flex: 0 0 auto; + justify-content: center; + text-align: center; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg { + fill: #78AB46; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg { + fill: #c00; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content { + display: flex; + flex-direction: column; + align-self: stretch; + flex: auto; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations { + display: flex; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar { + align-items: center; + border-radius: 6px; + display: flex; + flex-direction: column; + font-size: 12px; + justify-content: space-between; + width: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert { + background-color: #78AB46; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify { + background-color: #207ab7; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove { + background-color: #c00; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text { + color: #fff; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback { + color: #fff; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea { + border: 2px solid #000000; + border-radius: 6px; + color: #fff; + gap: 8px; + padding: 5px 6px; + resize: none; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus { + border: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer { + display: flex; + flex-direction: column; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp { + color: #fff; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg { + fill: #FFFFFF80; + transform: translate(0px, 8px); + margin-top: -10px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons { + display: flex; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons { + justify-content: space-between; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons { + justify-content: flex-end; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden { + opacity: 0.5; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved { + background-color: #243140; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible { + outline: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single { + border-radius: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible { + outline: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover { + box-shadow: 0 4px 8px 0 #243140; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: none; + padding: 0; +} +.tox.tox-tinymce--toolbar-bottom .tox-editor-header, +.tox.tox-tinymce-inline .tox-editor-header { + margin-bottom: -1px; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: hidden; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: none; + box-shadow: none; +} +.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: transparent; + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); + padding: 0; +} +.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px 0; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0; +} +.tox .tox-pop { + box-shadow: none; +} +.tox .tox-tbtn, +.tox .tox-label, +.tox .tox-number-input, +.tox .tox-tbtn--select, +.tox .tox-split-button, +.tox .tox-toolbar-label { + margin: 2px 0 3px 0; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #000000; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e !important; +} +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: none; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary { + border-top: 1px solid #000000; + margin-top: -1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + border: 1px solid #000000; + padding: 0; +} +.tox .tox-pop .tox-pop__dialog .tox-toolbar { + padding: 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar { + border-top: 1px solid #000000; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary, +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child { + border-top: 1px solid #000000; +} +.tox .tox-toolbar__group { + padding: 0 4px 0 4px; +} +.tox .tox-collection__item { + border-radius: 0; + cursor: pointer; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #fff; +} +.tox .tox-statusbar__branding svg { + fill: rgba(255, 255, 255, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #fff; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 1ch; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-statusbar__resize-handle { + padding-bottom: 0; + padding-right: 0; +} +.tox .tox-button::before { + display: none; +} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.js b/public/tinymce/skins/ui/tinymce-5-dark/skin.js new file mode 100644 index 0000000..2ebbead --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/tinymce-5-dark/skin.css', `.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#2a3746);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:1px solid #000;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #000;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#fff}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#22374a;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#a6cae2}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#a6cae2}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#383f38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#332a38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#000;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,3px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,3px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #207ab7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#1c6ca1);background-image:none;border-color:var(--tox-private-button-focus-border-color,#1c6ca1);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:3px 0 2px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#207ab7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#207ab7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#207ab7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#207ab7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-focus-border-color,#1c6ca1);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-hover-border-color,#1c6ca1);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#185d8c);border-color:var(--tox-private-button-primary-active-border-color,#185d8c);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#185d8c);border-color:var(--tox-private-button-primary-enabled-border-color,#185d8c);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#154f76);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#154f76);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#114060);border-color:var(--tox-private-button-primary-enabled-active-border-color,#114060);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#3d546f);border-color:var(--tox-private-button-secondary-border-color,#3d546f);color:var(--tox-private-button-secondary-text-color,#fff);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:3px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#3d546f);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-focus-border-color,#34485f);color:var(--tox-private-button-secondary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#34485f);border-color:var(--tox-private-button-secondary-hover-border-color,#34485f);color:var(--tox-private-button-secondary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#2b3b4e);border-color:var(--tox-private-button-secondary-active-border-color,#2b3b4e);color:var(--tox-private-button-secondary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#346085);border-color:var(--tox-private-button-secondary-enabled-border-color,#346085);color:var(--tox-private-button-secondary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#2d5373);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#2d5373);color:var(--tox-private-button-secondary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#2d5373);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#2d5373);color:var(--tox-private-button-secondary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#264560);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#264560);color:var(--tox-private-button-secondary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#fff)}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;color:var(--tox-private-button-naked-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,#34485f);border-color:var(--tox-private-button-naked-focus-border-color,#34485f);color:var(--tox-private-button-naked-focus-text-color,#fff);box-shadow:none}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,#34485f);border-color:var(--tox-private-button-naked-hover-background-color,#34485f);color:var(--tox-private-button-naked-hover-text-color,#fff);box-shadow:none}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,#2b3b4e);border-color:var(--tox-private-button-naked-active-border-color,#2b3b4e);color:var(--tox-private-button-naked-active-text-color,#fff);box-shadow:none}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-text-color,#fff)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#34485f);color:var(--tox-private-button-secondary-outline-focus-text-color,#fff)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#3d546f);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#34485f);color:var(--tox-private-button-secondary-outline-hover-text-color,#fff)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-active-border-color,#34485f);color:var(--tox-private-button-secondary-outline-active-text-color,#fff)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(255,255,255,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,3px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,3px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(255,255,255,0.2))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#207ab7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#207ab7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #207ab7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#fff;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#207ab7;stroke:#207ab7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#222f3e}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#222f3e;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#757d87;color:#fff}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff;background-color:#2b3b4e;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#4a5562;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#4a5562;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #000;border-radius:3px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#442632;border:1px solid #55212b;border-radius:3px;color:#e68080;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#222f3e;border:1px solid #222f3e;border-radius:3px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(42,55,70,.1)}.tox .tox-comment.tox-comment--selected{background-color:#555542;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(42,55,70,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid transparent;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:3px;border:2px solid transparent}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#222f3e;box-shadow:0 0 8px 8px #222f3e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#222f3e;position:relative;border-radius:3px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#222f3e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(34,47,62,0),#222f3e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#222f3e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#222f3e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,0.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #90bddb;color:#90bddb}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#90bddb;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#428fc2;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #90bddb;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#33739e;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #000;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:3px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:0 solid transparent;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:0 solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#000;border-radius:3px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(42 55 3.5%);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:34px;margin:2px 0 3px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#000;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #207ab7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:2px 0 3px 4px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px 0;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px 0}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #000;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#4a5562}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#222f3e;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#222f3e;border:1px solid #000;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#fff}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(255,255,255,.5)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#207ab7;box-shadow:none}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#82b153;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #b5d199;outline-offset:2px}.tox .tox-notification--success a:active{color:#689041;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#d42b2b;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #e68080;outline-offset:2px}.tox .tox-notification--error a:active{color:#a22;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:#000;color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#997a00;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #ffcc00;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#665200;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#2681ea;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #83b7f3;outline-offset:2px}.tox .tox-notification--info a:active{color:#1368c9;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#17202a;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#222f3e;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#fff;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #000}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#2b3b4e;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(255,255,255,.5)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(255,255,255,0.5)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #000;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#2b3b4e 24%,#202d3b 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#207ab7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#207ab7}.tox .tox-promotion-dialog--footer{background-color:#17202a;color:rgba(255,255,255,.5);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#55367a;color:#c290fb;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #C290FB}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(255,255,255,.5);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#428fc2;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #90bddb;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#33739e;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#34485f);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#0e141a)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(42,55,70,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#222f3e);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(42,55,70,.15),0 16px 16px -10px rgba(42,55,70,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#222f3e);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#17202a);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,3px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#fff)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#222f3e);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#2a3746) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,3px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#0e141a);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#222f3e);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#000;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#fff}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#207ab7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#222f3e);color:var(--tox-private-text-color,#fff)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#222f3e);border:1px solid var(--tox-private-slider-border-color,rgba(255,255,255,.15))}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#fff)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#207ab7);border:1px solid var(--tox-private-slider-checked-border-color,#207ab7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#207ab7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#fff}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:0 0;border-radius:3px;display:flex;margin:3px 0 2px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#4a5562}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#4a5562;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#4a5562;color:#fff}.tox .tox-number-input input:focus{background-color:#4a5562}.tox .tox-number-input input:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{color:#fff;height:34px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#4a5562;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#4a5562}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #000}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke:focus{background:#4a5562}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(#000 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #000;margin-top:-1px;padding-bottom:0;padding-top:0}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#4a5562;border-radius:3px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#2a3746;border-radius:3px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #2a3746;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #2a3746;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #2a3746;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #2a3746;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#222f3e}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px;position:relative}.tox .tox-view__label{color:#fff;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #000;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#222f3e;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#fff;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#2b3b4e;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#222f3e;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #285ec7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #285ec7;box-shadow:0 0 0 2px #285ec7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#1b3b60;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #cea215;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #cea215}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#555f6b}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(255,255,255,.5);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#fff;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#207ab7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#222f3e;border-top:1px solid #000;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#34485f;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#222f3e;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#34485f;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#207ab7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#fff;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#fff;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #000;border-radius:6px;color:#fff;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#FFFFFF80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#243140}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #243140}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-label,.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select,.tox .tox-toolbar-label{margin:2px 0 3px 0}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #000}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #000;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #000;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #000}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #000}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css b/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css new file mode 100644 index 0000000..14f31d5 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.min.css @@ -0,0 +1 @@ +.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#2a3746);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:1px solid #000;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#222f3e;border:1px solid #000;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#222f3e;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #000;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#222f3e;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#fff}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#22374a;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#a6cae2}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#a6cae2}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#383f38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#ffeb99}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#332a38;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#eb9999}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#2a3746}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.5);color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#fff}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#fff}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#000;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,3px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,3px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #207ab7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#1c6ca1);background-image:none;border-color:var(--tox-private-button-focus-border-color,#1c6ca1);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:3px 0 2px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#207ab7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#207ab7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#207ab7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#207ab7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-focus-border-color,#1c6ca1);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-hover-border-color,#1c6ca1);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#185d8c);border-color:var(--tox-private-button-primary-active-border-color,#185d8c);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#185d8c);border-color:var(--tox-private-button-primary-enabled-border-color,#185d8c);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#154f76);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#154f76);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#114060);border-color:var(--tox-private-button-primary-enabled-active-border-color,#114060);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#3d546f);border-color:var(--tox-private-button-secondary-border-color,#3d546f);color:var(--tox-private-button-secondary-text-color,#fff);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:3px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#3d546f);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-focus-border-color,#34485f);color:var(--tox-private-button-secondary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#34485f);border-color:var(--tox-private-button-secondary-hover-border-color,#34485f);color:var(--tox-private-button-secondary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#2b3b4e);border-color:var(--tox-private-button-secondary-active-border-color,#2b3b4e);color:var(--tox-private-button-secondary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#346085);border-color:var(--tox-private-button-secondary-enabled-border-color,#346085);color:var(--tox-private-button-secondary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#2d5373);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#2d5373);color:var(--tox-private-button-secondary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#2d5373);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#2d5373);color:var(--tox-private-button-secondary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#264560);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#264560);color:var(--tox-private-button-secondary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#fff)}.tox .tox-button--naked[disabled]{background-color:#3d546f;border-color:#3d546f;color:var(--tox-private-button-naked-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,#34485f);border-color:var(--tox-private-button-naked-focus-border-color,#34485f);color:var(--tox-private-button-naked-focus-text-color,#fff);box-shadow:none}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,#34485f);border-color:var(--tox-private-button-naked-hover-background-color,#34485f);color:var(--tox-private-button-naked-hover-text-color,#fff);box-shadow:none}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,#2b3b4e);border-color:var(--tox-private-button-naked-active-border-color,#2b3b4e);color:var(--tox-private-button-naked-active-text-color,#fff);box-shadow:none}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-text-color,#fff)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#34485f);color:var(--tox-private-button-secondary-outline-focus-text-color,#fff)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#3d546f);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#34485f);color:var(--tox-private-button-secondary-outline-hover-text-color,#fff)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#34485f);border-color:var(--tox-private-button-secondary-outline-active-border-color,#34485f);color:var(--tox-private-button-secondary-outline-active-text-color,#fff)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#3d546f);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(255,255,255,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,3px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,3px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(255,255,255,0.2))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#207ab7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#207ab7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(255,255,255,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #207ab7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#1a1a1a;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#333;color:#fff;cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#fff;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#fff;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#207ab7;stroke:#207ab7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#222f3e}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#222f3e;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#2b3b4e;color:#fff}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#757d87;color:#fff}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#757d87;color:#fff}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#fff;background-color:#2b3b4e;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#4a5562;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#4a5562;color:#fff}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #000;border-radius:3px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(255,255,255,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#2b3b4e;border:1px solid #1a1a1a;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #000}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #000}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#442632;border:1px solid #55212b;border-radius:3px;color:#e68080;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#4a5562}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#fff;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#222f3e;border:1px solid #222f3e;border-radius:3px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(42,55,70,.1)}.tox .tox-comment.tox-comment--selected{background-color:#555542;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(42,55,70,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid transparent;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:3px;border:2px solid transparent}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#fff;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#fff;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#fff;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#fff;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#222f3e;box-shadow:0 0 8px 8px #222f3e;color:#fff;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(255,255,255,.5);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#222f3e;position:relative;border-radius:3px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#222f3e;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(34,47,62,0),#222f3e);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#222f3e;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#222f3e;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(255,255,255,0.5)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#fff;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(34,47,62,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#222f3e}.tox .tox-dialog{background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#2b3b4e;border-bottom:none;color:#fff;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#fff;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(255,255,255,.5);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #90bddb;color:#90bddb}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#90bddb;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#428fc2;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #90bddb;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#33739e;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#fff}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#fff;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#fff;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#2b3b4e;border-top:1px solid #000;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(34,47,62,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #000}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #000;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:3px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #000;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(255,255,255,.5);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:0 solid transparent;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:0 solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #000}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#000;border-radius:3px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(42 55 3.5%);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(255,255,255,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(255,255,255,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(255,255,255,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #2b3b4e;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(255,255,255,.5);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#222f3e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:34px;margin:2px 0 3px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#fff}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#fff}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#2b3b4e;border-color:#000;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#19232e;color:rgba(255,255,255,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#2b3b4e;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#000;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #207ab7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:2px 0 3px 4px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px 0;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px 0}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #000;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#fff;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#4a5562}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#222f3e;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#000;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:#fff;display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#222f3e;border:1px solid #000;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#fff}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(255,255,255,.5)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#2b3b4e;border:1px solid #000;border-radius:3px;box-shadow:0 4px 8px 0 rgba(42,55,70,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e;background-color:#222f3e;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#4a5562;border:0;box-shadow:none;color:#fff;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#207ab7;box-shadow:none}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#334840;border-color:#3c5440;color:#fff}.tox .tox-notification--success p{color:#fff}.tox .tox-notification--success a{color:#b5d199}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#82b153;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #b5d199;outline-offset:2px}.tox .tox-notification--success a:active{color:#689041;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#fff}.tox .tox-notification--error{background-color:#442632;border-color:#55212b;color:#fff}.tox .tox-notification--error p{color:#fff}.tox .tox-notification--error a{color:#e68080}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#d42b2b;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #e68080;outline-offset:2px}.tox .tox-notification--error a:active{color:#a22;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#fff}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#222f3e;border-color:#000;color:#fff0b3}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#fff0b3}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#fc0}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#997a00;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #ffcc00;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#665200;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#fff0b3}.tox .tox-notification--info{background-color:#254161;border-color:#264972;color:#fff}.tox .tox-notification--info p{color:#fff}.tox .tox-notification--info a{color:#83b7f3}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#2681ea;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #83b7f3;outline-offset:2px}.tox .tox-notification--info a:active{color:#1368c9;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#fff}.tox .tox-notification__body{align-self:center;color:#fff;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#17202a;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#222f3e;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(42,55,70,.15),0 0 40px 1px rgba(42,55,70,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#fff;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #000}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#2b3b4e;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(255,255,255,.5)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(255,255,255,0.5)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #000;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#fff;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#2b3b4e 24%,#202d3b 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#207ab7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(255,255,255,.5);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#207ab7}.tox .tox-promotion-dialog--footer{background-color:#17202a;color:rgba(255,255,255,.5);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#55367a;color:#c290fb;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #C290FB}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(255,255,255,.5);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#428fc2;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #90bddb;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#33739e;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#222f3e;border:1px solid #000;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#222f3e transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#000 transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #222f3e transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #000 transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #222f3e transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #000 transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #222f3e;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #000;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#34485f);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#0e141a)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(42,55,70,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#222f3e);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(42,55,70,.15),0 16px 16px -10px rgba(42,55,70,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#222f3e);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#17202a);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,3px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#fff)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#222f3e);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#fff);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#2a3746) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,3px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#0e141a);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#222f3e);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #000;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#000;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(255,255,255,.5);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#222f3e;border-top:1px solid #000;color:#fff;display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:#fff;position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(255,255,255,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#fff}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#207ab7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(34,47,62,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#222f3e);color:var(--tox-private-text-color,#fff)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#222f3e);border:1px solid var(--tox-private-slider-border-color,rgba(255,255,255,.15))}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#fff)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#207ab7);border:1px solid var(--tox-private-slider-checked-border-color,#207ab7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#207ab7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#222f3e;border:0;border-radius:3px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#fff}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#4a5562;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:hover svg{fill:#fff}.tox .tox-tbtn:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-tbtn:active svg{fill:#fff}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#757d87;border:0;box-shadow:none;color:#fff;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#fff}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#fff}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#fff}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:0 0;border-radius:3px;display:flex;margin:3px 0 2px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#4a5562}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#4a5562;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#fff;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#4a5562;color:#fff}.tox .tox-number-input input:focus{background-color:#4a5562}.tox .tox-number-input input:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button{color:#fff;height:34px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#fff;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#4a5562;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:hover svg{fill:#fff}.tox .tox-number-input button:active{background:#757d87;border:0;box-shadow:none;color:#fff}.tox .tox-number-input button:active svg{fill:#fff}.tox .tox-number-input button:disabled{background:#222f3e;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(255,255,255,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#4a5562}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #000}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke:focus{background:#4a5562}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#4a5562;color:#fff;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(255,255,255,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#222f3e;box-shadow:none;color:rgba(255,255,255,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#222f3e}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#222f3e;background-image:repeating-linear-gradient(#000 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #000;margin-top:-1px;padding-bottom:0;padding-top:0}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#4a5562;border-radius:3px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#222f3e;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(42,55,70,.2),0 4px 8px 0 rgba(42,55,70,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #000}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #000}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#2a3746;border-radius:3px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #2a3746;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #2a3746;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #2a3746;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #2a3746;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#fff;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#fff}.tox .tox-tree .tox-trbtn:focus{background:#4a5562;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#4a5562;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:active{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn:active svg{fill:#fff}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(255,255,255,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#6ea9d0;border:0;box-shadow:none;color:#fff}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#fff}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#fff}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#fff}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#fff}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#222f3e;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#222f3e}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px;position:relative}.tox .tox-view__label{color:#fff;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #000;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #000;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #000;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#222f3e;border-top:1px solid rgba(255,255,255,.15);display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#222f3e;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#fff;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#2b3b4e;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#222f3e;border:1px solid rgba(255,255,255,.15);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #285ec7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #285ec7;box-shadow:0 0 0 2px #285ec7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#1b3b60;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #cea215;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #cea215}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#555f6b}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(255,255,255,.5);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#fff;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#207ab7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#222f3e;border-top:1px solid #000;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#34485f;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#222f3e;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#34485f;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#fff;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#207ab7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#fff;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#fff;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #000;border-radius:6px;color:#fff;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#fff;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#FFFFFF80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#243140}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #243140}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-label,.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select,.tox .tox-toolbar-label{margin:2px 0 3px 0}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #000}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23000000'/%3E%3C/svg%3E") left 0 top 0 #222f3e!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #000;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #000;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #000}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #000}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#fff}.tox .tox-statusbar__branding svg{fill:rgba(255,255,255,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#fff}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.min.ts b/public/tinymce/skins/ui/tinymce-5-dark/skin.min.ts new file mode 100644 index 0000000..e05f7d2 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.min.ts @@ -0,0 +1,508 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-checkmark": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__overflow": string; + "tox-toolbar__primary": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-end": string; + "tox-dialog__footer-start": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-toolbar-textfield": string; + "tox-custom-editor": string; + "tox-focusable-wrapper": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-highlight-bg-color__color": string; + "tox-icon-text-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-end": string; + "tox-view__header-start": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; + "tox-split-button": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css new file mode 100644 index 0000000..25b0a37 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.css @@ -0,0 +1,30 @@ +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js new file mode 100644 index 0000000..125f5ad --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/tinymce-5-dark/skin.shadowdom.css', `body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css new file mode 100644 index 0000000..8745951 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css @@ -0,0 +1 @@ +body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5-dark/skin.ts b/public/tinymce/skins/ui/tinymce-5-dark/skin.ts new file mode 100644 index 0000000..516a434 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5-dark/skin.ts @@ -0,0 +1,508 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-collection__item-checkmark": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__primary": string; + "tox-toolbar__overflow": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-start": string; + "tox-dialog__footer-end": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-toolbar-textfield": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-focusable-wrapper": string; + "tox-custom-editor": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-text-color__color": string; + "tox-icon-highlight-bg-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-start": string; + "tox-view__header-end": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; + "tox-split-button": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/content.css b/public/tinymce/skins/ui/tinymce-5/content.css new file mode 100644 index 0000000..49b803c --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.css @@ -0,0 +1,1037 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/public/tinymce/skins/ui/tinymce-5/content.inline.css b/public/tinymce/skins/ui/tinymce-5/content.inline.css new file mode 100644 index 0000000..9037e9e --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.inline.css @@ -0,0 +1,1031 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe796; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe796; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #ffcf30; +} +.tox-comments-visible span.tox-comment[data-mce-selected] { + background-color: #ffcf30; + border-radius: 3px; + box-shadow: 0 0 0 2px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected], + > audio[data-mce-selected], + > video[data-mce-selected], + span.mce-preview-object[data-mce-selected]) { + box-shadow: none; +} +.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]) { + box-shadow: 0 0 0 5px #006ce7; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffcf30; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline: 0 auto; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + -webkit-text-decoration: none; + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + -webkit-text-decoration: none; + text-decoration: none; + } + div.mce-footnotes { + page-break-inside: avoid; + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +/* stylelint-disable selector-type-no-unknown */ +tiny-math-block { + display: flex; + justify-content: center; + margin: 16px 0 16px 0; +} +tiny-math-inline { + display: inline-block; +} +/* stylelint-enable selector-type-no-unknown */ +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +@media (forced-colors: active) { + .mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: highlight; + filter: brightness(30%); + z-index: -1; + } +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +@media print { + .mce-content-body .mce-placeholder, + .mce-content-body [data-mce-bogus=all], + .mce-content-body [data-mce-bogus] { + display: none !important; + } + .mce-content-body .mce-visual-caret { + display: none !important; + } + .mce-content-body [data-mce-selected], + .mce-content-body *:focus, + .mce-content-body .mce-edit-focus { + outline: none !important; + } +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0 0 0%); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.tox-suggestededits__annotation--added, +.tox-suggestededits__annotation--modified, +.tox-suggestededits__annotation--removed { + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--added__highlight { + background-color: rgba(120, 171, 70, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--added__selected { + background-color: rgba(120, 171, 70, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--modified__highlight { + background-color: rgba(0, 108, 231, 0.2); + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox-suggestededits__annotation--modified__selected { + background-color: rgba(0, 108, 231, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox-suggestededits__annotation--removed__highlight { + background-color: rgba(204, 0, 0, 0.2); + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--removed__selected { + background-color: rgba(204, 0, 0, 0.2); + box-shadow: 0 -2px 0 0 #006ce7 inset, 0 -2px 0 0 #006ce7; + -webkit-text-decoration: line-through; + text-decoration: line-through; +} +.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden, +.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden, +.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden { + display: none; + -webkit-text-decoration: none; + text-decoration: none; +} +*:has(> div > iframe).tox-suggestededits__annotation--added, +*:has(> div > iframe).tox-suggestededits__annotation--modified, +*:has(> div > iframe).tox-suggestededits__annotation--removed { + padding: 7px; + margin: 5px; +} +img.tox-suggestededits__annotation--added__highlight, +video.tox-suggestededits__annotation--added__highlight, +iframe.tox-suggestededits__annotation--added__highlight { + outline: 0.25em solid rgba(120, 171, 70, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--added__selected, +video.tox-suggestededits__annotation--added__selected, +iframe.tox-suggestededits__annotation--added__selected { + border: 0.25em solid rgba(120, 171, 70, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--modified__highlight, +video.tox-suggestededits__annotation--modified__highlight, +iframe.tox-suggestededits__annotation--modified__highlight { + outline: 0.25em solid rgba(0, 108, 231, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--modified__selected, +video.tox-suggestededits__annotation--modified__selected, +iframe.tox-suggestededits__annotation--modified__selected { + border: 0.25em solid rgba(0, 108, 231, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +img.tox-suggestededits__annotation--removed__highlight, +video.tox-suggestededits__annotation--removed__highlight, +iframe.tox-suggestededits__annotation--removed__highlight { + outline: 0.25em solid rgba(204, 0, 0, 0.2); + padding: 0.25em; +} +img.tox-suggestededits__annotation--removed__selected, +video.tox-suggestededits__annotation--removed__selected, +iframe.tox-suggestededits__annotation--removed__selected { + border: 0.25em solid rgba(204, 0, 0, 0.2); + outline: 0.125em solid #006ce7; + padding: 0em; +} +div.tox-suggestededits__annotation:has(> hr) { + padding: 0.25em; +} +div.tox-suggestededits__annotation--removed__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +div.tox-suggestededits__annotation--added__highlight > hr { + border-color: rgba(0, 0, 0, 0.2); +} +.mce-pagebreak.tox-suggestededits__annotation--added__selected, +.mce-pagebreak.tox-suggestededits__annotation--removed__selected, +.mce-pagebreak.tox-suggestededits__annotation--modified__selected { + border: 1px dashed #aaa; + box-shadow: none; +} +.mce-pagebreak.tox-suggestededits__annotation--added__highlight, +.mce-pagebreak.tox-suggestededits__annotation--modified__highlight, +.mce-pagebreak.tox-suggestededits__annotation--removed__highlight { + padding: 0; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc ul > li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.tox-uc-loading-background { + width: 100%; + height: 100%; + background: rgba(255, 255, 255, 0.5); +} +.tox-uc-loading-spinner-wrapper { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} +.tox-uc-loading-spinner { + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #006ce7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox-uc-video { + display: block; + position: relative; + margin: 16px 0 16px 0; +} +.tox-uc-video:not([data-mce-selected]):after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.tox-uploadcare-placeholder { + all: initial; + display: inline-block; + position: relative; + width: min(100%, 600px); + height: 80px; + --tox-uploadcare-placeholder--content-cursor: auto !important; + --tox-uploadcare-placeholder--content-color: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--content-background-color: #fff; + --tox-uploadcare-placeholder--content-border: 2px solid #e3e3e3; + --tox-uploadcare-placeholder--content-font-family: monospace, sans-serif; + --tox-uploadcare-placeholder--content-height: 100%; + --tox-uploadcare-placeholder--content-width: 100%; + --tox-uploadcare-placeholder--content-display: inline-flex; + --tox-uploadcare-placeholder--content-align-items: center; + --tox-uploadcare-placeholder--content-justify-content: center; + --tox-uploadcare-placeholder--content-gap: 8px; + --tox-uploadcare-placeholder--icon-fill: rgba(34, 47, 62, 0.7); + --tox-uploadcare-placeholder--icon-min-width: 24px; + --tox-uc-loading-spinner-wrapper-display-none: none; + --tox-uc-loading-spinner-wrapper-display: flex; + --tox-uc-loading-spinner-wrapper-position: absolute; + --tox-uc-loading-spinner-wrapper-top: 0; + --tox-uc-loading-spinner-wrapper-left: 0; + --tox-uc-loading-spinner-wrapper-width: 100%; + --tox-uc-loading-spinner-wrapper-height: 100%; + --tox-uc-loading-spinner-wrapper-justify-content: center; + --tox-uc-loading-spinner-wrapper-align-items: center; + --tox-uc-loading-spinner-aspect-ratio: 1 / 1; + --tox-uc-loading-spinner-width: min(24px, 30%); + --tox-uc-loading-spinner-border-radius: 50%; + --tox-uc-loading-spinner-border: 3px solid #006ce7; + --tox-uc-loading-spinner-border-bottom-color: transparent; + --tox-uc-loading-spinner-animation: tox-rotation 1s linear infinite; +} +@media print { + tiny-uploadcare-placeholder { + display: none !important; + } +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +[data-ephox-foam-a11y-violation] { + outline: 2px solid; + position: relative; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation] { + outline-width: 4px; + transition: outline-width 0.1s ease-in-out, background-color 0.1s ease-in-out; + box-shadow: 0 0 0 99999px #222f3e80; + z-index: 1; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info] { + outline-color: #006ce7; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn] { + outline-color: #FFCC00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error] { + outline-color: #c00; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="info"] { + outline-color: #006ce7; + background-color: #e6f0fd; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="warning"] { + outline-color: #FFCC00; + background-color: #fffae6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation="error"] { + outline-color: #c00; + background-color: #fae6e6; +} +[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td, th, tr) { + position: static; +} diff --git a/public/tinymce/skins/ui/tinymce-5/content.inline.js b/public/tinymce/skins/ui/tinymce-5/content.inline.js new file mode 100644 index 0000000..027ac1a --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.inline.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/tinymce-5/content.inline.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5/content.inline.min.css b/public/tinymce/skins/ui/tinymce-5/content.inline.min.css new file mode 100644 index 0000000..c82c8e0 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.inline.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static} diff --git a/public/tinymce/skins/ui/tinymce-5/content.inline.min.ts b/public/tinymce/skins/ui/tinymce-5/content.inline.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.inline.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/content.inline.ts b/public/tinymce/skins/ui/tinymce-5/content.inline.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.inline.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/content.js b/public/tinymce/skins/ui/tinymce-5/content.js new file mode 100644 index 0000000..be1f51b --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.js @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +tinymce.Resource.add('ui/tinymce-5/content.css', `@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5/content.min.css b/public/tinymce/skins/ui/tinymce-5/content.min.css new file mode 100644 index 0000000..5d02559 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.min.css @@ -0,0 +1,10 @@ +/* This file is bundled with the code from the following third party libraries */ + +/** + * http://prismjs.com/ + * Dracula Theme originally by Zeno Rocha [@zenorocha] + * https://draculatheme.com/ + * + * Ported for PrismJS by Albert Vallverdu [@byverdu] + */ +@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe796}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe796;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#ffcf30}.tox-comments-visible span.tox-comment[data-mce-selected]{background-color:#ffcf30;border-radius:3px;box-shadow:0 0 0 2px #006ce7}.tox-comments-visible span.tox-comment[data-mce-selected]:has(img[data-mce-selected],> audio[data-mce-selected],> video[data-mce-selected],span.mce-preview-object[data-mce-selected]){box-shadow:none}.tox-comments-visible span.tox-comment[data-mce-selected] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-selected]>video:not([data-mce-selected]){box-shadow:0 0 0 5px #006ce7}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #ffcf30}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;tab-size:4;hyphens:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline:0 auto;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{-webkit-text-decoration:none;text-decoration:none}@media print{sup.mce-footnote a{color:#000;-webkit-text-decoration:none;text-decoration:none}div.mce-footnotes{page-break-inside:avoid;break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}tiny-math-block{display:flex;justify-content:center;margin:16px 0 16px 0}tiny-math-inline{display:inline-block}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px;position:relative}.mce-preview-object .mce-shim{background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}@media (forced-colors:active){.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:highlight;filter:brightness(30%);z-index:-1}}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}@media print{.mce-content-body .mce-placeholder,.mce-content-body [data-mce-bogus=all],.mce-content-body [data-mce-bogus]{display:none!important}.mce-content-body .mce-visual-caret{display:none!important}.mce-content-body .mce-edit-focus,.mce-content-body :focus,.mce-content-body [data-mce-selected]{outline:0!important}}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:first-of-type{cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed black;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0 0 0%);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.tox-suggestededits__annotation--added,.tox-suggestededits__annotation--modified,.tox-suggestededits__annotation--removed{-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--added__highlight{background-color:rgba(120,171,70,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--added__selected{background-color:rgba(120,171,70,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--modified__highlight{background-color:rgba(0,108,231,.2);-webkit-text-decoration:underline;text-decoration:underline}.tox-suggestededits__annotation--modified__selected{background-color:rgba(0,108,231,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:none;text-decoration:none}.tox-suggestededits__annotation--removed__highlight{background-color:rgba(204,0,0,.2);-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--removed__selected{background-color:rgba(204,0,0,.2);box-shadow:0 -2px 0 0 #006ce7 inset,0 -2px 0 0 #006ce7;-webkit-text-decoration:line-through;text-decoration:line-through}.tox-suggestededits__annotation--added.tox-suggestededits__annotation--added__hidden,.tox-suggestededits__annotation--modified.tox-suggestededits__annotation--modified__hidden,.tox-suggestededits__annotation--removed.tox-suggestededits__annotation--removed__hidden{display:none;-webkit-text-decoration:none;text-decoration:none}:has(> div > iframe).tox-suggestededits__annotation--added,:has(> div > iframe).tox-suggestededits__annotation--modified,:has(> div > iframe).tox-suggestededits__annotation--removed{padding:7px;margin:5px}iframe.tox-suggestededits__annotation--added__highlight,img.tox-suggestededits__annotation--added__highlight,video.tox-suggestededits__annotation--added__highlight{outline:.25em solid rgba(120,171,70,.2);padding:.25em}iframe.tox-suggestededits__annotation--added__selected,img.tox-suggestededits__annotation--added__selected,video.tox-suggestededits__annotation--added__selected{border:.25em solid rgba(120,171,70,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--modified__highlight,img.tox-suggestededits__annotation--modified__highlight,video.tox-suggestededits__annotation--modified__highlight{outline:.25em solid rgba(0,108,231,.2);padding:.25em}iframe.tox-suggestededits__annotation--modified__selected,img.tox-suggestededits__annotation--modified__selected,video.tox-suggestededits__annotation--modified__selected{border:.25em solid rgba(0,108,231,.2);outline:.125em solid #006ce7;padding:0}iframe.tox-suggestededits__annotation--removed__highlight,img.tox-suggestededits__annotation--removed__highlight,video.tox-suggestededits__annotation--removed__highlight{outline:.25em solid rgba(204,0,0,.2);padding:.25em}iframe.tox-suggestededits__annotation--removed__selected,img.tox-suggestededits__annotation--removed__selected,video.tox-suggestededits__annotation--removed__selected{border:.25em solid rgba(204,0,0,.2);outline:.125em solid #006ce7;padding:0}div.tox-suggestededits__annotation:has(> hr){padding:.25em}div.tox-suggestededits__annotation--removed__highlight>hr{border-color:rgba(0,0,0,.2)}div.tox-suggestededits__annotation--added__highlight>hr{border-color:rgba(0,0,0,.2)}.mce-pagebreak.tox-suggestededits__annotation--added__selected,.mce-pagebreak.tox-suggestededits__annotation--modified__selected,.mce-pagebreak.tox-suggestededits__annotation--removed__selected{border:1px dashed #aaa;box-shadow:none}.mce-pagebreak.tox-suggestededits__annotation--added__highlight,.mce-pagebreak.tox-suggestededits__annotation--modified__highlight,.mce-pagebreak.tox-suggestededits__annotation--removed__highlight{padding:0}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc ul>li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.tox-uc-loading-background{width:100%;height:100%;background:rgba(255,255,255,.5)}.tox-uc-loading-spinner-wrapper{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.tox-uc-loading-spinner{width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #006ce7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox-uc-video{display:block;position:relative;margin:16px 0 16px 0}.tox-uc-video:not([data-mce-selected]):after{content:"";position:absolute;top:0;left:0;width:100%;height:100%}.tox-uploadcare-placeholder{all:initial;display:inline-block;position:relative;width:min(100%,600px);height:80px;--tox-uploadcare-placeholder--content-cursor:auto!important;--tox-uploadcare-placeholder--content-color:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--content-background-color:#fff;--tox-uploadcare-placeholder--content-border:2px solid #e3e3e3;--tox-uploadcare-placeholder--content-font-family:monospace,sans-serif;--tox-uploadcare-placeholder--content-height:100%;--tox-uploadcare-placeholder--content-width:100%;--tox-uploadcare-placeholder--content-display:inline-flex;--tox-uploadcare-placeholder--content-align-items:center;--tox-uploadcare-placeholder--content-justify-content:center;--tox-uploadcare-placeholder--content-gap:8px;--tox-uploadcare-placeholder--icon-fill:rgba(34, 47, 62, 0.7);--tox-uploadcare-placeholder--icon-min-width:24px;--tox-uc-loading-spinner-wrapper-display-none:none;--tox-uc-loading-spinner-wrapper-display:flex;--tox-uc-loading-spinner-wrapper-position:absolute;--tox-uc-loading-spinner-wrapper-top:0;--tox-uc-loading-spinner-wrapper-left:0;--tox-uc-loading-spinner-wrapper-width:100%;--tox-uc-loading-spinner-wrapper-height:100%;--tox-uc-loading-spinner-wrapper-justify-content:center;--tox-uc-loading-spinner-wrapper-align-items:center;--tox-uc-loading-spinner-aspect-ratio:1/1;--tox-uc-loading-spinner-width:min(24px, 30%);--tox-uc-loading-spinner-border-radius:50%;--tox-uc-loading-spinner-border:3px solid #006ce7;--tox-uc-loading-spinner-border-bottom-color:transparent;--tox-uc-loading-spinner-animation:tox-rotation 1s linear infinite}@media print{tiny-uploadcare-placeholder{display:none!important}}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}[data-ephox-foam-a11y-violation]{outline:2px solid;position:relative}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]{outline-width:4px;transition:outline-width .1s ease-in-out,background-color .1s ease-in-out;box-shadow:0 0 0 99999px #222f3e80;z-index:1}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-info]{outline-color:#006ce7}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-warn]{outline-color:#fc0}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-severity-error]{outline-color:#c00}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=info]{outline-color:#006ce7;background-color:#e6f0fd}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=warning]{outline-color:#fc0;background-color:#fffae6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation=error]{outline-color:#c00;background-color:#fae6e6}[data-ephox-foam-a11y-violation][data-ephox-foam-a11y-current-violation]:is(td,th,tr){position:static}body{font-family:sans-serif}table{border-collapse:collapse} diff --git a/public/tinymce/skins/ui/tinymce-5/content.min.ts b/public/tinymce/skins/ui/tinymce-5/content.min.ts new file mode 100644 index 0000000..ca35fc1 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.min.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "cdata": string; + "comment": string; + "doctype": string; + "prolog": string; + "punctuation": string; + "namespace": string; + "boolean": string; + "constant": string; + "deleted": string; + "number": string; + "property": string; + "symbol": string; + "tag": string; + "attr-name": string; + "builtin": string; + "char": string; + "inserted": string; + "selector": string; + "string": string; + "language-css": string; + "style": string; + "entity": string; + "operator": string; + "url": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "class-name": string; + "function": string; + "important": string; + "regex": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--1by1": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--4by3": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/content.ts b/public/tinymce/skins/ui/tinymce-5/content.ts new file mode 100644 index 0000000..80c933f --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/content.ts @@ -0,0 +1,116 @@ +export interface Classes { + "mce-content-body": string; + "mce-item-anchor": string; + "tox-comments-visible": string; + "tox-comment": string; + "mce-preview-object": string; + "tox-checklist": string; + "tox-checklist--hidden": string; + "tox-checklist--checked": string; + "token": string; + "comment": string; + "prolog": string; + "doctype": string; + "cdata": string; + "punctuation": string; + "namespace": string; + "property": string; + "tag": string; + "boolean": string; + "number": string; + "constant": string; + "symbol": string; + "deleted": string; + "selector": string; + "attr-name": string; + "string": string; + "char": string; + "builtin": string; + "inserted": string; + "operator": string; + "entity": string; + "url": string; + "language-css": string; + "style": string; + "atrule": string; + "attr-value": string; + "keyword": string; + "function": string; + "class-name": string; + "regex": string; + "important": string; + "variable": string; + "bold": string; + "italic": string; + "mce-visual-caret": string; + "mce-visual-caret-hidden": string; + "mce-offscreen-selection": string; + "tox-cursor-format-painter": string; + "mce-footnotes": string; + "mce-footnotes-backlink": string; + "mce-footnote": string; + "align-left": string; + "align-right": string; + "image": string; + "align-center": string; + "mce-shim": string; + "mce-mergetag": string; + "mce-mergetag-affix": string; + "mce-object": string; + "mce-pagebreak": string; + "tiny-pageembed": string; + "tiny-pageembed--21by9": string; + "tiny-pageembed--16by9": string; + "tiny-pageembed--4by3": string; + "tiny-pageembed--1by1": string; + "mce-visualblocks": string; + "mce-placeholder": string; + "mce-edit-focus": string; + "mce-resizehandle": string; + "mce-resize-backdrop": string; + "mce-clonedresizable": string; + "mce-resizetable-columns": string; + "mce-resize-helper": string; + "tox-rtc-user-selection": string; + "tox-rtc-user-cursor": string; + "tox-rtc-user-selection--1": string; + "tox-rtc-user-selection--2": string; + "tox-rtc-user-selection--3": string; + "tox-rtc-user-selection--4": string; + "tox-rtc-user-selection--5": string; + "tox-rtc-user-selection--6": string; + "tox-rtc-user-selection--7": string; + "tox-rtc-user-selection--8": string; + "tox-rtc-remote-image": string; + "mce-match-marker": string; + "mce-match-marker-selected": string; + "ephox-snooker-resizer-bar": string; + "ephox-snooker-resizer-cols": string; + "ephox-snooker-resizer-rows": string; + "ephox-snooker-resizer-bar-dragging": string; + "mce-spellchecker-word": string; + "mce-spellchecker-grammar": string; + "tox-suggestededits__annotation--added": string; + "tox-suggestededits__annotation--modified": string; + "tox-suggestededits__annotation--removed": string; + "tox-suggestededits__annotation--added__highlight": string; + "tox-suggestededits__annotation--added__selected": string; + "tox-suggestededits__annotation--modified__highlight": string; + "tox-suggestededits__annotation--modified__selected": string; + "tox-suggestededits__annotation--removed__highlight": string; + "tox-suggestededits__annotation--removed__selected": string; + "tox-suggestededits__annotation--added__hidden": string; + "tox-suggestededits__annotation--modified__hidden": string; + "tox-suggestededits__annotation--removed__hidden": string; + "tox-suggestededits__annotation": string; + "mce-toc": string; + "mce-item-table": string; + "tox-uc-loading-background": string; + "tox-uc-loading-spinner-wrapper": string; + "tox-uc-loading-spinner": string; + "tox-rotation": string; + "tox-uc-video": string; + "tox-uploadcare-placeholder": string; + "mce-nbsp": string; + "mce-shy": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/skin.css b/public/tinymce/skins/ui/tinymce-5/skin.css new file mode 100644 index 0000000..cff5045 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.css @@ -0,0 +1,5734 @@ +.tox { + box-shadow: none; + box-sizing: content-box; + cursor: auto; + font-style: normal; + font-weight: normal; + line-height: normal; + -webkit-tap-highlight-color: transparent; + -webkit-text-decoration: none; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; +} +.tox *:not(svg):not(rect) { + box-sizing: inherit; + color: inherit; + cursor: inherit; + direction: inherit; + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + line-height: inherit; + -webkit-tap-highlight-color: inherit; + text-align: inherit; + text-decoration: inherit; + text-shadow: inherit; + text-transform: inherit; + vertical-align: inherit; + white-space: inherit; +} +.tox *:not(svg):not(rect) { + /* stylelint-disable-line no-duplicate-selectors */ + background: transparent; + border: 0; + box-shadow: none; + float: none; + height: auto; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + width: auto; +} +.tox:not([dir=rtl]) { + direction: ltr; + text-align: left; +} +.tox[dir=rtl] { + direction: rtl; + text-align: right; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +@keyframes tox-rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.tox { + color: var(--tox-private-color-black, #222f3e); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-font-size-base, 16px); +} +.tox-tinymce { + border: 1px solid #cccccc; + border-radius: 0; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + overflow: hidden; + position: relative; + visibility: inherit !important; +} +.tox.tox-tinymce-inline { + border: none; + box-shadow: none; + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-header { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 0; + box-shadow: none; + overflow: hidden; +} +.tox-tinymce-aux { + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + z-index: var(--tox-private-z-index-sink, 1300); +} +.tox[dir=rtl] .tox-icon--flip svg { + transform: rotateY(180deg); +} +.tox .tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-editor-header { + display: grid; + grid-template-columns: 1fr min-content; + z-index: 2; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: #fff; + border-bottom: none; + box-shadow: none; + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { + transition: box-shadow 0.5s; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: 1px solid #cccccc; + box-shadow: none; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: #fff; + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); +} +.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { + background: none; + border: none; + box-shadow: none; + padding: 0; +} +.tox-editor-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox-editor-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox-editor-dock-transition { + transition: visibility 0s linear 0.25s, opacity 0.25s ease; +} +.tox-editor-dock-transition.tox-editor-dock-fadein { + transition-delay: 0s; +} +.tox .accessibility-issue__header { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox #accessibility-issue__subheader { + font-size: 16px; + color: #222f3e; +} +.tox .accessbility-sr-only { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + clip-path: inset(0 0 99.9% 99.9%); + overflow: hidden; + height: 1px; + width: 1px; + padding: 0; + border: 0; +} +.tox .accessibility-issue__description { + align-items: stretch; + border-radius: 3px; + justify-content: space-between; +} +.tox .accessibility-issue__description > div { + padding-bottom: 4px; +} +.tox .accessibility-issue__description > div > div { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description > div > div .tox-icon svg { + display: block; +} +.tox #accessibility-issue__contentID { + margin-top: 8px; + margin-bottom: 8px; +} +.tox #accessibility-issue__contentID span:first-child { + font-weight: bold; +} +.tox #accessibility-issue__document { + padding-bottom: 8px; +} +.tox .accessibility-issue__repair { + margin-top: 8px; +} +.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error { + color: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { + background-color: #e9f2f8; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { + font-size: 14px; + color: #207ab7; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg { + fill: #207ab7; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { + background-color: #207ab7; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus { + background-color: #1c6ca1; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { + background-color: #185d8c; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { + background-color: #fffae6; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { + font-size: 14px; + color: #7a6e25; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg { + fill: #7a6e25; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { + background-color: #FFE89D; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus { + background-color: #F2D574; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { + background-color: #E8C657; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { + background-color: #fae6e6; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { + font-size: 14px; + color: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg { + fill: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { + background-color: #F2BFBF; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus { + background-color: #E9A4A4; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { + background-color: #EE9494; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { + background-color: rgba(120, 171, 70, 0.1); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child { + display: none; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { + color: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg { + fill: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, +.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { + margin-top: 0; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { + padding: 8px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-right: 4px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-right: auto; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 8px 4px 4px; +} +.tox .mce-codemirror { + background: #fff; + bottom: 0; + font-size: 13px; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .mce-codemirror.tox-inline-codemirror { + margin: 8px; + position: absolute; +} +.tox .tox-advtemplate .tox-form__grid { + flex: 1; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child { + display: flex; + flex-direction: column; + width: 30%; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) { + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child { + width: 100%; + } +} +.tox .tox-advtemplate iframe { + border-color: #cccccc; + border-radius: 0; + border-style: solid; + border-width: 1px; + margin: 0 10px; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bottom-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + border-width: var(--tox-private-button-border-width, 1px); + border-style: var(--tox-private-button-border-style, solid); + border-radius: var(--tox-private-control-border-radius, 3px); + font-family: var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif); + font-size: var(--tox-private-button-font-size, 14px); + font-style: var(--tox-private-button-font-style, normal); + font-weight: var(--tox-private-button-font-weight, bold); + line-height: var(--tox-private-control-line-height, 24px); + padding: var(--tox-private-button-padding-y, 4px) var(--tox-private-button-padding-x, 16px); + text-align: center; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + letter-spacing: normal; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + outline: none; + position: relative; + white-space: nowrap; + display: inline-flex; + justify-content: center; + align-items: center; + gap: 2px; +} +.tox .tox-button::before { + border-radius: var(--tox-private-control-border-radius, 3px); + bottom: calc(-1 * var(--tox-private-button-border-width, 1px)); + box-shadow: var(--tox-private-button-focus-outline, inset 0 0 0 1px #fff, 0 0 0 2px #207ab7); + content: ''; + left: calc(-1 * var(--tox-private-button-border-width, 1px)); + opacity: 0; + pointer-events: none; + position: absolute; + right: calc(-1 * var(--tox-private-button-border-width, 1px)); + top: calc(-1 * var(--tox-private-button-border-width, 1px)); +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-focus-background-color, #1c6ca1); + background-image: none; + border-color: var(--tox-private-button-focus-border-color, #1c6ca1); + box-shadow: var(--tox-private-button-focus-box-shadow, none); + color: var(--tox-private-button-focus-text-color, #fff); +} +.tox .tox-button:focus:not(:disabled)::before { + opacity: 1; +} +.tox .tox-button.tox-button--icon, +.tox .tox-button:has(.tox-icon:only-child) { + padding: 4px; +} +.tox .tox-button .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button .tox-icon.tox-icon--success svg { + fill: var(--tox-private-color-success, #78AB46); +} +.tox .tox-button .tox-icon.tox-icon--error svg { + fill: var(--tox-private-color-error, #c00); +} +.tox .tox-button--stretch { + width: 100%; +} +.tox-context-form__group .tox-button--icon, +.tox-context-form__group .tox-button.tox-button--icon { + margin: 3px 0 2px 0; + padding: 0; +} +.tox { + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ + /* TODO: Add `--primary` to class name. Currently, we treat primary as base in alloy */ +} +.tox .tox-button { + background-color: var(--tox-private-button-primary-background-color, #207ab7); + background-image: none; + background-position: 0 0; + background-repeat: repeat; + color: var(--tox-private-button-primary-text-color, #fff); + border-color: var(--tox-private-button-primary-border-color, #207ab7); + /* Enabled state */ +} +.tox .tox-button[disabled] { + background-color: var(--tox-private-button-primary-disabled-background-color, #207ab7); + background-image: none; + border-color: var(--tox-private-button-primary-disabled-border-color, #207ab7); + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-focus-background-color, #1c6ca1); + border-color: var(--tox-private-button-primary-focus-border-color, #1c6ca1); + color: var(--tox-private-button-primary-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-hover-background-color, #1c6ca1); + border-color: var(--tox-private-button-primary-hover-border-color, #1c6ca1); + color: var(--tox-private-button-primary-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button:active:not(:disabled) { + background-color: var(--tox-private-button-primary-active-background-color, #185d8c); + border-color: var(--tox-private-button-primary-active-border-color, #185d8c); + color: var(--tox-private-button-primary-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled { + background-color: var(--tox-private-button-primary-enabled-background-color, #185d8c); + border-color: var(--tox-private-button-primary-enabled-border-color, #185d8c); + color: var(--tox-private-button-primary-enabled-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled[disabled] { + color: var(--tox-private-button-primary-disabled-text-color, rgba(255, 255, 255, 0.5)); + cursor: not-allowed; +} +.tox .tox-button.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-focus-background-color, #154f76); + border-color: var(--tox-private-button-primary-enabled-focus-border-color, #154f76); + color: var(--tox-private-button-primary-enabled-focus-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-hover-background-color, #154f76); + border-color: var(--tox-private-button-primary-enabled-hover-border-color, #154f76); + color: var(--tox-private-button-primary-enabled-hover-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-primary-enabled-active-background-color, #114060); + border-color: var(--tox-private-button-primary-enabled-active-border-color, #114060); + color: var(--tox-private-button-primary-enabled-active-text-color, #fff); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary { + background-color: var(--tox-private-button-secondary-background-color, #f0f0f0); + border-color: var(--tox-private-button-secondary-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-text-color, #222f3e); + border-style: solid; + border-width: 1px; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-radius: 3px; + box-shadow: none; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + outline: none; + padding: 4px 16px; + -webkit-text-decoration: none; + text-decoration: none; + text-transform: none; + /* Enabled state */ +} +.tox .tox-button--secondary[disabled] { + background-color: var(--tox-private-button-secondary-disabled-background-color, #f0f0f0); + background-image: none; + border-color: var(--tox-private-button-secondary-disabled-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-focus-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-focus-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-focus-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-hover-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-hover-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-hover-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-active-background-color, #d6d6d6); + border-color: var(--tox-private-button-secondary-active-border-color, #d6d6d6); + color: var(--tox-private-button-secondary-active-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled { + background-color: var(--tox-private-button-secondary-enabled-background-color, #b1ccdf); + border-color: var(--tox-private-button-secondary-enabled-border-color, #b1ccdf); + color: var(--tox-private-button-secondary-enabled-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled[disabled] { + color: var(--tox-private-button-secondary-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-focus-background-color, #9fc1d7); + border-color: var(--tox-private-button-secondary-enabled-focus-border-color, #9fc1d7); + color: var(--tox-private-button-secondary-enabled-focus-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-hover-background-color, #9fc1d7); + border-color: var(--tox-private-button-secondary-enabled-hover-border-color, #9fc1d7); + color: var(--tox-private-button-secondary-enabled-hover-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-enabled-active-background-color, #8db5d0); + border-color: var(--tox-private-button-secondary-enabled-active-border-color, #8db5d0); + color: var(--tox-private-button-secondary-enabled-active-text-color, #222f3e); + background-image: none; + box-shadow: none; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: var(--tox-private-button-naked-text-color, #222f3e); +} +.tox .tox-button--naked[disabled] { + background-color: #f0f0f0; + border-color: #f0f0f0; + color: var(--tox-private-button-naked-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: var(--tox-private-button-naked-focus-background-color, #e3e3e3); + border-color: var(--tox-private-button-naked-focus-border-color, #e3e3e3); + color: var(--tox-private-button-naked-focus-text-color, #222f3e); + box-shadow: none; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: var(--tox-private-button-naked-hover-background-color, #e3e3e3); + border-color: var(--tox-private-button-naked-hover-background-color, #e3e3e3); + color: var(--tox-private-button-naked-hover-text-color, #222f3e); + box-shadow: none; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: var(--tox-private-button-naked-active-background-color, #d6d6d6); + border-color: var(--tox-private-button-naked-active-border-color, #d6d6d6); + color: var(--tox-private-button-naked-active-text-color, #222f3e); + box-shadow: none; +} +.tox .tox-button--secondary--outline { + background-color: transparent; + border-color: var(--tox-private-button-secondary-outline-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-outline-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:focus:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-focus-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-outline-focus-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-focus-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:hover:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-hover-background-color, #f0f0f0); + border-color: var(--tox-private-button-secondary-outline-hover-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-hover-text-color, #222f3e); +} +.tox .tox-button--secondary--outline:active:not(:disabled) { + background-color: var(--tox-private-button-secondary-outline-active-background-color, #e3e3e3); + border-color: var(--tox-private-button-secondary-outline-active-border-color, #e3e3e3); + color: var(--tox-private-button-secondary-outline-active-text-color, #222f3e); +} +.tox .tox-button--secondary--outline[disabled] { + background-color: var(--tox-private-button-secondary-outline-disabled-background-color, transparent); + border-color: var(--tox-private-button-secondary-outline-disabled-border-color, #f0f0f0); + color: var(--tox-private-button-secondary-outline-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox { + align-items: center; + border-radius: var(--tox-private-checkbox-border-radius, 3px); + cursor: pointer; + display: flex; + height: var(--tox-private-control-height, 36px); + min-width: var(--tox-private-control-height, 36px); +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + padding: var(--tox-private-pad-xs, calc(4px - 1px)); + border-radius: var(--tox-private-checkbox-border-radius, 3px); + box-shadow: 0 0 0 2px transparent; + height: var(--tox-private-control-line-height, 24px); + aspect-ratio: 1; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: var(--tox-private-checkbox-unselected-color, rgba(34, 47, 62, 0.3)); +} +@media (forced-colors: active) { + .tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: currentColor !important; + } +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: var(--tox-private-checkbox-indeterminate-color, #207ab7); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: var(--tox-private-checkbox-selected-color, #207ab7); +} +.tox .tox-checkbox--disabled { + color: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); + cursor: not-allowed; +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + fill: var(--tox-private-checkbox-disabled-text-color, rgba(34, 47, 62, 0.5)); +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + box-shadow: var(--tox-private-checkbox-focus-box-shadow, inset 0 0 0 1px #207ab7); +} +.tox:not([dir=rtl]) .tox-checkbox__label { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox:not([dir=rtl]) .tox-checkbox__input { + left: -10000px; +} +.tox:not([dir=rtl]) .tox-bar .tox-checkbox { + margin-left: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__label { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox[dir=rtl] .tox-checkbox__input { + right: -10000px; +} +.tox[dir=rtl] .tox-bar .tox-checkbox { + margin-right: var(--tox-private-pad-xs, 4px); +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #cccccc; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #e6e6e6; + color: rgba(34, 47, 62, 0.7); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + border-radius: 3px; + color: #222f3e; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector, +.tox .tox-image-selector-menu .tox-collection__item { + flex-direction: column; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image, +.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark, +.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark { + flex-grow: 1; +} +.tox .tox-image-selector-menu .tox-collection__item-image-selector label, +.tox .tox-image-selector-menu .tox-collection__item label { + width: 48px; + white-space: nowrap; + overflow: hidden; + font-size: 12px; + color: #222f3e; + text-align: center; + align-self: flex-end; +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark { + height: 24px; + width: 24px; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path { + fill: #207ab7; + stroke: #207ab7; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #fff; +} +.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + z-index: 2; + background-color: #fff; + opacity: 0.8; + background-clip: content-box; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #fff; + color: #222f3e; +} +.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #dee0e2; + color: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + border: solid 1px; + } +} +.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #c8cbcf; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #dee0e2; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent inset; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + background-color: #c8cbcf; + color: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled) { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #222f3e; + background-color: #fff; + position: relative; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after { + border: 2px solid highlight; + } +} +@media (forced-colors: active) { + .tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover { + border-radius: 3px; + outline: solid 1px; + } +} +.tox .tox-collection__item-image { + border: 1px solid #cccccc; + border-radius: 3px; + display: flex; + flex-direction: column; + justify-content: center; + margin-bottom: 4px; + position: relative; +} +.tox .tox-collection__item-icon, +.tox .tox-collection__item-checkmark { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg, +.tox .tox-collection__item-checkmark svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + max-width: 100%; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection__item-accessory { + color: currentColor; + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + text-transform: none; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + min-height: 24px; +} +.tox .tox-collection__item-caret::after { + content: ''; + font-size: 0; + min-height: inherit; +} +.tox .tox-collection__item-caret svg { + fill: currentColor; +} +.tox .tox-collection__item--state-disabled { + background-color: transparent; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark { + display: none; +} +.tox .tox-collection--horizontal { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: nowrap; + margin-bottom: 0; + overflow-x: auto; + padding: 0; +} +.tox .tox-collection--horizontal .tox-collection__group { + align-items: center; + display: flex; + flex-wrap: nowrap; + margin: 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item { + height: 34px; + margin: 3px 0 2px 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item-label { + white-space: nowrap; +} +.tox .tox-collection--horizontal .tox-collection__item-caret { + margin-left: 4px; +} +.tox .tox-collection__item-container { + display: flex; +} +.tox .tox-collection__item-container--row { + align-items: center; + flex: 1 1 auto; + flex-direction: row; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-left { + margin-right: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-right { + justify-content: flex-end; + margin-left: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { + align-items: flex-start; + margin-bottom: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { + align-items: center; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { + align-items: flex-end; + margin-top: auto; +} +.tox .tox-collection__item-container--column { + align-self: center; + flex: 1 1 auto; + flex-direction: column; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-left { + align-items: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-right { + align-items: flex-end; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { + align-self: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { + align-self: center; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { + align-self: flex-end; +} +.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-right: 1px solid #cccccc; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-collection__item-accessory { + margin-left: 16px; + text-align: right; +} +.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { + margin-left: 16px; +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-left: 1px solid #cccccc; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-right: 8px; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-right: 4px; +} +.tox[dir=rtl] .tox-collection__item-accessory { + margin-right: 16px; + text-align: left; +} +.tox[dir=rtl] .tox-collection .tox-collection__item-caret { + margin-right: 16px; + transform: rotateY(180deg); +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { + margin-right: 4px; +} +@media (forced-colors: active) { + .tox .tox-hue-slider, + .tox .tox-rgb-form .tox-rgba-preview { + background-color: currentColor !important; + border: 1px solid highlight !important; + forced-color-adjust: none; + } +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + box-sizing: border-box; + display: flex; + height: 100%; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + box-sizing: content-box; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + box-sizing: border-box; + height: 100%; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-spectrum:focus, +.tox .tox-sv-palette-spectrum:focus { + outline: #08f solid; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + box-sizing: content-box; + height: 4px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + min-width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid #f00 !important; + box-shadow: 0 0 0 1px #f00; +} +.tox .tox-rgb-container { + position: relative; +} +.tox .tox-rgb-form .tox-invalid-icon { + align-content: center; + align-items: center; + display: none; + height: 100%; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid { + margin: 0; +} +.tox .tox-rgb-warning-note { + background-color: #f5cccc; + border: 1px solid #f0b3b3; + border-radius: 3px; + color: #77181f; + padding: 3px; +} +.tox input.tox-invalid + .tox-invalid-icon { + display: flex; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox:not([dir=rtl]) .tox-sv-palette { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider-thumb { + margin-left: -1px; +} +.tox:not([dir=rtl]) .tox-rgb-form label { + margin-right: 0.5em; +} +.tox[dir=rtl] .tox-sv-palette { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider-thumb { + margin-right: -1px; +} +.tox[dir=rtl] .tox-rgb-form label { + margin-left: 0.5em; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 2px 0 3px 4px; +} +.tox .tox-collection--list .tox-collection__group .tox-swatches-menu { + border: 0; + margin: -4px 0; +} +.tox .tox-swatches__row { + display: flex; +} +@media (forced-colors: active) { + .tox .tox-swatches__row { + forced-color-adjust: none; + } +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + fill: #222f3e; + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #dee0e2; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg { + display: none; + fill: #222f3e; + height: 24px; + margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2); + width: 24px; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg path { + fill: #fff; + paint-order: stroke; + stroke: #222f3e; + stroke-width: 2px; +} +.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { + display: block; +} +.tox:not([dir=rtl]) .tox-swatches__picker-btn { + margin-left: auto; +} +.tox[dir=rtl] .tox-swatches__picker-btn { + margin-right: auto; +} +.tox { + /* Animation for deleting a comment */ + /* A comment fades to 0 when it is being deleted, then is removed */ +} +.tox .tox-comment { + background: #fff; + border: 1px solid #fff; + border-radius: 3px; + padding: 8px; + padding-bottom: 16px; + position: relative; +} +.tox .tox-comment:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected { + background-color: #fff2c9; + border: 1px solid #ffcf30; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-comment.tox-comment--selected:focus { + border: 2px solid transparent; + margin: -1px; +} +.tox .tox-comment.tox-comment--selected:focus:not(:first-child) { + margin-top: 7px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single { + margin-bottom: 12px; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus { + position: relative; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after { + top: -9px; + pointer-events: none; + position: absolute; + content: ""; + display: block; + bottom: -9px; + left: -9px; + right: -9px; + border-radius: 3px; + border: 2px solid transparent; +} +.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after { + bottom: calc((12px + 16px + 1px) * -1); +} +.tox .tox-comment__header { + align-items: center; + color: #222f3e; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-comment__body { + color: #222f3e; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; + transition: max-height 0.5s cubic-bezier(0, 1, 0, 1); + white-space: pre-wrap; + /* We remove the transitions when wanting to measure and jump straight to collapsed or expanded */ +} +.tox .tox-comment__body.tox-comment__body--expanded { + max-height: 100em; + transition: max-height 1s ease-in-out; +} +.tox .tox-comment__body.tox-comment__body--pending { + transition: max-height 0s; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; + font-size: 16px; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #222f3e; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #fff; + box-shadow: 0 0 8px 8px #fff; + color: #222f3e; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: 0.8em; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; + font-style: normal; + /* Need a focus highlight on the show more/less button */ +} +.tox .tox-comment__expander p:focus { + font-weight: bold; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-tbtn.tox-comment__mention-btn { + display: flex; + width: 34px; + height: 34px; + padding: 5px; + justify-content: center; + align-items: center; + margin: 0; + background-color: transparent; +} +.tox .tox-comment-thread { + background: #fff; + position: relative; + border-radius: 3px; + background-color: transparent; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #fff; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(255, 255, 255, 0), #fff); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #fff; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #fff; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 20; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; + padding: 12px; + scroll-behavior: smooth; +} +.tox .tox-comment__scroll:has(textarea:focus) { + scroll-behavior: auto; +} +.tox .tox-comment--disappearing { + transition: opacity 0.5s ease; +} +.tox .tox-comment[data-transitioning-destination="deleting"] { + opacity: 0; +} +.tox .tox-ring-loader { + width: 10px; + height: 10px; + border: 1px solid #FFF; + border-bottom-color: transparent; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + animation: tox-rotation 1s linear infinite; +} +.tox:not([dir=rtl]) .tox-comment__edit { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child, +.tox:not([dir=rtl]) .tox-comment__edit > *:last-child, +.tox:not([dir=rtl]) .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox[dir=rtl] .tox-comment__edit { + margin-right: 8px; +} +.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child, +.tox[dir=rtl] .tox-comment__edit > *:last-child, +.tox[dir=rtl] .tox-comment__reply > *:last-child { + margin-right: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(34, 47, 62, 0.7); +} +.tox .tox-user__avatar img { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-user__name { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: bold; + line-height: 18px; + text-transform: none; +} +.tox:not([dir=rtl]) .tox-user__avatar svg, +.tox:not([dir=rtl]) .tox-user__avatar img { + margin-right: 8px; +} +.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar svg, +.tox[dir=rtl] .tox-user__avatar img { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar + .tox-user__name { + margin-right: 8px; +} +.tox { + /* .tox-dialog-blocker-wrap { + // + } */ +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .tox-dialog-wrap__backdrop--opaque { + background-color: #fff; +} +.tox .tox-dialog { + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 2; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog { + align-self: flex-start; + margin: 8px auto; + max-height: calc(100vh - 8px * 2); + width: calc(100vw - 16px); + } +} +.tox .tox-dialog-inline { + z-index: 1100; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #fff; + border-bottom: none; + color: #222f3e; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: none; +} +.tox .tox-dialog__body { + color: #222f3e; + display: flex; + flex: 1; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + min-width: 0; + text-align: left; + text-transform: none; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body { + flex-direction: column; + } +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: 16px 16px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-dialog__body-nav { + max-width: 11em; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { + flex-direction: row; + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding-bottom: 0; + } +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(34, 47, 62, 0.7); + display: inline-block; + flex-shrink: 0; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + max-width: 13em; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item:focus { + background-color: rgba(32, 122, 183, 0.1); +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #214d6e; + color: #214d6e; +} +@media (forced-colors: active) { + .tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid highlight; + color: highlight; + } +} +.tox .tox-dialog__body-content { + box-sizing: border-box; + display: flex; + flex: 1; + flex-direction: column; + max-height: min(650px, calc(100vh - 110px)); + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 16px 16px; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content a { + color: #214d6e; + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:hover, +.tox .tox-dialog__body-content a:focus { + color: #0a1620; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content a:focus-visible { + border-radius: 1px; + outline: 2px solid #214d6e; + outline-offset: 2px; +} +.tox .tox-dialog__body-content a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-dialog__body-content svg { + fill: #222f3e; +} +.tox .tox-dialog__body-content strong { + font-weight: bold; +} +.tox .tox-dialog__body-content ul { + list-style-type: disc; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dd { + padding-inline-start: 2.5rem; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl, +.tox .tox-dialog__body-content dd, +.tox .tox-dialog__body-content dt { + display: block; + margin-inline-end: 0; + margin-inline-start: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1 { + color: #222f3e; + font-size: 20px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group h2 { + color: #222f3e; + font-size: 16px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group p { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content .tox-form__group h1:first-child, +.tox .tox-dialog__body-content .tox-form__group h2:first-child, +.tox .tox-dialog__body-content .tox-form__group p:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:last-child, +.tox .tox-dialog__body-content .tox-form__group h2:last-child, +.tox .tox-dialog__body-content .tox-form__group p:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:only-child, +.tox .tox-dialog__body-content .tox-form__group h2:only-child, +.tox .tox-dialog__body-content .tox-form__group p:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { + text-align: center; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { + text-align: end; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--fullscreen { + height: 100%; + max-width: 100%; +} +.tox .tox-dialog--fullscreen .tox-dialog__body-content { + max-height: 100%; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + justify-content: space-between; + padding: 8px 16px; +} +.tox .tox-dialog__footer-start, +.tox .tox-dialog__footer-end { + display: flex; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table thead th:first-child { + padding-right: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #404040; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__table td:first-child { + padding-right: 8px; +} +.tox .tox-dialog__iframe { + min-height: 200px; +} +.tox .tox-dialog__iframe.tox-dialog__iframe--opaque { + background: #fff; +} +.tox .tox-navobj-bordered { + position: relative; +} +.tox .tox-navobj-bordered::before { + border: 1px solid #cccccc; + border-radius: 3px; + content: ''; + inset: 0; + opacity: 1; + pointer-events: none; + position: absolute; + z-index: 1; +} +.tox .tox-navobj-bordered iframe { + border-radius: 3px; +} +.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +.tox .tox-dialog__body-iframe { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-dialog__body-iframe .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox .tox-dialog-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-dialog-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-dialog-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { + transition-delay: 0s; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { + margin-right: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { + margin-left: 8px; + } +} +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *, +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-dialog__body { + text-align: right; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { + margin-left: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { + margin-right: 8px; + } +} +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *, +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * { + margin-right: 8px; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #cccccc; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(34, 47, 62, 0.7); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area::before { + border: 0 solid transparent; + border-radius: 4px; + content: ''; + inset: 0; + opacity: 0; + pointer-events: none; + position: absolute; + transition: opacity 0.15s; + z-index: 1; +} +@media (forced-colors: active) { + .tox .tox-edit-area::before { + border: 0 solid highlight; + } +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-edit-focus .tox-edit-area::before { + opacity: 1; +} +.tox.tox-inline-edit-area { + border: 1px dotted #cccccc; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: green; +} +.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { + padding-right: 32px; +} +.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { + right: 4px; +} +.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { + padding-left: 32px; +} +.tox[dir=rtl] .tox-control-wrap__status-icon-wrap { + left: 4px; +} +.tox .tox-custom-preview { + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + flex: 1; + padding: 8px; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + box-sizing: border-box; + max-width: 25em; +} +.tox .tox-autocompleter .tox-autocompleter-highlight { + font-weight: bold; +} +.tox .tox-color-input { + display: flex; + position: relative; + z-index: 1; +} +.tox .tox-color-input .tox-textfield { + z-index: -1; +} +.tox .tox-color-input span { + border-color: rgba(34 47 3.1%); + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + height: 24px; + position: absolute; + top: 6px; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-color-input span { + border-color: currentColor; + border-width: 2px !important; + forced-color-adjust: none; + } +} +.tox .tox-color-input span:hover:not([aria-disabled=true]), +.tox .tox-color-input span:focus:not([aria-disabled=true]) { + border-color: #207ab7; + cursor: pointer; +} +.tox .tox-color-input span::before { + background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%); + background-position: 0 0, 0 6px, 6px -6px, -6px 0; + background-size: 12px 12px; + border: 1px solid #fff; + border-radius: 3px; + box-sizing: border-box; + content: ''; + height: 24px; + left: -1px; + position: absolute; + top: -1px; + width: 24px; + z-index: -1; +} +@media (forced-colors: active) { + .tox .tox-color-input span::before { + border: none; + } +} +.tox .tox-color-input span[aria-disabled=true] { + cursor: not-allowed; +} +.tox:not([dir=rtl]) .tox-color-input .tox-textfield { + padding-left: 36px; +} +.tox:not([dir=rtl]) .tox-color-input span { + left: 6px; +} +.tox[dir="rtl"] .tox-color-input .tox-textfield { + padding-right: 36px; +} +.tox[dir="rtl"] .tox-color-input span { + right: 6px; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: none; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox[dir=rtl] .tox-label { + padding: 0 0 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form-group--maximize { + flex: 1; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) { + margin-right: 4px; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input { + margin-left: 8px; + margin-right: 8px; +} +.tox .tox-textfield, +.tox .tox-toolbar-textfield, +.tox .tox-listboxfield .tox-listbox--select, +.tox .tox-textarea, +.tox .tox-textarea-wrap .tox-textarea:focus { + appearance: none; + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-textfield[disabled], +.tox .tox-toolbar-textfield[disabled], +.tox .tox-textarea[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-textfield:focus, +.tox .tox-toolbar-textfield:focus, +.tox .tox-listboxfield .tox-listbox--select:focus, +.tox .tox-textarea-wrap:focus-within, +.tox .tox-textarea:focus, +.tox .tox-focusable-wrapper:focus, +.tox .tox-custom-editor:focus-within { + background-color: #fff; + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-toolbar-textfield { + max-width: 250px; + min-height: unset; + height: 34px; + margin: 2px 0 3px 0; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #207ab7; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #222f3e; +} +.tox .tox-textfield-size { + width: 80px; +} +.tox:not([dir=rtl]) .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-toolbar-textfield + * { + margin-right: 4px; +} +.tox .tox-listboxfield { + cursor: pointer; + position: relative; +} +.tox .tox-listboxfield .tox-listbox--select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-listbox__select-label { + cursor: default; + flex: 1; + margin: 0 4px; +} +.tox .tox-listbox__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-listbox__select-chevron svg { + fill: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-listbox__select-chevron svg { + fill: currentColor !important; + } +} +.tox .tox-listboxfield .tox-listbox--select { + align-items: center; + display: flex; +} +.tox:not([dir=rtl]) .tox-listboxfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-listboxfield svg { + left: 8px; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + appearance: none; + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-selectfield select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield select:focus { + background-color: #fff; + border-color: #207ab7; + box-shadow: none; + outline: 2px solid rgba(32, 122, 183, 0.25); +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-selectfield select option:checked { + background-color: revert; + color: revert; +} +.tox:not([dir=rtl]) .tox-selectfield select[size="0"], +.tox:not([dir=rtl]) .tox-selectfield select[size="1"] { + padding-right: 24px; +} +.tox:not([dir=rtl]) .tox-selectfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-selectfield select[size="0"], +.tox[dir=rtl] .tox-selectfield select[size="1"] { + padding-left: 24px; +} +.tox[dir=rtl] .tox-selectfield svg { + left: 8px; +} +.tox .tox-textarea-wrap { + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + display: flex; + flex: 1; + overflow: hidden; +} +.tox .tox-textarea { + appearance: textarea; + white-space: pre-wrap; +} +.tox .tox-textarea-wrap .tox-textarea { + border: none; +} +.tox .tox-textarea-wrap .tox-textarea:focus { + border: none; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-help__more-link { + list-style: none; + margin-top: 1em; +} +.tox .tox-imagepreview { + background-color: #666; + height: 380px; + overflow: hidden; + position: relative; + width: 100%; +} +.tox .tox-imagepreview.tox-imagepreview__loaded { + overflow: auto; +} +.tox .tox-imagepreview__container { + display: flex; + left: 100vw; + position: absolute; + top: 100vw; +} +.tox .tox-imagepreview__image { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools .tox-spacer { + flex: 1; +} +.tox .tox-image-tools .tox-bar { + align-items: center; + display: flex; + height: 60px; + justify-content: center; +} +.tox .tox-image-tools .tox-imagepreview, +.tox .tox-image-tools .tox-imagepreview + .tox-bar { + margin-top: 8px; +} +.tox .tox-image-tools .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: 0.5; + position: absolute; + zoom: 1; +} +.tox .tox-image-tools .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-image-tools .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-image-tools .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-image-tools .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-image-selector-loading-spinner-wrapper { + display: flex; + justify-content: center; + align-items: center; +} +.tox .tox-image-selector-loading-spinner { + position: absolute; + width: min(24px, 30%); + aspect-ratio: 1; + border-radius: 50%; + border: 3px solid #207ab7; + border-bottom-color: transparent; + animation: tox-rotation 1s linear infinite; +} +.tox .tox-toolbar .tox-image-selector, +.tox .tox-toolbar__primary .tox-image-selector, +.tox .tox-toolbar__overflow .tox-image-selector { + margin: 2px 0 3px 4px; +} +.tox .tox-image-selector-menu { + border: 0; + border-radius: 3px; + margin: -4px 0; + padding: 4px; +} +.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group { + border: 0; + padding: 0; + margin: -4px 0; +} +.tox .tox-image-selector-menu .tox-collection__item { + max-width: 48px; +} +.tox .tox-image-selector-menu .tox-collection__item-icon { + border: 1px solid #cccccc; + border-radius: 3px; + margin-bottom: 4px; + width: 100%; +} +.tox .tox-image-selector-menu .tox-collection__item-icon svg path { + stroke: #c00; +} +.tox .tox-image-selector__row { + display: flex; +} +.tox .tox-image-selector--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-selector--remove svg path { + stroke: #c00; +} +.tox .tox-image-selector-image-wrapper { + width: 46px; + height: 46px; + display: flex; + align-items: center; + justify-content: center; +} +.tox .tox-image-selector-image-img { + max-width: 100%; + max-height: 100%; +} +.tox .tox-image-selector__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-image-selector__picker-btn svg { + fill: #222f3e; + height: 24px; + width: 24px; +} +.tox .tox-image-selector__picker-btn:hover { + background: #dee0e2; +} +.tox .tox-context-toolbar { + position: absolute; + position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline; + z-index: 1150; + background-color: #ffffff; + border: 1px solid #e0e0e0; + border-radius: 9px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); + padding: 4px; +} +.tox .tox-context-toolbar[popover] { + inset: auto; + margin: 0; +} +.tox .tox-context-toolbar .tox-toolbar { + display: flex; + flex-wrap: nowrap; + gap: 8px; +} +.tox .tox-context-toolbar .tox-toolbar__group { + display: flex; + flex-wrap: nowrap; + flex-shrink: 0; + gap: 4px; + align-items: center; +} +.tox .tox-insert-table-picker { + background-color: #fff; + display: flex; + flex-wrap: wrap; + width: 170px; +} +.tox .tox-insert-table-picker > div { + border-color: #cccccc; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: border-box; + height: 17px; + width: 17px; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: 0 -4px; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: rgba(32, 122, 183, 0.5); + border-color: rgba(32, 122, 183, 0.5); +} +@media (forced-colors: active) { + .tox .tox-insert-table-picker .tox-insert-table-picker__selected { + border-color: Highlight; + filter: contrast(50%); + } +} +.tox .tox-insert-table-picker__label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) { + border-right: 0; +} +.tox-mentions__card-common { + z-index: 1200; +} +.tox.tox-mentions__card { + background: #fff; + border: 1px solid #cccccc; + display: flex; + padding: 4px 8px; +} +.tox.tox-mentions__card .tox-mentions__container { + display: flex; + flex-direction: column; + align-self: center; + margin: 0 4px; +} +.tox .tox-mentions__avatar { + width: 42px; + height: 42px; + border-radius: 50%; + margin-right: 4px; +} +.tox .tox-mentions__username { + font-size: 14px; + line-height: 21px; + color: #222f3e; +} +.tox .tox-mentions__description { + font-size: 12px; + line-height: 21px; + color: rgba(34, 47, 62, 0.7); +} +.tox .tox-collection__item--active .tox-mentions__username, +.tox .tox-collection__item--active .tox-mentions__description { + color: inherit; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1150; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0 0; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 4px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 4px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-menu .tox-collection__item-label { + overflow-wrap: break-word; + word-break: normal; + } + .tox .tox-dialog__popups .tox-menu .tox-collection__item-label { + word-break: break-all; + } +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + grid-column: 1 / -1; + grid-row: 1; + padding: 0 4px 0 4px; +} +.tox .tox-promotion + .tox-menubar { + grid-column: 1; +} +.tox .tox-promotion { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + grid-column: 2; + grid-row: 1; + padding-inline-end: 8px; + padding-inline-start: 4px; + padding-top: 5px; +} +.tox .tox-promotion-link { + align-items: unsafe center; + background-color: #E8F1F8; + border-radius: 5px; + color: #086BE6; + cursor: pointer; + display: flex; + font-size: 14px; + height: 26.6px; + padding: 4px 8px; + white-space: nowrap; +} +.tox .tox-promotion-link:hover { + background-color: #B4D7FF; +} +.tox .tox-promotion-link:focus { + background-color: #D9EDF7; +} +/* Deprecated. Remove in next major release */ +.tox .tox-mbtn { + align-items: center; + background: #fff; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + padding: 0 4px; + text-transform: none; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #dee0e2; + border: 0; + box-shadow: none; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-mbtn:focus:not(:disabled)::after { + pointer-events: none; + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-mbtn:focus:not(:disabled)::after { + border: 2px solid highlight; + } +} +.tox .tox-mbtn--active, +.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus { + background: #c8cbcf; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { + background: #dee0e2; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + display: grid; + font-size: 14px; + font-weight: normal; + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-left: auto; + margin-right: auto; + margin-top: 4px; + opacity: 0; + padding: 4px; + transition: transform 100ms ease-in, opacity 150ms ease-in; + width: max-content; +} +.tox .tox-notification a { + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification p { + font-size: 14px; + font-weight: normal; +} +.tox .tox-notification:focus { + border-color: #207ab7; + box-shadow: none; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #e4eeda; + border-color: #d7e6c8; + color: #222f3e; +} +.tox .tox-notification--success p { + color: #222f3e; +} +.tox .tox-notification--success a { + color: #517342; +} +.tox .tox-notification--success a:hover, +.tox .tox-notification--success a:focus { + color: #24321d; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success a:focus-visible { + border-radius: 1px; + outline: 2px solid #517342; + outline-offset: 2px; +} +.tox .tox-notification--success a:active { + color: #0d120a; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--success svg { + fill: #222f3e; +} +.tox .tox-notification--error { + background-color: #f5cccc; + border-color: #f0b3b3; + color: #222f3e; +} +.tox .tox-notification--error p { + color: #222f3e; +} +.tox .tox-notification--error a { + color: #77181f; +} +.tox .tox-notification--error a:hover, +.tox .tox-notification--error a:focus { + color: #220709; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error a:focus-visible { + border-radius: 1px; + outline: 2px solid #77181f; + outline-offset: 2px; +} +.tox .tox-notification--error a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--error svg { + fill: #222f3e; +} +.tox .tox-notification--warn, +.tox .tox-notification--warning { + background-color: #fff5cc; + border-color: #fff0b3; + color: #222f3e; +} +.tox .tox-notification--warn p, +.tox .tox-notification--warning p { + color: #222f3e; +} +.tox .tox-notification--warn a, +.tox .tox-notification--warning a { + color: #7a6e25; +} +.tox .tox-notification--warn a:hover, +.tox .tox-notification--warning a:hover, +.tox .tox-notification--warn a:focus, +.tox .tox-notification--warning a:focus { + color: #2c280d; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn a:focus-visible, +.tox .tox-notification--warning a:focus-visible { + border-radius: 1px; + outline: 2px solid #7a6e25; + outline-offset: 2px; +} +.tox .tox-notification--warn a:active, +.tox .tox-notification--warning a:active { + color: #050502; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--warn svg, +.tox .tox-notification--warning svg { + fill: #222f3e; +} +.tox .tox-notification--info { + background-color: #d6e7fb; + border-color: #c1dbf9; + color: #222f3e; +} +.tox .tox-notification--info p { + color: #222f3e; +} +.tox .tox-notification--info a { + color: #2a64a6; +} +.tox .tox-notification--info a:hover, +.tox .tox-notification--info a:focus { + color: #163355; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info a:focus-visible { + border-radius: 1px; + outline: 2px solid #2a64a6; + outline-offset: 2px; +} +.tox .tox-notification--info a:active { + color: #0b1a2c; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-notification--info svg { + fill: #222f3e; +} +.tox .tox-notification__body { + align-self: center; + color: #222f3e; + font-size: 14px; + grid-column-end: 3; + grid-column-start: 2; + grid-row-end: 2; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + align-self: center; + grid-column-end: 2; + grid-column-start: 1; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + align-self: start; + grid-column-end: 4; + grid-column-start: 3; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + grid-column-end: 4; + grid-column-start: 1; + grid-row-end: 3; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-notification-container-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-notification-container-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-notification-container-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein { + transition-delay: 0s; +} +.tox .tox-onboarding-overlay { + height: 100%; + background-color: #f0f0f0; + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1302; + overflow: auto; + display: grid; + justify-content: center; + align-items: center; +} +.tox .tox-onboarding-dialog { + max-width: 512px; + background-color: #fff; + display: flex; + flex-direction: column; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + border-radius: 12px; + margin: 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-header { + color: #222f3e; + display: flex; + justify-content: center; + align-items: center; + font-size: 20px; + margin: 24px 0 8px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step { + display: grid; + grid-template-columns: min-content 1fr min-content; + align-items: center; + margin: 0 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child) { + border-bottom: 1px solid #c1c1c1; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--number { + width: 24px; + aspect-ratio: 1; + border-radius: 50%; + border: 1px solid #00AD0E; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + font-weight: bold; + color: #00AD0E; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body { + padding: 24px 0 24px 16px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-header { + color: #222f3e; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--body-details { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-onboarding-dialog .tox-onboarding-step--action { + padding-left: 24px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer { + background-color: #f0f0f0; + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px 24px; + border-bottom-left-radius: 12px; + border-bottom-right-radius: 12px; +} +.tox .tox-onboarding-dialog .tox-onboarding-footer p { + display: flex; + align-items: center; + justify-content: center; + gap: 4px; + font-size: 14px; + color: rgba(34, 47, 62, 0.7); +} +.tox .tox-onboarding-dialog svg { + width: 24px; + fill: rgba(34, 47, 62, 0.7); +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin { + display: grid; + align-items: center; + grid-template-columns: min-content 1fr min-content; + border-bottom: 1px solid #c1c1c1; + padding: 24px 0; + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body { + margin: 0 16px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header { + color: #222f3e; + font-size: 14px; + font-weight: bold; + margin-bottom: 4px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon { + display: grid; + place-content: center; + width: 56px; + height: 56px; + line-height: 24px; + font-size: 24px; + border-radius: 12px; + background: linear-gradient(180deg, #fff 24%, #f0f0f0 100%); + box-shadow: 0px 1px 1px 0px #222f3e12, 0px 3px 6px 0px #222f3e06; + color: #207ab7; +} +.tox .tox-promotion-dialog--subtitle { + margin: 16px; + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore { + text-align: center; + margin: 16px; + color: rgba(34, 47, 62, 0.7); + font-size: 14px; +} +.tox .tox-promotion-dialog--explore a { + color: #207ab7; +} +.tox .tox-promotion-dialog--footer { + background-color: #f0f0f0; + color: rgba(34, 47, 62, 0.7); + font-size: 12px; + text-align: center; + padding: 16px; +} +.tox .tox-promotion-button { + display: flex; + align-items: center; + height: 26.6px; + line-height: 26.6px; + font-size: 14px; + font-weight: bold; + background-color: #F1EBF9; + color: #851AFF; + padding: 8px 16px; + cursor: pointer; + white-space: nowrap; + border-radius: 5px; +} +.tox .tox-promotion-button:focus { + outline: 1px solid #851AFF; +} +.tox .tox-onboarding-dialog a, +.tox .tox-promotion-dialog--footer a { + color: rgba(34, 47, 62, 0.7); + cursor: pointer; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:hover, +.tox .tox-promotion-dialog--footer a:hover, +.tox .tox-onboarding-dialog a:focus, +.tox .tox-promotion-dialog--footer a:focus { + color: #0a1620; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-onboarding-dialog a:focus-visible, +.tox .tox-promotion-dialog--footer a:focus-visible { + border-radius: 1px; + outline: 2px solid #214d6e; + outline-offset: 2px; +} +.tox .tox-onboarding-dialog a:active, +.tox .tox-promotion-dialog--footer a:active { + color: #000000; + -webkit-text-decoration: underline; + text-decoration: underline; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width 0.1s ease; +} +.tox .tox-pop--resizing .tox-toolbar, +.tox .tox-pop--resizing .tox-toolbar__group { + flex-wrap: nowrap; +} +.tox .tox-pop--transition { + transition: 0.15s ease; + transition-property: left, right, top, bottom; +} +.tox .tox-pop--transition::before, +.tox .tox-pop--transition::after { + transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s; +} +.tox .tox-pop__dialog { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; + margin-bottom: -1px; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + opacity: 1; + position: absolute; + width: 0; +} +@media (forced-colors: active) { + .tox .tox-pop::before, + .tox .tox-pop::after { + content: none; + } +} +.tox .tox-pop.tox-pop--inset::before, +.tox .tox-pop.tox-pop--inset::after { + opacity: 0; + transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #fff transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #cccccc transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #fff transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #cccccc transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #fff transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #cccccc transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #fff; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #cccccc; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + background-color: var(--tox-private-sidebar-background-color, #f0f0f0); + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width 0.5s ease, opacity 0.5s ease; +} +.tox .tox-sidebar-content { + display: flex; + flex-direction: column; + position: relative; + height: 100%; + min-width: 300px; + max-width: 300px; + width: 300px; + border-left: 1px solid var(--tox-private-sidebar-border-color, #e3e3e3); +} +.tox .tox-sidebar-content__header { + align-items: center; + display: flex; + justify-content: space-between; + box-shadow: var(--tox-private-sidebar-header-box-shadow, 0 4px 8px 0 rgba(34, 47, 62, 0.1)); + padding: var(--tox-private-pad-sm, 8px) 12px; + background: var(--tox-private-background-color, #fff); + z-index: 1; +} +.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button { + margin-left: auto; +} +.tox .tox-sidebar-content__title { + font-size: var(--tox-private-font-size-lg, 20px); + font-weight: var(--tox-private-font-weight-normal, normal); + padding: var(--tox-private-pad-sm, 8px) 0 var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #222f3e); + line-height: 28px; +} +.tox .tox-floating-sidebar { + --tox-private-floating-sidebar-requested-height: 600px; + --tox-private-floating-sidebar-width: min(380px, 90vw); + --tox-private-floating-sidebar-height: min(var(--tox-private-floating-sidebar-requested-height), 80vh); + box-shadow: var(--tox-private-floating-sidebar-box-shadow, 0 0 40px 1px rgba(34, 47, 62, 0.15), 0 16px 16px -10px rgba(34, 47, 62, 0.15)); + width: var(--tox-private-floating-sidebar-width); + height: var(--tox-private-floating-sidebar-height); + background-color: var(--tox-private-background-color, #fff); + border-radius: 12px; + overflow: hidden; +} +.tox .tox-floating-sidebar__content-wrapper { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.tox .tox-floating-sidebar__header { + position: relative; +} +.tox-ai .tox-ai__user-prompt { + display: flex; + flex-direction: column; + margin-left: auto; + gap: inherit; +} +.tox-ai .tox-ai__user-prompt__context { + margin-left: auto; +} +.tox-ai .tox-ai__user-prompt__text { + background-color: var(--tox-private-ai-user-prompt-background, #f0f0f0); + padding: var(--tox-private-pad-sm, 8px) 12px; + border-radius: var(--tox-private-control-border-radius, 3px); + max-width: 80%; + align-self: flex-end; + color: var(--tox-private-text-color, #222f3e); +} +.tox-ai .tox-ai__scroll { + overflow: auto; + background-color: var(--tox-private-background-color, #fff); + display: flex; + padding: 12px; + flex-direction: column; + align-items: flex-start; + gap: 12px; + flex: 1 0 0; + align-self: stretch; +} +.tox-ai .tox-ai__response-content { + padding: var(--tox-private-pad-sm, 8px) 0; + color: var(--tox-private-text-color, #222f3e); + font-feature-settings: 'liga' off, 'clig' off; + font-size: var(--tox-private-font-size-sm, 14px); + font-style: normal; + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-line-height, 18px); + white-space: pre-wrap; +} +.tox-ai .tox-ai__response.tox-ai__response-streaming { + background: linear-gradient(180deg, var(--tox-private-color-black, #222f3e) 0%, transparent 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.tox-ai .tox-ai__error-message { + border-radius: var(--tox-private-panel-border-radius, 3px); + border: 1px solid var(--tox-private-color-error, #c00); + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-error, #c00); + padding: var(--tox-private-pad-sm, 8px); + width: 100%; +} +.tox-ai .tox-ai__footer { + border-top: 1px solid var(--tox-private-ai-footer-border-color, #e3e3e3); + padding: 12px; + gap: var(--tox-private-pad-sm, 8px); + background-color: var(--tox-private-background-color, #fff); + display: flex; + flex-direction: column; +} +.tox-ai .tox-ai__context { + display: flex; + gap: 8px; +} +.tox-ai .tox-ai__footer-actions { + display: flex; + gap: var(--tox-private-pad-sm, 8px); +} +.tox .tox-selector { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: inline-block; + height: 10px; + position: absolute; + width: 10px; +} +.tox.tox-platform-touch .tox-selector { + height: 12px; + width: 12px; +} +.tox .tox-skeleton .tox-skeleton__line { + height: 16px; + width: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +.tox .tox-skeleton .tox-skeleton__circle { + height: 36px; + width: 36px; + margin-right: 8px; + border-radius: 100%; + background: linear-gradient(to right, rgba(240, 240, 240, 0.5) 8%, rgba(240, 240, 240, 0.7) 18%, rgba(240, 240, 240, 0.5) 33%); + animation: wave 2s infinite ease-out; +} +@keyframes wave { + 0% { + background-position: -268px 0; + } + 100% { + background-position: 268px 0; + } +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #cccccc; + border-radius: 3px; + height: 10px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #207ab7; + border: 2px solid #185d8c; + border-radius: 3px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 14px; +} +.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) { + margin-inline-start: 8px; +} +.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider { + margin-inline-start: 32px; +} +.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group { + margin-inline-start: 32px; +} +.tox .tox-toolbar-slider { + align-items: center; + display: inline-flex; + height: 16px; +} +.tox .tox-toolbar-slider__input { + appearance: none; + background: #cccccc; + border-radius: 16px; + width: 130px; + height: 2px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-track { + background-color: transparent; + height: 16px; +} +.tox .tox-toolbar-slider__input::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #207ab7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input::-moz-range-thumb { + appearance: none; + background-color: #207ab7; + border-radius: 16px; + border: none; + height: 16px; + width: 16px; +} +.tox .tox-toolbar-slider__input:focus-visible { + outline: none; +} +.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb { + background-color: #1c6ca1; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #207ab7; +} +.tox .tox-toolbar-slider__input:focus::-moz-range-thumb { + background-color: #1c6ca1; + box-shadow: inset 0 0 0 1px #fff, 0 0 0 2px #207ab7; +} +.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb { + background-color: #1c6ca1; +} +.tox .tox-toolbar-slider__input:hover::-moz-range-thumb { + background-color: #1c6ca1; +} +.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb { + background-color: #185d8c; +} +.tox .tox-toolbar-slider__input:active::-moz-range-thumb { + background-color: #185d8c; +} +.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb { + background-color: rgba(255, 255, 255, 0.5); +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(34, 47, 62, 0.7); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-spinner > div:not(:first-child) { + margin-right: 4px; +} +.tox .tox-ai__spinner { + width: 24px; + height: 24px; +} +.tox .tox-statusbar { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + color: rgba(34, 47, 62, 0.7); + display: flex; + flex: 0 0 auto; + font-size: 12px; + font-weight: normal; + height: 18px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: uppercase; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__right-container { + display: flex; + justify-content: flex-end; + white-space: nowrap; +} +.tox .tox-statusbar__help-text { + text-align: center; +} +.tox .tox-statusbar__text-container { + align-items: flex-start; + display: flex; + flex: 1 1 auto; + height: 16px; + justify-content: space-between; +} +@media only screen and (min-width: 768px ) { + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__help-text, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__right-container, + .tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols > .tox-statusbar__path { + flex: 0 0 calc(100% / 3); + } +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end { + justify-content: flex-end; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start { + justify-content: flex-start; +} +.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around { + justify-content: space-around; +} +.tox .tox-statusbar__path > * { + display: inline; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount { + flex: 0 0 auto; + margin-left: 1ch; +} +@media only screen and (max-width: 767px ) { + .tox .tox-statusbar__text-container .tox-statusbar__help-text { + display: none; + } + .tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child { + display: block; + } +} +.tox .tox-statusbar a, +.tox .tox-statusbar__path-item, +.tox .tox-statusbar__wordcount { + color: rgba(34, 47, 62, 0.7); + position: relative; + -webkit-text-decoration: none; + text-decoration: none; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #222f3e; + cursor: pointer; +} +.tox .tox-statusbar a:focus-visible::after, +.tox .tox-statusbar__path-item:focus-visible::after, +.tox .tox-statusbar__wordcount:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar a:focus-visible::after, + .tox .tox-statusbar__path-item:focus-visible::after, + .tox .tox-statusbar__wordcount:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__branding svg { + fill: rgba(34, 47, 62, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #222f3e; +} +.tox .tox-statusbar__resize-cursor-default { + cursor: ns-resize; +} +.tox .tox-statusbar__resize-cursor-both { + cursor: nwse-resize; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-bottom: 3px; + margin-left: 4px; + margin-right: calc(3px - 8px); + margin-top: 3px; + padding-bottom: 0; + padding-left: 0; + padding-right: 0; + position: relative; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-statusbar__resize-handle:hover svg, +.tox .tox-statusbar__resize-handle:focus svg { + fill: #222f3e; +} +.tox .tox-statusbar__resize-handle:focus-visible { + background-color: transparent; + border-radius: 1px 1px -4px 1px; + box-shadow: 0 0 0 2px transparent; +} +.tox .tox-statusbar__resize-handle:focus-visible::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-statusbar__resize-handle:focus-visible::after { + border: 2px solid highlight; + } +} +.tox .tox-statusbar__resize-handle:only-child { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-statusbar__path > * { + margin-right: 4px; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 2ch; +} +.tox[dir=rtl] .tox-statusbar { + flex-direction: row-reverse; +} +.tox[dir=rtl] .tox-statusbar__path > * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-tag { + width: -moz-fit-content; + width: fit-content; + display: flex; + padding: 4px 6px; + align-items: center; + gap: 4px; + border-radius: 3px; + background: linear-gradient(0deg, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 0%, color-mix(in srgb, var(--tox-private-color-white, #fff) 90%, transparent) 100%), var(--tox-private-color-tint, #207ab7); + line-height: var(--tox-private-base-value, 16px); + font-size: var(--tox-private-font-size-xs, 12px); +} +.tox .tox-tag .tox-tag__icon { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close { + height: var(--tox-private-base-value, 16px); +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon { + border: 0; + padding: 0; +} +.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before { + box-shadow: none; +} +.tox .tox-throbber { + z-index: 1299; +} +.tox .tox-throbber__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.6); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-toggle { + display: flex; + align-items: center; + gap: var(--tox-private-pad-xs, 4px); + padding: var(--tox-private-pad-xs, 4px); + font-weight: var(--tox-private-font-weight-normal, normal); + line-height: var(--tox-private-control-line-height, 24px); + white-space: nowrap; + background-color: var(--tox-private-background-color, #fff); + color: var(--tox-private-text-color, #222f3e); +} +.tox .tox-toggle input { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} +.tox .tox-toggle__slider { + position: relative; + cursor: pointer; + box-sizing: border-box; + transition: 0.4s; + border-radius: 34px; + width: 28px; + height: 16px; + background-color: var(--tox-private-slider-background-color, #fff); + border: 1px solid var(--tox-private-slider-border-color, #e3e3e3); +} +.tox .tox-toggle__slider::before { + position: absolute; + content: ""; + height: 12px; + width: 12px; + left: 1px; + bottom: 1px; + transition: 0.4s; + border-radius: 50%; + background-color: var(--tox-private-slider-handle-background-color, #222f3e); +} +.tox input:checked + .tox-toggle__slider { + background-color: var(--tox-private-slider-checked-background-color, #207ab7); + border: 1px solid var(--tox-private-slider-checked-border-color, #207ab7); +} +.tox input:focus + .tox-toggle__slider { + box-shadow: 0 0 0 1px var(--tox-private-color-white, #fff), 0 0 0 2px var(--tox-private-color-tint, #207ab7); +} +.tox input:checked + .tox-toggle__slider::before { + transform: translateX(12px); + background-color: var(--tox-private-slider-checked-handle-background-color, #fff); +} +.tox input:disabled + .tox-toggle__slider::before { + opacity: 50%; +} +.tox .tox-tbtn { + align-items: center; + background: #fff; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 3px 0 2px 0; + outline: none; + padding: 0; + text-transform: none; + width: 34px; +} +.tox .tox-tbtn .tox-tbtn__icon-wrap { + pointer-events: none; +} +@media (forced-colors: active) { + .tox .tox-tbtn:hover, + .tox .tox-tbtn.tox-tbtn:hover { + outline: 1px dashed currentColor; + } + .tox .tox-tbtn.tox-tbtn--active, + .tox .tox-tbtn.tox-tbtn--enabled, + .tox .tox-tbtn.tox-tbtn--enabled:hover, + .tox .tox-tbtn.tox-tbtn--enabled:focus, + .tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + outline: 1px solid currentColor; + position: relative; + } +} +.tox .tox-tbtn svg { + display: block; + fill: #222f3e; +} +@media (forced-colors: active) { + .tox .tox-tbtn svg { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--enabled, + .tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled) { + fill: currentColor !important; + } + .tox .tox-tbtn svg.tox-tbtn--disabled, + .tox .tox-tbtn svg.tox-tbtn--disabled:hover, + .tox .tox-tbtn svg .tox-tbtn:disabled, + .tox .tox-tbtn svg .tox-tbtn:disabled:hover { + filter: contrast(0%); + } +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn:focus { + background: #dee0e2; + border: 0; + box-shadow: none; + position: relative; + z-index: 1; +} +.tox .tox-tbtn:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:hover { + background: #dee0e2; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tbtn:active { + background: #c8cbcf; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:active svg { + fill: #222f3e; +} +.tox .tox-tbtn--disabled .tox-tbtn--enabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--active, +.tox .tox-tbtn--enabled, +.tox .tox-tbtn--enabled:hover, +.tox .tox-tbtn--enabled:focus { + background: #c8cbcf; + border: 0; + box-shadow: none; + color: #222f3e; + position: relative; +} +.tox .tox-tbtn--active > *, +.tox .tox-tbtn--enabled > *, +.tox .tox-tbtn--enabled:hover > *, +.tox .tox-tbtn--enabled:focus > * { + transform: none; +} +.tox .tox-tbtn--active svg, +.tox .tox-tbtn--enabled svg, +.tox .tox-tbtn--enabled:hover svg, +.tox .tox-tbtn--enabled:focus svg { + fill: #222f3e; +} +.tox .tox-tbtn--active.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--enabled:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-tbtn--enabled:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + color: #222f3e; +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 51px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 68px; + width: 68px; +} +.tox .tox-tbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-label--context-toolbar { + margin: 6px 1px 5px 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; +} +.tox .tox-number-input { + background: transparent; + border-radius: 3px; + display: flex; + margin: 3px 0 2px 0; + position: relative; + width: auto; +} +.tox .tox-number-input:focus { + background: #dee0e2; +} +.tox .tox-number-input:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper { + display: flex; + pointer-events: none; + position: relative; + text-align: center; +} +.tox .tox-number-input .tox-input-wrapper:focus { + background-color: #dee0e2; + z-index: 1; +} +.tox .tox-number-input .tox-input-wrapper:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input .tox-input-wrapper:has(input:focus)::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input input { + border-radius: 3px; + color: #222f3e; + font-size: 14px; + margin: 2px 0; + pointer-events: all; + position: relative; + width: 60px; +} +.tox .tox-number-input input:hover { + background: #dee0e2; + color: #222f3e; +} +.tox .tox-number-input input:focus { + background-color: #dee0e2; +} +.tox .tox-number-input input:disabled { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button { + color: #222f3e; + height: 34px; + position: relative; + text-align: center; + width: 24px; +} +@media (forced-colors: active) { + .tox .tox-number-input button:hover, + .tox .tox-number-input button:focus, + .tox .tox-number-input button:active { + outline: 1px solid currentColor !important; + } +} +.tox .tox-number-input button svg { + display: block; + fill: #222f3e; + margin: 0 auto; + transform: scale(0.67); +} +@media (forced-colors: active) { + .tox .tox-number-input button svg, + .tox .tox-number-input button svg:active, + .tox .tox-number-input button svg:hover { + fill: currentColor !important; + } + .tox .tox-number-input button svg:disabled { + filter: contrast(0); + } +} +.tox .tox-number-input button:focus { + background: #dee0e2; + z-index: 1; +} +.tox .tox-number-input button:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; +} +@media (forced-colors: active) { + .tox .tox-number-input button:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-number-input button:hover { + background: #dee0e2; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:hover svg { + fill: #222f3e; +} +.tox .tox-number-input button:active { + background: #c8cbcf; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:active svg { + fill: #222f3e; +} +.tox .tox-number-input button:disabled { + background: #fff; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button:disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-number-input button.minus { + border-radius: 3px 0 0 3px; +} +.tox .tox-number-input button.plus { + border-radius: 0 3px 3px 0; +} +.tox .tox-number-input:focus:not(:active) > button, +.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper { + background: #dee0e2; +} +.tox .tox-tbtn--select { + margin: 3px 0 2px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #cccccc; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + height: initial; + margin: 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +@media (forced-colors: active) { + .tox .tox-tbtn__select-chevron svg { + fill: currentColor; + } +} +.tox .tox-tbtn--bespoke { + background: transparent; +} +.tox .tox-tbtn--bespoke:focus { + background: #dee0e2; +} +.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke { + margin-inline-start: 0; +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-tbtn--disabled .tox-tbtn__select-label, +.tox .tox-tbtn--select:disabled .tox-tbtn__select-label { + cursor: not-allowed; +} +.tox .tox-split-button__main { + border-radius: 3px 0 0 3px; + margin-right: 0; +} +.tox .tox-split-button__main:focus { + border: 0; + box-shadow: none; + background: #dee0e2; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-split-button__main:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px 0 0 3px; +} +@media (forced-colors: active) { + .tox .tox-split-button__main:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron { + width: 16px; + border-radius: 0 3px 3px 0; + margin-left: 0; +} +.tox .tox-split-button__chevron:focus { + border: 0; + box-shadow: none; + background: #dee0e2; + color: #222f3e; + position: relative; + z-index: 1; +} +.tox .tox-split-button__chevron:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 0 3px 3px 0; +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-split-button__chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +@media (forced-colors: active) { + .tox .tox-split-button__chevron svg { + fill: currentColor; + } +} +.tox.tox-platform-touch .tox-split-button__main { + width: 30px; +} +.tox.tox-platform-touch .tox-split-button__chevron { + width: 20px; +} +.tox .tox-split-button__main.tox-tbtn--disabled, +.tox .tox-split-button__chevron.tox-tbtn--disabled { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:hover, +.tox .tox-split-button__chevron.tox-tbtn--disabled:hover { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled:focus, +.tox .tox-split-button__chevron.tox-tbtn--disabled:focus { + background: #fff; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color, +.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color { + opacity: 0.3; +} +.tox .tox-toolbar-overlord { + background-color: #fff; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background-attachment: local; + background-color: #fff; + background-image: repeating-linear-gradient(#cccccc 0 1px, transparent 1px 39px); + background-position: center top 39px; + background-repeat: no-repeat; + background-size: calc(100% - 4px * 2) calc(100% - 39px); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + padding: 0 0px; + transform: perspective(1px); +} +.tox .tox-toolbar-overlord > .tox-toolbar, +.tox .tox-toolbar-overlord > .tox-toolbar__primary, +.tox .tox-toolbar-overlord > .tox-toolbar__overflow { + background-position: center top 0px; + background-size: calc(100% - 4px * 2) calc(100% - 0px); +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + height: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; + visibility: hidden; +} +.tox .tox-toolbar__overflow--growing { + transition: height 0.3s ease, opacity 0.2s linear 0.1s; +} +.tox .tox-toolbar__overflow--shrinking { + transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s; +} +.tox .tox-toolbar-overlord, +.tox .tox-anchorbar { + grid-column: 1 / -1; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: 1px solid #cccccc; + margin-top: -1px; + padding-bottom: 0; + padding-top: 0; +} +@media (forced-colors: active) { + .tox .tox-menubar + .tox-toolbar, + .tox .tox-menubar + .tox-toolbar-overlord { + outline: 1px solid currentColor; + } +} +.tox .tox-toolbar--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, +.tox .tox-toolbar-overlord .tox-toolbar__primary { + background-position: center top 39px; +} +.tox .tox-editor-header > .tox-toolbar--scrolling, +.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { + background-image: none; +} +.tox .tox-focusable-wrapper { + border: 1px solid transparent; + margin-right: 2px; + pointer-events: none; +} +.tox .tox-focusable-wrapper .tox-textfield-size { + pointer-events: all; +} +.tox .tox-focusable-wrapper:focus { + background-color: #dee0e2; + border-radius: 3px; + border-style: solid; + border-width: 1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + background-color: #fff; + background-position: center top 43px; + background-size: calc(100% - 8px * 2) calc(100% - 51px); + border: none; + border-radius: 3px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + overscroll-behavior: none; + padding: 4px 0; +} +@media (forced-colors: active) { + .tox.tox-tinymce-aux .tox-toolbar__overflow { + border: solid; + } +} +.tox-pop .tox-pop__dialog .tox-toolbar { + background-position: center top 43px; + background-size: calc(100% - 4px * 2) calc(100% - 51px); + padding: 4px 0; +} +.tox-context-form__group { + display: flex; + align-items: center; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 4px 0 4px; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-toolbar--scrolling .tox-toolbar__group { + flex-shrink: 0; + flex-wrap: nowrap; +} +.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid #cccccc; +} +.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { + border-left: 1px solid #cccccc; +} +.tox .tox-tooltip { + display: inline-block; + max-width: min(80%, 15em); + padding: 8px 0 0 0; + position: relative; + width: max-content; + z-index: 1150; +} +.tox .tox-tooltip__body { + background-color: #222f3e; + border-radius: 3px; + box-shadow: none; + color: #fff; + font-size: 12px; + font-style: normal; + font-weight: 600; + overflow-wrap: break-word; + padding: 4px 6px; + text-transform: none; +} +@media (forced-colors: active) { + .tox .tox-tooltip__body { + outline: outset 1px; + } +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #222f3e; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #222f3e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #222f3e; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #222f3e; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tree { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-trbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + margin-bottom: 4px; + margin-top: 4px; + outline: none; + overflow: hidden; + padding: 0; + padding-left: 8px; + text-transform: none; +} +.tox .tox-tree .tox-trbtn .tox-tree__label { + cursor: default; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tree .tox-trbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus { + background: #dee0e2; + border: 0; + box-shadow: none; +} +.tox .tox-tree .tox-trbtn:hover { + background: #dee0e2; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active { + background: #b1d0e6; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:active svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn--disabled, +.tox .tox-tree .tox-trbtn--disabled:hover, +.tox .tox-tree .tox-trbtn:disabled, +.tox .tox-tree .tox-trbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tree .tox-trbtn--disabled svg, +.tox .tox-tree .tox-trbtn--disabled:hover svg, +.tox .tox-tree .tox-trbtn:disabled svg, +.tox .tox-tree .tox-trbtn:disabled:hover svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tree .tox-trbtn--enabled, +.tox .tox-tree .tox-trbtn--enabled:hover { + background: #b1d0e6; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn--enabled > *, +.tox .tox-tree .tox-trbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--enabled svg, +.tox .tox-tree .tox-trbtn--enabled:hover svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tree .tox-trbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tree .tox-trbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tree .tox-tree--directory { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label { + font-weight: bold; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { + margin-right: 6px; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { + transition: transform 0.5s ease-in-out; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { + transform: rotate(90deg); +} +.tox .tox-tree .tox-tree--leaf__label { + font-weight: normal; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-icon-custom-state { + flex-grow: 1; + display: flex; + justify-content: flex-end; +} +.tox .tox-tree .tox-tree--directory__children { + overflow: hidden; + padding-left: 16px; +} +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { + transition: height 0.5s ease-in-out; +} +.tox .tox-tree .tox-trbtn.tox-tree--leaf__label { + display: flex; + justify-content: space-between; +} +[data-mce-name="uploadcare-enhance-filter"] .color-swatch-remove-color path { + fill: #c00; + stroke: #c00; +} +.tox .tox-view-wrap, +.tox .tox-view-wrap__slot-container { + background-color: #fff; + display: flex; + flex: 1; + flex-direction: column; + height: 100%; +} +.tox .tox-view { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; + background-color: #fff; +} +.tox .tox-view__header { + align-items: center; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px; + position: relative; +} +.tox .tox-view__label { + color: #222f3e; + font-weight: bold; + line-height: 24px; + padding: 4px 16px; + text-align: center; + white-space: nowrap; +} +.tox .tox-view__label--normal { + font-size: 16px; +} +.tox .tox-view__label--large { + font-size: 20px; +} +.tox .tox-view--mobile.tox-view__header, +.tox .tox-view--mobile.tox-view__toolbar { + padding: 8px; +} +.tox .tox-view--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-view__align-right { + margin-left: auto; +} +.tox .tox-view__toolbar { + display: flex; + flex-direction: row; + gap: 8px; + justify-content: space-between; + overflow-x: auto; + padding: 8px; +} +.tox .tox-view__toolbar__group { + display: flex; + flex-direction: row; + gap: 12px; +} +.tox .tox-view__header-start, +.tox .tox-view__header-end { + display: flex; +} +.tox .tox-view__pane { + height: 100%; + padding: 8px; + position: relative; + width: 100%; +} +.tox .tox-view__pane_panel { + border: 1px solid #cccccc; + border-radius: 3px; +} +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *, +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-view__header .tox-view__header-start > *, +.tox[dir=rtl] .tox-view__header .tox-view__header-end > * { + margin-right: 8px; +} +.tox .tox-well { + border: 1px solid #cccccc; + border-radius: 3px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #cccccc; + border-radius: 3px; + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-view .tox-revisionhistory__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-revisionhistory__container { + display: flex; + flex-direction: column; + height: 100%; +} +.tox .tox-revisionhistory { + background-color: #fff; + border-top: 1px solid #f0f0f0; + display: flex; + flex: 1; + height: 100%; + overflow-x: auto; + overflow-y: hidden; + position: relative; + width: 100%; +} +.tox .tox-revisionhistory__iframe { + flex: 1; +} +.tox .tox-revisionhistory__sidebar { + display: flex; + flex-direction: column; + height: 100%; + min-width: 248px; + width: 316px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title { + background-color: #fff; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + color: #222f3e; + font-size: 20px; + font-weight: 400; + line-height: 28px; + padding: 12px; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions { + background-color: #f0f0f0; + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow-y: auto; + padding: 10px 12px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus { + height: 100%; + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + bottom: 0; + box-shadow: 0 0 0 0 transparent ; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 3px; + bottom: 1px; + left: 1px; + right: 1px; + top: 1px; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card { + background-color: #fff; + border: 1px solid #f0f0f0; + border-radius: 6px; + color: #222f3e; + cursor: pointer; + display: flex; + flex-direction: column; + font-size: 14px; + padding: 12px; + width: 100%; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover { + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus { + position: relative; + z-index: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent #006ce7; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #006ce7; + box-shadow: 0 0 0 2px #006ce7 !important; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected { + background-color: #fff5cc; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + position: relative; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border-radius: 3px; + bottom: 0; + box-shadow: 0 0 0 0 transparent #e3b82a; + content: ''; + left: 0; + position: absolute; + right: 0; + top: 0; + border-radius: 6px; + box-shadow: 0 0 0 2px #e3b82a; +} +@media (forced-colors: active) { + .tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after { + border: 2px solid highlight; + } +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label { + display: block; + width: min-content; + padding: 4px 8px; + margin-bottom: 8px; + font-size: 12px; + font-weight: bold; + border-radius: 4px; + background: #d3d5d8; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content { + display: flex; + flex-direction: row; + gap: 8px; + align-items: center; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info { + display: flex; + flex-direction: column; + flex: 1; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label { + font-size: 14px; + font-weight: bold; + line-height: 18px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 12px; + font-weight: normal; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision { + color: rgba(34, 47, 62, 0.7); + font-size: 16px; + line-height: 24px; + padding: 5px 5.5px; +} +.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon { + color: #222f3e; + height: 24px; +} +.tox [data-mce-name="suggestededits"] .tox-icon .tox-icon--badge { + fill: #207ab7; +} +.tox .tox-view .tox-suggestededits__pane { + padding: 0; + /* Override the default padding of tox-view__pane */ +} +.tox .tox-suggestededits__sink { + position: relative; + z-index: 1000; +} +.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list { + position: absolute; +} +.tox .tox-suggestededits__container { + height: 100%; + /* TINY-12393: Improve height calculation */ + display: flex; + flex-direction: column; +} +.tox .tox-suggestededits__container .tox-suggestededits { + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + flex: 1; + height: inherit; + overflow-x: auto; + overflow-y: hidden; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content { + flex: 1; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model { + height: 100%; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe { + height: 100%; + width: 100%; + overflow: scroll; + background-color: #fff; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar { + background-color: #f0f0f0; + display: flex; + flex-direction: column; + flex: 0 1 auto; + min-width: 248px; + width: 316px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header { + padding: 4px 12px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content { + display: flex; + flex: 1; + flex-direction: column; + gap: 12px; + overflow: auto; + padding: 6px 12px 12px 12px; + position: relative; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card { + background-color: #fff; + border-radius: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider { + background-color: #f0f0f0; + height: 1px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor { + align-items: flex-start; + align-self: stretch; + display: flex; + flex-direction: column; + gap: 6px; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header { + display: flex; + flex: auto; + justify-content: space-between; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img { + height: 24px; + width: 24px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #222f3e; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user { + display: flex; + align-items: center; + flex: 1 0 0; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar { + height: 36px; + width: 36px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name { + color: #222f3e; + font-size: 14px; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution { + align-items: center; + border: 0; + border-radius: 20px; + height: 20px; + width: 20px; + display: flex; + flex: 0 0 auto; + justify-content: center; + text-align: center; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg { + fill: #78AB46; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg { + fill: #c00; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content { + display: flex; + flex-direction: column; + align-self: stretch; + flex: auto; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations { + display: flex; + gap: 8px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar { + align-items: center; + border-radius: 6px; + display: flex; + flex-direction: column; + font-size: 12px; + justify-content: space-between; + width: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert { + background-color: #78AB46; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify { + background-color: #207ab7; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove { + background-color: #c00; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text { + color: #222f3e; + font-weight: bold; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback { + color: #222f3e; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea { + border: 2px solid #cccccc; + border-radius: 6px; + color: #222f3e; + gap: 8px; + padding: 5px 6px; + resize: none; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus { + border: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer { + display: flex; + flex-direction: column; + gap: 6px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg { + fill: #222F3E80; + transform: translate(0px, 8px); + margin-top: -10px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons { + display: flex; + align-items: center; + gap: 8px; + width: 100%; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons { + justify-content: space-between; + padding: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons { + justify-content: flex-end; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden { + opacity: 0.5; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved { + background-color: #d3d5d8; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible { + outline: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single { + border-radius: 6px; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus, +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible { + outline: 2px solid #207ab7; +} +.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover { + box-shadow: 0 4px 8px 0 #d3d5d8; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: none; + padding: 0; +} +.tox.tox-tinymce--toolbar-bottom .tox-editor-header, +.tox.tox-tinymce-inline .tox-editor-header { + margin-bottom: -1px; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: hidden; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: none; + box-shadow: none; +} +.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: transparent; + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); + padding: 0; +} +.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 4px 4px -3px rgba(0, 0, 0, 0.25); +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px 0; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0; +} +.tox .tox-pop { + box-shadow: none; +} +.tox .tox-tbtn, +.tox .tox-label, +.tox .tox-number-input, +.tox .tox-tbtn--select, +.tox .tox-split-button, +.tox .tox-toolbar-label { + margin: 2px 0 3px 0; +} +.tox .tox-tbtn--bordered, +.tox .tox-tbtn--bordered:focus, +.tox .tox-tbtn--bordered:hover { + border: 1px solid #cccccc; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff !important; +} +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: none; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord .tox-toolbar__primary { + border-top: 1px solid #cccccc; + margin-top: -1px; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + border: 1px solid #cccccc; + padding: 0; +} +.tox .tox-pop .tox-pop__dialog .tox-toolbar { + padding: 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar { + border-top: 1px solid #cccccc; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary, +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child { + border-top: 1px solid #cccccc; +} +.tox .tox-toolbar__group { + padding: 0 4px 0 4px; +} +.tox .tox-collection__item { + border-radius: 0; + cursor: pointer; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #222f3e; +} +.tox .tox-statusbar__branding svg { + fill: rgba(34, 47, 62, 0.8); + height: 1em; + margin-left: 0.3em; + width: auto; +} +@media (forced-colors: active) { + .tox .tox-statusbar__branding svg { + fill: currentColor; + } +} +.tox .tox-statusbar__branding a { + align-items: center; + display: inline-flex; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #222f3e; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 1ch; +} +.tox[dir=rtl] .tox-statusbar__branding svg { + margin-left: 0; + margin-right: 0.3em; +} +.tox .tox-statusbar__resize-handle { + padding-bottom: 0; + padding-right: 0; +} +.tox .tox-button::before { + display: none; +} diff --git a/public/tinymce/skins/ui/tinymce-5/skin.js b/public/tinymce/skins/ui/tinymce-5/skin.js new file mode 100644 index 0000000..17ba9d6 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/tinymce-5/skin.css', `.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:1px solid #ccc;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #ccc;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#222f3e}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#e9f2f8;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#fffae6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#fae6e6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#ccc;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,3px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,3px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #207ab7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#1c6ca1);background-image:none;border-color:var(--tox-private-button-focus-border-color,#1c6ca1);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:3px 0 2px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#207ab7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#207ab7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#207ab7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#207ab7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-focus-border-color,#1c6ca1);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-hover-border-color,#1c6ca1);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#185d8c);border-color:var(--tox-private-button-primary-active-border-color,#185d8c);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#185d8c);border-color:var(--tox-private-button-primary-enabled-border-color,#185d8c);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#154f76);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#154f76);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#114060);border-color:var(--tox-private-button-primary-enabled-active-border-color,#114060);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-border-color,#f0f0f0);color:var(--tox-private-button-secondary-text-color,#222f3e);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:3px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#f0f0f0);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#d6d6d6);border-color:var(--tox-private-button-secondary-active-border-color,#d6d6d6);color:var(--tox-private-button-secondary-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#b1ccdf);border-color:var(--tox-private-button-secondary-enabled-border-color,#b1ccdf);color:var(--tox-private-button-secondary-enabled-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#9fc1d7);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#9fc1d7);color:var(--tox-private-button-secondary-enabled-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#9fc1d7);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#9fc1d7);color:var(--tox-private-button-secondary-enabled-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#8db5d0);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#8db5d0);color:var(--tox-private-button-secondary-enabled-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#222f3e)}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;color:var(--tox-private-button-naked-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-naked-focus-border-color,#e3e3e3);color:var(--tox-private-button-naked-focus-text-color,#222f3e);box-shadow:none}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-naked-hover-background-color,#e3e3e3);color:var(--tox-private-button-naked-hover-text-color,#222f3e);box-shadow:none}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,#d6d6d6);border-color:var(--tox-private-button-naked-active-border-color,#d6d6d6);color:var(--tox-private-button-naked-active-text-color,#222f3e);box-shadow:none}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-text-color,#222f3e)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-focus-text-color,#222f3e)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-hover-text-color,#222f3e)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-active-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-active-text-color,#222f3e)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(34,47,62,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,3px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,3px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(34,47,62,0.3))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#207ab7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#207ab7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #207ab7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#222f3e;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#207ab7;stroke:#207ab7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#fff}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#fff;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#c8cbcf;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e;background-color:#fff;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#dee0e2;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#dee0e2;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #ccc;border-radius:3px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#f5cccc;border:1px solid #f0b3b3;border-radius:3px;color:#77181f;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#fff;border:1px solid #fff;border-radius:3px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#fff2c9;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid transparent;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:3px;border:2px solid transparent}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#fff;position:relative;border-radius:3px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,0.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #214d6e;color:#214d6e}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#214d6e;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#0a1620;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #214d6e;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #404040}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #ccc;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:3px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:0 solid transparent;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:0 solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:34px;margin:2px 0 3px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #207ab7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:2px 0 3px 4px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px 0;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px 0}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #ccc;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#dee0e2}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#fff;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#fff;border:1px solid #ccc;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#222f3e}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(34,47,62,.7)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#207ab7;box-shadow:none}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#24321d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #517342;outline-offset:2px}.tox .tox-notification--success a:active{color:#0d120a;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#220709;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #77181f;outline-offset:2px}.tox .tox-notification--error a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#2c280d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #7a6e25;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#050502;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#163355;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #2a64a6;outline-offset:2px}.tox .tox-notification--info a:active{color:#0b1a2c;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#f0f0f0;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#222f3e;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #c1c1c1}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#f0f0f0;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(34,47,62,.7)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(34,47,62,0.7)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #c1c1c1;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#fff 24%,#f0f0f0 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#207ab7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#207ab7}.tox .tox-promotion-dialog--footer{background-color:#f0f0f0;color:rgba(34,47,62,.7);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#f1ebf9;color:#851aff;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #851AFF}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(34,47,62,.7);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#0a1620;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #214d6e;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#f0f0f0);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#e3e3e3)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#fff);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#fff);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#f0f0f0);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,3px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#222f3e)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#fff);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,3px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#e3e3e3);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#fff);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#ccc;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#222f3e}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#207ab7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#fff);color:var(--tox-private-text-color,#222f3e)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#fff);border:1px solid var(--tox-private-slider-border-color,#e3e3e3)}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#222f3e)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#207ab7);border:1px solid var(--tox-private-slider-checked-border-color,#207ab7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#207ab7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#222f3e}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:0 0;border-radius:3px;display:flex;margin:3px 0 2px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#dee0e2}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#dee0e2;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#dee0e2;color:#222f3e}.tox .tox-number-input input:focus{background-color:#dee0e2}.tox .tox-number-input input:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{color:#222f3e;height:34px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#dee0e2;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#dee0e2}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #ccc}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke:focus{background:#dee0e2}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#ccc 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #ccc;margin-top:-1px;padding-bottom:0;padding-top:0}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#dee0e2;border-radius:3px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#fff}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px;position:relative}.tox .tox-view__label{color:#222f3e;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #ccc;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#fff;border-top:1px solid #f0f0f0;display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#fff;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#222f3e;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#f0f0f0;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#fff;border:1px solid #f0f0f0;border-radius:6px;color:#222f3e;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #006ce7;box-shadow:0 0 0 2px #006ce7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#fff5cc;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #e3b82a;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #e3b82a}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#d3d5d8}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(34,47,62,.7);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#222f3e;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#207ab7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#fff;border-top:1px solid #ccc;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#f0f0f0;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#fff;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#f0f0f0;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#207ab7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#222f3e;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#222f3e;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #ccc;border-radius:6px;color:#222f3e;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#222F3E80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#d3d5d8}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #d3d5d8}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-label,.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select,.tox .tox-toolbar-label{margin:2px 0 3px 0}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #ccc}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #ccc;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5/skin.min.css b/public/tinymce/skins/ui/tinymce-5/skin.min.css new file mode 100644 index 0000000..07b262a --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.min.css @@ -0,0 +1 @@ +.tox{box-shadow:none;box-sizing:content-box;cursor:auto;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}@keyframes tox-rotation{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.tox{color:var(--tox-private-color-black,#222f3e);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-font-size-base, 16px)}.tox-tinymce{border:1px solid #ccc;border-radius:0;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:1px solid #ccc;border-radius:0;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);z-index:var(--tox-private-z-index-sink,1300)}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:none;padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #ccc;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox #accessibility-issue__subheader{font-size:16px;color:#222f3e}.tox .accessbility-sr-only{position:absolute;clip:rect(1px,1px,1px,1px);clip-path:inset(0 0 99.9% 99.9%);overflow:hidden;height:1px;width:1px;padding:0;border:0}.tox .accessibility-issue__description{align-items:stretch;border-radius:3px;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox #accessibility-issue__contentID{margin-top:8px;margin-bottom:8px}.tox #accessibility-issue__contentID span:first-child{font-weight:700}.tox #accessibility-issue__document{padding-bottom:8px}.tox .accessibility-issue__repair{margin-top:8px}.tox .accessibility-issue__repair .tox-form__group .tox-form__group--error{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:#e9f2f8;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{font-size:14px;color:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon.accessibility-issue__icon svg{fill:#207ab7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#207ab7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#1c6ca1}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#185d8c}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:#fffae6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{font-size:14px;color:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon.accessibility-issue__icon svg{fill:#7a6e25}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:#fae6e6;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{font-size:14px;color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon.accessibility-issue__icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon.accessibility-issue__icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .mce-codemirror{background:#fff;bottom:0;font-size:13px;left:0;position:absolute;right:0;top:0;z-index:1}.tox .mce-codemirror.tox-inline-codemirror{margin:8px;position:absolute}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#ccc;border-radius:0;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{border-width:var(--tox-private-button-border-width,1px);border-style:var(--tox-private-button-border-style,solid);border-radius:var(--tox-private-control-border-radius,3px);font-family:var(--tox-private-font-stack, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif);font-size:var(--tox-private-button-font-size, 14px);font-style:var(--tox-private-button-font-style,normal);font-weight:var(--tox-private-button-font-weight,bold);line-height:var(--tox-private-control-line-height, 24px);padding:var(--tox-private-button-padding-y,4px) var(--tox-private-button-padding-x,16px);text-align:center;-webkit-text-decoration:none;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;box-sizing:border-box;cursor:pointer;outline:0;position:relative;white-space:nowrap;display:inline-flex;justify-content:center;align-items:center;gap:2px}.tox .tox-button::before{border-radius:var(--tox-private-control-border-radius,3px);bottom:calc(-1 * var(--tox-private-button-border-width,1px));box-shadow:var(--tox-private-button-focus-outline,inset 0 0 0 1px #fff,0 0 0 2px #207ab7);content:'';left:calc(-1 * var(--tox-private-button-border-width,1px));opacity:0;pointer-events:none;position:absolute;right:calc(-1 * var(--tox-private-button-border-width,1px));top:calc(-1 * var(--tox-private-button-border-width,1px))}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-focus-background-color,#1c6ca1);background-image:none;border-color:var(--tox-private-button-focus-border-color,#1c6ca1);box-shadow:var(--tox-private-button-focus-box-shadow,none);color:var(--tox-private-button-focus-text-color,#fff)}.tox .tox-button:focus:not(:disabled)::before{opacity:1}.tox .tox-button.tox-button--icon,.tox .tox-button:has(.tox-icon:only-child){padding:4px}.tox .tox-button .tox-icon svg{display:block;fill:currentColor}.tox .tox-button .tox-icon.tox-icon--success svg{fill:var(--tox-private-color-success,#78AB46)}.tox .tox-button .tox-icon.tox-icon--error svg{fill:var(--tox-private-color-error,#c00)}.tox .tox-button--stretch{width:100%}.tox-context-form__group .tox-button--icon,.tox-context-form__group .tox-button.tox-button--icon{margin:3px 0 2px 0;padding:0}.tox .tox-button{background-color:var(--tox-private-button-primary-background-color,#207ab7);background-image:none;background-position:0 0;background-repeat:repeat;color:var(--tox-private-button-primary-text-color,#fff);border-color:var(--tox-private-button-primary-border-color,#207ab7)}.tox .tox-button[disabled]{background-color:var(--tox-private-button-primary-disabled-background-color,#207ab7);background-image:none;border-color:var(--tox-private-button-primary-disabled-border-color,#207ab7);color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:var(--tox-private-button-primary-focus-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-focus-border-color,#1c6ca1);color:var(--tox-private-button-primary-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:hover:not(:disabled){background-color:var(--tox-private-button-primary-hover-background-color,#1c6ca1);border-color:var(--tox-private-button-primary-hover-border-color,#1c6ca1);color:var(--tox-private-button-primary-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button:active:not(:disabled){background-color:var(--tox-private-button-primary-active-background-color,#185d8c);border-color:var(--tox-private-button-primary-active-border-color,#185d8c);color:var(--tox-private-button-primary-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled{background-color:var(--tox-private-button-primary-enabled-background-color,#185d8c);border-color:var(--tox-private-button-primary-enabled-border-color,#185d8c);color:var(--tox-private-button-primary-enabled-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled[disabled]{color:var(--tox-private-button-primary-disabled-text-color,rgba(255,255,255,.5));cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-primary-enabled-focus-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-focus-border-color,#154f76);color:var(--tox-private-button-primary-enabled-focus-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-primary-enabled-hover-background-color,#154f76);border-color:var(--tox-private-button-primary-enabled-hover-border-color,#154f76);color:var(--tox-private-button-primary-enabled-hover-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-primary-enabled-active-background-color,#114060);border-color:var(--tox-private-button-primary-enabled-active-border-color,#114060);color:var(--tox-private-button-primary-enabled-active-text-color,#fff);background-image:none;box-shadow:none}.tox .tox-button--secondary{background-color:var(--tox-private-button-secondary-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-border-color,#f0f0f0);color:var(--tox-private-button-secondary-text-color,#222f3e);border-style:solid;border-width:1px;background-image:none;background-position:0 0;background-repeat:repeat;border-radius:3px;box-shadow:none;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;-webkit-text-decoration:none;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:var(--tox-private-button-secondary-disabled-background-color,#f0f0f0);background-image:none;border-color:var(--tox-private-button-secondary-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary:focus:not(:disabled){background-color:var(--tox-private-button-secondary-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:hover:not(:disabled){background-color:var(--tox-private-button-secondary-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary:active:not(:disabled){background-color:var(--tox-private-button-secondary-active-background-color,#d6d6d6);border-color:var(--tox-private-button-secondary-active-border-color,#d6d6d6);color:var(--tox-private-button-secondary-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled{background-color:var(--tox-private-button-secondary-enabled-background-color,#b1ccdf);border-color:var(--tox-private-button-secondary-enabled-border-color,#b1ccdf);color:var(--tox-private-button-secondary-enabled-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled[disabled]{color:var(--tox-private-button-secondary-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-focus-background-color,#9fc1d7);border-color:var(--tox-private-button-secondary-enabled-focus-border-color,#9fc1d7);color:var(--tox-private-button-secondary-enabled-focus-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-hover-background-color,#9fc1d7);border-color:var(--tox-private-button-secondary-enabled-hover-border-color,#9fc1d7);color:var(--tox-private-button-secondary-enabled-hover-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:var(--tox-private-button-secondary-enabled-active-background-color,#8db5d0);border-color:var(--tox-private-button-secondary-enabled-active-border-color,#8db5d0);color:var(--tox-private-button-secondary-enabled-active-text-color,#222f3e);background-image:none;box-shadow:none}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:var(--tox-private-button-naked-text-color,#222f3e)}.tox .tox-button--naked[disabled]{background-color:#f0f0f0;border-color:#f0f0f0;color:var(--tox-private-button-naked-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-button--naked:focus:not(:disabled){background-color:var(--tox-private-button-naked-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-naked-focus-border-color,#e3e3e3);color:var(--tox-private-button-naked-focus-text-color,#222f3e);box-shadow:none}.tox .tox-button--naked:hover:not(:disabled){background-color:var(--tox-private-button-naked-hover-background-color,#e3e3e3);border-color:var(--tox-private-button-naked-hover-background-color,#e3e3e3);color:var(--tox-private-button-naked-hover-text-color,#222f3e);box-shadow:none}.tox .tox-button--naked:active:not(:disabled){background-color:var(--tox-private-button-naked-active-background-color,#d6d6d6);border-color:var(--tox-private-button-naked-active-border-color,#d6d6d6);color:var(--tox-private-button-naked-active-text-color,#222f3e);box-shadow:none}.tox .tox-button--secondary--outline{background-color:transparent;border-color:var(--tox-private-button-secondary-outline-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-text-color,#222f3e)}.tox .tox-button--secondary--outline:focus:not(:disabled){background-color:var(--tox-private-button-secondary-outline-focus-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-focus-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-focus-text-color,#222f3e)}.tox .tox-button--secondary--outline:hover:not(:disabled){background-color:var(--tox-private-button-secondary-outline-hover-background-color,#f0f0f0);border-color:var(--tox-private-button-secondary-outline-hover-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-hover-text-color,#222f3e)}.tox .tox-button--secondary--outline:active:not(:disabled){background-color:var(--tox-private-button-secondary-outline-active-background-color,#e3e3e3);border-color:var(--tox-private-button-secondary-outline-active-border-color,#e3e3e3);color:var(--tox-private-button-secondary-outline-active-text-color,#222f3e)}.tox .tox-button--secondary--outline[disabled]{background-color:var(--tox-private-button-secondary-outline-disabled-background-color,transparent);border-color:var(--tox-private-button-secondary-outline-disabled-border-color,#f0f0f0);color:var(--tox-private-button-secondary-outline-disabled-text-color,rgba(34,47,62,.5))}.tox .tox-checkbox{align-items:center;border-radius:var(--tox-private-checkbox-border-radius,3px);cursor:pointer;display:flex;height:var(--tox-private-control-height,36px);min-width:var(--tox-private-control-height,36px)}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{display:flex;align-items:center;justify-content:center;box-sizing:content-box;padding:var(--tox-private-pad-xs,calc(4px - 1px));border-radius:var(--tox-private-checkbox-border-radius,3px);box-shadow:0 0 0 2px transparent;height:var(--tox-private-control-line-height,24px);aspect-ratio:1}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:var(--tox-private-checkbox-unselected-color,rgba(34,47,62,0.3))}@media (forced-colors:active){.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:currentColor!important}}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:var(--tox-private-checkbox-indeterminate-color,#207ab7)}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:var(--tox-private-checkbox-selected-color,#207ab7)}.tox .tox-checkbox--disabled{color:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,.5));cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:var(--tox-private-checkbox-disabled-text-color,rgba(34,47,62,0.5))}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{box-shadow:var(--tox-private-checkbox-focus-box-shadow,inset 0 0 0 1px #207ab7)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:var(--tox-private-pad-xs,4px)}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__label{margin-right:var(--tox-private-pad-xs,4px)}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:var(--tox-private-pad-xs,4px)}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#ccc;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#e6e6e6;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-image-selector-menu .tox-collection__item,.tox .tox-image-selector-menu .tox-collection__item-image-selector{flex-direction:column}.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item .tox-collection__item-image,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-checkmark,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-icon,.tox .tox-image-selector-menu .tox-collection__item-image-selector .tox-collection__item-image{flex-grow:1}.tox .tox-image-selector-menu .tox-collection__item label,.tox .tox-image-selector-menu .tox-collection__item-image-selector label{width:48px;white-space:nowrap;overflow:hidden;font-size:12px;color:#222f3e;text-align:center;align-self:flex-end}.tox .tox-image-selector-menu .tox-collection__item-checkmark{height:24px;width:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tox .tox-image-selector-menu .tox-collection__item-checkmark svg path{fill:#207ab7;stroke:#207ab7}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#fff}.tox .tox-image-selector-menu .tox-image-selector__row .tox-collection__item-image-selector.tox-collection__item--enabled:not(.tox-collection__item--state-disabled){z-index:2;background-color:#fff;opacity:.8;background-clip:content-box}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){border:solid 1px}}.tox .tox-collection--grid .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#c8cbcf;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent inset;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){background-color:#c8cbcf;color:#222f3e}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--enabled:not(.tox-collection__item--state-disabled){border-radius:3px;outline:solid 1px}}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e;background-color:#fff;position:relative}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{background-color:#dee0e2;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus{background-color:#dee0e2;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):focus::after{border:2px solid highlight}}@media (forced-colors:active){.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled):hover{border-radius:3px;outline:solid 1px}}.tox .tox-collection__item-image{border:1px solid #ccc;border-radius:3px;display:flex;flex-direction:column;justify-content:center;margin-bottom:4px;position:relative}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;max-width:100%;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:currentColor;display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:currentColor}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,0.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:34px;margin:3px 0 2px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid #ccc}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid #ccc}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}@media (forced-colors:active){.tox .tox-hue-slider,.tox .tox-rgb-form .tox-rgba-preview{background-color:currentColor!important;border:1px solid highlight!important;forced-color-adjust:none}}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-spectrum:focus,.tox .tox-sv-palette-spectrum:focus{outline:#08f solid}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{min-width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important;box-shadow:0 0 0 1px red}.tox .tox-rgb-container{position:relative}.tox .tox-rgb-form .tox-invalid-icon{align-content:center;align-items:center;display:none;height:100%;position:absolute;right:0;top:0}.tox .tox-rgb-form .tox-invalid-icon .tox-control-wrap__status-icon-invalid{margin:0}.tox .tox-rgb-warning-note{background-color:#f5cccc;border:1px solid #f0b3b3;border-radius:3px;color:#77181f;padding:3px}.tox input.tox-invalid+.tox-invalid-icon{display:flex}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:2px 0 3px 4px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px 0}.tox .tox-swatches__row{display:flex}@media (forced-colors:active){.tox .tox-swatches__row{forced-color-adjust:none}}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#dee0e2}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment{background:#fff;border:1px solid #fff;border-radius:3px;padding:8px;padding-bottom:16px;position:relative}.tox .tox-comment:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected{background-color:#fff2c9;border:1px solid #ffcf30;box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-comment.tox-comment--selected:focus{border:2px solid transparent;margin:-1px}.tox .tox-comment.tox-comment--selected:focus:not(:first-child){margin-top:7px}.tox .tox-comment.tox-comment--selected .tox-comment__single{margin-bottom:12px}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus{position:relative}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus::after{top:-9px;pointer-events:none;position:absolute;content:"";display:block;bottom:-9px;left:-9px;right:-9px;border-radius:3px;border:2px solid transparent}.tox .tox-comment.tox-comment--selected .tox-comment__single:focus:last-of-type:has(textarea):after{bottom:calc((12px + 16px + 1px) * -1)}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial;transition:max-height .5s cubic-bezier(0, 1, 0, 1);white-space:pre-wrap}.tox .tox-comment__body.tox-comment__body--expanded{max-height:100em;transition:max-height 1s ease-in-out}.tox .tox-comment__body.tox-comment__body--pending{transition:max-height 0s}.tox .tox-comment__body p{margin:0}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%;font-size:16px}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__expander p:focus{font-weight:700}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-tbtn.tox-comment__mention-btn{display:flex;width:34px;height:34px;padding:5px;justify-content:center;align-items:center;margin:0;background-color:transparent}.tox .tox-comment-thread{background:#fff;position:relative;border-radius:3px;background-color:transparent}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto;padding:12px;scroll-behavior:smooth}.tox .tox-comment__scroll:has(textarea:focus){scroll-behavior:auto}.tox .tox-comment--disappearing{transition:opacity .5s ease}.tox .tox-comment[data-transitioning-destination=deleting]{opacity:0}.tox .tox-ring-loader{width:10px;height:10px;border:1px solid #fff;border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:tox-rotation 1s linear infinite}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,0.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;-webkit-text-decoration:none;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(32,122,183,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #214d6e;color:#214d6e}@media (forced-colors:active){.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid highlight;color:highlight}}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#214d6e;cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#0a1620;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content a:focus-visible{border-radius:1px;outline:2px solid #214d6e;outline-offset:2px}.tox .tox-dialog__body-content a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:1px solid #ccc;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #404040}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #ccc;border-radius:3px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered iframe{border-radius:3px}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #ccc;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:0 solid transparent;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}@media (forced-colors:active){.tox .tox-edit-area::before{border:0 solid highlight}}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #ccc}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-custom-preview{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;flex:1;padding:8px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34 47 3.1%);border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}@media (forced-colors:active){.tox .tox-color-input span{border-color:currentColor;border-width:2px!important;forced-color-adjust:none}}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#207ab7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:3px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}@media (forced-colors:active){.tox .tox-color-input span::before{border:none}}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-context-form__group .tox-button--icon.tox-lock-context-form-size-input{margin-left:8px;margin-right:8px}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled],.tox .tox-toolbar-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-focusable-wrapper:focus,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus,.tox .tox-toolbar-textfield:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-toolbar-textfield{max-width:250px;min-height:unset;height:34px;margin:2px 0 3px 0}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#207ab7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox .tox-textfield-size{width:80px}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}@media (forced-colors:active){.tox .tox-listbox__select-chevron svg{fill:currentColor!important}}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{appearance:none;background-color:#fff;border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 4.75px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#207ab7;box-shadow:none;outline:2px solid rgba(32,122,183,.25)}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-selectfield select option:checked{background-color:revert;color:revert}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#ccc;border-radius:3px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-image-selector-loading-spinner-wrapper{display:flex;justify-content:center;align-items:center}.tox .tox-image-selector-loading-spinner{position:absolute;width:min(24px,30%);aspect-ratio:1;border-radius:50%;border:3px solid #207ab7;border-bottom-color:transparent;animation:tox-rotation 1s linear infinite}.tox .tox-toolbar .tox-image-selector,.tox .tox-toolbar__overflow .tox-image-selector,.tox .tox-toolbar__primary .tox-image-selector{margin:2px 0 3px 4px}.tox .tox-image-selector-menu{border:0;border-radius:3px;margin:-4px 0;padding:4px}.tox .tox-image-selector-menu .tox-collection--list .tox-collection__group{border:0;padding:0;margin:-4px 0}.tox .tox-image-selector-menu .tox-collection__item{max-width:48px}.tox .tox-image-selector-menu .tox-collection__item-icon{border:1px solid #ccc;border-radius:3px;margin-bottom:4px;width:100%}.tox .tox-image-selector-menu .tox-collection__item-icon svg path{stroke:#c00}.tox .tox-image-selector__row{display:flex}.tox .tox-image-selector--remove{align-items:center;display:flex;justify-content:center}.tox .tox-image-selector--remove svg path{stroke:#c00}.tox .tox-image-selector-image-wrapper{width:46px;height:46px;display:flex;align-items:center;justify-content:center}.tox .tox-image-selector-image-img{max-width:100%;max-height:100%}.tox .tox-image-selector__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-image-selector__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-image-selector__picker-btn:hover{background:#dee0e2}.tox .tox-context-toolbar{position:absolute;position-try-fallbacks:flip-block,flip-inline,flip-block flip-inline;z-index:1150;background-color:#fff;border:1px solid #e0e0e0;border-radius:9px;box-shadow:0 2px 8px rgba(0,0,0,.08);padding:4px}.tox .tox-context-toolbar[popover]{inset:auto;margin:0}.tox .tox-context-toolbar .tox-toolbar{display:flex;flex-wrap:nowrap;gap:8px}.tox .tox-context-toolbar .tox-toolbar__group{display:flex;flex-wrap:nowrap;flex-shrink:0;gap:4px;align-items:center}.tox .tox-insert-table-picker{background-color:#fff;display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#ccc;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:0 -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(32,122,183,.5);border-color:rgba(32,122,183,.5)}@media (forced-colors:active){.tox .tox-insert-table-picker .tox-insert-table-picker__selected{border-color:Highlight;filter:contrast(50%)}}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox-mentions__card-common{z-index:1200}.tox.tox-mentions__card{background:#fff;border:1px solid #ccc;display:flex;padding:4px 8px}.tox.tox-mentions__card .tox-mentions__container{display:flex;flex-direction:column;align-self:center;margin:0 4px}.tox .tox-mentions__avatar{width:42px;height:42px;border-radius:50%;margin-right:4px}.tox .tox-mentions__username{font-size:14px;line-height:21px;color:#222f3e}.tox .tox-mentions__description{font-size:12px;line-height:21px;color:rgba(34,47,62,.7)}.tox .tox-collection__item--active .tox-mentions__description,.tox .tox-collection__item--active .tox-mentions__username{color:inherit}.tox .tox-menu{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 0}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:4px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:4px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}.tox .tox-dialog__popups .tox-menu .tox-collection__item-label{word-break:break-all}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 4px 0 4px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:2px 0 3px 0;outline:0;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#dee0e2;border:0;box-shadow:none;color:#222f3e;position:relative;z-index:1}.tox .tox-mbtn:focus:not(:disabled)::after{pointer-events:none;border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-mbtn:focus:not(:disabled)::after{border:2px solid highlight}}.tox .tox-mbtn--active,.tox .tox-mbtn:not(:disabled).tox-mbtn--active:focus{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:3px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-left:auto;margin-right:auto;margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in;width:max-content}.tox .tox-notification a{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification:focus{border-color:#207ab7;box-shadow:none}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success a:focus,.tox .tox-notification--success a:hover{color:#24321d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success a:focus-visible{border-radius:1px;outline:2px solid #517342;outline-offset:2px}.tox .tox-notification--success a:active{color:#0d120a;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error a:focus,.tox .tox-notification--error a:hover{color:#220709;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error a:focus-visible{border-radius:1px;outline:2px solid #77181f;outline-offset:2px}.tox .tox-notification--error a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn a:focus,.tox .tox-notification--warn a:hover,.tox .tox-notification--warning a:focus,.tox .tox-notification--warning a:hover{color:#2c280d;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn a:focus-visible,.tox .tox-notification--warning a:focus-visible{border-radius:1px;outline:2px solid #7a6e25;outline-offset:2px}.tox .tox-notification--warn a:active,.tox .tox-notification--warning a:active{color:#050502;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info a:focus,.tox .tox-notification--info a:hover{color:#163355;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info a:focus-visible{border-radius:1px;outline:2px solid #2a64a6;outline-offset:2px}.tox .tox-notification--info a:active{color:#0b1a2c;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-notification-container-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-notification-container-dock-fadein{opacity:1;visibility:visible}.tox .tox-notification-container-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-notification-container-dock-transition.tox-notification-container-dock-fadein{transition-delay:0s}.tox .tox-onboarding-overlay{height:100%;background-color:#f0f0f0;position:absolute;top:0;left:0;right:0;z-index:1302;overflow:auto;display:grid;justify-content:center;align-items:center}.tox .tox-onboarding-dialog{max-width:512px;background-color:#fff;display:flex;flex-direction:column;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);border-radius:12px;margin:8px}.tox .tox-onboarding-dialog .tox-onboarding-header{color:#222f3e;display:flex;justify-content:center;align-items:center;font-size:20px;margin:24px 0 8px}.tox .tox-onboarding-dialog .tox-onboarding-step{display:grid;grid-template-columns:min-content 1fr min-content;align-items:center;margin:0 24px}.tox .tox-onboarding-dialog .tox-onboarding-step:not(:last-child){border-bottom:1px solid #c1c1c1}.tox .tox-onboarding-dialog .tox-onboarding-step--number{width:24px;aspect-ratio:1;border-radius:50%;border:1px solid #00ad0e;display:flex;justify-content:center;align-items:center;font-size:12px;font-weight:700;color:#00ad0e}.tox .tox-onboarding-dialog .tox-onboarding-step--body{padding:24px 0 24px 16px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-onboarding-dialog .tox-onboarding-step--body-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-onboarding-dialog .tox-onboarding-step--action{padding-left:24px}.tox .tox-onboarding-dialog .tox-onboarding-footer{background-color:#f0f0f0;display:flex;justify-content:space-between;align-items:center;padding:16px 24px;border-bottom-left-radius:12px;border-bottom-right-radius:12px}.tox .tox-onboarding-dialog .tox-onboarding-footer p{display:flex;align-items:center;justify-content:center;gap:4px;font-size:14px;color:rgba(34,47,62,.7)}.tox .tox-onboarding-dialog svg{width:24px;fill:rgba(34,47,62,0.7)}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin{display:grid;align-items:center;grid-template-columns:min-content 1fr min-content;border-bottom:1px solid #c1c1c1;padding:24px 0;margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body{margin:0 16px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-header{color:#222f3e;font-size:14px;font-weight:700;margin-bottom:4px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--body .tox-promotion-dialog-plugin-details{color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog .tox-promotion-dialog-plugin--icon{display:grid;place-content:center;width:56px;height:56px;line-height:24px;font-size:24px;border-radius:12px;background:linear-gradient(180deg,#fff 24%,#f0f0f0 100%);box-shadow:0 1px 1px 0 #222f3e12,0 3px 6px 0 #222f3e06;color:#207ab7}.tox .tox-promotion-dialog--subtitle{margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore{text-align:center;margin:16px;color:rgba(34,47,62,.7);font-size:14px}.tox .tox-promotion-dialog--explore a{color:#207ab7}.tox .tox-promotion-dialog--footer{background-color:#f0f0f0;color:rgba(34,47,62,.7);font-size:12px;text-align:center;padding:16px}.tox .tox-promotion-button{display:flex;align-items:center;height:26.6px;line-height:26.6px;font-size:14px;font-weight:700;background-color:#f1ebf9;color:#851aff;padding:8px 16px;cursor:pointer;white-space:nowrap;border-radius:5px}.tox .tox-promotion-button:focus{outline:1px solid #851AFF}.tox .tox-onboarding-dialog a,.tox .tox-promotion-dialog--footer a{color:rgba(34,47,62,.7);cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus,.tox .tox-onboarding-dialog a:hover,.tox .tox-promotion-dialog--footer a:focus,.tox .tox-promotion-dialog--footer a:hover{color:#0a1620;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-onboarding-dialog a:focus-visible,.tox .tox-promotion-dialog--footer a:focus-visible{border-radius:1px;outline:2px solid #214d6e;outline-offset:2px}.tox .tox-onboarding-dialog a:active,.tox .tox-promotion-dialog--footer a:active{color:#000;-webkit-text-decoration:underline;text-decoration:underline}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #ccc;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}@media (forced-colors:active){.tox .tox-pop::after,.tox .tox-pop::before{content:none}}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#ccc transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #ccc transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #ccc transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #ccc;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:var(--tox-private-sidebar-background-color,#f0f0f0);display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-sidebar-content{display:flex;flex-direction:column;position:relative;height:100%;min-width:300px;max-width:300px;width:300px;border-left:1px solid var(--tox-private-sidebar-border-color,#e3e3e3)}.tox .tox-sidebar-content__header{align-items:center;display:flex;justify-content:space-between;box-shadow:var(--tox-private-sidebar-header-box-shadow,0 4px 8px 0 rgba(34,47,62,.1));padding:var(--tox-private-pad-sm,8px) 12px;background:var(--tox-private-background-color,#fff);z-index:1}.tox .tox-sidebar-content__header .tox-sidebar-content__header-close-button{margin-left:auto}.tox .tox-sidebar-content__title{font-size:var(--tox-private-font-size-lg, 20px);font-weight:var(--tox-private-font-weight-normal,normal);padding:var(--tox-private-pad-sm,8px) 0 var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);line-height:28px}.tox .tox-floating-sidebar{--tox-private-floating-sidebar-requested-height:600px;--tox-private-floating-sidebar-width:min(380px, 90vw);--tox-private-floating-sidebar-height:min(var(--tox-private-floating-sidebar-requested-height), 80vh);box-shadow:var(--tox-private-floating-sidebar-box-shadow,0 0 40px 1px rgba(34,47,62,.15),0 16px 16px -10px rgba(34,47,62,.15));width:var(--tox-private-floating-sidebar-width);height:var(--tox-private-floating-sidebar-height);background-color:var(--tox-private-background-color,#fff);border-radius:12px;overflow:hidden}.tox .tox-floating-sidebar__content-wrapper{width:100%;height:100%;display:flex;flex-direction:column}.tox .tox-floating-sidebar__header{position:relative}.tox-ai .tox-ai__user-prompt{display:flex;flex-direction:column;margin-left:auto;gap:inherit}.tox-ai .tox-ai__user-prompt__context{margin-left:auto}.tox-ai .tox-ai__user-prompt__text{background-color:var(--tox-private-ai-user-prompt-background,#f0f0f0);padding:var(--tox-private-pad-sm,8px) 12px;border-radius:var(--tox-private-control-border-radius,3px);max-width:80%;align-self:flex-end;color:var(--tox-private-text-color,#222f3e)}.tox-ai .tox-ai__scroll{overflow:auto;background-color:var(--tox-private-background-color,#fff);display:flex;padding:12px;flex-direction:column;align-items:flex-start;gap:12px;flex:1 0 0;align-self:stretch}.tox-ai .tox-ai__response-content{padding:var(--tox-private-pad-sm,8px) 0;color:var(--tox-private-text-color,#222f3e);font-feature-settings:'liga' off,'clig' off;font-size:var(--tox-private-font-size-sm, 14px);font-style:normal;font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-line-height, 18px);white-space:pre-wrap}.tox-ai .tox-ai__response.tox-ai__response-streaming{background:linear-gradient(180deg,var(--tox-private-color-black,#222f3e) 0,transparent 100%);background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.tox-ai .tox-ai__error-message{border-radius:var(--tox-private-panel-border-radius,3px);border:1px solid var(--tox-private-color-error,#c00);background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-error,#c00);padding:var(--tox-private-pad-sm,8px);width:100%}.tox-ai .tox-ai__footer{border-top:1px solid var(--tox-private-ai-footer-border-color,#e3e3e3);padding:12px;gap:var(--tox-private-pad-sm,8px);background-color:var(--tox-private-background-color,#fff);display:flex;flex-direction:column}.tox-ai .tox-ai__context{display:flex;gap:8px}.tox-ai .tox-ai__footer-actions{display:flex;gap:var(--tox-private-pad-sm,8px)}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-skeleton .tox-skeleton__line{height:16px;width:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}.tox .tox-skeleton .tox-skeleton__circle{height:36px;width:36px;margin-right:8px;border-radius:100%;background:linear-gradient(to right,rgba(240,240,240,.5) 8%,rgba(240,240,240,.7) 18%,rgba(240,240,240,.5) 33%);animation:wave 2s infinite ease-out}@keyframes wave{0%{background-position:-268px 0}100%{background-position:268px 0}}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #ccc;border-radius:3px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#207ab7;border:2px solid #185d8c;border-radius:3px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-toolbar-slider{align-items:center;display:inline-flex;height:16px}.tox .tox-toolbar-slider__input{appearance:none;background:#ccc;border-radius:16px;width:130px;height:2px}.tox .tox-toolbar-slider__input::-webkit-slider-runnable-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-moz-range-track{background-color:transparent;height:16px}.tox .tox-toolbar-slider__input::-webkit-slider-thumb{-webkit-appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input::-moz-range-thumb{appearance:none;background-color:#207ab7;border-radius:16px;border:none;height:16px;width:16px}.tox .tox-toolbar-slider__input:focus-visible{outline:0}.tox .tox-toolbar-slider__input:focus::-webkit-slider-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:focus::-moz-range-thumb{background-color:#1c6ca1;box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #207ab7}.tox .tox-toolbar-slider__input:hover::-webkit-slider-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:hover::-moz-range-thumb{background-color:#1c6ca1}.tox .tox-toolbar-slider__input:active::-webkit-slider-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input:active::-moz-range-thumb{background-color:#185d8c}.tox .tox-toolbar-slider__input[disabled]::-webkit-slider-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-toolbar-slider__input[disabled]::-moz-range-thumb{background-color:rgba(255,255,255,.5)}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:first-child{animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-ai__spinner{width:24px;height:24px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #ccc;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:12px;font-weight:400;height:18px;overflow:hidden;padding:0 8px;position:relative;text-transform:uppercase}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__right-container{display:flex;justify-content:flex-end;white-space:nowrap}.tox .tox-statusbar__help-text{text-align:center}.tox .tox-statusbar__text-container{align-items:flex-start;display:flex;flex:1 1 auto;height:16px;justify-content:space-between}@media only screen and (min-width:768px){.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__help-text,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__path,.tox .tox-statusbar__text-container.tox-statusbar__text-container-3-cols>.tox-statusbar__right-container{flex:0 0 calc(100% / 3)}}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-end{justify-content:flex-end}.tox .tox-statusbar__text-container.tox-statusbar__text-container--flex-start{justify-content:flex-start}.tox .tox-statusbar__text-container.tox-statusbar__text-container--space-around{justify-content:space-around}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}@media only screen and (max-width:767px){.tox .tox-statusbar__text-container .tox-statusbar__help-text{display:none}.tox .tox-statusbar__text-container .tox-statusbar__help-text:only-child{display:block}}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);position:relative;-webkit-text-decoration:none;text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar a:focus-visible::after,.tox .tox-statusbar__path-item:focus-visible::after,.tox .tox-statusbar__wordcount:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-cursor-default{cursor:ns-resize}.tox .tox-statusbar__resize-cursor-both{cursor:nwse-resize}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;display:flex;flex:0 0 auto;justify-content:flex-end;margin-bottom:3px;margin-left:4px;margin-right:calc(3px - 8px);margin-top:3px;padding-bottom:0;padding-left:0;padding-right:0;position:relative}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,0.5)}.tox .tox-statusbar__resize-handle:focus svg,.tox .tox-statusbar__resize-handle:hover svg{fill:#222f3e}.tox .tox-statusbar__resize-handle:focus-visible{background-color:transparent;border-radius:1px 1px -4px 1px;box-shadow:0 0 0 2px transparent}.tox .tox-statusbar__resize-handle:focus-visible::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-statusbar__resize-handle:focus-visible::after{border:2px solid highlight}}.tox .tox-statusbar__resize-handle:only-child{margin-left:auto}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-tag{width:-moz-fit-content;width:fit-content;display:flex;padding:4px 6px;align-items:center;gap:4px;border-radius:3px;background:linear-gradient(0deg,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 0,color-mix(in srgb,var(--tox-private-color-white,#fff) 90%,transparent) 100%),var(--tox-private-color-tint,#207ab7);line-height:var(--tox-private-base-value, 16px);font-size:var(--tox-private-font-size-xs, 12px)}.tox .tox-tag .tox-tag__icon{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close{height:var(--tox-private-base-value,16px)}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon{border:0;padding:0}.tox .tox-tag .tox-tag__close .tox-button.tox-button--icon::before{box-shadow:none}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-toggle{display:flex;align-items:center;gap:var(--tox-private-pad-xs,4px);padding:var(--tox-private-pad-xs,4px);font-weight:var(--tox-private-font-weight-normal,normal);line-height:var(--tox-private-control-line-height, 24px);white-space:nowrap;background-color:var(--tox-private-background-color,#fff);color:var(--tox-private-text-color,#222f3e)}.tox .tox-toggle input{position:absolute;opacity:0;width:0;height:0}.tox .tox-toggle__slider{position:relative;cursor:pointer;box-sizing:border-box;transition:.4s;border-radius:34px;width:28px;height:16px;background-color:var(--tox-private-slider-background-color,#fff);border:1px solid var(--tox-private-slider-border-color,#e3e3e3)}.tox .tox-toggle__slider::before{position:absolute;content:"";height:12px;width:12px;left:1px;bottom:1px;transition:.4s;border-radius:50%;background-color:var(--tox-private-slider-handle-background-color,#222f3e)}.tox input:checked+.tox-toggle__slider{background-color:var(--tox-private-slider-checked-background-color,#207ab7);border:1px solid var(--tox-private-slider-checked-border-color,#207ab7)}.tox input:focus+.tox-toggle__slider{box-shadow:0 0 0 1px var(--tox-private-color-white,#fff),0 0 0 2px var(--tox-private-color-tint,#207ab7)}.tox input:checked+.tox-toggle__slider::before{transform:translateX(12px);background-color:var(--tox-private-slider-checked-handle-background-color,#fff)}.tox input:disabled+.tox-toggle__slider::before{opacity:50%}.tox .tox-tbtn{align-items:center;background:#fff;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:34px;justify-content:center;margin:3px 0 2px 0;outline:0;padding:0;text-transform:none;width:34px}.tox .tox-tbtn .tox-tbtn__icon-wrap{pointer-events:none}@media (forced-colors:active){.tox .tox-tbtn.tox-tbtn:hover,.tox .tox-tbtn:hover{outline:1px dashed currentColor}.tox .tox-tbtn.tox-tbtn--active,.tox .tox-tbtn.tox-tbtn--enabled,.tox .tox-tbtn.tox-tbtn--enabled:focus,.tox .tox-tbtn.tox-tbtn--enabled:hover,.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){outline:1px solid currentColor;position:relative}}.tox .tox-tbtn svg{display:block;fill:#222f3e}@media (forced-colors:active){.tox .tox-tbtn svg{fill:currentColor!important}.tox .tox-tbtn svg.tox-tbtn--enabled,.tox .tox-tbtn svg:focus:not(.tox-tbtn--disabled){fill:currentColor!important}.tox .tox-tbtn svg .tox-tbtn:disabled,.tox .tox-tbtn svg .tox-tbtn:disabled:hover,.tox .tox-tbtn svg.tox-tbtn--disabled,.tox .tox-tbtn svg.tox-tbtn--disabled:hover{filter:contrast(0%)}}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#dee0e2;border:0;box-shadow:none;position:relative;z-index:1}.tox .tox-tbtn:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn:focus::after{border:2px solid highlight}}.tox .tox-tbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--active,.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:focus,.tox .tox-tbtn--enabled:hover{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e;position:relative}.tox .tox-tbtn--active>*,.tox .tox-tbtn--enabled:focus>*,.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--active svg,.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:focus svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--active.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:focus.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-tbtn--enabled:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-tbtn--enabled:focus::after{border:2px solid highlight}}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:51px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:68px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-label--context-toolbar{margin:6px 1px 5px 0;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.tox .tox-number-input{background:0 0;border-radius:3px;display:flex;margin:3px 0 2px 0;position:relative;width:auto}.tox .tox-number-input:focus{background:#dee0e2}.tox .tox-number-input:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper{display:flex;pointer-events:none;position:relative;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background-color:#dee0e2;z-index:1}.tox .tox-number-input .tox-input-wrapper:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:focus::after{border:2px solid highlight}}.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input .tox-input-wrapper:has(input:focus)::after{border:2px solid highlight}}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;position:relative;width:60px}.tox .tox-number-input input:hover{background:#dee0e2;color:#222f3e}.tox .tox-number-input input:focus{background-color:#dee0e2}.tox .tox-number-input input:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{color:#222f3e;height:34px;position:relative;text-align:center;width:24px}@media (forced-colors:active){.tox .tox-number-input button:active,.tox .tox-number-input button:focus,.tox .tox-number-input button:hover{outline:1px solid currentColor!important}}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}@media (forced-colors:active){.tox .tox-number-input button svg,.tox .tox-number-input button svg:active,.tox .tox-number-input button svg:hover{fill:currentColor!important}.tox .tox-number-input button svg:disabled{filter:contrast(0)}}.tox .tox-number-input button:focus{background:#dee0e2;z-index:1}.tox .tox-number-input button:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0}@media (forced-colors:active){.tox .tox-number-input button:focus::after{border:2px solid highlight}}.tox .tox-number-input button:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#c8cbcf;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:#fff;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,0.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#dee0e2}.tox .tox-tbtn--select{margin:3px 0 2px 0;padding:0 4px;width:auto}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #ccc}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-tbtn__select-chevron svg{fill:currentColor}}.tox .tox-tbtn--bespoke{background:0 0}.tox .tox-tbtn--bespoke:focus{background:#dee0e2}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:0}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button__main{border-radius:3px 0 0 3px;margin-right:0}.tox .tox-split-button__main:focus{border:0;box-shadow:none;background:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__main:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px 0 0 3px}@media (forced-colors:active){.tox .tox-split-button__main:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron{width:16px;border-radius:0 3px 3px 0;margin-left:0}.tox .tox-split-button__chevron:focus{border:0;box-shadow:none;background:#dee0e2;color:#222f3e;position:relative;z-index:1}.tox .tox-split-button__chevron:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:0 3px 3px 0}@media (forced-colors:active){.tox .tox-split-button__chevron:focus::after{border:2px solid highlight}}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,0.5)}@media (forced-colors:active){.tox .tox-split-button__chevron svg{fill:currentColor}}.tox.tox-platform-touch .tox-split-button__main{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button__chevron.tox-tbtn--disabled,.tox .tox-split-button__main.tox-tbtn--disabled{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:hover,.tox .tox-split-button__main.tox-tbtn--disabled:hover{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__chevron.tox-tbtn--disabled:focus,.tox .tox-split-button__main.tox-tbtn--disabled:focus{background:#fff;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-highlight-bg-color__color,.tox .tox-split-button__main.tox-tbtn--disabled svg .tox-icon-text-color__color{opacity:.3}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#ccc 0 1px,transparent 1px 39px);background-position:center top 39px;background-repeat:no-repeat;background-size:calc(100% - 4px * 2) calc(100% - 39px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 4px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid #ccc;margin-top:-1px;padding-bottom:0;padding-top:0}@media (forced-colors:active){.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{outline:1px solid currentColor}}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox .tox-focusable-wrapper{border:1px solid transparent;margin-right:2px;pointer-events:none}.tox .tox-focusable-wrapper .tox-textfield-size{pointer-events:all}.tox .tox-focusable-wrapper:focus{background-color:#dee0e2;border-radius:3px;border-style:solid;border-width:1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:3px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}@media (forced-colors:active){.tox.tox-tinymce-aux .tox-toolbar__overflow{border:solid}}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 4px * 2) calc(100% - 51px);padding:4px 0}.tox-context-form__group{display:flex;align-items:center}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 4px 0 4px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid #ccc}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid #ccc}.tox .tox-tooltip{display:inline-block;max-width:min(80%,15em);padding:8px 0 0 0;position:relative;width:max-content;z-index:1150}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:3px;box-shadow:none;color:#fff;font-size:12px;font-style:normal;font-weight:600;overflow-wrap:break-word;padding:4px 6px;text-transform:none}@media (forced-colors:active){.tox .tox-tooltip__body{outline:outset 1px}}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#dee0e2;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#dee0e2;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,0.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#b1d0e6;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-icon-custom-state{flex-grow:1;display:flex;justify-content:flex-end}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}[data-mce-name=uploadcare-enhance-filter] .color-swatch-remove-color path{fill:#c00;stroke:#c00}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column;height:100%}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden;background-color:#fff}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px;position:relative}.tox .tox-view__label{color:#222f3e;font-weight:700;line-height:24px;padding:4px 16px;text-align:center;white-space:nowrap}.tox .tox-view__label--normal{font-size:16px}.tox .tox-view__label--large{font-size:20px}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__align-right{margin-left:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;overflow-x:auto;padding:8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;position:relative;width:100%}.tox .tox-view__pane_panel{border:1px solid #ccc;border-radius:3px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #ccc;border-radius:3px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #ccc;border-radius:3px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-view .tox-revisionhistory__pane{padding:0}.tox .tox-revisionhistory__container{display:flex;flex-direction:column;height:100%}.tox .tox-revisionhistory{background-color:#fff;border-top:1px solid #f0f0f0;display:flex;flex:1;height:100%;overflow-x:auto;overflow-y:hidden;position:relative;width:100%}.tox .tox-revisionhistory__iframe{flex:1}.tox .tox-revisionhistory__sidebar{display:flex;flex-direction:column;height:100%;min-width:248px;width:316px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__sidebar-title{background-color:#fff;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);color:#222f3e;font-size:20px;font-weight:400;line-height:28px;padding:12px;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions{background-color:#f0f0f0;display:flex;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:10px 12px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus{height:100%;position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{bottom:0;box-shadow:0 0 0 0 transparent;content:'';left:0;position:absolute;right:0;top:0;border-radius:3px;bottom:1px;left:1px;right:1px;top:1px}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card{background-color:#fff;border:1px solid #f0f0f0;border-radius:6px;color:#222f3e;cursor:pointer;display:flex;flex-direction:column;font-size:14px;padding:12px;width:100%}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:hover{box-shadow:0 4px 8px 0 rgba(34,47,62,.1)}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus{position:relative;z-index:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #006ce7;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #006ce7;box-shadow:0 0 0 2px #006ce7!important}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card:focus::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected{background-color:#fff5cc;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);position:relative}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border-radius:3px;bottom:0;box-shadow:0 0 0 0 transparent #e3b82a;content:'';left:0;position:absolute;right:0;top:0;border-radius:6px;box-shadow:0 0 0 2px #e3b82a}@media (forced-colors:active){.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card.tox-revisionhistory__card--selected::after{border:2px solid highlight}}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-label{display:block;width:min-content;padding:4px 8px;margin-bottom:8px;font-size:12px;font-weight:700;border-radius:4px;background:#d3d5d8}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-content{display:flex;flex-direction:row;gap:8px;align-items:center}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-info{display:flex;flex-direction:column;flex:1}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-date-label{font-size:14px;font-weight:700;line-height:18px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-author-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__avatar{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__norevision{color:rgba(34,47,62,.7);font-size:16px;line-height:24px;padding:5px 5.5px}.tox .tox-revisionhistory__sidebar .tox-revisionhistory__revisions .tox-revisionhistory__card-check-icon{color:#222f3e;height:24px}.tox [data-mce-name=suggestededits] .tox-icon .tox-icon--badge{fill:#207ab7}.tox .tox-view .tox-suggestededits__pane{padding:0}.tox .tox-suggestededits__sink{position:relative;z-index:1000}.tox .tox-suggestededits__sink .tox-tiered-menu .tox-collection--list{position:absolute}.tox .tox-suggestededits__container{height:100%;display:flex;flex-direction:column}.tox .tox-suggestededits__container .tox-suggestededits{background-color:#fff;border-top:1px solid #ccc;display:flex;flex:1;height:inherit;overflow-x:auto;overflow-y:hidden;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__content{flex:1}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model{height:100%;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__model .tox-suggestededits__iframe{height:100%;width:100%;overflow:scroll;background-color:#fff}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar{background-color:#f0f0f0;display:flex;flex-direction:column;flex:0 1 auto;min-width:248px;width:316px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-header{padding:4px 12px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content{display:flex;flex:1;flex-direction:column;gap:12px;overflow:auto;padding:6px 12px 12px 12px;position:relative}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card{background-color:#fff;border-radius:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--divider{background-color:#f0f0f0;height:1px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--editor,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--single{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:6px;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header{display:flex;flex:auto;justify-content:space-between;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar .tox-skeleton__circle,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--avatar img{height:24px;width:24px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user{display:flex;align-items:center;flex:1 0 0;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--avatar{height:36px;width:36px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details{display:flex;flex-direction:column;justify-content:center;align-items:flex-start}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--name{color:#222f3e;font-size:14px;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__card--feedback-user .tox-suggestededits__card--details .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution{align-items:center;border:0;border-radius:20px;height:20px;width:20px;display:flex;flex:0 0 auto;justify-content:center;text-align:center}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--accepted .tox-icon svg{fill:#78AB46}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--header .tox-suggestededits__resolution.tox-suggestededits__resolution--rejected .tox-icon svg{fill:#c00}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content{display:flex;flex-direction:column;align-self:stretch;flex:auto;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations{display:flex;gap:8px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar{align-items:center;border-radius:6px;display:flex;flex-direction:column;font-size:12px;justify-content:space-between;width:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--insert{background-color:#78ab46;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--modify{background-color:#207ab7;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-bar--remove{background-color:#c00;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__operations .tox-suggestededits__operations-text{color:#222f3e;font-weight:700}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--feedback{color:#222f3e;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea{border:2px solid #ccc;border-radius:6px;color:#222f3e;gap:8px;padding:5px 6px;resize:none;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--content .tox-suggestededits__card--textarea:focus{border:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer{display:flex;flex-direction:column;gap:6px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--footer .tox-suggestededits__card--timestamp .tox-icon svg{fill:#222F3E80;transform:translate(0,8px);margin-top:-10px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons{display:flex;align-items:center;gap:8px;width:100%}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--review-buttons{justify-content:space-between;padding:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card .tox-suggestededits__card--buttons.tox-suggestededits__card--feedback-buttons{justify-content:flex-end}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--hidden{opacity:.5}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--resolved{background-color:#d3d5d8}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single{border-radius:6px}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus,.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card.tox-suggestededits__card--active .tox-suggestededits__card--single:focus-visible{outline:2px solid #207ab7}.tox .tox-suggestededits__container .tox-suggestededits .tox-suggestededits__sidebar-content .tox-suggestededits__card:hover{box-shadow:0 4px 8px 0 #d3d5d8}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:none;padding:0}.tox.tox-tinymce--toolbar-bottom .tox-editor-header,.tox.tox-tinymce-inline .tox-editor-header{margin-bottom:-1px}.tox.tox-tinymce-inline .tox-editor-container{overflow:hidden}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:none;box-shadow:none}.tox.tox.tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:transparent;box-shadow:0 4px 4px -3px rgba(0,0,0,.25);padding:0}.tox.tox.tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 4px 4px -3px rgba(0,0,0,.25)}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px 0}.tox .tox-menu.tox-collection.tox-collection--list{padding:0}.tox .tox-pop{box-shadow:none}.tox .tox-label,.tox .tox-number-input,.tox .tox-split-button,.tox .tox-tbtn,.tox .tox-tbtn--select,.tox .tox-toolbar-label{margin:2px 0 3px 0}.tox .tox-tbtn--bordered,.tox .tox-tbtn--bordered:focus,.tox .tox-tbtn--bordered:hover{border:1px solid #ccc}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background:url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff!important}.tox .tox-menubar+.tox-toolbar-overlord{border-top:none}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord .tox-toolbar__primary{border-top:1px solid #ccc;margin-top:-1px}.tox.tox-tinymce-aux .tox-toolbar__overflow{border:1px solid #ccc;padding:0}.tox .tox-pop .tox-pop__dialog .tox-toolbar{padding:0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-menubar{border-top:1px solid #ccc}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar-overlord:first-child .tox-toolbar__primary,.tox:not(.tox-tinymce-inline) .tox-editor-header:not(:first-child) .tox-toolbar:first-child{border-top:1px solid #ccc}.tox .tox-toolbar__group{padding:0 4px 0 4px}.tox .tox-collection__item{border-radius:0;cursor:pointer}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,0.8);height:1em;margin-left:.3em;width:auto}@media (forced-colors:active){.tox .tox-statusbar__branding svg{fill:currentColor}}.tox .tox-statusbar__branding a{align-items:center;display:inline-flex}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:1ch}.tox[dir=rtl] .tox-statusbar__branding svg{margin-left:0;margin-right:.3em}.tox .tox-statusbar__resize-handle{padding-bottom:0;padding-right:0}.tox .tox-button::before{display:none} diff --git a/public/tinymce/skins/ui/tinymce-5/skin.min.ts b/public/tinymce/skins/ui/tinymce-5/skin.min.ts new file mode 100644 index 0000000..e05f7d2 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.min.ts @@ -0,0 +1,508 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-checkmark": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__overflow": string; + "tox-toolbar__primary": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-end": string; + "tox-dialog__footer-start": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-toolbar-textfield": string; + "tox-custom-editor": string; + "tox-focusable-wrapper": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-highlight-bg-color__color": string; + "tox-icon-text-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-end": string; + "tox-view__header-start": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; + "tox-split-button": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css new file mode 100644 index 0000000..25b0a37 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.css @@ -0,0 +1,30 @@ +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} diff --git a/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js new file mode 100644 index 0000000..228a0de --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.js @@ -0,0 +1 @@ +tinymce.Resource.add('ui/tinymce-5/skin.shadowdom.css', `body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}`) \ No newline at end of file diff --git a/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css new file mode 100644 index 0000000..8745951 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css @@ -0,0 +1 @@ +body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201} diff --git a/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts new file mode 100644 index 0000000..e945719 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.shadowdom.ts @@ -0,0 +1,9 @@ +export interface Classes { + "tox-dialog__disable-scroll": string; + "tox-fullscreen": string; + "tox": string; + "tox-tinymce": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-tinymce-aux": string; +}; diff --git a/public/tinymce/skins/ui/tinymce-5/skin.ts b/public/tinymce/skins/ui/tinymce-5/skin.ts new file mode 100644 index 0000000..516a434 --- /dev/null +++ b/public/tinymce/skins/ui/tinymce-5/skin.ts @@ -0,0 +1,508 @@ +export interface Classes { + "tox": string; + "tox-tinymce": string; + "tox-tinymce-aux": string; + "tox-tinymce-inline": string; + "tox-editor-container": string; + "tox-editor-header": string; + "tox-icon--flip": string; + "tox-editor-dock-transition": string; + "tox-tinymce--toolbar-bottom": string; + "tox-tinymce--toolbar-sticky-on": string; + "tox-editor-header--empty": string; + "tox-editor-dock-fadeout": string; + "tox-editor-dock-fadein": string; + "accessibility-issue__header": string; + "accessibility-issue__subheader": string; + "accessbility-sr-only": string; + "accessibility-issue__description": string; + "tox-icon": string; + "accessibility-issue__contentID": string; + "accessibility-issue__document": string; + "accessibility-issue__repair": string; + "tox-form__group": string; + "tox-form__group--error": string; + "tox-dialog__body-content": string; + "accessibility-issue--info": string; + "accessibility-issue__icon": string; + "tox-button--naked": string; + "tox-button--icon": string; + "accessibility-issue--warn": string; + "accessibility-issue--error": string; + "accessibility-issue--success": string; + "tox-button": string; + "mce-codemirror": string; + "tox-inline-codemirror": string; + "tox-advtemplate": string; + "tox-form__grid": string; + "tox-force-desktop": string; + "tox-anchorbar": string; + "tox-bottom-anchorbar": string; + "tox-bar": string; + "tox-icon--success": string; + "tox-icon--error": string; + "tox-button--stretch": string; + "tox-context-form__group": string; + "tox-button--enabled": string; + "tox-button--secondary": string; + "tox-button--secondary--outline": string; + "tox-checkbox": string; + "tox-checkbox__input": string; + "tox-checkbox__icons": string; + "tox-checkbox-icon__unchecked": string; + "tox-checkbox-icon__indeterminate": string; + "tox-checkbox-icon__checked": string; + "tox-checkbox--disabled": string; + "tox-checkbox__label": string; + "tox-collection--toolbar": string; + "tox-collection__group": string; + "tox-collection--grid": string; + "tox-collection--list": string; + "tox-collection__group-heading": string; + "tox-collection__item": string; + "tox-image-selector-menu": string; + "tox-collection__item-image-selector": string; + "tox-collection__item-icon": string; + "tox-collection__item-image": string; + "tox-collection__item-checkmark": string; + "tox-image-selector__row": string; + "tox-collection__item--active": string; + "tox-collection__item--state-disabled": string; + "tox-collection__item--enabled": string; + "tox-collection--toolbar-lg": string; + "tox-collection__item-label": string; + "tox-collection__item-accessory": string; + "tox-collection__item-caret": string; + "tox-collection--horizontal": string; + "tox-collection__item-container": string; + "tox-collection__item-container--row": string; + "tox-collection__item-container--align-left": string; + "tox-collection__item-container--align-right": string; + "tox-collection__item-container--valign-top": string; + "tox-collection__item-container--valign-middle": string; + "tox-collection__item-container--valign-bottom": string; + "tox-collection__item-container--column": string; + "tox-collection": string; + "tox-hue-slider": string; + "tox-rgb-form": string; + "tox-rgba-preview": string; + "tox-color-picker-container": string; + "tox-sv-palette": string; + "tox-sv-palette-spectrum": string; + "tox-sv-palette-thumb": string; + "tox-sv-palette-inner-thumb": string; + "tox-hue-slider-spectrum": string; + "tox-hue-slider-thumb": string; + "tox-invalid": string; + "tox-rgb-container": string; + "tox-invalid-icon": string; + "tox-control-wrap__status-icon-invalid": string; + "tox-rgb-warning-note": string; + "tox-toolbar": string; + "tox-swatches": string; + "tox-toolbar__primary": string; + "tox-toolbar__overflow": string; + "tox-swatches-menu": string; + "tox-swatches__row": string; + "tox-swatch": string; + "tox-swatch--remove": string; + "tox-swatches__picker-btn": string; + "tox-comment": string; + "tox-comment--selected": string; + "tox-comment__single": string; + "tox-comment__header": string; + "tox-comment__date": string; + "tox-comment__body": string; + "tox-comment__body--expanded": string; + "tox-comment__body--pending": string; + "tox-comment__loading-text": string; + "tox-comment__overlaytext": string; + "tox-comment__expander": string; + "tox-comment__buttonspacing": string; + "tox-tbtn": string; + "tox-comment__mention-btn": string; + "tox-comment-thread": string; + "tox-comment-thread__overlay": string; + "tox-comment__reply": string; + "tox-comment__edit": string; + "tox-comment__gradient": string; + "tox-comment__overlay": string; + "tox-comment__busy-spinner": string; + "tox-comment__scroll": string; + "tox-comment--disappearing": string; + "tox-ring-loader": string; + "tox-rotation": string; + "tox-user": string; + "tox-user__avatar": string; + "tox-user__name": string; + "tox-dialog-wrap": string; + "tox-dialog-wrap__backdrop": string; + "tox-dialog-wrap__backdrop--opaque": string; + "tox-dialog": string; + "tox-dialog-inline": string; + "tox-dialog__header": string; + "tox-dialog__draghandle": string; + "tox-dialog__dismiss": string; + "tox-dialog__title": string; + "tox-dialog__body": string; + "tox-dialog__body-nav": string; + "tox-dialog__body-nav-item": string; + "tox-dialog__body-nav-item--active": string; + "tox-label": string; + "tox-label--center": string; + "tox-label--end": string; + "tox-dialog--width-lg": string; + "tox-dialog--fullscreen": string; + "tox-dialog--width-md": string; + "tox-dialog__body-content--centered": string; + "tox-dialog__footer": string; + "tox-dialog__footer-start": string; + "tox-dialog__footer-end": string; + "tox-dialog__busy-spinner": string; + "tox-dialog__table": string; + "tox-dialog__iframe": string; + "tox-dialog__iframe--opaque": string; + "tox-navobj-bordered": string; + "tox-navobj-bordered-focus": string; + "tox-dialog__popups": string; + "tox-dialog__body-iframe": string; + "tox-navobj": string; + "tox-dialog-dock-fadeout": string; + "tox-dialog-dock-fadein": string; + "tox-dialog-dock-transition": string; + "tox-dialog__disable-scroll": string; + "tox-dropzone-container": string; + "tox-dropzone": string; + "tox-edit-area": string; + "tox-edit-area__iframe": string; + "tox-edit-focus": string; + "tox-inline-edit-area": string; + "tox-control-wrap": string; + "tox-control-wrap--status-invalid": string; + "tox-control-wrap--status-unknown": string; + "tox-control-wrap__status-icon-unknown": string; + "tox-control-wrap--status-valid": string; + "tox-control-wrap__status-icon-valid": string; + "tox-control-wrap__status-icon-wrap": string; + "tox-textfield": string; + "tox-custom-preview": string; + "tox-autocompleter": string; + "tox-menu": string; + "tox-autocompleter-highlight": string; + "tox-color-input": string; + "tox-toolbar-label": string; + "tox-form": string; + "tox-form-group--maximize": string; + "tox-form__group--collection": string; + "tox-form__grid--2col": string; + "tox-form__grid--3col": string; + "tox-form__grid--4col": string; + "tox-form__controls-h-stack": string; + "tox-form__group--inline": string; + "tox-form__group--stretched": string; + "tox-textarea": string; + "tox-lock": string; + "tox-locked": string; + "tox-lock-icon__unlock": string; + "tox-lock-icon__lock": string; + "tox-lock-context-form-size-input": string; + "tox-toolbar-textfield": string; + "tox-listboxfield": string; + "tox-listbox--select": string; + "tox-textarea-wrap": string; + "tox-focusable-wrapper": string; + "tox-custom-editor": string; + "tox-naked-btn": string; + "tox-textfield-size": string; + "tox-listbox__select-label": string; + "tox-listbox__select-chevron": string; + "tox-selectfield": string; + "tox-fullscreen": string; + "tox-statusbar__resize-handle": string; + "tox-shadowhost": string; + "tox-help__more-link": string; + "tox-imagepreview": string; + "tox-imagepreview__loaded": string; + "tox-imagepreview__container": string; + "tox-imagepreview__image": string; + "tox-image-tools": string; + "tox-spacer": string; + "tox-croprect-block": string; + "tox-croprect-handle": string; + "tox-croprect-handle-move": string; + "tox-croprect-handle-nw": string; + "tox-croprect-handle-ne": string; + "tox-croprect-handle-sw": string; + "tox-croprect-handle-se": string; + "tox-image-selector-loading-spinner-wrapper": string; + "tox-image-selector-loading-spinner": string; + "tox-image-selector": string; + "tox-image-selector--remove": string; + "tox-image-selector-image-wrapper": string; + "tox-image-selector-image-img": string; + "tox-image-selector__picker-btn": string; + "tox-context-toolbar": string; + "tox-toolbar__group": string; + "tox-insert-table-picker": string; + "tox-insert-table-picker__selected": string; + "tox-insert-table-picker__label": string; + "tox-mentions__card-common": string; + "tox-mentions__card": string; + "tox-mentions__container": string; + "tox-mentions__avatar": string; + "tox-mentions__username": string; + "tox-mentions__description": string; + "tox-menu__label": string; + "tox-menubar": string; + "tox-promotion": string; + "tox-promotion-link": string; + "tox-mbtn": string; + "tox-mbtn--active": string; + "tox-mbtn__select-label": string; + "tox-mbtn__select-chevron": string; + "tox-notification": string; + "tox-notification--in": string; + "tox-notification--success": string; + "tox-notification--error": string; + "tox-notification--warn": string; + "tox-notification--warning": string; + "tox-notification--info": string; + "tox-notification__body": string; + "tox-notification__icon": string; + "tox-notification__dismiss": string; + "tox-progress-bar": string; + "tox-notification-container-dock-fadeout": string; + "tox-notification-container-dock-fadein": string; + "tox-notification-container-dock-transition": string; + "tox-onboarding-overlay": string; + "tox-onboarding-dialog": string; + "tox-onboarding-header": string; + "tox-onboarding-step": string; + "tox-onboarding-step--number": string; + "tox-onboarding-step--body": string; + "tox-onboarding-step--body-header": string; + "tox-onboarding-step--body-details": string; + "tox-onboarding-step--action": string; + "tox-onboarding-footer": string; + "tox-promotion-dialog": string; + "tox-promotion-dialog-plugin": string; + "tox-promotion-dialog-plugin--body": string; + "tox-promotion-dialog-plugin-header": string; + "tox-promotion-dialog-plugin-details": string; + "tox-promotion-dialog-plugin--icon": string; + "tox-promotion-dialog--subtitle": string; + "tox-promotion-dialog--explore": string; + "tox-promotion-dialog--footer": string; + "tox-promotion-button": string; + "tox-pop": string; + "tox-pop--resizing": string; + "tox-pop--transition": string; + "tox-pop__dialog": string; + "tox-pop--inset": string; + "tox-pop--bottom": string; + "tox-pop--top": string; + "tox-pop--left": string; + "tox-pop--right": string; + "tox-pop--align-left": string; + "tox-pop--align-right": string; + "tox-sidebar-wrap": string; + "tox-sidebar": string; + "tox-sidebar__slider": string; + "tox-sidebar__pane-container": string; + "tox-sidebar__pane": string; + "tox-sidebar--sliding-closed": string; + "tox-sidebar--sliding-open": string; + "tox-sidebar--sliding-growing": string; + "tox-sidebar--sliding-shrinking": string; + "tox-sidebar-content": string; + "tox-sidebar-content__header": string; + "tox-sidebar-content__header-close-button": string; + "tox-sidebar-content__title": string; + "tox-floating-sidebar": string; + "tox-floating-sidebar__content-wrapper": string; + "tox-floating-sidebar__header": string; + "tox-ai": string; + "tox-ai__user-prompt": string; + "tox-ai__user-prompt__context": string; + "tox-ai__user-prompt__text": string; + "tox-ai__scroll": string; + "tox-ai__response-content": string; + "tox-ai__response": string; + "tox-ai__response-streaming": string; + "tox-ai__error-message": string; + "tox-ai__footer": string; + "tox-ai__context": string; + "tox-ai__footer-actions": string; + "tox-selector": string; + "tox-platform-touch": string; + "tox-skeleton": string; + "tox-skeleton__line": string; + "wave": string; + "tox-skeleton__circle": string; + "tox-slider": string; + "tox-slider__rail": string; + "tox-slider__handle": string; + "tox-toolbar-slider": string; + "tox-toolbar-slider__input": string; + "tox-source-code": string; + "tox-spinner": string; + "tam-bouncing-dots": string; + "tox-ai__spinner": string; + "tox-statusbar": string; + "tox-statusbar__path": string; + "tox-statusbar__right-container": string; + "tox-statusbar__help-text": string; + "tox-statusbar__text-container": string; + "tox-statusbar__text-container-3-cols": string; + "tox-statusbar__text-container--flex-end": string; + "tox-statusbar__text-container--flex-start": string; + "tox-statusbar__text-container--space-around": string; + "tox-statusbar__wordcount": string; + "tox-statusbar__path-item": string; + "tox-statusbar__branding": string; + "tox-statusbar__resize-cursor-default": string; + "tox-statusbar__resize-cursor-both": string; + "tox-tag": string; + "tox-tag__icon": string; + "tox-tag__close": string; + "tox-throbber": string; + "tox-throbber__busy-spinner": string; + "tox-toggle": string; + "tox-toggle__slider": string; + "tox-tbtn__icon-wrap": string; + "tox-tbtn--active": string; + "tox-tbtn--enabled": string; + "tox-tbtn--disabled": string; + "tox-tbtn-more": string; + "tox-tbtn--md": string; + "tox-tbtn--lg": string; + "tox-tbtn--return": string; + "tox-tbtn--labeled": string; + "tox-tbtn__vlabel": string; + "tox-label--context-toolbar": string; + "tox-number-input": string; + "tox-input-wrapper": string; + "minus": string; + "plus": string; + "tox-tbtn--select": string; + "tox-tbtn--bordered": string; + "tox-tbtn__select-label": string; + "tox-tbtn__select-chevron": string; + "tox-tbtn--bespoke": string; + "tox-split-button__main": string; + "tox-split-button__chevron": string; + "tox-icon-text-color__color": string; + "tox-icon-highlight-bg-color__color": string; + "tox-toolbar-overlord": string; + "tox-toolbar__overflow--closed": string; + "tox-toolbar__overflow--growing": string; + "tox-toolbar__overflow--shrinking": string; + "tox-toolbar--scrolling": string; + "tox-toolbar--no-divider": string; + "tox-toolbar__group--pull-right": string; + "tox-tooltip": string; + "tox-tooltip__body": string; + "tox-tooltip__arrow": string; + "tox-tooltip--down": string; + "tox-tooltip--up": string; + "tox-tooltip--right": string; + "tox-tooltip--left": string; + "tox-tree": string; + "tox-trbtn": string; + "tox-tree__label": string; + "tox-trbtn--disabled": string; + "tox-trbtn--enabled": string; + "tox-trbtn--return": string; + "tox-trbtn--labeled": string; + "tox-trbtn__vlabel": string; + "tox-tree--directory": string; + "tox-tree--directory__label": string; + "tox-chevron": string; + "tox-tree--directory__children--growing": string; + "tox-tree--directory__children--shrinking": string; + "tox-tree--directory__children--open": string; + "tox-tree--leaf__label": string; + "tox-icon-custom-state": string; + "tox-tree--directory__children": string; + "color-swatch-remove-color": string; + "tox-view-wrap": string; + "tox-view-wrap__slot-container": string; + "tox-view": string; + "tox-view__header": string; + "tox-view__label": string; + "tox-view__label--normal": string; + "tox-view__label--large": string; + "tox-view--mobile": string; + "tox-view__toolbar": string; + "tox-view--scrolling": string; + "tox-view__align-right": string; + "tox-view__toolbar__group": string; + "tox-view__header-start": string; + "tox-view__header-end": string; + "tox-view__pane": string; + "tox-view__pane_panel": string; + "tox-well": string; + "tox-revisionhistory__pane": string; + "tox-revisionhistory__container": string; + "tox-revisionhistory": string; + "tox-revisionhistory__iframe": string; + "tox-revisionhistory__sidebar": string; + "tox-revisionhistory__sidebar-title": string; + "tox-revisionhistory__revisions": string; + "tox-revisionhistory__card": string; + "tox-revisionhistory__card--selected": string; + "tox-revisionhistory__card-label": string; + "tox-revisionhistory__card-content": string; + "tox-revisionhistory__card-info": string; + "tox-revisionhistory__card-date-label": string; + "tox-revisionhistory__card-author-name": string; + "tox-revisionhistory__avatar": string; + "tox-revisionhistory__norevision": string; + "tox-revisionhistory__card-check-icon": string; + "tox-icon--badge": string; + "tox-suggestededits__pane": string; + "tox-suggestededits__sink": string; + "tox-tiered-menu": string; + "tox-suggestededits__container": string; + "tox-suggestededits": string; + "tox-suggestededits__content": string; + "tox-suggestededits__model": string; + "tox-suggestededits__iframe": string; + "tox-suggestededits__sidebar": string; + "tox-suggestededits__sidebar-header": string; + "tox-suggestededits__sidebar-content": string; + "tox-suggestededits__card": string; + "tox-suggestededits__card--divider": string; + "tox-suggestededits__card--single": string; + "tox-suggestededits__card--editor": string; + "tox-suggestededits__card--header": string; + "tox-suggestededits__card--user": string; + "tox-suggestededits__card--avatar": string; + "tox-suggestededits__card--details": string; + "tox-suggestededits__card--name": string; + "tox-suggestededits__card--feedback-user": string; + "tox-suggestededits__card--timestamp": string; + "tox-suggestededits__resolution": string; + "tox-suggestededits__resolution--accepted": string; + "tox-suggestededits__resolution--rejected": string; + "tox-suggestededits__card--content": string; + "tox-suggestededits__operations": string; + "tox-suggestededits__operations-bar": string; + "tox-suggestededits__operations-bar--insert": string; + "tox-suggestededits__operations-bar--modify": string; + "tox-suggestededits__operations-bar--remove": string; + "tox-suggestededits__operations-text": string; + "tox-suggestededits__card--feedback": string; + "tox-suggestededits__card--textarea": string; + "tox-suggestededits__card--footer": string; + "tox-suggestededits__card--buttons": string; + "tox-suggestededits__card--review-buttons": string; + "tox-suggestededits__card--feedback-buttons": string; + "tox-suggestededits__card--hidden": string; + "tox-suggestededits__card--resolved": string; + "tox-suggestededits__card--active": string; + "tox-dialog-loading": string; + "tox-tab": string; + "tox-dialog__content-js": string; + "tox-split-button": string; +}; diff --git a/public/tinymce/themes/silver/index.js b/public/tinymce/themes/silver/index.js new file mode 100644 index 0000000..09caa86 --- /dev/null +++ b/public/tinymce/themes/silver/index.js @@ -0,0 +1,7 @@ +// Exports the "silver" theme for usage with module loaders +// Usage: +// CommonJS: +// require('tinymce/themes/silver') +// ES2015: +// import 'tinymce/themes/silver' +require('./theme.js'); \ No newline at end of file diff --git a/public/tinymce/themes/silver/theme.js b/public/tinymce/themes/silver/theme.js new file mode 100644 index 0000000..4ec9ff9 --- /dev/null +++ b/public/tinymce/themes/silver/theme.js @@ -0,0 +1,34748 @@ +/** + * TinyMCE version 8.3.1 (2025-12-17) + */ + +(function () { + 'use strict'; + + /* eslint-disable @typescript-eslint/no-wrapper-object-types */ + const getPrototypeOf$2 = Object.getPrototypeOf; + const hasProto = (v, constructor, predicate) => { + if (predicate(v, constructor.prototype)) { + return true; + } + else { + // String-based fallback time + return v.constructor?.name === constructor.name; + } + }; + const typeOf = (x) => { + const t = typeof x; + if (x === null) { + return 'null'; + } + else if (t === 'object' && Array.isArray(x)) { + return 'array'; + } + else if (t === 'object' && hasProto(x, String, (o, proto) => proto.isPrototypeOf(o))) { + return 'string'; + } + else { + return t; + } + }; + const isType$1 = (type) => (value) => typeOf(value) === type; + const isSimpleType = (type) => (value) => typeof value === type; + const eq$1 = (t) => (a) => t === a; + const is$2 = (value, constructor) => isObject(value) && hasProto(value, constructor, (o, proto) => getPrototypeOf$2(o) === proto); + const isString = isType$1('string'); + const isObject = isType$1('object'); + const isPlainObject = (value) => is$2(value, Object); + const isArray = isType$1('array'); + const isNull = eq$1(null); + const isBoolean = isSimpleType('boolean'); + const isUndefined = eq$1(undefined); + const isNullable = (a) => a === null || a === undefined; + const isNonNullable = (a) => !isNullable(a); + const isFunction = isSimpleType('function'); + const isNumber = isSimpleType('number'); + const isArrayOf = (value, pred) => { + if (isArray(value)) { + for (let i = 0, len = value.length; i < len; ++i) { + if (!(pred(value[i]))) { + return false; + } + } + return true; + } + return false; + }; + + const noop = () => { }; + const noarg = (f) => () => f(); + /** Compose a unary function with an n-ary function */ + const compose = (fa, fb) => { + return (...args) => { + return fa(fb.apply(null, args)); + }; + }; + /** Compose two unary functions. Similar to compose, but avoids using Function.prototype.apply. */ + const compose1 = (fbc, fab) => (a) => fbc(fab(a)); + const constant$1 = (value) => { + return () => { + return value; + }; + }; + const identity = (x) => { + return x; + }; + const tripleEquals = (a, b) => { + return a === b; + }; + function curry(fn, ...initialArgs) { + return (...restArgs) => { + const all = initialArgs.concat(restArgs); + return fn.apply(null, all); + }; + } + const not = (f) => (t) => !f(t); + const die = (msg) => { + return () => { + throw new Error(msg); + }; + }; + const apply$1 = (f) => { + return f(); + }; + const never = constant$1(false); + const always = constant$1(true); + + /** + * The `Optional` type represents a value (of any type) that potentially does + * not exist. Any `Optional` can either be a `Some` (in which case the + * value does exist) or a `None` (in which case the value does not exist). This + * module defines a whole lot of FP-inspired utility functions for dealing with + * `Optional` objects. + * + * Comparison with null or undefined: + * - We don't get fancy null coalescing operators with `Optional` + * - We do get fancy helper functions with `Optional` + * - `Optional` support nesting, and allow for the type to still be nullable (or + * another `Optional`) + * - There is no option to turn off strict-optional-checks like there is for + * strict-null-checks + */ + class Optional { + tag; + value; + // Sneaky optimisation: every instance of Optional.none is identical, so just + // reuse the same object + static singletonNone = new Optional(false); + // The internal representation has a `tag` and a `value`, but both are + // private: able to be console.logged, but not able to be accessed by code + constructor(tag, value) { + this.tag = tag; + this.value = value; + } + // --- Identities --- + /** + * Creates a new `Optional` that **does** contain a value. + */ + static some(value) { + return new Optional(true, value); + } + /** + * Create a new `Optional` that **does not** contain a value. `T` can be + * any type because we don't actually have a `T`. + */ + static none() { + return Optional.singletonNone; + } + /** + * Perform a transform on an `Optional` type. Regardless of whether this + * `Optional` contains a value or not, `fold` will return a value of type `U`. + * If this `Optional` does not contain a value, the `U` will be created by + * calling `onNone`. If this `Optional` does contain a value, the `U` will be + * created by calling `onSome`. + * + * For the FP enthusiasts in the room, this function: + * 1. Could be used to implement all of the functions below + * 2. Forms a catamorphism + */ + fold(onNone, onSome) { + if (this.tag) { + return onSome(this.value); + } + else { + return onNone(); + } + } + /** + * Determine if this `Optional` object contains a value. + */ + isSome() { + return this.tag; + } + /** + * Determine if this `Optional` object **does not** contain a value. + */ + isNone() { + return !this.tag; + } + // --- Functor (name stolen from Haskell / maths) --- + /** + * Perform a transform on an `Optional` object, **if** there is a value. If + * you provide a function to turn a T into a U, this is the function you use + * to turn an `Optional` into an `Optional`. If this **does** contain + * a value then the output will also contain a value (that value being the + * output of `mapper(this.value)`), and if this **does not** contain a value + * then neither will the output. + */ + map(mapper) { + if (this.tag) { + return Optional.some(mapper(this.value)); + } + else { + return Optional.none(); + } + } + // --- Monad (name stolen from Haskell / maths) --- + /** + * Perform a transform on an `Optional` object, **if** there is a value. + * Unlike `map`, here the transform itself also returns an `Optional`. + */ + bind(binder) { + if (this.tag) { + return binder(this.value); + } + else { + return Optional.none(); + } + } + // --- Traversable (name stolen from Haskell / maths) --- + /** + * For a given predicate, this function finds out if there **exists** a value + * inside this `Optional` object that meets the predicate. In practice, this + * means that for `Optional`s that do not contain a value it returns false (as + * no predicate-meeting value exists). + */ + exists(predicate) { + return this.tag && predicate(this.value); + } + /** + * For a given predicate, this function finds out if **all** the values inside + * this `Optional` object meet the predicate. In practice, this means that + * for `Optional`s that do not contain a value it returns true (as all 0 + * objects do meet the predicate). + */ + forall(predicate) { + return !this.tag || predicate(this.value); + } + filter(predicate) { + if (!this.tag || predicate(this.value)) { + return this; + } + else { + return Optional.none(); + } + } + // --- Getters --- + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. + */ + getOr(replacement) { + return this.tag ? this.value : replacement; + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. Unlike `getOr`, in this method the `replacement` object is also + * `Optional` - meaning that this method will always return an `Optional`. + */ + or(replacement) { + return this.tag ? this : replacement; + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided `Optional` object does not contain a + * value. Unlike `getOr`, in this method the `replacement` value is + * "thunked" - that is to say that you don't pass a value to `getOrThunk`, you + * pass a function which (if called) will **return** the `value` you want to + * use. + */ + getOrThunk(thunk) { + return this.tag ? this.value : thunk(); + } + /** + * Get the value out of the inside of the `Optional` object, using a default + * `replacement` value if the provided Optional object does not contain a + * value. + * + * Unlike `or`, in this method the `replacement` value is "thunked" - that is + * to say that you don't pass a value to `orThunk`, you pass a function which + * (if called) will **return** the `value` you want to use. + * + * Unlike `getOrThunk`, in this method the `replacement` value is also + * `Optional`, meaning that this method will always return an `Optional`. + */ + orThunk(thunk) { + return this.tag ? this : thunk(); + } + /** + * Get the value out of the inside of the `Optional` object, throwing an + * exception if the provided `Optional` object does not contain a value. + * + * WARNING: + * You should only be using this function if you know that the `Optional` + * object **is not** empty (otherwise you're throwing exceptions in production + * code, which is bad). + * + * In tests this is more acceptable. + * + * Prefer other methods to this, such as `.each`. + */ + getOrDie(message) { + if (!this.tag) { + throw new Error(message ?? 'Called getOrDie on None'); + } + else { + return this.value; + } + } + // --- Interop with null and undefined --- + /** + * Creates an `Optional` value from a nullable (or undefined-able) input. + * Null, or undefined, is converted to `None`, and anything else is converted + * to `Some`. + */ + static from(value) { + return isNonNullable(value) ? Optional.some(value) : Optional.none(); + } + /** + * Converts an `Optional` to a nullable type, by getting the value if it + * exists, or returning `null` if it does not. + */ + getOrNull() { + return this.tag ? this.value : null; + } + /** + * Converts an `Optional` to an undefined-able type, by getting the value if + * it exists, or returning `undefined` if it does not. + */ + getOrUndefined() { + return this.value; + } + // --- Utilities --- + /** + * If the `Optional` contains a value, perform an action on that value. + * Unlike the rest of the methods on this type, `.each` has side-effects. If + * you want to transform an `Optional` **into** something, then this is not + * the method for you. If you want to use an `Optional` to **do** + * something, then this is the method for you - provided you're okay with not + * doing anything in the case where the `Optional` doesn't have a value inside + * it. If you're not sure whether your use-case fits into transforming + * **into** something or **doing** something, check whether it has a return + * value. If it does, you should be performing a transform. + */ + each(worker) { + if (this.tag) { + worker(this.value); + } + } + /** + * Turn the `Optional` object into an array that contains all of the values + * stored inside the `Optional`. In practice, this means the output will have + * either 0 or 1 elements. + */ + toArray() { + return this.tag ? [this.value] : []; + } + /** + * Turn the `Optional` object into a string for debugging or printing. Not + * recommended for production code, but good for debugging. Also note that + * these days an `Optional` object can be logged to the console directly, and + * its inner value (if it exists) will be visible. + */ + toString() { + return this.tag ? `some(${this.value})` : 'none()'; + } + } + + const nativeSlice = Array.prototype.slice; + const nativeIndexOf = Array.prototype.indexOf; + const nativePush = Array.prototype.push; + const rawIndexOf = (ts, t) => nativeIndexOf.call(ts, t); + const indexOf = (xs, x) => { + // The rawIndexOf method does not wrap up in an option. This is for performance reasons. + const r = rawIndexOf(xs, x); + return r === -1 ? Optional.none() : Optional.some(r); + }; + const contains$2 = (xs, x) => rawIndexOf(xs, x) > -1; + const exists = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return true; + } + } + return false; + }; + const range$2 = (num, f) => { + const r = []; + for (let i = 0; i < num; i++) { + r.push(f(i)); + } + return r; + }; + // It's a total micro optimisation, but these do make some difference. + // Particularly for browsers other than Chrome. + // - length caching + // http://jsperf.com/browser-diet-jquery-each-vs-for-loop/69 + // - not using push + // http://jsperf.com/array-direct-assignment-vs-push/2 + const chunk$1 = (array, size) => { + const r = []; + for (let i = 0; i < array.length; i += size) { + const s = nativeSlice.call(array, i, i + size); + r.push(s); + } + return r; + }; + const map$2 = (xs, f) => { + // pre-allocating array size when it's guaranteed to be known + // http://jsperf.com/push-allocated-vs-dynamic/22 + const len = xs.length; + const r = new Array(len); + for (let i = 0; i < len; i++) { + const x = xs[i]; + r[i] = f(x, i); + } + return r; + }; + // Unwound implementing other functions in terms of each. + // The code size is roughly the same, and it should allow for better optimisation. + // const each = function(xs: T[], f: (x: T, i?: number, xs?: T[]) => void): void { + const each$1 = (xs, f) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + f(x, i); + } + }; + const eachr = (xs, f) => { + for (let i = xs.length - 1; i >= 0; i--) { + const x = xs[i]; + f(x, i); + } + }; + const partition$3 = (xs, pred) => { + const pass = []; + const fail = []; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + const arr = pred(x, i) ? pass : fail; + arr.push(x); + } + return { pass, fail }; + }; + const filter$2 = (xs, pred) => { + const r = []; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + r.push(x); + } + } + return r; + }; + const foldr = (xs, f, acc) => { + eachr(xs, (x, i) => { + acc = f(acc, x, i); + }); + return acc; + }; + const foldl = (xs, f, acc) => { + each$1(xs, (x, i) => { + acc = f(acc, x, i); + }); + return acc; + }; + const findUntil = (xs, pred, until) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return Optional.some(x); + } + else if (until(x, i)) { + break; + } + } + return Optional.none(); + }; + const find$5 = (xs, pred) => { + return findUntil(xs, pred, never); + }; + const findIndex$1 = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + if (pred(x, i)) { + return Optional.some(i); + } + } + return Optional.none(); + }; + const flatten = (xs) => { + // Note, this is possible because push supports multiple arguments: + // http://jsperf.com/concat-push/6 + // Note that in the past, concat() would silently work (very slowly) for array-like objects. + // With this change it will throw an error. + const r = []; + for (let i = 0, len = xs.length; i < len; ++i) { + // Ensure that each value is an array itself + if (!isArray(xs[i])) { + throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs); + } + nativePush.apply(r, xs[i]); + } + return r; + }; + const bind$3 = (xs, f) => flatten(map$2(xs, f)); + const forall = (xs, pred) => { + for (let i = 0, len = xs.length; i < len; ++i) { + const x = xs[i]; + if (pred(x, i) !== true) { + return false; + } + } + return true; + }; + const reverse = (xs) => { + const r = nativeSlice.call(xs, 0); + r.reverse(); + return r; + }; + const difference = (a1, a2) => filter$2(a1, (x) => !contains$2(a2, x)); + const mapToObject = (xs, f) => { + const r = {}; + for (let i = 0, len = xs.length; i < len; i++) { + const x = xs[i]; + r[String(x)] = f(x, i); + } + return r; + }; + const pure$2 = (x) => [x]; + const sort = (xs, comparator) => { + const copy = nativeSlice.call(xs, 0); + copy.sort(comparator); + return copy; + }; + const get$i = (xs, i) => i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none(); + const head = (xs) => get$i(xs, 0); + const last$1 = (xs) => get$i(xs, xs.length - 1); + const from = isFunction(Array.from) ? Array.from : (x) => nativeSlice.call(x); + const findMap = (arr, f) => { + for (let i = 0; i < arr.length; i++) { + const r = f(arr[i], i); + if (r.isSome()) { + return r; + } + } + return Optional.none(); + }; + + // There are many variations of Object iteration that are faster than the 'for-in' style: + // http://jsperf.com/object-keys-iteration/107 + // + // Use the native keys if it is available (IE9+), otherwise fall back to manually filtering + const keys = Object.keys; + const hasOwnProperty = Object.hasOwnProperty; + const each = (obj, f) => { + const props = keys(obj); + for (let k = 0, len = props.length; k < len; k++) { + const i = props[k]; + const x = obj[i]; + f(x, i); + } + }; + const map$1 = (obj, f) => { + return tupleMap(obj, (x, i) => ({ + k: i, + v: f(x, i) + })); + }; + const tupleMap = (obj, f) => { + const r = {}; + each(obj, (x, i) => { + const tuple = f(x, i); + r[tuple.k] = tuple.v; + }); + return r; + }; + const objAcc = (r) => (x, i) => { + r[i] = x; + }; + const internalFilter = (obj, pred, onTrue, onFalse) => { + each(obj, (x, i) => { + (pred(x, i) ? onTrue : onFalse)(x, i); + }); + }; + const bifilter = (obj, pred) => { + const t = {}; + const f = {}; + internalFilter(obj, pred, objAcc(t), objAcc(f)); + return { t, f }; + }; + const filter$1 = (obj, pred) => { + const t = {}; + internalFilter(obj, pred, objAcc(t), noop); + return t; + }; + const mapToArray = (obj, f) => { + const r = []; + each(obj, (value, name) => { + r.push(f(value, name)); + }); + return r; + }; + const find$4 = (obj, pred) => { + const props = keys(obj); + for (let k = 0, len = props.length; k < len; k++) { + const i = props[k]; + const x = obj[i]; + if (pred(x, i, obj)) { + return Optional.some(x); + } + } + return Optional.none(); + }; + const values = (obj) => { + return mapToArray(obj, identity); + }; + const get$h = (obj, key) => { + return has$2(obj, key) ? Optional.from(obj[key]) : Optional.none(); + }; + const has$2 = (obj, key) => hasOwnProperty.call(obj, key); + const hasNonNullableKey = (obj, key) => has$2(obj, key) && obj[key] !== undefined && obj[key] !== null; + + /* + * Generates a church encoded ADT (https://en.wikipedia.org/wiki/Church_encoding) + * For syntax and use, look at the test code. + */ + const generate$7 = (cases) => { + // validation + if (!isArray(cases)) { + throw new Error('cases must be an array'); + } + if (cases.length === 0) { + throw new Error('there must be at least one case'); + } + const constructors = []; + // adt is mutated to add the individual cases + const adt = {}; + each$1(cases, (acase, count) => { + const keys$1 = keys(acase); + // validation + if (keys$1.length !== 1) { + throw new Error('one and only one name per case'); + } + const key = keys$1[0]; + const value = acase[key]; + // validation + if (adt[key] !== undefined) { + throw new Error('duplicate key detected:' + key); + } + else if (key === 'cata') { + throw new Error('cannot have a case named cata (sorry)'); + } + else if (!isArray(value)) { + // this implicitly checks if acase is an object + throw new Error('case arguments must be an array'); + } + constructors.push(key); + // + // constructor for key + // + adt[key] = (...args) => { + const argLength = args.length; + // validation + if (argLength !== value.length) { + throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength); + } + const match = (branches) => { + const branchKeys = keys(branches); + if (constructors.length !== branchKeys.length) { + throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\nActual: ' + branchKeys.join(',')); + } + const allReqd = forall(constructors, (reqKey) => { + return contains$2(branchKeys, reqKey); + }); + if (!allReqd) { + throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\nRequired: ' + constructors.join(', ')); + } + return branches[key].apply(null, args); + }; + // + // the fold function for key + // + return { + fold: (...foldArgs) => { + // runtime validation + if (foldArgs.length !== cases.length) { + throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + foldArgs.length); + } + const target = foldArgs[count]; + return target.apply(null, args); + }, + match, + // NOTE: Only for debugging. + log: (label) => { + // eslint-disable-next-line no-console + console.log(label, { + constructors, + constructor: key, + params: args + }); + } + }; + }; + }); + return adt; + }; + const Adt = { + generate: generate$7 + }; + + const Cell = (initial) => { + let value = initial; + const get = () => { + return value; + }; + const set = (v) => { + value = v; + }; + return { + get, + set + }; + }; + + const nu$d = (baseFn) => { + let data = Optional.none(); + let callbacks = []; + /** map :: this LazyValue a -> (a -> b) -> LazyValue b */ + const map = (f) => nu$d((nCallback) => { + get((data) => { + nCallback(f(data)); + }); + }); + const get = (nCallback) => { + if (isReady()) { + call(nCallback); + } + else { + callbacks.push(nCallback); + } + }; + const set = (x) => { + if (!isReady()) { + data = Optional.some(x); + run(callbacks); + callbacks = []; + } + }; + const isReady = () => data.isSome(); + const run = (cbs) => { + each$1(cbs, call); + }; + const call = (cb) => { + data.each((x) => { + setTimeout(() => { + cb(x); + }, 0); + }); + }; + // Lazy values cache the value and kick off immediately + baseFn(set); + return { + get, + map, + isReady + }; + }; + const pure$1 = (a) => nu$d((callback) => { + callback(a); + }); + const LazyValue = { + nu: nu$d, + pure: pure$1 + }; + + const errorReporter = (err) => { + // we can not throw the error in the reporter as it will just be black-holed + // by the Promise so we use a setTimeout to escape the Promise. + setTimeout(() => { + throw err; + }, 0); + }; + const make$8 = (run) => { + const get = (callback) => { + run().then(callback, errorReporter); + }; + /** map :: this Future a -> (a -> b) -> Future b */ + const map = (fab) => { + return make$8(() => run().then(fab)); + }; + /** bind :: this Future a -> (a -> Future b) -> Future b */ + const bind = (aFutureB) => { + return make$8(() => run().then((v) => aFutureB(v).toPromise())); + }; + /** anonBind :: this Future a -> Future b -> Future b + * Returns a future, which evaluates the first future, ignores the result, then evaluates the second. + */ + const anonBind = (futureB) => { + return make$8(() => run().then(() => futureB.toPromise())); + }; + const toLazy = () => { + return LazyValue.nu(get); + }; + const toCached = () => { + let cache = null; + return make$8(() => { + if (cache === null) { + cache = run(); + } + return cache; + }); + }; + const toPromise = run; + return { + map, + bind, + anonBind, + toLazy, + toCached, + toPromise, + get + }; + }; + const nu$c = (baseFn) => { + return make$8(() => new Promise(baseFn)); + }; + /** a -> Future a */ + const pure = (a) => { + return make$8(() => Promise.resolve(a)); + }; + const Future = { + nu: nu$c, + pure + }; + + /** + * Creates a new `Result` that **does** contain a value. + */ + const value$4 = (value) => { + const applyHelper = (fn) => fn(value); + const constHelper = constant$1(value); + const outputHelper = () => output; + const output = { + // Debug info + tag: true, + inner: value, + // Actual Result methods + fold: (_onError, onValue) => onValue(value), + isValue: always, + isError: never, + map: (mapper) => Result.value(mapper(value)), + mapError: outputHelper, + bind: applyHelper, + exists: applyHelper, + forall: applyHelper, + getOr: constHelper, + or: outputHelper, + getOrThunk: constHelper, + orThunk: outputHelper, + getOrDie: constHelper, + each: (fn) => { + // Can't write the function inline because we don't want to return something by mistake + fn(value); + }, + toOptional: () => Optional.some(value), + }; + return output; + }; + /** + * Creates a new `Result` that **does not** contain a value, and therefore + * contains an error. + */ + const error$1 = (error) => { + const outputHelper = () => output; + const output = { + // Debug info + tag: false, + inner: error, + // Actual Result methods + fold: (onError, _onValue) => onError(error), + isValue: never, + isError: always, + map: outputHelper, + mapError: (mapper) => Result.error(mapper(error)), + bind: outputHelper, + exists: never, + forall: always, + getOr: identity, + or: identity, + getOrThunk: apply$1, + orThunk: apply$1, + getOrDie: die(String(error)), + each: noop, + toOptional: Optional.none, + }; + return output; + }; + /** + * Creates a new `Result` from an `Optional` and an `E`. If the + * `Optional` contains a value, so will the outputted `Result`. If it does not, + * the outputted `Result` will contain an error (and that error will be the + * error passed in). + */ + const fromOption = (optional, err) => optional.fold(() => error$1(err), value$4); + const Result = { + value: value$4, + error: error$1, + fromOption + }; + + const wrap$2 = (delegate) => { + const toCached = () => { + return wrap$2(delegate.toCached()); + }; + const bindFuture = (f) => { + return wrap$2(delegate.bind((resA) => resA.fold((err) => (Future.pure(Result.error(err))), (a) => f(a)))); + }; + const bindResult = (f) => { + return wrap$2(delegate.map((resA) => resA.bind(f))); + }; + const mapResult = (f) => { + return wrap$2(delegate.map((resA) => resA.map(f))); + }; + const mapError = (f) => { + return wrap$2(delegate.map((resA) => resA.mapError(f))); + }; + const foldResult = (whenError, whenValue) => { + return delegate.map((res) => res.fold(whenError, whenValue)); + }; + const withTimeout = (timeout, errorThunk) => { + return wrap$2(Future.nu((callback) => { + let timedOut = false; + const timer = setTimeout(() => { + timedOut = true; + callback(Result.error(errorThunk())); + }, timeout); + delegate.get((result) => { + if (!timedOut) { + clearTimeout(timer); + callback(result); + } + }); + })); + }; + return { + ...delegate, + toCached, + bindFuture, + bindResult, + mapResult, + mapError, + foldResult, + withTimeout + }; + }; + const nu$b = (worker) => { + return wrap$2(Future.nu(worker)); + }; + const value$3 = (value) => { + return wrap$2(Future.pure(Result.value(value))); + }; + const error = (error) => { + return wrap$2(Future.pure(Result.error(error))); + }; + const fromResult$1 = (result) => { + return wrap$2(Future.pure(result)); + }; + const fromFuture = (future) => { + return wrap$2(future.map(Result.value)); + }; + const fromPromise = (promise) => { + return nu$b((completer) => { + promise.then((value) => { + completer(Result.value(value)); + }, (error) => { + completer(Result.error(error)); + }); + }); + }; + const FutureResult = { + nu: nu$b, + wrap: wrap$2, + pure: value$3, + value: value$3, + error, + fromResult: fromResult$1, + fromFuture, + fromPromise + }; + + // Use window object as the global if it's available since CSP will block script evals + // eslint-disable-next-line @typescript-eslint/no-implied-eval + const Global = typeof window !== 'undefined' ? window : Function('return this;')(); + + /** + * Adds two numbers, and wrap to a range. + * If the result overflows to the right, snap to the left. + * If the result overflows to the left, snap to the right. + */ + const cycleBy = (value, delta, min, max) => { + const r = value + delta; + if (r > max) { + return min; + } + else if (r < min) { + return max; + } + else { + return r; + } + }; + // ASSUMPTION: Max will always be larger than min + const clamp = (value, min, max) => Math.min(Math.max(value, min), max); + // the division is meant to get a number between 0 and 1 for more information check this discussion: https://stackoverflow.com/questions/58285941/how-to-replace-math-random-with-crypto-getrandomvalues-and-keep-same-result + const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295; + + /** + * Generate a unique identifier. + * + * The unique portion of the identifier only contains an underscore + * and digits, so that it may safely be used within HTML attributes. + * + * The chance of generating a non-unique identifier has been minimized + * by combining the current time, a random number and a one-up counter. + * + * generate :: String -> String + */ + let unique = 0; + const generate$6 = (prefix) => { + const date = new Date(); + const time = date.getTime(); + const random$1 = Math.floor(random() * 1000000000); + unique++; + return prefix + '_' + random$1 + unique + String(time); + }; + + const shallow$1 = (old, nu) => { + return nu; + }; + const deep$1 = (old, nu) => { + const bothObjects = isPlainObject(old) && isPlainObject(nu); + return bothObjects ? deepMerge(old, nu) : nu; + }; + const baseMerge = (merger) => { + return (...objects) => { + if (objects.length === 0) { + throw new Error(`Can't merge zero objects`); + } + const ret = {}; + for (let j = 0; j < objects.length; j++) { + const curObject = objects[j]; + for (const key in curObject) { + if (has$2(curObject, key)) { + ret[key] = merger(ret[key], curObject[key]); + } + } + } + return ret; + }; + }; + const deepMerge = baseMerge(deep$1); + const merge$1 = baseMerge(shallow$1); + + /** + * **Is** the value stored inside this Optional object equal to `rhs`? + */ + const is$1 = (lhs, rhs, comparator = tripleEquals) => lhs.exists((left) => comparator(left, rhs)); + /** + * Are these two Optional objects equal? Equality here means either they're both + * `Some` (and the values are equal under the comparator) or they're both `None`. + */ + const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone()); + const cat = (arr) => { + const r = []; + const push = (x) => { + r.push(x); + }; + for (let i = 0; i < arr.length; i++) { + arr[i].each(push); + } + return r; + }; + const sequence = (arr) => { + const r = []; + for (let i = 0; i < arr.length; i++) { + const x = arr[i]; + if (x.isSome()) { + r.push(x.getOrDie()); + } + else { + return Optional.none(); + } + } + return Optional.some(r); + }; + /* + Notes on the lift functions: + - We used to have a generic liftN, but we were concerned about its type-safety, and the below variants were faster in microbenchmarks. + - The getOrDie calls are partial functions, but are checked beforehand. This is faster and more convenient (but less safe) than folds. + - && is used instead of a loop for simplicity and performance. + */ + const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none(); + const lift3 = (oa, ob, oc, f) => oa.isSome() && ob.isSome() && oc.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Optional.none(); + const mapFrom = (a, f) => (a !== undefined && a !== null) ? Optional.some(f(a)) : Optional.none(); + // This can help with type inference, by specifying the type param on the none case, so the caller doesn't have to. + const someIf = (b, a) => b ? Optional.some(a) : Optional.none(); + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + const escape = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + + /** path :: ([String], JsObj?) -> JsObj */ + const path$1 = (parts, scope) => { + let o = scope !== undefined && scope !== null ? scope : Global; + for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) { + o = o[parts[i]]; + } + return o; + }; + /** resolve :: (String, JsObj?) -> JsObj */ + const resolve = (p, scope) => { + const parts = p.split('.'); + return path$1(parts, scope); + }; + + Adt.generate([ + { bothErrors: ['error1', 'error2'] }, + { firstError: ['error1', 'value2'] }, + { secondError: ['value1', 'error2'] }, + { bothValues: ['value1', 'value2'] } + ]); + /** partition :: [Result a] -> { errors: [String], values: [a] } */ + const partition$2 = (results) => { + const errors = []; + const values = []; + each$1(results, (result) => { + result.fold((err) => { + errors.push(err); + }, (value) => { + values.push(value); + }); + }); + return { errors, values }; + }; + + const singleton$1 = (doRevoke) => { + const subject = Cell(Optional.none()); + const revoke = () => subject.get().each(doRevoke); + const clear = () => { + revoke(); + subject.set(Optional.none()); + }; + const isSet = () => subject.get().isSome(); + const get = () => subject.get(); + const set = (s) => { + revoke(); + subject.set(Optional.some(s)); + }; + return { + clear, + isSet, + get, + set + }; + }; + const destroyable = () => singleton$1((s) => s.destroy()); + const unbindable = () => singleton$1((s) => s.unbind()); + const value$2 = () => { + const subject = singleton$1(noop); + const on = (f) => subject.get().each(f); + return { + ...subject, + on + }; + }; + + const addToEnd = (str, suffix) => { + return str + suffix; + }; + const removeFromStart = (str, numChars) => { + return str.substring(numChars); + }; + + const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr; + const removeLeading = (str, prefix) => { + return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str; + }; + const ensureTrailing = (str, suffix) => { + return endsWith(str, suffix) ? str : addToEnd(str, suffix); + }; + const contains$1 = (str, substr, start = 0, end) => { + const idx = str.indexOf(substr, start); + if (idx !== -1) { + return isUndefined(end) ? true : idx + substr.length <= end; + } + else { + return false; + } + }; + /** Does 'str' start with 'prefix'? + * Note: all strings start with the empty string. + * More formally, for all strings x, startsWith(x, ""). + * This is so that for all strings x and y, startsWith(y + x, y) + */ + const startsWith = (str, prefix) => { + return checkRange(str, prefix, 0); + }; + /** Does 'str' end with 'suffix'? + * Note: all strings end with the empty string. + * More formally, for all strings x, endsWith(x, ""). + * This is so that for all strings x and y, endsWith(x + y, y) + */ + const endsWith = (str, suffix) => { + return checkRange(str, suffix, str.length - suffix.length); + }; + const blank = (r) => (s) => s.replace(r, ''); + /** removes all leading and trailing spaces */ + const trim$1 = blank(/^\s+|\s+$/g); + const isNotEmpty = (s) => s.length > 0; + const isEmpty = (s) => !isNotEmpty(s); + const toFloat = (value) => { + const num = parseFloat(value); + return isNaN(num) ? Optional.none() : Optional.some(num); + }; + + // Run a function fn after rate ms. If another invocation occurs + // during the time it is waiting, update the arguments f will run + // with (but keep the current schedule) + const adaptable = (fn, rate) => { + let timer = null; + let args = null; + const cancel = () => { + if (!isNull(timer)) { + clearTimeout(timer); + timer = null; + args = null; + } + }; + const throttle = (...newArgs) => { + args = newArgs; + if (isNull(timer)) { + timer = setTimeout(() => { + const tempArgs = args; + timer = null; + args = null; + fn.apply(null, tempArgs); + }, rate); + } + }; + return { + cancel, + throttle + }; + }; + // Run a function fn after rate ms. If another invocation occurs + // during the time it is waiting, ignore it completely. + const first$1 = (fn, rate) => { + let timer = null; + const cancel = () => { + if (!isNull(timer)) { + clearTimeout(timer); + timer = null; + } + }; + const throttle = (...args) => { + if (isNull(timer)) { + timer = setTimeout(() => { + timer = null; + fn.apply(null, args); + }, rate); + } + }; + return { + cancel, + throttle + }; + }; + // Run a function fn after rate ms. If another invocation occurs + // during the time it is waiting, reschedule the function again + // with the new arguments. + const last = (fn, rate) => { + let timer = null; + const cancel = () => { + if (!isNull(timer)) { + clearTimeout(timer); + timer = null; + } + }; + const throttle = (...args) => { + cancel(); + timer = setTimeout(() => { + timer = null; + fn.apply(null, args); + }, rate); + }; + return { + cancel, + throttle + }; + }; + + const cached = (f) => { + let called = false; + let r; + return (...args) => { + if (!called) { + called = true; + r = f.apply(null, args); + } + return r; + }; + }; + + const zeroWidth = '\uFEFF'; + const nbsp = '\u00A0'; + + const fromHtml$2 = (html, scope) => { + const doc = scope || document; + const div = doc.createElement('div'); + div.innerHTML = html; + if (!div.hasChildNodes() || div.childNodes.length > 1) { + const message = 'HTML does not have a single root node'; + // eslint-disable-next-line no-console + console.error(message, html); + throw new Error(message); + } + return fromDom(div.childNodes[0]); + }; + const fromTag = (tag, scope) => { + const doc = scope || document; + const node = doc.createElement(tag); + return fromDom(node); + }; + const fromText = (text, scope) => { + const doc = scope || document; + const node = doc.createTextNode(text); + return fromDom(node); + }; + const fromDom = (node) => { + // TODO: Consider removing this check, but left atm for safety + if (node === null || node === undefined) { + throw new Error('Node cannot be null or undefined'); + } + return { + dom: node + }; + }; + const fromPoint = (docElm, x, y) => Optional.from(docElm.dom.elementFromPoint(x, y)).map(fromDom); + // tslint:disable-next-line:variable-name + const SugarElement = { + fromHtml: fromHtml$2, + fromTag, + fromText, + fromDom, + fromPoint + }; + + // NOTE: Mutates the range. + const setStart = (rng, situ) => { + situ.fold((e) => { + rng.setStartBefore(e.dom); + }, (e, o) => { + rng.setStart(e.dom, o); + }, (e) => { + rng.setStartAfter(e.dom); + }); + }; + const setFinish = (rng, situ) => { + situ.fold((e) => { + rng.setEndBefore(e.dom); + }, (e, o) => { + rng.setEnd(e.dom, o); + }, (e) => { + rng.setEndAfter(e.dom); + }); + }; + const relativeToNative = (win, startSitu, finishSitu) => { + const range = win.document.createRange(); + setStart(range, startSitu); + setFinish(range, finishSitu); + return range; + }; + const exactToNative = (win, start, soffset, finish, foffset) => { + const rng = win.document.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }; + const toRect = (rect) => ({ + left: rect.left, + top: rect.top, + right: rect.right, + bottom: rect.bottom, + width: rect.width, + height: rect.height + }); + const getFirstRect$1 = (rng) => { + const rects = rng.getClientRects(); + // ASSUMPTION: The first rectangle is the start of the selection + const rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect(); + return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none(); + }; + const getBounds$3 = (rng) => { + const rect = rng.getBoundingClientRect(); + return rect.width > 0 || rect.height > 0 ? Optional.some(rect).map(toRect) : Optional.none(); + }; + + const adt$a = Adt.generate([ + { ltr: ['start', 'soffset', 'finish', 'foffset'] }, + { rtl: ['start', 'soffset', 'finish', 'foffset'] } + ]); + const fromRange = (win, type, range) => type(SugarElement.fromDom(range.startContainer), range.startOffset, SugarElement.fromDom(range.endContainer), range.endOffset); + const getRanges = (win, selection) => selection.match({ + domRange: (rng) => { + return { + ltr: constant$1(rng), + rtl: Optional.none + }; + }, + relative: (startSitu, finishSitu) => { + return { + ltr: cached(() => relativeToNative(win, startSitu, finishSitu)), + rtl: cached(() => Optional.some(relativeToNative(win, finishSitu, startSitu))) + }; + }, + exact: (start, soffset, finish, foffset) => { + return { + ltr: cached(() => exactToNative(win, start, soffset, finish, foffset)), + rtl: cached(() => Optional.some(exactToNative(win, finish, foffset, start, soffset))) + }; + } + }); + const doDiagnose = (win, ranges) => { + // If we cannot create a ranged selection from start > finish, it could be RTL + const rng = ranges.ltr(); + if (rng.collapsed) { + // Let's check if it's RTL ... if it is, then reversing the direction will not be collapsed + const reversed = ranges.rtl().filter((rev) => rev.collapsed === false); + return reversed.map((rev) => + // We need to use "reversed" here, because the original only has one point (collapsed) + adt$a.rtl(SugarElement.fromDom(rev.endContainer), rev.endOffset, SugarElement.fromDom(rev.startContainer), rev.startOffset)).getOrThunk(() => fromRange(win, adt$a.ltr, rng)); + } + else { + return fromRange(win, adt$a.ltr, rng); + } + }; + const diagnose = (win, selection) => { + const ranges = getRanges(win, selection); + return doDiagnose(win, ranges); + }; + const asLtrRange = (win, selection) => { + const diagnosis = diagnose(win, selection); + return diagnosis.match({ + ltr: (start, soffset, finish, foffset) => { + const rng = win.document.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }, + rtl: (start, soffset, finish, foffset) => { + // NOTE: Reversing start and finish + const rng = win.document.createRange(); + rng.setStart(finish.dom, foffset); + rng.setEnd(start.dom, soffset); + return rng; + } + }); + }; + adt$a.ltr; + adt$a.rtl; + + const DOCUMENT = 9; + const DOCUMENT_FRAGMENT = 11; + const ELEMENT = 1; + const TEXT = 3; + + const is = (element, selector) => { + const dom = element.dom; + if (dom.nodeType !== ELEMENT) { + return false; + } + else { + const elem = dom; + if (elem.matches !== undefined) { + return elem.matches(selector); + } + else if (elem.msMatchesSelector !== undefined) { + return elem.msMatchesSelector(selector); + } + else if (elem.webkitMatchesSelector !== undefined) { + return elem.webkitMatchesSelector(selector); + } + else if (elem.mozMatchesSelector !== undefined) { + // cast to any as mozMatchesSelector doesn't exist in TS DOM lib + return elem.mozMatchesSelector(selector); + } + else { + throw new Error('Browser lacks native selectors'); + } // unfortunately we can't throw this on startup :( + } + }; + const bypassSelector = (dom) => + // Only elements, documents and shadow roots support querySelector + // shadow root element type is DOCUMENT_FRAGMENT + dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT && dom.nodeType !== DOCUMENT_FRAGMENT || + // IE fix for complex queries on empty nodes: http://jsfiddle.net/spyder/fv9ptr5L/ + dom.childElementCount === 0; + const all$3 = (selector, scope) => { + const base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? [] : map$2(base.querySelectorAll(selector), SugarElement.fromDom); + }; + const one = (selector, scope) => { + const base = scope === undefined ? document : scope.dom; + return bypassSelector(base) ? Optional.none() : Optional.from(base.querySelector(selector)).map(SugarElement.fromDom); + }; + + const eq = (e1, e2) => e1.dom === e2.dom; + // Returns: true if node e1 contains e2, otherwise false. + // (returns false if e1===e2: A node does not contain itself). + const contains = (e1, e2) => { + const d1 = e1.dom; + const d2 = e2.dom; + return d1 === d2 ? false : d1.contains(d2); + }; + + const DeviceType = (os, browser, userAgent, mediaMatch) => { + const isiPad = os.isiOS() && /ipad/i.test(userAgent) === true; + const isiPhone = os.isiOS() && !isiPad; + const isMobile = os.isiOS() || os.isAndroid(); + const isTouch = isMobile || mediaMatch('(pointer:coarse)'); + const isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)'); + const isPhone = isiPhone || isMobile && !isTablet; + const iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false; + const isDesktop = !isPhone && !isTablet && !iOSwebview; + return { + isiPad: constant$1(isiPad), + isiPhone: constant$1(isiPhone), + isTablet: constant$1(isTablet), + isPhone: constant$1(isPhone), + isTouch: constant$1(isTouch), + isAndroid: os.isAndroid, + isiOS: os.isiOS, + isWebView: constant$1(iOSwebview), + isDesktop: constant$1(isDesktop) + }; + }; + + const firstMatch = (regexes, s) => { + for (let i = 0; i < regexes.length; i++) { + const x = regexes[i]; + if (x.test(s)) { + return x; + } + } + return undefined; + }; + const find$3 = (regexes, agent) => { + const r = firstMatch(regexes, agent); + if (!r) { + return { major: 0, minor: 0 }; + } + const group = (i) => { + return Number(agent.replace(r, '$' + i)); + }; + return nu$a(group(1), group(2)); + }; + const detect$4 = (versionRegexes, agent) => { + const cleanedAgent = String(agent).toLowerCase(); + if (versionRegexes.length === 0) { + return unknown$3(); + } + return find$3(versionRegexes, cleanedAgent); + }; + const unknown$3 = () => { + return nu$a(0, 0); + }; + const nu$a = (major, minor) => { + return { major, minor }; + }; + const Version = { + nu: nu$a, + detect: detect$4, + unknown: unknown$3 + }; + + const detectBrowser$1 = (browsers, userAgentData) => { + return findMap(userAgentData.brands, (uaBrand) => { + const lcBrand = uaBrand.brand.toLowerCase(); + return find$5(browsers, (browser) => lcBrand === browser.brand?.toLowerCase()) + .map((info) => ({ + current: info.name, + version: Version.nu(parseInt(uaBrand.version, 10), 0) + })); + }); + }; + + const detect$3 = (candidates, userAgent) => { + const agent = String(userAgent).toLowerCase(); + return find$5(candidates, (candidate) => { + return candidate.search(agent); + }); + }; + // They (browser and os) are the same at the moment, but they might + // not stay that way. + const detectBrowser = (browsers, userAgent) => { + return detect$3(browsers, userAgent).map((browser) => { + const version = Version.detect(browser.versionRegexes, userAgent); + return { + current: browser.name, + version + }; + }); + }; + const detectOs = (oses, userAgent) => { + return detect$3(oses, userAgent).map((os) => { + const version = Version.detect(os.versionRegexes, userAgent); + return { + current: os.name, + version + }; + }); + }; + + const normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/; + const checkContains = (target) => { + return (uastring) => { + return contains$1(uastring, target); + }; + }; + const browsers = [ + // This is legacy Edge + { + name: 'Edge', + versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/], + search: (uastring) => { + return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit'); + } + }, + // This is Google Chrome and Chromium Edge + { + name: 'Chromium', + brand: 'Chromium', + versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/, normalVersionRegex], + search: (uastring) => { + return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe'); + } + }, + { + name: 'IE', + versionRegexes: [/.*?msie\ ?([0-9]+)\.([0-9]+).*/, /.*?rv:([0-9]+)\.([0-9]+).*/], + search: (uastring) => { + return contains$1(uastring, 'msie') || contains$1(uastring, 'trident'); + } + }, + // INVESTIGATE: Is this still the Opera user agent? + { + name: 'Opera', + versionRegexes: [normalVersionRegex, /.*?opera\/([0-9]+)\.([0-9]+).*/], + search: checkContains('opera') + }, + { + name: 'Firefox', + versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/], + search: checkContains('firefox') + }, + { + name: 'Safari', + versionRegexes: [normalVersionRegex, /.*?cpu os ([0-9]+)_([0-9]+).*/], + search: (uastring) => { + return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit'); + } + } + ]; + const oses = [ + { + name: 'Windows', + search: checkContains('win'), + versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'iOS', + search: (uastring) => { + return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad'); + }, + versionRegexes: [/.*?version\/\ ?([0-9]+)\.([0-9]+).*/, /.*cpu os ([0-9]+)_([0-9]+).*/, /.*cpu iphone os ([0-9]+)_([0-9]+).*/] + }, + { + name: 'Android', + search: checkContains('android'), + versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/] + }, + { + name: 'macOS', + search: checkContains('mac os x'), + versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/] + }, + { + name: 'Linux', + search: checkContains('linux'), + versionRegexes: [] + }, + { name: 'Solaris', + search: checkContains('sunos'), + versionRegexes: [] + }, + { + name: 'FreeBSD', + search: checkContains('freebsd'), + versionRegexes: [] + }, + { + name: 'ChromeOS', + search: checkContains('cros'), + versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/] + } + ]; + const PlatformInfo = { + browsers: constant$1(browsers), + oses: constant$1(oses) + }; + + const edge = 'Edge'; + const chromium = 'Chromium'; + const ie = 'IE'; + const opera = 'Opera'; + const firefox = 'Firefox'; + const safari = 'Safari'; + const unknown$2 = () => { + return nu$9({ + current: undefined, + version: Version.unknown() + }); + }; + const nu$9 = (info) => { + const current = info.current; + const version = info.version; + const isBrowser = (name) => () => current === name; + return { + current, + version, + isEdge: isBrowser(edge), + isChromium: isBrowser(chromium), + // NOTE: isIe just looks too weird + isIE: isBrowser(ie), + isOpera: isBrowser(opera), + isFirefox: isBrowser(firefox), + isSafari: isBrowser(safari) + }; + }; + const Browser = { + unknown: unknown$2, + nu: nu$9, + edge: constant$1(edge), + chromium: constant$1(chromium), + ie: constant$1(ie), + opera: constant$1(opera), + firefox: constant$1(firefox), + safari: constant$1(safari) + }; + + const windows = 'Windows'; + const ios = 'iOS'; + const android = 'Android'; + const linux = 'Linux'; + const macos = 'macOS'; + const solaris = 'Solaris'; + const freebsd = 'FreeBSD'; + const chromeos = 'ChromeOS'; + // Though there is a bit of dupe with this and Browser, trying to + // reuse code makes it much harder to follow and change. + const unknown$1 = () => { + return nu$8({ + current: undefined, + version: Version.unknown() + }); + }; + const nu$8 = (info) => { + const current = info.current; + const version = info.version; + const isOS = (name) => () => current === name; + return { + current, + version, + isWindows: isOS(windows), + // TODO: Fix capitalisation + isiOS: isOS(ios), + isAndroid: isOS(android), + isMacOS: isOS(macos), + isLinux: isOS(linux), + isSolaris: isOS(solaris), + isFreeBSD: isOS(freebsd), + isChromeOS: isOS(chromeos) + }; + }; + const OperatingSystem = { + unknown: unknown$1, + nu: nu$8, + windows: constant$1(windows), + ios: constant$1(ios), + android: constant$1(android), + linux: constant$1(linux), + macos: constant$1(macos), + solaris: constant$1(solaris), + freebsd: constant$1(freebsd), + chromeos: constant$1(chromeos) + }; + + const detect$2 = (userAgent, userAgentDataOpt, mediaMatch) => { + const browsers = PlatformInfo.browsers(); + const oses = PlatformInfo.oses(); + const browser = userAgentDataOpt.bind((userAgentData) => detectBrowser$1(browsers, userAgentData)) + .orThunk(() => detectBrowser(browsers, userAgent)) + .fold(Browser.unknown, Browser.nu); + const os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu); + const deviceType = DeviceType(os, browser, userAgent, mediaMatch); + return { + browser, + os, + deviceType + }; + }; + const PlatformDetection = { + detect: detect$2 + }; + + const mediaMatch = (query) => window.matchMedia(query).matches; + // IMPORTANT: Must be in a thunk, otherwise rollup thinks calling this immediately + // causes side effects and won't tree shake this away + // Note: navigator.userAgentData is not part of the native typescript types yet + let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from((window.navigator.userAgentData)), mediaMatch)); + const detect$1 = () => platform(); + + const unsafe = (name, scope) => { + return resolve(name, scope); + }; + const getOrDie$1 = (name, scope) => { + const actual = unsafe(name, scope); + if (actual === undefined || actual === null) { + throw new Error(name + ' not available on this browser'); + } + return actual; + }; + + const getPrototypeOf$1 = Object.getPrototypeOf; + /* + * IE9 and above + * + * MDN no use on this one, but here's the link anyway: + * https://developer.mozilla.org/en/docs/Web/API/HTMLElement + */ + const sandHTMLElement = (scope) => { + return getOrDie$1('HTMLElement', scope); + }; + const isPrototypeOf = (x) => { + // use Resolve to get the window object for x and just return undefined if it can't find it. + // undefined scope later triggers using the global window. + const scope = resolve('ownerDocument.defaultView', x); + // TINY-7374: We can't rely on looking at the owner window HTMLElement as the element may have + // been constructed in a different window and then appended to the current window document. + return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf$1(x).constructor.name)); + }; + + const name$3 = (element) => { + const r = element.dom.nodeName; + return r.toLowerCase(); + }; + const type$1 = (element) => element.dom.nodeType; + const isType = (t) => (element) => type$1(element) === t; + const isHTMLElement = (element) => isElement$1(element) && isPrototypeOf(element.dom); + const isElement$1 = isType(ELEMENT); + const isText = isType(TEXT); + const isDocument = isType(DOCUMENT); + const isDocumentFragment = isType(DOCUMENT_FRAGMENT); + const isTag = (tag) => (e) => isElement$1(e) && name$3(e) === tag; + + /** + * The document associated with the current element + * NOTE: this will throw if the owner is null. + */ + const owner$4 = (element) => SugarElement.fromDom(element.dom.ownerDocument); + /** + * If the element is a document, return it. Otherwise, return its ownerDocument. + * @param dos + */ + const documentOrOwner = (dos) => isDocument(dos) ? dos : owner$4(dos); + const documentElement = (element) => SugarElement.fromDom(documentOrOwner(element).dom.documentElement); + /** + * The window element associated with the element + * NOTE: this will throw if the defaultView is null. + */ + const defaultView = (element) => SugarElement.fromDom(documentOrOwner(element).dom.defaultView); + const parent = (element) => Optional.from(element.dom.parentNode).map(SugarElement.fromDom); + // Cast down to just be SugarElement + const parentNode = (element) => parent(element); + const parentElement = (element) => Optional.from(element.dom.parentElement).map(SugarElement.fromDom); + const parents = (element, isRoot) => { + const stop = isFunction(isRoot) ? isRoot : never; + // This is used a *lot* so it needs to be performant, not recursive + let dom = element.dom; + const ret = []; + while (dom.parentNode !== null && dom.parentNode !== undefined) { + const rawParent = dom.parentNode; + const p = SugarElement.fromDom(rawParent); + ret.push(p); + if (stop(p) === true) { + break; + } + else { + dom = rawParent; + } + } + return ret; + }; + const offsetParent = (element) => Optional.from(element.dom.offsetParent).map(SugarElement.fromDom); + const prevSibling = (element) => Optional.from(element.dom.previousSibling).map(SugarElement.fromDom); + const nextSibling = (element) => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom); + const children = (element) => map$2(element.dom.childNodes, SugarElement.fromDom); + const child$2 = (element, index) => { + const cs = element.dom.childNodes; + return Optional.from(cs[index]).map(SugarElement.fromDom); + }; + const firstChild = (element) => child$2(element, 0); + const spot = (element, offset) => ({ + element, + offset + }); + const leaf = (element, offset) => { + const cs = children(element); + return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset); + }; + + const makeRange = (start, soffset, finish, foffset) => { + const doc = owner$4(start); + // TODO: We need to think about a better place to put native range creation code. Does it even belong in sugar? + // Could the `Compare` checks (node.compareDocumentPosition) handle these situations better? + const rng = doc.dom.createRange(); + rng.setStart(start.dom, soffset); + rng.setEnd(finish.dom, foffset); + return rng; + }; + const after$2 = (start, soffset, finish, foffset) => { + const r = makeRange(start, soffset, finish, foffset); + const same = eq(start, finish) && soffset === foffset; + return r.collapsed && !same; + }; + + /** + * Is the element a ShadowRoot? + * + * Note: this is insufficient to test if any element is a shadow root, but it is sufficient to differentiate between + * a Document and a ShadowRoot. + */ + const isShadowRoot = (dos) => isDocumentFragment(dos) && isNonNullable(dos.dom.host); + const getRootNode = (e) => SugarElement.fromDom(e.dom.getRootNode()); + /** Where content needs to go. ShadowRoot or document body */ + const getContentContainer = (dos) => + // Can't use SugarBody.body without causing a circular module reference (since SugarBody.inBody uses SugarShadowDom) + isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body); + /** Is this element either a ShadowRoot or a descendent of a ShadowRoot. */ + const isInShadowRoot = (e) => getShadowRoot(e).isSome(); + /** If this element is in a ShadowRoot, return it. */ + const getShadowRoot = (e) => { + const r = getRootNode(e); + return isShadowRoot(r) ? Optional.some(r) : Optional.none(); + }; + /** Return the host of a ShadowRoot. + * + * This function will throw if Shadow DOM is unsupported in the browser, or if the host is null. + * If you actually have a ShadowRoot, this shouldn't happen. + */ + const getShadowHost = (e) => SugarElement.fromDom(e.dom.host); + /** + * When Events bubble up through a ShadowRoot, the browser changes the target to be the shadow host. + * This function gets the "original" event target if possible. + * This only works if the shadow tree is open - if the shadow tree is closed, event.target is returned. + * See: https://developers.google.com/web/fundamentals/web-components/shadowdom#events + */ + const getOriginalEventTarget = (event) => { + if (isNonNullable(event.target)) { + const el = SugarElement.fromDom(event.target); + if (isElement$1(el) && isOpenShadowHost(el)) { + // When target element is inside Shadow DOM we need to take first element from composedPath + // otherwise we'll get Shadow Root parent, not actual target element. + if (event.composed && event.composedPath) { + const composedPath = event.composedPath(); + if (composedPath) { + return head(composedPath); + } + } + } + } + return Optional.from(event.target); + }; + /** Return true if the element is a host of an open shadow root. + * Return false if the element is a host of a closed shadow root, or if the element is not a host. + */ + const isOpenShadowHost = (element) => isNonNullable(element.dom.shadowRoot); + + const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({ + target, + x, + y, + stop, + prevent, + kill, + raw + }); + /** Wraps an Event in an EventArgs structure. + * The returned EventArgs structure has its target set to the "original" target if possible. + * See SugarShadowDom.getOriginalEventTarget + */ + const fromRawEvent$1 = (rawEvent) => { + const target = SugarElement.fromDom(getOriginalEventTarget(rawEvent).getOr(rawEvent.target)); + const stop = () => rawEvent.stopPropagation(); + const prevent = () => rawEvent.preventDefault(); + const kill = compose(prevent, stop); // more of a sequence than a compose, but same effect + // FIX: Don't just expose the raw event. Need to identify what needs standardisation. + return mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent); + }; + const handle = (filter, handler) => (rawEvent) => { + if (filter(rawEvent)) { + handler(fromRawEvent$1(rawEvent)); + } + }; + const binder = (element, event, filter, handler, useCapture) => { + const wrapped = handle(filter, handler); + // IE9 minimum + element.dom.addEventListener(event, wrapped, useCapture); + return { + unbind: curry(unbind, element, event, wrapped, useCapture) + }; + }; + const bind$2 = (element, event, filter, handler) => binder(element, event, filter, handler, false); + const capture$1 = (element, event, filter, handler) => binder(element, event, filter, handler, true); + const unbind = (element, event, handler, useCapture) => { + // IE9 minimum + element.dom.removeEventListener(event, handler, useCapture); + }; + + const filter = always; // no filter on plain DomEvents + const bind$1 = (element, event, handler) => bind$2(element, event, filter, handler); + const capture = (element, event, handler) => capture$1(element, event, filter, handler); + const fromRawEvent = fromRawEvent$1; + + const getDocument = () => SugarElement.fromDom(document); + + const focus$4 = (element, preventScroll = false) => element.dom.focus({ preventScroll }); + const blur$1 = (element) => element.dom.blur(); + const hasFocus = (element) => { + const root = getRootNode(element).dom; + return element.dom === root.activeElement; + }; + // Note: assuming that activeElement will always be a HTMLElement (maybe we should add a runtime check?) + const active$1 = (root = getDocument()) => Optional.from(root.dom.activeElement).map(SugarElement.fromDom); + /** + * Return the descendant element that has focus. + * Use instead of SelectorFind.descendant(container, ':focus') + * because the :focus selector relies on keyboard focus. + */ + const search = (element) => active$1(getRootNode(element)) + .filter((e) => element.dom.contains(e.dom)); + + const before$1 = (marker, element) => { + const parent$1 = parent(marker); + parent$1.each((v) => { + v.dom.insertBefore(element.dom, marker.dom); + }); + }; + const after$1 = (marker, element) => { + const sibling = nextSibling(marker); + sibling.fold(() => { + const parent$1 = parent(marker); + parent$1.each((v) => { + append$2(v, element); + }); + }, (v) => { + before$1(v, element); + }); + }; + const prepend$1 = (parent, element) => { + const firstChild$1 = firstChild(parent); + firstChild$1.fold(() => { + append$2(parent, element); + }, (v) => { + parent.dom.insertBefore(element.dom, v.dom); + }); + }; + const append$2 = (parent, element) => { + parent.dom.appendChild(element.dom); + }; + const appendAt = (parent, element, index) => { + child$2(parent, index).fold(() => { + append$2(parent, element); + }, (v) => { + before$1(v, element); + }); + }; + + const append$1 = (parent, elements) => { + each$1(elements, (x) => { + append$2(parent, x); + }); + }; + + const rawSet = (dom, key, value) => { + /* + * JQuery coerced everything to a string, and silently did nothing on text node/null/undefined. + * + * We fail on those invalid cases, only allowing numbers and booleans. + */ + if (isString(value) || isBoolean(value) || isNumber(value)) { + dom.setAttribute(key, value + ''); + } + else { + // eslint-disable-next-line no-console + console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom); + throw new Error('Attribute value was not simple'); + } + }; + const set$9 = (element, key, value) => { + rawSet(element.dom, key, value); + }; + const setAll$1 = (element, attrs) => { + const dom = element.dom; + each(attrs, (v, k) => { + rawSet(dom, k, v); + }); + }; + const get$g = (element, key) => { + const v = element.dom.getAttribute(key); + // undefined is the more appropriate value for JS, and this matches JQuery + return v === null ? undefined : v; + }; + const getOpt = (element, key) => Optional.from(get$g(element, key)); + const has$1 = (element, key) => { + const dom = element.dom; + // return false for non-element nodes, no point in throwing an error + return dom && dom.hasAttribute ? dom.hasAttribute(key) : false; + }; + const remove$8 = (element, key) => { + element.dom.removeAttribute(key); + }; + const clone$2 = (element) => foldl(element.dom.attributes, (acc, attr) => { + acc[attr.name] = attr.value; + return acc; + }, {}); + + const empty = (element) => { + // shortcut "empty node" trick. Requires IE 9. + element.dom.textContent = ''; + // If the contents was a single empty text node, the above doesn't remove it. But, it's still faster in general + // than removing every child node manually. + // The following is (probably) safe for performance as 99.9% of the time the trick works and + // Traverse.children will return an empty array. + each$1(children(element), (rogue) => { + remove$7(rogue); + }); + }; + const remove$7 = (element) => { + const dom = element.dom; + if (dom.parentNode !== null) { + dom.parentNode.removeChild(dom); + } + }; + + const clone$1 = (original, isDeep) => SugarElement.fromDom(original.dom.cloneNode(isDeep)); + /** Shallow clone - just the tag, no children */ + const shallow = (original) => clone$1(original, false); + /** Deep clone - everything copied including children */ + const deep = (original) => clone$1(original, true); + + const fromHtml$1 = (html, scope) => { + const doc = scope || document; + const div = doc.createElement('div'); + div.innerHTML = html; + return children(SugarElement.fromDom(div)); + }; + + const get$f = (element) => element.dom.innerHTML; + const set$8 = (element, content) => { + const owner = owner$4(element); + const docDom = owner.dom; + // FireFox has *terrible* performance when using innerHTML = x + const fragment = SugarElement.fromDom(docDom.createDocumentFragment()); + const contentElements = fromHtml$1(content, docDom); + append$1(fragment, contentElements); + empty(element); + append$2(element, fragment); + }; + const getOuter$2 = (element) => { + const container = SugarElement.fromTag('div'); + const clone = SugarElement.fromDom(element.dom.cloneNode(true)); + append$2(container, clone); + return get$f(container); + }; + + const getHtml = (element) => { + if (isShadowRoot(element)) { + return '#shadow-root'; + } + else { + const clone = shallow(element); + return getOuter$2(clone); + } + }; + + const image = (image) => new Promise((resolve, reject) => { + const loaded = () => { + destroy(); + resolve(image); + }; + const listeners = [ + bind$1(image, 'load', loaded), + bind$1(image, 'error', () => { + destroy(); + reject('Unable to load data from image: ' + image.dom.src); + }), + ]; + const destroy = () => each$1(listeners, (l) => l.unbind()); + if (image.dom.complete) { + loaded(); + } + }); + + // some elements, such as mathml, don't have style attributes + // others, such as angular elements, have style attributes that aren't a CSSStyleDeclaration + const isSupported = (dom) => dom.style !== undefined && isFunction(dom.style.getPropertyValue); + + // Node.contains() is very, very, very good performance + // http://jsperf.com/closest-vs-contains/5 + const inBody = (element) => { + // Technically this is only required on IE, where contains() returns false for text nodes. + // But it's cheap enough to run everywhere and Sugar doesn't have platform detection (yet). + const dom = isText(element) ? element.dom.parentNode : element.dom; + // use ownerDocument.body to ensure this works inside iframes. + // Normally contains is bad because an element "contains" itself, but here we want that. + if (dom === undefined || dom === null || dom.ownerDocument === null) { + return false; + } + const doc = dom.ownerDocument; + return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost)); + }; + const body = () => getBody(SugarElement.fromDom(document)); + const getBody = (doc) => { + const b = doc.dom.body; + if (b === null || b === undefined) { + throw new Error('Body is not available yet'); + } + return SugarElement.fromDom(b); + }; + + const internalSet = (dom, property, value) => { + // This is going to hurt. Apologies. + // JQuery coerces numbers to pixels for certain property names, and other times lets numbers through. + // we're going to be explicit; strings only. + if (!isString(value)) { + // eslint-disable-next-line no-console + console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom); + throw new Error('CSS value must be a string: ' + value); + } + // removed: support for dom().style[property] where prop is camel case instead of normal property name + if (isSupported(dom)) { + dom.style.setProperty(property, value); + } + }; + const internalRemove = (dom, property) => { + /* + * IE9 and above - MDN doesn't have details, but here's a couple of random internet claims + * + * http://help.dottoro.com/ljopsjck.php + * http://stackoverflow.com/a/7901886/7546 + */ + if (isSupported(dom)) { + dom.style.removeProperty(property); + } + }; + const set$7 = (element, property, value) => { + const dom = element.dom; + internalSet(dom, property, value); + }; + const setAll = (element, css) => { + const dom = element.dom; + each(css, (v, k) => { + internalSet(dom, k, v); + }); + }; + const setOptions = (element, css) => { + const dom = element.dom; + each(css, (v, k) => { + v.fold(() => { + internalRemove(dom, k); + }, (value) => { + internalSet(dom, k, value); + }); + }); + }; + /* + * NOTE: For certain properties, this returns the "used value" which is subtly different to the "computed value" (despite calling getComputedStyle). + * Blame CSS 2.0. + * + * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value + */ + const get$e = (element, property) => { + const dom = element.dom; + /* + * IE9 and above per + * https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle + * + * Not in numerosity, because it doesn't memoize and looking this up dynamically in performance critical code would be horrendous. + * + * JQuery has some magic here for IE popups, but we don't really need that. + * It also uses element.ownerDocument.defaultView to handle iframes but that hasn't been required since FF 3.6. + */ + const styles = window.getComputedStyle(dom); + const r = styles.getPropertyValue(property); + // jquery-ism: If r is an empty string, check that the element is not in a document. If it isn't, return the raw value. + // Turns out we do this a lot. + return (r === '' && !inBody(element)) ? getUnsafeProperty(dom, property) : r; + }; + // removed: support for dom().style[property] where prop is camel case instead of normal property name + // empty string is what the browsers (IE11 and Chrome) return when the propertyValue doesn't exists. + const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : ''; + /* + * Gets the raw value from the style attribute. Useful for retrieving "used values" from the DOM: + * https://developer.mozilla.org/en-US/docs/Web/CSS/used_value + * + * Returns NONE if the property isn't set, or the value is an empty string. + */ + const getRaw = (element, property) => { + const dom = element.dom; + const raw = getUnsafeProperty(dom, property); + return Optional.from(raw).filter((r) => r.length > 0); + }; + const getAllRaw = (element) => { + const css = {}; + const dom = element.dom; + if (isSupported(dom)) { + for (let i = 0; i < dom.style.length; i++) { + const ruleName = dom.style.item(i); + css[ruleName] = dom.style[ruleName]; + } + } + return css; + }; + const isValidValue$1 = (tag, property, value) => { + const element = SugarElement.fromTag(tag); + set$7(element, property, value); + const style = getRaw(element, property); + return style.isSome(); + }; + const remove$6 = (element, property) => { + const dom = element.dom; + internalRemove(dom, property); + if (is$1(getOpt(element, 'style').map(trim$1), '')) { + // No more styles left, remove the style attribute as well + remove$8(element, 'style'); + } + }; + /* NOTE: This function is here for the side effect it triggers. + The value itself is not used. + Be sure to not use the return value, and that it is not removed by a minifier. + */ + const reflow = (e) => e.dom.offsetWidth; + + const Dimension = (name, getOffset) => { + const set = (element, h) => { + if (!isNumber(h) && !h.match(/^[0-9]+$/)) { + throw new Error(name + '.set accepts only positive integer values. Value was ' + h); + } + const dom = element.dom; + if (isSupported(dom)) { + dom.style[name] = h + 'px'; + } + }; + /* + * jQuery supports querying width and height on the document and window objects. + * + * TBIO doesn't do this, so the code is removed to save space, but left here just in case. + */ + /* + var getDocumentWidth = (element) => { + var dom = element.dom; + if (Node.isDocument(element)) { + var body = dom.body; + var doc = dom.documentElement; + return Math.max( + body.scrollHeight, + doc.scrollHeight, + body.offsetHeight, + doc.offsetHeight, + doc.clientHeight + ); + } + }; + + var getWindowWidth = (element) => { + var dom = element.dom; + if (dom.window === dom) { + // There is no offsetHeight on a window, so use the clientHeight of the document + return dom.document.documentElement.clientHeight; + } + }; + */ + const get = (element) => { + const r = getOffset(element); + // zero or null means non-standard or disconnected, fall back to CSS + if (r <= 0 || r === null) { + const css = get$e(element, name); + // ugh this feels dirty, but it saves cycles + return parseFloat(css) || 0; + } + return r; + }; + // in jQuery, getOuter replicates (or uses) box-sizing: border-box calculations + // although these calculations only seem relevant for quirks mode, and edge cases TBIO doesn't rely on + const getOuter = get; + const aggregate = (element, properties) => foldl(properties, (acc, property) => { + const val = get$e(element, property); + const value = val === undefined ? 0 : parseInt(val, 10); + return isNaN(value) ? acc : acc + value; + }, 0); + const max = (element, value, properties) => { + const cumulativeInclusions = aggregate(element, properties); + // if max-height is 100px and your cumulativeInclusions is 150px, there is no way max-height can be 100px, so we return 0. + const absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0; + return absoluteMax; + }; + return { + set, + get, + getOuter, + aggregate, + max + }; + }; + + const api$2 = Dimension('height', (element) => { + // getBoundingClientRect gives better results than offsetHeight for tables with captions on Firefox + const dom = element.dom; + return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight; + }); + const get$d = (element) => api$2.get(element); + const getOuter$1 = (element) => api$2.getOuter(element); + const setMax$1 = (element, value) => { + // These properties affect the absolute max-height, they are not counted natively, we want to include these properties. + const inclusions = ['margin-top', 'border-top-width', 'padding-top', 'padding-bottom', 'border-bottom-width', 'margin-bottom']; + const absMax = api$2.max(element, value, inclusions); + set$7(element, 'max-height', absMax + 'px'); + }; + + const isHidden$1 = (dom) => dom.offsetWidth <= 0 && dom.offsetHeight <= 0; + const isVisible = (element) => !isHidden$1(element.dom); + + const api$1 = Dimension('width', (element) => { + const dom = element.dom; + return inBody(element) ? dom.getBoundingClientRect().width : dom.offsetWidth; + }); + const set$6 = (element, h) => api$1.set(element, h); + const get$c = (element) => api$1.get(element); + const getOuter = (element) => api$1.getOuter(element); + const setMax = (element, value) => { + // These properties affect the absolute max-height, they are not counted natively, we want to include these properties. + const inclusions = ['margin-left', 'border-left-width', 'padding-left', 'padding-right', 'border-right-width', 'margin-right']; + const absMax = api$1.max(element, value, inclusions); + set$7(element, 'max-width', absMax + 'px'); + }; + + const r$1 = (left, top) => { + const translate = (x, y) => r$1(left + x, top + y); + return { + left, + top, + translate + }; + }; + // tslint:disable-next-line:variable-name + const SugarPosition = r$1; + + const boxPosition = (dom) => { + const box = dom.getBoundingClientRect(); + return SugarPosition(box.left, box.top); + }; + // Avoids falsy false fallthrough + const firstDefinedOrZero = (a, b) => { + if (a !== undefined) { + return a; + } + else { + return b !== undefined ? b : 0; + } + }; + const absolute$3 = (element) => { + const doc = element.dom.ownerDocument; + const body = doc.body; + const win = doc.defaultView; + const html = doc.documentElement; + if (body === element.dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + const scrollTop = firstDefinedOrZero(win?.pageYOffset, html.scrollTop); + const scrollLeft = firstDefinedOrZero(win?.pageXOffset, html.scrollLeft); + const clientTop = firstDefinedOrZero(html.clientTop, body.clientTop); + const clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft); + return viewport$1(element).translate(scrollLeft - clientLeft, scrollTop - clientTop); + }; + const viewport$1 = (element) => { + const dom = element.dom; + const doc = dom.ownerDocument; + const body = doc.body; + if (body === dom) { + return SugarPosition(body.offsetLeft, body.offsetTop); + } + if (!inBody(element)) { + return SugarPosition(0, 0); + } + return boxPosition(dom); + }; + + // get scroll position (x,y) relative to document _doc (or global if not supplied) + const get$b = (_DOC) => { + const doc = _DOC !== undefined ? _DOC.dom : document; + // ASSUMPTION: This is for cross-browser support, body works for Safari & EDGE, and when we have an iframe body scroller + const x = doc.body.scrollLeft || doc.documentElement.scrollLeft; + const y = doc.body.scrollTop || doc.documentElement.scrollTop; + return SugarPosition(x, y); + }; + // Scroll content to (x,y) relative to document _doc (or global if not supplied) + const to = (x, y, _DOC) => { + const doc = _DOC !== undefined ? _DOC.dom : document; + const win = doc.defaultView; + if (win) { + win.scrollTo(x, y); + } + }; + + const NodeValue = (is, name) => { + const get = (element) => { + if (!is(element)) { + throw new Error('Can only get ' + name + ' value of a ' + name + ' node'); + } + return getOption(element).getOr(''); + }; + const getOption = (element) => is(element) ? Optional.from(element.dom.nodeValue) : Optional.none(); + const set = (element, value) => { + if (!is(element)) { + throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node'); + } + element.dom.nodeValue = value; + }; + return { + get, + getOption, + set + }; + }; + + const api = NodeValue(isText, 'text'); + const get$a = (element) => api.get(element); + + const onDirection = (isLtr, isRtl) => (element) => getDirection(element) === 'rtl' ? isRtl : isLtr; + const getDirection = (element) => get$e(element, 'direction') === 'rtl' ? 'rtl' : 'ltr'; + + // Methods for handling attributes that contain a list of values
+ const read$2 = (element, attr) => { + const value = get$g(element, attr); + return value === undefined || value === '' ? [] : value.split(' '); + }; + const add$4 = (element, attr, id) => { + const old = read$2(element, attr); + const nu = old.concat([id]); + set$9(element, attr, nu.join(' ')); + return true; + }; + const remove$5 = (element, attr, id) => { + const nu = filter$2(read$2(element, attr), (v) => v !== id); + if (nu.length > 0) { + set$9(element, attr, nu.join(' ')); + } + else { + remove$8(element, attr); + } + return false; + }; + + var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => { + if (is(scope, a)) { + return Optional.some(scope); + } + else if (isFunction(isRoot) && isRoot(scope)) { + return Optional.none(); + } + else { + return ancestor(scope, a, isRoot); + } + }; + + const ancestor$2 = (scope, predicate, isRoot) => { + let element = scope.dom; + const stop = isFunction(isRoot) ? isRoot : never; + while (element.parentNode) { + element = element.parentNode; + const el = SugarElement.fromDom(element); + if (predicate(el)) { + return Optional.some(el); + } + else if (stop(el)) { + break; + } + } + return Optional.none(); + }; + const closest$4 = (scope, predicate, isRoot) => { + // This is required to avoid ClosestOrAncestor passing the predicate to itself + const is = (s, test) => test(s); + return ClosestOrAncestor(is, ancestor$2, scope, predicate, isRoot); + }; + const sibling$1 = (scope, predicate) => { + const element = scope.dom; + if (!element.parentNode) { + return Optional.none(); + } + return child$1(SugarElement.fromDom(element.parentNode), (x) => !eq(scope, x) && predicate(x)); + }; + const child$1 = (scope, predicate) => { + const pred = (node) => predicate(SugarElement.fromDom(node)); + const result = find$5(scope.dom.childNodes, pred); + return result.map(SugarElement.fromDom); + }; + const descendant$1 = (scope, predicate) => { + const descend = (node) => { + // tslint:disable-next-line:prefer-for-of + for (let i = 0; i < node.childNodes.length; i++) { + const child = SugarElement.fromDom(node.childNodes[i]); + if (predicate(child)) { + return Optional.some(child); + } + const res = descend(node.childNodes[i]); + if (res.isSome()) { + return res; + } + } + return Optional.none(); + }; + return descend(scope.dom); + }; + + // TODO: An internal SelectorFilter module that doesn't SugarElement.fromDom() everything + const first = (selector) => one(selector); + const ancestor$1 = (scope, selector, isRoot) => ancestor$2(scope, (e) => is(e, selector), isRoot); + const sibling = (scope, selector) => sibling$1(scope, (e) => is(e, selector)); + const child = (scope, selector) => child$1(scope, (e) => is(e, selector)); + const descendant = (scope, selector) => one(selector, scope); + // Returns Some(closest ancestor element (sugared)) matching 'selector' up to isRoot, or None() otherwise + const closest$3 = (scope, selector, isRoot) => { + const is$1 = (element, selector) => is(element, selector); + return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot); + }; + + const set$5 = (element, status) => { + element.dom.checked = status; + }; + const get$9 = (element) => element.dom.checked; + + // IE11 Can return undefined for a classList on elements such as math, so we make sure it's not undefined before attempting to use it. + const supports = (element) => element.dom.classList !== undefined; + const get$8 = (element) => read$2(element, 'class'); + const add$3 = (element, clazz) => add$4(element, 'class', clazz); + const remove$4 = (element, clazz) => remove$5(element, 'class', clazz); + const toggle$5 = (element, clazz) => { + if (contains$2(get$8(element), clazz)) { + return remove$4(element, clazz); + } + else { + return add$3(element, clazz); + } + }; + + /* + * ClassList is IE10 minimum: + * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList + * + * Note that IE doesn't support the second argument to toggle (at all). + * If it did, the toggler could be better. + */ + const add$2 = (element, clazz) => { + if (supports(element)) { + element.dom.classList.add(clazz); + } + else { + add$3(element, clazz); + } + }; + const cleanClass = (element) => { + const classList = supports(element) ? element.dom.classList : get$8(element); + // classList is a "live list", so this is up to date already + if (classList.length === 0) { + // No more classes left, remove the class attribute as well + remove$8(element, 'class'); + } + }; + const remove$3 = (element, clazz) => { + if (supports(element)) { + const classList = element.dom.classList; + classList.remove(clazz); + } + else { + remove$4(element, clazz); + } + cleanClass(element); + }; + const toggle$4 = (element, clazz) => { + const result = supports(element) ? element.dom.classList.toggle(clazz) : toggle$5(element, clazz); + cleanClass(element); + return result; + }; + const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz); + + /* + * ClassList is IE10 minimum: + * https://developer.mozilla.org/en-US/docs/Web/API/Element.classList + */ + const add$1 = (element, classes) => { + each$1(classes, (x) => { + add$2(element, x); + }); + }; + const remove$2 = (element, classes) => { + each$1(classes, (x) => { + remove$3(element, x); + }); + }; + const toggle$3 = (element, classes) => { + each$1(classes, (x) => { + toggle$4(element, x); + }); + }; + const hasAll = (element, classes) => forall(classes, (clazz) => has(element, clazz)); + const getNative = (element) => { + const classList = element.dom.classList; + const r = new Array(classList.length); + for (let i = 0; i < classList.length; i++) { + const item = classList.item(i); + if (item !== null) { + r[i] = item; + } + } + return r; + }; + const get$7 = (element) => supports(element) ? getNative(element) : get$8(element); + + const get$6 = (element) => element.dom.textContent; + + const get$5 = (element) => element.dom.value; + const set$4 = (element, value) => { + if (value === undefined) { + throw new Error('Value.set was undefined'); + } + element.dom.value = value; + }; + + const ancestors = (scope, predicate, isRoot) => filter$2(parents(scope, isRoot), predicate); + + const descendants = (scope, selector) => all$3(selector, scope); + + const closest$2 = (scope, predicate, isRoot) => closest$4(scope, predicate, isRoot).isSome(); + + const closest$1 = (scope, selector, isRoot) => closest$3(scope, selector, isRoot).isSome(); + + const ensureIsRoot = (isRoot) => isFunction(isRoot) ? isRoot : never; + const ancestor = (scope, transform, isRoot) => { + let element = scope.dom; + const stop = ensureIsRoot(isRoot); + while (element.parentNode) { + element = element.parentNode; + const el = SugarElement.fromDom(element); + const transformed = transform(el); + if (transformed.isSome()) { + return transformed; + } + else if (stop(el)) { + break; + } + } + return Optional.none(); + }; + const closest = (scope, transform, isRoot) => { + const current = transform(scope); + const stop = ensureIsRoot(isRoot); + return current.orThunk(() => stop(scope) ? Optional.none() : ancestor(scope, transform, stop)); + }; + + const create$5 = (start, soffset, finish, foffset) => ({ + start, + soffset, + finish, + foffset + }); + // tslint:disable-next-line:variable-name + const SimRange = { + create: create$5 + }; + + const adt$9 = Adt.generate([ + { before: ['element'] }, + { on: ['element', 'offset'] }, + { after: ['element'] } + ]); + // Probably don't need this given that we now have "match" + const cata$2 = (subject, onBefore, onOn, onAfter) => subject.fold(onBefore, onOn, onAfter); + const getStart$1 = (situ) => situ.fold(identity, identity, identity); + const before = adt$9.before; + const on$1 = adt$9.on; + const after = adt$9.after; + // tslint:disable-next-line:variable-name + const Situ = { + before, + on: on$1, + after, + cata: cata$2, + getStart: getStart$1 + }; + + // Consider adding a type for "element" + const adt$8 = Adt.generate([ + { domRange: ['rng'] }, + { relative: ['startSitu', 'finishSitu'] }, + { exact: ['start', 'soffset', 'finish', 'foffset'] } + ]); + const exactFromRange = (simRange) => adt$8.exact(simRange.start, simRange.soffset, simRange.finish, simRange.foffset); + const getStart = (selection) => selection.match({ + domRange: (rng) => SugarElement.fromDom(rng.startContainer), + relative: (startSitu, _finishSitu) => Situ.getStart(startSitu), + exact: (start, _soffset, _finish, _foffset) => start + }); + const domRange = adt$8.domRange; + const relative$1 = adt$8.relative; + const exact = adt$8.exact; + const getWin = (selection) => { + const start = getStart(selection); + return defaultView(start); + }; + // This is out of place but it's API so I can't remove it + const range$1 = SimRange.create; + // tslint:disable-next-line:variable-name + const SimSelection = { + domRange, + relative: relative$1, + exact, + exactFromRange, + getWin, + range: range$1 + }; + + const getNativeSelection = (win) => Optional.from(win.getSelection()); + // NOTE: We are still reading the range because it gives subtly different behaviour + // than using the anchorNode and focusNode. I'm not sure if this behaviour is any + // better or worse; it's just different. + const readRange = (selection) => { + if (selection.rangeCount > 0) { + const firstRng = selection.getRangeAt(0); + const lastRng = selection.getRangeAt(selection.rangeCount - 1); + return Optional.some(SimRange.create(SugarElement.fromDom(firstRng.startContainer), firstRng.startOffset, SugarElement.fromDom(lastRng.endContainer), lastRng.endOffset)); + } + else { + return Optional.none(); + } + }; + const doGetExact = (selection) => { + if (selection.anchorNode === null || selection.focusNode === null) { + return readRange(selection); + } + else { + const anchor = SugarElement.fromDom(selection.anchorNode); + const focus = SugarElement.fromDom(selection.focusNode); + // if this returns true anchor is _after_ focus, so we need a custom selection object to maintain the RTL selection + return after$2(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Optional.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection); + } + }; + const getExact = (win) => + // We want to retrieve the selection as it is. + getNativeSelection(win) + .filter((sel) => sel.rangeCount > 0) + .bind(doGetExact); + const getFirstRect = (win, selection) => { + const rng = asLtrRange(win, selection); + return getFirstRect$1(rng); + }; + const getBounds$2 = (win, selection) => { + const rng = asLtrRange(win, selection); + return getBounds$3(rng); + }; + + const units = { + // we don't really support all of these different ways to express a length + unsupportedLength: [ + 'em', + 'ex', + 'cap', + 'ch', + 'ic', + 'rem', + 'lh', + 'rlh', + 'vw', + 'vh', + 'vi', + 'vb', + 'vmin', + 'vmax', + 'cm', + 'mm', + 'Q', + 'in', + 'pc', + 'pt', + 'px' + ], + // these are the length values we do support + fixed: ['px', 'pt'], + relative: ['%'], + empty: [''] + }; + // Built from https://tc39.es/ecma262/#prod-StrDecimalLiteral + // Matches a float followed by a trailing set of characters + const pattern = (() => { + const decimalDigits = '[0-9]+'; + const signedInteger = '[+-]?' + decimalDigits; + const exponentPart = '[eE]' + signedInteger; + const dot = '\\.'; + const opt = (input) => `(?:${input})?`; + const unsignedDecimalLiteral = [ + 'Infinity', + decimalDigits + dot + opt(decimalDigits) + opt(exponentPart), + dot + decimalDigits + opt(exponentPart), + decimalDigits + opt(exponentPart) + ].join('|'); + const float = `[+-]?(?:${unsignedDecimalLiteral})`; + return new RegExp(`^(${float})(.*)$`); + })(); + const isUnit = (unit, accepted) => exists(accepted, (acc) => exists(units[acc], (check) => unit === check)); + const parse = (input, accepted) => { + const match = Optional.from(pattern.exec(input)); + return match.bind((array) => { + const value = Number(array[1]); + const unitRaw = array[2]; + if (isUnit(unitRaw, accepted)) { + return Optional.some({ + value, + unit: unitRaw + }); + } + else { + return Optional.none(); + } + }); + }; + const normalise = (input, accepted) => parse(input, accepted).map(({ value, unit }) => value + unit); + + const get$4 = (_win) => { + const win = _win === undefined ? window : _win; + if (detect$1().browser.isFirefox()) { + // TINY-7984: Firefox 91 is returning incorrect values for visualViewport.pageTop, so disable it for now + return Optional.none(); + } + else { + return Optional.from(win.visualViewport); + } + }; + const bounds$1 = (x, y, width, height) => ({ + x, + y, + width, + height, + right: x + width, + bottom: y + height + }); + const getBounds$1 = (_win) => { + const win = _win === undefined ? window : _win; + const doc = win.document; + const scroll = get$b(SugarElement.fromDom(doc)); + return get$4(win).fold(() => { + const html = win.document.documentElement; + // Don't use window.innerWidth/innerHeight here, as we don't want to include scrollbars + // since the right/bottom position is based on the edge of the scrollbar not the window + const width = html.clientWidth; + const height = html.clientHeight; + return bounds$1(scroll.left, scroll.top, width, height); + }, (visualViewport) => + // iOS doesn't update the pageTop/pageLeft when element.scrollIntoView() is called, so we need to fallback to the + // scroll position which will always be less than the page top/left values when page top/left are accurate/correct. + bounds$1(Math.max(visualViewport.pageLeft, scroll.left), Math.max(visualViewport.pageTop, scroll.top), visualViewport.width, visualViewport.height)); + }; + + const walkUp = (navigation, doc) => { + const frame = navigation.view(doc); + return frame.fold(constant$1([]), (f) => { + const parent = navigation.owner(f); + const rest = walkUp(navigation, parent); + return [f].concat(rest); + }); + }; + // TODO: Why is this an option if it is always some? + const pathTo = (element, navigation) => { + const d = navigation.owner(element); + const paths = walkUp(navigation, d); + return Optional.some(paths); + }; + + const view = (doc) => { + // Only walk up to the document this script is defined in. + // This prevents walking up to the parent window when the editor is in an iframe. + const element = doc.dom === document ? Optional.none() : Optional.from(doc.dom.defaultView?.frameElement); + return element.map(SugarElement.fromDom); + }; + const owner$3 = (element) => owner$4(element); + + var Navigation = /*#__PURE__*/Object.freeze({ + __proto__: null, + view: view, + owner: owner$3 + }); + + const find$2 = (element) => { + const doc = getDocument(); + const scroll = get$b(doc); + // Get the path of iframe elements to this element. + const path = pathTo(element, Navigation); + return path.fold(curry(absolute$3, element), (frames) => { + const offset = viewport$1(element); + const r = foldr(frames, (b, a) => { + const loc = viewport$1(a); + return { + left: b.left + loc.left, + top: b.top + loc.top + }; + }, { left: 0, top: 0 }); + return SugarPosition(r.left + offset.left + scroll.left, r.top + offset.top + scroll.top); + }); + }; + + const pointed = (point, width, height) => ({ + point, + width, + height + }); + const rect = (x, y, width, height) => ({ + x, + y, + width, + height + }); + const bounds = (x, y, width, height) => ({ + x, + y, + width, + height, + right: x + width, + bottom: y + height + }); + const box$1 = (element) => { + const xy = absolute$3(element); + const w = getOuter(element); + const h = getOuter$1(element); + return bounds(xy.left, xy.top, w, h); + }; + // NOTE: We used to use AriaFocus.preserve here, but there is no reason to do that now that + // we are not changing the visibility of the element. Hopefully (2015-09-29). + const absolute$2 = (element) => { + const position = find$2(element); + const width = getOuter(element); + const height = getOuter$1(element); + return bounds(position.left, position.top, width, height); + }; + const constrain = (original, constraint) => { + const left = Math.max(original.x, constraint.x); + const top = Math.max(original.y, constraint.y); + const right = Math.min(original.right, constraint.right); + const bottom = Math.min(original.bottom, constraint.bottom); + const width = right - left; + const height = bottom - top; + return bounds(left, top, width, height); + }; + const constrainByMany = (original, constraints) => { + return foldl(constraints, (acc, c) => constrain(acc, c), original); + }; + const win = () => getBounds$1(window); + + const isSource = (component, simulatedEvent) => eq(component.element, simulatedEvent.event.target); + + const getOffsetParent = (element) => { + // Firefox sets the offsetParent to the body when fixed instead of null like + // all other browsers. So we need to check if the element is fixed and if so then + // disregard the elements offsetParent. + const isFixed = is$1(getRaw(element, 'position'), 'fixed'); + const offsetParent$1 = isFixed ? Optional.none() : offsetParent(element); + return offsetParent$1.orThunk(() => { + const marker = SugarElement.fromTag('span'); + // PERFORMANCE: Append the marker to the parent element, as adding it before the current element will + // trigger the styles to be recalculated which is a little costly (particularly in scroll/resize events) + return parent(element).bind((parent) => { + append$2(parent, marker); + const offsetParent$1 = offsetParent(marker); + remove$7(marker); + return offsetParent$1; + }); + }); + }; + /* + * This allows the absolute coordinates to be obtained by adding the + * origin to the offset coordinates and not needing to know scroll. + */ + const getOrigin = (element) => getOffsetParent(element).map(absolute$3).getOrThunk(() => SugarPosition(0, 0)); + + const describedBy = (describedElement, describeElement) => { + const describeId = Optional.from(get$g(describedElement, 'id')) + .getOrThunk(() => { + const id = generate$6('aria'); + set$9(describeElement, 'id', id); + return id; + }); + set$9(describedElement, 'aria-describedby', describeId); + }; + const remove$1 = (describedElement) => { + remove$8(describedElement, 'aria-describedby'); + }; + + var SimpleResultType; + (function (SimpleResultType) { + SimpleResultType[SimpleResultType["Error"] = 0] = "Error"; + SimpleResultType[SimpleResultType["Value"] = 1] = "Value"; + })(SimpleResultType || (SimpleResultType = {})); + const fold$1 = (res, onError, onValue) => res.stype === SimpleResultType.Error ? onError(res.serror) : onValue(res.svalue); + const partition$1 = (results) => { + const values = []; + const errors = []; + each$1(results, (obj) => { + fold$1(obj, (err) => errors.push(err), (val) => values.push(val)); + }); + return { values, errors }; + }; + const mapError = (res, f) => { + if (res.stype === SimpleResultType.Error) { + return { stype: SimpleResultType.Error, serror: f(res.serror) }; + } + else { + return res; + } + }; + const map = (res, f) => { + if (res.stype === SimpleResultType.Value) { + return { stype: SimpleResultType.Value, svalue: f(res.svalue) }; + } + else { + return res; + } + }; + const bind = (res, f) => { + if (res.stype === SimpleResultType.Value) { + return f(res.svalue); + } + else { + return res; + } + }; + const bindError = (res, f) => { + if (res.stype === SimpleResultType.Error) { + return f(res.serror); + } + else { + return res; + } + }; + const svalue = (v) => ({ stype: SimpleResultType.Value, svalue: v }); + const serror = (e) => ({ stype: SimpleResultType.Error, serror: e }); + const toResult$1 = (res) => fold$1(res, Result.error, Result.value); + const fromResult = (res) => res.fold(serror, svalue); + const SimpleResult = { + fromResult, + toResult: toResult$1, + svalue, + partition: partition$1, + serror, + bind, + bindError, + map, + mapError, + fold: fold$1 + }; + + const formatObj = (input) => { + return isObject(input) && keys(input).length > 100 ? ' removed due to size' : JSON.stringify(input, null, 2); + }; + const formatErrors = (errors) => { + const es = errors.length > 10 ? errors.slice(0, 10).concat([ + { + path: [], + getErrorInfo: constant$1('... (only showing first ten failures)') + } + ]) : errors; + // TODO: Work out a better split between PrettyPrinter and SchemaError + return map$2(es, (e) => { + return 'Failed path: (' + e.path.join(' > ') + ')\n' + e.getErrorInfo(); + }); + }; + + const nu$7 = (path, getErrorInfo) => { + return SimpleResult.serror([{ + path, + // This is lazy so that it isn't calculated unnecessarily + getErrorInfo + }]); + }; + const missingRequired = (path, key, obj) => nu$7(path, () => 'Could not find valid *required* value for "' + key + '" in ' + formatObj(obj)); + const missingKey = (path, key) => nu$7(path, () => 'Choice schema did not contain choice key: "' + key + '"'); + const missingBranch = (path, branches, branch) => nu$7(path, () => 'The chosen schema: "' + branch + '" did not exist in branches: ' + formatObj(branches)); + const unsupportedFields = (path, unsupported) => nu$7(path, () => 'There are unsupported fields: [' + unsupported.join(', ') + '] specified'); + const custom = (path, err) => nu$7(path, constant$1(err)); + + const value$1 = (validator) => { + const extract = (path, val) => { + return SimpleResult.bindError(validator(val), (err) => custom(path, err)); + }; + const toString = constant$1('val'); + return { + extract, + toString + }; + }; + const anyValue$1 = value$1(SimpleResult.svalue); + + const anyValue = constant$1(anyValue$1); + const typedValue = (validator, expectedType) => value$1((a) => { + const actualType = typeof a; + return validator(a) ? SimpleResult.svalue(a) : SimpleResult.serror(`Expected type: ${expectedType} but got: ${actualType}`); + }); + const number = typedValue(isNumber, 'number'); + const string = typedValue(isString, 'string'); + const boolean = typedValue(isBoolean, 'boolean'); + const functionProcessor = typedValue(isFunction, 'function'); + // Test if a value can be copied by the structured clone algorithm and hence sendable via postMessage + // https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm + // from https://stackoverflow.com/a/32673910/7377237 with adjustments for typescript + const isPostMessageable = (val) => { + if (Object(val) !== val) { // Primitive value + return true; + } + switch ({}.toString.call(val).slice(8, -1)) { // Class + case 'Boolean': + case 'Number': + case 'String': + case 'Date': + case 'RegExp': + case 'Blob': + case 'FileList': + case 'ImageData': + case 'ImageBitmap': + case 'ArrayBuffer': + return true; + case 'Array': + case 'Object': + return Object.keys(val).every((prop) => isPostMessageable(val[prop])); + default: + return false; + } + }; + const postMessageable = value$1((a) => { + if (isPostMessageable(a)) { + return SimpleResult.svalue(a); + } + else { + return SimpleResult.serror('Expected value to be acceptable for sending via postMessage'); + } + }); + + const required$2 = () => ({ tag: "required" /* FieldPresenceTag.Required */, process: {} }); + const defaultedThunk = (fallbackThunk) => ({ tag: "defaultedThunk" /* FieldPresenceTag.DefaultedThunk */, process: fallbackThunk }); + const defaulted$1 = (fallback) => defaultedThunk(constant$1(fallback)); + const asOption = () => ({ tag: "option" /* FieldPresenceTag.Option */, process: {} }); + const mergeWithThunk = (baseThunk) => ({ tag: "mergeWithThunk" /* FieldPresenceTag.MergeWithThunk */, process: baseThunk }); + const mergeWith = (base) => mergeWithThunk(constant$1(base)); + + const field$2 = (key, newKey, presence, prop) => ({ tag: "field" /* FieldTag.Field */, key, newKey, presence, prop }); + const customField$1 = (newKey, instantiator) => ({ tag: "custom" /* FieldTag.CustomField */, newKey, instantiator }); + const fold = (value, ifField, ifCustom) => { + switch (value.tag) { + case "field" /* FieldTag.Field */: + return ifField(value.key, value.newKey, value.presence, value.prop); + case "custom" /* FieldTag.CustomField */: + return ifCustom(value.newKey, value.instantiator); + } + }; + + const mergeValues$1 = (values, base) => { + return SimpleResult.svalue(deepMerge(base, merge$1.apply(undefined, values))); + }; + const mergeErrors$1 = (errors) => compose(SimpleResult.serror, flatten)(errors); + const consolidateObj = (objects, base) => { + const partition = SimpleResult.partition(objects); + return partition.errors.length > 0 ? mergeErrors$1(partition.errors) : mergeValues$1(partition.values, base); + }; + const consolidateArr = (objects) => { + const partitions = SimpleResult.partition(objects); + return partitions.errors.length > 0 ? mergeErrors$1(partitions.errors) : SimpleResult.svalue(partitions.values); + }; + const ResultCombine = { + consolidateObj, + consolidateArr + }; + + const requiredAccess = (path, obj, key, bundle) => + // In required mode, if it is undefined, it is an error. + get$h(obj, key).fold(() => missingRequired(path, key, obj), bundle); + const fallbackAccess = (obj, key, fallback, bundle) => { + const v = get$h(obj, key).getOrThunk(() => fallback(obj)); + return bundle(v); + }; + const optionAccess = (obj, key, bundle) => bundle(get$h(obj, key)); + const optionDefaultedAccess = (obj, key, fallback, bundle) => { + const opt = get$h(obj, key).map((val) => val === true ? fallback(obj) : val); + return bundle(opt); + }; + const extractField = (field, path, obj, key, prop) => { + const bundle = (av) => prop.extract(path.concat([key]), av); + const bundleAsOption = (optValue) => optValue.fold(() => SimpleResult.svalue(Optional.none()), (ov) => { + const result = prop.extract(path.concat([key]), ov); + return SimpleResult.map(result, Optional.some); + }); + switch (field.tag) { + case "required" /* FieldPresenceTag.Required */: + return requiredAccess(path, obj, key, bundle); + case "defaultedThunk" /* FieldPresenceTag.DefaultedThunk */: + return fallbackAccess(obj, key, field.process, bundle); + case "option" /* FieldPresenceTag.Option */: + return optionAccess(obj, key, bundleAsOption); + case "defaultedOptionThunk" /* FieldPresenceTag.DefaultedOptionThunk */: + return optionDefaultedAccess(obj, key, field.process, bundleAsOption); + case "mergeWithThunk" /* FieldPresenceTag.MergeWithThunk */: { + return fallbackAccess(obj, key, constant$1({}), (v) => { + const result = deepMerge(field.process(obj), v); + return bundle(result); + }); + } + } + }; + const extractFields = (path, obj, fields) => { + const success = {}; + const errors = []; + // PERFORMANCE: We use a for loop here instead of Arr.each as this is a hot code path + for (const field of fields) { + fold(field, (key, newKey, presence, prop) => { + const result = extractField(presence, path, obj, key, prop); + SimpleResult.fold(result, (err) => { + errors.push(...err); + }, (res) => { + success[newKey] = res; + }); + }, (newKey, instantiator) => { + success[newKey] = instantiator(obj); + }); + } + return errors.length > 0 ? SimpleResult.serror(errors) : SimpleResult.svalue(success); + }; + const valueThunk = (getDelegate) => { + const extract = (path, val) => getDelegate().extract(path, val); + const toString = () => getDelegate().toString(); + return { + extract, + toString + }; + }; + // This is because Obj.keys can return things where the key is set to undefined. + const getSetKeys = (obj) => keys(filter$1(obj, isNonNullable)); + const objOfOnly = (fields) => { + const delegate = objOf(fields); + const fieldNames = foldr(fields, (acc, value) => { + return fold(value, (key) => deepMerge(acc, { [key]: true }), constant$1(acc)); + }, {}); + const extract = (path, o) => { + const keys = isBoolean(o) ? [] : getSetKeys(o); + const extra = filter$2(keys, (k) => !hasNonNullableKey(fieldNames, k)); + return extra.length === 0 ? delegate.extract(path, o) : unsupportedFields(path, extra); + }; + return { + extract, + toString: delegate.toString + }; + }; + const objOf = (values) => { + const extract = (path, o) => extractFields(path, o, values); + const toString = () => { + const fieldStrings = map$2(values, (value) => fold(value, (key, _okey, _presence, prop) => key + ' -> ' + prop.toString(), (newKey, _instantiator) => 'state(' + newKey + ')')); + return 'obj{\n' + fieldStrings.join('\n') + '}'; + }; + return { + extract, + toString + }; + }; + const arrOf = (prop) => { + const extract = (path, array) => { + const results = map$2(array, (a, i) => prop.extract(path.concat(['[' + i + ']']), a)); + return ResultCombine.consolidateArr(results); + }; + const toString = () => 'array(' + prop.toString() + ')'; + return { + extract, + toString + }; + }; + const oneOf = (props, rawF) => { + // If f is not supplied, then use identity. + const f = rawF !== undefined ? rawF : identity; + const extract = (path, val) => { + const errors = []; + // Return on first match + for (const prop of props) { + const res = prop.extract(path, val); + if (res.stype === SimpleResultType.Value) { + return { + stype: SimpleResultType.Value, + svalue: f(res.svalue) + }; + } + errors.push(res); + } + // All failed, return errors + return ResultCombine.consolidateArr(errors); + }; + const toString = () => 'oneOf(' + map$2(props, (prop) => prop.toString()).join(', ') + ')'; + return { + extract, + toString + }; + }; + const setOf$1 = (validator, prop) => { + const validateKeys = (path, keys) => arrOf(value$1(validator)).extract(path, keys); + const extract = (path, o) => { + // + const keys$1 = keys(o); + const validatedKeys = validateKeys(path, keys$1); + return SimpleResult.bind(validatedKeys, (validKeys) => { + const schema = map$2(validKeys, (vk) => { + return field$2(vk, vk, required$2(), prop); + }); + return objOf(schema).extract(path, o); + }); + }; + const toString = () => 'setOf(' + prop.toString() + ')'; + return { + extract, + toString + }; + }; + const thunk = (_desc, processor) => { + const getP = cached(processor); + const extract = (path, val) => getP().extract(path, val); + const toString = () => getP().toString(); + return { + extract, + toString + }; + }; + const arrOfObj = compose(arrOf, objOf); + + const chooseFrom = (path, input, branches, ch) => { + const fields = get$h(branches, ch); + return fields.fold(() => missingBranch(path, branches, ch), (vp) => vp.extract(path.concat(['branch: ' + ch]), input)); + }; + // The purpose of choose is to have a key which picks which of the schemas to follow. + // The key will index into the object of schemas: branches + const choose$2 = (key, branches) => { + const extract = (path, input) => { + const choice = get$h(input, key); + return choice.fold(() => missingKey(path, key), (chosen) => chooseFrom(path, input, branches, chosen)); + }; + const toString = () => 'chooseOn(' + key + '). Possible values: ' + keys(branches); + return { + extract, + toString + }; + }; + + const arrOfVal = () => arrOf(anyValue$1); + const valueOf = (validator) => value$1((v) => validator(v).fold(SimpleResult.serror, SimpleResult.svalue)); + const setOf = (validator, prop) => setOf$1((v) => SimpleResult.fromResult(validator(v)), prop); + const extractValue = (label, prop, obj) => { + const res = prop.extract([label], obj); + return SimpleResult.mapError(res, (errs) => ({ input: obj, errors: errs })); + }; + const asRaw = (label, prop, obj) => SimpleResult.toResult(extractValue(label, prop, obj)); + const getOrDie = (extraction) => { + return extraction.fold((errInfo) => { + // A readable version of the error. + throw new Error(formatError(errInfo)); + }, identity); + }; + const asRawOrDie$1 = (label, prop, obj) => getOrDie(asRaw(label, prop, obj)); + const formatError = (errInfo) => { + return 'Errors: \n' + formatErrors(errInfo.errors).join('\n') + + '\n\nInput object: ' + formatObj(errInfo.input); + }; + const choose$1 = (key, branches) => choose$2(key, map$1(branches, objOf)); + const thunkOf = (desc, schema) => thunk(desc, schema); + + const field$1 = field$2; + const customField = customField$1; + const validateEnum = (values) => valueOf((value) => contains$2(values, value) ? + Result.value(value) : + Result.error(`Unsupported value: "${value}", choose one of "${values.join(', ')}".`)); + const required$1 = (key) => field$1(key, key, required$2(), anyValue()); + const requiredOf = (key, schema) => field$1(key, key, required$2(), schema); + const requiredNumber = (key) => requiredOf(key, number); + const requiredString = (key) => requiredOf(key, string); + const requiredStringEnum = (key, values) => field$1(key, key, required$2(), validateEnum(values)); + const requiredFunction = (key) => requiredOf(key, functionProcessor); + const forbid = (key, message) => field$1(key, key, asOption(), value$1((_v) => SimpleResult.serror('The field: ' + key + ' is forbidden. ' + message))); + const requiredObjOf = (key, objSchema) => field$1(key, key, required$2(), objOf(objSchema)); + const requiredArrayOfObj = (key, objFields) => field$1(key, key, required$2(), arrOfObj(objFields)); + const requiredArrayOf = (key, schema) => field$1(key, key, required$2(), arrOf(schema)); + const option$3 = (key) => field$1(key, key, asOption(), anyValue()); + const optionOf = (key, schema) => field$1(key, key, asOption(), schema); + const optionNumber = (key) => optionOf(key, number); + const optionString = (key) => optionOf(key, string); + const optionStringEnum = (key, values) => optionOf(key, validateEnum(values)); + const optionBoolean = (key) => optionOf(key, boolean); + const optionFunction = (key) => optionOf(key, functionProcessor); + const optionArrayOf = (key, schema) => optionOf(key, arrOf(schema)); + const optionObjOf = (key, objSchema) => optionOf(key, objOf(objSchema)); + const optionObjOfOnly = (key, objSchema) => optionOf(key, objOfOnly(objSchema)); + const defaulted = (key, fallback) => field$1(key, key, defaulted$1(fallback), anyValue()); + const defaultedOf = (key, fallback, schema) => field$1(key, key, defaulted$1(fallback), schema); + const defaultedNumber = (key, fallback) => defaultedOf(key, fallback, number); + const defaultedString = (key, fallback) => defaultedOf(key, fallback, string); + const defaultedStringEnum = (key, fallback, values) => defaultedOf(key, fallback, validateEnum(values)); + const defaultedBoolean = (key, fallback) => defaultedOf(key, fallback, boolean); + const defaultedFunction = (key, fallback) => defaultedOf(key, fallback, functionProcessor); + const defaultedPostMsg = (key, fallback) => defaultedOf(key, fallback, postMessageable); + const defaultedArrayOf = (key, fallback, schema) => defaultedOf(key, fallback, arrOf(schema)); + const defaultedObjOf = (key, fallback, objSchema) => defaultedOf(key, fallback, objOf(objSchema)); + + const exclude$1 = (obj, fields) => { + const r = {}; + each(obj, (v, k) => { + if (!contains$2(fields, k)) { + r[k] = v; + } + }); + return r; + }; + + const wrap$1 = (key, value) => ({ [key]: value }); + const wrapAll$1 = (keyvalues) => { + const r = {}; + each$1(keyvalues, (kv) => { + r[kv.key] = kv.value; + }); + return r; + }; + + const exclude = (obj, fields) => exclude$1(obj, fields); + const wrap = (key, value) => wrap$1(key, value); + const wrapAll = (keyvalues) => wrapAll$1(keyvalues); + const mergeValues = (values, base) => { + return values.length === 0 ? Result.value(base) : Result.value(deepMerge(base, merge$1.apply(undefined, values)) + // Merger.deepMerge.apply(undefined, [ base ].concat(values)) + ); + }; + const mergeErrors = (errors) => Result.error(flatten(errors)); + const consolidate = (objs, base) => { + const partitions = partition$2(objs); + return partitions.errors.length > 0 ? mergeErrors(partitions.errors) : mergeValues(partitions.values, base); + }; + + const constant = constant$1; + const touchstart = constant('touchstart'); + const touchmove = constant('touchmove'); + const touchend = constant('touchend'); + const touchcancel = constant('touchcancel'); + const mousedown = constant('mousedown'); + const mousemove = constant('mousemove'); + const mouseout = constant('mouseout'); + const mouseup = constant('mouseup'); + const mouseover = constant('mouseover'); + // Not really a native event as it has to be simulated + const focusin = constant('focusin'); + const focusout = constant('focusout'); + const keydown = constant('keydown'); + const keyup = constant('keyup'); + const input = constant('input'); + const change = constant('change'); + const click = constant('click'); + const transitioncancel = constant('transitioncancel'); + const transitionend = constant('transitionend'); + const transitionstart = constant('transitionstart'); + const selectstart = constant('selectstart'); + + const prefixName = (name) => constant$1('alloy.' + name); + const alloy = { tap: prefixName('tap') }; + // This is used to pass focus to a component. A component might interpret + // this event and pass the DOM focus to one of its children, depending on its + // focus model. + const focus$3 = prefixName('focus'); + // This event is fired a small amount of time after the blur has fired. This + // allows the handler to know what was the focused element, and what is now. + const postBlur = prefixName('blur.post'); + // This event is fired a small amount of time after the paste event has fired. + const postPaste = prefixName('paste.post'); + // This event is fired by gui.broadcast*. It is defined by 'receivers' + const receive = prefixName('receive'); + // This event is for executing buttons and things that have (mostly) enter actions + const execute$5 = prefixName('execute'); + // This event is used by a menu to tell an item to focus itself because it has been + // selected. This might automatically focus inside the item, it might focus the outer + // part of the widget etc. + const focusItem = prefixName('focus.item'); + // This event represents a touchstart and touchend on the same location, and fires on + // the touchend + const tap = alloy.tap; + // This event represents a longpress on the same location + const longpress = prefixName('longpress'); + // Fire by a child element to tell the outer element to close + const sandboxClose = prefixName('sandbox.close'); + // Tell the typeahead to cancel any pending fetches (that haven't already executed) + const typeaheadCancel = prefixName('typeahead.cancel'); + // Fired when adding to a world + const systemInit = prefixName('system.init'); + // Fired when a touchmove on the document happens + const documentTouchmove = prefixName('system.touchmove'); + // Fired when a touchend on the document happens + const documentTouchend = prefixName('system.touchend'); + // Fired when the window scrolls + const windowScroll = prefixName('system.scroll'); + // Fired when the window resizes + const windowResize = prefixName('system.resize'); + const attachedToDom = prefixName('system.attached'); + const detachedFromDom = prefixName('system.detached'); + const dismissRequested = prefixName('system.dismissRequested'); + const repositionRequested = prefixName('system.repositionRequested'); + const focusShifted = prefixName('focusmanager.shifted'); + // Fired when slots are made hidden/shown + const slotVisibility = prefixName('slotcontainer.visibility'); + // Used for containers outside the mothership that scroll. Used by docking. + const externalElementScroll = prefixName('system.external.element.scroll'); + const changeTab = prefixName('change.tab'); + const dismissTab = prefixName('dismiss.tab'); + const highlight$1 = prefixName('highlight'); + const dehighlight$1 = prefixName('dehighlight'); + + const element = (elem) => getHtml(elem); + + const unknown = 'unknown'; + /* + typescipt qwerk: + const debugging: boolean = true; + if (boolean === false) { -> this throws a type error! // TS2365:Operator '===' cannot be applied to types 'false' and 'true' + https://www.typescriptlang.org/play/#src=const%20foo%3A%20boolean%20%3D%20true%3B%0D%0A%0D%0Aif%20(foo%20%3D%3D%3D%20false)%20%7B%0D%0A%20%20%20%20%0D%0A%7D + } + */ + const debugging = true; + var EventConfiguration; + (function (EventConfiguration) { + EventConfiguration[EventConfiguration["STOP"] = 0] = "STOP"; + EventConfiguration[EventConfiguration["NORMAL"] = 1] = "NORMAL"; + EventConfiguration[EventConfiguration["LOGGING"] = 2] = "LOGGING"; + })(EventConfiguration || (EventConfiguration = {})); + const eventConfig = Cell({}); + const makeEventLogger = (eventName, initialTarget) => { + const sequence = []; + const startTime = new Date().getTime(); + return { + logEventCut: (_name, target, purpose) => { + sequence.push({ outcome: 'cut', target, purpose }); + }, + logEventStopped: (_name, target, purpose) => { + sequence.push({ outcome: 'stopped', target, purpose }); + }, + logNoParent: (_name, target, purpose) => { + sequence.push({ outcome: 'no-parent', target, purpose }); + }, + logEventNoHandlers: (_name, target) => { + sequence.push({ outcome: 'no-handlers-left', target }); + }, + logEventResponse: (_name, target, purpose) => { + sequence.push({ outcome: 'response', purpose, target }); + }, + write: () => { + const finishTime = new Date().getTime(); + if (contains$2(['mousemove', 'mouseover', 'mouseout', systemInit()], eventName)) { + return; + } + // eslint-disable-next-line no-console + console.log(eventName, { + event: eventName, + time: finishTime - startTime, + target: initialTarget.dom, + sequence: map$2(sequence, (s) => { + if (!contains$2(['cut', 'stopped', 'response'], s.outcome)) { + return s.outcome; + } + else { + return '{' + s.purpose + '} ' + s.outcome + ' at (' + element(s.target) + ')'; + } + }) + }); + } + }; + }; + const processEvent = (eventName, initialTarget, f) => { + const status = get$h(eventConfig.get(), eventName).orThunk(() => { + const patterns = keys(eventConfig.get()); + return findMap(patterns, (p) => eventName.indexOf(p) > -1 ? Optional.some(eventConfig.get()[p]) : Optional.none()); + }).getOr(EventConfiguration.NORMAL); + switch (status) { + case EventConfiguration.NORMAL: + return f(noLogger()); + case EventConfiguration.LOGGING: { + const logger = makeEventLogger(eventName, initialTarget); + const output = f(logger); + logger.write(); + return output; + } + case EventConfiguration.STOP: + // Does not even run the function to trigger event and listen to handlers + return true; + } + }; + // Ignore these files in the error stack + const path = [ + 'alloy/data/Fields', + 'alloy/debugging/Debugging' + ]; + const getTrace = () => { + if (debugging === false) { + return unknown; + } + const err = new Error(); + if (err.stack !== undefined) { + const lines = err.stack.split('\n'); + return find$5(lines, (line) => line.indexOf('alloy') > 0 && !exists(path, (p) => line.indexOf(p) > -1)).getOr(unknown); + } + else { + return unknown; + } + }; + const ignoreEvent = { + logEventCut: noop, + logEventStopped: noop, + logNoParent: noop, + logEventNoHandlers: noop, + logEventResponse: noop, + write: noop + }; + const monitorEvent = (eventName, initialTarget, f) => processEvent(eventName, initialTarget, f); + const noLogger = constant$1(ignoreEvent); + + const menuFields = constant$1([ + required$1('menu'), + required$1('selectedMenu') + ]); + const itemFields = constant$1([ + required$1('item'), + required$1('selectedItem') + ]); + constant$1(objOf(itemFields().concat(menuFields()))); + const itemSchema$3 = constant$1(objOf(itemFields())); + + const _initSize = requiredObjOf('initSize', [ + required$1('numColumns'), + required$1('numRows') + ]); + const itemMarkers = () => requiredOf('markers', itemSchema$3()); + const tieredMenuMarkers = () => requiredObjOf('markers', [ + required$1('backgroundMenu') + ].concat(menuFields()).concat(itemFields())); + const markers$1 = (required) => requiredObjOf('markers', map$2(required, required$1)); + const onPresenceHandler = (label, fieldName, presence) => { + // We care about where the handler was declared (in terms of which schema) + getTrace(); + return field$1(fieldName, fieldName, presence, + // Apply some wrapping to their supplied function + valueOf((f) => Result.value((...args) => { + return f.apply(undefined, args); + }))); + }; + const onHandler = (fieldName) => onPresenceHandler('onHandler', fieldName, defaulted$1(noop)); + const onKeyboardHandler = (fieldName) => onPresenceHandler('onKeyboardHandler', fieldName, defaulted$1(Optional.none)); + const onStrictHandler = (fieldName) => onPresenceHandler('onHandler', fieldName, required$2()); + const onStrictKeyboardHandler = (fieldName) => onPresenceHandler('onKeyboardHandler', fieldName, required$2()); + const output$1 = (name, value) => customField(name, constant$1(value)); + const snapshot = (name) => customField(name, identity); + const initSize = constant$1(_initSize); + + const markAsBehaviourApi = (f, apiName, apiFunction) => { + const delegate = apiFunction.toString(); + const endIndex = delegate.indexOf(')') + 1; + const openBracketIndex = delegate.indexOf('('); + const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/); + f.toFunctionAnnotation = () => ({ + name: apiName, + parameters: cleanParameters(parameters.slice(0, 1).concat(parameters.slice(3))) + }); + return f; + }; + // Remove any comment (/*) at end of parameter names + const cleanParameters = (parameters) => map$2(parameters, (p) => endsWith(p, '/*') ? p.substring(0, p.length - '/*'.length) : p); + const markAsExtraApi = (f, extraName) => { + const delegate = f.toString(); + const endIndex = delegate.indexOf(')') + 1; + const openBracketIndex = delegate.indexOf('('); + const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/); + f.toFunctionAnnotation = () => ({ + name: extraName, + parameters: cleanParameters(parameters) + }); + return f; + }; + const markAsSketchApi = (f, apiFunction) => { + const delegate = apiFunction.toString(); + const endIndex = delegate.indexOf(')') + 1; + const openBracketIndex = delegate.indexOf('('); + const parameters = delegate.substring(openBracketIndex + 1, endIndex - 1).split(/,\s*/); + f.toFunctionAnnotation = () => ({ + name: 'OVERRIDE', + parameters: cleanParameters(parameters.slice(1)) + }); + return f; + }; + + const DelayedFunction = (fun, delay) => { + let ref = null; + const schedule = (...args) => { + ref = setTimeout(() => { + fun.apply(null, args); + ref = null; + }, delay); + }; + const cancel = () => { + if (ref !== null) { + clearTimeout(ref); + ref = null; + } + }; + return { + cancel, + schedule + }; + }; + + const SIGNIFICANT_MOVE = 5; + const LONGPRESS_DELAY = 400; + const getTouch = (event) => { + const raw = event.raw; + if (raw.touches === undefined || raw.touches.length !== 1) { + return Optional.none(); + } + return Optional.some(raw.touches[0]); + }; + // Check to see if the touch has changed a *significant* amount + const isFarEnough = (touch, data) => { + const distX = Math.abs(touch.clientX - data.x); + const distY = Math.abs(touch.clientY - data.y); + return distX > SIGNIFICANT_MOVE || distY > SIGNIFICANT_MOVE; + }; + const monitor = (settings) => { + /* A tap event is a combination of touchstart and touchend on the same element + * without a *significant* touchmove in between. + */ + const startData = value$2(); + const longpressFired = Cell(false); + const longpress$1 = DelayedFunction((event) => { + settings.triggerEvent(longpress(), event); + longpressFired.set(true); + }, LONGPRESS_DELAY); + const handleTouchstart = (event) => { + getTouch(event).each((touch) => { + longpress$1.cancel(); + const data = { + x: touch.clientX, + y: touch.clientY, + target: event.target + }; + longpress$1.schedule(event); + longpressFired.set(false); + startData.set(data); + }); + return Optional.none(); + }; + const handleTouchmove = (event) => { + longpress$1.cancel(); + getTouch(event).each((touch) => { + startData.on((data) => { + if (isFarEnough(touch, data)) { + startData.clear(); + } + }); + }); + return Optional.none(); + }; + const handleTouchend = (event) => { + longpress$1.cancel(); + const isSame = (data) => eq(data.target, event.target); + return startData.get().filter(isSame).map((_data) => { + if (longpressFired.get()) { + event.prevent(); + return false; + } + else { + return settings.triggerEvent(tap(), event); + } + }); + }; + const handlers = wrapAll([ + { key: touchstart(), value: handleTouchstart }, + { key: touchmove(), value: handleTouchmove }, + { key: touchend(), value: handleTouchend } + ]); + const fireIfReady = (event, type) => get$h(handlers, type).bind((handler) => handler(event)); + return { + fireIfReady + }; + }; + + var FocusInsideModes; + (function (FocusInsideModes) { + FocusInsideModes["OnFocusMode"] = "onFocus"; + FocusInsideModes["OnEnterOrSpaceMode"] = "onEnterOrSpace"; + FocusInsideModes["OnApiMode"] = "onApi"; + })(FocusInsideModes || (FocusInsideModes = {})); + + const _placeholder = 'placeholder'; + const adt$7 = Adt.generate([ + { single: ['required', 'valueThunk'] }, + { multiple: ['required', 'valueThunks'] } + ]); + const isSubstituted = (spec) => has$2(spec, 'uiType'); + const subPlaceholder = (owner, detail, compSpec, placeholders) => { + if (owner.exists((o) => o !== compSpec.owner)) { + return adt$7.single(true, constant$1(compSpec)); + } + // Ignore having to find something for the time being. + return get$h(placeholders, compSpec.name).fold(() => { + throw new Error('Unknown placeholder component: ' + compSpec.name + '\nKnown: [' + + keys(placeholders) + ']\nNamespace: ' + owner.getOr('none') + '\nSpec: ' + JSON.stringify(compSpec, null, 2)); + }, (newSpec) => + // Must return a single/multiple type + newSpec.replace()); + }; + const scan = (owner, detail, compSpec, placeholders) => { + if (isSubstituted(compSpec) && compSpec.uiType === _placeholder) { + return subPlaceholder(owner, detail, compSpec, placeholders); + } + else { + return adt$7.single(false, constant$1(compSpec)); + } + }; + const substitute = (owner, detail, compSpec, placeholders) => { + const base = scan(owner, detail, compSpec, placeholders); + return base.fold((req, valueThunk) => { + const value = isSubstituted(compSpec) ? valueThunk(detail, compSpec.config, compSpec.validated) : valueThunk(detail); + const childSpecs = get$h(value, 'components').getOr([]); + const substituted = bind$3(childSpecs, (c) => substitute(owner, detail, c, placeholders)); + return [ + { + ...value, + components: substituted + } + ]; + }, (req, valuesThunk) => { + if (isSubstituted(compSpec)) { + const values = valuesThunk(detail, compSpec.config, compSpec.validated); + // Allow a preprocessing step for groups before returning the components + const preprocessor = compSpec.validated.preprocess.getOr(identity); + return preprocessor(values); + } + else { + return valuesThunk(detail); + } + }); + }; + const substituteAll = (owner, detail, components, placeholders) => bind$3(components, (c) => substitute(owner, detail, c, placeholders)); + const oneReplace = (label, replacements) => { + let called = false; + const used = () => called; + const replace = () => { + if (called) { + throw new Error('Trying to use the same placeholder more than once: ' + label); + } + called = true; + return replacements; + }; + const required = () => replacements.fold((req, _) => req, (req, _) => req); + return { + name: constant$1(label), + required, + used, + replace + }; + }; + const substitutePlaces = (owner, detail, components, placeholders) => { + const ps = map$1(placeholders, (ph, name) => oneReplace(name, ph)); + const outcome = substituteAll(owner, detail, components, ps); + each(ps, (p) => { + if (p.used() === false && p.required()) { + throw new Error('Placeholder: ' + p.name() + ' was not found in components list\nNamespace: ' + owner.getOr('none') + '\nComponents: ' + + JSON.stringify(detail.components, null, 2)); + } + }); + return outcome; + }; + const single$2 = adt$7.single; + const multiple = adt$7.multiple; + const placeholder = constant$1(_placeholder); + + const adt$6 = Adt.generate([ + { required: ['data'] }, + { external: ['data'] }, + { optional: ['data'] }, + { group: ['data'] } + ]); + const fFactory = defaulted('factory', { sketch: identity }); + const fSchema = defaulted('schema', []); + const fName = required$1('name'); + const fPname = field$1('pname', 'pname', defaultedThunk((typeSpec) => ''), anyValue()); + // Groups cannot choose their schema. + const fGroupSchema = customField('schema', () => [ + option$3('preprocess') + ]); + const fDefaults = defaulted('defaults', constant$1({})); + const fOverrides = defaulted('overrides', constant$1({})); + const requiredSpec = objOf([ + fFactory, fSchema, fName, fPname, fDefaults, fOverrides + ]); + const externalSpec = objOf([ + fFactory, fSchema, fName, fDefaults, fOverrides + ]); + const optionalSpec = objOf([ + fFactory, fSchema, fName, fPname, fDefaults, fOverrides + ]); + const groupSpec = objOf([ + fFactory, fGroupSchema, fName, + required$1('unit'), + fPname, fDefaults, fOverrides + ]); + const asNamedPart = (part) => { + return part.fold(Optional.some, Optional.none, Optional.some, Optional.some); + }; + const name$2 = (part) => { + const get = (data) => data.name; + return part.fold(get, get, get, get); + }; + const asCommon = (part) => { + return part.fold(identity, identity, identity, identity); + }; + const convert = (adtConstructor, partSchema) => (spec) => { + const data = asRawOrDie$1('Converting part type', partSchema, spec); + return adtConstructor(data); + }; + const required = convert(adt$6.required, requiredSpec); + const external$1 = convert(adt$6.external, externalSpec); + const optional = convert(adt$6.optional, optionalSpec); + const group = convert(adt$6.group, groupSpec); + const original = constant$1('entirety'); + + var PartType = /*#__PURE__*/Object.freeze({ + __proto__: null, + required: required, + external: external$1, + optional: optional, + group: group, + asNamedPart: asNamedPart, + name: name$2, + asCommon: asCommon, + original: original + }); + + const combine$2 = (detail, data, partSpec, partValidated) => + // Extremely confusing names and types :( + deepMerge(data.defaults(detail, partSpec, partValidated), partSpec, { uid: detail.partUids[data.name] }, data.overrides(detail, partSpec, partValidated)); + const subs = (owner, detail, parts) => { + const internals = {}; + const externals = {}; + each$1(parts, (part) => { + part.fold( + // Internal + (data) => { + internals[data.pname] = single$2(true, (detail, partSpec, partValidated) => data.factory.sketch(combine$2(detail, data, partSpec, partValidated))); + }, + // External + (data) => { + const partSpec = detail.parts[data.name]; + externals[data.name] = constant$1(data.factory.sketch(combine$2(detail, data, partSpec[original()]), partSpec) // This is missing partValidated + ); + // no placeholders + }, + // Optional + (data) => { + internals[data.pname] = single$2(false, (detail, partSpec, partValidated) => data.factory.sketch(combine$2(detail, data, partSpec, partValidated))); + }, + // Group + (data) => { + internals[data.pname] = multiple(true, (detail, _partSpec, _partValidated) => { + const units = detail[data.name]; + return map$2(units, (u) => + // Group multiples do not take the uid because there is more than one. + data.factory.sketch(deepMerge(data.defaults(detail, u, _partValidated), u, data.overrides(detail, u)))); + }); + }); + }); + return { + internals: constant$1(internals), + externals: constant$1(externals) + }; + }; + + // TODO: Make more functional if performance isn't an issue. + const generate$5 = (owner, parts) => { + const r = {}; + each$1(parts, (part) => { + asNamedPart(part).each((np) => { + const g = doGenerateOne(owner, np.pname); + r[np.name] = (config) => { + const validated = asRawOrDie$1('Part: ' + np.name + ' in ' + owner, objOf(np.schema), config); + return { + ...g, + config, + validated + }; + }; + }); + }); + return r; + }; + // Does not have the config. + const doGenerateOne = (owner, pname) => ({ + uiType: placeholder(), + owner, + name: pname + }); + const generateOne$1 = (owner, pname, config) => ({ + uiType: placeholder(), + owner, + name: pname, + config, + validated: {} + }); + const schemas = (parts) => + // This actually has to change. It needs to return the schemas for things that will + // not appear in the components list, which is only externals + bind$3(parts, (part) => part.fold(Optional.none, Optional.some, Optional.none, Optional.none).map((data) => requiredObjOf(data.name, data.schema.concat([ + snapshot(original()) + ]))).toArray()); + const names = (parts) => map$2(parts, name$2); + const substitutes = (owner, detail, parts) => subs(owner, detail, parts); + const components$1 = (owner, detail, internals) => substitutePlaces(Optional.some(owner), detail, detail.components, internals); + const getPart = (component, detail, partKey) => { + const uid = detail.partUids[partKey]; + return component.getSystem().getByUid(uid).toOptional(); + }; + const getPartOrDie = (component, detail, partKey) => getPart(component, detail, partKey).getOrDie('Could not find part: ' + partKey); + const getParts = (component, detail, partKeys) => { + const r = {}; + const uids = detail.partUids; + const system = component.getSystem(); + each$1(partKeys, (pk) => { + r[pk] = constant$1(system.getByUid(uids[pk])); + }); + return r; + }; + const getAllParts = (component, detail) => { + const system = component.getSystem(); + return map$1(detail.partUids, (pUid, _k) => constant$1(system.getByUid(pUid))); + }; + const getAllPartNames = (detail) => keys(detail.partUids); + const getPartsOrDie = (component, detail, partKeys) => { + const r = {}; + const uids = detail.partUids; + const system = component.getSystem(); + each$1(partKeys, (pk) => { + r[pk] = constant$1(system.getByUid(uids[pk]).getOrDie()); + }); + return r; + }; + const defaultUids = (baseUid, partTypes) => { + const partNames = names(partTypes); + return wrapAll(map$2(partNames, (pn) => ({ key: pn, value: baseUid + '-' + pn }))); + }; + const defaultUidsSchema = (partTypes) => field$1('partUids', 'partUids', mergeWithThunk((spec) => defaultUids(spec.uid, partTypes)), anyValue()); + + var AlloyParts = /*#__PURE__*/Object.freeze({ + __proto__: null, + generate: generate$5, + generateOne: generateOne$1, + schemas: schemas, + names: names, + substitutes: substitutes, + components: components$1, + defaultUids: defaultUids, + defaultUidsSchema: defaultUidsSchema, + getAllParts: getAllParts, + getAllPartNames: getAllPartNames, + getPart: getPart, + getPartOrDie: getPartOrDie, + getParts: getParts, + getPartsOrDie: getPartsOrDie + }); + + const allAlignments = [ + 'valignCentre', + 'alignLeft', + 'alignRight', + 'alignCentre', + 'top', + 'bottom', + 'left', + 'right', + 'inset' + ]; + const nu$6 = (xOffset, yOffset, classes, insetModifier = 1) => { + const insetXOffset = xOffset * insetModifier; + const insetYOffset = yOffset * insetModifier; + const getClasses = (prop) => get$h(classes, prop).getOr([]); + const make = (xDelta, yDelta, alignmentsOn) => { + const alignmentsOff = difference(allAlignments, alignmentsOn); + return { + offset: SugarPosition(xDelta, yDelta), + classesOn: bind$3(alignmentsOn, getClasses), + classesOff: bind$3(alignmentsOff, getClasses) + }; + }; + return { + southeast: () => make(-xOffset, yOffset, ['top', 'alignLeft']), + southwest: () => make(xOffset, yOffset, ['top', 'alignRight']), + south: () => make(-xOffset / 2, yOffset, ['top', 'alignCentre']), + northeast: () => make(-xOffset, -yOffset, ['bottom', 'alignLeft']), + northwest: () => make(xOffset, -yOffset, ['bottom', 'alignRight']), + north: () => make(-xOffset / 2, -yOffset, ['bottom', 'alignCentre']), + east: () => make(xOffset, -yOffset / 2, ['valignCentre', 'left']), + west: () => make(-xOffset, -yOffset / 2, ['valignCentre', 'right']), + insetNortheast: () => make(insetXOffset, insetYOffset, ['top', 'alignLeft', 'inset']), + insetNorthwest: () => make(-insetXOffset, insetYOffset, ['top', 'alignRight', 'inset']), + insetNorth: () => make(-insetXOffset / 2, insetYOffset, ['top', 'alignCentre', 'inset']), + insetSoutheast: () => make(insetXOffset, -insetYOffset, ['bottom', 'alignLeft', 'inset']), + insetSouthwest: () => make(-insetXOffset, -insetYOffset, ['bottom', 'alignRight', 'inset']), + insetSouth: () => make(-insetXOffset / 2, -insetYOffset, ['bottom', 'alignCentre', 'inset']), + insetEast: () => make(-insetXOffset, -insetYOffset / 2, ['valignCentre', 'right', 'inset']), + insetWest: () => make(insetXOffset, -insetYOffset / 2, ['valignCentre', 'left', 'inset']) + }; + }; + const fallback = () => nu$6(0, 0, {}); + + const nu$5 = (x, y, bubble, direction, placement, boundsRestriction, labelPrefix, alwaysFit = false) => ({ + x, + y, + bubble, + direction, + placement, + restriction: boundsRestriction, + label: `${labelPrefix}-${placement}`, + alwaysFit + }); + + const adt$5 = Adt.generate([ + { southeast: [] }, + { southwest: [] }, + { northeast: [] }, + { northwest: [] }, + { south: [] }, + { north: [] }, + { east: [] }, + { west: [] } + ]); + const cata$1 = (subject, southeast, southwest, northeast, northwest, south, north, east, west) => subject.fold(southeast, southwest, northeast, northwest, south, north, east, west); + const cataVertical = (subject, south, middle, north) => subject.fold(south, south, north, north, south, north, middle, middle); + const cataHorizontal = (subject, east, middle, west) => subject.fold(east, west, east, west, middle, middle, east, west); + // TODO: Simplify with the typescript approach. + const southeast$3 = adt$5.southeast; + const southwest$3 = adt$5.southwest; + const northeast$3 = adt$5.northeast; + const northwest$3 = adt$5.northwest; + const south$3 = adt$5.south; + const north$3 = adt$5.north; + const east$3 = adt$5.east; + const west$3 = adt$5.west; + + const getRestriction = (anchor, restriction) => { + switch (restriction) { + case 1 /* AnchorBoxBounds.LeftEdge */: + return anchor.x; + case 0 /* AnchorBoxBounds.RightEdge */: + return anchor.x + anchor.width; + case 2 /* AnchorBoxBounds.TopEdge */: + return anchor.y; + case 3 /* AnchorBoxBounds.BottomEdge */: + return anchor.y + anchor.height; + } + }; + const boundsRestriction = (anchor, restrictions) => mapToObject(['left', 'right', 'top', 'bottom'], (dir) => get$h(restrictions, dir).map((restriction) => getRestriction(anchor, restriction))); + const adjustBounds = (bounds$1, restriction, bubbleOffset) => { + const applyRestriction = (dir, current) => restriction[dir].map((pos) => { + const isVerticalAxis = dir === 'top' || dir === 'bottom'; + const offset = isVerticalAxis ? bubbleOffset.top : bubbleOffset.left; + const comparator = dir === 'left' || dir === 'top' ? Math.max : Math.min; + const newPos = comparator(pos, current) + offset; + // Ensure the new restricted position is within the current bounds + return isVerticalAxis ? clamp(newPos, bounds$1.y, bounds$1.bottom) : clamp(newPos, bounds$1.x, bounds$1.right); + }).getOr(current); + const adjustedLeft = applyRestriction('left', bounds$1.x); + const adjustedTop = applyRestriction('top', bounds$1.y); + const adjustedRight = applyRestriction('right', bounds$1.right); + const adjustedBottom = applyRestriction('bottom', bounds$1.bottom); + return bounds(adjustedLeft, adjustedTop, adjustedRight - adjustedLeft, adjustedBottom - adjustedTop); + }; + + /* + Layout for menus and inline context dialogs; + Either above or below. Never left or right. + Aligned to the left or right of the anchor as appropriate. + */ + const labelPrefix$2 = 'layout'; + // display element to the right, left edge against the anchor + const eastX$1 = (anchor) => anchor.x; + // element centre aligned horizontally with the anchor + const middleX$1 = (anchor, element) => anchor.x + (anchor.width / 2) - (element.width / 2); + // display element to the left, right edge against the right of the anchor + const westX$1 = (anchor, element) => anchor.x + anchor.width - element.width; + // display element above, bottom edge against the top of the anchor + const northY$2 = (anchor, element) => anchor.y - element.height; + // display element below, top edge against the bottom of the anchor + const southY$2 = (anchor) => anchor.y + anchor.height; + // display element below, top edge against the bottom of the anchor + const centreY$1 = (anchor, element) => anchor.y + (anchor.height / 2) - (element.height / 2); + const eastEdgeX$1 = (anchor) => anchor.x + anchor.width; + const westEdgeX$1 = (anchor, element) => anchor.x - element.width; + const southeast$2 = (anchor, element, bubbles) => nu$5(eastX$1(anchor), southY$2(anchor), bubbles.southeast(), southeast$3(), "southeast" /* Placement.Southeast */, boundsRestriction(anchor, { left: 1 /* AnchorBoxBounds.LeftEdge */, top: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$2); + const southwest$2 = (anchor, element, bubbles) => nu$5(westX$1(anchor, element), southY$2(anchor), bubbles.southwest(), southwest$3(), "southwest" /* Placement.Southwest */, boundsRestriction(anchor, { right: 0 /* AnchorBoxBounds.RightEdge */, top: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$2); + const northeast$2 = (anchor, element, bubbles) => nu$5(eastX$1(anchor), northY$2(anchor, element), bubbles.northeast(), northeast$3(), "northeast" /* Placement.Northeast */, boundsRestriction(anchor, { left: 1 /* AnchorBoxBounds.LeftEdge */, bottom: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$2); + const northwest$2 = (anchor, element, bubbles) => nu$5(westX$1(anchor, element), northY$2(anchor, element), bubbles.northwest(), northwest$3(), "northwest" /* Placement.Northwest */, boundsRestriction(anchor, { right: 0 /* AnchorBoxBounds.RightEdge */, bottom: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$2); + const north$2 = (anchor, element, bubbles) => nu$5(middleX$1(anchor, element), northY$2(anchor, element), bubbles.north(), north$3(), "north" /* Placement.North */, boundsRestriction(anchor, { bottom: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$2); + const south$2 = (anchor, element, bubbles) => nu$5(middleX$1(anchor, element), southY$2(anchor), bubbles.south(), south$3(), "south" /* Placement.South */, boundsRestriction(anchor, { top: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$2); + const east$2 = (anchor, element, bubbles) => nu$5(eastEdgeX$1(anchor), centreY$1(anchor, element), bubbles.east(), east$3(), "east" /* Placement.East */, boundsRestriction(anchor, { left: 0 /* AnchorBoxBounds.RightEdge */ }), labelPrefix$2); + const west$2 = (anchor, element, bubbles) => nu$5(westEdgeX$1(anchor, element), centreY$1(anchor, element), bubbles.west(), west$3(), "west" /* Placement.West */, boundsRestriction(anchor, { right: 1 /* AnchorBoxBounds.LeftEdge */ }), labelPrefix$2); + const all$2 = () => [southeast$2, southwest$2, northeast$2, northwest$2, south$2, north$2, east$2, west$2]; + const allRtl$1 = () => [southwest$2, southeast$2, northwest$2, northeast$2, south$2, north$2, east$2, west$2]; + const aboveOrBelow = () => [northeast$2, northwest$2, southeast$2, southwest$2, north$2, south$2]; + const aboveOrBelowRtl = () => [northwest$2, northeast$2, southwest$2, southeast$2, north$2, south$2]; + const belowOrAbove = () => [southeast$2, southwest$2, northeast$2, northwest$2, south$2, north$2]; + const belowOrAboveRtl = () => [southwest$2, southeast$2, northwest$2, northeast$2, south$2, north$2]; + + const placementAttribute = 'data-alloy-placement'; + const setPlacement$1 = (element, placement) => { + set$9(element, placementAttribute, placement); + }; + const getPlacement = (element) => getOpt(element, placementAttribute); + const reset$2 = (element) => remove$8(element, placementAttribute); + + /* + Layouts for things that overlay over the anchor element/box. These are designed to mirror + the `Layout` logic. + + As an example `Layout.north` will appear horizontally centered above the anchor, whereas + `LayoutInset.north` will appear horizontally centered overlapping the top of the anchor. + */ + const labelPrefix$1 = 'layout-inset'; + // returns left edge of anchor - used to display element to the left, left edge against the anchor + const westEdgeX = (anchor) => anchor.x; + // returns middle of anchor minus half the element width - used to horizontally centre element to the anchor + const middleX = (anchor, element) => anchor.x + (anchor.width / 2) - (element.width / 2); + // returns right edge of anchor minus element width - used to display element to the right, right edge against the anchor + const eastEdgeX = (anchor, element) => anchor.x + anchor.width - element.width; + // returns top edge - used to display element to the top, top edge against the anchor + const northY$1 = (anchor) => anchor.y; + // returns bottom edge minus element height - used to display element at the bottom, bottom edge against the anchor + const southY$1 = (anchor, element) => anchor.y + anchor.height - element.height; + // returns centre of anchor minus half the element height - used to vertically centre element to the anchor + const centreY = (anchor, element) => anchor.y + (anchor.height / 2) - (element.height / 2); + // positions element relative to the bottom right of the anchor + const southwest$1 = (anchor, element, bubbles) => nu$5(eastEdgeX(anchor, element), southY$1(anchor, element), bubbles.insetSouthwest(), northwest$3(), "southwest" /* Placement.Southwest */, boundsRestriction(anchor, { right: 0 /* AnchorBoxBounds.RightEdge */, bottom: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$1); + // positions element relative to the bottom left of the anchor + const southeast$1 = (anchor, element, bubbles) => nu$5(westEdgeX(anchor), southY$1(anchor, element), bubbles.insetSoutheast(), northeast$3(), "southeast" /* Placement.Southeast */, boundsRestriction(anchor, { left: 1 /* AnchorBoxBounds.LeftEdge */, bottom: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$1); + // positions element relative to the top right of the anchor + const northwest$1 = (anchor, element, bubbles) => nu$5(eastEdgeX(anchor, element), northY$1(anchor), bubbles.insetNorthwest(), southwest$3(), "northwest" /* Placement.Northwest */, boundsRestriction(anchor, { right: 0 /* AnchorBoxBounds.RightEdge */, top: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$1); + // positions element relative to the top left of the anchor + const northeast$1 = (anchor, element, bubbles) => nu$5(westEdgeX(anchor), northY$1(anchor), bubbles.insetNortheast(), southeast$3(), "northeast" /* Placement.Northeast */, boundsRestriction(anchor, { left: 1 /* AnchorBoxBounds.LeftEdge */, top: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$1); + // positions element relative to the top of the anchor, horizontally centered + const north$1 = (anchor, element, bubbles) => nu$5(middleX(anchor, element), northY$1(anchor), bubbles.insetNorth(), south$3(), "north" /* Placement.North */, boundsRestriction(anchor, { top: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix$1); + // positions element relative to the bottom of the anchor, horizontally centered + const south$1 = (anchor, element, bubbles) => nu$5(middleX(anchor, element), southY$1(anchor, element), bubbles.insetSouth(), north$3(), "south" /* Placement.South */, boundsRestriction(anchor, { bottom: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix$1); + // positions element with the right edge against the anchor, vertically centered + const east$1 = (anchor, element, bubbles) => nu$5(eastEdgeX(anchor, element), centreY(anchor, element), bubbles.insetEast(), west$3(), "east" /* Placement.East */, boundsRestriction(anchor, { right: 0 /* AnchorBoxBounds.RightEdge */ }), labelPrefix$1); + // positions element with the left each against the anchor, vertically centered + const west$1 = (anchor, element, bubbles) => nu$5(westEdgeX(anchor), centreY(anchor, element), bubbles.insetWest(), east$3(), "west" /* Placement.West */, boundsRestriction(anchor, { left: 1 /* AnchorBoxBounds.LeftEdge */ }), labelPrefix$1); + const lookupPreserveLayout = (lastPlacement) => { + switch (lastPlacement) { + case "north" /* Placement.North */: + return north$1; + case "northeast" /* Placement.Northeast */: + return northeast$1; + case "northwest" /* Placement.Northwest */: + return northwest$1; + case "south" /* Placement.South */: + return south$1; + case "southeast" /* Placement.Southeast */: + return southeast$1; + case "southwest" /* Placement.Southwest */: + return southwest$1; + case "east" /* Placement.East */: + return east$1; + case "west" /* Placement.West */: + return west$1; + } + }; + const preserve$1 = (anchor, element, bubbles, placee, bounds) => { + const layout = getPlacement(placee).map(lookupPreserveLayout).getOr(north$1); + return layout(anchor, element, bubbles, placee, bounds); + }; + const lookupFlippedLayout = (lastPlacement) => { + switch (lastPlacement) { + case "north" /* Placement.North */: + return south$1; + case "northeast" /* Placement.Northeast */: + return southeast$1; + case "northwest" /* Placement.Northwest */: + return southwest$1; + case "south" /* Placement.South */: + return north$1; + case "southeast" /* Placement.Southeast */: + return northeast$1; + case "southwest" /* Placement.Southwest */: + return northwest$1; + case "east" /* Placement.East */: + return west$1; + case "west" /* Placement.West */: + return east$1; + } + }; + const flip = (anchor, element, bubbles, placee, bounds) => { + const layout = getPlacement(placee).map(lookupFlippedLayout).getOr(north$1); + return layout(anchor, element, bubbles, placee, bounds); + }; + + // applies the max-height as determined by Bounder + const setMaxHeight = (element, maxHeight) => { + setMax$1(element, Math.floor(maxHeight)); + }; + // adds both max-height and overflow to constrain it + const anchored = constant$1((element, available) => { + setMaxHeight(element, available); + setAll(element, { + 'overflow-x': 'hidden', + 'overflow-y': 'auto' + }); + }); + /* + * This adds max height, but not overflow - the effect of this is that elements can grow beyond the max height, + * but if they run off the top they're pushed down. + * + * If the element expands below the screen height it will be cut off, but we were already doing that. + */ + const expandable$1 = constant$1((element, available) => { + setMaxHeight(element, available); + }); + + // applies the max-width as determined by Bounder + const expandable = constant$1((element, available) => { + setMax(element, Math.floor(available)); + }); + + var AttributeValue; + (function (AttributeValue) { + AttributeValue["TopToBottom"] = "toptobottom"; + AttributeValue["BottomToTop"] = "bottomtotop"; + })(AttributeValue || (AttributeValue = {})); + const Attribute = 'data-alloy-vertical-dir'; + const isBottomToTopDir = (el) => closest$2(el, (current) => isElement$1(current) && get$g(current, 'data-alloy-vertical-dir') === AttributeValue.BottomToTop); + + var HighlightOnOpen; + (function (HighlightOnOpen) { + HighlightOnOpen[HighlightOnOpen["HighlightMenuAndItem"] = 0] = "HighlightMenuAndItem"; + HighlightOnOpen[HighlightOnOpen["HighlightJustMenu"] = 1] = "HighlightJustMenu"; + HighlightOnOpen[HighlightOnOpen["HighlightNone"] = 2] = "HighlightNone"; + })(HighlightOnOpen || (HighlightOnOpen = {})); + + const NoState = { + init: () => nu$4({ + readState: constant$1('No State required') + }) + }; + const nu$4 = (spec) => spec; + + const defaultEventHandler = { + can: always, + abort: never, + run: noop + }; + const nu$3 = (parts) => { + if (!hasNonNullableKey(parts, 'can') && !hasNonNullableKey(parts, 'abort') && !hasNonNullableKey(parts, 'run')) { + throw new Error('EventHandler defined by: ' + JSON.stringify(parts, null, 2) + ' does not have can, abort, or run!'); + } + return { + ...defaultEventHandler, + ...parts + }; + }; + const all$1 = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc && f(handler).apply(undefined, args), true); + const any = (handlers, f) => (...args) => foldl(handlers, (acc, handler) => acc || f(handler).apply(undefined, args), false); + const read$1 = (handler) => isFunction(handler) ? { + can: always, + abort: never, + run: handler + } : handler; + const fuse$1 = (handlers) => { + const can = all$1(handlers, (handler) => handler.can); + const abort = any(handlers, (handler) => handler.abort); + const run = (...args) => { + each$1(handlers, (handler) => { + // ASSUMPTION: Return value is unimportant. + handler.run.apply(undefined, args); + }); + }; + return { + can, + abort, + run + }; + }; + + const emit = (component, event) => { + dispatchWith(component, component.element, event, {}); + }; + const emitWith = (component, event, properties) => { + dispatchWith(component, component.element, event, properties); + }; + const emitExecute = (component) => { + emit(component, execute$5()); + }; + const dispatch = (component, target, event) => { + dispatchWith(component, target, event, {}); + }; + const dispatchWith = (component, target, event, properties) => { + // NOTE: The order of spreading here means that it will maintain any target that + // exists in the current properties. Because this function has been used for situations where + // properties is either an emulated SugarEvent with no target (see TouchEvent) or + // for emitting custom events that have no target, this likely hasn't been a problem. + // But until we verify that nothing is relying on this ordering, there is an alternate + // function below called retargetAndDispatchWith, which spreads in the other direction. + const data = { + target, + ...properties + }; + component.getSystem().triggerEvent(event, target, data); + }; + const retargetAndDispatchWith = (component, target, eventName, properties) => { + // This is essentially the same as dispatchWith, except the spreading order + // means that it clobbers anything in the nativeEvent with "target". It also + // expects what is being passed in to be a real sugar event, not just a data + // blob + const data = { + ...properties, + target + }; + component.getSystem().triggerEvent(eventName, target, data); + }; + const dispatchEvent = (component, target, event, simulatedEvent) => { + component.getSystem().triggerEvent(event, target, simulatedEvent.event); + }; + + const derive$2 = (configs) => wrapAll(configs); + // const combine = (configs...); + const abort = (name, predicate) => { + return { + key: name, + value: nu$3({ + abort: predicate + }) + }; + }; + const can = (name, predicate) => { + return { + key: name, + value: nu$3({ + can: predicate + }) + }; + }; + const preventDefault = (name) => { + return { + key: name, + value: nu$3({ + run: (component, simulatedEvent) => { + simulatedEvent.event.prevent(); + } + }) + }; + }; + const run$1 = (name, handler) => { + return { + key: name, + value: nu$3({ + run: handler + }) + }; + }; + // Extra can be used when your handler needs more context, and is declared in one spot + // It's really just convenient partial application. + const runActionExtra = (name, action, extra) => { + return { + key: name, + value: nu$3({ + run: (component, simulatedEvent) => { + action.apply(undefined, [component, simulatedEvent].concat(extra)); + } + }) + }; + }; + const runOnName = (name) => { + return (handler) => run$1(name, handler); + }; + const runOnSourceName = (name) => { + return (handler) => ({ + key: name, + value: nu$3({ + run: (component, simulatedEvent) => { + if (isSource(component, simulatedEvent)) { + handler(component, simulatedEvent); + } + } + }) + }); + }; + const redirectToUid = (name, uid) => { + return run$1(name, (component, simulatedEvent) => { + component.getSystem().getByUid(uid).each((redirectee) => { + dispatchEvent(redirectee, redirectee.element, name, simulatedEvent); + }); + }); + }; + const redirectToPart = (name, detail, partName) => { + const uid = detail.partUids[partName]; + return redirectToUid(name, uid); + }; + const runWithTarget = (name, f) => { + return run$1(name, (component, simulatedEvent) => { + const ev = simulatedEvent.event; + const target = component.getSystem().getByDom(ev.target).getOrThunk( + // If we don't find an alloy component for the target, I guess we go up the tree + // until we find an alloy component? Performance concern? + // TODO: Write tests for this. + () => { + const closest$1 = closest(ev.target, (el) => component.getSystem().getByDom(el).toOptional(), never); + // If we still found nothing ... fire on component itself; + return closest$1.getOr(component); + }); + f(component, target, simulatedEvent); + }); + }; + const cutter = (name) => { + return run$1(name, (component, simulatedEvent) => { + simulatedEvent.cut(); + }); + }; + const stopper = (name) => { + return run$1(name, (component, simulatedEvent) => { + simulatedEvent.stop(); + }); + }; + const runOnSource = (name, f) => { + return runOnSourceName(name)(f); + }; + const runOnAttached = runOnSourceName(attachedToDom()); + const runOnDetached = runOnSourceName(detachedFromDom()); + const runOnInit = runOnSourceName(systemInit()); + const runOnExecute$1 = runOnName(execute$5()); + + // Maybe we'll need to allow add/remove + const nu$2 = (s) => ({ + classes: isUndefined(s.classes) ? [] : s.classes, + attributes: isUndefined(s.attributes) ? {} : s.attributes, + styles: isUndefined(s.styles) ? {} : s.styles + }); + const merge = (defnA, mod) => ({ + ...defnA, + attributes: { ...defnA.attributes, ...mod.attributes }, + styles: { ...defnA.styles, ...mod.styles }, + classes: defnA.classes.concat(mod.classes) + }); + + const executeEvent = (bConfig, bState, executor) => runOnExecute$1((component) => { + executor(component, bConfig, bState); + }); + const loadEvent = (bConfig, bState, f) => runOnInit((component, _simulatedEvent) => { + f(component, bConfig, bState); + }); + const create$4 = (schema, name, active, apis, extra, state) => { + const configSchema = objOfOnly(schema); + const schemaSchema = optionObjOf(name, [ + optionObjOfOnly('config', schema) + ]); + return doCreate(configSchema, schemaSchema, name, active, apis, extra, state); + }; + const createModes$1 = (modes, name, active, apis, extra, state) => { + const configSchema = modes; + const schemaSchema = optionObjOf(name, [ + optionOf('config', modes) + ]); + return doCreate(configSchema, schemaSchema, name, active, apis, extra, state); + }; + const wrapApi = (bName, apiFunction, apiName) => { + const f = (component, ...rest) => { + const args = [component].concat(rest); + return component.config({ + name: constant$1(bName) + }).fold(() => { + throw new Error('We could not find any behaviour configuration for: ' + bName + '. Using API: ' + apiName); + }, (info) => { + const rest = Array.prototype.slice.call(args, 1); + return apiFunction.apply(undefined, [component, info.config, info.state].concat(rest)); + }); + }; + return markAsBehaviourApi(f, apiName, apiFunction); + }; + // I think the "revoke" idea is fragile at best. + const revokeBehaviour = (name) => ({ + key: name, + value: undefined + }); + const doCreate = (configSchema, schemaSchema, name, active, apis, extra, state) => { + const getConfig = (info) => hasNonNullableKey(info, name) ? info[name]() : Optional.none(); + const wrappedApis = map$1(apis, (apiF, apiName) => wrapApi(name, apiF, apiName)); + const wrappedExtra = map$1(extra, (extraF, extraName) => markAsExtraApi(extraF, extraName)); + const me = { + ...wrappedExtra, + ...wrappedApis, + revoke: curry(revokeBehaviour, name), + config: (spec) => { + const prepared = asRawOrDie$1(name + '-config', configSchema, spec); + return { + key: name, + value: { + config: prepared, + me, + configAsRaw: cached(() => asRawOrDie$1(name + '-config', configSchema, spec)), + initialConfig: spec, + state + } + }; + }, + schema: constant$1(schemaSchema), + exhibit: (info, base) => { + return lift2(getConfig(info), get$h(active, 'exhibit'), (behaviourInfo, exhibitor) => { + return exhibitor(base, behaviourInfo.config, behaviourInfo.state); + }).getOrThunk(() => nu$2({})); + }, + name: constant$1(name), + handlers: (info) => { + return getConfig(info).map((behaviourInfo) => { + const getEvents = get$h(active, 'events').getOr(() => ({})); + return getEvents(behaviourInfo.config, behaviourInfo.state); + }).getOr({}); + } + }; + return me; + }; + + const derive$1 = (capabilities) => wrapAll(capabilities); + const simpleSchema = objOfOnly([ + required$1('fields'), + required$1('name'), + defaulted('active', {}), + defaulted('apis', {}), + defaulted('state', NoState), + defaulted('extra', {}) + ]); + const create$3 = (data) => { + const value = asRawOrDie$1('Creating behaviour: ' + data.name, simpleSchema, data); + return create$4(value.fields, value.name, value.active, value.apis, value.extra, value.state); + }; + const modeSchema = objOfOnly([ + required$1('branchKey'), + required$1('branches'), + required$1('name'), + defaulted('active', {}), + defaulted('apis', {}), + defaulted('state', NoState), + defaulted('extra', {}) + ]); + const createModes = (data) => { + const value = asRawOrDie$1('Creating behaviour: ' + data.name, modeSchema, data); + return createModes$1(choose$1(value.branchKey, value.branches), value.name, value.active, value.apis, value.extra, value.state); + }; + const revoke = constant$1(undefined); + + // AlloyEventKeyAndHandler type argument needs to be any here to satisfy an array of handlers + // where each item can be any subtype of EventFormat we can't use since + // then each item would have to be the same type + const events$i = (name, eventHandlers) => { + const events = derive$2(eventHandlers); + return create$3({ + fields: [ + required$1('enabled') + ], + name, + active: { + events: constant$1(events) + } + }); + }; + const config = (name, eventHandlers) => { + const me = events$i(name, eventHandlers); + return { + key: name, + value: { + config: {}, + me, + configAsRaw: constant$1({}), + initialConfig: {}, + state: NoState + } + }; + }; + + const SetupBehaviourCellState = (initialState) => { + const init = () => { + const cell = Cell(initialState); + const get = () => cell.get(); + const set = (newState) => cell.set(newState); + const clear = () => cell.set(initialState); + const readState = () => cell.get(); + return { + get, + set, + clear, + readState + }; + }; + return { + init + }; + }; + + const focus$2 = (component, focusConfig) => { + if (!focusConfig.ignore) { + focus$4(component.element); + focusConfig.onFocus(component); + } + }; + const blur = (component, focusConfig) => { + if (!focusConfig.ignore) { + blur$1(component.element); + } + }; + const isFocused = (component) => hasFocus(component.element); + + var FocusApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + focus: focus$2, + blur: blur, + isFocused: isFocused + }); + + // TODO: DomModification types + const exhibit$6 = (base, focusConfig) => { + const mod = focusConfig.ignore ? {} : { + attributes: { + tabindex: '-1' + } + }; + return nu$2(mod); + }; + const events$h = (focusConfig) => derive$2([ + run$1(focus$3(), (component, simulatedEvent) => { + focus$2(component, focusConfig); + simulatedEvent.stop(); + }) + ].concat(focusConfig.stopMousedown ? [ + run$1(mousedown(), (_, simulatedEvent) => { + // This setting is often used in tandem with ignoreFocus. Basically, if you + // don't prevent default on a menu that has fake focus, then it can transfer + // focus to the outer body when they click on it, which can break things + // which dismiss on blur (e.g. typeahead) + simulatedEvent.event.prevent(); + }) + ] : [])); + + var ActiveFocus = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$6, + events: events$h + }); + + var FocusSchema = [ + // TODO: Work out when we want to call this. Only when it is has changed? + onHandler('onFocus'), + defaulted('stopMousedown', false), + defaulted('ignore', false) + ]; + + const Focusing = create$3({ + fields: FocusSchema, + name: 'focusing', + active: ActiveFocus, + apis: FocusApis + // Consider adding isFocused an an extra + }); + + const BACKSPACE = [8]; + const TAB = [9]; + const ENTER = [13]; + const ESCAPE = [27]; + const SPACE = [32]; + const LEFT = [37]; + const UP = [38]; + const RIGHT = [39]; + const DOWN = [40]; + + const closeTooltips = constant$1('tooltipping.close.all'); + const dismissPopups = constant$1('dismiss.popups'); + const repositionPopups = constant$1('reposition.popups'); + const mouseReleased = constant$1('mouse.released'); + + const cyclePrev = (values, index, predicate) => { + const before = reverse(values.slice(0, index)); + const after = reverse(values.slice(index + 1)); + return find$5(before.concat(after), predicate); + }; + const tryPrev = (values, index, predicate) => { + const before = reverse(values.slice(0, index)); + return find$5(before, predicate); + }; + const cycleNext = (values, index, predicate) => { + const before = values.slice(0, index); + const after = values.slice(index + 1); + return find$5(after.concat(before), predicate); + }; + const tryNext = (values, index, predicate) => { + const after = values.slice(index + 1); + return find$5(after, predicate); + }; + + const inSet = (keys) => (event) => { + const raw = event.raw; + return contains$2(keys, raw.which); + }; + const and = (preds) => (event) => forall(preds, (pred) => pred(event)); + const isShift$1 = (event) => { + const raw = event.raw; + return raw.shiftKey === true; + }; + const isControl = (event) => { + const raw = event.raw; + return raw.ctrlKey === true; + }; + const isNotShift = not(isShift$1); + + const rule = (matches, action) => ({ + matches, + classification: action + }); + const choose = (transitions, event) => { + const transition = find$5(transitions, (t) => t.matches(event)); + return transition.map((t) => t.classification); + }; + + // THIS IS NOT API YET + const dehighlightAllExcept = (component, hConfig, hState, skip) => { + const highlighted = descendants(component.element, '.' + hConfig.highlightClass); + each$1(highlighted, (h) => { + // We don't want to dehighlight anything that should be skipped. + // Generally, this is because we are about to highlight that thing. + const shouldSkip = exists(skip, (skipComp) => eq(skipComp.element, h)); + if (!shouldSkip) { + remove$3(h, hConfig.highlightClass); + component.getSystem().getByDom(h).each((target) => { + hConfig.onDehighlight(component, target); + emit(target, dehighlight$1()); + }); + } + }); + }; + const dehighlightAll = (component, hConfig, hState) => dehighlightAllExcept(component, hConfig, hState, []); + const dehighlight = (component, hConfig, hState, target) => { + // Only act if it was highlighted. + if (isHighlighted(component, hConfig, hState, target)) { + remove$3(target.element, hConfig.highlightClass); + hConfig.onDehighlight(component, target); + emit(target, dehighlight$1()); + } + }; + const highlight = (component, hConfig, hState, target) => { + // If asked to highlight something, dehighlight everything else first except + // for the new thing we are going to highlight. It's a rare case, but we don't + // want to get an onDehighlight, onHighlight for the same item on a highlight call. + // We also don't want to call onHighlight if it was already highlighted. + // + // Note, that there is an important distinction here: highlight is NOT a no-op + // if target is already highlighted, because it will still dehighlight everything else. + // However, it won't fire any onHighlight or onDehighlight handlers for the already + // highlighted item. I'm not sure if this is behaviour we need to maintain, but it is now + // tested. A simpler approach might just be to not do anything if it's already highlighted, + // but that could leave us in an inconsistent state, where multiple items have highlights + // even after a highlight call. This way, highlight validates the highlights in the + // component, and ensures there is only one thing highlighted. + dehighlightAllExcept(component, hConfig, hState, [target]); + if (!isHighlighted(component, hConfig, hState, target)) { + add$2(target.element, hConfig.highlightClass); + hConfig.onHighlight(component, target); + emit(target, highlight$1()); + } + }; + const highlightFirst = (component, hConfig, hState) => { + getFirst(component, hConfig).each((firstComp) => { + highlight(component, hConfig, hState, firstComp); + }); + }; + const highlightLast = (component, hConfig, hState) => { + getLast(component, hConfig).each((lastComp) => { + highlight(component, hConfig, hState, lastComp); + }); + }; + const highlightAt = (component, hConfig, hState, index) => { + getByIndex(component, hConfig, hState, index).fold((err) => { + throw err; + }, (firstComp) => { + highlight(component, hConfig, hState, firstComp); + }); + }; + const highlightBy = (component, hConfig, hState, predicate) => { + const candidates = getCandidates(component, hConfig); + const targetComp = find$5(candidates, predicate); + targetComp.each((c) => { + highlight(component, hConfig, hState, c); + }); + }; + const isHighlighted = (component, hConfig, hState, queryTarget) => has(queryTarget.element, hConfig.highlightClass); + const getHighlighted = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.highlightClass).bind((e) => component.getSystem().getByDom(e).toOptional()); + const getByIndex = (component, hConfig, hState, index) => { + const items = descendants(component.element, '.' + hConfig.itemClass); + return Optional.from(items[index]).fold(() => Result.error(new Error('No element found with index ' + index)), component.getSystem().getByDom); + }; + const getFirst = (component, hConfig, _hState) => descendant(component.element, '.' + hConfig.itemClass).bind((e) => component.getSystem().getByDom(e).toOptional()); + const getLast = (component, hConfig, _hState) => { + const items = descendants(component.element, '.' + hConfig.itemClass); + const last = items.length > 0 ? Optional.some(items[items.length - 1]) : Optional.none(); + return last.bind((c) => component.getSystem().getByDom(c).toOptional()); + }; + const getDelta$2 = (component, hConfig, hState, delta) => { + const items = descendants(component.element, '.' + hConfig.itemClass); + const current = findIndex$1(items, (item) => has(item, hConfig.highlightClass)); + return current.bind((selected) => { + const dest = cycleBy(selected, delta, 0, items.length - 1); + return component.getSystem().getByDom(items[dest]).toOptional(); + }); + }; + const getPrevious = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, -1); + const getNext = (component, hConfig, hState) => getDelta$2(component, hConfig, hState, +1); + const getCandidates = (component, hConfig, _hState) => { + const items = descendants(component.element, '.' + hConfig.itemClass); + return cat(map$2(items, (i) => component.getSystem().getByDom(i).toOptional())); + }; + + var HighlightApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + dehighlightAll: dehighlightAll, + dehighlight: dehighlight, + highlight: highlight, + highlightFirst: highlightFirst, + highlightLast: highlightLast, + highlightAt: highlightAt, + highlightBy: highlightBy, + isHighlighted: isHighlighted, + getHighlighted: getHighlighted, + getFirst: getFirst, + getLast: getLast, + getPrevious: getPrevious, + getNext: getNext, + getCandidates: getCandidates + }); + + var HighlightSchema = [ + required$1('highlightClass'), + required$1('itemClass'), + onHandler('onHighlight'), + onHandler('onDehighlight') + ]; + + const Highlighting = create$3({ + fields: HighlightSchema, + name: 'highlighting', + apis: HighlightApis + }); + + const reportFocusShifting = (component, prevFocus, newFocus) => { + const noChange = prevFocus.exists((p) => newFocus.exists((n) => eq(n, p))); + if (!noChange) { + emitWith(component, focusShifted(), { + prevFocus, + newFocus + }); + } + }; + const dom$2 = () => { + const get = (component) => search(component.element); + const set = (component, focusee) => { + const prevFocus = get(component); + component.getSystem().triggerFocus(focusee, component.element); + const newFocus = get(component); + reportFocusShifting(component, prevFocus, newFocus); + }; + return { + get, + set + }; + }; + const highlights = () => { + const get = (component) => Highlighting.getHighlighted(component).map((item) => item.element); + const set = (component, element) => { + const prevFocus = get(component); + component.getSystem().getByDom(element).fold(noop, (item) => { + Highlighting.highlight(component, item); + }); + const newFocus = get(component); + reportFocusShifting(component, prevFocus, newFocus); + }; + return { + get, + set + }; + }; + + const typical = (infoSchema, stateInit, getKeydownRules, getKeyupRules, optFocusIn) => { + const schema = () => infoSchema.concat([ + defaulted('focusManager', dom$2()), + defaultedOf('focusInside', 'onFocus', valueOf((val) => contains$2(['onFocus', 'onEnterOrSpace', 'onApi'], val) ? Result.value(val) : Result.error('Invalid value for focusInside'))), + output$1('handler', me), + output$1('state', stateInit), + output$1('sendFocusIn', optFocusIn) + ]); + const processKey = (component, simulatedEvent, getRules, keyingConfig, keyingState) => { + const rules = getRules(component, simulatedEvent, keyingConfig, keyingState); + return choose(rules, simulatedEvent.event).bind((rule) => rule(component, simulatedEvent, keyingConfig, keyingState)); + }; + const toEvents = (keyingConfig, keyingState) => { + const onFocusHandler = keyingConfig.focusInside !== FocusInsideModes.OnFocusMode + ? Optional.none() + : optFocusIn(keyingConfig).map((focusIn) => run$1(focus$3(), (component, simulatedEvent) => { + focusIn(component, keyingConfig, keyingState); + simulatedEvent.stop(); + })); + // On enter or space on root element, if using EnterOrSpace focus mode, fire a focusIn on the component + const tryGoInsideComponent = (component, simulatedEvent) => { + const isEnterOrSpace = inSet(SPACE.concat(ENTER))(simulatedEvent.event); + if (keyingConfig.focusInside === FocusInsideModes.OnEnterOrSpaceMode && isEnterOrSpace && isSource(component, simulatedEvent)) { + optFocusIn(keyingConfig).each((focusIn) => { + focusIn(component, keyingConfig, keyingState); + simulatedEvent.stop(); + }); + } + }; + const keyboardEvents = [ + run$1(keydown(), (component, simulatedEvent) => { + processKey(component, simulatedEvent, getKeydownRules, keyingConfig, keyingState).fold(() => { + // Key wasn't handled ... so see if we should enter into the component (focusIn) + tryGoInsideComponent(component, simulatedEvent); + }, (_) => { + simulatedEvent.stop(); + }); + }), + run$1(keyup(), (component, simulatedEvent) => { + processKey(component, simulatedEvent, getKeyupRules, keyingConfig, keyingState).each((_) => { + simulatedEvent.stop(); + }); + }) + ]; + return derive$2(onFocusHandler.toArray().concat(keyboardEvents)); + }; + const me = { + schema, + processKey, + toEvents + }; + return me; + }; + + const create$2 = (cyclicField) => { + const schema = [ + option$3('onEscape'), + option$3('onEnter'), + defaulted('selector', '[data-alloy-tabstop="true"]:not(:disabled)'), + defaulted('firstTabstop', 0), + defaulted('useTabstopAt', always), + // Maybe later we should just expose isVisible + option$3('visibilitySelector') + ].concat([ + cyclicField + ]); + // TODO: Test this + const isVisible = (tabbingConfig, element) => { + const target = tabbingConfig.visibilitySelector + .bind((sel) => closest$3(element, sel)) + .getOr(element); + // NOTE: We can't use Visibility.isVisible, because the toolbar has width when it has closed, just not height. + return get$d(target) > 0; + }; + const findInitial = (component, tabbingConfig) => { + const tabstops = descendants(component.element, tabbingConfig.selector); + const visibles = filter$2(tabstops, (elem) => isVisible(tabbingConfig, elem)); + return Optional.from(visibles[tabbingConfig.firstTabstop]); + }; + const findCurrent = (component, tabbingConfig) => tabbingConfig.focusManager.get(component) + .bind((elem) => closest$3(elem, tabbingConfig.selector)); + const isTabstop = (tabbingConfig, element) => isVisible(tabbingConfig, element) && tabbingConfig.useTabstopAt(element); + // Fire an alloy focus on the first visible element that matches the selector + const focusIn = (component, tabbingConfig, _tabbingState) => { + findInitial(component, tabbingConfig).each((target) => { + tabbingConfig.focusManager.set(component, target); + }); + }; + const goFromTabstop = (component, tabstops, stopIndex, tabbingConfig, cycle) => cycle(tabstops, stopIndex, (elem) => isTabstop(tabbingConfig, elem)) + .fold( + // Even if there is only one, still capture the event if cycling + () => tabbingConfig.cyclic ? Optional.some(true) : Optional.none(), (target) => { + tabbingConfig.focusManager.set(component, target); + // Kill the event + return Optional.some(true); + }); + const go = (component, _simulatedEvent, tabbingConfig, cycle) => { + // 1. Find our current tabstop + // 2. Find the index of that tabstop + // 3. Cycle the tabstop + // 4. Fire alloy focus on the resultant tabstop + const tabstops = filter$2(descendants(component.element, tabbingConfig.selector), (element) => isVisible(tabbingConfig, element)); + return findCurrent(component, tabbingConfig).bind((tabstop) => { + // focused component + const optStopIndex = findIndex$1(tabstops, curry(eq, tabstop)); + return optStopIndex.bind((stopIndex) => goFromTabstop(component, tabstops, stopIndex, tabbingConfig, cycle)); + }); + }; + const goBackwards = (component, simulatedEvent, tabbingConfig) => { + const navigate = tabbingConfig.cyclic ? cyclePrev : tryPrev; + return go(component, simulatedEvent, tabbingConfig, navigate); + }; + const goForwards = (component, simulatedEvent, tabbingConfig) => { + const navigate = tabbingConfig.cyclic ? cycleNext : tryNext; + return go(component, simulatedEvent, tabbingConfig, navigate); + }; + const isFirstChild = (elem) => parentNode(elem).bind(firstChild).exists((child) => eq(child, elem)); + const goFromPseudoTabstop = (component, simulatedEvent, tabbingConfig) => findCurrent(component, tabbingConfig).filter((elem) => !tabbingConfig.useTabstopAt(elem)) + .bind((elem) => (isFirstChild(elem) ? goBackwards : goForwards)(component, simulatedEvent, tabbingConfig)); + const execute = (component, simulatedEvent, tabbingConfig) => tabbingConfig.onEnter.bind((f) => f(component, simulatedEvent)); + const exit = (component, simulatedEvent, tabbingConfig) => { + component.getSystem().broadcastOn([closeTooltips()], { + closedTooltip: () => { + simulatedEvent.stop(); + } + }); + if (!simulatedEvent.isStopped()) { + return tabbingConfig.onEscape.bind((f) => f(component, simulatedEvent)); + } + else { + return Optional.none(); + } + }; + const getKeydownRules = constant$1([ + rule(and([isShift$1, inSet(TAB)]), goBackwards), + rule(inSet(TAB), goForwards), + rule(and([isNotShift, inSet(ENTER)]), execute) + ]); + const getKeyupRules = constant$1([ + rule(inSet(ESCAPE), exit), + rule(inSet(TAB), goFromPseudoTabstop), + ]); + return typical(schema, NoState.init, getKeydownRules, getKeyupRules, () => Optional.some(focusIn)); + }; + + var AcyclicType = create$2(customField('cyclic', never)); + + var CyclicType = create$2(customField('cyclic', always)); + + const inside = (target) => ((isTag('input')(target) && get$g(target, 'type') !== 'radio') || + isTag('textarea')(target)); + + const doDefaultExecute = (component, _simulatedEvent, focused) => { + // Note, we use to pass through simulatedEvent here and make target: component. This simplification + // may be a problem + dispatch(component, focused, execute$5()); + return Optional.some(true); + }; + const defaultExecute = (component, simulatedEvent, focused) => { + const isComplex = inside(focused) && inSet(SPACE)(simulatedEvent.event); + return isComplex ? Optional.none() : doDefaultExecute(component, simulatedEvent, focused); + }; + // On Firefox, pressing space fires a click event if the element maintains focus and fires a keyup. This + // stops the keyup, which should stop the click. We might want to make this only work for buttons and Firefox etc, + // but at this stage it's cleaner to just always do it. It makes sense that Keying that handles space should handle + // keyup also. This does make the name confusing, though. + const stopEventForFirefox = (_component, _simulatedEvent) => Optional.some(true); + + const schema$y = [ + defaulted('execute', defaultExecute), + defaulted('useSpace', false), + defaulted('useEnter', true), + defaulted('useControlEnter', false), + defaulted('useDown', false) + ]; + const execute$4 = (component, simulatedEvent, executeConfig) => executeConfig.execute(component, simulatedEvent, component.element); + const getKeydownRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => { + const spaceExec = executeConfig.useSpace && !inside(component.element) ? SPACE : []; + const enterExec = executeConfig.useEnter ? ENTER : []; + const downExec = executeConfig.useDown ? DOWN : []; + const execKeys = spaceExec.concat(enterExec).concat(downExec); + return [ + rule(inSet(execKeys), execute$4) + ].concat(executeConfig.useControlEnter ? [ + rule(and([isControl, inSet(ENTER)]), execute$4) + ] : []); + }; + const getKeyupRules$5 = (component, _simulatedEvent, executeConfig, _executeState) => executeConfig.useSpace && !inside(component.element) ? + [rule(inSet(SPACE), stopEventForFirefox)] : + []; + var ExecutionType = typical(schema$y, NoState.init, getKeydownRules$5, getKeyupRules$5, () => Optional.none()); + + const flatgrid$1 = () => { + const dimensions = value$2(); + const setGridSize = (numRows, numColumns) => { + dimensions.set({ numRows, numColumns }); + }; + const getNumRows = () => dimensions.get().map((d) => d.numRows); + const getNumColumns = () => dimensions.get().map((d) => d.numColumns); + return nu$4({ + readState: () => dimensions.get().map((d) => ({ + numRows: String(d.numRows), + numColumns: String(d.numColumns) + })).getOr({ + numRows: '?', + numColumns: '?' + }), + setGridSize, + getNumRows, + getNumColumns + }); + }; + const init$g = (spec) => spec.state(spec); + + var KeyingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + flatgrid: flatgrid$1, + init: init$g + }); + + // Looks up direction (considering LTR and RTL), finds the focused element, + // and tries to move. If it succeeds, triggers focus and kills the event. + const useH = (movement) => (component, simulatedEvent, config, state) => { + const move = movement(component.element); + return use(move, component, simulatedEvent, config, state); + }; + const west = (moveLeft, moveRight) => { + const movement = onDirection(moveLeft, moveRight); + return useH(movement); + }; + const east = (moveLeft, moveRight) => { + const movement = onDirection(moveRight, moveLeft); + return useH(movement); + }; + const useV = (move) => (component, simulatedEvent, config, state) => use(move, component, simulatedEvent, config, state); + const use = (move, component, simulatedEvent, config, state) => { + const outcome = config.focusManager.get(component).bind((focused) => move(component.element, focused, config, state)); + return outcome.map((newFocus) => { + config.focusManager.set(component, newFocus); + return true; + }); + }; + const north = useV; + const south = useV; + const move$1 = useV; + + const locate = (candidates, predicate) => findIndex$1(candidates, predicate).map((index) => ({ + index, + candidates + })); + + const locateVisible = (container, current, selector) => { + const predicate = (x) => eq(x, current); + const candidates = descendants(container, selector); + const visible = filter$2(candidates, isVisible); + return locate(visible, predicate); + }; + const findIndex = (elements, target) => findIndex$1(elements, (elem) => eq(target, elem)); + + const withGrid = (values, index, numCols, f) => { + const oldRow = Math.floor(index / numCols); + const oldColumn = index % numCols; + return f(oldRow, oldColumn).bind((address) => { + const newIndex = address.row * numCols + address.column; + return newIndex >= 0 && newIndex < values.length ? Optional.some(values[newIndex]) : Optional.none(); + }); + }; + const cycleHorizontal$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => { + const onLastRow = oldRow === numRows - 1; + const colsInRow = onLastRow ? values.length - (oldRow * numCols) : numCols; + const newColumn = cycleBy(oldColumn, delta, 0, colsInRow - 1); + return Optional.some({ + row: oldRow, + column: newColumn + }); + }); + const cycleVertical$1 = (values, index, numRows, numCols, delta) => withGrid(values, index, numCols, (oldRow, oldColumn) => { + const newRow = cycleBy(oldRow, delta, 0, numRows - 1); + const onLastRow = newRow === numRows - 1; + const colsInRow = onLastRow ? values.length - (newRow * numCols) : numCols; + const newCol = clamp(oldColumn, 0, colsInRow - 1); + return Optional.some({ + row: newRow, + column: newCol + }); + }); + const cycleRight$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, +1); + const cycleLeft$1 = (values, index, numRows, numCols) => cycleHorizontal$1(values, index, numRows, numCols, -1); + const cycleUp$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, -1); + const cycleDown$1 = (values, index, numRows, numCols) => cycleVertical$1(values, index, numRows, numCols, +1); + + const schema$x = [ + required$1('selector'), + defaulted('execute', defaultExecute), + onKeyboardHandler('onEscape'), + defaulted('captureTab', false), + initSize() + ]; + const focusIn$4 = (component, gridConfig, _gridState) => { + descendant(component.element, gridConfig.selector).each((first) => { + gridConfig.focusManager.set(component, first); + }); + }; + const findCurrent$1 = (component, gridConfig) => gridConfig.focusManager.get(component).bind((elem) => closest$3(elem, gridConfig.selector)); + const execute$3 = (component, simulatedEvent, gridConfig, _gridState) => findCurrent$1(component, gridConfig) + .bind((focused) => gridConfig.execute(component, simulatedEvent, focused)); + const doMove$2 = (cycle) => (element, focused, gridConfig, gridState) => locateVisible(element, focused, gridConfig.selector) + .bind((identified) => cycle(identified.candidates, identified.index, gridState.getNumRows().getOr(gridConfig.initSize.numRows), gridState.getNumColumns().getOr(gridConfig.initSize.numColumns))); + const handleTab = (_component, _simulatedEvent, gridConfig) => gridConfig.captureTab ? Optional.some(true) : Optional.none(); + const doEscape$1 = (component, simulatedEvent, gridConfig) => gridConfig.onEscape(component, simulatedEvent); + const moveLeft$3 = doMove$2(cycleLeft$1); + const moveRight$3 = doMove$2(cycleRight$1); + const moveNorth$1 = doMove$2(cycleUp$1); + const moveSouth$1 = doMove$2(cycleDown$1); + const getKeydownRules$4 = constant$1([ + rule(inSet(LEFT), west(moveLeft$3, moveRight$3)), + rule(inSet(RIGHT), east(moveLeft$3, moveRight$3)), + rule(inSet(UP), north(moveNorth$1)), + rule(inSet(DOWN), south(moveSouth$1)), + rule(and([isShift$1, inSet(TAB)]), handleTab), + rule(and([isNotShift, inSet(TAB)]), handleTab), + // Probably should make whether space is used configurable + rule(inSet(SPACE.concat(ENTER)), execute$3) + ]); + const getKeyupRules$4 = constant$1([ + rule(inSet(ESCAPE), doEscape$1), + rule(inSet(SPACE), stopEventForFirefox) + ]); + var FlatgridType = typical(schema$x, flatgrid$1, getKeydownRules$4, getKeyupRules$4, () => Optional.some(focusIn$4)); + + const f = (container, selector, current, delta, getNewIndex) => { + const isDisabledButton = (candidate) => name$3(candidate) === 'button' && get$g(candidate, 'disabled') === 'disabled'; + const tryNewIndex = (initial, index, candidates) => getNewIndex(initial, index, delta, 0, candidates.length - 1, candidates[index], (newIndex) => isDisabledButton(candidates[newIndex]) ? + tryNewIndex(initial, newIndex, candidates) : + Optional.from(candidates[newIndex])); + // I wonder if this will be a problem when the focused element is invisible (shouldn't happen) + return locateVisible(container, current, selector).bind((identified) => { + const index = identified.index; + const candidates = identified.candidates; + return tryNewIndex(index, index, candidates); + }); + }; + const horizontalWithoutCycles = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, oldCandidate, onNewIndex) => { + const newIndex = clamp(v + d, min, max); + return newIndex === prevIndex ? Optional.from(oldCandidate) : onNewIndex(newIndex); + }); + const horizontal = (container, selector, current, delta) => f(container, selector, current, delta, (prevIndex, v, d, min, max, _oldCandidate, onNewIndex) => { + const newIndex = cycleBy(v, d, min, max); + // If we've cycled back to the original index, we've failed to find a new valid candidate + return newIndex === prevIndex ? Optional.none() : onNewIndex(newIndex); + }); + + const schema$w = [ + required$1('selector'), + defaulted('getInitial', Optional.none), + defaulted('execute', defaultExecute), + onKeyboardHandler('onEscape'), + defaulted('executeOnMove', false), + defaulted('allowVertical', true), + defaulted('allowHorizontal', true), + defaulted('cycles', true) + ]; + // TODO: Remove dupe. + // TODO: Probably use this for not just execution. + const findCurrent = (component, flowConfig) => flowConfig.focusManager.get(component).bind((elem) => closest$3(elem, flowConfig.selector)); + const execute$2 = (component, simulatedEvent, flowConfig) => findCurrent(component, flowConfig).bind((focused) => flowConfig.execute(component, simulatedEvent, focused)); + const focusIn$3 = (component, flowConfig, _state) => { + flowConfig.getInitial(component).orThunk(() => descendant(component.element, flowConfig.selector)).each((first) => { + flowConfig.focusManager.set(component, first); + }); + }; + const moveLeft$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, -1); + const moveRight$2 = (element, focused, info) => (info.cycles ? horizontal : horizontalWithoutCycles)(element, info.selector, focused, +1); + const doMove$1 = (movement) => (component, simulatedEvent, flowConfig, flowState) => movement(component, simulatedEvent, flowConfig, flowState).bind(() => flowConfig.executeOnMove ? + execute$2(component, simulatedEvent, flowConfig) : + Optional.some(true)); + const doEscape = (component, simulatedEvent, flowConfig) => flowConfig.onEscape(component, simulatedEvent); + const getKeydownRules$3 = (_component, _se, flowConfig, _flowState) => { + const westMovers = [...flowConfig.allowHorizontal ? LEFT : []].concat(flowConfig.allowVertical ? UP : []); + const eastMovers = [...flowConfig.allowHorizontal ? RIGHT : []].concat(flowConfig.allowVertical ? DOWN : []); + return [ + rule(inSet(westMovers), doMove$1(west(moveLeft$2, moveRight$2))), + rule(inSet(eastMovers), doMove$1(east(moveLeft$2, moveRight$2))), + rule(inSet(ENTER), execute$2), + rule(inSet(SPACE), execute$2) + ]; + }; + const getKeyupRules$3 = constant$1([ + rule(inSet(SPACE), stopEventForFirefox), + rule(inSet(ESCAPE), doEscape) + ]); + var FlowType = typical(schema$w, NoState.init, getKeydownRules$3, getKeyupRules$3, () => Optional.some(focusIn$3)); + + const toCell = (matrix, rowIndex, columnIndex) => Optional.from(matrix[rowIndex]).bind((row) => Optional.from(row[columnIndex]).map((cell) => ({ + rowIndex, + columnIndex, + cell + }))); + const cycleHorizontal = (matrix, rowIndex, startCol, deltaCol) => { + const row = matrix[rowIndex]; + const colsInRow = row.length; + const newColIndex = cycleBy(startCol, deltaCol, 0, colsInRow - 1); + return toCell(matrix, rowIndex, newColIndex); + }; + const cycleVertical = (matrix, colIndex, startRow, deltaRow) => { + const nextRowIndex = cycleBy(startRow, deltaRow, 0, matrix.length - 1); + const colsInNextRow = matrix[nextRowIndex].length; + const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1); + return toCell(matrix, nextRowIndex, nextColIndex); + }; + const moveHorizontal = (matrix, rowIndex, startCol, deltaCol) => { + const row = matrix[rowIndex]; + const colsInRow = row.length; + const newColIndex = clamp(startCol + deltaCol, 0, colsInRow - 1); + return toCell(matrix, rowIndex, newColIndex); + }; + const moveVertical = (matrix, colIndex, startRow, deltaRow) => { + const nextRowIndex = clamp(startRow + deltaRow, 0, matrix.length - 1); + const colsInNextRow = matrix[nextRowIndex].length; + const nextColIndex = clamp(colIndex, 0, colsInNextRow - 1); + return toCell(matrix, nextRowIndex, nextColIndex); + }; + // return address(Math.floor(index / columns), index % columns); + const cycleRight = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, +1); + const cycleLeft = (matrix, startRow, startCol) => cycleHorizontal(matrix, startRow, startCol, -1); + const cycleUp = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, -1); + const cycleDown = (matrix, startRow, startCol) => cycleVertical(matrix, startCol, startRow, +1); + const moveLeft$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, -1); + const moveRight$1 = (matrix, startRow, startCol) => moveHorizontal(matrix, startRow, startCol, +1); + const moveUp$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, -1); + const moveDown$1 = (matrix, startRow, startCol) => moveVertical(matrix, startCol, startRow, +1); + + const schema$v = [ + requiredObjOf('selectors', [ + required$1('row'), + required$1('cell') + ]), + // Used to determine whether pressing right/down at the end cycles back to the start/top + defaulted('cycles', true), + defaulted('previousSelector', Optional.none), + defaulted('execute', defaultExecute) + ]; + const focusIn$2 = (component, matrixConfig, _state) => { + const focused = matrixConfig.previousSelector(component).orThunk(() => { + const selectors = matrixConfig.selectors; + return descendant(component.element, selectors.cell); + }); + focused.each((cell) => { + matrixConfig.focusManager.set(component, cell); + }); + }; + const execute$1 = (component, simulatedEvent, matrixConfig) => search(component.element).bind((focused) => matrixConfig.execute(component, simulatedEvent, focused)); + const toMatrix = (rows, matrixConfig) => map$2(rows, (row) => descendants(row, matrixConfig.selectors.cell)); + const doMove = (ifCycle, ifMove) => (element, focused, matrixConfig) => { + const move = matrixConfig.cycles ? ifCycle : ifMove; + return closest$3(focused, matrixConfig.selectors.row).bind((inRow) => { + const cellsInRow = descendants(inRow, matrixConfig.selectors.cell); + return findIndex(cellsInRow, focused).bind((colIndex) => { + const allRows = descendants(element, matrixConfig.selectors.row); + return findIndex(allRows, inRow).bind((rowIndex) => { + // Now, make the matrix. + const matrix = toMatrix(allRows, matrixConfig); + return move(matrix, rowIndex, colIndex).map((next) => next.cell); + }); + }); + }); + }; + const moveLeft = doMove(cycleLeft, moveLeft$1); + const moveRight = doMove(cycleRight, moveRight$1); + const moveNorth = doMove(cycleUp, moveUp$1); + const moveSouth = doMove(cycleDown, moveDown$1); + const getKeydownRules$2 = constant$1([ + rule(inSet(LEFT), west(moveLeft, moveRight)), + rule(inSet(RIGHT), east(moveLeft, moveRight)), + rule(inSet(UP), north(moveNorth)), + rule(inSet(DOWN), south(moveSouth)), + rule(inSet(SPACE.concat(ENTER)), execute$1) + ]); + const getKeyupRules$2 = constant$1([ + rule(inSet(SPACE), stopEventForFirefox) + ]); + var MatrixType = typical(schema$v, NoState.init, getKeydownRules$2, getKeyupRules$2, () => Optional.some(focusIn$2)); + + const schema$u = [ + required$1('selector'), + defaulted('execute', defaultExecute), + defaulted('moveOnTab', false) + ]; + const execute = (component, simulatedEvent, menuConfig) => menuConfig.focusManager.get(component).bind((focused) => menuConfig.execute(component, simulatedEvent, focused)); + const focusIn$1 = (component, menuConfig, _state) => { + // Maybe keep selection if it was there before + descendant(component.element, menuConfig.selector).each((first) => { + menuConfig.focusManager.set(component, first); + }); + }; + const moveUp = (element, focused, info) => horizontal(element, info.selector, focused, -1); + const moveDown = (element, focused, info) => horizontal(element, info.selector, focused, +1); + const fireShiftTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveUp)(component, simulatedEvent, menuConfig, menuState) : Optional.none(); + const fireTab = (component, simulatedEvent, menuConfig, menuState) => menuConfig.moveOnTab ? move$1(moveDown)(component, simulatedEvent, menuConfig, menuState) : Optional.none(); + const getKeydownRules$1 = constant$1([ + rule(inSet(UP), move$1(moveUp)), + rule(inSet(DOWN), move$1(moveDown)), + rule(and([isShift$1, inSet(TAB)]), fireShiftTab), + rule(and([isNotShift, inSet(TAB)]), fireTab), + rule(inSet(ENTER), execute), + rule(inSet(SPACE), execute) + ]); + const getKeyupRules$1 = constant$1([ + rule(inSet(SPACE), stopEventForFirefox) + ]); + var MenuType = typical(schema$u, NoState.init, getKeydownRules$1, getKeyupRules$1, () => Optional.some(focusIn$1)); + + const schema$t = [ + onKeyboardHandler('onSpace'), + onKeyboardHandler('onEnter'), + onKeyboardHandler('onShiftEnter'), + onKeyboardHandler('onLeft'), + onKeyboardHandler('onRight'), + onKeyboardHandler('onTab'), + onKeyboardHandler('onShiftTab'), + onKeyboardHandler('onUp'), + onKeyboardHandler('onDown'), + onKeyboardHandler('onEscape'), + defaulted('stopSpaceKeyup', false), + option$3('focusIn') + ]; + const getKeydownRules = (component, simulatedEvent, specialInfo) => [ + rule(inSet(SPACE), specialInfo.onSpace), + rule(and([isNotShift, inSet(ENTER)]), specialInfo.onEnter), + rule(and([isShift$1, inSet(ENTER)]), specialInfo.onShiftEnter), + rule(and([isShift$1, inSet(TAB)]), specialInfo.onShiftTab), + rule(and([isNotShift, inSet(TAB)]), specialInfo.onTab), + rule(inSet(UP), specialInfo.onUp), + rule(inSet(DOWN), specialInfo.onDown), + rule(inSet(LEFT), specialInfo.onLeft), + rule(inSet(RIGHT), specialInfo.onRight), + rule(inSet(SPACE), specialInfo.onSpace) + ]; + const getKeyupRules = (component, simulatedEvent, specialInfo) => [ + ...(specialInfo.stopSpaceKeyup ? [rule(inSet(SPACE), stopEventForFirefox)] : []), + rule(inSet(ESCAPE), specialInfo.onEscape) + ]; + var SpecialType = typical(schema$t, NoState.init, getKeydownRules, getKeyupRules, (specialInfo) => specialInfo.focusIn); + + const acyclic = AcyclicType.schema(); + const cyclic = CyclicType.schema(); + const flow = FlowType.schema(); + const flatgrid = FlatgridType.schema(); + const matrix = MatrixType.schema(); + const execution = ExecutionType.schema(); + const menu = MenuType.schema(); + const special = SpecialType.schema(); + + var KeyboardBranches = /*#__PURE__*/Object.freeze({ + __proto__: null, + acyclic: acyclic, + cyclic: cyclic, + flow: flow, + flatgrid: flatgrid, + matrix: matrix, + execution: execution, + menu: menu, + special: special + }); + + const isFlatgridState = (keyState) => hasNonNullableKey(keyState, 'setGridSize'); + const Keying = createModes({ + branchKey: 'mode', + branches: KeyboardBranches, + name: 'keying', + active: { + events: (keyingConfig, keyingState) => { + const handler = keyingConfig.handler; + return handler.toEvents(keyingConfig, keyingState); + } + }, + apis: { + focusIn: (component, keyConfig, keyState) => { + // If we have a custom sendFocusIn function, use that. + // Otherwise, we just trigger focus on the outer element. + keyConfig.sendFocusIn(keyConfig).fold(() => { + component.getSystem().triggerFocus(component.element, component.element); + }, (sendFocusIn) => { + sendFocusIn(component, keyConfig, keyState); + }); + }, + // These APIs are going to be interesting because they are not + // available for all keying modes + setGridSize: (component, keyConfig, keyState, numRows, numColumns) => { + if (!isFlatgridState(keyState)) { + // eslint-disable-next-line no-console + console.error('Layout does not support setGridSize'); + } + else { + keyState.setGridSize(numRows, numColumns); + } + } + }, + state: KeyingState + }); + + const premadeTag = generate$6('alloy-premade'); + const premade$1 = (comp) => { + Object.defineProperty(comp.element.dom, premadeTag, { + value: comp.uid, + writable: true + }); + return wrap(premadeTag, comp); + }; + const isPremade = (element) => has$2(element.dom, premadeTag); + const getPremade = (spec) => get$h(spec, premadeTag); + const makeApi = (f) => markAsSketchApi((component, ...rest) => f(component.getApis(), component, ...rest), f); + + const isConnected = (comp) => comp.getSystem().isConnected(); + const fireDetaching = (component) => { + emit(component, detachedFromDom()); + const children = component.components(); + each$1(children, fireDetaching); + }; + const fireAttaching = (component) => { + const children = component.components(); + each$1(children, fireAttaching); + emit(component, attachedToDom()); + }; + // Unlike attach, a virtualAttach makes no actual DOM changes. + // This is because it should only be used in a situation + // where we are patching an existing element. + const virtualAttach = (parent, child) => { + // So we still add it to the world + parent.getSystem().addToWorld(child); + // And we fire attaching ONLY if it's already in the DOM + if (inBody(parent.element)) { + fireAttaching(child); + } + }; + // Unlike detach, a virtualDetach makes no actual DOM changes. + // This is because it's used in patching circumstances. + const virtualDetach = (comp) => { + fireDetaching(comp); + comp.getSystem().removeFromWorld(comp); + }; + const attach$1 = (parent, child) => { + append$2(parent.element, child.element); + }; + const detachChildren$1 = (component) => { + // This will not detach the component, but will detach its children and sync at the end. + each$1(component.components(), (childComp) => remove$7(childComp.element)); + // Clear the component also. + empty(component.element); + component.syncComponents(); + }; + const replaceChildren = (component, newSpecs, buildNewChildren) => { + // Detach all existing children + const subs = component.components(); + detachChildren$1(component); + const newChildren = buildNewChildren(newSpecs); + // Determine which components have been deleted and remove them from the world + const deleted = difference(subs, newChildren); + each$1(deleted, (comp) => { + fireDetaching(comp); + component.getSystem().removeFromWorld(comp); + }); + // Add all new components + each$1(newChildren, (childComp) => { + // If the component isn't connected, ie is new, then we also need to add it to the world + if (!isConnected(childComp)) { + component.getSystem().addToWorld(childComp); + attach$1(component, childComp); + if (inBody(component.element)) { + fireAttaching(childComp); + } + } + else { + attach$1(component, childComp); + } + }); + component.syncComponents(); + }; + const virtualReplaceChildren = (component, newSpecs, buildNewChildren) => { + // When replacing we don't want to fire detachedFromDom and attachedToDom again for a premade that has just had its position in the children moved around, + // so we only detach initially if we aren't a premade. Premades will be detached later, but only if they are no longer in the child list. + const subs = component.components(); + const existingComps = bind$3(newSpecs, (spec) => getPremade(spec).toArray()); + each$1(subs, (childComp) => { + if (!contains$2(existingComps, childComp)) { + virtualDetach(childComp); + } + }); + const newChildren = buildNewChildren(newSpecs); + // Determine which components have been deleted and remove them from the world + // It's probable the component has already been detached beforehand so only + // detach what's still attached to the world (i.e removed premades) + const deleted = difference(subs, newChildren); + each$1(deleted, (deletedComp) => { + if (isConnected(deletedComp)) { + virtualDetach(deletedComp); + } + }); + // Add all new components + each$1(newChildren, (childComp) => { + // If the component isn't connected, ie is new, then we also need to add it to the world + if (!isConnected(childComp)) { + virtualAttach(component, childComp); + } + }); + component.syncComponents(); + }; + + const attach = (parent, child) => { + attachWith(parent, child, append$2); + }; + const attachWith = (parent, child, insertion) => { + parent.getSystem().addToWorld(child); + insertion(parent.element, child.element); + if (inBody(parent.element)) { + fireAttaching(child); + } + parent.syncComponents(); + }; + const doDetach = (component) => { + fireDetaching(component); + remove$7(component.element); + component.getSystem().removeFromWorld(component); + }; + const detach = (component) => { + const parent$1 = parent(component.element).bind((p) => component.getSystem().getByDom(p).toOptional()); + doDetach(component); + parent$1.each((p) => { + p.syncComponents(); + }); + }; + const detachChildren = (component) => { + // This will not detach the component, but will detach its children and sync at the end. + const subs = component.components(); + each$1(subs, doDetach); + // Clear the component also. + empty(component.element); + component.syncComponents(); + }; + const attachSystem = (element, guiSystem) => { + attachSystemWith(element, guiSystem, append$2); + }; + const attachSystemAfter = (element, guiSystem) => { + attachSystemWith(element, guiSystem, after$1); + }; + const attachSystemWith = (element, guiSystem, inserter) => { + inserter(element, guiSystem.element); + const children$1 = children(guiSystem.element); + each$1(children$1, (child) => { + guiSystem.getByDom(child).each(fireAttaching); + }); + }; + const detachSystem = (guiSystem) => { + const children$1 = children(guiSystem.element); + each$1(children$1, (child) => { + guiSystem.getByDom(child).each(fireDetaching); + }); + remove$7(guiSystem.element); + }; + + const determineObsoleted = (parent, index, oldObsoleted) => { + // When dealing with premades, the process of building something may have moved existing nodes around, so we see + // if the child at the index position is still the same. If it isn't, we need to introduce some complex behaviour + // + // Example: + // ```
``` + // and then moving the premade inside a blockquote + // ```
``` + // + // so when you go to replace the first thing it would think there is only 1 child which would be the span, so in + // this case we insert a marker to keep the span in the same spot. + const newObsoleted = child$2(parent, index); + return newObsoleted.map((newObs) => { + const elemChanged = oldObsoleted.exists((o) => !eq(o, newObs)); + // Adding a marker prevents the case where a premade is added to something shifting it from where + // it was. That in turn un-synced all trailing children and made it so they couldn't be patched. + if (elemChanged) { + const oldTag = oldObsoleted.map(name$3).getOr('span'); + const marker = SugarElement.fromTag(oldTag); + before$1(newObs, marker); + return marker; + } + else { + return newObs; + } + }); + }; + const ensureInDom = (parent, child, obsoleted) => { + obsoleted.fold( + // There is nothing here, so just append to the parent + () => append$2(parent, child), (obs) => { + if (!eq(obs, child)) { + // This situation occurs when the DOM element that has been patched when building it is no + // longer the one that we need to replace. This is probably caused by premades. + before$1(obs, child); + remove$7(obs); + } + }); + }; + const patchChildrenWith = (parent, nu, f) => { + const builtChildren = map$2(nu, f); + // Need to regather the children in case some of the previous children have moved + // to an earlier index. So this just prunes any leftover children in the dom. + const currentChildren = children(parent); + each$1(currentChildren.slice(builtChildren.length), remove$7); + return builtChildren; + }; + const patchSpecChild = (parent, index, spec, build) => { + // Before building anything, this is the DOM element we are going to try to use. + const oldObsoleted = child$2(parent, index); + const childComp = build(spec, oldObsoleted); + const obsoleted = determineObsoleted(parent, index, oldObsoleted); + ensureInDom(parent, childComp.element, obsoleted); + return childComp; + }; + const patchSpecChildren = (parent, specs, build) => patchChildrenWith(parent, specs, (spec, index) => patchSpecChild(parent, index, spec, build)); + const patchDomChildren = (parent, nodes) => patchChildrenWith(parent, nodes, (node, index) => { + const optObsoleted = child$2(parent, index); + ensureInDom(parent, node, optObsoleted); + return node; + }); + + const preserve = (f, container) => { + const dos = getRootNode(container); + const refocus = active$1(dos).bind((focused) => { + const hasFocus = (elem) => eq(focused, elem); + return hasFocus(container) ? Optional.some(container) : descendant$1(container, hasFocus); + }); + const result = f(container); + // If there is a focussed element, the F function may cause focus to be lost (such as by hiding elements). Restore it afterwards. + refocus.each((oldFocus) => { + active$1(dos).filter((newFocus) => eq(newFocus, oldFocus)).fold(() => { + // Only refocus if the focus has changed, otherwise we break IE + focus$4(oldFocus); + }, noop); + }); + return result; + }; + + const withoutReuse = (parent, data) => { + preserve(() => { + replaceChildren(parent, data, () => map$2(data, parent.getSystem().build)); + }, parent.element); + }; + const withReuse = (parent, data) => { + // Note: We shouldn't need AriaPreserve since we're trying to keep the existing elements, + // but let's just do it for now just to be safe. + preserve(() => { + virtualReplaceChildren(parent, data, () => { + // Build the new children + return patchSpecChildren(parent.element, data, parent.getSystem().buildOrPatch); + }); + }, parent.element); + }; + + const virtualReplace = (component, replacee, replaceeIndex, childSpec) => { + virtualDetach(replacee); + const child = patchSpecChild(component.element, replaceeIndex, childSpec, component.getSystem().buildOrPatch); + virtualAttach(component, child); + component.syncComponents(); + }; + const insert = (component, insertion, childSpec) => { + const child = component.getSystem().build(childSpec); + attachWith(component, child, insertion); + }; + const replace = (component, replacee, replaceeIndex, childSpec) => { + detach(replacee); + insert(component, (p, c) => appendAt(p, c, replaceeIndex), childSpec); + }; + const set$3 = (component, replaceConfig, replaceState, data) => { + const replacer = replaceConfig.reuseDom ? withReuse : withoutReuse; + return replacer(component, data); + }; + const append = (component, replaceConfig, replaceState, appendee) => { + insert(component, append$2, appendee); + }; + const prepend = (component, replaceConfig, replaceState, prependee) => { + insert(component, prepend$1, prependee); + }; + // NOTE: Removee is going to be a component, not a spec. + const remove = (component, replaceConfig, replaceState, removee) => { + const children = contents(component); + const foundChild = find$5(children, (child) => eq(removee.element, child.element)); + foundChild.each(detach); + }; + // TODO: Rename + const contents = (component, _replaceConfig) => component.components(); + const replaceAt = (component, replaceConfig, replaceState, replaceeIndex, replacer) => { + const children = contents(component); + return Optional.from(children[replaceeIndex]).map((replacee) => { + replacer.fold(() => detach(replacee), (r) => { + const replacer = replaceConfig.reuseDom ? virtualReplace : replace; + replacer(component, replacee, replaceeIndex, r); + }); + return replacee; + }); + }; + const replaceBy = (component, replaceConfig, replaceState, replaceePred, replacer) => { + const children = contents(component); + return findIndex$1(children, replaceePred).bind((replaceeIndex) => replaceAt(component, replaceConfig, replaceState, replaceeIndex, replacer)); + }; + + var ReplaceApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + append: append, + prepend: prepend, + remove: remove, + replaceAt: replaceAt, + replaceBy: replaceBy, + set: set$3, + contents: contents + }); + + const Replacing = create$3({ + fields: [ + defaultedBoolean('reuseDom', true) + ], + name: 'replacing', + apis: ReplaceApis + }); + + // The purpose of this check is to ensure that a simulated focus call is not going + // to recurse infinitely. Essentially, if the originator of the focus call is the same + // as the element receiving it, and it wasn't its own target, then stop the focus call + // and log a warning. + const isRecursive = (component, originator, target) => eq(originator, component.element) && !eq(originator, target); + const events$g = derive$2([ + can(focus$3(), (component, simulatedEvent) => { + // originator may not always be there. Will need to check this. + const event = simulatedEvent.event; + const originator = event.originator; + const target = event.target; + if (isRecursive(component, originator, target)) { + // eslint-disable-next-line no-console + console.warn(focus$3() + ' did not get interpreted by the desired target. ' + + '\nOriginator: ' + element(originator) + + '\nTarget: ' + element(target) + + '\nCheck the ' + focus$3() + ' event handlers'); + return false; + } + else { + return true; + } + }) + ]); + + var DefaultEvents = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$g + }); + + const prefix$1 = constant$1('alloy-id-'); + const idAttr$1 = constant$1('data-alloy-id'); + + const prefix = prefix$1(); + const idAttr = idAttr$1(); + const write = (label, elem) => { + const id = generate$6(prefix + label); + writeOnly(elem, id); + return id; + }; + const writeOnly = (elem, uid) => { + Object.defineProperty(elem.dom, idAttr, { + value: uid, + writable: true + }); + }; + const read = (elem) => { + const id = isElement$1(elem) ? elem.dom[idAttr] : null; + return Optional.from(id); + }; + const generate$4 = (prefix) => generate$6(prefix); + + const make$7 = identity; + + const NoContextApi = (getComp) => { + const getMessage = (event) => `The component must be in a context to execute: ${event}` + + (getComp ? '\n' + element(getComp().element) + ' is not in context.' : ''); + const fail = (event) => () => { + throw new Error(getMessage(event)); + }; + const warn = (event) => () => { + // eslint-disable-next-line no-console + console.warn(getMessage(event)); + }; + return { + debugInfo: constant$1('fake'), + triggerEvent: warn('triggerEvent'), + triggerFocus: warn('triggerFocus'), + triggerEscape: warn('triggerEscape'), + broadcast: warn('broadcast'), + broadcastOn: warn('broadcastOn'), + broadcastEvent: warn('broadcastEvent'), + build: fail('build'), + buildOrPatch: fail('buildOrPatch'), + addToWorld: fail('addToWorld'), + removeFromWorld: fail('removeFromWorld'), + addToGui: fail('addToGui'), + removeFromGui: fail('removeFromGui'), + getByUid: fail('getByUid'), + getByDom: fail('getByDom'), + isConnected: never + }; + }; + const singleton = NoContextApi(); + + const generateFrom$1 = (spec, all) => { + /* + * This takes a basic record of configured behaviours, defaults their state + * and ensures that all the behaviours were valid. Will need to document + * this entire process. Let's see where this is used. + */ + const schema = map$2(all, (a) => + // Optional here probably just due to ForeignGui listing everything it supports. Can most likely + // change it to strict once I fix the other errors. + optionObjOf(a.name(), [ + required$1('config'), + defaulted('state', NoState) + ])); + const validated = asRaw('component.behaviours', objOf(schema), spec.behaviours).fold((errInfo) => { + throw new Error(formatError(errInfo) + '\nComplete spec:\n' + + JSON.stringify(spec, null, 2)); + }, identity); + return { + list: all, + data: map$1(validated, (optBlobThunk) => { + const output = optBlobThunk.map((blob) => ({ + config: blob.config, + state: blob.state.init(blob.config) + })); + return constant$1(output); + }) + }; + }; + const getBehaviours$3 = (bData) => bData.list; + const getData$2 = (bData) => bData.data; + + const byInnerKey = (data, tuple) => { + const r = {}; + each(data, (detail, key) => { + each(detail, (value, indexKey) => { + const chain = get$h(r, indexKey).getOr([]); + r[indexKey] = chain.concat([ + tuple(key, value) + ]); + }); + }); + return r; + }; + + // Based on all the behaviour exhibits, and the original dom modification, identify + // the overall combined dom modification that needs to occur + const combine$1 = (info, baseMod, behaviours, base) => { + // Clone the object so we can change it. + const modsByBehaviour = { ...baseMod }; + each$1(behaviours, (behaviour) => { + modsByBehaviour[behaviour.name()] = behaviour.exhibit(info, base); + }); + // byAspect format: { classes: [ { name: Toggling, modification: [ 'selected' ] } ] } + const byAspect = byInnerKey(modsByBehaviour, (name, modification) => ({ name, modification })); + const combineObjects = (objects) => foldr(objects, (b, a) => ({ ...a.modification, ...b }), {}); + const combinedClasses = foldr(byAspect.classes, (b, a) => a.modification.concat(b), []); + const combinedAttributes = combineObjects(byAspect.attributes); + const combinedStyles = combineObjects(byAspect.styles); + return nu$2({ + classes: combinedClasses, + attributes: combinedAttributes, + styles: combinedStyles + }); + }; + + const sortKeys = (label, keyName, array, order) => { + try { + const sorted = sort(array, (a, b) => { + const aKey = a[keyName]; + const bKey = b[keyName]; + const aIndex = order.indexOf(aKey); + const bIndex = order.indexOf(bKey); + if (aIndex === -1) { + throw new Error('The ordering for ' + label + ' does not have an entry for ' + aKey + + '.\nOrder specified: ' + JSON.stringify(order, null, 2)); + } + if (bIndex === -1) { + throw new Error('The ordering for ' + label + ' does not have an entry for ' + bKey + + '.\nOrder specified: ' + JSON.stringify(order, null, 2)); + } + if (aIndex < bIndex) { + return -1; + } + else if (bIndex < aIndex) { + return 1; + } + else { + return 0; + } + }); + return Result.value(sorted); + } + catch (err) { + return Result.error([err]); + } + }; + + const uncurried = (handler, purpose) => ({ + handler, + purpose + }); + const curried = (handler, purpose) => ({ + cHandler: handler, + purpose + }); + const curryArgs = (descHandler, extraArgs) => curried(curry.apply(undefined, [descHandler.handler].concat(extraArgs)), descHandler.purpose); + const getCurried = (descHandler) => descHandler.cHandler; + + const behaviourTuple = (name, handler) => ({ + name, + handler + }); + const nameToHandlers = (behaviours, info) => { + const r = {}; + each$1(behaviours, (behaviour) => { + r[behaviour.name()] = behaviour.handlers(info); + }); + return r; + }; + const groupByEvents = (info, behaviours, base) => { + const behaviourEvents = { + ...base, + ...nameToHandlers(behaviours, info) + }; + // Now, with all of these events, we need to index by event name + return byInnerKey(behaviourEvents, behaviourTuple); + }; + const combine = (info, eventOrder, behaviours, base) => { + const byEventName = groupByEvents(info, behaviours, base); + return combineGroups(byEventName, eventOrder); + }; + const assemble = (rawHandler) => { + const handler = read$1(rawHandler); + return (component, simulatedEvent, ...rest) => { + const args = [component, simulatedEvent].concat(rest); + if (handler.abort.apply(undefined, args)) { + simulatedEvent.stop(); + } + else if (handler.can.apply(undefined, args)) { + handler.run.apply(undefined, args); + } + }; + }; + const missingOrderError = (eventName, tuples) => Result.error([ + 'The event (' + eventName + ') has more than one behaviour that listens to it.\nWhen this occurs, you must ' + + 'specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that ' + + 'can trigger it are: ' + JSON.stringify(map$2(tuples, (c) => c.name), null, 2) + ]); + const fuse = (tuples, eventOrder, eventName) => { + // ASSUMPTION: tuples.length will never be 0, because it wouldn't have an entry if it was 0 + const order = eventOrder[eventName]; + if (!order) { + return missingOrderError(eventName, tuples); + } + else { + return sortKeys('Event: ' + eventName, 'name', tuples, order).map((sortedTuples) => { + const handlers = map$2(sortedTuples, (tuple) => tuple.handler); + return fuse$1(handlers); + }); + } + }; + const combineGroups = (byEventName, eventOrder) => { + const r = mapToArray(byEventName, (tuples, eventName) => { + const combined = tuples.length === 1 ? Result.value(tuples[0].handler) : fuse(tuples, eventOrder, eventName); + return combined.map((handler) => { + const assembled = assemble(handler); + const purpose = tuples.length > 1 ? filter$2(eventOrder[eventName], (o) => exists(tuples, (t) => t.name === o)).join(' > ') : tuples[0].name; + return wrap(eventName, uncurried(assembled, purpose)); + }); + }); + return consolidate(r, {}); + }; + + const baseBehaviour = 'alloy.base.behaviour'; + const schema$s = objOf([ + field$1('dom', 'dom', required$2(), objOf([ + // Note, no children. + required$1('tag'), + defaulted('styles', {}), + defaulted('classes', []), + defaulted('attributes', {}), + option$3('value'), + option$3('innerHtml') + ])), + required$1('components'), + required$1('uid'), + defaulted('events', {}), + defaulted('apis', {}), + // Use mergeWith in the future when pre-built behaviours conflict + field$1('eventOrder', 'eventOrder', mergeWith({ + // Note, not using constant behaviour names to avoid code size of unused behaviours + [execute$5()]: ['disabling', baseBehaviour, 'toggling', 'typeaheadevents'], + [focus$3()]: [baseBehaviour, 'focusing', 'keying'], + [systemInit()]: [baseBehaviour, 'disabling', 'toggling', 'representing', 'tooltipping'], + [input()]: [baseBehaviour, 'representing', 'streaming', 'invalidating'], + [detachedFromDom()]: [baseBehaviour, 'representing', 'item-events', 'toolbar-button-events', 'tooltipping'], + [mousedown()]: ['focusing', baseBehaviour, 'item-type-events'], + [touchstart()]: ['focusing', baseBehaviour, 'item-type-events'], + [mouseover()]: ['item-type-events', 'tooltipping'], + [receive()]: ['receiving', 'reflecting', 'tooltipping'] + }), anyValue()), + option$3('domModification') + ]); + const toInfo = (spec) => asRaw('custom.definition', schema$s, spec); + const toDefinition = (detail) => + // EFFICIENCY: Consider not merging here. + ({ + ...detail.dom, + uid: detail.uid, + domChildren: map$2(detail.components, (comp) => comp.element) + }); + const toModification = (detail) => detail.domModification.fold(() => nu$2({}), nu$2); + const toEvents = (info) => info.events; + + const diffKeyValueSet = (newObj, oldObj) => { + const newKeys = keys(newObj); + const oldKeys = keys(oldObj); + const toRemove = difference(oldKeys, newKeys); + const toSet = bifilter(newObj, (v, k) => { + return !has$2(oldObj, k) || v !== oldObj[k]; + }).t; + return { toRemove, toSet }; + }; + const reconcileToDom = (definition, obsoleted) => { + const { class: clazz, style, ...existingAttributes } = clone$2(obsoleted); + const { toSet: attrsToSet, toRemove: attrsToRemove } = diffKeyValueSet(definition.attributes, existingAttributes); + const updateAttrs = () => { + each$1(attrsToRemove, (a) => remove$8(obsoleted, a)); + setAll$1(obsoleted, attrsToSet); + }; + const existingStyles = getAllRaw(obsoleted); + const { toSet: stylesToSet, toRemove: stylesToRemove } = diffKeyValueSet(definition.styles, existingStyles); + const updateStyles = () => { + each$1(stylesToRemove, (s) => remove$6(obsoleted, s)); + setAll(obsoleted, stylesToSet); + }; + const existingClasses = get$7(obsoleted); + const classesToRemove = difference(existingClasses, definition.classes); + const classesToAdd = difference(definition.classes, existingClasses); + const updateClasses = () => { + add$1(obsoleted, classesToAdd); + remove$2(obsoleted, classesToRemove); + }; + const updateHtml = (html) => { + set$8(obsoleted, html); + }; + const updateChildren = () => { + const children = definition.domChildren; + patchDomChildren(obsoleted, children); + }; + const updateValue = () => { + const valueElement = obsoleted; + const value = definition.value.getOrUndefined(); + if (value !== get$5(valueElement)) { + // TINY-8736: Value.set throws an error in case the value is undefined + set$4(valueElement, value ?? ''); + } + }; + updateAttrs(); + updateClasses(); + updateStyles(); + // Patching can only support one form of children, so we only update the html or the children, but never both + definition.innerHtml.fold(updateChildren, updateHtml); + updateValue(); + return obsoleted; + }; + + const introduceToDom = (definition) => { + const subject = SugarElement.fromTag(definition.tag); + setAll$1(subject, definition.attributes); + add$1(subject, definition.classes); + setAll(subject, definition.styles); + // Remember: Order of innerHtml vs children is important. + definition.innerHtml.each((html) => set$8(subject, html)); + // Children are already elements. + const children = definition.domChildren; + append$1(subject, children); + definition.value.each((value) => { + set$4(subject, value); + }); + return subject; + }; + const attemptPatch = (definition, obsoleted) => { + try { + const e = reconcileToDom(definition, obsoleted); + return Optional.some(e); + } + catch { + return Optional.none(); + } + }; + // If a component has both innerHtml and children then we can't patch it + const hasMixedChildren = (definition) => definition.innerHtml.isSome() && definition.domChildren.length > 0; + const renderToDom = (definition, optObsoleted) => { + // If the current tag doesn't match, let's not try to add anything further down the tree. + // If it does match though and we don't have mixed children then attempt to patch attributes etc... + const canBePatched = (candidate) => name$3(candidate) === definition.tag && !hasMixedChildren(definition) && !isPremade(candidate); + const elem = optObsoleted + .filter(canBePatched) + .bind((obsoleted) => attemptPatch(definition, obsoleted)) + .getOrThunk(() => introduceToDom(definition)); + writeOnly(elem, definition.uid); + return elem; + }; + + // This goes through the list of behaviours defined for a particular spec (removing anything + // that has been revoked), and returns the BehaviourType (e.g. Sliding) + const getBehaviours$2 = (spec) => { + const behaviours = get$h(spec, 'behaviours').getOr({}); + return bind$3(keys(behaviours), (name) => { + const behaviour = behaviours[name]; + return isNonNullable(behaviour) ? [behaviour.me] : []; + }); + }; + const generateFrom = (spec, all) => generateFrom$1(spec, all); + const generate$3 = (spec) => { + const all = getBehaviours$2(spec); + return generateFrom(spec, all); + }; + + // This is probably far too complicated. I think DomModification is probably + // questionable as a concept. Maybe it should be deprecated. + const getDomDefinition = (info, bList, bData) => { + // Get the current DOM definition from the spec + const definition = toDefinition(info); + // Get the current DOM modification definition from the spec + const infoModification = toModification(info); + // Treat the DOM modification like it came from a behaviour + const baseModification = { + 'alloy.base.modification': infoModification + }; + // Combine the modifications from any defined behaviours + const modification = bList.length > 0 ? combine$1(bData, baseModification, bList, definition) : infoModification; + // Transform the DOM definition with the combined dom modifications to make a new DOM definition + return merge(definition, modification); + }; + const getEvents = (info, bList, bData) => { + const baseEvents = { + 'alloy.base.behaviour': toEvents(info) + }; + return combine(bData, info.eventOrder, bList, baseEvents).getOrDie(); + }; + const build$2 = (spec, obsoleted) => { + const getMe = () => me; + const systemApi = Cell(singleton); + const info = getOrDie(toInfo(spec)); + const bBlob = generate$3(spec); + const bList = getBehaviours$3(bBlob); + const bData = getData$2(bBlob); + const modDefinition = getDomDefinition(info, bList, bData); + const item = renderToDom(modDefinition, obsoleted); + const events = getEvents(info, bList, bData); + const subcomponents = Cell(info.components); + const connect = (newApi) => { + systemApi.set(newApi); + }; + const disconnect = () => { + systemApi.set(NoContextApi(getMe)); + }; + const syncComponents = () => { + // Update the component list with the current children + const children$1 = children(item); + // INVESTIGATE: Not sure about how to handle text nodes here. + const subs = bind$3(children$1, (child) => systemApi.get().getByDom(child).fold(() => [], pure$2)); + subcomponents.set(subs); + }; + // TYPIFY (any here is for the info.apis() pathway) + const config = (behaviour) => { + const b = bData; + const f = isFunction(b[behaviour.name()]) ? b[behaviour.name()] : () => { + throw new Error('Could not find ' + behaviour.name() + ' in ' + JSON.stringify(spec, null, 2)); + }; + return f(); + }; + const hasConfigured = (behaviour) => isFunction(bData[behaviour.name()]); + const getApis = () => info.apis; + const readState = (behaviourName) => bData[behaviourName]().map((b) => b.state.readState()).getOr('not enabled'); + const me = { + uid: spec.uid, + getSystem: systemApi.get, + config, + hasConfigured, + spec, + readState, + getApis, + connect, + disconnect, + element: item, + syncComponents, + components: subcomponents.get, + events + }; + return me; + }; + + const buildSubcomponents = (spec, obsoleted) => { + const components = get$h(spec, 'components').getOr([]); + return obsoleted.fold(() => map$2(components, build$1), (obs) => map$2(components, (c, i) => { + return buildOrPatch(c, child$2(obs, i)); + })); + }; + const buildFromSpec = (userSpec, obsoleted) => { + const { events: specEvents, ...spec } = make$7(userSpec); + // Build the subcomponents. A spec hierarchy is built from the bottom up. + // obsoleted is used to define which element we are attempting to replace + // so that it might be used to patch the DOM instead of recreate it. + const components = buildSubcomponents(spec, obsoleted); + const completeSpec = { + ...spec, + events: { ...DefaultEvents, ...specEvents }, + components + }; + return Result.value( + // Note, this isn't a spec any more, because it has built children + build$2(completeSpec, obsoleted)); + }; + const text$2 = (textContent) => { + const element = SugarElement.fromText(textContent); + return external({ + element + }); + }; + const external = (spec) => { + const extSpec = asRawOrDie$1('external.component', objOfOnly([ + required$1('element'), + option$3('uid') + ]), spec); + const systemApi = Cell(NoContextApi()); + const connect = (newApi) => { + systemApi.set(newApi); + }; + const disconnect = () => { + systemApi.set(NoContextApi(() => me)); + }; + const uid = extSpec.uid.getOrThunk(() => generate$4('external')); + writeOnly(extSpec.element, uid); + const me = { + uid, + getSystem: systemApi.get, + config: Optional.none, + hasConfigured: never, + connect, + disconnect, + getApis: () => ({}), + element: extSpec.element, + spec, + readState: constant$1('No state'), + syncComponents: noop, + components: constant$1([]), + events: {} + }; + return premade$1(me); + }; + // We experimented with just having a counter for efficiency, but that fails for situations + // where an external JS file is using alloy, and is contained within another + // alloy root container. The ids can conflict, because the counters do not + // know about each other (being parts of separate scripts). + // + // There are other solutions than this ... not sure if they are going to have better performance, though + const uids = generate$4; + const isSketchSpec$1 = (spec) => has$2(spec, 'uid'); + // INVESTIGATE: A better way to provide 'meta-specs' + const buildOrPatch = (spec, obsoleted) => getPremade(spec).getOrThunk(() => { + // EFFICIENCY: Consider not merging here, and passing uid through separately + const userSpecWithUid = isSketchSpec$1(spec) ? spec : { + uid: uids(''), + ...spec + }; + return buildFromSpec(userSpecWithUid, obsoleted).getOrDie(); + }); + const build$1 = (spec) => buildOrPatch(spec, Optional.none()); + const premade = premade$1; + + // Mark this component as busy, or blocked. + const block = (component, config, state, + // This works in conjunction with the 'getRoot' function in the config. To + // attach a blocker component to the dom, ensure that 'getRoot' returns a + // component, and this function returns the specification of the component to + // attach. + getBusySpec) => { + set$9(component.element, 'aria-busy', true); + const root = config.getRoot(component).getOr(component); + const blockerBehaviours = derive$1([ + // Trap the "Tab" key and don't let it escape. + Keying.config({ + mode: 'special', + onTab: () => Optional.some(true), + onShiftTab: () => Optional.some(true) + }), + Focusing.config({}) + ]); + const blockSpec = getBusySpec(root, blockerBehaviours); + const blocker = root.getSystem().build(blockSpec); + Replacing.append(root, premade(blocker)); + if (blocker.hasConfigured(Keying) && config.focus) { + Keying.focusIn(blocker); + } + if (!state.isBlocked()) { + config.onBlock(component); + } + state.blockWith(() => Replacing.remove(root, blocker)); + }; + // Mark this component as unblocked, or not busy. This is a noop on a component + // that isn't blocked. + const unblock = (component, config, state) => { + remove$8(component.element, 'aria-busy'); + if (state.isBlocked()) { + config.onUnblock(component); + } + state.clear(); + }; + const isBlocked = (component, blockingConfig, blockingState) => blockingState.isBlocked(); + + var BlockingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + block: block, + unblock: unblock, + isBlocked: isBlocked + }); + + var BlockingSchema = [ + // The blocking behaviour places a blocking element over the DOM while the + // component is in the blocked state. If a function is provided here that + // returns Some, then the blocking element will be added as a child of the + // element returned. Otherwise, it will be added as a child of the main + // component. + defaultedFunction('getRoot', Optional.none), + // This boolean, if provided, will specify whether the blocking element is + // focused when the component is first blocked + defaultedBoolean('focus', true), + // This function, if provided, will be called any time the component is + // blocked (unless it was already blocked). + onHandler('onBlock'), + // This function, if provided, will be called any time the component is + // unblocked (unless it was already unblocked). + onHandler('onUnblock') + ]; + + const init$f = () => { + const blocker = destroyable(); + const blockWith = (destroy) => { + blocker.set({ destroy }); + }; + return nu$4({ + readState: blocker.isSet, + blockWith, + clear: blocker.clear, + isBlocked: blocker.isSet + }); + }; + + var BlockingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$f + }); + + // Mark a component as able to be "Blocked" or able to enter a busy state. See + // BlockingSchema and BlockingApis for more details on how to configure this. + const Blocking = create$3({ + fields: BlockingSchema, + name: 'blocking', + apis: BlockingApis, + state: BlockingState + }); + + const getCurrent = (component, composeConfig, _composeState) => composeConfig.find(component); + + var ComposeApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + getCurrent: getCurrent + }); + + const ComposeSchema = [ + required$1('find') + ]; + + const Composing = create$3({ + fields: ComposeSchema, + name: 'composing', + apis: ComposeApis + }); + + const getCoupled = (component, coupleConfig, coupleState, name) => coupleState.getOrCreate(component, coupleConfig, name); + const getExistingCoupled = (component, coupleConfig, coupleState, name) => coupleState.getExisting(component, coupleConfig, name); + + var CouplingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + getCoupled: getCoupled, + getExistingCoupled: getExistingCoupled + }); + + var CouplingSchema = [ + requiredOf('others', setOf(Result.value, anyValue())) + ]; + + // Unfortunately, the Coupling APIs currently throw errors when the coupled name + // is not recognised. This is because if the wrong name is used, it is a + // non-recoverable error, and the developer should be notified. However, there are + // better ways to do this: (removing this API and only returning Optionals/Results) + const init$e = () => { + const coupled = {}; + const lookupCoupled = (coupleConfig, coupledName) => { + const available = keys(coupleConfig.others); + if (available.length === 0) { + throw new Error('Cannot find any known coupled components'); + } + else { + return get$h(coupled, coupledName); + } + }; + const getOrCreate = (component, coupleConfig, name) => { + return lookupCoupled(coupleConfig, name).getOrThunk(() => { + // TODO: TINY-9014 Likely type error. coupleConfig.others[key] is + // `() => ((comp: AlloyComponent) => AlloySpec)`, + // but builder is being treated as a `(comp: AlloyComponent) => AlloySpec` + const builder = get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name); + const spec = builder(component); + const built = component.getSystem().build(spec); + coupled[name] = built; + return built; + }); + }; + const getExisting = (component, coupleConfig, name) => { + return lookupCoupled(coupleConfig, name).orThunk(() => { + // Validate we recognise this coupled component's name. + get$h(coupleConfig.others, name).getOrDie('No information found for coupled component: ' + name); + // It's a valid name, so return None, because it hasn't been built yet. + return Optional.none(); + }); + }; + const readState = constant$1({}); + return nu$4({ + readState, + getExisting, + getOrCreate + }); + }; + + var CouplingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$e + }); + + const Coupling = create$3({ + fields: CouplingSchema, + name: 'coupling', + apis: CouplingApis, + state: CouplingState + }); + + // Just use "disabled" attribute for these, not "aria-disabled" + const nativeDisabled = [ + 'input', + 'button', + 'textarea', + 'select' + ]; + const onLoad$5 = (component, disableConfig, disableState) => { + const f = disableConfig.disabled() ? disable : enable; + f(component, disableConfig); + }; + const hasNative = (component, config) => config.useNative === true && contains$2(nativeDisabled, name$3(component.element)); + const nativeIsDisabled = (component) => has$1(component.element, 'disabled'); + const nativeDisable = (component) => { + set$9(component.element, 'disabled', 'disabled'); + }; + const nativeEnable = (component) => { + remove$8(component.element, 'disabled'); + }; + const ariaIsDisabled = (component) => get$g(component.element, 'aria-disabled') === 'true'; + const ariaDisable = (component) => { + set$9(component.element, 'aria-disabled', 'true'); + }; + const ariaEnable = (component) => { + set$9(component.element, 'aria-disabled', 'false'); + }; + const disable = (component, disableConfig, _disableState) => { + disableConfig.disableClass.each((disableClass) => { + add$2(component.element, disableClass); + }); + const f = hasNative(component, disableConfig) ? nativeDisable : ariaDisable; + f(component); + disableConfig.onDisabled(component); + }; + const enable = (component, disableConfig, _disableState) => { + disableConfig.disableClass.each((disableClass) => { + remove$3(component.element, disableClass); + }); + const f = hasNative(component, disableConfig) ? nativeEnable : ariaEnable; + f(component); + disableConfig.onEnabled(component); + }; + const isDisabled$1 = (component, disableConfig) => hasNative(component, disableConfig) ? nativeIsDisabled(component) : ariaIsDisabled(component); + const set$2 = (component, disableConfig, disableState, disabled) => { + const f = disabled ? disable : enable; + f(component, disableConfig); + }; + + var DisableApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + enable: enable, + disable: disable, + isDisabled: isDisabled$1, + onLoad: onLoad$5, + set: set$2 + }); + + const exhibit$5 = (base, disableConfig) => nu$2({ + // Do not add the attribute yet, because it will depend on the node name + // if we use "aria-disabled" or just "disabled" + classes: disableConfig.disabled() ? disableConfig.disableClass.toArray() : [] + }); + const events$f = (disableConfig, disableState) => derive$2([ + abort(execute$5(), (component, _simulatedEvent) => isDisabled$1(component, disableConfig)), + loadEvent(disableConfig, disableState, onLoad$5) + ]); + + var ActiveDisable = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$5, + events: events$f + }); + + var DisableSchema = [ + defaultedFunction('disabled', never), + defaulted('useNative', true), + option$3('disableClass'), + onHandler('onDisabled'), + onHandler('onEnabled') + ]; + + const Disabling = create$3({ + fields: DisableSchema, + name: 'disabling', + active: ActiveDisable, + apis: DisableApis + }); + + const NuPositionCss = (position, left, top, right, bottom) => { + const toPx = (num) => num + 'px'; + return { + position, + left: left.map(toPx), + top: top.map(toPx), + right: right.map(toPx), + bottom: bottom.map(toPx) + }; + }; + const toOptions = (position) => ({ + ...position, + position: Optional.some(position.position) + }); + const applyPositionCss = (element, position) => { + setOptions(element, toOptions(position)); + }; + + const appear = (component, contextualInfo) => { + const elem = component.element; + add$2(elem, contextualInfo.transitionClass); + remove$3(elem, contextualInfo.fadeOutClass); + add$2(elem, contextualInfo.fadeInClass); + contextualInfo.onShow(component); + }; + const disappear = (component, contextualInfo) => { + const elem = component.element; + add$2(elem, contextualInfo.transitionClass); + remove$3(elem, contextualInfo.fadeInClass); + add$2(elem, contextualInfo.fadeOutClass); + contextualInfo.onHide(component); + }; + const isPartiallyVisible = (box, bounds) => box.y < bounds.bottom && box.bottom > bounds.y; + const isTopCompletelyVisible = (box, bounds) => box.y >= bounds.y; + const isBottomCompletelyVisible = (box, bounds) => box.bottom <= bounds.bottom; + const forceTopPosition = (winBox, leftX, viewport) => ({ + location: 'top', + leftX, + topY: viewport.bounds.y - winBox.y + }); + const forceBottomPosition = (winBox, leftX, viewport) => ({ + location: 'bottom', + leftX, + bottomY: winBox.bottom - viewport.bounds.bottom + }); + const getDockedLeftPosition = (bounds) => { + // Essentially, we are just getting the bounding client rect left here, + // because winBox.x will be the scroll value. + return bounds.box.x - bounds.win.x; + }; + const tryDockingPosition = (modes, bounds, viewport) => { + const winBox = bounds.win; + const box = bounds.box; + const leftX = getDockedLeftPosition(bounds); + return findMap(modes, (mode) => { + switch (mode) { + case 'bottom': + return !isBottomCompletelyVisible(box, viewport.bounds) ? Optional.some(forceBottomPosition(winBox, leftX, viewport)) : Optional.none(); + case 'top': + return !isTopCompletelyVisible(box, viewport.bounds) ? Optional.some(forceTopPosition(winBox, leftX, viewport)) : Optional.none(); + default: + return Optional.none(); + } + }).getOr({ + location: 'no-dock' + }); + }; + const isVisibleForModes = (modes, box, viewport) => forall(modes, (mode) => { + switch (mode) { + case 'bottom': + return isBottomCompletelyVisible(box, viewport.bounds); + case 'top': + return isTopCompletelyVisible(box, viewport.bounds); + } + }); + const getXYForRestoring = (pos, viewport) => { + const priorY = viewport.optScrollEnv.fold(constant$1(pos.bounds.y), (scrollEnv) => scrollEnv.scrollElmTop + (pos.bounds.y - scrollEnv.currentScrollTop)); + return SugarPosition(pos.bounds.x, priorY); + }; + const getXYForSaving = (box, viewport) => { + const priorY = viewport.optScrollEnv.fold(constant$1(box.y), (scrollEnv) => box.y + scrollEnv.currentScrollTop - scrollEnv.scrollElmTop); + return SugarPosition(box.x, priorY); + }; + const getPrior = (elem, viewport, state) => state.getInitialPos().map((pos) => { + const xy = getXYForRestoring(pos, viewport); + return { + box: bounds(xy.left, xy.top, get$c(elem), get$d(elem)), + location: pos.location + }; + }); + const storePrior = (elem, box, viewport, state, decision) => { + const xy = getXYForSaving(box, viewport); + const bounds$1 = bounds(xy.left, xy.top, box.width, box.height); + state.setInitialPos({ + style: getAllRaw(elem), + position: get$e(elem, 'position') || 'static', + bounds: bounds$1, + location: decision.location + }); + }; + // When we are using APIs like forceDockToTop, then we only want to store the previous position + // if we weren't already docked. Otherwise, we still want to move the component, but keep its old + // restore values + const storePriorIfNone = (elem, box, viewport, state, decision) => { + state.getInitialPos().fold(() => storePrior(elem, box, viewport, state, decision), () => noop); + }; + const revertToOriginal = (elem, box, state) => state.getInitialPos().bind((position) => { + state.clearInitialPos(); + switch (position.position) { + case 'static': + return Optional.some({ + morph: 'static' + }); + case 'absolute': + const offsetParent = getOffsetParent(elem).getOr(body()); + const offsetBox = box$1(offsetParent); + // Adding the scrollDelta here may not be the right solution. The basic problem is that the + // rest of the code isn't considering whether its absolute or not, and where the offset parent + // is. In the situation where the offset parent is *inside* the scrolling environment, then + // we don't need to consider the scroll, and that's what getXYForRestoring does ... it removes + // the scroll. We don't need to consider the scroll because the sink is already affected by the + // scroll. However, when the sink IS the scroller, its position is not moved by scrolling. But the + // positions of everything inside it needs to consider the scroll. So we add the scroll value. + // + // This might also be a bit naive. It's possible that we need to check that the offsetParent + // is THE scroller, not just that it has a scroll value. For example, if the offset parent + // was the body, and the body had a scroll, this might give unexpected results. That's somewhat + // countered by the fact that if the offset parent is outside the scroller, then you don't really + // have a scrolling environment any more, because the offset parent isn't going to be impacted + // at all by the scroller + const scrollDelta = offsetParent.dom.scrollTop ?? 0; + return Optional.some({ + morph: 'absolute', + positionCss: NuPositionCss('absolute', get$h(position.style, 'left').map((_left) => box.x - offsetBox.x), get$h(position.style, 'top').map((_top) => box.y - offsetBox.y + scrollDelta), get$h(position.style, 'right').map((_right) => offsetBox.right - box.right), get$h(position.style, 'bottom').map((_bottom) => offsetBox.bottom - box.bottom)) + }); + default: + return Optional.none(); + } + }); + const tryMorphToOriginal = (elem, viewport, state) => getPrior(elem, viewport, state) + .filter(({ box }) => isVisibleForModes(state.getModes(), box, viewport)) + .bind(({ box }) => revertToOriginal(elem, box, state)); + const tryDecisionToFixedMorph = (decision) => { + switch (decision.location) { + case 'top': { + // We store our current position so we can revert to it once it's + // visible again. + return Optional.some({ + morph: 'fixed', + positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.some(decision.topY), Optional.none(), Optional.none()) + }); + } + case 'bottom': { + // We store our current position so we can revert to it once it's + // visible again. + return Optional.some({ + morph: 'fixed', + positionCss: NuPositionCss('fixed', Optional.some(decision.leftX), Optional.none(), Optional.none(), Optional.some(decision.bottomY)) + }); + } + default: + return Optional.none(); + } + }; + const tryMorphToFixed = (elem, viewport, state) => { + const box = box$1(elem); + const winBox = win(); + const decision = tryDockingPosition(state.getModes(), { + win: winBox, + box + }, viewport); + if (decision.location === 'top' || decision.location === 'bottom') { + // We are moving from undocked to docked, so store the previous location + // so that we can restore it when we switch out of docking (back to undocked) + storePrior(elem, box, viewport, state, decision); + return tryDecisionToFixedMorph(decision); + } + else { + return Optional.none(); + } + }; + const tryMorphToOriginalOrUpdateFixed = (elem, viewport, state) => { + // When a "docked" element is docked to the top of a scroll container (due to optScrollEnv in + // viewport), we need to reposition its fixed if the scroll container has itself moved its top position. + // This isn't required when the docking is to the top of the window, because the entire window cannot + // be scrolled up and down the page - it is the page. + // + // Imagine a situation where the toolbar has docked to the top of the scroll container, which is at + // y = 200. Now, when the user scrolls the page another 50px down the page, the top of the scroll + // container will now be 150px, but the "fixed" toolbar will still be at "200px". So this is a morph + // from "fixed" to "fixed", but with new coordinates. So if we can't morph to original from "fixed", + // we try to update our "fixed" position (if we have a scrolling environment in the viewport) + return tryMorphToOriginal(elem, viewport, state) + .orThunk(() => { + // Importantly, we don't update our stored position for the element before "docking", because + // this is a transition between "docked" and "docked", not "undocked" and "docked". We want to + // keep our undocked position in our store, not a docked position. + // So we don't change our stored position. We just improve our fixed. + return viewport.optScrollEnv + .bind((_) => getPrior(elem, viewport, state)) + .bind(({ box, location }) => { + const winBox = win(); + const leftX = getDockedLeftPosition({ win: winBox, box }); + // Keep the same docking location + const decision = location === 'top' + ? forceTopPosition(winBox, leftX, viewport) + : forceBottomPosition(winBox, leftX, viewport); + return tryDecisionToFixedMorph(decision); + }); + }); + }; + const tryMorph = (component, viewport, state) => { + const elem = component.element; + const isDocked = is$1(getRaw(elem, 'position'), 'fixed'); + return isDocked + ? tryMorphToOriginalOrUpdateFixed(elem, viewport, state) + : tryMorphToFixed(elem, viewport, state); + }; + // The difference between the "calculate" functions and the "try" functions is that the "try" functions + // will first consider whether there is a need to morph, whereas the "calculate" functions will just + // give you the morph details, bypassing the check to see if it's needed + const calculateMorphToOriginal = (component, viewport, state) => { + const elem = component.element; + return getPrior(elem, viewport, state) + .bind(({ box }) => revertToOriginal(elem, box, state)); + }; + const forceDockWith = (elem, viewport, state, getDecision) => { + const box = box$1(elem); + const winBox = win(); + const leftX = getDockedLeftPosition({ win: winBox, box }); + const decision = getDecision(winBox, leftX, viewport); + if (decision.location === 'bottom' || decision.location === 'top') { + // We only want to store the values if we aren't already docking. If we are already docking, then + // we just want to move the element, without updating where it started originally + storePriorIfNone(elem, box, viewport, state, decision); + return tryDecisionToFixedMorph(decision); + } + else { + return Optional.none(); + } + }; + + const morphToStatic = (component, config, state) => { + state.setDocked(false); + each$1(['left', 'right', 'top', 'bottom', 'position'], (prop) => remove$6(component.element, prop)); + config.onUndocked(component); + }; + const morphToCoord = (component, config, state, position) => { + const isDocked = position.position === 'fixed'; + state.setDocked(isDocked); + applyPositionCss(component.element, position); + const method = isDocked ? config.onDocked : config.onUndocked; + method(component); + }; + const updateVisibility = (component, config, state, viewport, morphToDocked = false) => { + config.contextual.each((contextInfo) => { + // Make the dockable component disappear if the context is outside the viewport + contextInfo.lazyContext(component).each((box) => { + const isVisible = isPartiallyVisible(box, viewport.bounds); + if (isVisible !== state.isVisible()) { + state.setVisible(isVisible); + // If morphing to docked and the context isn't visible then immediately set + // the fadeout class and don't worry about transitioning, as the context + // would never have been in view while docked + if (morphToDocked && !isVisible) { + add$1(component.element, [contextInfo.fadeOutClass]); + contextInfo.onHide(component); + } + else { + const method = isVisible ? appear : disappear; + method(component, contextInfo); + } + } + }); + }); + }; + const applyFixedMorph = (component, config, state, viewport, morph) => { + // This "updateVisibility" call is potentially duplicated with the + // call in refreshInternal for isDocked. We might want to consolidate them. + // The difference between them is the "morphToDocked" flag. + updateVisibility(component, config, state, viewport, true); + morphToCoord(component, config, state, morph.positionCss); + }; + const applyMorph = (component, config, state, viewport, morph) => { + // Apply the morph result depending on its type + switch (morph.morph) { + case 'static': { + return morphToStatic(component, config, state); + } + case 'absolute': { + return morphToCoord(component, config, state, morph.positionCss); + } + case 'fixed': { + return applyFixedMorph(component, config, state, viewport, morph); + } + } + }; + const refreshInternal = (component, config, state) => { + // Absolute coordinates (considers scroll) + const viewport = config.lazyViewport(component); + updateVisibility(component, config, state, viewport); + tryMorph(component, viewport, state).each((morph) => { + applyMorph(component, config, state, viewport, morph); + }); + }; + const resetInternal = (component, config, state) => { + // Morph back to the original position + const elem = component.element; + state.setDocked(false); + const viewport = config.lazyViewport(component); + calculateMorphToOriginal(component, viewport, state).each((staticOrAbsoluteMorph) => { + // This code is very similar to the "applyMorph" function above. The main difference + // is that it doesn't consider fixed position, because something that is docking + // can't currently start with fixed position + switch (staticOrAbsoluteMorph.morph) { + case 'static': { + morphToStatic(component, config, state); + break; + } + case 'absolute': { + morphToCoord(component, config, state, staticOrAbsoluteMorph.positionCss); + break; + } + } + }); + // Remove contextual visibility classes + state.setVisible(true); + config.contextual.each((contextInfo) => { + remove$2(elem, [contextInfo.fadeInClass, contextInfo.fadeOutClass, contextInfo.transitionClass]); + contextInfo.onShow(component); + }); + // Apply docking again to reset the position + refresh$4(component, config, state); + }; + const refresh$4 = (component, config, state) => { + // Ensure the component is attached to the document/world, if not then do nothing as we can't + // check if the component should be docked or not when in a detached state + if (component.getSystem().isConnected()) { + refreshInternal(component, config, state); + } + }; + const reset$1 = (component, config, state) => { + // If the component is not docked then there's no need to reset the state, + // so only reset when docked + if (state.isDocked()) { + resetInternal(component, config, state); + } + }; + const forceDockWithDecision = (getDecision) => (component, config, state) => { + const viewport = config.lazyViewport(component); + const optMorph = forceDockWith(component.element, viewport, state, getDecision); + optMorph.each((morph) => { + // ASSUMPTION: This "applyFixedMorph" sets state.setDocked to true. + applyFixedMorph(component, config, state, viewport, morph); + }); + }; + const forceDockToTop = forceDockWithDecision(forceTopPosition); + const forceDockToBottom = forceDockWithDecision(forceBottomPosition); + const isDocked$2 = (component, config, state) => state.isDocked(); + const setModes = (component, config, state, modes) => state.setModes(modes); + const getModes = (component, config, state) => state.getModes(); + + var DockingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + refresh: refresh$4, + reset: reset$1, + isDocked: isDocked$2, + getModes: getModes, + setModes: setModes, + forceDockToTop: forceDockToTop, + forceDockToBottom: forceDockToBottom + }); + + const events$e = (dockInfo, dockState) => derive$2([ + runOnSource(transitionend(), (component, simulatedEvent) => { + dockInfo.contextual.each((contextInfo) => { + if (has(component.element, contextInfo.transitionClass)) { + remove$2(component.element, [contextInfo.transitionClass, contextInfo.fadeInClass]); + const notify = dockState.isVisible() ? contextInfo.onShown : contextInfo.onHidden; + notify(component); + } + simulatedEvent.stop(); + }); + }), + run$1(windowScroll(), (component, _) => { + refresh$4(component, dockInfo, dockState); + }), + run$1(externalElementScroll(), (component, _) => { + refresh$4(component, dockInfo, dockState); + }), + run$1(windowResize(), (component, _) => { + reset$1(component, dockInfo, dockState); + }) + ]); + + var ActiveDocking = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$e + }); + + var DockingSchema = [ + optionObjOf('contextual', [ + requiredString('fadeInClass'), + requiredString('fadeOutClass'), + requiredString('transitionClass'), + requiredFunction('lazyContext'), + onHandler('onShow'), + onHandler('onShown'), + onHandler('onHide'), + onHandler('onHidden') + ]), + defaultedFunction('lazyViewport', () => ({ + bounds: win(), + optScrollEnv: Optional.none() + })), + defaultedArrayOf('modes', ['top', 'bottom'], string), + onHandler('onDocked'), + onHandler('onUndocked') + ]; + + const init$d = (spec) => { + const docked = Cell(false); + const visible = Cell(true); + const initialBounds = value$2(); + const modes = Cell(spec.modes); + const readState = () => `docked: ${docked.get()}, visible: ${visible.get()}, modes: ${modes.get().join(',')}`; + return nu$4({ + isDocked: docked.get, + setDocked: docked.set, + getInitialPos: initialBounds.get, + setInitialPos: initialBounds.set, + clearInitialPos: initialBounds.clear, + isVisible: visible.get, + setVisible: visible.set, + getModes: modes.get, + setModes: modes.set, + readState + }); + }; + + var DockingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$d + }); + + const Docking = create$3({ + fields: DockingSchema, + name: 'docking', + active: ActiveDocking, + apis: DockingApis, + state: DockingState + }); + + /* + * origin: the position (without scroll) of the offset parent + * scroll: the scrolling position of the window + * + * fixed: the fixed coordinates to show for css + * offset: the absolute coordinates to show for css when inside an offset parent + * absolute: the absolute coordinates to show before considering the offset parent + */ + const adt$4 = Adt.generate([ + { offset: ['x', 'y'] }, + { absolute: ['x', 'y'] }, + { fixed: ['x', 'y'] } + ]); + const subtract = (change) => (point) => point.translate(-change.left, -change.top); + const add = (change) => (point) => point.translate(change.left, change.top); + const transform = (changes) => (x, y) => foldl(changes, (rest, f) => f(rest), SugarPosition(x, y)); + const asFixed = (coord, scroll, origin) => coord.fold( + // offset to fixed + transform([add(origin), subtract(scroll)]), + // absolute to fixed + transform([subtract(scroll)]), + // fixed to fixed + transform([])); + const asAbsolute = (coord, scroll, origin) => coord.fold( + // offset to absolute + transform([add(origin)]), + // absolute to absolute + transform([]), + // fixed to absolute + transform([add(scroll)])); + const asOffset = (coord, scroll, origin) => coord.fold( + // offset to offset + transform([]), + // absolute to offset + transform([subtract(origin)]), + // fixed to offset + transform([add(scroll), subtract(origin)])); + const withinRange = (coord1, coord2, xRange, yRange, scroll, origin) => { + const a1 = asAbsolute(coord1, scroll, origin); + const a2 = asAbsolute(coord2, scroll, origin); + // console.log(`a1.left: ${a1.left}, a2.left: ${a2.left}, leftDelta: ${a1.left - a2.left}, xRange: ${xRange}, lD <= xRange: ${Math.abs(a1.left - a2.left) <= xRange}`); + // console.log(`a1.top: ${a1.top}, a2.top: ${a2.top}, topDelta: ${a1.top - a2.top}, yRange: ${yRange}, lD <= xRange: ${Math.abs(a1.top - a2.top) <= yRange}`); + return Math.abs(a1.left - a2.left) <= xRange && + Math.abs(a1.top - a2.top) <= yRange; + }; + const getDeltas = (coord1, coord2, xRange, yRange, scroll, origin) => { + const a1 = asAbsolute(coord1, scroll, origin); + const a2 = asAbsolute(coord2, scroll, origin); + const left = Math.abs(a1.left - a2.left); + const top = Math.abs(a1.top - a2.top); + return SugarPosition(left, top); + }; + const toStyles = (coord, scroll, origin) => { + const stylesOpt = coord.fold((x, y) => ({ position: Optional.some('absolute'), left: Optional.some(x + 'px'), top: Optional.some(y + 'px') }), // offset + (x, y) => ({ position: Optional.some('absolute'), left: Optional.some((x - origin.left) + 'px'), top: Optional.some((y - origin.top) + 'px') }), // absolute + (x, y) => ({ position: Optional.some('fixed'), left: Optional.some(x + 'px'), top: Optional.some(y + 'px') }) // fixed + ); + return { right: Optional.none(), bottom: Optional.none(), ...stylesOpt }; + }; + const translate$2 = (coord, deltaX, deltaY) => coord.fold((x, y) => offset(x + deltaX, y + deltaY), (x, y) => absolute$1(x + deltaX, y + deltaY), (x, y) => fixed$1(x + deltaX, y + deltaY)); + const absorb = (partialCoord, originalCoord, scroll, origin) => { + const absorbOne = (stencil, nu) => (optX, optY) => { + const original = stencil(originalCoord, scroll, origin); + return nu(optX.getOr(original.left), optY.getOr(original.top)); + }; + return partialCoord.fold(absorbOne(asOffset, offset), absorbOne(asAbsolute, absolute$1), absorbOne(asFixed, fixed$1)); + }; + const offset = adt$4.offset; + const absolute$1 = adt$4.absolute; + const fixed$1 = adt$4.fixed; + + const parseAttrToInt = (element, name) => { + const value = get$g(element, name); + return isUndefined(value) ? NaN : parseInt(value, 10); + }; + // NOTE: Moved from ego with some parameterisation + const get$3 = (component, snapsInfo) => { + const element = component.element; + const x = parseAttrToInt(element, snapsInfo.leftAttr); + const y = parseAttrToInt(element, snapsInfo.topAttr); + return isNaN(x) || isNaN(y) ? Optional.none() : Optional.some(SugarPosition(x, y)); + }; + const set$1 = (component, snapsInfo, pt) => { + const element = component.element; + set$9(element, snapsInfo.leftAttr, pt.left + 'px'); + set$9(element, snapsInfo.topAttr, pt.top + 'px'); + }; + const clear = (component, snapsInfo) => { + const element = component.element; + remove$8(element, snapsInfo.leftAttr); + remove$8(element, snapsInfo.topAttr); + }; + + // Types of coordinates + // SugarLocation: This is the position on the screen including scroll. + // Absolute: This is the css setting that would be applied. Therefore, it subtracts + // the origin of the relative offsetParent. + // Fixed: This is the fixed position. + /* + So in attempt to make this more understandable, let's use offset, absolute, and fixed. + and try and model individual combinators + */ + /* + + Relationships: + - location -> absolute: should just need to subtract the position of the offset parent (origin) + - location -> fixed: subtract the scrolling + - absolute -> fixed: add the origin, and subtract the scrolling + - absolute -> location: add the origin + - fixed -> absolute: add the scrolling, remove the origin + - fixed -> location: add the scrolling + + /* + * When the user is dragging around the element, and it snaps into place, it is important + * for the next movement to be from its pre-snapped location, rather than the snapped location. + * This is because if it is from the snapped location the next delta movement may not actually + * be high enough to get it out of the snap area, and hence, it will just snap again (and again). + */ + // This identifies the position of the draggable element as either its current position, or the position + // that we put on it before we snapped it into place (before dropping). Once it's dropped, the presnap + // position will go away. It is used to avoid the situation where you can't escape the snap unless you + // move the mouse really quickly :) + const getCoords = (component, snapInfo, coord, delta) => get$3(component, snapInfo).fold(() => coord, (fixed) => + // We have a pre-snap position, so we have to apply the delta ourselves + fixed$1(fixed.left + delta.left, fixed.top + delta.top)); + const moveOrSnap = (component, snapInfo, coord, delta, scroll, origin) => { + const newCoord = getCoords(component, snapInfo, coord, delta); + const snap = snapInfo.mustSnap ? findClosestSnap(component, snapInfo, newCoord, scroll, origin) : + findSnap(component, snapInfo, newCoord, scroll, origin); + const fixedCoord = asFixed(newCoord, scroll, origin); + set$1(component, snapInfo, fixedCoord); + return snap.fold(() => ({ + coord: fixed$1(fixedCoord.left, fixedCoord.top), + extra: Optional.none() + }) + // No snap. + // var newfixed = graph.boundToFixed(theatre, element, loc.left, loc.top, fixed.left, fixed.top, height); + // presnaps.set(element, 'fixed', newfixed.left, newfixed.top); + // return { position: 'fixed', left: newfixed.left + 'px', top: newfixed.top + 'px' }; + , (spanned) => ({ + coord: spanned.output, + extra: spanned.extra + })); + }; + const stopDrag = (component, snapInfo) => { + clear(component, snapInfo); + }; + const findMatchingSnap = (snaps, newCoord, scroll, origin) => findMap(snaps, (snap) => { + const sensor = snap.sensor; + const inRange = withinRange(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin); + return inRange ? Optional.some({ + output: absorb(snap.output, newCoord, scroll, origin), + extra: snap.extra + }) : Optional.none(); + }); + const findClosestSnap = (component, snapInfo, newCoord, scroll, origin) => { + // You need to pass in the absX and absY so that they can be used for things which only care about snapping one axis and keeping the other one. + const snaps = snapInfo.getSnapPoints(component); + const matchSnap = findMatchingSnap(snaps, newCoord, scroll, origin); + return matchSnap.orThunk(() => { + const bestSnap = foldl(snaps, (acc, snap) => { + const sensor = snap.sensor; + const deltas = getDeltas(newCoord, sensor, snap.range.left, snap.range.top, scroll, origin); + return acc.deltas.fold(() => ({ + deltas: Optional.some(deltas), + snap: Optional.some(snap) + }), (bestDeltas) => { + const currAvg = (deltas.left + deltas.top) / 2; + const bestAvg = (bestDeltas.left + bestDeltas.top) / 2; + if (currAvg <= bestAvg) { + return { + deltas: Optional.some(deltas), + snap: Optional.some(snap) + }; + } + else { + return acc; + } + }); + }, { + deltas: Optional.none(), + snap: Optional.none() + }); + return bestSnap.snap.map((snap) => ({ + output: absorb(snap.output, newCoord, scroll, origin), + extra: snap.extra + })); + }); + }; + // x: the absolute position.left of the draggable element + // y: the absolute position.top of the draggable element + // deltaX: the amount the mouse has moved horizontally + // deltaY: the amount the mouse has moved vertically + const findSnap = (component, snapInfo, newCoord, scroll, origin) => { + // You need to pass in the absX and absY so that they can be used for things which only care about snapping one axis and keeping the other one. + const snaps = snapInfo.getSnapPoints(component); + // HERE + return findMatchingSnap(snaps, newCoord, scroll, origin); + }; + const snapTo$1 = (snap, scroll, origin) => ({ + // TODO: This looks to be incorrect and needs fixing as DragCoord definitely needs a number + // based drag coord for the second argument here, so this is probably a bug. + coord: absorb(snap.output, snap.output, scroll, origin), + extra: snap.extra + }); + + const snapTo = (component, dragConfig, _state, snap) => { + const target = dragConfig.getTarget(component.element); + if (dragConfig.repositionTarget) { + const doc = owner$4(component.element); + const scroll = get$b(doc); + const origin = getOrigin(target); + const snapPin = snapTo$1(snap, scroll, origin); + const styles = toStyles(snapPin.coord, scroll, origin); + setOptions(target, styles); + } + }; + + var DraggingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + snapTo: snapTo + }); + + const field = (name, forbidden) => defaultedObjOf(name, {}, map$2(forbidden, (f) => forbid(f.name(), 'Cannot configure ' + f.name() + ' for ' + name)).concat([ + customField('dump', identity) + ])); + const get$2 = (data) => data.dump; + const augment = (data, original) => ({ + ...derive$1(original), + ...data.dump + }); + // Is this used? + const SketchBehaviours = { + field, + augment, + get: get$2 + }; + + const base = (partSchemas, partUidsSchemas) => { + const ps = partSchemas.length > 0 ? [ + requiredObjOf('parts', partSchemas) + ] : []; + return ps.concat([ + required$1('uid'), + defaulted('dom', {}), // Maybe get rid of. + defaulted('components', []), + snapshot('originalSpec'), + defaulted('debug.sketcher', {}) + ]).concat(partUidsSchemas); + }; + const asRawOrDie = (label, schema, spec, partSchemas, partUidsSchemas) => { + const baseS = base(partSchemas, partUidsSchemas); + return asRawOrDie$1(label + ' [SpecSchema]', objOfOnly(baseS.concat(schema)), spec); + }; + + const single$1 = (owner, schema, factory, spec) => { + const specWithUid = supplyUid(spec); + const detail = asRawOrDie(owner, schema, specWithUid, [], []); + return factory(detail, specWithUid); + }; + const composite$1 = (owner, schema, partTypes, factory, spec) => { + const specWithUid = supplyUid(spec); + // Identify any information required for external parts + const partSchemas = schemas(partTypes); + // Generate partUids for all parts (external and otherwise) + const partUidsSchema = defaultUidsSchema(partTypes); + const detail = asRawOrDie(owner, schema, specWithUid, partSchemas, [partUidsSchema]); + // Create (internals, externals) substitutions + const subs = substitutes(owner, detail, partTypes); + // Work out the components by substituting internals + const components = components$1(owner, detail, subs.internals()); + return factory(detail, components, specWithUid, subs.externals()); + }; + const hasUid = (spec) => has$2(spec, 'uid'); + const supplyUid = (spec) => { + return hasUid(spec) ? spec : { + ...spec, + uid: generate$4('uid') + }; + }; + + const isSketchSpec = (spec) => { + return spec.uid !== undefined; + }; + const singleSchema = objOfOnly([ + required$1('name'), + required$1('factory'), + required$1('configFields'), + defaulted('apis', {}), + defaulted('extraApis', {}) + ]); + const compositeSchema = objOfOnly([ + required$1('name'), + required$1('factory'), + required$1('configFields'), + required$1('partFields'), + defaulted('apis', {}), + defaulted('extraApis', {}) + ]); + const single = (rawConfig) => { + const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, singleSchema, rawConfig); + const sketch = (spec) => single$1(config.name, config.configFields, config.factory, spec); + const apis = map$1(config.apis, makeApi); + const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k)); + return { + name: config.name, + configFields: config.configFields, + sketch, + ...apis, + ...extraApis + }; + }; + const composite = (rawConfig) => { + const config = asRawOrDie$1('Sketcher for ' + rawConfig.name, compositeSchema, rawConfig); + const sketch = (spec) => composite$1(config.name, config.configFields, config.partFields, config.factory, spec); + // These are constructors that will store their configuration. + const parts = generate$5(config.name, config.partFields); + const apis = map$1(config.apis, makeApi); + const extraApis = map$1(config.extraApis, (f, k) => markAsExtraApi(f, k)); + return { + name: config.name, + partFields: config.partFields, + configFields: config.configFields, + sketch, + parts, + ...apis, + ...extraApis + }; + }; + + const factory$n = (detail) => { + const { attributes, ...domWithoutAttributes } = detail.dom; + return { + uid: detail.uid, + dom: { + tag: 'div', + attributes: { + role: 'presentation', + ...attributes + }, + ...domWithoutAttributes + }, + components: detail.components, + behaviours: get$2(detail.containerBehaviours), + events: detail.events, + domModification: detail.domModification, + eventOrder: detail.eventOrder + }; + }; + const Container = single({ + name: 'Container', + factory: factory$n, + configFields: [ + defaulted('components', []), + field('containerBehaviours', []), + // TODO: Deprecate + defaulted('events', {}), + defaulted('domModification', {}), + defaulted('eventOrder', {}) + ] + }); + + const initialAttribute = 'data-initial-z-index'; + // We have to alter the z index of the alloy root of the blocker so that + // it can have a z-index high enough to act as the "blocker". Just before + // discarding it, we need to reset those z-indices back to what they + // were. ASSUMPTION: the blocker has been added as a direct child of the root + const resetZIndex = (blocker) => { + parent(blocker.element).filter(isElement$1).each((root) => { + getOpt(root, initialAttribute).fold(() => remove$6(root, 'z-index'), (zIndex) => set$7(root, 'z-index', zIndex)); + remove$8(root, initialAttribute); + }); + }; + const changeZIndex = (blocker) => { + parent(blocker.element).filter(isElement$1).each((root) => { + getRaw(root, 'z-index').each((zindex) => { + set$9(root, initialAttribute, zindex); + }); + // Used to be a really high number, but it probably just has + // to match the blocker + set$7(root, 'z-index', get$e(blocker.element, 'z-index')); + }); + }; + const instigate = (anyComponent, blocker) => { + anyComponent.getSystem().addToGui(blocker); + changeZIndex(blocker); + }; + const discard = (blocker) => { + resetZIndex(blocker); + blocker.getSystem().removeFromGui(blocker); + }; + const createComponent = (component, blockerClass, blockerEvents) => component.getSystem().build(Container.sketch({ + dom: { + // Probably consider doing with classes? + styles: { + 'left': '0px', + 'top': '0px', + 'width': '100%', + 'height': '100%', + 'position': 'fixed', + 'z-index': '1000000000000000' + }, + classes: [blockerClass] + }, + events: blockerEvents + })); + + var SnapSchema = optionObjOf('snaps', [ + required$1('getSnapPoints'), + onHandler('onSensor'), + required$1('leftAttr'), + required$1('topAttr'), + defaulted('lazyViewport', win), + defaulted('mustSnap', false) + ]); + + const schema$r = [ + // Is this used? + defaulted('useFixed', never), + required$1('blockerClass'), + defaulted('getTarget', identity), + defaulted('onDrag', noop), + defaulted('repositionTarget', true), + defaulted('onDrop', noop), + defaultedFunction('getBounds', win), + SnapSchema + ]; + + const getCurrentCoord = (target) => lift3(getRaw(target, 'left'), getRaw(target, 'top'), getRaw(target, 'position'), (left, top, position) => { + const nu = position === 'fixed' ? fixed$1 : offset; + return nu(parseInt(left, 10), parseInt(top, 10)); + }).getOrThunk(() => { + const location = absolute$3(target); + return absolute$1(location.left, location.top); + }); + const clampCoords = (component, coords, scroll, origin, startData) => { + const bounds = startData.bounds; + const absoluteCoord = asAbsolute(coords, scroll, origin); + const newX = clamp(absoluteCoord.left, bounds.x, bounds.x + bounds.width - startData.width); + const newY = clamp(absoluteCoord.top, bounds.y, bounds.y + bounds.height - startData.height); + const newCoords = absolute$1(newX, newY); + // Translate the absolute coord back into the previous type + return coords.fold( + // offset + () => { + const offset$1 = asOffset(newCoords, scroll, origin); + return offset(offset$1.left, offset$1.top); + }, + // absolute + constant$1(newCoords), + // fixed + () => { + const fixed = asFixed(newCoords, scroll, origin); + return fixed$1(fixed.left, fixed.top); + }); + }; + const calcNewCoord = (component, optSnaps, currentCoord, scroll, origin, delta, startData) => { + const newCoord = optSnaps.fold(() => { + // When not docking, use fixed coordinates. + const translated = translate$2(currentCoord, delta.left, delta.top); + const fixedCoord = asFixed(translated, scroll, origin); + return fixed$1(fixedCoord.left, fixedCoord.top); + }, (snapInfo) => { + const snapping = moveOrSnap(component, snapInfo, currentCoord, delta, scroll, origin); + snapping.extra.each((extra) => { + snapInfo.onSensor(component, extra); + }); + return snapping.coord; + }); + // Clamp the coords so that they are within the bounds + return clampCoords(component, newCoord, scroll, origin, startData); + }; + const dragBy = (component, dragConfig, startData, delta) => { + const target = dragConfig.getTarget(component.element); + if (dragConfig.repositionTarget) { + const doc = owner$4(component.element); + const scroll = get$b(doc); + const origin = getOrigin(target); + const currentCoord = getCurrentCoord(target); + const newCoord = calcNewCoord(component, dragConfig.snaps, currentCoord, scroll, origin, delta, startData); + const styles = toStyles(newCoord, scroll, origin); + setOptions(target, styles); + } + // NOTE: On drag just goes with the original delta. It does not know about snapping. + dragConfig.onDrag(component, target, delta); + }; + + const calcStartData = (dragConfig, comp) => ({ + bounds: dragConfig.getBounds(), + height: getOuter$1(comp.element), + width: getOuter(comp.element) + }); + const move = (component, dragConfig, dragState, dragMode, event) => { + const delta = dragState.update(dragMode, event); + const dragStartData = dragState.getStartData().getOrThunk(() => calcStartData(dragConfig, component)); + delta.each((dlt) => { + dragBy(component, dragConfig, dragStartData, dlt); + }); + }; + const stop = (component, blocker, dragConfig, dragState) => { + blocker.each(discard); + dragConfig.snaps.each((snapInfo) => { + stopDrag(component, snapInfo); + }); + const target = dragConfig.getTarget(component.element); + dragState.reset(); + dragConfig.onDrop(component, target); + }; + const handlers = (events) => (dragConfig, dragState) => { + const updateStartState = (comp) => { + dragState.setStartData(calcStartData(dragConfig, comp)); + }; + return derive$2([ + run$1(windowScroll(), (comp) => { + // Only update if we have some start data + dragState.getStartData().each(() => updateStartState(comp)); + }), + ...events(dragConfig, dragState, updateStartState) + ]); + }; + + const init$c = (dragApi) => derive$2([ + // When the user clicks on the blocker, something has probably gone slightly + // wrong, so we'll just drop for safety. The blocker should really only + // be there when the mouse is already down and not released, so a 'click' + run$1(mousedown(), dragApi.forceDrop), + // When the user releases the mouse on the blocker, that is a drop + run$1(mouseup(), dragApi.drop), + // As the user moves the mouse around (while pressed down), we move the + // component around + run$1(mousemove(), (comp, simulatedEvent) => { + dragApi.move(simulatedEvent.event); + }), + // When the use moves outside the range, schedule a block to occur but + // give it a chance to be cancelled. + run$1(mouseout(), dragApi.delayDrop) + ]); + + const getData$1 = (event) => Optional.from(SugarPosition(event.x, event.y)); + // When dragging with the mouse, the delta is simply the difference + // between the two position (previous/old and next/nu) + const getDelta$1 = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top); + + var MouseData = /*#__PURE__*/Object.freeze({ + __proto__: null, + getData: getData$1, + getDelta: getDelta$1 + }); + + const events$d = (dragConfig, dragState, updateStartState) => [ + run$1(mousedown(), (component, simulatedEvent) => { + const raw = simulatedEvent.event.raw; + if (raw.button !== 0) { + return; + } + simulatedEvent.stop(); + const stop$1 = () => stop(component, Optional.some(blocker), dragConfig, dragState); + // If the user has moved something outside the area, and has not come back within + // 200 ms, then drop + const delayDrop = DelayedFunction(stop$1, 200); + const dragApi = { + drop: stop$1, + delayDrop: delayDrop.schedule, + forceDrop: stop$1, + move: (event) => { + // Stop any pending drops caused by mouseout + delayDrop.cancel(); + move(component, dragConfig, dragState, MouseData, event); + } + }; + const blocker = createComponent(component, dragConfig.blockerClass, init$c(dragApi)); + const start = () => { + updateStartState(component); + instigate(component, blocker); + }; + start(); + }) + ]; + const schema$q = [ + ...schema$r, + output$1('dragger', { + handlers: handlers(events$d) + }) + ]; + + const init$b = (dragApi) => derive$2([ + // When the user taps on the blocker, something has probably gone slightly + // wrong, so we'll just drop for safety. The blocker should really only + // be there when their finger is already down and not released, so a 'tap' + run$1(touchstart(), dragApi.forceDrop), + // When the user releases their finger on the blocker, that is a drop + run$1(touchend(), dragApi.drop), + run$1(touchcancel(), dragApi.drop), + // As the user moves their finger around (while pressed down), we move the + // component around + run$1(touchmove(), (comp, simulatedEvent) => { + dragApi.move(simulatedEvent.event); + }) + ]); + + const getDataFrom = (touches) => { + const touch = touches[0]; + return Optional.some(SugarPosition(touch.clientX, touch.clientY)); + }; + const getData = (event) => { + const raw = event.raw; + const touches = raw.touches; + return touches.length === 1 ? getDataFrom(touches) : Optional.none(); + }; + // When dragging the touch, the delta is simply the difference + // between the two touch positions (previous/old and next/nu) + const getDelta = (old, nu) => SugarPosition(nu.left - old.left, nu.top - old.top); + + var TouchData = /*#__PURE__*/Object.freeze({ + __proto__: null, + getData: getData, + getDelta: getDelta + }); + + const events$c = (dragConfig, dragState, updateStartState) => { + const blockerSingleton = value$2(); + const stopBlocking = (component) => { + stop(component, blockerSingleton.get(), dragConfig, dragState); + blockerSingleton.clear(); + }; + // Android fires events on the component at all times, while iOS initially fires on the component + // but once moved off the component then fires on the element behind. As such we need to use + // a blocker and then listen to both touchmove/touchend on both the component and blocker. + return [ + run$1(touchstart(), (component, simulatedEvent) => { + simulatedEvent.stop(); + const stop = () => stopBlocking(component); + const dragApi = { + drop: stop, + // delayDrop is not used by touch + delayDrop: noop, + forceDrop: stop, + move: (event) => { + move(component, dragConfig, dragState, TouchData, event); + } + }; + const blocker = createComponent(component, dragConfig.blockerClass, init$b(dragApi)); + blockerSingleton.set(blocker); + const start = () => { + updateStartState(component); + instigate(component, blocker); + }; + start(); + }), + run$1(touchmove(), (component, simulatedEvent) => { + simulatedEvent.stop(); + move(component, dragConfig, dragState, TouchData, simulatedEvent.event); + }), + run$1(touchend(), (component, simulatedEvent) => { + simulatedEvent.stop(); + stopBlocking(component); + }), + run$1(touchcancel(), stopBlocking) + ]; + }; + const schema$p = [ + ...schema$r, + output$1('dragger', { + handlers: handlers(events$c) + }) + ]; + + const events$b = (dragConfig, dragState, updateStartState) => [ + ...events$d(dragConfig, dragState, updateStartState), + ...events$c(dragConfig, dragState, updateStartState) + ]; + const schema$o = [ + ...schema$r, + output$1('dragger', { + handlers: handlers(events$b) + }) + ]; + + const mouse = schema$q; + const touch = schema$p; + const mouseOrTouch = schema$o; + + var DraggingBranches = /*#__PURE__*/Object.freeze({ + __proto__: null, + mouse: mouse, + touch: touch, + mouseOrTouch: mouseOrTouch + }); + + // NOTE: mode refers to the way that information is retrieved from + // the user interaction. It can be things like MouseData, TouchData etc. + const init$a = () => { + // Dragging operates on the difference between the previous user + // interaction and the next user interaction. Therefore, we store + // the previous interaction so that we can compare it. + let previous = Optional.none(); + // Dragging requires calculating the bounds, so we store that data initially + // to reduce the amount of computation each mouse movement + let startData = Optional.none(); + const reset = () => { + previous = Optional.none(); + startData = Optional.none(); + }; + // Return position delta between previous position and nu position, + // or None if this is the first. Set the previous position to nu. + const calculateDelta = (mode, nu) => { + const result = previous.map((old) => mode.getDelta(old, nu)); + previous = Optional.some(nu); + return result; + }; + // NOTE: This dragEvent is the DOM touch event or mouse event + const update = (mode, dragEvent) => mode.getData(dragEvent).bind((nuData) => calculateDelta(mode, nuData)); + const setStartData = (data) => { + startData = Optional.some(data); + }; + const getStartData = () => startData; + const readState = constant$1({}); + return nu$4({ + readState, + reset, + update, + getStartData, + setStartData + }); + }; + + var DragState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$a + }); + + const Dragging = createModes({ + branchKey: 'mode', + branches: DraggingBranches, + name: 'dragging', + active: { + events: (dragConfig, dragState) => { + const dragger = dragConfig.dragger; + return dragger.handlers(dragConfig, dragState); + } + }, + extra: { + // Extra. Does not need component as input. + snap: (sConfig) => ({ + sensor: sConfig.sensor, + range: sConfig.range, + output: sConfig.output, + extra: Optional.from(sConfig.extra) + }) + }, + state: DragState, + apis: DraggingApis + }); + + const ariaElements = [ + 'input', + 'textarea' + ]; + const isAriaElement = (elem) => { + const name = name$3(elem); + return contains$2(ariaElements, name); + }; + const markValid = (component, invalidConfig) => { + const elem = invalidConfig.getRoot(component).getOr(component.element); + remove$3(elem, invalidConfig.invalidClass); + invalidConfig.notify.each((notifyInfo) => { + if (isAriaElement(component.element)) { + set$9(component.element, 'aria-invalid', false); + } + notifyInfo.getContainer(component).each((container) => { + set$8(container, notifyInfo.validHtml); + }); + notifyInfo.onValid(component); + }); + }; + const markInvalid = (component, invalidConfig, invalidState, text) => { + const elem = invalidConfig.getRoot(component).getOr(component.element); + add$2(elem, invalidConfig.invalidClass); + invalidConfig.notify.each((notifyInfo) => { + if (isAriaElement(component.element)) { + set$9(component.element, 'aria-invalid', true); + } + notifyInfo.getContainer(component).each((container) => { + // TODO: Should we just use Text here, not HTML? + set$8(container, text); + }); + notifyInfo.onInvalid(component, text); + }); + }; + const query = (component, invalidConfig, _invalidState) => invalidConfig.validator.fold(() => Future.pure(Result.value(true)), (validatorInfo) => validatorInfo.validate(component)); + const run = (component, invalidConfig, invalidState) => { + invalidConfig.notify.each((notifyInfo) => { + notifyInfo.onValidate(component); + }); + return query(component, invalidConfig).map((valid) => { + if (component.getSystem().isConnected()) { + return valid.fold((err) => { + markInvalid(component, invalidConfig, invalidState, err); + return Result.error(err); + }, (v) => { + markValid(component, invalidConfig); + return Result.value(v); + }); + } + else { + return Result.error('No longer in system'); + } + }); + }; + const isInvalid = (component, invalidConfig) => { + const elem = invalidConfig.getRoot(component).getOr(component.element); + return has(elem, invalidConfig.invalidClass); + }; + + var InvalidateApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + markValid: markValid, + markInvalid: markInvalid, + query: query, + run: run, + isInvalid: isInvalid + }); + + const events$a = (invalidConfig, invalidState) => invalidConfig.validator.map((validatorInfo) => derive$2([ + run$1(validatorInfo.onEvent, (component) => { + run(component, invalidConfig, invalidState).get(identity); + }) + ].concat(validatorInfo.validateOnLoad ? [ + runOnAttached((component) => { + run(component, invalidConfig, invalidState).get(noop); + }) + ] : []))).getOr({}); + + var ActiveInvalidate = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$a + }); + + var InvalidateSchema = [ + required$1('invalidClass'), + defaulted('getRoot', Optional.none), + // TODO: Completely rework the notify API + optionObjOf('notify', [ + defaulted('aria', 'alert'), + // Maybe we should use something else. + defaulted('getContainer', Optional.none), + defaulted('validHtml', ''), + onHandler('onValid'), + onHandler('onInvalid'), + onHandler('onValidate') + ]), + optionObjOf('validator', [ + required$1('validate'), + defaulted('onEvent', 'input'), + defaulted('validateOnLoad', true) + ]) + ]; + + const onLoad$4 = (component, repConfig, repState) => { + repConfig.store.manager.onLoad(component, repConfig, repState); + }; + const onUnload$2 = (component, repConfig, repState) => { + repConfig.store.manager.onUnload(component, repConfig, repState); + }; + const setValue$3 = (component, repConfig, repState, data) => { + repConfig.store.manager.setValue(component, repConfig, repState, data); + }; + const getValue$3 = (component, repConfig, repState) => repConfig.store.manager.getValue(component, repConfig, repState); + const getState$2 = (component, repConfig, repState) => repState; + + var RepresentApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + onLoad: onLoad$4, + onUnload: onUnload$2, + setValue: setValue$3, + getValue: getValue$3, + getState: getState$2 + }); + + const events$9 = (repConfig, repState) => { + const es = repConfig.resetOnDom ? [ + runOnAttached((comp, _se) => { + onLoad$4(comp, repConfig, repState); + }), + runOnDetached((comp, _se) => { + onUnload$2(comp, repConfig, repState); + }) + ] : [ + loadEvent(repConfig, repState, onLoad$4) + ]; + return derive$2(es); + }; + + var ActiveRepresenting = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$9 + }); + + const memory$1 = () => { + const data = Cell(null); + const readState = () => ({ + mode: 'memory', + value: data.get() + }); + const isNotSet = () => data.get() === null; + const clear = () => { + data.set(null); + }; + return nu$4({ + set: data.set, + get: data.get, + isNotSet, + clear, + readState + }); + }; + const manual = () => { + const readState = noop; + return nu$4({ + readState + }); + }; + const dataset = () => { + const dataByValue = Cell({}); + const dataByText = Cell({}); + const readState = () => ({ + mode: 'dataset', + dataByValue: dataByValue.get(), + dataByText: dataByText.get() + }); + const clear = () => { + dataByValue.set({}); + dataByText.set({}); + }; + // itemString can be matching value or text. + // TODO: type problem - impossible to correctly return value when type parameter only exists in return type + const lookup = (itemString) => get$h(dataByValue.get(), itemString).orThunk(() => get$h(dataByText.get(), itemString)); + const update = (items) => { + const currentDataByValue = dataByValue.get(); + const currentDataByText = dataByText.get(); + const newDataByValue = {}; + const newDataByText = {}; + each$1(items, (item) => { + newDataByValue[item.value] = item; + get$h(item, 'meta').each((meta) => { + get$h(meta, 'text').each((text) => { + newDataByText[text] = item; + }); + }); + }); + dataByValue.set({ + ...currentDataByValue, + ...newDataByValue + }); + dataByText.set({ + ...currentDataByText, + ...newDataByText + }); + }; + return nu$4({ + readState, + lookup, + update, + clear + }); + }; + const init$9 = (spec) => spec.store.manager.state(spec); + + var RepresentState = /*#__PURE__*/Object.freeze({ + __proto__: null, + memory: memory$1, + dataset: dataset, + manual: manual, + init: init$9 + }); + + const setValue$2 = (component, repConfig, repState, data) => { + const store = repConfig.store; + repState.update([data]); + store.setValue(component, data); + repConfig.onSetValue(component, data); + }; + const getValue$2 = (component, repConfig, repState) => { + const store = repConfig.store; + const key = store.getDataKey(component); + return repState.lookup(key).getOrThunk(() => store.getFallbackEntry(key)); + }; + const onLoad$3 = (component, repConfig, repState) => { + const store = repConfig.store; + store.initialValue.each((data) => { + setValue$2(component, repConfig, repState, data); + }); + }; + const onUnload$1 = (component, repConfig, repState) => { + repState.clear(); + }; + var DatasetStore = [ + option$3('initialValue'), + required$1('getFallbackEntry'), + required$1('getDataKey'), + required$1('setValue'), + output$1('manager', { + setValue: setValue$2, + getValue: getValue$2, + onLoad: onLoad$3, + onUnload: onUnload$1, + state: dataset + }) + ]; + + const getValue$1 = (component, repConfig, _repState) => repConfig.store.getValue(component); + const setValue$1 = (component, repConfig, _repState, data) => { + repConfig.store.setValue(component, data); + repConfig.onSetValue(component, data); + }; + const onLoad$2 = (component, repConfig, _repState) => { + repConfig.store.initialValue.each((data) => { + repConfig.store.setValue(component, data); + }); + }; + var ManualStore = [ + required$1('getValue'), + defaulted('setValue', noop), + option$3('initialValue'), + output$1('manager', { + setValue: setValue$1, + getValue: getValue$1, + onLoad: onLoad$2, + onUnload: noop, + state: NoState.init + }) + ]; + + const setValue = (component, repConfig, repState, data) => { + repState.set(data); + repConfig.onSetValue(component, data); + }; + const getValue = (component, repConfig, repState) => repState.get(); + const onLoad$1 = (component, repConfig, repState) => { + repConfig.store.initialValue.each((initVal) => { + if (repState.isNotSet()) { + repState.set(initVal); + } + }); + }; + const onUnload = (component, repConfig, repState) => { + repState.clear(); + }; + var MemoryStore = [ + option$3('initialValue'), + output$1('manager', { + setValue, + getValue, + onLoad: onLoad$1, + onUnload, + state: memory$1 + }) + ]; + + var RepresentSchema = [ + defaultedOf('store', { mode: 'memory' }, choose$1('mode', { + memory: MemoryStore, + manual: ManualStore, + dataset: DatasetStore + })), + onHandler('onSetValue'), + defaulted('resetOnDom', false) + ]; + + // The self-reference is clumsy. + const Representing = create$3({ + fields: RepresentSchema, + name: 'representing', + active: ActiveRepresenting, + apis: RepresentApis, + extra: { + setValueFrom: (component, source) => { + const value = Representing.getValue(source); + Representing.setValue(component, value); + } + }, + state: RepresentState + }); + + const Invalidating = create$3({ + fields: InvalidateSchema, + name: 'invalidating', + active: ActiveInvalidate, + apis: InvalidateApis, + extra: { + // Note, this requires representing to be on the validatee + validation: (validator) => { + return (component) => { + const v = Representing.getValue(component); + return Future.pure(validator(v)); + }; + } + } + }); + + const exhibit$4 = (base, posConfig) => nu$2({ + classes: [], + styles: posConfig.useFixed() ? {} : { position: 'relative' } + }); + + var ActivePosition = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$4 + }); + + const adt$3 = Adt.generate([ + { none: [] }, + { relative: ['x', 'y', 'width', 'height'] }, + { fixed: ['x', 'y', 'width', 'height'] } + ]); + const positionWithDirection = (posName, decision, x, y, width, height) => { + const decisionRect = decision.rect; + const decisionX = decisionRect.x - x; + const decisionY = decisionRect.y - y; + const decisionWidth = decisionRect.width; + const decisionHeight = decisionRect.height; + const decisionRight = width - (decisionX + decisionWidth); + const decisionBottom = height - (decisionY + decisionHeight); + const left = Optional.some(decisionX); + const top = Optional.some(decisionY); + const right = Optional.some(decisionRight); + const bottom = Optional.some(decisionBottom); + const none = Optional.none(); + return cata$1(decision.direction, () => NuPositionCss(posName, left, top, none, none), // southeast + () => NuPositionCss(posName, none, top, right, none), // southwest + () => NuPositionCss(posName, left, none, none, bottom), // northeast + () => NuPositionCss(posName, none, none, right, bottom), // northwest + () => NuPositionCss(posName, left, top, none, none), // south + () => NuPositionCss(posName, left, none, none, bottom), // north + () => NuPositionCss(posName, left, top, none, none), // east + () => NuPositionCss(posName, none, top, right, none) // west + ); + }; + const reposition = (origin, decision) => origin.fold(() => { + const decisionRect = decision.rect; + return NuPositionCss('absolute', Optional.some(decisionRect.x), Optional.some(decisionRect.y), Optional.none(), Optional.none()); + }, (x, y, width, height) => { + return positionWithDirection('absolute', decision, x, y, width, height); + }, (x, y, width, height) => { + return positionWithDirection('fixed', decision, x, y, width, height); + }); + const toBox = (origin, element) => { + const rel = curry(find$2, element); + const position = origin.fold(rel, rel, () => { + const scroll = get$b(); + // TODO: Make adding the scroll in OuterPosition.find optional. + return find$2(element).translate(-scroll.left, -scroll.top); + }); + const width = getOuter(element); + const height = getOuter$1(element); + return bounds(position.left, position.top, width, height); + }; + const viewport = (origin, optBounds) => optBounds.fold( + /* There are no bounds supplied */ + () => origin.fold(win, win, bounds), (bounds$1) => + /* Use any bounds supplied or remove the scroll position of the bounds for fixed. */ + origin.fold(constant$1(bounds$1), constant$1(bounds$1), () => { + const pos = translate$1(origin, bounds$1.x, bounds$1.y); + return bounds(pos.left, pos.top, bounds$1.width, bounds$1.height); + })); + const translate$1 = (origin, x, y) => { + const pos = SugarPosition(x, y); + const removeScroll = () => { + const outerScroll = get$b(); + return pos.translate(-outerScroll.left, -outerScroll.top); + }; + // This could use cata if it wasn't a circular reference + return origin.fold(constant$1(pos), constant$1(pos), removeScroll); + }; + const cata = (subject, onNone, onRelative, onFixed) => subject.fold(onNone, onRelative, onFixed); + adt$3.none; + const relative = adt$3.relative; + const fixed = adt$3.fixed; + + const anchor = (anchorBox, origin) => ({ + anchorBox, + origin + }); + const box = (anchorBox, origin) => anchor(anchorBox, origin); + + const adt$2 = Adt.generate([ + { fit: ['reposition'] }, + { nofit: ['reposition', 'visibleW', 'visibleH', 'isVisible'] } + ]); + /** + * This will attempt to determine if the box will fit within the specified bounds or if it needs to be repositioned. + * It will return the following details: + * - if the original rect was in bounds (originInBounds & sizeInBounds). This is used to determine if we fitted + * without having to make adjustments. + * - the height and width that would be visible in the original location. (ie the overlap between the rect and + * the bounds or the distance between the boxes if there is no overlap) + */ + const determinePosition = (box, bounds) => { + const { x: boundsX, y: boundsY, right: boundsRight, bottom: boundsBottom } = bounds; + const { x, y, right, bottom, width, height } = box; + // simple checks for "is the top left inside the view" + const xInBounds = x >= boundsX && x <= boundsRight; + const yInBounds = y >= boundsY && y <= boundsBottom; + const originInBounds = xInBounds && yInBounds; + // simple checks for "is the bottom right inside the view" + const rightInBounds = right <= boundsRight && right >= boundsX; + const bottomInBounds = bottom <= boundsBottom && bottom >= boundsY; + const sizeInBounds = rightInBounds && bottomInBounds; + // measure how much of the width and height are visible. This should never be larger than the actual width or height + // however it can be a negative value when offscreen. These values are generally are only needed for the "nofit" case + const visibleW = Math.min(width, x >= boundsX ? boundsRight - x : right - boundsX); + const visibleH = Math.min(height, y >= boundsY ? boundsBottom - y : bottom - boundsY); + return { + originInBounds, + sizeInBounds, + visibleW, + visibleH + }; + }; + /** + * This will attempt to calculate and adjust the position of the box so that is stays within the specified bounds. + * The end result will be a new restricted box of where it can safely be placed within the bounds. + */ + const calcReposition = (box, bounds$1) => { + const { x: boundsX, y: boundsY, right: boundsRight, bottom: boundsBottom } = bounds$1; + const { x, y, width, height } = box; + // measure the maximum x and y taking into account the height and width of the box + const maxX = Math.max(boundsX, boundsRight - width); + const maxY = Math.max(boundsY, boundsBottom - height); + // Futz with the X value to ensure that we're not off the left or right of the screen + const restrictedX = clamp(x, boundsX, maxX); + // Futz with the Y value to ensure that we're not off the top or bottom of the screen + const restrictedY = clamp(y, boundsY, maxY); + // Determine the new height and width based on the restricted X/Y to keep the element in bounds + const restrictedWidth = Math.min(restrictedX + width, boundsRight) - restrictedX; + const restrictedHeight = Math.min(restrictedY + height, boundsBottom) - restrictedY; + return bounds(restrictedX, restrictedY, restrictedWidth, restrictedHeight); + }; + /** + * Determine the maximum height and width available for where the box is positioned in the bounds, making sure + * to account for which direction it's rendering in. + */ + const calcMaxSizes = (direction, box, bounds) => { + // Futz with the "height" of the popup to ensure if it doesn't fit it's capped at the available height. + const upAvailable = constant$1(box.bottom - bounds.y); + const downAvailable = constant$1(bounds.bottom - box.y); + const maxHeight = cataVertical(direction, downAvailable, /* middle */ downAvailable, upAvailable); + // Futz with the "width" of the popup to ensure if it doesn't fit it's capped at the available width. + const westAvailable = constant$1(box.right - bounds.x); + const eastAvailable = constant$1(bounds.right - box.x); + const maxWidth = cataHorizontal(direction, eastAvailable, /* middle */ eastAvailable, westAvailable); + return { + maxWidth, + maxHeight + }; + }; + const attempt = (candidate, width, height, bounds$1) => { + const bubble = candidate.bubble; + const bubbleOffset = bubble.offset; + // adjust the bounds to account for the layout and bubble restrictions + const adjustedBounds = adjustBounds(bounds$1, candidate.restriction, bubbleOffset); + // candidate position is excluding the bubble, so add those values as well + const newX = candidate.x + bubbleOffset.left; + const newY = candidate.y + bubbleOffset.top; + const box = bounds(newX, newY, width, height); + // determine the position of the box in relation to the bounds + const { originInBounds, sizeInBounds, visibleW, visibleH } = determinePosition(box, adjustedBounds); + // restrict the box if it won't fit in the bounds + const fits = originInBounds && sizeInBounds; + const fittedBox = fits ? box : calcReposition(box, adjustedBounds); + // Determine if the box is at least partly visible in the bounds after applying the restrictions + const isPartlyVisible = fittedBox.width > 0 && fittedBox.height > 0; + // Determine the maximum height and width available in the bounds + const { maxWidth, maxHeight } = calcMaxSizes(candidate.direction, fittedBox, bounds$1); + const reposition = { + rect: fittedBox, + maxHeight, + maxWidth, + direction: candidate.direction, + placement: candidate.placement, + classes: { + on: bubble.classesOn, + off: bubble.classesOff + }, + layout: candidate.label, + testY: newY + }; + // useful debugging that I don't want to lose + // console.log(candidate.label); + // console.table([{ + // newY, + // limitY: fittedBox.y, + // boundsY: bounds.y, + // boundsBottom: bounds.bottom, + // newX, + // limitX: fittedBox.x, + // boundsX: bounds.x, + // boundsRight: bounds.right, + // candidateX: candidate.x, + // candidateY: candidate.y, + // width, + // height, + // isPartlyVisible + // }]); + // console.log(`maxWidth: ${maxWidth}, visibleW: ${visibleW}`); + // console.log(`maxHeight: ${maxHeight}, visibleH: ${visibleH}`); + // console.log('originInBounds:', originInBounds); + // console.log('sizeInBounds:', sizeInBounds); + // console.log(originInBounds && sizeInBounds ? 'fit' : 'nofit'); + // Take special note that we don't use the futz values in the nofit case; whether this position is a good fit is separate + // to ensuring that if we choose it the popup is actually on screen properly. + return fits || candidate.alwaysFit ? adt$2.fit(reposition) : adt$2.nofit(reposition, visibleW, visibleH, isPartlyVisible); + }; + /** + * Attempts to fit a box (generally a menu). + * + * candidates: an array of layout generators, generally obtained via api.Layout or api.LinkedLayout + * anchorBox: the box on screen that triggered the menu, we must touch one of the edges as defined by the candidate layouts + * elementBox: the popup (only width and height matter) + * bubbles: the bubbles for the popup (see api.Bubble) + * bounds: the screen + */ + const attempts = (element, candidates, anchorBox, elementBox, bubbles, bounds) => { + const panelWidth = elementBox.width; + const panelHeight = elementBox.height; + const attemptBestFit = (layout, reposition, visibleW, visibleH, isVisible) => { + const next = layout(anchorBox, elementBox, bubbles, element, bounds); + const attemptLayout = attempt(next, panelWidth, panelHeight, bounds); + return attemptLayout.fold(constant$1(attemptLayout), (newReposition, newVisibleW, newVisibleH, newIsVisible) => { + // console.log(`label: ${next.label}, newVisibleW: ${newVisibleW}, visibleW: ${visibleW}, newVisibleH: ${newVisibleH}, visibleH: ${visibleH}, newIsVisible: ${newIsVisible}, isVisible: ${isVisible}`); + const improved = isVisible === newIsVisible ? (newVisibleH > visibleH || newVisibleW > visibleW) : (!isVisible && newIsVisible); + // console.log('improved? ', improved); + return improved ? attemptLayout : adt$2.nofit(reposition, visibleW, visibleH, isVisible); + }); + }; + const abc = foldl(candidates, (b, a) => { + const bestNext = curry(attemptBestFit, a); + return b.fold(constant$1(b), bestNext); + }, + // fold base case: No candidates, it's never going to be correct, so do whatever + adt$2.nofit({ + rect: anchorBox, + maxHeight: elementBox.height, + maxWidth: elementBox.width, + direction: southeast$3(), + placement: "southeast" /* Placement.Southeast */, + classes: { + on: [], + off: [] + }, + layout: 'none', + testY: anchorBox.y + }, -1, -1, false)); + // unwrapping 'reposition' from the adt, for both fit & nofit the first arg is the one we need, + // so we can cheat and use Fun.identity + return abc.fold(identity, identity); + }; + + const properties = ['top', 'bottom', 'right', 'left']; + const timerAttr = 'data-alloy-transition-timer'; + const isTransitioning$1 = (element, transition) => hasAll(element, transition.classes); + const shouldApplyTransitionCss = (transition, decision, lastPlacement) => { + // Don't apply transitions if there was no previous placement as it's transitioning from offscreen + return lastPlacement.exists((placer) => { + const mode = transition.mode; + return mode === 'all' ? true : placer[mode] !== decision[mode]; + }); + }; + const hasChanges = (position, intermediate) => { + // Round to 3 decimal points + const round = (value) => parseFloat(value).toFixed(3); + return find$4(intermediate, (value, key) => { + const newValue = position[key].map(round); + const val = value.map(round); + return !equals(newValue, val); + }).isSome(); + }; + const getTransitionDuration = (element) => { + const get = (name) => { + const style = get$e(element, name); + const times = style.split(/\s*,\s*/); + return filter$2(times, isNotEmpty); + }; + const parse = (value) => { + if (isString(value) && /^[\d.]+/.test(value)) { + const num = parseFloat(value); + return endsWith(value, 'ms') ? num : num * 1000; + } + else { + return 0; + } + }; + const delay = get('transition-delay'); + const duration = get('transition-duration'); + return foldl(duration, (acc, dur, i) => { + const time = parse(delay[i]) + parse(dur); + return Math.max(acc, time); + }, 0); + }; + const setupTransitionListeners = (element, transition) => { + const transitionEnd = unbindable(); + const transitionCancel = unbindable(); + let timer; + const isSourceTransition = (e) => { + // Ensure the transition event isn't from a pseudo element + const pseudoElement = e.raw.pseudoElement ?? ''; + return eq(e.target, element) && isEmpty(pseudoElement) && contains$2(properties, e.raw.propertyName); + }; + const transitionDone = (e) => { + if (isNullable(e) || isSourceTransition(e)) { + transitionEnd.clear(); + transitionCancel.clear(); + // Only cleanup the class/timer on transitionend not on a cancel. This is done as cancel + // means the element has been repositioned and would need to keep transitioning + const type = e?.raw.type; + if (isNullable(type) || type === transitionend()) { + clearTimeout(timer); + remove$8(element, timerAttr); + remove$2(element, transition.classes); + } + } + }; + const transitionStart = bind$1(element, transitionstart(), (e) => { + if (isSourceTransition(e)) { + transitionStart.unbind(); + transitionEnd.set(bind$1(element, transitionend(), transitionDone)); + transitionCancel.set(bind$1(element, transitioncancel(), transitionDone)); + } + }); + // Request the next animation frame so we can roughly determine when the transition starts and then ensure + // the transition is cleaned up. In addition add ~17ms to the delay as that's about about 1 frame at 60fps + const duration = getTransitionDuration(element); + window.requestAnimationFrame(() => { + timer = setTimeout(transitionDone, duration + 17); + set$9(element, timerAttr, timer); + }); + }; + const startTransitioning = (element, transition) => { + add$1(element, transition.classes); + // Clear any existing cleanup timers + getOpt(element, timerAttr).each((timerId) => { + clearTimeout(parseInt(timerId, 10)); + remove$8(element, timerAttr); + }); + setupTransitionListeners(element, transition); + }; + const applyTransitionCss = (element, origin, position, transition, decision, lastPlacement) => { + const shouldTransition = shouldApplyTransitionCss(transition, decision, lastPlacement); + if (shouldTransition || isTransitioning$1(element, transition)) { + // Set the new position first so we can calculate the computed position + set$7(element, 'position', position.position); + // Get the computed positions for the current element based on the new position CSS being applied + const rect = toBox(origin, element); + const intermediatePosition = reposition(origin, { ...decision, rect }); + const intermediateCssOptions = mapToObject(properties, (prop) => intermediatePosition[prop]); + // Apply the intermediate styles and transition classes if something has changed + if (hasChanges(position, intermediateCssOptions)) { + setOptions(element, intermediateCssOptions); + if (shouldTransition) { + startTransitioning(element, transition); + } + reflow(element); + } + } + else { + remove$2(element, transition.classes); + } + }; + + /* + * This is the old repartee API. It is retained in a similar structure to the original form, + * in case we decide to bring back the flexibility of working with non-standard positioning. + */ + const elementSize = (p) => ({ + width: Math.ceil(getOuter(p)), + height: getOuter$1(p) + }); + const layout = (anchorBox, element, bubbles, options) => { + // clear the potentially limiting factors before measuring + remove$6(element, 'max-height'); + remove$6(element, 'max-width'); + const elementBox = elementSize(element); + return attempts(element, options.preference, anchorBox, elementBox, bubbles, options.bounds); + }; + const setClasses = (element, decision) => { + const classInfo = decision.classes; + remove$2(element, classInfo.off); + add$1(element, classInfo.on); + }; + /* + * maxHeightFunction is a MaxHeight instance. + * max-height is usually the distance between the edge of the popup and the screen; top of popup to bottom of screen for south, bottom of popup to top of screen for north. + * + * There are a few cases where we specifically don't want a max-height, which is why it's optional. + */ + const setHeight = (element, decision, options) => { + // The old API enforced MaxHeight.anchored() for fixed position. That no longer seems necessary. + const maxHeightFunction = options.maxHeightFunction; + maxHeightFunction(element, decision.maxHeight); + }; + const setWidth = (element, decision, options) => { + const maxWidthFunction = options.maxWidthFunction; + maxWidthFunction(element, decision.maxWidth); + }; + const position$2 = (element, decision, options) => { + // This is a point of difference between Alloy and Repartee. Repartee appears to use Measure to calculate the available space for fixed origin + // That is not ported yet. + const positionCss = reposition(options.origin, decision); + options.transition.each((transition) => { + applyTransitionCss(element, options.origin, positionCss, transition, decision, options.lastPlacement); + }); + applyPositionCss(element, positionCss); + }; + const setPlacement = (element, decision) => { + setPlacement$1(element, decision.placement); + }; + + const defaultOr = (options, key, dephault) => options[key] === undefined ? dephault : options[key]; + // This takes care of everything when you are positioning UI that can go anywhere on the screen + const simple = (anchor, element, bubble, layouts, lastPlacement, optBounds, overrideOptions, transition) => { + // the only supported override at the moment. Once relative has been deleted, maybe this can be optional in the bag + const maxHeightFunction = defaultOr(overrideOptions, 'maxHeightFunction', anchored()); + const maxWidthFunction = defaultOr(overrideOptions, 'maxWidthFunction', noop); + const anchorBox = anchor.anchorBox; + const origin = anchor.origin; + const options = { + bounds: viewport(origin, optBounds), + origin, + preference: layouts, + maxHeightFunction, + maxWidthFunction, + lastPlacement, + transition + }; + return go(anchorBox, element, bubble, options); + }; + // This is the old public API. If we ever need full customisability again, this is how to expose it + const go = (anchorBox, element, bubble, options) => { + const decision = layout(anchorBox, element, bubble, options); + position$2(element, decision, options); + setPlacement(element, decision); + setClasses(element, decision); + setHeight(element, decision, options); + setWidth(element, decision, options); + return { + layout: decision.layout, + placement: decision.placement + }; + }; + + const nu$1 = identity; + + const schema$n = () => optionObjOf('layouts', [ + required$1('onLtr'), + required$1('onRtl'), + option$3('onBottomLtr'), + option$3('onBottomRtl') + ]); + const get$1 = (elem, info, defaultLtr, defaultRtl, defaultBottomLtr, defaultBottomRtl, dirElement) => { + const isBottomToTop = dirElement.map(isBottomToTopDir).getOr(false); + const customLtr = info.layouts.map((ls) => ls.onLtr(elem)); + const customRtl = info.layouts.map((ls) => ls.onRtl(elem)); + const ltr = isBottomToTop ? + info.layouts.bind((ls) => ls.onBottomLtr.map((f) => f(elem))) + .or(customLtr) + .getOr(defaultBottomLtr) : + customLtr.getOr(defaultLtr); + const rtl = isBottomToTop ? + info.layouts.bind((ls) => ls.onBottomRtl.map((f) => f(elem))) + .or(customRtl) + .getOr(defaultBottomRtl) : + customRtl.getOr(defaultRtl); + const f = onDirection(ltr, rtl); + return f(elem); + }; + + const placement$4 = (component, anchorInfo, origin) => { + const hotspot = anchorInfo.hotspot; + const anchorBox = toBox(origin, hotspot.element); + const layouts = get$1(component.element, anchorInfo, belowOrAbove(), belowOrAboveRtl(), aboveOrBelow(), aboveOrBelowRtl(), Optional.some(anchorInfo.hotspot.element)); + return Optional.some(nu$1({ + anchorBox, + bubble: anchorInfo.bubble.getOr(fallback()), + overrides: anchorInfo.overrides, + layouts + })); + }; + var HotspotAnchor = [ + required$1('hotspot'), + option$3('bubble'), + defaulted('overrides', {}), + schema$n(), + output$1('placement', placement$4) + ]; + + const placement$3 = (component, anchorInfo, origin) => { + const pos = translate$1(origin, anchorInfo.x, anchorInfo.y); + const anchorBox = bounds(pos.left, pos.top, anchorInfo.width, anchorInfo.height); + const layouts = get$1(component.element, anchorInfo, all$2(), allRtl$1(), + // No default bottomToTop layouts currently needed + all$2(), allRtl$1(), Optional.none()); + return Optional.some(nu$1({ + anchorBox, + bubble: anchorInfo.bubble, + overrides: anchorInfo.overrides, + layouts + })); + }; + var MakeshiftAnchor = [ + required$1('x'), + required$1('y'), + defaulted('height', 0), + defaulted('width', 0), + defaulted('bubble', fallback()), + defaulted('overrides', {}), + schema$n(), + output$1('placement', placement$3) + ]; + + const adt$1 = Adt.generate([ + { screen: ['point'] }, + { absolute: ['point', 'scrollLeft', 'scrollTop'] } + ]); + const toFixed = (pos) => + // TODO: Use new ADT methods + pos.fold(identity, (point, scrollLeft, scrollTop) => point.translate(-scrollLeft, -scrollTop)); + const toAbsolute = (pos) => pos.fold(identity, identity); + const sum = (points) => foldl(points, (b, a) => b.translate(a.left, a.top), SugarPosition(0, 0)); + const sumAsFixed = (positions) => { + const points = map$2(positions, toFixed); + return sum(points); + }; + const sumAsAbsolute = (positions) => { + const points = map$2(positions, toAbsolute); + return sum(points); + }; + const screen = adt$1.screen; + const absolute = adt$1.absolute; + + // In one mode, the window is inside an iframe. If that iframe is in the + // same document as the positioning element (component), then identify the offset + // difference between the iframe and the component. + const getOffset = (component, origin, anchorInfo) => { + const win = defaultView(anchorInfo.root).dom; + const hasSameOwner = (frame) => { + const frameOwner = owner$4(frame); + const compOwner = owner$4(component.element); + return eq(frameOwner, compOwner); + }; + return Optional.from(win.frameElement).map(SugarElement.fromDom) + .filter(hasSameOwner).map(absolute$3); + }; + const getRootPoint = (component, origin, anchorInfo) => { + const doc = owner$4(component.element); + const outerScroll = get$b(doc); + const offset = getOffset(component, origin, anchorInfo).getOr(outerScroll); + return absolute(offset, outerScroll.left, outerScroll.top); + }; + + const getBox = (left, top, width, height) => { + const point = screen(SugarPosition(left, top)); + return Optional.some(pointed(point, width, height)); + }; + const calcNewAnchor = (optBox, rootPoint, anchorInfo, origin, elem) => optBox.map((box) => { + const points = [rootPoint, box.point]; + const topLeft = cata(origin, () => sumAsAbsolute(points), () => sumAsAbsolute(points), () => sumAsFixed(points)); + const anchorBox = rect(topLeft.left, topLeft.top, box.width, box.height); + const layoutsLtr = anchorInfo.showAbove ? + aboveOrBelow() : + belowOrAbove(); + const layoutsRtl = anchorInfo.showAbove ? + aboveOrBelowRtl() : + belowOrAboveRtl(); + const layouts = get$1(elem, anchorInfo, layoutsLtr, layoutsRtl, layoutsLtr, layoutsRtl, Optional.none()); + return nu$1({ + anchorBox, + bubble: anchorInfo.bubble.getOr(fallback()), + overrides: anchorInfo.overrides, + layouts + }); + }); + + const placement$2 = (component, anchorInfo, origin) => { + const rootPoint = getRootPoint(component, origin, anchorInfo); + return anchorInfo.node + // Ensure the node is still attached, otherwise we can't get a valid client rect for a detached node + .filter(inBody) + .bind((target) => { + const rect = target.dom.getBoundingClientRect(); + const nodeBox = getBox(rect.left, rect.top, rect.width, rect.height); + const elem = anchorInfo.node.getOr(component.element); + return calcNewAnchor(nodeBox, rootPoint, anchorInfo, origin, elem); + }); + }; + var NodeAnchor = [ + required$1('node'), + required$1('root'), + option$3('bubble'), + schema$n(), + // chiefly MaxHeight.expandable() + defaulted('overrides', {}), + defaulted('showAbove', false), + output$1('placement', placement$2) + ]; + + const point = (element, offset) => ({ + element, + offset + }); + // NOTE: This only descends once. + const descendOnce$1 = (element, offset) => { + const children$1 = children(element); + if (children$1.length === 0) { + return point(element, offset); + } + else if (offset < children$1.length) { + return point(children$1[offset], 0); + } + else { + const last = children$1[children$1.length - 1]; + const len = isText(last) ? get$a(last).length : children(last).length; + return point(last, len); + } + }; + + // A range from (a, 1) to (body, end) was giving the wrong bounds. + const descendOnce = (element, offset) => isText(element) ? point(element, offset) : descendOnce$1(element, offset); + const isSimRange = (detail) => detail.foffset !== undefined; + const getAnchorSelection = (win, anchorInfo) => { + // FIX TEST Test both providing a getSelection and not providing a getSelection + const getSelection = anchorInfo.getSelection.getOrThunk(() => () => getExact(win)); + return getSelection().map((sel) => { + if (isSimRange(sel)) { + const modStart = descendOnce(sel.start, sel.soffset); + const modFinish = descendOnce(sel.finish, sel.foffset); + return SimSelection.range(modStart.element, modStart.offset, modFinish.element, modFinish.offset); + } + else { + return sel; + } + }); + }; + const placement$1 = (component, anchorInfo, origin) => { + const win = defaultView(anchorInfo.root).dom; + const rootPoint = getRootPoint(component, origin, anchorInfo); + const selectionBox = getAnchorSelection(win, anchorInfo).bind((sel) => { + // This represents the *visual* rectangle of the selection. + if (isSimRange(sel)) { + const optRect = getBounds$2(win, SimSelection.exactFromRange(sel)).orThunk(() => { + const zeroWidth$1 = SugarElement.fromText(zeroWidth); + before$1(sel.start, zeroWidth$1); + // Certain things like


with (p, 0) or
) as collapsed selection do not return a client rectangle + const rect = getFirstRect(win, SimSelection.exact(zeroWidth$1, 0, zeroWidth$1, 1)); + remove$7(zeroWidth$1); + return rect; + }); + return optRect.bind((rawRect) => { + return getBox(rawRect.left, rawRect.top, rawRect.width, rawRect.height); + }); + } + else { + const selectionRect = map$1(sel, (cell) => cell.dom.getBoundingClientRect()); + const bounds = { + left: Math.min(selectionRect.firstCell.left, selectionRect.lastCell.left), + right: Math.max(selectionRect.firstCell.right, selectionRect.lastCell.right), + top: Math.min(selectionRect.firstCell.top, selectionRect.lastCell.top), + bottom: Math.max(selectionRect.firstCell.bottom, selectionRect.lastCell.bottom) + }; + return getBox(bounds.left, bounds.top, bounds.right - bounds.left, bounds.bottom - bounds.top); + } + }); + const targetElement = getAnchorSelection(win, anchorInfo) + .bind((sel) => { + if (isSimRange(sel)) { + return isElement$1(sel.start) ? Optional.some(sel.start) : parentElement(sel.start); + } + else { + return Optional.some(sel.firstCell); + } + }); + const elem = targetElement.getOr(component.element); + return calcNewAnchor(selectionBox, rootPoint, anchorInfo, origin, elem); + }; + var SelectionAnchor = [ + option$3('getSelection'), + required$1('root'), + option$3('bubble'), + schema$n(), + defaulted('overrides', {}), + defaulted('showAbove', false), + output$1('placement', placement$1) + ]; + + /* + Layout for submenus; + Either left or right of the anchor menu item. Never above or below. + Aligned to the top or bottom of the anchor as appropriate. + */ + const labelPrefix = 'link-layout'; + // display element to the right, left edge against the right of the menu + const eastX = (anchor) => anchor.x + anchor.width; + // display element to the left, right edge against the left of the menu + const westX = (anchor, element) => anchor.x - element.width; + // display element pointing up, bottom edge against the bottom of the menu (usually to one side) + const northY = (anchor, element) => anchor.y - element.height + anchor.height; + // display element pointing down, top edge against the top of the menu (usually to one side) + const southY = (anchor) => anchor.y; + const southeast = (anchor, element, bubbles) => nu$5(eastX(anchor), southY(anchor), bubbles.southeast(), southeast$3(), "southeast" /* Placement.Southeast */, boundsRestriction(anchor, { left: 0 /* AnchorBoxBounds.RightEdge */, top: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix); + const southwest = (anchor, element, bubbles) => nu$5(westX(anchor, element), southY(anchor), bubbles.southwest(), southwest$3(), "southwest" /* Placement.Southwest */, boundsRestriction(anchor, { right: 1 /* AnchorBoxBounds.LeftEdge */, top: 2 /* AnchorBoxBounds.TopEdge */ }), labelPrefix); + const northeast = (anchor, element, bubbles) => nu$5(eastX(anchor), northY(anchor, element), bubbles.northeast(), northeast$3(), "northeast" /* Placement.Northeast */, boundsRestriction(anchor, { left: 0 /* AnchorBoxBounds.RightEdge */, bottom: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix); + const northwest = (anchor, element, bubbles) => nu$5(westX(anchor, element), northY(anchor, element), bubbles.northwest(), northwest$3(), "northwest" /* Placement.Northwest */, boundsRestriction(anchor, { right: 1 /* AnchorBoxBounds.LeftEdge */, bottom: 3 /* AnchorBoxBounds.BottomEdge */ }), labelPrefix); + const all = () => [southeast, southwest, northeast, northwest]; + const allRtl = () => [southwest, southeast, northwest, northeast]; + + const placement = (component, submenuInfo, origin) => { + const anchorBox = toBox(origin, submenuInfo.item.element); + const layouts = get$1(component.element, submenuInfo, all(), allRtl(), + // No default bottomToTop layouts currently needed + all(), allRtl(), Optional.none()); + return Optional.some(nu$1({ + anchorBox, + bubble: fallback(), + overrides: submenuInfo.overrides, + layouts + })); + }; + var SubmenuAnchor = [ + required$1('item'), + schema$n(), + defaulted('overrides', {}), + output$1('placement', placement) + ]; + + var AnchorSchema = choose$1('type', { + selection: SelectionAnchor, + node: NodeAnchor, + hotspot: HotspotAnchor, + submenu: SubmenuAnchor, + makeshift: MakeshiftAnchor + }); + + const TransitionSchema = [ + requiredArrayOf('classes', string), + defaultedStringEnum('mode', 'all', ['all', 'layout', 'placement']) + ]; + const PositionSchema = [ + defaulted('useFixed', never), + option$3('getBounds') + ]; + const PlacementSchema = [ + requiredOf('anchor', AnchorSchema), + optionObjOf('transition', TransitionSchema) + ]; + + const getFixedOrigin = () => { + // Don't use window.innerWidth/innerHeight here, as we don't want to include scrollbars + // since the right/bottom position is based on the edge of the scrollbar not the window + const html = document.documentElement; + return fixed(0, 0, html.clientWidth, html.clientHeight); + }; + const getRelativeOrigin = (component) => { + const position = absolute$3(component.element); + const bounds = component.element.dom.getBoundingClientRect(); + // We think that this just needs to be kept consistent with Boxes.win. If we remove the scroll values from Boxes.win, we + // should change this to just bounds.left and bounds.top from getBoundingClientRect + return relative(position.left, position.top, bounds.width, bounds.height); + }; + const place = (origin, anchoring, optBounds, placee, lastPlace, transition) => { + const anchor = box(anchoring.anchorBox, origin); + return simple(anchor, placee.element, anchoring.bubble, anchoring.layouts, lastPlace, optBounds, anchoring.overrides, transition); + }; + const position$1 = (component, posConfig, posState, placee, placementSpec) => { + const optWithinBounds = Optional.none(); + positionWithinBounds(component, posConfig, posState, placee, placementSpec, optWithinBounds); + }; + const positionWithinBounds = (component, posConfig, posState, placee, placementSpec, optWithinBounds) => { + const placeeDetail = asRawOrDie$1('placement.info', objOf(PlacementSchema), placementSpec); + const anchorage = placeeDetail.anchor; + const element = placee.element; + const placeeState = posState.get(placee.uid); + // Preserve the focus as IE 11 loses it when setting visibility to hidden + preserve(() => { + // We set it to be fixed, so that it doesn't interfere with the layout of anything + // when calculating anchors + set$7(element, 'position', 'fixed'); + const oldVisibility = getRaw(element, 'visibility'); + set$7(element, 'visibility', 'hidden'); + // We need to calculate the origin (esp. the bounding client rect) *after* we have done + // all the preprocessing of the component and placee. Otherwise, the relative positions + // (bottom and right) will be using the wrong dimensions + const origin = posConfig.useFixed() ? getFixedOrigin() : getRelativeOrigin(component); + anchorage.placement(component, anchorage, origin).each((anchoring) => { + // If "within bounds" is specified, it overrides any Positioning config. Otherwise, we + // use the Positioning config. We don't try to combine automatically here because they are + // sometimes serving different purposes. If the Positioning config getBounds needs to be + // combined with the optWithinBounds bounds, then it is the responsibility of the calling + // code to combine them, and pass in the combined value as optWithinBounds. The optWithinBounds + // will *always* override the Positioning config. + const optBounds = optWithinBounds.orThunk(() => posConfig.getBounds.map(apply$1)); + // Place the element and then update the state for the placee + const newState = place(origin, anchoring, optBounds, placee, placeeState, placeeDetail.transition); + posState.set(placee.uid, newState); + }); + oldVisibility.fold(() => { + remove$6(element, 'visibility'); + }, (vis) => { + set$7(element, 'visibility', vis); + }); + // We need to remove position: fixed put on by above code if it is not needed. + if (getRaw(element, 'left').isNone() && + getRaw(element, 'top').isNone() && + getRaw(element, 'right').isNone() && + getRaw(element, 'bottom').isNone() && + is$1(getRaw(element, 'position'), 'fixed')) { + remove$6(element, 'position'); + } + }, element); + }; + const getMode = (component, pConfig, _pState) => pConfig.useFixed() ? 'fixed' : 'absolute'; + const reset = (component, pConfig, posState, placee) => { + const element = placee.element; + each$1(['position', 'left', 'right', 'top', 'bottom'], (prop) => remove$6(element, prop)); + reset$2(element); + posState.clear(placee.uid); + }; + + var PositionApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + position: position$1, + positionWithinBounds: positionWithinBounds, + getMode: getMode, + reset: reset + }); + + const init$8 = () => { + let state = {}; + const set = (id, data) => { + state[id] = data; + }; + const get = (id) => get$h(state, id); + const clear = (id) => { + if (isNonNullable(id)) { + delete state[id]; + } + else { + state = {}; + } + }; + return nu$4({ + readState: () => state, + clear, + set, + get + }); + }; + + var PositioningState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$8 + }); + + const Positioning = create$3({ + fields: PositionSchema, + name: 'positioning', + active: ActivePosition, + apis: PositionApis, + state: PositioningState + }); + + const chooseChannels = (channels, message) => message.universal ? channels : filter$2(channels, (ch) => contains$2(message.channels, ch)); + const events$8 = (receiveConfig) => derive$2([ + run$1(receive(), (component, message) => { + const channelMap = receiveConfig.channels; + const channels = keys(channelMap); + // NOTE: Receiving event ignores the whole simulated event part. + // TODO: Think about the types for this, or find a better way for this to rely on receiving. + const receivingData = message; + const targetChannels = chooseChannels(channels, receivingData); + each$1(targetChannels, (ch) => { + const channelInfo = channelMap[ch]; + const channelSchema = channelInfo.schema; + const data = asRawOrDie$1('channel[' + ch + '] data\nReceiver: ' + element(component.element), channelSchema, receivingData.data); + channelInfo.onReceive(component, data); + }); + }) + ]); + + var ActiveReceiving = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$8 + }); + + var ReceivingSchema = [ + requiredOf('channels', setOf( + // Allow any keys. + Result.value, objOfOnly([ + onStrictHandler('onReceive'), + defaulted('schema', anyValue()) + ]))) + ]; + + const Receiving = create$3({ + fields: ReceivingSchema, + name: 'receiving', + active: ActiveReceiving + }); + + const events$7 = (reflectingConfig, reflectingState) => { + const update = (component, data) => { + reflectingConfig.updateState.each((updateState) => { + const newState = updateState(component, data); + reflectingState.set(newState); + }); + // FIX: Partial duplication of Replacing + Receiving + reflectingConfig.renderComponents.each((renderComponents) => { + const newComponents = renderComponents(data, reflectingState.get()); + const replacer = reflectingConfig.reuseDom ? withReuse : withoutReuse; + replacer(component, newComponents); + }); + }; + return derive$2([ + run$1(receive(), (component, message) => { + // NOTE: Receiving event ignores the whole simulated event part. + // TODO: Think about the types for this, or find a better way for this to rely on receiving. + const receivingData = message; + if (!receivingData.universal) { + const channel = reflectingConfig.channel; + if (contains$2(receivingData.channels, channel)) { + update(component, receivingData.data); + } + } + }), + runOnAttached((comp, _se) => { + reflectingConfig.initialData.each((rawData) => { + update(comp, rawData); + }); + }) + ]); + }; + + var ActiveReflecting = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$7 + }); + + const getState$1 = (component, replaceConfig, reflectState) => reflectState; + + var ReflectingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + getState: getState$1 + }); + + var ReflectingSchema = [ + required$1('channel'), + option$3('renderComponents'), + option$3('updateState'), + option$3('initialData'), + defaultedBoolean('reuseDom', true) + ]; + + const init$7 = () => { + const cell = Cell(Optional.none()); + const clear = () => cell.set(Optional.none()); + const readState = () => cell.get().getOr('none'); + return { + readState, + get: cell.get, + set: cell.set, + clear + }; + }; + + var ReflectingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$7 + }); + + const Reflecting = create$3({ + fields: ReflectingSchema, + name: 'reflecting', + active: ActiveReflecting, + apis: ReflectingApis, + state: ReflectingState + }); + + // NOTE: A sandbox should not start as part of the world. It is expected to be + // added to the sink on rebuild. + const rebuild = (sandbox, sConfig, sState, data) => { + sState.get().each((_data) => { + // If currently has data, so it hasn't been removed yet. It is + // being "re-opened" + detachChildren(sandbox); + }); + const point = sConfig.getAttachPoint(sandbox); + attach(point, sandbox); + // Must be after the sandbox is in the system + const built = sandbox.getSystem().build(data); + attach(sandbox, built); + sState.set(built); + return built; + }; + // Open sandbox transfers focus to the opened menu + const open$1 = (sandbox, sConfig, sState, data) => { + const newState = rebuild(sandbox, sConfig, sState, data); + sConfig.onOpen(sandbox, newState); + return newState; + }; + const setContent = (sandbox, sConfig, sState, data) => sState.get().map(() => rebuild(sandbox, sConfig, sState, data)); + // TODO AP-191 write a test for openWhileCloaked + const openWhileCloaked = (sandbox, sConfig, sState, data, transaction) => { + cloak(sandbox, sConfig); + open$1(sandbox, sConfig, sState, data); + transaction(); + decloak(sandbox, sConfig); + }; + const close$1 = (sandbox, sConfig, sState) => { + sState.get().each((data) => { + detachChildren(sandbox); + detach(sandbox); + sConfig.onClose(sandbox, data); + sState.clear(); + }); + }; + const isOpen$1 = (_sandbox, _sConfig, sState) => sState.isOpen(); + const isPartOf$1 = (sandbox, sConfig, sState, queryElem) => isOpen$1(sandbox, sConfig, sState) && sState.get().exists((data) => sConfig.isPartOf(sandbox, data, queryElem)); + const getState = (_sandbox, _sConfig, sState) => sState.get(); + const store = (sandbox, cssKey, attr, newValue) => { + getRaw(sandbox.element, cssKey).fold(() => { + remove$8(sandbox.element, attr); + }, (v) => { + set$9(sandbox.element, attr, v); + }); + set$7(sandbox.element, cssKey, newValue); + }; + const restore = (sandbox, cssKey, attr) => { + getOpt(sandbox.element, attr).fold(() => remove$6(sandbox.element, cssKey), (oldValue) => set$7(sandbox.element, cssKey, oldValue)); + }; + const cloak = (sandbox, sConfig, _sState) => { + const sink = sConfig.getAttachPoint(sandbox); + // Use the positioning mode of the sink, so that it does not interfere with the sink's positioning + // We add it here to stop it causing layout problems. + set$7(sandbox.element, 'position', Positioning.getMode(sink)); + store(sandbox, 'visibility', sConfig.cloakVisibilityAttr, 'hidden'); + }; + const hasPosition = (element) => exists(['top', 'left', 'right', 'bottom'], (pos) => getRaw(element, pos).isSome()); + const decloak = (sandbox, sConfig, _sState) => { + if (!hasPosition(sandbox.element)) { + // If a position value was not added to the sandbox during cloaking, remove it + // otherwise certain position values (absolute, relative) will impact the child that _was_ positioned + remove$6(sandbox.element, 'position'); + } + restore(sandbox, 'visibility', sConfig.cloakVisibilityAttr); + }; + + var SandboxApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + cloak: cloak, + decloak: decloak, + open: open$1, + openWhileCloaked: openWhileCloaked, + close: close$1, + isOpen: isOpen$1, + isPartOf: isPartOf$1, + getState: getState, + setContent: setContent + }); + + const events$6 = (sandboxConfig, sandboxState) => derive$2([ + run$1(sandboxClose(), (sandbox, _simulatedEvent) => { + close$1(sandbox, sandboxConfig, sandboxState); + }) + ]); + + var ActiveSandbox = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$6 + }); + + var SandboxSchema = [ + onHandler('onOpen'), + onHandler('onClose'), + // Maybe this should be optional + required$1('isPartOf'), + required$1('getAttachPoint'), + defaulted('cloakVisibilityAttr', 'data-precloak-visibility') + ]; + + const init$6 = () => { + const contents = value$2(); + const readState = constant$1('not-implemented'); + return nu$4({ + readState, + isOpen: contents.isSet, + clear: contents.clear, + set: contents.set, + get: contents.get + }); + }; + + var SandboxState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$6 + }); + + const Sandboxing = create$3({ + fields: SandboxSchema, + name: 'sandboxing', + active: ActiveSandbox, + apis: SandboxApis, + state: SandboxState + }); + + const getAnimationRoot = (component, slideConfig) => slideConfig.getAnimationRoot.fold(() => component.element, (get) => get(component)); + + const getDimensionProperty = (slideConfig) => slideConfig.dimension.property; + const getDimension = (slideConfig, elem) => slideConfig.dimension.getDimension(elem); + const disableTransitions = (component, slideConfig) => { + const root = getAnimationRoot(component, slideConfig); + remove$2(root, [slideConfig.shrinkingClass, slideConfig.growingClass]); + }; + const setShrunk = (component, slideConfig) => { + remove$3(component.element, slideConfig.openClass); + add$2(component.element, slideConfig.closedClass); + set$7(component.element, getDimensionProperty(slideConfig), '0px'); + reflow(component.element); + }; + const setGrown = (component, slideConfig) => { + remove$3(component.element, slideConfig.closedClass); + add$2(component.element, slideConfig.openClass); + remove$6(component.element, getDimensionProperty(slideConfig)); + }; + const doImmediateShrink = (component, slideConfig, slideState, _calculatedSize) => { + slideState.setCollapsed(); + // Force current dimension to begin transition + set$7(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element)); + // TINY-8710: we don't think reflow is required (as has been done elsewhere) as the animation is not needed + disableTransitions(component, slideConfig); + setShrunk(component, slideConfig); + slideConfig.onStartShrink(component); + slideConfig.onShrunk(component); + }; + const doStartShrink = (component, slideConfig, slideState, calculatedSize) => { + const size = calculatedSize.getOrThunk(() => getDimension(slideConfig, component.element)); + slideState.setCollapsed(); + // Force current dimension to begin transition + set$7(component.element, getDimensionProperty(slideConfig), size); + reflow(component.element); + const root = getAnimationRoot(component, slideConfig); + remove$3(root, slideConfig.growingClass); + add$2(root, slideConfig.shrinkingClass); // enable transitions + setShrunk(component, slideConfig); + slideConfig.onStartShrink(component); + }; + // A "smartShrink" will do an immediate shrink if no shrinking is scheduled to happen + const doStartSmartShrink = (component, slideConfig, slideState) => { + const size = getDimension(slideConfig, component.element); + const shrinker = size === '0px' ? doImmediateShrink : doStartShrink; + shrinker(component, slideConfig, slideState, Optional.some(size)); + }; + // Showing is complex due to the inability to transition to "auto". + // We also can't cache the dimension as the parents may have resized since it was last shown. + const doStartGrow = (component, slideConfig, slideState) => { + // Start the growing animation styles + const root = getAnimationRoot(component, slideConfig); + // Record whether this is interrupting a shrink and its current size + const wasShrinking = has(root, slideConfig.shrinkingClass); + const beforeSize = getDimension(slideConfig, component.element); + setGrown(component, slideConfig); + const fullSize = getDimension(slideConfig, component.element); + // If the grow is interrupting a shrink, use the size from before the grow as the start size + // And reflow so that the animation works. + const startPartialGrow = () => { + set$7(component.element, getDimensionProperty(slideConfig), beforeSize); + reflow(component.element); + }; + // If the grow is not interrupting a shrink, start from 0 (shrunk) + const startCompleteGrow = () => { + setShrunk(component, slideConfig); + }; + // Determine what the initial size for the grow operation should be. + const setStartSize = wasShrinking ? startPartialGrow : startCompleteGrow; + setStartSize(); + remove$3(root, slideConfig.shrinkingClass); + add$2(root, slideConfig.growingClass); + setGrown(component, slideConfig); + set$7(component.element, getDimensionProperty(slideConfig), fullSize); + slideState.setExpanded(); + slideConfig.onStartGrow(component); + }; + const refresh$3 = (component, slideConfig, slideState) => { + if (slideState.isExpanded()) { + remove$6(component.element, getDimensionProperty(slideConfig)); + const fullSize = getDimension(slideConfig, component.element); + set$7(component.element, getDimensionProperty(slideConfig), fullSize); + } + }; + const grow = (component, slideConfig, slideState) => { + if (!slideState.isExpanded()) { + doStartGrow(component, slideConfig, slideState); + } + }; + const shrink = (component, slideConfig, slideState) => { + if (slideState.isExpanded()) { + doStartSmartShrink(component, slideConfig, slideState); + } + }; + const immediateShrink = (component, slideConfig, slideState) => { + if (slideState.isExpanded()) { + doImmediateShrink(component, slideConfig, slideState); + } + }; + const hasGrown = (component, slideConfig, slideState) => slideState.isExpanded(); + const hasShrunk = (component, slideConfig, slideState) => slideState.isCollapsed(); + const isGrowing = (component, slideConfig, _slideState) => { + const root = getAnimationRoot(component, slideConfig); + return has(root, slideConfig.growingClass) === true; + }; + const isShrinking = (component, slideConfig, _slideState) => { + const root = getAnimationRoot(component, slideConfig); + return has(root, slideConfig.shrinkingClass) === true; + }; + const isTransitioning = (component, slideConfig, slideState) => isGrowing(component, slideConfig) || isShrinking(component, slideConfig); + const toggleGrow = (component, slideConfig, slideState) => { + const f = slideState.isExpanded() ? doStartSmartShrink : doStartGrow; + f(component, slideConfig, slideState); + }; + const immediateGrow = (component, slideConfig, slideState) => { + if (!slideState.isExpanded()) { + setGrown(component, slideConfig); + set$7(component.element, getDimensionProperty(slideConfig), getDimension(slideConfig, component.element)); + // TINY-8710: we don't think reflow is required (as has been done elsewhere) as the animation is not needed + // Keep disableTransition to handle the case where it's part way through transitioning + disableTransitions(component, slideConfig); + slideState.setExpanded(); + slideConfig.onStartGrow(component); + slideConfig.onGrown(component); + } + }; + + var SlidingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + refresh: refresh$3, + grow: grow, + shrink: shrink, + immediateShrink: immediateShrink, + hasGrown: hasGrown, + hasShrunk: hasShrunk, + isGrowing: isGrowing, + isShrinking: isShrinking, + isTransitioning: isTransitioning, + toggleGrow: toggleGrow, + disableTransitions: disableTransitions, + immediateGrow: immediateGrow + }); + + const exhibit$3 = (base, slideConfig, _slideState) => { + const expanded = slideConfig.expanded; + return expanded ? nu$2({ + classes: [slideConfig.openClass], + styles: {} + }) : nu$2({ + classes: [slideConfig.closedClass], + styles: wrap(slideConfig.dimension.property, '0px') + }); + }; + const events$5 = (slideConfig, slideState) => derive$2([ + runOnSource(transitionend(), (component, simulatedEvent) => { + const raw = simulatedEvent.event.raw; + // This will fire for all transitions, we're only interested in the dimension completion on source + if (raw.propertyName === slideConfig.dimension.property) { + disableTransitions(component, slideConfig); // disable transitions immediately (Safari animates the dimension removal below) + if (slideState.isExpanded()) { + remove$6(component.element, slideConfig.dimension.property); + } // when showing, remove the dimension so it is responsive + const notify = slideState.isExpanded() ? slideConfig.onGrown : slideConfig.onShrunk; + notify(component); + } + }) + ]); + + var ActiveSliding = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$3, + events: events$5 + }); + + var SlidingSchema = [ + required$1('closedClass'), + required$1('openClass'), + required$1('shrinkingClass'), + required$1('growingClass'), + // Element which shrinking and growing animations + option$3('getAnimationRoot'), + onHandler('onShrunk'), + onHandler('onStartShrink'), + onHandler('onGrown'), + onHandler('onStartGrow'), + defaulted('expanded', false), + requiredOf('dimension', choose$1('property', { + width: [ + output$1('property', 'width'), + output$1('getDimension', (elem) => get$c(elem) + 'px') + ], + height: [ + output$1('property', 'height'), + output$1('getDimension', (elem) => get$d(elem) + 'px') + ] + })) + ]; + + const init$5 = (spec) => { + const state = Cell(spec.expanded); + const readState = () => 'expanded: ' + state.get(); + return nu$4({ + isExpanded: () => state.get() === true, + isCollapsed: () => state.get() === false, + setCollapsed: curry(state.set, false), + setExpanded: curry(state.set, true), + readState + }); + }; + + var SlidingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$5 + }); + + const Sliding = create$3({ + fields: SlidingSchema, + name: 'sliding', + active: ActiveSliding, + apis: SlidingApis, + state: SlidingState + }); + + const events$4 = (streamConfig, streamState) => { + const streams = streamConfig.stream.streams; + const processor = streams.setup(streamConfig, streamState); + return derive$2([ + run$1(streamConfig.event, processor), + runOnDetached(() => streamState.cancel()) + ].concat(streamConfig.cancelEvent.map((e) => [ + run$1(e, () => streamState.cancel()) + ]).getOr([]))); + }; + + var ActiveStreaming = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$4 + }); + + const throttle = (_config) => { + const state = Cell(null); + const readState = () => ({ + timer: state.get() !== null ? 'set' : 'unset' + }); + const setTimer = (t) => { + state.set(t); + }; + const cancel = () => { + const t = state.get(); + if (t !== null) { + t.cancel(); + } + }; + return nu$4({ + readState, + setTimer, + cancel + }); + }; + const init$4 = (spec) => spec.stream.streams.state(spec); + + var StreamingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + throttle: throttle, + init: init$4 + }); + + const setup$e = (streamInfo, streamState) => { + const sInfo = streamInfo.stream; + const throttler = last(streamInfo.onStream, sInfo.delay); + streamState.setTimer(throttler); + return (component, simulatedEvent) => { + throttler.throttle(component, simulatedEvent); + if (sInfo.stopEvent) { + simulatedEvent.stop(); + } + }; + }; + var StreamingSchema = [ + requiredOf('stream', choose$1('mode', { + throttle: [ + required$1('delay'), + defaulted('stopEvent', true), + output$1('streams', { + setup: setup$e, + state: throttle + }) + ] + })), + defaulted('event', 'input'), + option$3('cancelEvent'), + onStrictHandler('onStream') + ]; + + const Streaming = create$3({ + fields: StreamingSchema, + name: 'streaming', + active: ActiveStreaming, + state: StreamingState + }); + + const exhibit$2 = (base, tabConfig) => nu$2({ + attributes: wrapAll([ + { key: tabConfig.tabAttr, value: 'true' } + ]) + }); + + var ActiveTabstopping = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$2 + }); + + var TabstopSchema = [ + defaulted('tabAttr', 'data-alloy-tabstop') + ]; + + const Tabstopping = create$3({ + fields: TabstopSchema, + name: 'tabstopping', + active: ActiveTabstopping + }); + + const updateAriaState = (component, toggleConfig, toggleState) => { + const ariaInfo = toggleConfig.aria; + ariaInfo.update(component, ariaInfo, toggleState.get()); + }; + const updateClass = (component, toggleConfig, toggleState) => { + toggleConfig.toggleClass.each((toggleClass) => { + if (toggleState.get()) { + add$2(component.element, toggleClass); + } + else { + remove$3(component.element, toggleClass); + } + }); + }; + const set = (component, toggleConfig, toggleState, state) => { + const initialState = toggleState.get(); + toggleState.set(state); + updateClass(component, toggleConfig, toggleState); + updateAriaState(component, toggleConfig, toggleState); + if (initialState !== state) { + toggleConfig.onToggled(component, state); + } + }; + const toggle$2 = (component, toggleConfig, toggleState) => { + set(component, toggleConfig, toggleState, !toggleState.get()); + }; + const on = (component, toggleConfig, toggleState) => { + set(component, toggleConfig, toggleState, true); + }; + const off = (component, toggleConfig, toggleState) => { + set(component, toggleConfig, toggleState, false); + }; + const isOn = (component, toggleConfig, toggleState) => toggleState.get(); + const onLoad = (component, toggleConfig, toggleState) => { + // There used to be a bit of code in here that would only overwrite + // the attribute if it didn't have a current value. I can't remember + // what case that was for, so I'm removing it until it is required. + set(component, toggleConfig, toggleState, toggleConfig.selected); + }; + + var ToggleApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + onLoad: onLoad, + toggle: toggle$2, + isOn: isOn, + on: on, + off: off, + set: set + }); + + const exhibit$1 = () => nu$2({}); + const events$3 = (toggleConfig, toggleState) => { + const execute = executeEvent(toggleConfig, toggleState, toggle$2); + const load = loadEvent(toggleConfig, toggleState, onLoad); + return derive$2(flatten([ + toggleConfig.toggleOnExecute ? [execute] : [], + [load] + ])); + }; + + var ActiveToggle = /*#__PURE__*/Object.freeze({ + __proto__: null, + exhibit: exhibit$1, + events: events$3 + }); + + const updatePressed = (component, ariaInfo, status) => { + set$9(component.element, 'aria-pressed', status); + if (ariaInfo.syncWithExpanded) { + updateExpanded(component, ariaInfo, status); + } + }; + const updateSelected = (component, ariaInfo, status) => { + set$9(component.element, 'aria-selected', status); + }; + const updateChecked = (component, ariaInfo, status) => { + set$9(component.element, 'aria-checked', status); + }; + const updateExpanded = (component, ariaInfo, status) => { + set$9(component.element, 'aria-expanded', status); + }; + + var ToggleSchema = [ + defaulted('selected', false), + option$3('toggleClass'), + defaulted('toggleOnExecute', true), + onHandler('onToggled'), + defaultedOf('aria', { + mode: 'none' + }, choose$1('mode', { + pressed: [ + defaulted('syncWithExpanded', false), + output$1('update', updatePressed) + ], + checked: [ + output$1('update', updateChecked) + ], + expanded: [ + output$1('update', updateExpanded) + ], + selected: [ + output$1('update', updateSelected) + ], + none: [ + output$1('update', noop) + ] + })) + ]; + + const Toggling = create$3({ + fields: ToggleSchema, + name: 'toggling', + active: ActiveToggle, + apis: ToggleApis, + state: SetupBehaviourCellState(false) + }); + + const ExclusivityChannel = generate$6('tooltip.exclusive'); + const ShowTooltipEvent = generate$6('tooltip.show'); + const HideTooltipEvent = generate$6('tooltip.hide'); + const ImmediateHideTooltipEvent = generate$6('tooltip.immediateHide'); + const ImmediateShowTooltipEvent = generate$6('tooltip.immediateShow'); + + const hideAllExclusive = (component, _tConfig, _tState) => { + component.getSystem().broadcastOn([ExclusivityChannel], {}); + }; + const setComponents = (_component, _tConfig, tState, specs) => { + tState.getTooltip().each((tooltip) => { + if (tooltip.getSystem().isConnected()) { + Replacing.set(tooltip, specs); + } + }); + }; + const isEnabled = (_component, _tConfig, tState) => tState.isEnabled(); + const setEnabled = (_component, _tConfig, tState, enabled) => tState.setEnabled(enabled); + const immediateOpenClose = (component, _tConfig, _tState, open) => emit(component, open ? ImmediateShowTooltipEvent : ImmediateHideTooltipEvent); + + var TooltippingApis = /*#__PURE__*/Object.freeze({ + __proto__: null, + hideAllExclusive: hideAllExclusive, + immediateOpenClose: immediateOpenClose, + isEnabled: isEnabled, + setComponents: setComponents, + setEnabled: setEnabled + }); + + const events$2 = (tooltipConfig, state) => { + const hide = (comp) => { + state.getTooltip().each((p) => { + if (p.getSystem().isConnected()) { + detach(p); + tooltipConfig.onHide(comp, p); + state.clearTooltip(); + } + }); + state.clearTimer(); + }; + const show = (comp) => { + if (!state.isShowing() && state.isEnabled()) { + hideAllExclusive(comp); + const sink = tooltipConfig.lazySink(comp).getOrDie(); + const popup = comp.getSystem().build({ + dom: tooltipConfig.tooltipDom, + components: tooltipConfig.tooltipComponents, + events: derive$2(tooltipConfig.mode === 'normal' + ? [ + run$1(mouseover(), (_) => { + emit(comp, ShowTooltipEvent); + }), + run$1(mouseout(), (_) => { + emit(comp, HideTooltipEvent); + }) + ] + : []), + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + state.setTooltip(popup); + attach(sink, popup); + tooltipConfig.onShow(comp, popup); + Positioning.position(sink, popup, { anchor: tooltipConfig.anchor(comp) }); + } + }; + const reposition = (comp) => { + state.getTooltip().each((tooltip) => { + const sink = tooltipConfig.lazySink(comp).getOrDie(); + Positioning.position(sink, tooltip, { anchor: tooltipConfig.anchor(comp) }); + }); + }; + const getEvents = () => { + switch (tooltipConfig.mode) { + case 'normal': + return [ + run$1(focusin(), (comp) => { + emit(comp, ImmediateShowTooltipEvent); + }), + run$1(postBlur(), (comp) => { + emit(comp, ImmediateHideTooltipEvent); + }), + run$1(mouseover(), (comp) => { + emit(comp, ShowTooltipEvent); + }), + run$1(mouseout(), (comp) => { + emit(comp, HideTooltipEvent); + }) + ]; + case 'follow-highlight': + return [ + run$1(highlight$1(), (comp, _se) => { + emit(comp, ShowTooltipEvent); + }), + run$1(dehighlight$1(), (comp) => { + emit(comp, HideTooltipEvent); + }) + ]; + case 'children-normal': + return [ + run$1(focusin(), (comp, se) => { + search(comp.element).each((_) => { + if (is(se.event.target, '[data-mce-tooltip]')) { + state.getTooltip().fold(() => { + emit(comp, ImmediateShowTooltipEvent); + }, (tooltip) => { + if (state.isShowing()) { + tooltipConfig.onShow(comp, tooltip); + reposition(comp); + } + }); + } + }); + }), + run$1(postBlur(), (comp) => { + search(comp.element).fold(() => { + emit(comp, ImmediateHideTooltipEvent); + }, noop); + }), + run$1(mouseover(), (comp) => { + descendant(comp.element, '[data-mce-tooltip]:hover').each((_) => { + state.getTooltip().fold(() => { + emit(comp, ShowTooltipEvent); + }, (tooltip) => { + if (state.isShowing()) { + tooltipConfig.onShow(comp, tooltip); + reposition(comp); + } + }); + }); + }), + run$1(mouseout(), (comp) => { + descendant(comp.element, '[data-mce-tooltip]:hover').fold(() => { + emit(comp, HideTooltipEvent); + }, noop); + }), + ]; + default: + return [ + run$1(focusin(), (comp, se) => { + search(comp.element).each((_) => { + if (is(se.event.target, '[data-mce-tooltip]')) { + state.getTooltip().fold(() => { + emit(comp, ImmediateShowTooltipEvent); + }, (tooltip) => { + if (state.isShowing()) { + tooltipConfig.onShow(comp, tooltip); + reposition(comp); + } + }); + } + }); + }), + run$1(postBlur(), (comp) => { + search(comp.element).fold(() => { + emit(comp, ImmediateHideTooltipEvent); + }, noop); + }), + ]; + } + }; + return derive$2(flatten([ + [ + runOnInit((component) => { + tooltipConfig.onSetup(component); + }), + run$1(ShowTooltipEvent, (comp) => { + state.resetTimer(() => { + show(comp); + }, tooltipConfig.delayForShow()); + }), + run$1(HideTooltipEvent, (comp) => { + state.resetTimer(() => { + hide(comp); + }, tooltipConfig.delayForHide()); + }), + run$1(ImmediateShowTooltipEvent, (comp) => { + state.resetTimer(() => { + show(comp); + }, 0); + }), + run$1(ImmediateHideTooltipEvent, (comp) => { + state.resetTimer(() => { + hide(comp); + }, 0); + }), + run$1(receive(), (comp, message) => { + // TODO: Think about the types for this, or find a better way for this + // to rely on receiving. + const receivingData = message; + if (!receivingData.universal) { + if (contains$2(receivingData.channels, ExclusivityChannel) || contains$2(receivingData.channels, closeTooltips())) { + if (receivingData.data.closedTooltip && state.isShowing()) { + receivingData.data.closedTooltip(); + } + hide(comp); + } + } + }), + runOnDetached((comp) => { + hide(comp); + }) + ], + (getEvents()) + ])); + }; + + var ActiveTooltipping = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$2 + }); + + var TooltippingSchema = [ + required$1('lazySink'), + required$1('tooltipDom'), + defaulted('exclusive', true), + defaulted('tooltipComponents', []), + defaultedFunction('delayForShow', constant$1(300)), + defaultedFunction('delayForHide', constant$1(100)), + defaultedFunction('onSetup', noop), + defaultedStringEnum('mode', 'normal', ['normal', 'follow-highlight', 'children-keyboard-focus', 'children-normal']), + defaulted('anchor', (comp) => ({ + type: 'hotspot', + hotspot: comp, + layouts: { + onLtr: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]), + onRtl: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]) + }, + bubble: nu$6(0, -2, {}), + })), + onHandler('onHide'), + onHandler('onShow'), + ]; + + const init$3 = () => { + const enabled = Cell(true); + const timer = value$2(); + const popup = value$2(); + const clearTimer = () => { + timer.on(clearTimeout); + }; + const resetTimer = (f, delay) => { + clearTimer(); + timer.set(setTimeout(f, delay)); + }; + const readState = constant$1('not-implemented'); + return nu$4({ + getTooltip: popup.get, + isShowing: popup.isSet, + setTooltip: popup.set, + clearTooltip: popup.clear, + clearTimer, + resetTimer, + readState, + isEnabled: () => enabled.get(), + setEnabled: (setToEnabled) => enabled.set(setToEnabled) + }); + }; + + var TooltippingState = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init$3 + }); + + const Tooltipping = create$3({ + fields: TooltippingSchema, + name: 'tooltipping', + active: ActiveTooltipping, + state: TooltippingState, + apis: TooltippingApis + }); + + const exhibit = () => nu$2({ + styles: { + '-webkit-user-select': 'none', + 'user-select': 'none', + '-ms-user-select': 'none', + '-moz-user-select': '-moz-none' + }, + attributes: { + unselectable: 'on' + } + }); + const events$1 = () => derive$2([ + abort(selectstart(), always) + ]); + + var ActiveUnselecting = /*#__PURE__*/Object.freeze({ + __proto__: null, + events: events$1, + exhibit: exhibit + }); + + const Unselecting = create$3({ + fields: [], + name: 'unselecting', + active: ActiveUnselecting + }); + + const getAttrs = (elem) => { + const attributes = elem.dom.attributes !== undefined ? elem.dom.attributes : []; + return foldl(attributes, (b, attr) => { + // Make class go through the class path. Do not list it as an attribute. + if (attr.name === 'class') { + return b; + } + else { + return { ...b, [attr.name]: attr.value }; + } + }, {}); + }; + const getClasses = (elem) => Array.prototype.slice.call(elem.dom.classList, 0); + const fromHtml = (html) => { + const elem = SugarElement.fromHtml(html); + const children$1 = children(elem); + const attrs = getAttrs(elem); + const classes = getClasses(elem); + const contents = children$1.length === 0 ? {} : { innerHtml: get$f(elem) }; + return { + tag: name$3(elem), + classes, + attributes: attrs, + ...contents + }; + }; + + const record = (spec) => { + const uid = isSketchSpec(spec) && hasNonNullableKey(spec, 'uid') ? spec.uid : generate$4('memento'); + const get = (anyInSystem) => anyInSystem.getSystem().getByUid(uid).getOrDie(); + const getOpt = (anyInSystem) => anyInSystem.getSystem().getByUid(uid).toOptional(); + const asSpec = () => ({ + ...spec, + uid + }); + return { + get, + getOpt, + asSpec + }; + }; + + // TODO: ^ rename the parts/ api to composites, it will break mobile alloy now if we do + const parts$g = AlloyParts; + const partType$1 = PartType; + + const fromSource = (event, source) => { + const stopper = Cell(false); + const cutter = Cell(false); + const stop = () => { + stopper.set(true); + }; + const cut = () => { + cutter.set(true); + }; + return { + stop, + cut, + isStopped: stopper.get, + isCut: cutter.get, + event, + // Used only for tiered menu at the moment. It is an element, not a component + setSource: source.set, + getSource: source.get + }; + }; + // Events that come from outside of the alloy root (e.g. window scroll) + const fromExternal = (event) => { + const stopper = Cell(false); + const stop = () => { + stopper.set(true); + }; + return { + stop, + cut: noop, // cutting has no meaning for a broadcasted event + isStopped: stopper.get, + isCut: never, + event, + // Nor do targets really + setSource: die('Cannot set source of a broadcasted event'), + getSource: die('Cannot get source of a broadcasted event') + }; + }; + + const isDangerous = (event) => { + // Will trigger the Back button in the browser + const keyEv = event.raw; + return keyEv.which === BACKSPACE[0] && !contains$2(['input', 'textarea'], name$3(event.target)) && !closest$1(event.target, '[contenteditable="true"]'); + }; + const setup$d = (container, rawSettings) => { + const settings = { + stopBackspace: true, + ...rawSettings + }; + const pointerEvents = [ + 'touchstart', + 'touchmove', + 'touchend', + 'touchcancel', + 'gesturestart', + 'mousedown', + 'mouseup', + 'mouseover', + 'mousemove', + 'mouseout', + 'click' + ]; + const tapEvent = monitor(settings); + // These events are just passed through ... no additional processing + const simpleEvents = map$2(pointerEvents.concat([ + 'selectstart', + 'input', + 'contextmenu', + 'change', + 'transitionend', + 'transitioncancel', + // Test the drag events + 'drag', + 'dragstart', + 'dragend', + 'dragenter', + 'dragleave', + 'dragover', + 'drop', + 'keyup' + ]), (type) => bind$1(container, type, (event) => { + tapEvent.fireIfReady(event, type).each((tapStopped) => { + if (tapStopped) { + event.kill(); + } + }); + const stopped = settings.triggerEvent(type, event); + if (stopped) { + event.kill(); + } + })); + const pasteTimeout = value$2(); + const onPaste = bind$1(container, 'paste', (event) => { + tapEvent.fireIfReady(event, 'paste').each((tapStopped) => { + if (tapStopped) { + event.kill(); + } + }); + const stopped = settings.triggerEvent('paste', event); + if (stopped) { + event.kill(); + } + pasteTimeout.set(setTimeout(() => { + settings.triggerEvent(postPaste(), event); + }, 0)); + }); + const onKeydown = bind$1(container, 'keydown', (event) => { + // Prevent default of backspace when not in input fields. + const stopped = settings.triggerEvent('keydown', event); + if (stopped) { + event.kill(); + } + else if (settings.stopBackspace && isDangerous(event)) { + event.prevent(); + } + }); + const onFocusIn = bind$1(container, 'focusin', (event) => { + const stopped = settings.triggerEvent('focusin', event); + if (stopped) { + event.kill(); + } + }); + const focusoutTimeout = value$2(); + const onFocusOut = bind$1(container, 'focusout', (event) => { + const stopped = settings.triggerEvent('focusout', event); + if (stopped) { + event.kill(); + } + // INVESTIGATE: Come up with a better way of doing this. Related target can be used, but not on FF. + // It allows the active element to change before firing the blur that we will listen to + // for things like closing popups + focusoutTimeout.set(setTimeout(() => { + settings.triggerEvent(postBlur(), event); + }, 0)); + }); + const unbind = () => { + each$1(simpleEvents, (e) => { + e.unbind(); + }); + onKeydown.unbind(); + onFocusIn.unbind(); + onFocusOut.unbind(); + onPaste.unbind(); + pasteTimeout.on(clearTimeout); + focusoutTimeout.on(clearTimeout); + }; + return { + unbind + }; + }; + + const derive = (rawEvent, rawTarget) => { + const source = get$h(rawEvent, 'target').getOr(rawTarget); + return Cell(source); + }; + + const adt = Adt.generate([ + { stopped: [] }, + { resume: ['element'] }, + { complete: [] } + ]); + const doTriggerHandler = (lookup, eventType, rawEvent, target, source, logger) => { + const handler = lookup(eventType, target); + const simulatedEvent = fromSource(rawEvent, source); + return handler.fold(() => { + // No handler, so complete. + logger.logEventNoHandlers(eventType, target); + return adt.complete(); + }, (handlerInfo) => { + const descHandler = handlerInfo.descHandler; + const eventHandler = getCurried(descHandler); + eventHandler(simulatedEvent); + // Now, check if the event was stopped. + if (simulatedEvent.isStopped()) { + logger.logEventStopped(eventType, handlerInfo.element, descHandler.purpose); + return adt.stopped(); + } + else if (simulatedEvent.isCut()) { + logger.logEventCut(eventType, handlerInfo.element, descHandler.purpose); + return adt.complete(); + } + else { + return parent(handlerInfo.element).fold(() => { + logger.logNoParent(eventType, handlerInfo.element, descHandler.purpose); + // No parent, so complete. + return adt.complete(); + }, (parent) => { + logger.logEventResponse(eventType, handlerInfo.element, descHandler.purpose); + // Resume at parent + return adt.resume(parent); + }); + } + }); + }; + const doTriggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, source, logger) => doTriggerHandler(lookup, eventType, rawEvent, rawTarget, source, logger).fold( + // stopped. + always, + // Go again. + (parent) => doTriggerOnUntilStopped(lookup, eventType, rawEvent, parent, source, logger), + // completed + never); + const triggerHandler = (lookup, eventType, rawEvent, target, logger) => { + const source = derive(rawEvent, target); + return doTriggerHandler(lookup, eventType, rawEvent, target, source, logger); + }; + const broadcast = (listeners, rawEvent, _logger) => { + const simulatedEvent = fromExternal(rawEvent); + each$1(listeners, (listener) => { + const descHandler = listener.descHandler; + const handler = getCurried(descHandler); + handler(simulatedEvent); + }); + return simulatedEvent.isStopped(); + }; + const triggerUntilStopped = (lookup, eventType, rawEvent, logger) => triggerOnUntilStopped(lookup, eventType, rawEvent, rawEvent.target, logger); + const triggerOnUntilStopped = (lookup, eventType, rawEvent, rawTarget, logger) => { + const source = derive(rawEvent, rawTarget); + return doTriggerOnUntilStopped(lookup, eventType, rawEvent, rawTarget, source, logger); + }; + + const eventHandler = (element, descHandler) => ({ + element, + descHandler + }); + const broadcastHandler = (id, handler) => ({ + id, + descHandler: handler + }); + const EventRegistry = () => { + const registry = {}; + const registerId = (extraArgs, id, events) => { + each(events, (v, k) => { + const handlers = registry[k] !== undefined ? registry[k] : {}; + handlers[id] = curryArgs(v, extraArgs); + registry[k] = handlers; + }); + }; + const findHandler = (handlers, elem) => read(elem) + .bind((id) => get$h(handlers, id)) + .map((descHandler) => eventHandler(elem, descHandler)); + // Given just the event type, find all handlers regardless of element + const filterByType = (type) => get$h(registry, type) + .map((handlers) => mapToArray(handlers, (f, id) => broadcastHandler(id, f))) + .getOr([]); + // Given event type, and element, find the handler. + const find = (isAboveRoot, type, target) => get$h(registry, type) + .bind((handlers) => closest(target, (elem) => findHandler(handlers, elem), isAboveRoot)); + const unregisterId = (id) => { + // INVESTIGATE: Find a better way than mutation if we can. + each(registry, (handlersById, _eventName) => { + if (has$2(handlersById, id)) { + delete handlersById[id]; + } + }); + }; + return { + registerId, + unregisterId, + filterByType, + find + }; + }; + + const Registry = () => { + const events = EventRegistry(); + // An index of uid -> built components + const components = {}; + const readOrTag = (component) => { + const elem = component.element; + return read(elem).getOrThunk(() => + // No existing tag, so add one. + write('uid-', component.element)); + }; + const failOnDuplicate = (component, tagId) => { + const conflict = components[tagId]; + if (conflict === component) { + unregister(component); + } + else { + throw new Error('The tagId "' + tagId + '" is already used by: ' + element(conflict.element) + '\nCannot use it for: ' + element(component.element) + '\n' + + 'The conflicting element is' + (inBody(conflict.element) ? ' ' : ' not ') + 'already in the DOM'); + } + }; + const register = (component) => { + const tagId = readOrTag(component); + if (hasNonNullableKey(components, tagId)) { + failOnDuplicate(component, tagId); + } + // Component is passed through an an extra argument to all events + const extraArgs = [component]; + events.registerId(extraArgs, tagId, component.events); + components[tagId] = component; + }; + const unregister = (component) => { + read(component.element).each((tagId) => { + delete components[tagId]; + events.unregisterId(tagId); + }); + }; + const filter = (type) => events.filterByType(type); + const find = (isAboveRoot, type, target) => events.find(isAboveRoot, type, target); + const getById = (id) => get$h(components, id); + return { + find, + filter, + register, + unregister, + getById + }; + }; + + const takeover = (root) => { + const isAboveRoot = (el) => parent(root.element).fold(always, (parent) => eq(el, parent)); + const registry = Registry(); + const lookup = (eventName, target) => registry.find(isAboveRoot, eventName, target); + const domEvents = setup$d(root.element, { + triggerEvent: (eventName, event) => { + return monitorEvent(eventName, event.target, (logger) => triggerUntilStopped(lookup, eventName, event, logger)); + } + }); + const systemApi = { + // This is a real system + debugInfo: constant$1('real'), + triggerEvent: (eventName, target, data) => { + monitorEvent(eventName, target, (logger) => + // The return value is not used because this is a fake event. + triggerOnUntilStopped(lookup, eventName, data, target, logger)); + }, + triggerFocus: (target, originator) => { + read(target).fold(() => { + // When the target is not within the alloy system, dispatch a normal focus event. + focus$4(target); + }, (_alloyId) => { + monitorEvent(focus$3(), target, (logger) => { + // NOTE: This will stop at first handler. + triggerHandler(lookup, focus$3(), { + // originator is used by the default events to ensure that focus doesn't + // get called infinitely + originator, + kill: noop, + prevent: noop, + target + }, target, logger); + return false; + }); + }); + }, + triggerEscape: (comp, simulatedEvent) => { + systemApi.triggerEvent('keydown', comp.element, simulatedEvent.event); + }, + getByUid: (uid) => { + return getByUid(uid); + }, + getByDom: (elem) => { + return getByDom(elem); + }, + build: build$1, + buildOrPatch: buildOrPatch, + addToGui: (c) => { + add(c); + }, + removeFromGui: (c) => { + remove(c); + }, + addToWorld: (c) => { + addToWorld(c); + }, + removeFromWorld: (c) => { + removeFromWorld(c); + }, + broadcast: (message) => { + broadcast$1(message); + }, + broadcastOn: (channels, message) => { + broadcastOn(channels, message); + }, + broadcastEvent: (eventName, event) => { + broadcastEvent(eventName, event); + }, + isConnected: always + }; + const addToWorld = (component) => { + component.connect(systemApi); + if (!isText(component.element)) { + registry.register(component); + each$1(component.components(), addToWorld); + systemApi.triggerEvent(systemInit(), component.element, { target: component.element }); + } + }; + const removeFromWorld = (component) => { + if (!isText(component.element)) { + each$1(component.components(), removeFromWorld); + registry.unregister(component); + } + component.disconnect(); + }; + const add = (component) => { + attach(root, component); + }; + const remove = (component) => { + detach(component); + }; + const destroy = () => { + // INVESTIGATE: something with registry? + domEvents.unbind(); + remove$7(root.element); + }; + const broadcastData = (data) => { + const receivers = registry.filter(receive()); + each$1(receivers, (receiver) => { + const descHandler = receiver.descHandler; + const handler = getCurried(descHandler); + handler(data); + }); + }; + const broadcast$1 = (message) => { + broadcastData({ + universal: true, + data: message + }); + }; + const broadcastOn = (channels, message) => { + broadcastData({ + universal: false, + channels, + data: message + }); + }; + // This doesn't follow usual DOM bubbling. It will just dispatch on all + // targets that have the event. It is the general case of the more specialised + // "message". "messages" may actually just go away. This is used for things + // like window scroll. + const broadcastEvent = (eventName, event) => { + const listeners = registry.filter(eventName); + return broadcast(listeners, event); + }; + const getByUid = (uid) => registry.getById(uid).fold(() => Result.error(new Error('Could not find component with uid: "' + uid + '" in system.')), Result.value); + const getByDom = (elem) => { + const uid = read(elem).getOr('not found'); + return getByUid(uid); + }; + addToWorld(root); + return { + root, + element: root.element, + destroy, + add, + remove, + getByUid, + getByDom, + addToWorld, + removeFromWorld, + broadcast: broadcast$1, + broadcastOn, + broadcastEvent + }; + }; + + const pointerEvents = () => { + const onClick = (component, simulatedEvent) => { + simulatedEvent.stop(); + emitExecute(component); + }; + return [ + // Trigger execute when clicked + run$1(click(), onClick), + run$1(tap(), onClick), + // Other mouse down listeners above this one should not get mousedown behaviour (like dragging) + cutter(touchstart()), + cutter(mousedown()) + ]; + }; + const events = (optAction) => { + const executeHandler = (action) => runOnExecute$1((component, simulatedEvent) => { + action(component); + simulatedEvent.stop(); + }); + return derive$2(flatten([ + // Only listen to execute if it is supplied + optAction.map(executeHandler).toArray(), + pointerEvents() + ])); + }; + + const factory$m = (detail) => { + const events$1 = events(detail.action); + const tag = detail.dom.tag; + const lookupAttr = (attr) => get$h(detail.dom, 'attributes').bind((attrs) => get$h(attrs, attr)); + // Button tags should not have a default role of button, and only buttons should + // get a type of button. + const getModAttributes = () => { + if (tag === 'button') { + // Default to type button, unless specified otherwise + const type = lookupAttr('type').getOr('button'); + // Only use a role if it is specified + const roleAttrs = lookupAttr('role').map((role) => ({ role })).getOr({}); + return { + type, + ...roleAttrs + }; + } + else { + // We are not a button, so type is irrelevant (unless specified) + // Default role to button + const role = detail.role.getOr(lookupAttr('role').getOr('button')); + return { role }; + } + }; + return { + uid: detail.uid, + dom: detail.dom, + components: detail.components, + events: events$1, + behaviours: SketchBehaviours.augment(detail.buttonBehaviours, [ + Focusing.config({}), + Keying.config({ + mode: 'execution', + // Note execution will capture keyup when the focus is on the button + // on Firefox, because otherwise it will fire a click event and double + // up on the action + useSpace: true, + useEnter: true + }) + ]), + domModification: { + attributes: getModAttributes() + }, + eventOrder: detail.eventOrder + }; + }; + const Button = single({ + name: 'Button', + factory: factory$m, + configFields: [ + defaulted('uid', undefined), + required$1('dom'), + defaulted('components', []), + SketchBehaviours.field('buttonBehaviours', [Focusing, Keying]), + option$3('action'), + option$3('role'), + defaulted('eventOrder', {}) + ] + }); + + const schema$m = constant$1([ + defaulted('shell', false), + required$1('makeItem'), + defaulted('setupItem', noop), + SketchBehaviours.field('listBehaviours', [Replacing]) + ]); + const customListDetail = () => ({ + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + const itemsPart = optional({ + name: 'items', + overrides: customListDetail + }); + const parts$f = constant$1([ + itemsPart + ]); + const name$1 = constant$1('CustomList'); + + const factory$l = (detail, components, _spec, _external) => { + const setItems = (list, items) => { + getListContainer(list).fold(() => { + // check that the group container existed. It may not have if the components + // did not list anything, and shell was false. + // eslint-disable-next-line no-console + console.error('Custom List was defined to not be a shell, but no item container was specified in components'); + throw new Error('Custom List was defined to not be a shell, but no item container was specified in components'); + }, (container) => { + // Get all the children of container, because they will be items. + // And then use the item setGroup api + const itemComps = Replacing.contents(container); + const numListsRequired = items.length; + const numListsToAdd = numListsRequired - itemComps.length; + const itemsToAdd = numListsToAdd > 0 ? + range$2(numListsToAdd, () => detail.makeItem()) : []; + const itemsToRemove = itemComps.slice(numListsRequired); + each$1(itemsToRemove, (item) => Replacing.remove(container, item)); + each$1(itemsToAdd, (item) => Replacing.append(container, item)); + const builtLists = Replacing.contents(container); + each$1(builtLists, (item, i) => { + detail.setupItem(list, item, items[i], i); + }); + }); + }; + // In shell mode, the group overrides need to be added to the main container, and there can be no children + const extra = detail.shell ? { behaviours: [Replacing.config({})], components: [] } : { behaviours: [], components }; + const getListContainer = (component) => detail.shell ? Optional.some(component) : getPart(component, detail, 'items'); + return { + uid: detail.uid, + dom: detail.dom, + components: extra.components, + behaviours: augment(detail.listBehaviours, extra.behaviours), + apis: { + setItems + } + }; + }; + const CustomList = composite({ + name: name$1(), + configFields: schema$m(), + partFields: parts$f(), + factory: factory$l, + apis: { + setItems: (apis, list, items) => { + apis.setItems(list, items); + } + } + }); + + const attribute = 'aria-controls'; + const find$1 = (queryElem) => { + const dependent = closest$4(queryElem, (elem) => { + if (!isElement$1(elem)) { + return false; + } + const id = get$g(elem, 'id'); + return id !== undefined && id.indexOf(attribute) > -1; + }); + return dependent.bind((dep) => { + const id = get$g(dep, 'id'); + const dos = getRootNode(dep); + return descendant(dos, `[${attribute}="${id}"]`); + }); + }; + const manager = () => { + const ariaId = generate$6(attribute); + const link = (elem) => { + set$9(elem, attribute, ariaId); + }; + const unlink = (elem) => { + remove$8(elem, attribute); + }; + return { + id: ariaId, + link, + unlink, + }; + }; + + const isAriaPartOf = (component, queryElem) => find$1(queryElem).exists((owner) => isPartOf(component, owner)); + const isPartOf = (component, queryElem) => closest$2(queryElem, (el) => eq(el, component.element), never) || isAriaPartOf(component, queryElem); + + const hoverEvent = 'alloy.item-hover'; + const focusEvent = 'alloy.item-focus'; + const toggledEvent = 'alloy.item-toggled'; + const onHover = (item) => { + // Firstly, check that the focus isn't already inside the item. This + // is to handle situations like widgets where the widget is inside the item + // and it has the focus, so as you slightly adjust the mouse, you don't + // want to lose focus on the widget. Note, that because this isn't API based + // (i.e. we are manually searching for focus), it may not be that flexible. + if (search(item.element).isNone() || Focusing.isFocused(item)) { + if (!Focusing.isFocused(item)) { + Focusing.focus(item); + } + emitWith(item, hoverEvent, { item }); + } + }; + const onFocus$1 = (item) => { + emitWith(item, focusEvent, { item }); + }; + const onToggled = (item, state) => { + emitWith(item, toggledEvent, { item, state }); + }; + const hover = constant$1(hoverEvent); + const focus$1 = constant$1(focusEvent); + const toggled = constant$1(toggledEvent); + + // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents + const getItemRole = (detail) => detail.role.fold(() => detail.toggling + .map((toggling) => toggling.exclusive ? 'menuitemradio' : 'menuitemcheckbox') + .getOr('menuitem'), identity); + const getTogglingSpec = (tConfig, isOption) => ({ + aria: { + mode: isOption ? 'selected' : 'checked' + }, + // Filter out the additional properties that are not in Toggling Behaviour's configuration (e.g. exclusive) + ...filter$1(tConfig, (_value, name) => name !== 'exclusive'), + onToggled: (component, state) => { + if (isFunction(tConfig.onToggled)) { + tConfig.onToggled(component, state); + } + onToggled(component, state); + } + }); + const builder$2 = (detail) => ({ + dom: detail.dom, + domModification: { + // INVESTIGATE: If more efficient, destructure attributes out + ...detail.domModification, + attributes: { + 'role': getItemRole(detail), + ...detail.domModification.attributes, + 'aria-haspopup': detail.hasSubmenu, + ...(detail.hasSubmenu ? { 'aria-expanded': false } : {}) + } + }, + behaviours: SketchBehaviours.augment(detail.itemBehaviours, [ + // Investigate, is the Toggling.revoke still necessary here? + detail.toggling.fold(Toggling.revoke, (tConfig) => Toggling.config(getTogglingSpec(tConfig, detail.role.exists((role) => role === 'option')))), + Focusing.config({ + ignore: detail.ignoreFocus, + // Rationale: because nothing is focusable, when you click + // on the items to choose them, the focus jumps to the first + // focusable outer container ... often the body. If we prevent + // mouseDown ... that doesn't happen. But only tested on Chrome/FF. + stopMousedown: detail.ignoreFocus, + onFocus: (component) => { + onFocus$1(component); + } + }), + Keying.config({ + mode: 'execution' + }), + Representing.config({ + store: { + mode: 'memory', + initialValue: detail.data + } + }), + config('item-type-events', [ + // Treat clicks the same as a button + ...pointerEvents(), + run$1(mouseover(), onHover), + run$1(focusItem(), Focusing.focus) + ]) + ]), + components: detail.components, + eventOrder: detail.eventOrder + }); + const schema$l = [ + required$1('data'), + required$1('components'), + required$1('dom'), + defaulted('hasSubmenu', false), + option$3('toggling'), + option$3('role'), + // Maybe this needs to have fewer behaviours + SketchBehaviours.field('itemBehaviours', [Toggling, Focusing, Keying, Representing]), + defaulted('ignoreFocus', false), + defaulted('domModification', {}), + output$1('builder', builder$2), + defaulted('eventOrder', {}) + ]; + var ItemType = schema$l; + + const builder$1 = (detail) => ({ + dom: detail.dom, + components: detail.components, + events: derive$2([ + stopper(focusItem()) + ]) + }); + const schema$k = [ + required$1('dom'), + required$1('components'), + output$1('builder', builder$1) + ]; + var SeparatorType = schema$k; + + const owner$2 = constant$1('item-widget'); + const parts$e = constant$1([ + required({ + name: 'widget', + overrides: (detail) => { + return { + behaviours: derive$1([ + Representing.config({ + store: { + mode: 'manual', + getValue: (_component) => { + return detail.data; + }, + setValue: noop + } + }) + ]) + }; + } + }) + ]); + + const builder = (detail) => { + const subs = substitutes(owner$2(), detail, parts$e()); + const components = components$1(owner$2(), detail, subs.internals()); + const focusWidget = (component) => getPart(component, detail, 'widget').map((widget) => { + Keying.focusIn(widget); + return widget; + }); + const onHorizontalArrow = (component, simulatedEvent) => inside(simulatedEvent.event.target) ? Optional.none() : (() => { + if (detail.autofocus) { + simulatedEvent.setSource(component.element); + return Optional.none(); + } + else { + return Optional.none(); + } + })(); + return { + dom: detail.dom, + components, + domModification: detail.domModification, + events: derive$2([ + runOnExecute$1((component, simulatedEvent) => { + focusWidget(component).each((_widget) => { + simulatedEvent.stop(); + }); + }), + run$1(mouseover(), onHover), + run$1(focusItem(), (component, _simulatedEvent) => { + if (detail.autofocus) { + focusWidget(component); + } + else { + Focusing.focus(component); + } + }) + ]), + behaviours: SketchBehaviours.augment(detail.widgetBehaviours, [ + Representing.config({ + store: { + mode: 'memory', + initialValue: detail.data + } + }), + Focusing.config({ + ignore: detail.ignoreFocus, + // What about stopMousedown from ItemType? + onFocus: (component) => { + onFocus$1(component); + } + }), + Keying.config({ + mode: 'special', + // This is required as long as Highlighting tries to focus the first thing (after focusItem fires) + focusIn: detail.autofocus ? (component) => { + focusWidget(component); + } : revoke(), + onLeft: onHorizontalArrow, + onRight: onHorizontalArrow, + onEscape: (component, simulatedEvent) => { + // If the outer list item didn't have focus, + // then focus it (i.e. escape the inner widget). Only do if not autofocusing + // Autofocusing should treat the widget like it is the only item, so it should + // let its outer menu handle escape + if (!Focusing.isFocused(component) && !detail.autofocus) { + Focusing.focus(component); + return Optional.some(true); + } + else if (detail.autofocus) { + simulatedEvent.setSource(component.element); + return Optional.none(); + } + else { + return Optional.none(); + } + } + }) + ]) + }; + }; + const schema$j = [ + required$1('uid'), + required$1('data'), + required$1('components'), + required$1('dom'), + defaulted('autofocus', false), + defaulted('ignoreFocus', false), + SketchBehaviours.field('widgetBehaviours', [Representing, Focusing, Keying]), + defaulted('domModification', {}), + // We don't have the uid at this point + defaultUidsSchema(parts$e()), + output$1('builder', builder) + ]; + var WidgetType = schema$j; + + const itemSchema$2 = choose$1('type', { + widget: WidgetType, + item: ItemType, + separator: SeparatorType + }); + const configureGrid = (detail, movementInfo) => ({ + mode: 'flatgrid', + selector: '.' + detail.markers.item, + initSize: { + numColumns: movementInfo.initSize.numColumns, + numRows: movementInfo.initSize.numRows + }, + focusManager: detail.focusManager + }); + const configureMatrix = (detail, movementInfo) => ({ + mode: 'matrix', + selectors: { + row: movementInfo.rowSelector, + cell: '.' + detail.markers.item + }, + previousSelector: movementInfo.previousSelector, + focusManager: detail.focusManager + }); + const configureMenu = (detail, movementInfo) => ({ + mode: 'menu', + selector: '.' + detail.markers.item, + moveOnTab: movementInfo.moveOnTab, + focusManager: detail.focusManager + }); + const parts$d = constant$1([ + group({ + factory: { + sketch: (spec) => { + const itemInfo = asRawOrDie$1('menu.spec item', itemSchema$2, spec); + return itemInfo.builder(itemInfo); + } + }, + name: 'items', + unit: 'item', + defaults: (detail, u) => { + // Switch this to a common library + // The WidgetItemSpec is just because it has uid, and the others don't + // for some reason. So there is nothing guaranteeing that `u` is a WidgetItemSpec, + // so we should probably rework this code. + return has$2(u, 'uid') ? u : { + ...u, + uid: generate$4('item') + }; + }, + overrides: (detail, u) => { + return { + type: u.type, + ignoreFocus: detail.fakeFocus, + domModification: { + classes: [detail.markers.item] + } + }; + } + }) + ]); + const schema$i = constant$1([ + optionString('role'), + required$1('value'), + required$1('items'), + required$1('dom'), + required$1('components'), + defaulted('eventOrder', {}), + field('menuBehaviours', [Highlighting, Representing, Composing, Keying]), + defaultedOf('movement', { + // When you don't specify movement for a Menu, this is what you get + // a "menu" type of movement that moves on tab. If you want finer-grained + // control, like disabling moveOnTab, then you need to specify + // your entire movement configuration when creating your MenuSpec. + mode: 'menu', + moveOnTab: true + }, choose$1('mode', { + grid: [ + initSize(), + output$1('config', configureGrid) + ], + matrix: [ + output$1('config', configureMatrix), + required$1('rowSelector'), + defaulted('previousSelector', Optional.none), + ], + menu: [ + defaulted('moveOnTab', true), + output$1('config', configureMenu) + ] + })), + itemMarkers(), + defaulted('fakeFocus', false), + defaulted('focusManager', dom$2()), + onHandler('onHighlight'), + onHandler('onDehighlight'), + defaulted('showMenuRole', true), + ]); + + const focus = constant$1('alloy.menu-focus'); + + const deselectOtherRadioItems = (menu, item) => { + // TODO: TINY-8812 - This ideally should be done in a way such that a menu can have multiple radio groups. + const checkedRadioItems = descendants(menu.element, '[role="menuitemradio"][aria-checked="true"]'); + each$1(checkedRadioItems, (ele) => { + if (!eq(ele, item.element)) { + menu.getSystem().getByDom(ele).each((c) => { + Toggling.off(c); + }); + } + }); + }; + const make$6 = (detail, components, _spec, _externals) => ({ + uid: detail.uid, + dom: detail.dom, + markers: detail.markers, + behaviours: augment(detail.menuBehaviours, [ + Highlighting.config({ + // Highlighting for a menu is selecting items inside the menu + highlightClass: detail.markers.selectedItem, + itemClass: detail.markers.item, + onHighlight: detail.onHighlight, + onDehighlight: detail.onDehighlight + }), + Representing.config({ + store: { + mode: 'memory', + initialValue: detail.value + } + }), + Composing.config({ + find: Optional.some + }), + Keying.config(detail.movement.config(detail, detail.movement)) + ]), + events: derive$2([ + // This is dispatched from a menu to tell an item to be highlighted. + run$1(focus$1(), (menu, simulatedEvent) => { + // Highlight the item + const event = simulatedEvent.event; + menu.getSystem().getByDom(event.target).each((item) => { + Highlighting.highlight(menu, item); + simulatedEvent.stop(); + // Trigger the focus event on the menu. + emitWith(menu, focus(), { menu, item }); + }); + }), + // Highlight the item that the cursor is over. The onHighlight + // code needs to handle updating focus if required + run$1(hover(), (menu, simulatedEvent) => { + const item = simulatedEvent.event.item; + Highlighting.highlight(menu, item); + }), + // Enforce only a single radio menu item is toggled by finding any other toggled + // radio menu items and untoggling them when a certain item is toggled + run$1(toggled(), (menu, simulatedEvent) => { + const { item, state } = simulatedEvent.event; + if (state && get$g(item.element, 'role') === 'menuitemradio') { + deselectOtherRadioItems(menu, item); + } + }) + ]), + components, + eventOrder: detail.eventOrder, + ...detail.showMenuRole ? { + domModification: { + attributes: { + role: detail.role.getOr('menu') + } + } + } : {} + }); + + const Menu = composite({ + name: 'Menu', + configFields: schema$i(), + partFields: parts$d(), + factory: make$6 + }); + + const transpose$1 = (obj) => + // Assumes no duplicate fields. + tupleMap(obj, (v, k) => ({ k: v, v: k })); + const trace = (items, byItem, byMenu, finish) => + // Given a finishing submenu (which will be the value of expansions), + // find the triggering item, find its menu, and repeat the process. If there + // is no triggering item, we are done. + get$h(byMenu, finish).bind((triggerItem) => get$h(items, triggerItem).bind((triggerMenu) => { + const rest = trace(items, byItem, byMenu, triggerMenu); + return Optional.some([triggerMenu].concat(rest)); + })).getOr([]); + const generate$2 = (menus, expansions) => { + const items = {}; + each(menus, (menuItems, menu) => { + each$1(menuItems, (item) => { + items[item] = menu; + }); + }); + const byItem = expansions; + const byMenu = transpose$1(expansions); + // For each menu, calculate the backlog of submenus to get to it. + const menuPaths = map$1(byMenu, (_triggerItem, submenu) => [submenu].concat(trace(items, byItem, byMenu, submenu))); + return map$1(items, (menu) => get$h(menuPaths, menu).getOr([menu])); + }; + + const init$2 = () => { + const expansions = Cell({}); + const menus = Cell({}); + const paths = Cell({}); + const primary = value$2(); + // Probably think of a better way to store this information. + const directory = Cell({}); + const clear = () => { + expansions.set({}); + menus.set({}); + paths.set({}); + primary.clear(); + }; + const isClear = () => primary.get().isNone(); + const setMenuBuilt = (menuName, built) => { + menus.set({ + ...menus.get(), + [menuName]: { + type: 'prepared', + menu: built + } + }); + }; + const setContents = (sPrimary, sMenus, sExpansions, dir) => { + primary.set(sPrimary); + expansions.set(sExpansions); + menus.set(sMenus); + directory.set(dir); + const sPaths = generate$2(dir, sExpansions); + paths.set(sPaths); + }; + const getTriggeringItem = (menuValue) => find$4(expansions.get(), (v, _k) => v === menuValue); + const getTriggerData = (menuValue, getItemByValue, path) => getPreparedMenu(menuValue).bind((menu) => getTriggeringItem(menuValue).bind((triggeringItemValue) => getItemByValue(triggeringItemValue).map((triggeredItem) => ({ + triggeredMenu: menu, + triggeringItem: triggeredItem, + triggeringPath: path + })))); + const getTriggeringPath = (itemValue, getItemByValue) => { + // Get the path up to the last item + const extraPath = filter$2(lookupItem(itemValue).toArray(), (menuValue) => getPreparedMenu(menuValue).isSome()); + return get$h(paths.get(), itemValue).bind((path) => { + // remember the path is [ most-recent-menu, next-most-recent-menu ] + // convert each menu identifier into { triggeringItem: comp, menu: comp } + // could combine into a fold ... probably a left to reverse ... but we'll take the + // straightforward version when prototyping + const revPath = reverse(extraPath.concat(path)); + const triggers = bind$3(revPath, (menuValue, menuIndex) => + // finding menuValue, it should match the trigger + getTriggerData(menuValue, getItemByValue, revPath.slice(0, menuIndex + 1)).fold(() => is$1(primary.get(), menuValue) ? [] : [Optional.none()], (data) => [Optional.some(data)])); + // Convert List> to Optional> if ALL are Some + return sequence(triggers); + }); + }; + // Given an item, return a list of all menus including the one that it triggered (if there is one) + const expand = (itemValue) => get$h(expansions.get(), itemValue).map((menu) => { + const current = get$h(paths.get(), itemValue).getOr([]); + return [menu].concat(current); + }); + const collapse = (itemValue) => + // Look up which key has the itemValue + get$h(paths.get(), itemValue).bind((path) => path.length > 1 ? Optional.some(path.slice(1)) : Optional.none()); + const refresh = (itemValue) => get$h(paths.get(), itemValue); + const getPreparedMenu = (menuValue) => lookupMenu(menuValue).bind(extractPreparedMenu); + const lookupMenu = (menuValue) => get$h(menus.get(), menuValue); + const lookupItem = (itemValue) => get$h(expansions.get(), itemValue); + const otherMenus = (path) => { + const menuValues = directory.get(); + return difference(keys(menuValues), path); + }; + const getPrimary = () => primary.get().bind(getPreparedMenu); + const getMenus = () => menus.get(); + return { + setMenuBuilt, + setContents, + expand, + refresh, + collapse, + lookupMenu, + lookupItem, + otherMenus, + getPrimary, + getMenus, + clear, + isClear, + getTriggeringPath + }; + }; + const extractPreparedMenu = (prep) => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none(); + const LayeredState = { + init: init$2, + extractPreparedMenu + }; + + const onMenuItemHighlightedEvent = generate$6('tiered-menu-item-highlight'); + const onMenuItemDehighlightedEvent = generate$6('tiered-menu-item-dehighlight'); + + const make$5 = (detail, _rawUiSpec) => { + const submenuParentItems = value$2(); + // So the way to provide extra configuration for the menus that tiered menus create is just + // to provide different menu specs when building up the TieredData. The TieredMenu itself + // does not control it, except to set: markers, fakeFocus, onHighlight, and focusManager + const buildMenus = (container, primaryName, menus) => map$1(menus, (spec, name) => { + const makeSketch = () => Menu.sketch({ + ...spec, + value: name, + // The TieredMenu markers should be inherited by the Menu. "Markers" are things like + // what is the class for the currently selected item + markers: detail.markers, + // If the TieredMenu has been configured with FakeFocus, it needs the menus that it generates + // to preserve that configuration. Generally, FakeFocus is used for situations where the user + // wants to keep focus inside some editable element (like an input, or editor content) + fakeFocus: detail.fakeFocus, + // The TieredMenu detail.onHighlight function only relates to selecting an item, + // not a menu, and the menuComp it is passed is the menu, not the tiered menu. + // This makes it a difficult handler to use for a tieredmenu, so we are + // deprecating it. + onHighlight: (menuComp, itemComp) => { + // Trigger an internal event so that we can listen to it at the tieredmenu + // level, and call detail.onHighlightItem handler with tmenu, menu, and item. + const highlightData = { + menuComp, + itemComp + }; + emitWith(menuComp, onMenuItemHighlightedEvent, highlightData); + }, + onDehighlight: (menuComp, itemComp) => { + const dehighlightData = { + menuComp, + itemComp + }; + // Trigger an internal event so that we can listen to it at the tieredmenu + // level, and call detail.onDehighlightItem handler with tmenu, menu, and item. + emitWith(menuComp, onMenuItemDehighlightedEvent, dehighlightData); + }, + // The Menu itself doesn't set the focusManager based on the value of fakeFocus. It only uses + // its fakeFocus configuration for creating items that ignore focus, but it still needs to be + // told which focusManager to use. Perhaps we should change this, though it does allow for more + // complex focusManagers in single menus. + focusManager: detail.fakeFocus ? highlights() : dom$2() + }); + // Only build the primary at first. Build the others as needed. + return name === primaryName ? { + type: 'prepared', + menu: container.getSystem().build(makeSketch()) + } : { + type: 'notbuilt', + nbMenu: makeSketch + }; + }); + const layeredState = LayeredState.init(); + const setup = (container) => { + const componentMap = buildMenus(container, detail.data.primary, detail.data.menus); + const directory = toDirectory(); + layeredState.setContents(detail.data.primary, componentMap, detail.data.expansions, directory); + return layeredState.getPrimary(); + }; + const getItemValue = (item) => Representing.getValue(item).value; + // Find the first item with value `itemValue` in any of the menus inside this tiered menu structure + const getItemByValue = (_container, menus, itemValue) => + // Can *greatly* improve the performance of this by calculating things up front. + findMap(menus, (menu) => { + if (!menu.getSystem().isConnected()) { + return Optional.none(); + } + const candidates = Highlighting.getCandidates(menu); + return find$5(candidates, (c) => getItemValue(c) === itemValue); + }); + const toDirectory = (_container) => map$1(detail.data.menus, (data, _menuName) => bind$3(data.items, (item) => item.type === 'separator' ? [] : [item.data.value])); + // This just sets the active menu. It will not set any active items. + const setActiveMenu = Highlighting.highlight; + // The item highlighted as active is either the currently active item in the menu, + // or the first one. + const setActiveMenuAndItem = (container, menu) => { + // Firstly, choose the active menu + setActiveMenu(container, menu); + // Then, choose the active item inside the active menu + Highlighting.getHighlighted(menu).orThunk(() => Highlighting.getFirst(menu)).each((item) => { + if (detail.fakeFocus) { + // When using fakeFocus, the items won't have a tab-index, so calling focusItem on them + // won't do anything. So we need to manually call highlighting, which is what fakeFocus + // uses. It would probably be better to use the focusManager specified. + Highlighting.highlight(menu, item); + } + else { + // We don't just use Focusing.focus here, because some items can have slightly different + // handling when they respond to a focusItem event. Widgets with autofocus, for example, + // will trigger a Keying.focusIn instead of Focusing.focus call, because they want to move + // the focus _inside_ the widget, not just to its outer level. The focusItem event + // performs a similar purpose to SystemEvents.focus() and potentially, could be consolidated. + dispatch(container, item.element, focusItem()); + } + }); + }; + const getMenus = (state, menuValues) => cat(map$2(menuValues, (mv) => state.lookupMenu(mv).bind((prep) => prep.type === 'prepared' ? Optional.some(prep.menu) : Optional.none()))); + const closeOthers = (container, state, path) => { + const others = getMenus(state, state.otherMenus(path)); + each$1(others, (o) => { + // May not need to do the active menu thing. + remove$2(o.element, [detail.markers.backgroundMenu]); + if (!detail.stayInDom) { + Replacing.remove(container, o); + } + }); + }; + const getSubmenuParents = (container) => submenuParentItems.get().getOrThunk(() => { + const r = {}; + const items = descendants(container.element, `.${detail.markers.item}`); + const parentItems = filter$2(items, (i) => get$g(i, 'aria-haspopup') === 'true'); + each$1(parentItems, (i) => { + container.getSystem().getByDom(i).each((itemComp) => { + const key = getItemValue(itemComp); + r[key] = itemComp; + }); + }); + submenuParentItems.set(r); + return r; + }); + // Not ideal. Ideally, we would like a map of item keys to components. + const updateAriaExpansions = (container, path) => { + const parentItems = getSubmenuParents(container); + each(parentItems, (v, k) => { + // Really should turn path into a Set + const expanded = contains$2(path, k); + set$9(v.element, 'aria-expanded', expanded); + }); + }; + const updateMenuPath = (container, state, path) => Optional.from(path[0]).bind((latestMenuName) => state.lookupMenu(latestMenuName).bind((menuPrep) => { + if (menuPrep.type === 'notbuilt') { + return Optional.none(); + } + else { + const activeMenu = menuPrep.menu; + const rest = getMenus(state, path.slice(1)); + each$1(rest, (r) => { + add$2(r.element, detail.markers.backgroundMenu); + }); + if (!inBody(activeMenu.element)) { + Replacing.append(container, premade(activeMenu)); + } + // Remove the background-menu class from the active menu + remove$2(activeMenu.element, [detail.markers.backgroundMenu]); + setActiveMenuAndItem(container, activeMenu); + closeOthers(container, state, path); + return Optional.some(activeMenu); + } + })); + let ExpandHighlightDecision; + (function (ExpandHighlightDecision) { + ExpandHighlightDecision[ExpandHighlightDecision["HighlightSubmenu"] = 0] = "HighlightSubmenu"; + ExpandHighlightDecision[ExpandHighlightDecision["HighlightParent"] = 1] = "HighlightParent"; + })(ExpandHighlightDecision || (ExpandHighlightDecision = {})); + const buildIfRequired = (container, menuName, menuPrep) => { + if (menuPrep.type === 'notbuilt') { + const menu = container.getSystem().build(menuPrep.nbMenu()); + layeredState.setMenuBuilt(menuName, menu); + return menu; + } + else { + return menuPrep.menu; + } + }; + const expandRight = (container, item, decision = ExpandHighlightDecision.HighlightSubmenu) => { + if (item.hasConfigured(Disabling) && Disabling.isDisabled(item)) { + return Optional.some(item); + } + else { + const value = getItemValue(item); + return layeredState.expand(value).bind((path) => { + // Called when submenus are opened by keyboard AND hovering navigation + updateAriaExpansions(container, path); + // When expanding, always select the first. + return Optional.from(path[0]).bind((menuName) => layeredState.lookupMenu(menuName).bind((activeMenuPrep) => { + const activeMenu = buildIfRequired(container, menuName, activeMenuPrep); + // DUPE with above. Fix later. + if (!inBody(activeMenu.element)) { + Replacing.append(container, premade(activeMenu)); + } + // updateMenuPath is the code which changes the active menu. We don't always + // want to change the active menu. Sometimes, we just want to show it (e.g. hover) + detail.onOpenSubmenu(container, item, activeMenu, reverse(path)); + if (decision === ExpandHighlightDecision.HighlightSubmenu) { + Highlighting.highlightFirst(activeMenu); + return updateMenuPath(container, layeredState, path); + } + else { + Highlighting.dehighlightAll(activeMenu); + return Optional.some(item); + } + })); + }); + } + }; + const collapseLeft = (container, item) => { + const value = getItemValue(item); + return layeredState.collapse(value).bind((path) => { + // Called when submenus are closed because of KEYBOARD navigation + updateAriaExpansions(container, path); + return updateMenuPath(container, layeredState, path).map((activeMenu) => { + detail.onCollapseMenu(container, item, activeMenu); + return activeMenu; + }); + }); + }; + const updateView = (container, item) => { + const value = getItemValue(item); + return layeredState.refresh(value).bind((path) => { + // Only this function collapses irrelevant submenus when navigating by HOVERING. + // Does mean this is called twice when navigating by hovering, since both + // updateView and expandRight are called by the ItemEvents.hover() handler + updateAriaExpansions(container, path); + return updateMenuPath(container, layeredState, path); + }); + }; + const onRight = (container, item) => inside(item.element) ? Optional.none() : expandRight(container, item, ExpandHighlightDecision.HighlightSubmenu); + const onLeft = (container, item) => + // Exclude inputs, textareas etc. + inside(item.element) ? Optional.none() : collapseLeft(container, item); + const onEscape = (container, item) => collapseLeft(container, item).orThunk(() => detail.onEscape(container, item).map(() => container) // This should only fire when the user presses ESC ... not any other close. + ); + const keyOnItem = (f) => (container, simulatedEvent) => { + // 2022-08-16 This seems to be the only code in alloy that actually uses + // the getSource aspect of an event. Remember, that this code is firing + // when an event bubbles up the tiered menu, e.g. left arrow key. + // The only current code that sets the source manually is in the Widget item + // type, and it only sets the source when it is using autofocus. Autofocus + // is used to essentially treat the widget like it is the top-level item, so + // when events originate from *within* the widget, their source is changed to + // the top-level item. Consider removing EventSource from alloy altogether. + return closest$3(simulatedEvent.getSource(), `.${detail.markers.item}`) + .bind((target) => container.getSystem().getByDom(target).toOptional().bind((item) => f(container, item).map(always))); + }; + // NOTE: Many of these events rely on identifying the current item by information + // sent with the event. However, in situations where you are using fakeFocus, but + // the real focus is still somewhere in the menu (e.g. search bar), this will lead to + // an incorrect identification of the active item. Ideally, instead of pulling the + // item from the event, we should just use Highlighting to identify the active item, + // and operate on it. However, not all events will necessarily have to happen on the + // active item, so we need to consider all the cases before making this change. For now, + // there will be a known limitation that if the real focus is still inside the TieredMenu, + // but the menu is using fakeFocus, then the actions will operate on the wrong targets. + // A workaround for that is to stop or cut or redispatch the events in whichever + // component has the real focus. + // TODO: TINY-9011 Introduce proper handling of fakeFocus in TieredMenu + const events = derive$2([ + // Set "active-menu" for the menu with focus + run$1(focus(), (tmenu, simulatedEvent) => { + // Ensure the item is actually part of this menu structure, and not part of another menu structure that's bubbling. + const item = simulatedEvent.event.item; + layeredState.lookupItem(getItemValue(item)).each(() => { + const menu = simulatedEvent.event.menu; + Highlighting.highlight(tmenu, menu); + const value = getItemValue(simulatedEvent.event.item); + layeredState.refresh(value).each((path) => closeOthers(tmenu, layeredState, path)); + }); + }), + runOnExecute$1((component, simulatedEvent) => { + // Trigger on execute on the targeted element + // I.e. clicking on menu item + const target = simulatedEvent.event.target; + component.getSystem().getByDom(target).each((item) => { + const itemValue = getItemValue(item); + // INVESTIGATE: I don't know if this is doing anything any more. Check. + if (itemValue.indexOf('collapse-item') === 0) { + collapseLeft(component, item); + } + expandRight(component, item, ExpandHighlightDecision.HighlightSubmenu).fold(() => { + detail.onExecute(component, item); + }, noop); + }); + }), + // Open the menu as soon as it is added to the DOM + runOnAttached((container, _simulatedEvent) => { + setup(container).each((primary) => { + Replacing.append(container, premade(primary)); + detail.onOpenMenu(container, primary); + if (detail.highlightOnOpen === HighlightOnOpen.HighlightMenuAndItem) { + setActiveMenuAndItem(container, primary); + } + else if (detail.highlightOnOpen === HighlightOnOpen.HighlightJustMenu) { + setActiveMenu(container, primary); + } + }); + }), + // Listen to the events bubbling up from menu about highlighting, and trigger + // our handlers with tmenu, menu and item + run$1(onMenuItemHighlightedEvent, (tmenuComp, se) => { + detail.onHighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp); + }), + run$1(onMenuItemDehighlightedEvent, (tmenuComp, se) => { + detail.onDehighlightItem(tmenuComp, se.event.menuComp, se.event.itemComp); + }), + ...(detail.navigateOnHover ? [ + // Hide any irrelevant submenus and expand any submenus based + // on hovered item + run$1(hover(), (tmenu, simulatedEvent) => { + const item = simulatedEvent.event.item; + updateView(tmenu, item); + expandRight(tmenu, item, ExpandHighlightDecision.HighlightParent); + detail.onHover(tmenu, item); + }) + ] : []) + ]); + const getActiveItem = (container) => Highlighting.getHighlighted(container).bind(Highlighting.getHighlighted); + const collapseMenuApi = (container) => { + getActiveItem(container).each((currentItem) => { + collapseLeft(container, currentItem); + }); + }; + const highlightPrimary = (container) => { + layeredState.getPrimary().each((primary) => { + setActiveMenuAndItem(container, primary); + }); + }; + const extractMenuFromContainer = (container) => Optional.from(container.components()[0]).filter((comp) => get$g(comp.element, 'role') === 'menu'); + const repositionMenus = (container) => { + // Get the primary menu + const maybeActivePrimary = layeredState.getPrimary().bind((primary) => + // Get the triggering path (item, menu) up to the active item + getActiveItem(container).bind((currentItem) => { + const itemValue = getItemValue(currentItem); + const allMenus = values(layeredState.getMenus()); + const preparedMenus = cat(map$2(allMenus, LayeredState.extractPreparedMenu)); + return layeredState.getTriggeringPath(itemValue, (v) => getItemByValue(container, preparedMenus, v)); + }).map((triggeringPath) => ({ primary, triggeringPath }))); + maybeActivePrimary.fold(() => { + // When a menu is open but there is no activeItem, we get the menu from the container. + extractMenuFromContainer(container).each((primaryMenu) => { + detail.onRepositionMenu(container, primaryMenu, []); + }); + }, ({ primary, triggeringPath }) => { + // Refresh all the menus up to the active item + detail.onRepositionMenu(container, primary, triggeringPath); + }); + }; + const apis = { + collapseMenu: collapseMenuApi, + highlightPrimary, + repositionMenus + }; + return { + uid: detail.uid, + dom: detail.dom, + markers: detail.markers, + behaviours: augment(detail.tmenuBehaviours, [ + Keying.config({ + mode: 'special', + onRight: keyOnItem(onRight), + onLeft: keyOnItem(onLeft), + onEscape: keyOnItem(onEscape), + focusIn: (container, _keyInfo) => { + layeredState.getPrimary().each((primary) => { + dispatch(container, primary.element, focusItem()); + }); + } + }), + // Highlighting is used for highlighting the active menu + Highlighting.config({ + highlightClass: detail.markers.selectedMenu, + itemClass: detail.markers.menu + }), + Composing.config({ + find: (container) => { + return Highlighting.getHighlighted(container); + } + }), + Replacing.config({}) + ]), + eventOrder: detail.eventOrder, + apis, + events + }; + }; + const collapseItem$1 = constant$1('collapse-item'); + + const tieredData = (primary, menus, expansions) => ({ + primary, + menus, + expansions + }); + const singleData = (name, menu) => ({ + primary: name, + menus: wrap(name, menu), + expansions: {} + }); + const collapseItem = (text) => ({ + value: generate$6(collapseItem$1()), + meta: { + text + } + }); + const tieredMenu = single({ + name: 'TieredMenu', + configFields: [ + onStrictKeyboardHandler('onExecute'), + onStrictKeyboardHandler('onEscape'), + onStrictHandler('onOpenMenu'), + onStrictHandler('onOpenSubmenu'), + onHandler('onRepositionMenu'), + onHandler('onCollapseMenu'), + // Ideally, we should validate that this is a valid value, but + // this is an number-based enum, so it would just be a number. + defaulted('highlightOnOpen', HighlightOnOpen.HighlightMenuAndItem), + requiredObjOf('data', [ + required$1('primary'), + required$1('menus'), + required$1('expansions') + ]), + defaulted('fakeFocus', false), + onHandler('onHighlightItem'), + onHandler('onDehighlightItem'), + onHandler('onHover'), + tieredMenuMarkers(), + required$1('dom'), + defaulted('navigateOnHover', true), + defaulted('stayInDom', false), + field('tmenuBehaviours', [Keying, Highlighting, Composing, Replacing]), + defaulted('eventOrder', {}) + ], + apis: { + collapseMenu: (apis, tmenu) => { + apis.collapseMenu(tmenu); + }, + // This will highlight the primary menu AND an item in the primary menu + // Do not use just to set the active menu. + highlightPrimary: (apis, tmenu) => { + apis.highlightPrimary(tmenu); + }, + repositionMenus: (apis, tmenu) => { + apis.repositionMenus(tmenu); + } + }, + factory: make$5, + extraApis: { + tieredData, + singleData, + collapseItem + } + }); + + const suffix = constant$1('sink'); + const partType = constant$1(optional({ + name: suffix(), + overrides: constant$1({ + dom: { + tag: 'div' + }, + behaviours: derive$1([ + Positioning.config({ + // TODO: Make an internal sink also be able to be used with relative layouts + useFixed: always + }) + ]), + events: derive$2([ + // Sinks should not let keydown or click propagate + cutter(keydown()), + cutter(mousedown()), + cutter(click()) + ]) + }) + })); + + const schema$h = objOfOnly([ + defaulted('isExtraPart', never), + optionObjOf('fireEventInstead', [ + defaulted('event', dismissRequested()) + ]) + ]); + const receivingChannel$1 = (rawSpec) => { + const detail = asRawOrDie$1('Dismissal', schema$h, rawSpec); + return { + [dismissPopups()]: { + schema: objOfOnly([ + required$1('target') + ]), + onReceive: (sandbox, data) => { + if (Sandboxing.isOpen(sandbox)) { + const isPart = Sandboxing.isPartOf(sandbox, data.target) || detail.isExtraPart(sandbox, data.target); + if (!isPart) { + detail.fireEventInstead.fold(() => Sandboxing.close(sandbox), (fe) => emit(sandbox, fe.event)); + } + } + } + } + }; + }; + + const schema$g = objOfOnly([ + optionObjOf('fireEventInstead', [ + defaulted('event', repositionRequested()) + ]), + requiredFunction('doReposition') + ]); + const receivingChannel = (rawSpec) => { + const detail = asRawOrDie$1('Reposition', schema$g, rawSpec); + return { + [repositionPopups()]: { + onReceive: (sandbox) => { + if (Sandboxing.isOpen(sandbox)) { + detail.fireEventInstead.fold(() => detail.doReposition(sandbox), (fe) => emit(sandbox, fe.event)); + } + } + } + }; + }; + + const getAnchor = (detail, component) => { + const hotspot = detail.getHotspot(component).getOr(component); + const type = 'hotspot'; + const overrides = detail.getAnchorOverrides(); + return detail.layouts.fold(() => ({ type, hotspot, overrides }), (layouts) => ({ type, hotspot, overrides, layouts })); + }; + const fetch$1 = (detail, mapFetch, component) => { + const fetcher = detail.fetch; + return fetcher(component).map(mapFetch); + }; + const openF = (detail, mapFetch, anchor, component, sandbox, externals, highlightOnOpen) => { + const futureData = fetch$1(detail, mapFetch, component); + const getLazySink = getSink(component, detail); + // TODO: Make this potentially a single menu also + return futureData.map((tdata) => tdata.bind((data) => { + const primaryMenu = data.menus[data.primary]; + Optional.from(primaryMenu).each((menu) => { + detail.listRole.each((listRole) => { + menu.role = listRole; + }); + }); + return Optional.from(tieredMenu.sketch({ + // Externals are configured by the "menu" part. It's called external because it isn't contained + // within the DOM descendants of the dropdown. You can configure things like `fakeFocus` here. + ...externals.menu(), + uid: generate$4(''), + data, + highlightOnOpen, + onOpenMenu: (tmenu, menu) => { + const sink = getLazySink().getOrDie(); + Positioning.position(sink, menu, { anchor }); + Sandboxing.decloak(sandbox); + }, + onOpenSubmenu: (tmenu, item, submenu) => { + const sink = getLazySink().getOrDie(); + Positioning.position(sink, submenu, { + anchor: { + type: 'submenu', + item + } + }); + Sandboxing.decloak(sandbox); + }, + onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => { + const sink = getLazySink().getOrDie(); + Positioning.position(sink, primaryMenu, { anchor }); + each$1(submenuTriggers, (st) => { + Positioning.position(sink, st.triggeredMenu, { + anchor: { type: 'submenu', item: st.triggeringItem } + }); + }); + }, + onEscape: () => { + // Focus the triggering component after escaping the menu + Focusing.focus(component); + Sandboxing.close(sandbox); + return Optional.some(true); + } + })); + })); + }; + // onOpenSync is because some operations need to be applied immediately, not wrapped in a future + // It can avoid things like flickering due to asynchronous bouncing + const open = (detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen) => { + const anchor = getAnchor(detail, hotspot); + const processed = openF(detail, mapFetch, anchor, hotspot, sandbox, externals, highlightOnOpen); + return processed.map((tdata) => { + // If we have data, display a menu. Else, close the menu if it was open + tdata.fold(() => { + if (Sandboxing.isOpen(sandbox)) { + Sandboxing.close(sandbox); + } + }, (data) => { + Sandboxing.cloak(sandbox); + Sandboxing.open(sandbox, data); + onOpenSync(sandbox); + }); + return sandbox; + }); + }; + const close = (detail, mapFetch, component, sandbox, _externals, _onOpenSync, _highlightOnOpen) => { + Sandboxing.close(sandbox); + return Future.pure(sandbox); + }; + const togglePopup = (detail, mapFetch, hotspot, externals, onOpenSync, highlightOnOpen) => { + const sandbox = Coupling.getCoupled(hotspot, 'sandbox'); + const showing = Sandboxing.isOpen(sandbox); + const action = showing ? close : open; + return action(detail, mapFetch, hotspot, sandbox, externals, onOpenSync, highlightOnOpen); + }; + const matchWidth = (hotspot, container, useMinWidth) => { + const menu = Composing.getCurrent(container).getOr(container); + const buttonWidth = get$c(hotspot.element); + if (useMinWidth) { + set$7(menu.element, 'min-width', buttonWidth + 'px'); + } + else { + set$6(menu.element, buttonWidth); + } + }; + const getSink = (anyInSystem, sinkDetail) => anyInSystem + .getSystem() + .getByUid(sinkDetail.uid + '-' + suffix()) + .map((internalSink) => () => Result.value(internalSink)) + .getOrThunk(() => sinkDetail.lazySink.fold(() => () => Result.error(new Error('No internal sink is specified, nor could an external sink be found')), (lazySinkFn) => () => lazySinkFn(anyInSystem))); + const doRepositionMenus = (sandbox) => { + Sandboxing.getState(sandbox).each((tmenu) => { + tieredMenu.repositionMenus(tmenu); + }); + }; + const makeSandbox$1 = (detail, hotspot, extras) => { + const ariaControls = manager(); + const onOpen = (component, menu) => { + const anchor = getAnchor(detail, hotspot); + ariaControls.link(hotspot.element); + if (detail.matchWidth) { + matchWidth(anchor.hotspot, menu, detail.useMinWidth); + } + detail.onOpen(anchor, component, menu); + if (extras !== undefined && extras.onOpen !== undefined) { + extras.onOpen(component, menu); + } + }; + const onClose = (component, menu) => { + ariaControls.unlink(hotspot.element); + lazySink().getOr(menu).element.dom.dispatchEvent(new window.FocusEvent('focusout')); + if (extras !== undefined && extras.onClose !== undefined) { + extras.onClose(component, menu); + } + }; + const lazySink = getSink(hotspot, detail); + return { + dom: { + tag: 'div', + classes: detail.sandboxClasses, + // TODO: Add aria-selected attribute + attributes: { + id: ariaControls.id, + } + }, + behaviours: SketchBehaviours.augment(detail.sandboxBehaviours, [ + Representing.config({ + store: { + mode: 'memory', + initialValue: hotspot + } + }), + Sandboxing.config({ + onOpen, + onClose, + isPartOf: (container, data, queryElem) => { + return isPartOf(data, queryElem) || isPartOf(hotspot, queryElem); + }, + getAttachPoint: () => { + return lazySink().getOrDie(); + } + }), + // The Composing of the dropdown here is the the active menu of the TieredMenu + // inside the sandbox. + Composing.config({ + find: (sandbox) => { + return Sandboxing.getState(sandbox).bind((menu) => Composing.getCurrent(menu)); + } + }), + Receiving.config({ + channels: { + ...receivingChannel$1({ + isExtraPart: never + }), + ...receivingChannel({ + doReposition: doRepositionMenus + }) + } + }) + ]) + }; + }; + const repositionMenus = (comp) => { + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + doRepositionMenus(sandbox); + }; + + // TODO: Roll this back into Fields at some point + // Unfortunately there appears to be a cyclical dependency or something that's preventing it, but for now this will do as it's home + const sandboxFields = () => [ + defaulted('sandboxClasses', []), + SketchBehaviours.field('sandboxBehaviours', [Composing, Receiving, Sandboxing, Representing]) + ]; + + const schema$f = constant$1([ + required$1('dom'), + required$1('fetch'), + onHandler('onOpen'), + onKeyboardHandler('onExecute'), + defaulted('getHotspot', Optional.some), + defaulted('getAnchorOverrides', constant$1({})), + schema$n(), + field('dropdownBehaviours', [Toggling, Coupling, Keying, Focusing]), + required$1('toggleClass'), + defaulted('eventOrder', {}), + option$3('lazySink'), + defaulted('matchWidth', false), + defaulted('useMinWidth', false), + option$3('role'), + option$3('listRole'), + ].concat(sandboxFields())); + const parts$c = constant$1([ + external$1({ + schema: [ + tieredMenuMarkers(), + // Defining a defaulted field isn't necessary when dealing with + // external parts, because the post-boulder part spec is not passed + // through to any of these functions (defaults, overrides etc.). So all + // this does is make it a bit clearer what you should expect, but remember + // that the default value here is irrelevant! + defaulted('fakeFocus', false) + ], + name: 'menu', + defaults: (detail) => { + return { + onExecute: detail.onExecute + }; + } + }), + partType() + ]); + + const factory$k = (detail, components, _spec, externals) => { + const lookupAttr = (attr) => get$h(detail.dom, 'attributes').bind((attrs) => get$h(attrs, attr)); + const switchToMenu = (sandbox) => { + Sandboxing.getState(sandbox).each((tmenu) => { + // This will highlight the menu AND the item + tieredMenu.highlightPrimary(tmenu); + }); + }; + const togglePopup$1 = (dropdownComp, onOpenSync, highlightOnOpen) => { + return togglePopup(detail, identity, dropdownComp, externals, onOpenSync, highlightOnOpen); + }; + const action = (component) => { + const onOpenSync = switchToMenu; + togglePopup$1(component, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop); + }; + const apis = { + expand: (comp) => { + if (!Toggling.isOn(comp)) { + togglePopup$1(comp, noop, HighlightOnOpen.HighlightNone).get(noop); + } + }, + open: (comp) => { + if (!Toggling.isOn(comp)) { + togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop); + } + }, + refetch: (comp) => { + // Generally, the triggers for a refetch should make it so that the + // sandbox has been created, but it's not guaranteed, so we still handle the + // case where there isn't yet a sandbox. + const optSandbox = Coupling.getExistingCoupled(comp, 'sandbox'); + return optSandbox.fold(() => { + // If we don't have a sandbox, refetch is the same as open, + // except we return when it is completed. + return togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem) + .map(noop); + }, (sandboxComp) => { + // We are intentionally not preserving the selected items when + // triggering a refetch, and will just highlight the first item. + // Note: this will mean that submenus will close. If we want to start + // preserving the selected items, we can't rely on the components themselves, + // so we'd need to use the item and menu values through Representing. + // However, be aware that alloy menus and items often have randomised values, + // so these might not be reliable either. + // NOTE: We use DropdownUtils.open directly, because we want it to 'open', + // even if it's already open. If we just used apis.open, it wouldn't do + // anything if it was already open, which means we wouldn't see the new + // refetched data. + return open(detail, identity, comp, + // NOTE: The TieredMenu is inside the sandbox. They aren't the same component. + sandboxComp, externals, noop, HighlightOnOpen.HighlightMenuAndItem).map(noop); + }); + }, + isOpen: Toggling.isOn, + close: (comp) => { + if (Toggling.isOn(comp)) { + togglePopup$1(comp, noop, HighlightOnOpen.HighlightMenuAndItem).get(noop); + } + }, + // If we are open, refresh the menus in the tiered menu system + repositionMenus: (comp) => { + if (Toggling.isOn(comp)) { + repositionMenus(comp); + } + } + }; + const triggerExecute = (comp, _se) => { + emitExecute(comp); + return Optional.some(true); + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: augment(detail.dropdownBehaviours, [ + Toggling.config({ + toggleClass: detail.toggleClass, + aria: { + mode: 'expanded' + } + }), + Coupling.config({ + others: { + sandbox: (hotspot) => { + return makeSandbox$1(detail, hotspot, { + onOpen: () => Toggling.on(hotspot), + onClose: () => Toggling.off(hotspot) + }); + } + } + }), + Keying.config({ + mode: 'special', + onSpace: triggerExecute, + onEnter: triggerExecute, + onDown: (comp, _se) => { + if (Dropdown.isOpen(comp)) { + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + switchToMenu(sandbox); + } + else { + Dropdown.open(comp); + } + return Optional.some(true); + }, + onEscape: (comp, _se) => { + if (Dropdown.isOpen(comp)) { + Dropdown.close(comp); + return Optional.some(true); + } + else { + return Optional.none(); + } + } + }), + Focusing.config({}) + ]), + events: events(Optional.some(action)), + eventOrder: { + ...detail.eventOrder, + // Order, the button state is toggled first, so assumed !selected means close. + [execute$5()]: ['disabling', 'toggling', 'alloy.base.behaviour'] + }, + apis, + domModification: { + attributes: { + 'aria-haspopup': detail.listRole.getOr('true'), + ...detail.role.fold(() => ({}), (role) => ({ role })), + ...detail.dom.tag === 'button' ? { type: lookupAttr('type').getOr('button') } : {} + } + } + }; + }; + const Dropdown = composite({ + name: 'Dropdown', + configFields: schema$f(), + partFields: parts$c(), + factory: factory$k, + apis: { + open: (apis, comp) => apis.open(comp), + refetch: (apis, comp) => apis.refetch(comp), + expand: (apis, comp) => apis.expand(comp), + close: (apis, comp) => apis.close(comp), + isOpen: (apis, comp) => apis.isOpen(comp), + repositionMenus: (apis, comp) => apis.repositionMenus(comp) + } + }); + + const owner$1 = 'form'; + const schema$e = [ + field('formBehaviours', [Representing]) + ]; + const getPartName$1 = (name) => ''; + const sketch$2 = (fSpec) => { + const parts = (() => { + const record = []; + const field = (name, config) => { + record.push(name); + return generateOne$1(owner$1, getPartName$1(name), config); + }; + return { + field, + record: constant$1(record) + }; + })(); + const spec = fSpec(parts); + const partNames = parts.record(); + // Unlike other sketches, a form does not know its parts in advance (as they represent each field + // in a particular form). Therefore, it needs to calculate the part names on the fly + const fieldParts = map$2(partNames, (n) => required({ name: n, pname: getPartName$1(n) })); + return composite$1(owner$1, schema$e, fieldParts, make$4, spec); + }; + const toResult = (o, e) => o.fold(() => Result.error(e), Result.value); + const make$4 = (detail, components) => ({ + uid: detail.uid, + dom: detail.dom, + components, + // Form has an assumption that every field must have composing, and that the composed element has representing. + behaviours: augment(detail.formBehaviours, [ + Representing.config({ + store: { + mode: 'manual', + getValue: (form) => { + const resPs = getAllParts(form, detail); + return map$1(resPs, (resPThunk, pName) => resPThunk().bind((v) => { + const opt = Composing.getCurrent(v); + return toResult(opt, new Error(`Cannot find a current component to extract the value from for form part '${pName}': ` + element(v.element))); + }).map(Representing.getValue)); + }, + setValue: (form, values) => { + each(values, (newValue, key) => { + getPart(form, detail, key).each((wrapper) => { + Composing.getCurrent(wrapper).each((field) => { + Representing.setValue(field, newValue); + }); + }); + }); + } + } + }) + ]), + apis: { + getField: (form, key) => { + // Returns an Optional (not a result); + return getPart(form, detail, key).bind(Composing.getCurrent); + } + } + }); + const Form = { + getField: makeApi((apis, component, key) => apis.getField(component, key)), + sketch: sketch$2 + }; + + const schema$d = constant$1([ + required$1('dom'), + defaulted('shell', true), + field('toolbarBehaviours', [Replacing]) + ]); + // TODO: Dupe with Toolbar + const enhanceGroups = () => ({ + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + const parts$b = constant$1([ + // Note, is the container for putting all the groups in, not a group itself. + optional({ + name: 'groups', + overrides: enhanceGroups + }) + ]); + + const factory$j = (detail, components, _spec, _externals) => { + const setGroups = (toolbar, groups) => { + getGroupContainer(toolbar).fold(() => { + // check that the group container existed. It may not have if the components + // did not list anything, and shell was false. + // eslint-disable-next-line no-console + console.error('Toolbar was defined to not be a shell, but no groups container was specified in components'); + throw new Error('Toolbar was defined to not be a shell, but no groups container was specified in components'); + }, (container) => { + Replacing.set(container, groups); + }); + }; + const getGroupContainer = (component) => detail.shell ? Optional.some(component) : getPart(component, detail, 'groups'); + // In shell mode, the group overrides need to be added to the main container, and there can be no children + const extra = detail.shell ? { behaviours: [Replacing.config({})], components: [] } : { behaviours: [], components }; + return { + uid: detail.uid, + dom: detail.dom, + components: extra.components, + behaviours: augment(detail.toolbarBehaviours, extra.behaviours), + apis: { + setGroups, + refresh: noop + }, + domModification: { + attributes: { + role: 'group' + } + } + }; + }; + const Toolbar = composite({ + name: 'Toolbar', + configFields: schema$d(), + partFields: parts$b(), + factory: factory$j, + apis: { + setGroups: (apis, toolbar, groups) => { + apis.setGroups(toolbar, groups); + } + } + }); + + const schema$c = constant$1([ + markers$1(['toggledClass']), + required$1('lazySink'), + requiredFunction('fetch'), + optionFunction('getBounds'), + optionObjOf('fireDismissalEventInstead', [ + defaulted('event', dismissRequested()) + ]), + schema$n(), + onHandler('onToggled'), + ]); + const parts$a = constant$1([ + external$1({ + name: 'button', + overrides: (detail) => ({ + dom: { + attributes: { + 'aria-haspopup': 'true' + } + }, + buttonBehaviours: derive$1([ + Toggling.config({ + toggleClass: detail.markers.toggledClass, + aria: { + mode: 'expanded' + }, + toggleOnExecute: false, + /** + * For FloatingToolbars, we can hook up our `onToggled` handler directly to the Toggling + * because we don't have to worry about any animations. + * + * Unfortunately, for SlidingToolbars, Toggling is more directly hooked into the animation for growing, + * so to have an event `onToggled` that doesn't care about the animation, we can't just hook into the Toggling config. + */ + onToggled: detail.onToggled + }) + ]) + }) + }), + external$1({ + factory: Toolbar, + schema: schema$d(), + name: 'toolbar', + overrides: (detail) => { + return { + toolbarBehaviours: derive$1([ + Keying.config({ + mode: 'cyclic', + onEscape: (comp) => { + getPart(comp, detail, 'button').each(Focusing.focus); + // Don't return true here, as we need to allow the sandbox to handle the escape to close the overflow + return Optional.none(); + } + }) + ]) + }; + } + }) + ]); + + const shouldSkipFocus = value$2(); + const toggleWithoutFocusing = (button, externals) => { + shouldSkipFocus.set(true); + toggle$1(button, externals); + shouldSkipFocus.clear(); + }; + const toggle$1 = (button, externals) => { + const toolbarSandbox = Coupling.getCoupled(button, 'toolbarSandbox'); + if (Sandboxing.isOpen(toolbarSandbox)) { + Sandboxing.close(toolbarSandbox); + } + else { + Sandboxing.open(toolbarSandbox, externals.toolbar()); + } + }; + const position = (button, toolbar, detail, layouts) => { + const bounds = detail.getBounds.map((bounder) => bounder()); + const sink = detail.lazySink(button).getOrDie(); + Positioning.positionWithinBounds(sink, toolbar, { + anchor: { + type: 'hotspot', + hotspot: button, + layouts, + overrides: { + maxWidthFunction: expandable() + } + } + }, bounds); + }; + const setGroups$1 = (button, toolbar, detail, layouts, groups) => { + Toolbar.setGroups(toolbar, groups); + position(button, toolbar, detail, layouts); + Toggling.on(button); + }; + const makeSandbox = (button, spec, detail) => { + const ariaControls = manager(); + const onOpen = (sandbox, toolbar) => { + const skipFocus = shouldSkipFocus.get().getOr(false); + detail.fetch().get((groups) => { + setGroups$1(button, toolbar, detail, spec.layouts, groups); + ariaControls.link(button.element); + if (!skipFocus) { + Keying.focusIn(toolbar); + } + }); + }; + const onClose = () => { + // Toggle and focus the button + Toggling.off(button); + if (!shouldSkipFocus.get().getOr(false)) { + Focusing.focus(button); + } + ariaControls.unlink(button.element); + }; + return { + dom: { + tag: 'div', + attributes: { + id: ariaControls.id + } + }, + behaviours: derive$1([ + Keying.config({ + mode: 'special', + onEscape: (comp) => { + Sandboxing.close(comp); + return Optional.some(true); + } + }), + Sandboxing.config({ + onOpen, + onClose, + isPartOf: (container, data, queryElem) => { + return isPartOf(data, queryElem) || isPartOf(button, queryElem); + }, + getAttachPoint: () => { + return detail.lazySink(button).getOrDie(); + } + }), + Receiving.config({ + channels: { + ...receivingChannel$1({ + isExtraPart: never, + ...detail.fireDismissalEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({}) + }), + ...receivingChannel({ + doReposition: () => { + Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each((toolbar) => { + position(button, toolbar, detail, spec.layouts); + }); + } + }) + } + }) + ]) + }; + }; + const factory$i = (detail, components, spec, externals) => ({ + ...Button.sketch({ + ...externals.button(), + action: (button) => { + toggle$1(button, externals); + }, + buttonBehaviours: SketchBehaviours.augment({ dump: externals.button().buttonBehaviours }, [ + Coupling.config({ + others: { + toolbarSandbox: (button) => { + return makeSandbox(button, spec, detail); + } + } + }) + ]) + }), + apis: { + setGroups: (button, groups) => { + Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each((toolbar) => { + setGroups$1(button, toolbar, detail, spec.layouts, groups); + }); + }, + reposition: (button) => { + Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')).each((toolbar) => { + position(button, toolbar, detail, spec.layouts); + }); + }, + toggle: (button) => { + toggle$1(button, externals); + }, + toggleWithoutFocusing: (button) => { + toggleWithoutFocusing(button, externals); + }, + getToolbar: (button) => { + return Sandboxing.getState(Coupling.getCoupled(button, 'toolbarSandbox')); + }, + isOpen: (button) => { + return Sandboxing.isOpen(Coupling.getCoupled(button, 'toolbarSandbox')); + } + } + }); + const FloatingToolbarButton = composite({ + name: 'FloatingToolbarButton', + factory: factory$i, + configFields: schema$c(), + partFields: parts$a(), + apis: { + setGroups: (apis, button, groups) => { + apis.setGroups(button, groups); + }, + reposition: (apis, button) => { + apis.reposition(button); + }, + toggle: (apis, button) => { + apis.toggle(button); + }, + toggleWithoutFocusing: (apis, button) => { + apis.toggleWithoutFocusing(button); + }, + getToolbar: (apis, button) => apis.getToolbar(button), + isOpen: (apis, button) => apis.isOpen(button) + } + }); + + const schema$b = constant$1([ + defaulted('prefix', 'form-field'), + field('fieldBehaviours', [Composing, Representing]) + ]); + const parts$9 = constant$1([ + optional({ + schema: [required$1('dom')], + name: 'label' + }), + optional({ + factory: { + sketch: (spec) => { + return { + uid: spec.uid, + dom: { + tag: 'span', + styles: { + display: 'none' + }, + attributes: { + 'aria-hidden': 'true' + }, + innerHtml: spec.text + } + }; + } + }, + schema: [required$1('text')], + name: 'aria-descriptor' + }), + required({ + factory: { + sketch: (spec) => { + const excludeFactory = exclude(spec, ['factory']); + return spec.factory.sketch(excludeFactory); + } + }, + schema: [required$1('factory')], + name: 'field' + }) + ]); + + const factory$h = (detail, components, _spec, _externals) => { + const behaviours = augment(detail.fieldBehaviours, [ + Composing.config({ + find: (container) => { + return getPart(container, detail, 'field'); + } + }), + Representing.config({ + store: { + mode: 'manual', + getValue: (field) => { + return Composing.getCurrent(field).bind(Representing.getValue); + }, + setValue: (field, value) => { + Composing.getCurrent(field).each((current) => { + Representing.setValue(current, value); + }); + } + } + }) + ]); + const events = derive$2([ + // Used to be systemInit + runOnAttached((component, _simulatedEvent) => { + const ps = getParts(component, detail, ['label', 'field', 'aria-descriptor']); + ps.field().each((field) => { + const id = generate$6(detail.prefix); + ps.label().each((label) => { + // TODO: Find a nicer way of doing this. + set$9(label.element, 'for', id); + set$9(field.element, 'id', id); + }); + ps['aria-descriptor']().each((descriptor) => { + const descriptorId = generate$6(detail.prefix); + set$9(descriptor.element, 'id', descriptorId); + set$9(field.element, 'aria-describedby', descriptorId); + }); + }); + }) + ]); + const apis = { + getField: (container) => getPart(container, detail, 'field'), + getLabel: (container) => + // TODO: Use constants for part names + getPart(container, detail, 'label') + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours, + events, + apis + }; + }; + const FormField = composite({ + name: 'FormField', + configFields: schema$b(), + partFields: parts$9(), + factory: factory$h, + apis: { + getField: (apis, comp) => apis.getField(comp), + getLabel: (apis, comp) => apis.getLabel(comp) + } + }); + + const schema$a = constant$1([ + defaulted('field1Name', 'field1'), + defaulted('field2Name', 'field2'), + onStrictHandler('onLockedChange'), + markers$1(['lockClass']), + defaulted('locked', false), + SketchBehaviours.field('coupledFieldBehaviours', [Composing, Representing]), + defaultedFunction('onInput', noop) + ]); + const getField = (comp, detail, partName) => getPart(comp, detail, partName).bind(Composing.getCurrent); + const coupledPart = (selfName, otherName) => required({ + factory: FormField, + name: selfName, + overrides: (detail) => { + return { + fieldBehaviours: derive$1([ + config('coupled-input-behaviour', [ + run$1(input(), (me) => { + getField(me, detail, otherName).each((other) => { + getPart(me, detail, 'lock').each((lock) => { + // TODO IMPROVEMENT: Allow locker to fire onLockedChange if it is turned on after being off. + if (Toggling.isOn(lock)) { + detail.onLockedChange(me, other, lock); + } + detail.onInput(me); + }); + }); + }) + ]) + ]) + }; + } + }); + const parts$8 = constant$1([ + coupledPart('field1', 'field2'), + coupledPart('field2', 'field1'), + required({ + factory: Button, + schema: [ + required$1('dom') + ], + name: 'lock', + overrides: (detail) => { + return { + buttonBehaviours: derive$1([ + Toggling.config({ + selected: detail.locked, + toggleClass: detail.markers.lockClass, + aria: { + mode: 'pressed' + } + }) + ]) + }; + } + }) + ]); + + const factory$g = (detail, components, _spec, _externals) => ({ + uid: detail.uid, + dom: detail.dom, + components, + behaviours: SketchBehaviours.augment(detail.coupledFieldBehaviours, [ + Composing.config({ find: Optional.some }), + Representing.config({ + store: { + mode: 'manual', + getValue: (comp) => { + const parts = getPartsOrDie(comp, detail, ['field1', 'field2']); + return { + [detail.field1Name]: Representing.getValue(parts.field1()), + [detail.field2Name]: Representing.getValue(parts.field2()) + }; + }, + setValue: (comp, value) => { + const parts = getPartsOrDie(comp, detail, ['field1', 'field2']); + if (hasNonNullableKey(value, detail.field1Name)) { + Representing.setValue(parts.field1(), value[detail.field1Name]); + } + if (hasNonNullableKey(value, detail.field2Name)) { + Representing.setValue(parts.field2(), value[detail.field2Name]); + } + } + } + }) + ]), + apis: { + getField1: (component) => getPart(component, detail, 'field1'), + getField2: (component) => getPart(component, detail, 'field2'), + getLock: (component) => getPart(component, detail, 'lock') + } + }); + const FormCoupledInputs = composite({ + name: 'FormCoupledInputs', + configFields: schema$a(), + partFields: parts$8(), + factory: factory$g, + apis: { + getField1: (apis, component) => apis.getField1(component), + getField2: (apis, component) => apis.getField2(component), + getLock: (apis, component) => apis.getLock(component) + } + }); + + const factory$f = (detail, _spec) => { + const options = map$2(detail.options, (option) => ({ + dom: { + tag: 'option', + value: option.value, + innerHtml: option.text + } + })); + const initialValues = detail.data.map((v) => wrap('initialValue', v)).getOr({}); + return { + uid: detail.uid, + dom: { + tag: 'select', + classes: detail.selectClasses, + attributes: detail.selectAttributes + }, + components: options, + behaviours: augment(detail.selectBehaviours, [ + Focusing.config({}), + Representing.config({ + store: { + mode: 'manual', + getValue: (select) => { + return get$5(select.element); + }, + setValue: (select, newValue) => { + const firstOption = head(detail.options); + // This is probably generically useful ... may become a part of Representing. + const found = find$5(detail.options, (opt) => opt.value === newValue); + if (found.isSome()) { + set$4(select.element, newValue); + } + else if (select.element.dom.selectedIndex === -1 && newValue === '') { + /* + Sometimes after a redial alloy tries to set a new value, but if no value has been set in the data this used to fail. Now we set the value to the first option in the list if: + The index is out of range, indicating that the list of options have changed, or was never set. + The user is not trying to set a specific value (which would be user error) + */ + firstOption.each((value) => set$4(select.element, value.value)); + } + }, + ...initialValues + } + }) + ]) + }; + }; + const HtmlSelect = single({ + name: 'HtmlSelect', + configFields: [ + required$1('options'), + field('selectBehaviours', [Focusing, Representing]), + defaulted('selectClasses', []), + defaulted('selectAttributes', {}), + option$3('data') + ], + factory: factory$f + }); + + const makeMenu = (detail, menuSandbox, placementSpec, menuSpec, getBounds) => { + const lazySink = () => detail.lazySink(menuSandbox); + const layouts = menuSpec.type === 'horizontal' ? { layouts: { + onLtr: () => belowOrAbove(), + onRtl: () => belowOrAboveRtl() + } } : {}; + const isFirstTierSubmenu = (triggeringPaths) => triggeringPaths.length === 2; // primary and first tier menu === 2 items + const getSubmenuLayouts = (triggeringPaths) => isFirstTierSubmenu(triggeringPaths) ? layouts : {}; + return tieredMenu.sketch({ + dom: { + tag: 'div' + }, + data: menuSpec.data, + markers: menuSpec.menu.markers, + highlightOnOpen: menuSpec.menu.highlightOnOpen, + fakeFocus: menuSpec.menu.fakeFocus, + onEscape: () => { + // Note for the future: this should possibly also call detail.onHide + Sandboxing.close(menuSandbox); + detail.onEscape.map((handler) => handler(menuSandbox)); + return Optional.some(true); + }, + onExecute: () => { + return Optional.some(true); + }, + onOpenMenu: (tmenu, menu) => { + Positioning.positionWithinBounds(lazySink().getOrDie(), menu, placementSpec, getBounds()); + }, + onOpenSubmenu: (tmenu, item, submenu, triggeringPaths) => { + const sink = lazySink().getOrDie(); + Positioning.position(sink, submenu, { + anchor: { + type: 'submenu', + item, + ...getSubmenuLayouts(triggeringPaths) + } + }); + }, + onRepositionMenu: (tmenu, primaryMenu, submenuTriggers) => { + const sink = lazySink().getOrDie(); + Positioning.positionWithinBounds(sink, primaryMenu, placementSpec, getBounds()); + each$1(submenuTriggers, (st) => { + const submenuLayouts = getSubmenuLayouts(st.triggeringPath); + Positioning.position(sink, st.triggeredMenu, { + anchor: { type: 'submenu', item: st.triggeringItem, ...submenuLayouts } + }); + }); + } + }); + }; + const factory$e = (detail, spec) => { + const isPartOfRelated = (sandbox, queryElem) => { + const related = detail.getRelated(sandbox); + return related.exists((rel) => isPartOf(rel, queryElem)); + }; + const setContent = (sandbox, thing) => { + // Keep the same location, and just change the content. + Sandboxing.setContent(sandbox, thing); + }; + const showAt = (sandbox, thing, placementSpec) => { + const getBounds = Optional.none; + showWithinBounds(sandbox, thing, placementSpec, getBounds); + }; + const showWithinBounds = (sandbox, thing, placementSpec, getBounds) => { + const sink = detail.lazySink(sandbox).getOrDie(); + Sandboxing.openWhileCloaked(sandbox, thing, () => Positioning.positionWithinBounds(sink, sandbox, placementSpec, getBounds())); + Representing.setValue(sandbox, Optional.some({ + mode: 'position', + config: placementSpec, + getBounds + })); + }; + // TODO AP-191 write a test for showMenuAt + const showMenuAt = (sandbox, placementSpec, menuSpec) => { + showMenuWithinBounds(sandbox, placementSpec, menuSpec, Optional.none); + }; + const showMenuWithinBounds = (sandbox, placementSpec, menuSpec, getBounds) => { + const menu = makeMenu(detail, sandbox, placementSpec, menuSpec, getBounds); + Sandboxing.open(sandbox, menu); + Representing.setValue(sandbox, Optional.some({ + mode: 'menu', + menu + })); + }; + const hide = (sandbox) => { + if (Sandboxing.isOpen(sandbox)) { + Representing.setValue(sandbox, Optional.none()); + Sandboxing.close(sandbox); + } + }; + const getContent = (sandbox) => Sandboxing.getState(sandbox); + const reposition = (sandbox) => { + if (Sandboxing.isOpen(sandbox)) { + Representing.getValue(sandbox).each((state) => { + switch (state.mode) { + case 'menu': + Sandboxing.getState(sandbox).each(tieredMenu.repositionMenus); + break; + case 'position': + const sink = detail.lazySink(sandbox).getOrDie(); + Positioning.positionWithinBounds(sink, sandbox, state.config, state.getBounds()); + break; + } + }); + } + }; + const apis = { + setContent, + showAt, + showWithinBounds, + showMenuAt, + showMenuWithinBounds, + hide, + getContent, + reposition, + isOpen: Sandboxing.isOpen + }; + return { + uid: detail.uid, + dom: detail.dom, + behaviours: augment(detail.inlineBehaviours, [ + Sandboxing.config({ + isPartOf: (sandbox, data, queryElem) => { + return isPartOf(data, queryElem) || isPartOfRelated(sandbox, queryElem); + }, + getAttachPoint: (sandbox) => { + return detail.lazySink(sandbox).getOrDie(); + }, + onOpen: (sandbox) => { + detail.onShow(sandbox); + }, + onClose: (sandbox) => { + detail.onHide(sandbox); + } + }), + Representing.config({ + store: { + mode: 'memory', + initialValue: Optional.none() + } + }), + Receiving.config({ + channels: { + ...receivingChannel$1({ + isExtraPart: spec.isExtraPart, + ...detail.fireDismissalEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({}) + }), + ...receivingChannel({ + ...detail.fireRepositionEventInstead.map((fe) => ({ fireEventInstead: { event: fe.event } })).getOr({}), + doReposition: reposition + }) + } + }) + ]), + eventOrder: detail.eventOrder, + apis + }; + }; + const InlineView = single({ + name: 'InlineView', + configFields: [ + required$1('lazySink'), + onHandler('onShow'), + onHandler('onHide'), + optionFunction('onEscape'), + field('inlineBehaviours', [Sandboxing, Representing, Receiving]), + optionObjOf('fireDismissalEventInstead', [ + defaulted('event', dismissRequested()) + ]), + optionObjOf('fireRepositionEventInstead', [ + defaulted('event', repositionRequested()) + ]), + defaulted('getRelated', Optional.none), + defaulted('isExtraPart', never), + defaulted('eventOrder', Optional.none) + ], + factory: factory$e, + apis: { + showAt: (apis, component, anchor, thing) => { + apis.showAt(component, anchor, thing); + }, + showWithinBounds: (apis, component, anchor, thing, bounds) => { + apis.showWithinBounds(component, anchor, thing, bounds); + }, + showMenuAt: (apis, component, anchor, menuSpec) => { + apis.showMenuAt(component, anchor, menuSpec); + }, + showMenuWithinBounds: (apis, component, anchor, menuSpec, bounds) => { + apis.showMenuWithinBounds(component, anchor, menuSpec, bounds); + }, + hide: (apis, component) => { + apis.hide(component); + }, + isOpen: (apis, component) => apis.isOpen(component), + getContent: (apis, component) => apis.getContent(component), + setContent: (apis, component, thing) => { + apis.setContent(component, thing); + }, + reposition: (apis, component) => { + apis.reposition(component); + } + } + }); + + const schema$9 = constant$1([ + defaultedString('type', 'text'), + option$3('data'), + defaulted('inputAttributes', {}), + defaulted('inputStyles', {}), + defaulted('tag', 'input'), + defaulted('inputClasses', []), + onHandler('onSetValue'), + defaultedFunction('fromInputValue', identity), + defaultedFunction('toInputValue', identity), + defaulted('styles', {}), + defaulted('eventOrder', {}), + field('inputBehaviours', [Representing, Focusing]), + defaulted('selectOnFocus', true) + ]); + const focusBehaviours = (detail) => derive$1([ + Focusing.config({ + onFocus: !detail.selectOnFocus ? noop : (component) => { + const input = component.element; + const value = get$5(input); + // TODO: There are probably more types that can't handle setSelectionRange + if (detail.type !== 'range') { + input.dom.setSelectionRange(0, value.length); + } + } + }) + ]); + const behaviours = (detail) => ({ + ...focusBehaviours(detail), + ...augment(detail.inputBehaviours, [ + Representing.config({ + store: { + mode: 'manual', + // Propagating its Optional + ...detail.data.map((data) => ({ initialValue: data })).getOr({}), + getValue: (input) => { + return detail.fromInputValue(get$5(input.element)); + }, + setValue: (input, data) => { + const current = get$5(input.element); + // Only set it if it has changed ... otherwise the cursor goes to the end. + if (current !== data) { + set$4(input.element, detail.toInputValue(data)); + } + } + }, + onSetValue: detail.onSetValue + }) + ]) + }); + const dom$1 = (detail) => ({ + tag: detail.tag, + attributes: { + type: detail.type, + ...detail.inputAttributes + }, + styles: detail.inputStyles, + classes: detail.inputClasses + }); + + const factory$d = (detail, _spec) => ({ + uid: detail.uid, + dom: dom$1(detail), + // No children. + components: [], + behaviours: behaviours(detail), + eventOrder: detail.eventOrder + }); + const Input = single({ + name: 'Input', + configFields: schema$9(), + factory: factory$d + }); + + const parts$7 = generate$5(owner$2(), parts$e()); + + const labelledBy = (labelledElement, labelElement) => { + const labelId = getOpt(labelledElement, 'id') + .fold(() => { + const id = generate$6('dialog-label'); + set$9(labelElement, 'id', id); + return id; + }, identity); + set$9(labelledElement, 'aria-labelledby', labelId); + }; + + const schema$8 = constant$1([ + required$1('lazySink'), + option$3('dragBlockClass'), + defaultedFunction('getBounds', win), + defaulted('useTabstopAt', always), + defaulted('firstTabstop', 0), + defaulted('eventOrder', {}), + field('modalBehaviours', [Keying]), + onKeyboardHandler('onExecute'), + onStrictKeyboardHandler('onEscape') + ]); + const basic = { sketch: identity }; + const parts$6 = constant$1([ + optional({ + name: 'draghandle', + overrides: (detail, spec) => { + return { + behaviours: derive$1([ + Dragging.config({ + mode: 'mouse', + getTarget: (handle) => { + return ancestor$1(handle, '[role="dialog"]').getOr(handle); + }, + blockerClass: detail.dragBlockClass.getOrDie( + // TODO: Support errors in Optional getOrDie. + new Error('The drag blocker class was not specified for a dialog with a drag handle: \n' + + JSON.stringify(spec, null, 2)).message), + getBounds: detail.getDragBounds + }) + ]) + }; + } + }), + required({ + schema: [required$1('dom')], + name: 'title' + }), + required({ + factory: basic, + schema: [required$1('dom')], + name: 'close' + }), + required({ + factory: basic, + schema: [required$1('dom')], + name: 'body' + }), + optional({ + factory: basic, + schema: [required$1('dom')], + name: 'footer' + }), + external$1({ + factory: { + sketch: (spec, detail) => + // Merging should take care of the uid + ({ + ...spec, + dom: detail.dom, + components: detail.components + }) + }, + schema: [ + defaulted('dom', { + tag: 'div', + styles: { + position: 'fixed', + left: '0px', + top: '0px', + right: '0px', + bottom: '0px' + } + }), + defaulted('components', []) + ], + name: 'blocker' + }) + ]); + + const factory$c = (detail, components, spec, externals) => { + const dialogComp = value$2(); + // TODO IMPROVEMENT: Make close actually close the dialog by default! + const showDialog = (dialog) => { + dialogComp.set(dialog); + const sink = detail.lazySink(dialog).getOrDie(); + const externalBlocker = externals.blocker(); + const blocker = sink.getSystem().build({ + ...externalBlocker, + components: externalBlocker.components.concat([ + premade(dialog) + ]), + behaviours: derive$1([ + Focusing.config({}), + config('dialog-blocker-events', [ + // Ensure we use runOnSource otherwise this would cause an infinite loop, as `focusIn` would fire a `focusin` which would then get responded to and so forth + runOnSource(focusin(), () => { + Blocking.isBlocked(dialog) ? noop() : Keying.focusIn(dialog); + }) + ]) + ]) + }); + attach(sink, blocker); + Keying.focusIn(dialog); + }; + const hideDialog = (dialog) => { + dialogComp.clear(); + parent(dialog.element).each((blockerDom) => { + dialog.getSystem().getByDom(blockerDom).each((blocker) => { + detach(blocker); + }); + }); + }; + const getDialogBody = (dialog) => getPartOrDie(dialog, detail, 'body'); + const getDialogFooter = (dialog) => getPart(dialog, detail, 'footer'); + const setBusy = (dialog, getBusySpec) => { + Blocking.block(dialog, getBusySpec); + }; + const setIdle = (dialog) => { + Blocking.unblock(dialog); + }; + const modalEventsId = generate$6('modal-events'); + const eventOrder = { + ...detail.eventOrder, + [attachedToDom()]: [modalEventsId].concat(detail.eventOrder['alloy.system.attached'] || []) + }; + const browser = detect$1(); + return { + uid: detail.uid, + dom: detail.dom, + components, + apis: { + show: showDialog, + hide: hideDialog, + getBody: getDialogBody, + getFooter: getDialogFooter, + setIdle, + setBusy + }, + eventOrder, + domModification: { + attributes: { + 'role': 'dialog', + 'aria-modal': 'true' + } + }, + behaviours: augment(detail.modalBehaviours, [ + Replacing.config({}), + Keying.config({ + mode: 'cyclic', + onEnter: detail.onExecute, + onEscape: detail.onEscape, + useTabstopAt: detail.useTabstopAt, + firstTabstop: detail.firstTabstop + }), + Blocking.config({ + getRoot: dialogComp.get + }), + config(modalEventsId, [ + runOnAttached((c) => { + // TINY-10808 - Workaround to address the dialog header not being announced on VoiceOver with aria-labelledby, ideally we should use the aria-labelledby + const titleElm = getPartOrDie(c, detail, 'title').element; + const title = get$6(titleElm); + if (browser.os.isMacOS() && isNonNullable(title)) { + set$9(c.element, 'aria-label', title); + } + else { + labelledBy(c.element, titleElm); + } + }) + ]) + ]) + }; + }; + const ModalDialog = composite({ + name: 'ModalDialog', + configFields: schema$8(), + partFields: parts$6(), + factory: factory$c, + apis: { + show: (apis, dialog) => { + apis.show(dialog); + }, + hide: (apis, dialog) => { + apis.hide(dialog); + }, + getBody: (apis, dialog) => apis.getBody(dialog), + getFooter: (apis, dialog) => apis.getFooter(dialog), + setBusy: (apis, dialog, getBusySpec) => { + apis.setBusy(dialog, getBusySpec); + }, + setIdle: (apis, dialog) => { + apis.setIdle(dialog); + } + } + }); + + const labelPart = optional({ + schema: [required$1('dom')], + name: 'label' + }); + const edgePart = (name) => optional({ + name: '' + name + '-edge', + overrides: (detail) => { + const action = detail.model.manager.edgeActions[name]; + // Not all edges have actions for all sliders. + // A horizontal slider will only have left and right, for instance, + // ignoring top, bottom and diagonal edges as they don't make sense in context of those sliders. + return action.fold(() => ({}), (a) => ({ + events: derive$2([ + runActionExtra(touchstart(), (comp, se, d) => a(comp, d), [detail]), + runActionExtra(mousedown(), (comp, se, d) => a(comp, d), [detail]), + runActionExtra(mousemove(), (comp, se, det) => { + if (det.mouseIsDown.get()) { + a(comp, det); + } + }, [detail]) + ]) + })); + } + }); + // When the user touches the top left edge, it should move the thumb + const tlEdgePart = edgePart('top-left'); + // When the user touches the top edge, it should move the thumb + const tedgePart = edgePart('top'); + // When the user touches the top right edge, it should move the thumb + const trEdgePart = edgePart('top-right'); + // When the user touches the right edge, it should move the thumb + const redgePart = edgePart('right'); + // When the user touches the bottom right edge, it should move the thumb + const brEdgePart = edgePart('bottom-right'); + // When the user touches the bottom edge, it should move the thumb + const bedgePart = edgePart('bottom'); + // When the user touches the bottom left edge, it should move the thumb + const blEdgePart = edgePart('bottom-left'); + // When the user touches the left edge, it should move the thumb + const ledgePart = edgePart('left'); + // The thumb part needs to have position absolute to be positioned correctly + const thumbPart = required({ + name: 'thumb', + defaults: constant$1({ + dom: { + styles: { position: 'absolute' } + } + }), + overrides: (detail) => { + return { + events: derive$2([ + // If the user touches the thumb itself, pretend they touched the spectrum instead. This + // allows sliding even when they touchstart the current value + redirectToPart(touchstart(), detail, 'spectrum'), + redirectToPart(touchmove(), detail, 'spectrum'), + redirectToPart(touchend(), detail, 'spectrum'), + redirectToPart(mousedown(), detail, 'spectrum'), + redirectToPart(mousemove(), detail, 'spectrum'), + redirectToPart(mouseup(), detail, 'spectrum') + ]) + }; + } + }); + const isShift = (event) => isShift$1(event.event); + const spectrumPart = required({ + schema: [ + customField('mouseIsDown', () => Cell(false)) + ], + name: 'spectrum', + overrides: (detail) => { + const modelDetail = detail.model; + const model = modelDetail.manager; + const setValueFrom = (component, simulatedEvent) => model.getValueFromEvent(simulatedEvent).map((value) => model.setValueFrom(component, detail, value)); + return { + behaviours: derive$1([ + // Move left and right along the spectrum + Keying.config({ + mode: 'special', + onLeft: (spectrum, event) => model.onLeft(spectrum, detail, isShift(event)), + onRight: (spectrum, event) => model.onRight(spectrum, detail, isShift(event)), + onUp: (spectrum, event) => model.onUp(spectrum, detail, isShift(event)), + onDown: (spectrum, event) => model.onDown(spectrum, detail, isShift(event)) + }), + Tabstopping.config({}), + Focusing.config({}) + ]), + events: derive$2([ + run$1(touchstart(), setValueFrom), + run$1(touchmove(), setValueFrom), + run$1(mousedown(), setValueFrom), + run$1(mousemove(), (spectrum, se) => { + if (detail.mouseIsDown.get()) { + setValueFrom(spectrum, se); + } + }) + ]) + }; + } + }); + var SliderParts = [ + labelPart, + ledgePart, + redgePart, + tedgePart, + bedgePart, + tlEdgePart, + trEdgePart, + blEdgePart, + brEdgePart, + thumbPart, + spectrumPart + ]; + + const _sliderChangeEvent = 'slider.change.value'; + const sliderChangeEvent = constant$1(_sliderChangeEvent); + const isTouchEvent$2 = (evt) => evt.type.indexOf('touch') !== -1; + const getEventSource = (simulatedEvent) => { + const evt = simulatedEvent.event.raw; + if (isTouchEvent$2(evt)) { + const touchEvent = evt; + return touchEvent.touches !== undefined && touchEvent.touches.length === 1 ? + Optional.some(touchEvent.touches[0]).map((t) => SugarPosition(t.clientX, t.clientY)) : Optional.none(); + } + else { + const mouseEvent = evt; + return mouseEvent.clientX !== undefined ? Optional.some(mouseEvent).map((me) => SugarPosition(me.clientX, me.clientY)) : Optional.none(); + } + }; + + const t = 'top', r = 'right', b = 'bottom', l = 'left'; + // Values + const minX = (detail) => detail.model.minX; + const minY = (detail) => detail.model.minY; + const min1X = (detail) => detail.model.minX - 1; + const min1Y = (detail) => detail.model.minY - 1; + const maxX = (detail) => detail.model.maxX; + const maxY = (detail) => detail.model.maxY; + const max1X = (detail) => detail.model.maxX + 1; + const max1Y = (detail) => detail.model.maxY + 1; + const range = (detail, max, min) => max(detail) - min(detail); + const xRange = (detail) => range(detail, maxX, minX); + const yRange = (detail) => range(detail, maxY, minY); + const halfX = (detail) => xRange(detail) / 2; + const halfY = (detail) => yRange(detail) / 2; + const step = (detail, useMultiplier) => useMultiplier ? detail.stepSize * detail.speedMultiplier : detail.stepSize; + const snap = (detail) => detail.snapToGrid; + const snapStart = (detail) => detail.snapStart; + const rounded = (detail) => detail.rounded; + // Not great but... /shrug + const hasEdge = (detail, edgeName) => detail[edgeName + '-edge'] !== undefined; + const hasLEdge = (detail) => hasEdge(detail, l); + const hasREdge = (detail) => hasEdge(detail, r); + const hasTEdge = (detail) => hasEdge(detail, t); + const hasBEdge = (detail) => hasEdge(detail, b); + // Ew, any + const currentValue = (detail) => detail.model.value.get(); + + const xyValue = (x, y) => ({ + x, + y + }); + const fireSliderChange$3 = (component, value) => { + emitWith(component, sliderChangeEvent(), { value }); + }; + // North West XY + const setToTLEdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(min1X(detail), min1Y(detail))); + }; + // North + const setToTEdge = (edge, detail) => { + fireSliderChange$3(edge, min1Y(detail)); + }; + // North XY + const setToTEdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(halfX(detail), min1Y(detail))); + }; + // North East XY + const setToTREdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(max1X(detail), min1Y(detail))); + }; + // East + const setToREdge = (edge, detail) => { + fireSliderChange$3(edge, max1X(detail)); + }; + // East XY + const setToREdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(max1X(detail), halfY(detail))); + }; + // South East XY + const setToBREdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(max1X(detail), max1Y(detail))); + }; + // South + const setToBEdge = (edge, detail) => { + fireSliderChange$3(edge, max1Y(detail)); + }; + // South XY + const setToBEdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(halfX(detail), max1Y(detail))); + }; + // South West XY + const setToBLEdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(min1X(detail), max1Y(detail))); + }; + // West + const setToLEdge = (edge, detail) => { + fireSliderChange$3(edge, min1X(detail)); + }; + // West XY + const setToLEdgeXY = (edge, detail) => { + fireSliderChange$3(edge, xyValue(min1X(detail), halfY(detail))); + }; + + const reduceBy = (value, min, max, step) => { + if (value < min) { + return value; + } + else if (value > max) { + return max; + } + else if (value === min) { + return min - 1; + } + else { + return Math.max(min, value - step); + } + }; + const increaseBy = (value, min, max, step) => { + if (value > max) { + return value; + } + else if (value < min) { + return min; + } + else if (value === max) { + return max + 1; + } + else { + return Math.min(max, value + step); + } + }; + const capValue = (value, min, max) => Math.max(min, Math.min(max, value)); + const snapValueOf = (value, min, max, step, snapStart) => + // We are snapping by the step size. Therefore, find the nearest multiple of + // the step + snapStart.fold(() => { + // There is no initial snapping start, so just go from the minimum + const initValue = value - min; + const extraValue = Math.round(initValue / step) * step; + return capValue(min + extraValue, min - 1, max + 1); + }, (start) => { + // There is an initial snapping start, so using that as the starting point, + // calculate the nearest snap position based on the value + const remainder = (value - start) % step; + const adjustment = Math.round(remainder / step); + const rawSteps = Math.floor((value - start) / step); + const maxSteps = Math.floor((max - start) / step); + const numSteps = Math.min(maxSteps, rawSteps + adjustment); + const r = start + (numSteps * step); + return Math.max(start, r); + }); + const findOffsetOf = (value, min, max) => Math.min(max, Math.max(value, min)) - min; + const findValueOf = (args) => { + const { min, max, range, value, step, snap, snapStart, rounded, hasMinEdge, hasMaxEdge, minBound, maxBound, screenRange } = args; + const capMin = hasMinEdge ? min - 1 : min; + const capMax = hasMaxEdge ? max + 1 : max; + if (value < minBound) { + return capMin; + } + else if (value > maxBound) { + return capMax; + } + else { + const offset = findOffsetOf(value, minBound, maxBound); + const newValue = capValue(((offset / screenRange) * range) + min, capMin, capMax); + if (snap && newValue >= min && newValue <= max) { + return snapValueOf(newValue, min, max, step, snapStart); + } + else if (rounded) { + return Math.round(newValue); + } + else { + return newValue; + } + } + }; + const findOffsetOfValue$2 = (args) => { + const { min, max, range, value, hasMinEdge, hasMaxEdge, maxBound, maxOffset, centerMinEdge, centerMaxEdge } = args; + if (value < min) { + return hasMinEdge ? 0 : centerMinEdge; + } + else if (value > max) { + return hasMaxEdge ? maxBound : centerMaxEdge; + } + else { + // position along the slider + return (value - min) / range * maxOffset; + } + }; + + const top = 'top', right = 'right', bottom = 'bottom', left = 'left', width = 'width', height = 'height'; + // Screen offsets from bounding client rect + const getBounds = (component) => component.element.dom.getBoundingClientRect(); + const getBoundsProperty = (bounds, property) => bounds[property]; + const getMinXBounds = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, left); + }; + const getMaxXBounds = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, right); + }; + const getMinYBounds = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, top); + }; + const getMaxYBounds = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, bottom); + }; + const getXScreenRange = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, width); + }; + const getYScreenRange = (component) => { + const bounds = getBounds(component); + return getBoundsProperty(bounds, height); + }; + const getCenterOffsetOf = (componentMinEdge, componentMaxEdge, spectrumMinEdge) => (componentMinEdge + componentMaxEdge) / 2 - spectrumMinEdge; + const getXCenterOffSetOf = (component, spectrum) => { + const componentBounds = getBounds(component); + const spectrumBounds = getBounds(spectrum); + const componentMinEdge = getBoundsProperty(componentBounds, left); + const componentMaxEdge = getBoundsProperty(componentBounds, right); + const spectrumMinEdge = getBoundsProperty(spectrumBounds, left); + return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge); + }; + const getYCenterOffSetOf = (component, spectrum) => { + const componentBounds = getBounds(component); + const spectrumBounds = getBounds(spectrum); + const componentMinEdge = getBoundsProperty(componentBounds, top); + const componentMaxEdge = getBoundsProperty(componentBounds, bottom); + const spectrumMinEdge = getBoundsProperty(spectrumBounds, top); + return getCenterOffsetOf(componentMinEdge, componentMaxEdge, spectrumMinEdge); + }; + + // fire slider change event with x value + const fireSliderChange$2 = (spectrum, value) => { + emitWith(spectrum, sliderChangeEvent(), { value }); + }; + // find the value of the x offset of where the mouse was clicked from the model. + const findValueOfOffset$1 = (spectrum, detail, left) => { + const args = { + min: minX(detail), + max: maxX(detail), + range: xRange(detail), + value: left, + step: step(detail), + snap: snap(detail), + snapStart: snapStart(detail), + rounded: rounded(detail), + hasMinEdge: hasLEdge(detail), + hasMaxEdge: hasREdge(detail), + minBound: getMinXBounds(spectrum), + maxBound: getMaxXBounds(spectrum), + screenRange: getXScreenRange(spectrum) + }; + return findValueOf(args); + }; + // find the value and fire a slider change event, returning the value + const setValueFrom$2 = (spectrum, detail, value) => { + const xValue = findValueOfOffset$1(spectrum, detail, value); + const sliderVal = xValue; + fireSliderChange$2(spectrum, sliderVal); + return xValue; + }; + // fire a slider change event with the minimum value + const setToMin$2 = (spectrum, detail) => { + const min = minX(detail); + fireSliderChange$2(spectrum, min); + }; + // fire a slider change event with the maximum value + const setToMax$2 = (spectrum, detail) => { + const max = maxX(detail); + fireSliderChange$2(spectrum, max); + }; + // move in a direction by step size. Fire change at the end + const moveBy$2 = (direction, spectrum, detail, useMultiplier) => { + const f = (direction > 0) ? increaseBy : reduceBy; + const xValue = f(currentValue(detail), minX(detail), maxX(detail), step(detail, useMultiplier)); + fireSliderChange$2(spectrum, xValue); + return Optional.some(xValue); + }; + const handleMovement$2 = (direction) => (spectrum, detail, useMultiplier) => moveBy$2(direction, spectrum, detail, useMultiplier).map(always); + // get x offset from event + const getValueFromEvent$2 = (simulatedEvent) => { + const pos = getEventSource(simulatedEvent); + return pos.map((p) => p.left); + }; + // find the x offset of a given value from the model + const findOffsetOfValue$1 = (spectrum, detail, value, minEdge, maxEdge) => { + const minOffset = 0; + const maxOffset = getXScreenRange(spectrum); + const centerMinEdge = minEdge.bind((edge) => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(minOffset); + const centerMaxEdge = maxEdge.bind((edge) => Optional.some(getXCenterOffSetOf(edge, spectrum))).getOr(maxOffset); + const args = { + min: minX(detail), + max: maxX(detail), + range: xRange(detail), + value, + hasMinEdge: hasLEdge(detail), + hasMaxEdge: hasREdge(detail), + minBound: getMinXBounds(spectrum), + minOffset, + maxBound: getMaxXBounds(spectrum), + maxOffset, + centerMinEdge, + centerMaxEdge + }; + return findOffsetOfValue$2(args); + }; + // find left offset for absolute positioning from a given value + const findPositionOfValue$1 = (slider, spectrum, value, minEdge, maxEdge, detail) => { + const offset = findOffsetOfValue$1(spectrum, detail, value, minEdge, maxEdge); + return (getMinXBounds(spectrum) - getMinXBounds(slider)) + offset; + }; + // update the position of the thumb from the slider's current value + const setPositionFromValue$2 = (slider, thumb, detail, edges) => { + const value = currentValue(detail); + const pos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail); + const thumbRadius = get$c(thumb.element) / 2; + set$7(thumb.element, 'left', (pos - thumbRadius) + 'px'); + }; + // Key Events + const onLeft$2 = handleMovement$2(-1); + const onRight$2 = handleMovement$2(1); + const onUp$2 = Optional.none; + const onDown$2 = Optional.none; + // Edge Click Actions + const edgeActions$2 = { + 'top-left': Optional.none(), + 'top': Optional.none(), + 'top-right': Optional.none(), + 'right': Optional.some(setToREdge), + 'bottom-right': Optional.none(), + 'bottom': Optional.none(), + 'bottom-left': Optional.none(), + 'left': Optional.some(setToLEdge) + }; + + var HorizontalModel = /*#__PURE__*/Object.freeze({ + __proto__: null, + setValueFrom: setValueFrom$2, + setToMin: setToMin$2, + setToMax: setToMax$2, + findValueOfOffset: findValueOfOffset$1, + getValueFromEvent: getValueFromEvent$2, + findPositionOfValue: findPositionOfValue$1, + setPositionFromValue: setPositionFromValue$2, + onLeft: onLeft$2, + onRight: onRight$2, + onUp: onUp$2, + onDown: onDown$2, + edgeActions: edgeActions$2 + }); + + // fire slider change event with y value + const fireSliderChange$1 = (spectrum, value) => { + emitWith(spectrum, sliderChangeEvent(), { value }); + }; + // find the value of the y offset of where the mouse was clicked from the model. + const findValueOfOffset = (spectrum, detail, top) => { + const args = { + min: minY(detail), + max: maxY(detail), + range: yRange(detail), + value: top, + step: step(detail), + snap: snap(detail), + snapStart: snapStart(detail), + rounded: rounded(detail), + hasMinEdge: hasTEdge(detail), + hasMaxEdge: hasBEdge(detail), + minBound: getMinYBounds(spectrum), + maxBound: getMaxYBounds(spectrum), + screenRange: getYScreenRange(spectrum) + }; + return findValueOf(args); + }; + // find the value and fire a slider change event, returning the value + const setValueFrom$1 = (spectrum, detail, value) => { + const yValue = findValueOfOffset(spectrum, detail, value); + const sliderVal = yValue; + fireSliderChange$1(spectrum, sliderVal); + return yValue; + }; + // fire a slider change event with the minimum value + const setToMin$1 = (spectrum, detail) => { + const min = minY(detail); + fireSliderChange$1(spectrum, min); + }; + // fire a slider change event with the maximum value + const setToMax$1 = (spectrum, detail) => { + const max = maxY(detail); + fireSliderChange$1(spectrum, max); + }; + // move in a direction by step size. Fire change at the end + const moveBy$1 = (direction, spectrum, detail, useMultiplier) => { + const f = (direction > 0) ? increaseBy : reduceBy; + const yValue = f(currentValue(detail), minY(detail), maxY(detail), step(detail, useMultiplier)); + fireSliderChange$1(spectrum, yValue); + return Optional.some(yValue); + }; + const handleMovement$1 = (direction) => (spectrum, detail, useMultiplier) => moveBy$1(direction, spectrum, detail, useMultiplier).map(always); + // get y offset from event + const getValueFromEvent$1 = (simulatedEvent) => { + const pos = getEventSource(simulatedEvent); + return pos.map((p) => { + return p.top; + }); + }; + // find the y offset of a given value from the model + const findOffsetOfValue = (spectrum, detail, value, minEdge, maxEdge) => { + const minOffset = 0; + const maxOffset = getYScreenRange(spectrum); + const centerMinEdge = minEdge.bind((edge) => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(minOffset); + const centerMaxEdge = maxEdge.bind((edge) => Optional.some(getYCenterOffSetOf(edge, spectrum))).getOr(maxOffset); + const args = { + min: minY(detail), + max: maxY(detail), + range: yRange(detail), + value, + hasMinEdge: hasTEdge(detail), + hasMaxEdge: hasBEdge(detail), + minBound: getMinYBounds(spectrum), + minOffset, + maxBound: getMaxYBounds(spectrum), + maxOffset, + centerMinEdge, + centerMaxEdge + }; + return findOffsetOfValue$2(args); + }; + // find left offset for absolute positioning from a given value + const findPositionOfValue = (slider, spectrum, value, minEdge, maxEdge, detail) => { + const offset = findOffsetOfValue(spectrum, detail, value, minEdge, maxEdge); + return (getMinYBounds(spectrum) - getMinYBounds(slider)) + offset; + }; + // update the position of the thumb from the slider's current value + const setPositionFromValue$1 = (slider, thumb, detail, edges) => { + const value = currentValue(detail); + const pos = findPositionOfValue(slider, edges.getSpectrum(slider), value, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail); + const thumbRadius = get$d(thumb.element) / 2; + set$7(thumb.element, 'top', (pos - thumbRadius) + 'px'); + }; + // Key Events + const onLeft$1 = Optional.none; + const onRight$1 = Optional.none; + const onUp$1 = handleMovement$1(-1); + const onDown$1 = handleMovement$1(1); + // Edge Click Actions + const edgeActions$1 = { + 'top-left': Optional.none(), + 'top': Optional.some(setToTEdge), + 'top-right': Optional.none(), + 'right': Optional.none(), + 'bottom-right': Optional.none(), + 'bottom': Optional.some(setToBEdge), + 'bottom-left': Optional.none(), + 'left': Optional.none() + }; + + var VerticalModel = /*#__PURE__*/Object.freeze({ + __proto__: null, + setValueFrom: setValueFrom$1, + setToMin: setToMin$1, + setToMax: setToMax$1, + findValueOfOffset: findValueOfOffset, + getValueFromEvent: getValueFromEvent$1, + findPositionOfValue: findPositionOfValue, + setPositionFromValue: setPositionFromValue$1, + onLeft: onLeft$1, + onRight: onRight$1, + onUp: onUp$1, + onDown: onDown$1, + edgeActions: edgeActions$1 + }); + + // fire slider change event with xy value + const fireSliderChange = (spectrum, value) => { + emitWith(spectrum, sliderChangeEvent(), { value }); + }; + const sliderValue = (x, y) => ({ + x, + y + }); + // find both values of x and y offsets of where the mouse was clicked from the model. + // then fire a slider change event with those values, returning the values + const setValueFrom = (spectrum, detail, value) => { + const xValue = findValueOfOffset$1(spectrum, detail, value.left); + const yValue = findValueOfOffset(spectrum, detail, value.top); + const val = sliderValue(xValue, yValue); + fireSliderChange(spectrum, val); + return val; + }; + // move in a direction by step size. Fire change at the end + const moveBy = (direction, isVerticalMovement, spectrum, detail, useMultiplier) => { + const f = (direction > 0) ? increaseBy : reduceBy; + const xValue = isVerticalMovement ? currentValue(detail).x : + f(currentValue(detail).x, minX(detail), maxX(detail), step(detail, useMultiplier)); + const yValue = !isVerticalMovement ? currentValue(detail).y : + f(currentValue(detail).y, minY(detail), maxY(detail), step(detail, useMultiplier)); + fireSliderChange(spectrum, sliderValue(xValue, yValue)); + return Optional.some(xValue); + }; + const handleMovement = (direction, isVerticalMovement) => (spectrum, detail, useMultiplier) => moveBy(direction, isVerticalMovement, spectrum, detail, useMultiplier).map(always); + // fire a slider change event with the minimum value + const setToMin = (spectrum, detail) => { + const mX = minX(detail); + const mY = minY(detail); + fireSliderChange(spectrum, sliderValue(mX, mY)); + }; + // fire a slider change event with the maximum value + const setToMax = (spectrum, detail) => { + const mX = maxX(detail); + const mY = maxY(detail); + fireSliderChange(spectrum, sliderValue(mX, mY)); + }; + // get event data as a SugarPosition + const getValueFromEvent = (simulatedEvent) => getEventSource(simulatedEvent); + // update the position of the thumb from the slider's current value + const setPositionFromValue = (slider, thumb, detail, edges) => { + const value = currentValue(detail); + const xPos = findPositionOfValue$1(slider, edges.getSpectrum(slider), value.x, edges.getLeftEdge(slider), edges.getRightEdge(slider), detail); + const yPos = findPositionOfValue(slider, edges.getSpectrum(slider), value.y, edges.getTopEdge(slider), edges.getBottomEdge(slider), detail); + const thumbXRadius = get$c(thumb.element) / 2; + const thumbYRadius = get$d(thumb.element) / 2; + set$7(thumb.element, 'left', (xPos - thumbXRadius) + 'px'); + set$7(thumb.element, 'top', (yPos - thumbYRadius) + 'px'); + }; + // Key Events + const onLeft = handleMovement(-1, false); + const onRight = handleMovement(1, false); + const onUp = handleMovement(-1, true); + const onDown = handleMovement(1, true); + // Edge Click Actions + const edgeActions = { + 'top-left': Optional.some(setToTLEdgeXY), + 'top': Optional.some(setToTEdgeXY), + 'top-right': Optional.some(setToTREdgeXY), + 'right': Optional.some(setToREdgeXY), + 'bottom-right': Optional.some(setToBREdgeXY), + 'bottom': Optional.some(setToBEdgeXY), + 'bottom-left': Optional.some(setToBLEdgeXY), + 'left': Optional.some(setToLEdgeXY) + }; + + var TwoDModel = /*#__PURE__*/Object.freeze({ + __proto__: null, + setValueFrom: setValueFrom, + setToMin: setToMin, + setToMax: setToMax, + getValueFromEvent: getValueFromEvent, + setPositionFromValue: setPositionFromValue, + onLeft: onLeft, + onRight: onRight, + onUp: onUp, + onDown: onDown, + edgeActions: edgeActions + }); + + const SliderSchema = [ + defaulted('stepSize', 1), + defaulted('speedMultiplier', 10), + defaulted('onChange', noop), + defaulted('onChoose', noop), + defaulted('onInit', noop), + defaulted('onDragStart', noop), + defaulted('onDragEnd', noop), + defaulted('snapToGrid', false), + defaulted('rounded', true), + option$3('snapStart'), + requiredOf('model', choose$1('mode', { + x: [ + defaulted('minX', 0), + defaulted('maxX', 100), + customField('value', (spec) => Cell(spec.mode.minX)), + required$1('getInitialValue'), + output$1('manager', HorizontalModel) + ], + y: [ + defaulted('minY', 0), + defaulted('maxY', 100), + customField('value', (spec) => Cell(spec.mode.minY)), + required$1('getInitialValue'), + output$1('manager', VerticalModel) + ], + xy: [ + defaulted('minX', 0), + defaulted('maxX', 100), + defaulted('minY', 0), + defaulted('maxY', 100), + customField('value', (spec) => Cell({ + x: spec.mode.minX, + y: spec.mode.minY + })), + required$1('getInitialValue'), + output$1('manager', TwoDModel) + ] + })), + field('sliderBehaviours', [Keying, Representing]), + customField('mouseIsDown', () => Cell(false)) + ]; + + const sketch$1 = (detail, components, _spec, _externals) => { + const getThumb = (component) => getPartOrDie(component, detail, 'thumb'); + const getSpectrum = (component) => getPartOrDie(component, detail, 'spectrum'); + const getLeftEdge = (component) => getPart(component, detail, 'left-edge'); + const getRightEdge = (component) => getPart(component, detail, 'right-edge'); + const getTopEdge = (component) => getPart(component, detail, 'top-edge'); + const getBottomEdge = (component) => getPart(component, detail, 'bottom-edge'); + const modelDetail = detail.model; + const model = modelDetail.manager; + const refresh = (slider, thumb) => { + model.setPositionFromValue(slider, thumb, detail, { + getLeftEdge, + getRightEdge, + getTopEdge, + getBottomEdge, + getSpectrum + }); + }; + const setValue = (slider, newValue) => { + modelDetail.value.set(newValue); + const thumb = getThumb(slider); + refresh(slider, thumb); + }; + const changeValue = (slider, newValue) => { + setValue(slider, newValue); + const thumb = getThumb(slider); + detail.onChange(slider, thumb, newValue); + return Optional.some(true); + }; + const resetToMin = (slider) => { + model.setToMin(slider, detail); + }; + const resetToMax = (slider) => { + model.setToMax(slider, detail); + }; + const choose = (slider) => { + const fireOnChoose = () => { + getPart(slider, detail, 'thumb').each((thumb) => { + const value = modelDetail.value.get(); + detail.onChoose(slider, thumb, value); + }); + }; + const wasDown = detail.mouseIsDown.get(); + detail.mouseIsDown.set(false); + // We don't want this to fire if the mouse wasn't pressed down over anything other than the slider. + if (wasDown) { + fireOnChoose(); + } + }; + const onDragStart = (slider, simulatedEvent) => { + simulatedEvent.stop(); + detail.mouseIsDown.set(true); + detail.onDragStart(slider, getThumb(slider)); + }; + const onDragEnd = (slider, simulatedEvent) => { + simulatedEvent.stop(); + detail.onDragEnd(slider, getThumb(slider)); + choose(slider); + }; + const focusWidget = (component) => { + getPart(component, detail, 'spectrum').map(Keying.focusIn); + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: augment(detail.sliderBehaviours, [ + Keying.config({ + mode: 'special', + focusIn: focusWidget + }), + Representing.config({ + store: { + mode: 'manual', + getValue: (_) => { + return modelDetail.value.get(); + }, + setValue + } + }), + Receiving.config({ + channels: { + [mouseReleased()]: { + onReceive: choose + } + } + }) + ]), + events: derive$2([ + run$1(sliderChangeEvent(), (slider, simulatedEvent) => { + changeValue(slider, simulatedEvent.event.value); + }), + runOnAttached((slider, _simulatedEvent) => { + // Set the initial value + const getInitial = modelDetail.getInitialValue(); + modelDetail.value.set(getInitial); + const thumb = getThumb(slider); + refresh(slider, thumb); + const spectrum = getSpectrum(slider); + // Call onInit instead of onChange for the first value. + detail.onInit(slider, thumb, spectrum, modelDetail.value.get()); + }), + run$1(touchstart(), onDragStart), + run$1(touchend(), onDragEnd), + run$1(mousedown(), (component, event) => { + focusWidget(component); + onDragStart(component, event); + }), + run$1(mouseup(), onDragEnd), + ]), + apis: { + resetToMin, + resetToMax, + setValue, + refresh + }, + domModification: { + styles: { + position: 'relative' + } + } + }; + }; + + const Slider = composite({ + name: 'Slider', + configFields: SliderSchema, + partFields: SliderParts, + factory: sketch$1, + apis: { + setValue: (apis, slider, value) => { + apis.setValue(slider, value); + }, + resetToMin: (apis, slider) => { + apis.resetToMin(slider); + }, + resetToMax: (apis, slider) => { + apis.resetToMax(slider); + }, + refresh: (apis, slider) => { + apis.refresh(slider); + } + } + }); + + const owner = 'container'; + const schema$7 = [ + field('slotBehaviours', []) + ]; + const getPartName = (name) => ''; + const sketch = (sSpec) => { + // As parts.slot is called, record all of the parts that are registered + // as part of this SlotContainer. + const parts = (() => { + const record = []; + const slot = (name, config) => { + record.push(name); + return generateOne$1(owner, getPartName(name), config); + }; + return { + slot, + record: constant$1(record) + }; + })(); + const spec = sSpec(parts); + const partNames = parts.record(); + // Like a Form, a SlotContainer does not know its parts in advance. So the + // record lists the names of the parts to put in the schema. + // TODO: Find a nice way to remove dupe with Form + const fieldParts = map$2(partNames, (n) => required({ name: n, pname: getPartName(n) })); + return composite$1(owner, schema$7, fieldParts, make$3, spec); + }; + const make$3 = (detail, components) => { + const getSlotNames = (_) => getAllPartNames(detail); + const getSlot = (container, key) => getPart(container, detail, key); + const onSlot = (f, def) => (container, key) => getPart(container, detail, key).map((slot) => f(slot, key)).getOr(def); + const onSlots = (f) => (container, keys) => { + each$1(keys, (key) => f(container, key)); + }; + const doShowing = (comp, _key) => get$g(comp.element, 'aria-hidden') !== 'true'; + const doShow = (comp, key) => { + // NOTE: May need to restore old values. + if (!doShowing(comp)) { + const element = comp.element; + remove$6(element, 'display'); + remove$8(element, 'aria-hidden'); + emitWith(comp, slotVisibility(), { name: key, visible: true }); + } + }; + const doHide = (comp, key) => { + // NOTE: May need to save old values. + if (doShowing(comp)) { + const element = comp.element; + set$7(element, 'display', 'none'); + set$9(element, 'aria-hidden', 'true'); + emitWith(comp, slotVisibility(), { name: key, visible: false }); + } + }; + const isShowing = onSlot(doShowing, false); + const hideSlot = onSlot(doHide); + const hideSlots = onSlots(hideSlot); + const hideAllSlots = (container) => hideSlots(container, getSlotNames()); + const showSlot = onSlot(doShow); + const apis = { + getSlotNames, + getSlot, + isShowing, + hideSlot, + hideAllSlots, + showSlot + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: get$2(detail.slotBehaviours), + apis + }; + }; + // No type safety doing it this way. But removes dupe. + // We could probably use spread operator to help here. + const slotApis = map$1({ + getSlotNames: (apis, c) => apis.getSlotNames(c), + getSlot: (apis, c, key) => apis.getSlot(c, key), + isShowing: (apis, c, key) => apis.isShowing(c, key), + hideSlot: (apis, c, key) => apis.hideSlot(c, key), + hideAllSlots: (apis, c) => apis.hideAllSlots(c), + showSlot: (apis, c, key) => apis.showSlot(c, key) + }, (value) => makeApi(value)); + const SlotContainer = { + ...slotApis, + ...{ sketch } + }; + + const generate$1 = (xs, f) => { + const init = { + len: 0, + list: [] + }; + const r = foldl(xs, (b, a) => { + const value = f(a, b.len); + return value.fold(constant$1(b), (v) => ({ + len: v.finish, + list: b.list.concat([v]) + })); + }, init); + return r.list; + }; + + const output = (within, extra, withinWidth) => ({ + within, + extra, + withinWidth + }); + const apportion = (units, total, len) => { + const parray = generate$1(units, (unit, current) => { + const width = len(unit); + return Optional.some({ + element: unit, + start: current, + finish: current + width, + width + }); + }); + const within = filter$2(parray, (unit) => unit.finish <= total); + const withinWidth = foldr(within, (acc, el) => acc + el.width, 0); + const extra = parray.slice(within.length); + return { + within, + extra, + withinWidth + }; + }; + const toUnit = (parray) => map$2(parray, (unit) => unit.element); + const fitLast = (within, extra, withinWidth) => { + const fits = toUnit(within.concat(extra)); + return output(fits, [], withinWidth); + }; + const overflow = (within, extra, overflower, withinWidth) => { + const fits = toUnit(within).concat([overflower]); + return output(fits, toUnit(extra), withinWidth); + }; + const fitAll = (within, extra, withinWidth) => output(toUnit(within), [], withinWidth); + const tryFit = (total, units, len) => { + const divide = apportion(units, total, len); + return divide.extra.length === 0 ? Optional.some(divide) : Optional.none(); + }; + const partition = (total, units, len, overflower) => { + // Firstly, we try without the overflower. + const divide = tryFit(total, units, len).getOrThunk(() => + // If that doesn't work, overflow + apportion(units, total - len(overflower), len)); + const within = divide.within; + const extra = divide.extra; + const withinWidth = divide.withinWidth; + if (extra.length === 1 && extra[0].width <= len(overflower)) { + return fitLast(within, extra, withinWidth); + } + else if (extra.length >= 1) { + return overflow(within, extra, overflower, withinWidth); + } + else { + return fitAll(within, extra, withinWidth); + } + }; + + const setGroups = (toolbar, storedGroups) => { + const bGroups = map$2(storedGroups, (g) => premade(g)); + Toolbar.setGroups(toolbar, bGroups); + }; + const findFocusedComp = (comps) => findMap(comps, (comp) => search(comp.element).bind((focusedElm) => comp.getSystem().getByDom(focusedElm).toOptional())); + const refresh$2 = (toolbar, detail, setOverflow) => { + // Ensure we have toolbar groups to render + const builtGroups = detail.builtGroups.get(); + if (builtGroups.length === 0) { + return; + } + const primary = getPartOrDie(toolbar, detail, 'primary'); + const overflowGroup = Coupling.getCoupled(toolbar, 'overflowGroup'); + // Set the primary toolbar to have visibility hidden; + set$7(primary.element, 'visibility', 'hidden'); + const groups = builtGroups.concat([overflowGroup]); + // Store the current focus state + const focusedComp = findFocusedComp(groups); + // Clear the overflow toolbar + setOverflow([]); + // Put all the groups inside the primary toolbar + setGroups(primary, groups); + const availableWidth = get$c(primary.element); + const overflows = partition(availableWidth, detail.builtGroups.get(), (comp) => Math.ceil(comp.element.dom.getBoundingClientRect().width), overflowGroup); + if (overflows.extra.length === 0) { + // Not ideal. Breaking abstraction somewhat, though remove is better than insert + // Can just reset the toolbar groups also ... but may be a bit slower. + Replacing.remove(primary, overflowGroup); + setOverflow([]); + } + else { + setGroups(primary, overflows.within); + setOverflow(overflows.extra); + } + remove$6(primary.element, 'visibility'); + reflow(primary.element); + // Restore the focus + focusedComp.each(Focusing.focus); + }; + + const schema$6 = constant$1([ + field('splitToolbarBehaviours', [Coupling]), + customField('builtGroups', () => Cell([])) + ]); + + const schema$5 = constant$1([ + markers$1(['overflowToggledClass']), + optionFunction('getOverflowBounds'), + required$1('lazySink'), + customField('overflowGroups', () => Cell([])), + onHandler('onOpened'), + onHandler('onClosed') + ].concat(schema$6())); + const parts$5 = constant$1([ + required({ + factory: Toolbar, + schema: schema$d(), + name: 'primary' + }), + external$1({ + schema: schema$d(), + name: 'overflow' + }), + external$1({ + name: 'overflow-button' + }), + external$1({ + name: 'overflow-group' + }) + ]); + + const schema$4 = constant$1([ + required$1('items'), + markers$1(['itemSelector']), + field('tgroupBehaviours', [Keying]) + ]); + const parts$4 = constant$1([ + group({ + name: 'items', + unit: 'item' + }) + ]); + + const factory$b = (detail, components, _spec, _externals) => ({ + uid: detail.uid, + dom: detail.dom, + components, + behaviours: augment(detail.tgroupBehaviours, [ + Keying.config({ + mode: 'flow', + selector: detail.markers.itemSelector + }) + ]), + domModification: { + attributes: { + role: 'toolbar' + } + } + }); + const ToolbarGroup = composite({ + name: 'ToolbarGroup', + configFields: schema$4(), + partFields: parts$4(), + factory: factory$b + }); + + const buildGroups = (comps) => map$2(comps, (g) => premade(g)); + const refresh$1 = (toolbar, memFloatingToolbarButton, detail) => { + refresh$2(toolbar, detail, (overflowGroups) => { + detail.overflowGroups.set(overflowGroups); + memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => { + FloatingToolbarButton.setGroups(floatingToolbarButton, buildGroups(overflowGroups)); + }); + }); + }; + const factory$a = (detail, components, spec, externals) => { + const memFloatingToolbarButton = record(FloatingToolbarButton.sketch({ + fetch: () => Future.nu((resolve) => { + resolve(buildGroups(detail.overflowGroups.get())); + }), + layouts: { + onLtr: () => [southwest$2, southeast$2], + onRtl: () => [southeast$2, southwest$2], + onBottomLtr: () => [northwest$2, northeast$2], + onBottomRtl: () => [northeast$2, northwest$2] + }, + getBounds: spec.getOverflowBounds, + lazySink: detail.lazySink, + fireDismissalEventInstead: {}, + markers: { + toggledClass: detail.markers.overflowToggledClass + }, + parts: { + button: externals['overflow-button'](), + toolbar: externals.overflow() + }, + onToggled: (comp, state) => detail[state ? 'onOpened' : 'onClosed'](comp) + })); + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: augment(detail.splitToolbarBehaviours, [ + Coupling.config({ + others: { + overflowGroup: () => { + return ToolbarGroup.sketch({ + ...externals['overflow-group'](), + items: [ + memFloatingToolbarButton.asSpec() + ] + }); + } + } + }) + ]), + apis: { + setGroups: (toolbar, groups) => { + detail.builtGroups.set(map$2(groups, toolbar.getSystem().build)); + refresh$1(toolbar, memFloatingToolbarButton, detail); + }, + refresh: (toolbar) => refresh$1(toolbar, memFloatingToolbarButton, detail), + toggle: (toolbar) => { + memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => { + FloatingToolbarButton.toggle(floatingToolbarButton); + }); + }, + toggleWithoutFocusing: (toolbar) => { + memFloatingToolbarButton.getOpt(toolbar).each(FloatingToolbarButton.toggleWithoutFocusing); + }, + isOpen: (toolbar) => memFloatingToolbarButton.getOpt(toolbar).map(FloatingToolbarButton.isOpen).getOr(false), + reposition: (toolbar) => { + memFloatingToolbarButton.getOpt(toolbar).each((floatingToolbarButton) => { + FloatingToolbarButton.reposition(floatingToolbarButton); + }); + }, + getOverflow: (toolbar) => memFloatingToolbarButton.getOpt(toolbar).bind(FloatingToolbarButton.getToolbar) + }, + domModification: { + attributes: { role: 'group' } + } + }; + }; + const SplitFloatingToolbar = composite({ + name: 'SplitFloatingToolbar', + configFields: schema$5(), + partFields: parts$5(), + factory: factory$a, + apis: { + setGroups: (apis, toolbar, groups) => { + apis.setGroups(toolbar, groups); + }, + refresh: (apis, toolbar) => { + apis.refresh(toolbar); + }, + reposition: (apis, toolbar) => { + apis.reposition(toolbar); + }, + toggle: (apis, toolbar) => { + apis.toggle(toolbar); + }, + toggleWithoutFocusing: (apis, toolbar) => { + apis.toggle(toolbar); + }, + isOpen: (apis, toolbar) => apis.isOpen(toolbar), + getOverflow: (apis, toolbar) => apis.getOverflow(toolbar) + } + }); + + const schema$3 = constant$1([ + markers$1(['closedClass', 'openClass', 'shrinkingClass', 'growingClass', 'overflowToggledClass']), + onHandler('onOpened'), + onHandler('onClosed') + ].concat(schema$6())); + const parts$3 = constant$1([ + required({ + factory: Toolbar, + schema: schema$d(), + name: 'primary' + }), + required({ + factory: Toolbar, + schema: schema$d(), + name: 'overflow', + overrides: (detail) => { + return { + toolbarBehaviours: derive$1([ + Sliding.config({ + dimension: { + property: 'height' + }, + closedClass: detail.markers.closedClass, + openClass: detail.markers.openClass, + shrinkingClass: detail.markers.shrinkingClass, + growingClass: detail.markers.growingClass, + onShrunk: (comp) => { + getPart(comp, detail, 'overflow-button').each((button) => { + Toggling.off(button); + }); + detail.onClosed(comp); + }, + onGrown: (comp) => { + detail.onOpened(comp); + }, + onStartGrow: (comp) => { + getPart(comp, detail, 'overflow-button').each(Toggling.on); + } + }), + Keying.config({ + mode: 'acyclic', + onEscape: (comp) => { + getPart(comp, detail, 'overflow-button').each(Focusing.focus); + return Optional.some(true); + } + }) + ]) + }; + } + }), + external$1({ + name: 'overflow-button', + overrides: (detail) => ({ + buttonBehaviours: derive$1([ + Toggling.config({ + toggleClass: detail.markers.overflowToggledClass, + aria: { + mode: 'expanded' + }, + toggleOnExecute: false + }) + ]) + }) + }), + external$1({ + name: 'overflow-group' + }) + ]); + + const isOpen = (toolbar, detail) => getPart(toolbar, detail, 'overflow').map(Sliding.hasGrown).getOr(false); + const toggleToolbar = (toolbar, detail, skipFocus) => { + // Make sure that the toolbar needs to toggled by checking for overflow button presence + getPart(toolbar, detail, 'overflow-button') + .each((oveflowButton) => { + getPart(toolbar, detail, 'overflow').each((overf) => { + refresh(toolbar, detail); + if (Sliding.hasShrunk(overf)) { + const fn = detail.onOpened; + detail.onOpened = (comp) => { + if (!skipFocus) { + Keying.focusIn(overf); + } + fn(comp); + detail.onOpened = fn; + }; + } + else { + const fn = detail.onClosed; + detail.onClosed = (comp) => { + if (!skipFocus) { + Focusing.focus(oveflowButton); + } + fn(comp); + detail.onClosed = fn; + }; + } + Sliding.toggleGrow(overf); + }); + }); + }; + const refresh = (toolbar, detail) => { + getPart(toolbar, detail, 'overflow').each((overflow) => { + refresh$2(toolbar, detail, (groups) => { + const builtGroups = map$2(groups, (g) => premade(g)); + Toolbar.setGroups(overflow, builtGroups); + }); + getPart(toolbar, detail, 'overflow-button').each((button) => { + if (Sliding.hasGrown(overflow)) { + Toggling.on(button); + } + }); + Sliding.refresh(overflow); + }); + }; + const factory$9 = (detail, components, spec, externals) => { + const toolbarToggleEvent = 'alloy.toolbar.toggle'; + const doSetGroups = (toolbar, groups) => { + const built = map$2(groups, toolbar.getSystem().build); + detail.builtGroups.set(built); + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: augment(detail.splitToolbarBehaviours, [ + Coupling.config({ + others: { + overflowGroup: (toolbar) => { + return ToolbarGroup.sketch({ + ...externals['overflow-group'](), + items: [ + Button.sketch({ + ...externals['overflow-button'](), + action: (_button) => { + emit(toolbar, toolbarToggleEvent); + } + }) + ] + }); + } + } + }), + config('toolbar-toggle-events', [ + run$1(toolbarToggleEvent, (toolbar) => { + toggleToolbar(toolbar, detail, false); + }) + ]) + ]), + apis: { + setGroups: (toolbar, groups) => { + doSetGroups(toolbar, groups); + refresh(toolbar, detail); + }, + refresh: (toolbar) => refresh(toolbar, detail), + toggle: (toolbar) => { + toggleToolbar(toolbar, detail, false); + }, + toggleWithoutFocusing: (toolbar) => { + toggleToolbar(toolbar, detail, true); + }, + isOpen: (toolbar) => isOpen(toolbar, detail) + }, + domModification: { + attributes: { role: 'group' } + } + }; + }; + const SplitSlidingToolbar = composite({ + name: 'SplitSlidingToolbar', + configFields: schema$3(), + partFields: parts$3(), + factory: factory$9, + apis: { + setGroups: (apis, toolbar, groups) => { + apis.setGroups(toolbar, groups); + }, + refresh: (apis, toolbar) => { + apis.refresh(toolbar); + }, + toggle: (apis, toolbar) => { + apis.toggle(toolbar); + }, + isOpen: (apis, toolbar) => apis.isOpen(toolbar) + } + }); + + const factory$8 = (detail, _spec) => ({ + uid: detail.uid, + dom: detail.dom, + components: detail.components, + events: events(detail.action), + behaviours: augment(detail.tabButtonBehaviours, [ + Focusing.config({}), + Keying.config({ + mode: 'execution', + useSpace: true, + useEnter: true + }), + Representing.config({ + store: { + mode: 'memory', + initialValue: detail.value + } + }) + ]), + domModification: detail.domModification + }); + const TabButton = single({ + name: 'TabButton', + configFields: [ + defaulted('uid', undefined), + required$1('value'), + field$1('dom', 'dom', mergeWithThunk(() => ({ + attributes: { + 'role': 'tab', + // NOTE: This is used in TabSection to connect "labelledby" + 'id': generate$6('aria'), + 'aria-selected': 'false' + } + })), anyValue()), + option$3('action'), + defaulted('domModification', {}), + field('tabButtonBehaviours', [Focusing, Keying, Representing]), + required$1('view') + ], + factory: factory$8 + }); + + const schema$2 = constant$1([ + required$1('tabs'), + required$1('dom'), + defaulted('clickToDismiss', false), + field('tabbarBehaviours', [Highlighting, Keying]), + markers$1(['tabClass', 'selectedClass']) + ]); + const tabsPart = group({ + factory: TabButton, + name: 'tabs', + unit: 'tab', + overrides: (barDetail) => { + const dismissTab$1 = (tabbar, button) => { + Highlighting.dehighlight(tabbar, button); + emitWith(tabbar, dismissTab(), { + tabbar, + button + }); + }; + const changeTab$1 = (tabbar, button) => { + Highlighting.highlight(tabbar, button); + emitWith(tabbar, changeTab(), { + tabbar, + button + }); + }; + return { + action: (button) => { + const tabbar = button.getSystem().getByUid(barDetail.uid).getOrDie(); + const activeButton = Highlighting.isHighlighted(tabbar, button); + const response = (() => { + if (activeButton && barDetail.clickToDismiss) { + return dismissTab$1; + } + else if (!activeButton) { + return changeTab$1; + } + else { + return noop; + } + })(); + response(tabbar, button); + }, + domModification: { + classes: [barDetail.markers.tabClass] + } + }; + } + }); + const parts$2 = constant$1([ + tabsPart + ]); + + const factory$7 = (detail, components, _spec, _externals) => ({ + 'uid': detail.uid, + 'dom': detail.dom, + components, + 'debug.sketcher': 'Tabbar', + 'domModification': { + attributes: { + role: 'tablist' + } + }, + 'behaviours': augment(detail.tabbarBehaviours, [ + Highlighting.config({ + highlightClass: detail.markers.selectedClass, + itemClass: detail.markers.tabClass, + // https://www.w3.org/TR/2010/WD-wai-aria-practices-20100916/#tabpanel + // Consider a more seam-less way of combining highlighting and toggling + onHighlight: (tabbar, tab) => { + // TODO: Integrate highlighting and toggling in a nice way + set$9(tab.element, 'aria-selected', 'true'); + }, + onDehighlight: (tabbar, tab) => { + set$9(tab.element, 'aria-selected', 'false'); + } + }), + Keying.config({ + mode: 'flow', + getInitial: (tabbar) => { + // Restore focus to the previously highlighted tab. + return Highlighting.getHighlighted(tabbar).map((tab) => tab.element); + }, + selector: '.' + detail.markers.tabClass, + executeOnMove: true + }) + ]) + }); + const Tabbar = composite({ + name: 'Tabbar', + configFields: schema$2(), + partFields: parts$2(), + factory: factory$7 + }); + + const factory$6 = (detail, _spec) => ({ + uid: detail.uid, + dom: detail.dom, + behaviours: augment(detail.tabviewBehaviours, [ + Replacing.config({}) + ]), + domModification: { + attributes: { role: 'tabpanel' } + } + }); + const Tabview = single({ + name: 'Tabview', + configFields: [ + field('tabviewBehaviours', [Replacing]) + ], + factory: factory$6 + }); + + const schema$1 = constant$1([ + defaulted('selectFirst', true), + onHandler('onChangeTab'), + onHandler('onDismissTab'), + defaulted('tabs', []), + field('tabSectionBehaviours', []) + ]); + const barPart = required({ + factory: Tabbar, + schema: [ + required$1('dom'), + requiredObjOf('markers', [ + required$1('tabClass'), + required$1('selectedClass') + ]) + ], + name: 'tabbar', + defaults: (detail) => { + return { + tabs: detail.tabs + }; + } + }); + const viewPart = required({ + factory: Tabview, + name: 'tabview' + }); + const parts$1 = constant$1([ + barPart, + viewPart + ]); + + const factory$5 = (detail, components, _spec, _externals) => { + const changeTab$1 = (button) => { + const tabValue = Representing.getValue(button); + getPart(button, detail, 'tabview').each((tabview) => { + const tabWithValue = find$5(detail.tabs, (t) => t.value === tabValue); + tabWithValue.each((tabData) => { + const panel = tabData.view(); + // Update the tabview to refer to the current tab. + getOpt(button.element, 'id').each((id) => { + set$9(tabview.element, 'aria-labelledby', id); + }); + Replacing.set(tabview, panel); + detail.onChangeTab(tabview, button, panel); + }); + }); + }; + const changeTabBy = (section, byPred) => { + getPart(section, detail, 'tabbar').each((tabbar) => { + byPred(tabbar).each(emitExecute); + }); + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: get$2(detail.tabSectionBehaviours), + events: derive$2(flatten([ + detail.selectFirst ? [ + runOnAttached((section, _simulatedEvent) => { + changeTabBy(section, Highlighting.getFirst); + }) + ] : [], + [ + run$1(changeTab(), (section, simulatedEvent) => { + const button = simulatedEvent.event.button; + changeTab$1(button); + }), + run$1(dismissTab(), (section, simulatedEvent) => { + const button = simulatedEvent.event.button; + detail.onDismissTab(section, button); + }) + ] + ])), + apis: { + getViewItems: (section) => { + return getPart(section, detail, 'tabview').map((tabview) => Replacing.contents(tabview)).getOr([]); + }, + // How should "clickToDismiss" interact with this? At the moment, it will never dismiss + showTab: (section, tabKey) => { + // We only change the tab if it isn't currently active because that takes + // the whole "dismiss" issue out of the equation. + const getTabIfNotActive = (tabbar) => { + const candidates = Highlighting.getCandidates(tabbar); + const optTab = find$5(candidates, (c) => Representing.getValue(c) === tabKey); + return optTab.filter((tab) => !Highlighting.isHighlighted(tabbar, tab)); + }; + changeTabBy(section, getTabIfNotActive); + } + } + }; + }; + const TabSection = composite({ + name: 'TabSection', + configFields: schema$1(), + partFields: parts$1(), + factory: factory$5, + apis: { + getViewItems: (apis, component) => apis.getViewItems(component), + showTab: (apis, component, tabKey) => { + apis.showTab(component, tabKey); + } + } + }); + + // When showing a value in an input field, which part of the item do we use? + const setValueFromItem = (model, input, item) => { + const itemData = Representing.getValue(item); + Representing.setValue(input, itemData); + setCursorAtEnd(input); + }; + const setSelectionOn = (input, f) => { + const el = input.element; + const value = get$5(el); + const node = el.dom; + // Only do for valid input types. + if (get$g(el, 'type') !== 'number') { + f(node, value); + } + }; + const setCursorAtEnd = (input) => { + setSelectionOn(input, (node, value) => node.setSelectionRange(value.length, value.length)); + }; + const setSelectionToEnd = (input, startOffset) => { + setSelectionOn(input, (node, value) => node.setSelectionRange(startOffset, value.length)); + }; + const attemptSelectOver = (model, input, item) => { + if (!model.selectsOver) { + return Optional.none(); + } + else { + const currentValue = Representing.getValue(input); + const inputDisplay = model.getDisplayText(currentValue); + const itemValue = Representing.getValue(item); + const itemDisplay = model.getDisplayText(itemValue); + return itemDisplay.indexOf(inputDisplay) === 0 ? + Optional.some(() => { + setValueFromItem(model, input, item); + setSelectionToEnd(input, inputDisplay.length); + }) + : Optional.none(); + } + }; + + const itemExecute = constant$1('alloy.typeahead.itemexecute'); + + // TODO: Fix this. + const make$2 = (detail, components, spec, externals) => { + const navigateList = (comp, simulatedEvent, highlighter) => { + /* + * If we have an open Sandbox with an active menu, + * but no highlighted item, then highlight the menu + * + * If we have an open Sandbox with an active menu, + * and there is a highlighted item, simulated a keydown + * on the menu + * + * If we have a closed sandbox, open the sandbox + * + * Regardless, this is a user initiated action. End previewing. + */ + detail.previewing.set(false); + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + if (Sandboxing.isOpen(sandbox)) { + Composing.getCurrent(sandbox).each((menu) => { + Highlighting.getHighlighted(menu).fold(() => { + highlighter(menu); + }, () => { + dispatchEvent(sandbox, menu.element, 'keydown', simulatedEvent); + }); + }); + } + else { + const onOpenSync = (sandbox) => { + Composing.getCurrent(sandbox).each(highlighter); + }; + open(detail, mapFetch(comp), comp, sandbox, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop); + } + }; + // Due to the fact that typeahead probably need to separate value from text, they can't reuse + // (easily) the same representing logic as input fields. + const focusBehaviours$1 = focusBehaviours(detail); + const mapFetch = (comp) => (tdata) => tdata.map((data) => { + const menus = values(data.menus); + const items = bind$3(menus, (menu) => filter$2(menu.items, (item) => item.type === 'item')); + const repState = Representing.getState(comp); + repState.update(map$2(items, (item) => item.data)); + return data; + }); + // This function (getActiveMenu) is intended to make it easier to read what is happening + // without having to decipher the Highlighting and Composing calls. + const getActiveMenu = (sandboxComp) => Composing.getCurrent(sandboxComp); + const typeaheadCustomEvents = 'typeaheadevents'; + const behaviours = [ + Focusing.config({}), + Representing.config({ + onSetValue: detail.onSetValue, + store: { + mode: 'dataset', + getDataKey: (comp) => get$5(comp.element), + // This really needs to be configurable + getFallbackEntry: (itemString) => ({ + value: itemString, + meta: {} + }), + setValue: (comp, data) => { + set$4(comp.element, detail.model.getDisplayText(data)); + }, + ...detail.initialData.map((d) => wrap('initialValue', d)).getOr({}) + } + }), + Streaming.config({ + stream: { + mode: 'throttle', + delay: detail.responseTime, + stopEvent: false + }, + onStream: (component, _simulatedEvent) => { + const sandbox = Coupling.getCoupled(component, 'sandbox'); + const focusInInput = Focusing.isFocused(component); + // You don't want it to change when something else has triggered the change. + if (focusInInput) { + if (get$5(component.element).length >= detail.minChars) { + // Get the value of the previously active (selected/highlighted) item. We + // are going to try to preserve this. + const previousValue = getActiveMenu(sandbox).bind((activeMenu) => Highlighting.getHighlighted(activeMenu).map(Representing.getValue)); + // Turning previewing ON here every keystroke is unnecessary, but relies + // on the fact that it will be turned off if required by highlighting events. + // So even if previewing was supposed to be off, turning it on here is + // just temporary, because the onOpenSync below will trigger a highlight + // if there was meant to be one, which will turn it off if required. + detail.previewing.set(true); + const onOpenSync = (_sandbox) => { + // This getActiveMenu relies on a menu being highlighted / active + getActiveMenu(sandbox).each((activeMenu) => { + // The folds can make this hard to follow, but the basic gist of it is + // that we want to see if we need to highlight one of the items in the + // menu that we just opened. If we do highlight an item, then that + // highlighting action will clear previewing (handled by the TieredMenu + // part configuration for onHighlight). Note: that onOpenSync runs + // *after* the highlightOnOpen setting. + // + // 1. If in "selectsOver" mode and we don't have a previous item, + // then highlight the first one. This one will be used as the basis + // for the "selectsOver" text selection. The act of highlighting the + // first item will take us out of previewing mode. If the "selectsOver" + // operation fails, it should clear the highlight, and restore previewing + // 2. If not in "selectsOver" mode, and we don't have a previous item, + // then we don't highlight anything. This will keep us in previewing + // mode until the menu is interacted with (hover, navigation etc.) + // 3. If we have a previous item, then try and rehighlight it. But if + // we can't, the just highlight the first. Either action will take us + // out of previewing mode. + previousValue.fold(() => { + // We are using "selectOver", so we need *something* to highlight + if (detail.model.selectsOver) { + Highlighting.highlightFirst(activeMenu); + } + // We aren't using "selectOver", so don't highlight anything + // to preserve our "previewing" mode. + }, (pv) => { + // We have a previous item, so if we can't rehighlight it, then + // we'll change to the first item. We want to keep some selection. + Highlighting.highlightBy(activeMenu, (item) => { + const itemData = Representing.getValue(item); + return itemData.value === pv.value; + }); + // Highlight first if could not find it? + Highlighting.getHighlighted(activeMenu).orThunk(() => { + Highlighting.highlightFirst(activeMenu); + return Optional.none(); + }); + }); + }); + }; + open(detail, mapFetch(component), component, sandbox, externals, onOpenSync, + // The onOpenSync takes care of what should be given the highlights, but + // we want to highlight just the menu so that the onOpenSync can find the + // activeMenu. + HighlightOnOpen.HighlightJustMenu).get(noop); + } + } + }, + cancelEvent: typeaheadCancel() + }), + Keying.config({ + mode: 'special', + onDown: (comp, simulatedEvent) => { + // The navigation here will stop the "previewing" mode, because + // now the menu will get focus (fake focus, but focus nevertheless) + navigateList(comp, simulatedEvent, Highlighting.highlightFirst); + return Optional.some(true); + }, + onEscape: (comp) => { + // Escape only has handling if the sandbox is visible. It has no meaning + // to the input itself. + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + if (Sandboxing.isOpen(sandbox)) { + Sandboxing.close(sandbox); + return Optional.some(true); + } + return Optional.none(); + }, + onUp: (comp, simulatedEvent) => { + // The navigation here will stop the "previewing" mode, because + // now the menu will get focus (fake focus, but focus nevertheless) + navigateList(comp, simulatedEvent, Highlighting.highlightLast); + return Optional.some(true); + }, + onEnter: (comp) => { + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + const sandboxIsOpen = Sandboxing.isOpen(sandbox); + // 'Previewing' means that items are shown but none has been actively selected by the user. + // When previewing, all keyboard input should still be processed by the + // input itself, not the menu. The menu is not considered to have focus. + // 'Previewing' is turned on by (streaming) keystrokes, and turned off by + // successful interaction with the menu (navigation, highlighting, hovering). + // So if we aren't previewing, and the dropdown sandbox is open, then + // we process keys on the items in the menu. All this will do + // is trigger an itemExecute event. The typeahead events (in the spec below) + // are responsible for doing something with that event. + if (sandboxIsOpen && !detail.previewing.get()) { + return getActiveMenu(sandbox).bind((activeMenu) => Highlighting.getHighlighted(activeMenu)).map((item) => { + // And item was selected, so trigger execute and consider the + // key 'handled' + emitWith(comp, itemExecute(), { item }); + return true; + }); + } + else { + // We are either previewing, or the sandbox isn't open, so we should + // process the key inside the input itself. This should cancel + // any attempt to fetch data (the typeaheadCancel), and trigger the execute. + // We also close the sandbox if it's open. + const currentValue = Representing.getValue(comp); + emit(comp, typeaheadCancel()); + detail.onExecute(sandbox, comp, currentValue); + // If we're open and previewing, close the sandbox after firing execute. + if (sandboxIsOpen) { + Sandboxing.close(sandbox); + } + return Optional.some(true); + } + } + }), + Toggling.config({ + toggleClass: detail.markers.openClass, + aria: { + mode: 'expanded' + } + }), + Coupling.config({ + others: { + sandbox: (hotspot) => { + return makeSandbox$1(detail, hotspot, { + onOpen: () => Toggling.on(hotspot), + onClose: () => { + // TINY-9280: Remove aria-activedescendant that is set when menu item is highlighted + detail.lazyTypeaheadComp.get().each((input) => remove$8(input.element, 'aria-activedescendant')); + Toggling.off(hotspot); + } + }); + } + } + }), + config(typeaheadCustomEvents, [ + runOnAttached((typeaheadComp) => { + // Set up the reference to the typeahead, so that it can retrieved from + // the tiered menu part, even if the tieredmenu is in a different + // system / alloy root / mothership. + detail.lazyTypeaheadComp.set(Optional.some(typeaheadComp)); + }), + runOnDetached((_typeaheadComp) => { + detail.lazyTypeaheadComp.set(Optional.none()); + }), + runOnExecute$1((comp) => { + const onOpenSync = noop; + togglePopup(detail, mapFetch(comp), comp, externals, onOpenSync, HighlightOnOpen.HighlightMenuAndItem).get(noop); + }), + run$1(itemExecute(), (comp, se) => { + const sandbox = Coupling.getCoupled(comp, 'sandbox'); + // Copy the value from the executed item into the input, because it was "chosen" + setValueFromItem(detail.model, comp, se.event.item); + emit(comp, typeaheadCancel()); + detail.onItemExecute(comp, sandbox, se.event.item, Representing.getValue(comp)); + Sandboxing.close(sandbox); + setCursorAtEnd(comp); + }) + ].concat(detail.dismissOnBlur ? [ + run$1(postBlur(), (typeahead) => { + const sandbox = Coupling.getCoupled(typeahead, 'sandbox'); + // Only close the sandbox if the focus isn't inside it! + if (search(sandbox.element).isNone()) { + Sandboxing.close(sandbox); + } + }) + ] : [])) + ]; + // The order specified here isn't important. Alloy just requires a + // deterministic order for the configured behaviours. + const eventOrder = { + [detachedFromDom()]: [ + Representing.name(), + Streaming.name(), + typeaheadCustomEvents + ], + ...detail.eventOrder, + }; + return { + uid: detail.uid, + dom: dom$1(deepMerge(detail, { + // TODO: Add aria-activedescendant attribute + inputAttributes: { + 'role': 'combobox', + 'aria-autocomplete': 'list', + 'aria-haspopup': 'true' + } + })), + behaviours: { + ...focusBehaviours$1, + ...augment(detail.typeaheadBehaviours, behaviours) + }, + eventOrder + }; + }; + + const schema = constant$1([ + option$3('lazySink'), + required$1('fetch'), + defaulted('minChars', 5), + defaulted('responseTime', 1000), + onHandler('onOpen'), + // TODO: Remove dupe with Dropdown + defaulted('getHotspot', Optional.some), + defaulted('getAnchorOverrides', constant$1({})), + defaulted('layouts', Optional.none()), + defaulted('eventOrder', {}), + // Information about what these model settings do can be found in TypeaheadTypes + defaultedObjOf('model', {}, [ + defaulted('getDisplayText', (itemData) => itemData.meta !== undefined && itemData.meta.text !== undefined ? itemData.meta.text : itemData.value), + defaulted('selectsOver', true), + defaulted('populateFromBrowse', true) + ]), + onHandler('onSetValue'), + onKeyboardHandler('onExecute'), + onHandler('onItemExecute'), + defaulted('inputClasses', []), + defaulted('inputAttributes', {}), + defaulted('inputStyles', {}), + defaulted('matchWidth', true), + defaulted('useMinWidth', false), + defaulted('dismissOnBlur', true), + markers$1(['openClass']), + option$3('initialData'), + option$3('listRole'), + field('typeaheadBehaviours', [ + Focusing, Representing, Streaming, Keying, Toggling, Coupling + ]), + customField('lazyTypeaheadComp', () => Cell(Optional.none)), + customField('previewing', () => Cell(true)) + ].concat(schema$9()).concat(sandboxFields())); + const parts = constant$1([ + external$1({ + schema: [ + tieredMenuMarkers() + ], + name: 'menu', + overrides: (detail) => { + return { + fakeFocus: true, + onHighlightItem: (_tmenu, menu, item) => { + if (!detail.previewing.get()) { + // We need to use this type of reference, rather than just looking + // it up from the system by uid, because the input and the tieredmenu + // might be in different systems. + detail.lazyTypeaheadComp.get().each((input) => { + if (detail.model.populateFromBrowse) { + setValueFromItem(detail.model, input, item); + } + // The focus is retained on the input element when the menu is shown, unlike the combobox, in which the focus is passed to the menu. + // This results in screen readers not being able to announce the menu or highlighted item. + // The solution is to tell screen readers which menu item is highlighted using the `aria-activedescendant` attribute. + // TINY-9280: The aria attribute is removed when the menu is closed. + // Since `onDehighlight` is called only when highlighting a new menu item, this will be handled in + // https://github.com/tinymce/tinymce/blob/2d8c1c034e8aa484b868a0c44605489ee0ca9cd4/modules/alloy/src/main/ts/ephox/alloy/ui/composite/TypeaheadSpec.ts#L282 + getOpt(item.element, 'id').each((id) => set$9(input.element, 'aria-activedescendant', id)); + }); + } + else { + // ASSUMPTION: Currently, any interaction with the menu via the keyboard or the mouse + // will firstly clear previewing mode before triggering any highlights + // so if we are still in previewing mode by the time we get to the highlight call, + // that means that the highlight was triggered NOT by the user interacting + // with the menu, but instead by the Highlighting API call that happens automatically + // when a streamed keyboard input event is updating its results. That call will + // try to keep any active highlight if there already was one (defaulting to first + // if it can't find the original), but if there wasn't an active highlight, but + // it is using "selectsOver", it will just highlight the first item. In this + // latter case, it is only doing that so that selectsOver has something to copy. + // So all of the complex code below is trying to handle whether we should stay + // in previewing mode after this highlight, and the ONLY case where we should stay + // in previewing mode is that we were in previewing mode, we are using selectsOver, + // and the selectsOver failed to succeed. In that case, to stay in previewing mode, + // we want to cancel the highlight that we just made via the highlighting API + // and reset previewing to true. Otherwise, all codepaths should set previewing + // to false, because now we have a valid highlight. + // + // As of 2022-08-18, the selectsOver model is not in use by TinyMCE, so + // this subtle interaction is unfortunately largely untested. Also, if we can't + // get a reference to the typeahead input by lazyTypeaheadComp, then we don't + // change previewing, either. Note also, that it is likely that if we checked + // if selectsOver would succeed before setting the highlight in the streaming + // response, this could might be a lot easier to follow. + detail.lazyTypeaheadComp.get().each((input) => { + attemptSelectOver(detail.model, input, item).fold( + // If we are in "previewing" mode and we can't select over the + // thing that is first, then clear the highlight. + // Hopefully, this doesn't cause a flicker. Find a better + // way to do this. + () => { + // If using "selectOver", we essentially want to cancel the highlight + // that was only invoked just so that we'd have something to selectOver, + // so we dehighlight, and then, importantly, *DON'T* clear previewing. + // We'll set it to be true to be explicit, although it should + // always be true if it reached here (unless an above function changed + // it) + if (detail.model.selectsOver) { + Highlighting.dehighlight(menu, item); + detail.previewing.set(true); + } + else { + // Because we aren't using selectsOver mode, we now want to keep + // whatever highlight we just made, and because we have a highlighted + // item in the menu, we are no longer previewing. + detail.previewing.set(false); + } + }, ((selectOverTextInInput) => { + // We have made a selection in the menu, and have selected over text + // in the input, so clear previewing. + selectOverTextInInput(); + detail.previewing.set(false); + })); + }); + } + }, + // Because the focus stays inside the input, this onExecute is fired when the + // user "clicks" on an item. The focusing behaviour should be configured + // so that items don't get focus, but they prevent a mousedown event from + // firing so that the typeahead doesn't lose focus. This is the handler + // for clicking on an item. We need to close the sandbox, update the typeahead + // to show the item clicked on, and fire an execute. + onExecute: (_menu, item) => { + // Note: This will only work when the typeahead and menu are in the same system. + return detail.lazyTypeaheadComp.get().map((typeahead) => { + emitWith(typeahead, itemExecute(), { item }); + return true; + }); + }, + onHover: (menu, item) => { + // Hovering is also a user-initiated action, so previewing mode is over. + // TODO: Have a better API for managing state in between parts. + detail.previewing.set(false); + detail.lazyTypeaheadComp.get().each((input) => { + if (detail.model.populateFromBrowse) { + setValueFromItem(detail.model, input, item); + } + }); + } + }; + } + }) + ]); + + const Typeahead = composite({ + name: 'Typeahead', + configFields: schema(), + partFields: parts(), + factory: make$2 + }); + + var global$b = tinymce.util.Tools.resolve('tinymce.ThemeManager'); + + var global$a = tinymce.util.Tools.resolve('tinymce.util.Delay'); + + var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils'); + + var global$8 = tinymce.util.Tools.resolve('tinymce.EditorManager'); + + var global$7 = tinymce.util.Tools.resolve('tinymce.Env'); + + var ToolbarMode$1; + (function (ToolbarMode) { + ToolbarMode["default"] = "wrap"; + ToolbarMode["floating"] = "floating"; + ToolbarMode["sliding"] = "sliding"; + ToolbarMode["scrolling"] = "scrolling"; + })(ToolbarMode$1 || (ToolbarMode$1 = {})); + var ToolbarLocation$1; + (function (ToolbarLocation) { + ToolbarLocation["auto"] = "auto"; + ToolbarLocation["top"] = "top"; + ToolbarLocation["bottom"] = "bottom"; + })(ToolbarLocation$1 || (ToolbarLocation$1 = {})); + const option$2 = (name) => (editor) => editor.options.get(name); + const wrapOptional = (fn) => (editor) => Optional.from(fn(editor)); + const register$f = (editor) => { + const isPhone = global$7.deviceType.isPhone(); + const isMobile = global$7.deviceType.isTablet() || isPhone; + const registerOption = editor.options.register; + const stringOrFalseProcessor = (value) => isString(value) || value === false; + const stringOrNumberProcessor = (value) => isString(value) || isNumber(value); + registerOption('skin', { + processor: (value) => isString(value) || value === false, + default: 'oxide' + }); + registerOption('skin_url', { + processor: 'string' + }); + registerOption('height', { + processor: stringOrNumberProcessor, + default: Math.max(editor.getElement().offsetHeight, 400) + }); + registerOption('width', { + processor: stringOrNumberProcessor, + default: global$9.DOM.getStyle(editor.getElement(), 'width') + }); + registerOption('min_height', { + processor: 'number', + default: 100 + }); + registerOption('min_width', { + processor: 'number' + }); + registerOption('max_height', { + processor: 'number' + }); + registerOption('max_width', { + processor: 'number' + }); + registerOption('style_formats', { + processor: 'object[]' + }); + registerOption('style_formats_merge', { + processor: 'boolean', + default: false + }); + registerOption('style_formats_autohide', { + processor: 'boolean', + default: false + }); + registerOption('line_height_formats', { + processor: 'string', + default: '1 1.1 1.2 1.3 1.4 1.5 2' + }); + registerOption('font_family_formats', { + processor: 'string', + default: 'Andale Mono=andale mono,monospace;' + + 'Arial=arial,helvetica,sans-serif;' + + 'Arial Black=arial black,sans-serif;' + + 'Book Antiqua=book antiqua,palatino,serif;' + + 'Comic Sans MS=comic sans ms,sans-serif;' + + 'Courier New=courier new,courier,monospace;' + + 'Georgia=georgia,palatino,serif;' + + 'Helvetica=helvetica,arial,sans-serif;' + + 'Impact=impact,sans-serif;' + + 'Symbol=symbol;' + + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + + 'Terminal=terminal,monaco,monospace;' + + 'Times New Roman=times new roman,times,serif;' + + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + + 'Verdana=verdana,geneva,sans-serif;' + + 'Webdings=webdings;' + + 'Wingdings=wingdings,zapf dingbats' + }); + registerOption('font_size_formats', { + processor: 'string', + default: '8pt 10pt 12pt 14pt 18pt 24pt 36pt' + }); + registerOption('font_size_input_default_unit', { + processor: 'string', + default: 'pt' + }); + registerOption('block_formats', { + processor: 'string', + default: 'Paragraph=p;' + + 'Heading 1=h1;' + + 'Heading 2=h2;' + + 'Heading 3=h3;' + + 'Heading 4=h4;' + + 'Heading 5=h5;' + + 'Heading 6=h6;' + + 'Preformatted=pre' + }); + registerOption('content_langs', { + processor: 'object[]' + }); + registerOption('removed_menuitems', { + processor: 'string', + default: '' + }); + registerOption('menubar', { + processor: (value) => isString(value) || isBoolean(value), + // Phones don't have a lot of screen space so disable the menubar + default: !isPhone + }); + registerOption('menu', { + processor: 'object', + default: {} + }); + registerOption('toolbar', { + processor: (value) => { + if (isBoolean(value) || isString(value) || isArray(value)) { + return { value, valid: true }; + } + else { + return { valid: false, message: 'Must be a boolean, string or array.' }; + } + }, + default: true + }); + // Register the toolbarN variations: toolbar1 -> toolbar9 + range$2(9, (num) => { + registerOption('toolbar' + (num + 1), { + processor: 'string' + }); + }); + registerOption('toolbar_mode', { + processor: 'string', + // Use the default side-scrolling toolbar for tablets/phones + default: isMobile ? 'scrolling' : 'floating' + }); + registerOption('toolbar_groups', { + processor: 'object', + default: {} + }); + registerOption('toolbar_location', { + processor: 'string', + default: ToolbarLocation$1.auto + }); + registerOption('toolbar_persist', { + processor: 'boolean', + default: false + }); + registerOption('toolbar_sticky', { + processor: 'boolean', + default: editor.inline + }); + registerOption('toolbar_sticky_offset', { + processor: 'number', + default: 0 + }); + registerOption('fixed_toolbar_container', { + processor: 'string', + default: '' + }); + registerOption('fixed_toolbar_container_target', { + processor: 'object' + }); + registerOption('ui_mode', { + processor: 'string', + default: 'combined' + }); + registerOption('file_picker_callback', { + processor: 'function' + }); + registerOption('file_picker_validator_handler', { + processor: 'function' + }); + registerOption('file_picker_types', { + processor: 'string' + }); + registerOption('typeahead_urls', { + processor: 'boolean', + default: true + }); + registerOption('anchor_top', { + processor: stringOrFalseProcessor, + default: '#top' + }); + registerOption('anchor_bottom', { + processor: stringOrFalseProcessor, + default: '#bottom' + }); + registerOption('draggable_modal', { + processor: 'boolean', + default: false + }); + registerOption('statusbar', { + processor: 'boolean', + default: true + }); + registerOption('elementpath', { + processor: 'boolean', + default: true + }); + registerOption('branding', { + processor: 'boolean', + default: true + }); + registerOption('promotion', { + processor: 'boolean', + default: true + }); + registerOption('resize', { + processor: (value) => value === 'both' || isBoolean(value), + // Editor resize doesn't work on touch devices at this stage + default: !global$7.deviceType.isTouch() + }); + registerOption('sidebar_show', { + processor: 'string' + }); + // This option is being registered in the theme instead of the help plugin as it cannot be accessed from the theme when registered there + registerOption('help_accessibility', { + processor: 'boolean', + default: editor.hasPlugin('help') + }); + registerOption('default_font_stack', { + processor: 'string[]', + default: [] + }); + }; + const isReadOnly = option$2('readonly'); + const isDisabled = option$2('disabled'); + const getHeightOption = option$2('height'); + const getWidthOption = option$2('width'); + const getMinWidthOption = wrapOptional(option$2('min_width')); + const getMinHeightOption = wrapOptional(option$2('min_height')); + const getMaxWidthOption = wrapOptional(option$2('max_width')); + const getMaxHeightOption = wrapOptional(option$2('max_height')); + const getUserStyleFormats = wrapOptional(option$2('style_formats')); + const shouldMergeStyleFormats = option$2('style_formats_merge'); + const shouldAutoHideStyleFormats = option$2('style_formats_autohide'); + const getContentLanguages = option$2('content_langs'); + const getRemovedMenuItems = option$2('removed_menuitems'); + const getToolbarMode = option$2('toolbar_mode'); + const getToolbarGroups = option$2('toolbar_groups'); + const getToolbarLocation = option$2('toolbar_location'); + const fixedContainerSelector = option$2('fixed_toolbar_container'); + const fixedToolbarContainerTarget = option$2('fixed_toolbar_container_target'); + const isToolbarPersist = option$2('toolbar_persist'); + const getStickyToolbarOffset = option$2('toolbar_sticky_offset'); + const getMenubar = option$2('menubar'); + const getToolbar = option$2('toolbar'); + const getFilePickerCallback = option$2('file_picker_callback'); + const getFilePickerValidatorHandler = option$2('file_picker_validator_handler'); + const getFontSizeInputDefaultUnit = option$2('font_size_input_default_unit'); + const getFilePickerTypes = option$2('file_picker_types'); + const useTypeaheadUrls = option$2('typeahead_urls'); + const getAnchorTop = option$2('anchor_top'); + const getAnchorBottom = option$2('anchor_bottom'); + const isDraggableModal$1 = option$2('draggable_modal'); + const useStatusBar = option$2('statusbar'); + const useElementPath = option$2('elementpath'); + const useBranding = option$2('branding'); + const getResize = option$2('resize'); + const getPasteAsText = option$2('paste_as_text'); + const getSidebarShow = option$2('sidebar_show'); + const promotionEnabled = option$2('promotion'); + const useHelpAccessibility = option$2('help_accessibility'); + const getDefaultFontStack = option$2('default_font_stack'); + const getSkin = option$2('skin'); + const isSkinDisabled = (editor) => editor.options.get('skin') === false; + const isMenubarEnabled = (editor) => editor.options.get('menubar') !== false; + const getSkinUrl = (editor) => { + const skinUrl = editor.options.get('skin_url'); + if (isSkinDisabled(editor)) { + return skinUrl; + } + else { + if (skinUrl) { + return editor.documentBaseURI.toAbsolute(skinUrl); + } + else { + const skin = editor.options.get('skin'); + return global$8.baseURL + '/skins/ui/' + skin; + } + } + }; + const getSkinUrlOption = (editor) => Optional.from(editor.options.get('skin_url')); + const getLineHeightFormats = (editor) => editor.options.get('line_height_formats').split(' '); + const isToolbarEnabled = (editor) => { + const toolbar = getToolbar(editor); + const isToolbarString = isString(toolbar); + const isToolbarObjectArray = isArray(toolbar) && toolbar.length > 0; + // Toolbar is enabled if its value is true, a string or non-empty object array, but not string array + return !isMultipleToolbars(editor) && (isToolbarObjectArray || isToolbarString || toolbar === true); + }; + // Convert toolbar into toolbars array + const getMultipleToolbarsOption = (editor) => { + const toolbars = range$2(9, (num) => editor.options.get('toolbar' + (num + 1))); + const toolbarArray = filter$2(toolbars, isString); + return someIf(toolbarArray.length > 0, toolbarArray); + }; + // Check if multiple toolbars is enabled + // Multiple toolbars is enabled if toolbar value is a string array or if toolbar is present + const isMultipleToolbars = (editor) => getMultipleToolbarsOption(editor).fold(() => { + const toolbar = getToolbar(editor); + return isArrayOf(toolbar, isString) && toolbar.length > 0; + }, always); + const isToolbarLocationBottom = (editor) => getToolbarLocation(editor) === ToolbarLocation$1.bottom; + const fixedContainerTarget = (editor) => { + if (!editor.inline) { + // fixed_toolbar_container(_target) is only available in inline mode + return Optional.none(); + } + const selector = fixedContainerSelector(editor) ?? ''; + if (selector.length > 0) { + // If we have a valid selector + return descendant(body(), selector); + } + const element = fixedToolbarContainerTarget(editor); + if (isNonNullable(element)) { + // If we have a valid target + return Optional.some(SugarElement.fromDom(element)); + } + return Optional.none(); + }; + const useFixedContainer = (editor) => editor.inline && fixedContainerTarget(editor).isSome(); + const getUiContainer = (editor) => { + const fixedContainer = fixedContainerTarget(editor); + return fixedContainer.getOrThunk(() => getContentContainer(getRootNode(SugarElement.fromDom(editor.getElement())))); + }; + const isDistractionFree = (editor) => editor.inline && !isMenubarEnabled(editor) && !isToolbarEnabled(editor) && !isMultipleToolbars(editor); + const isStickyToolbar = (editor) => { + const isStickyToolbar = editor.options.get('toolbar_sticky'); + return (isStickyToolbar || editor.inline) && !useFixedContainer(editor) && !isDistractionFree(editor); + }; + const isSplitUiMode = (editor) => !useFixedContainer(editor) && editor.options.get('ui_mode') === 'split'; + const getMenus = (editor) => { + const menu = editor.options.get('menu'); + return map$1(menu, (menu) => ({ ...menu, items: menu.items })); + }; + + var Options = /*#__PURE__*/Object.freeze({ + __proto__: null, + get ToolbarMode () { return ToolbarMode$1; }, + get ToolbarLocation () { return ToolbarLocation$1; }, + register: register$f, + getSkinUrl: getSkinUrl, + getSkinUrlOption: getSkinUrlOption, + isReadOnly: isReadOnly, + isDisabled: isDisabled, + getSkin: getSkin, + isSkinDisabled: isSkinDisabled, + getHeightOption: getHeightOption, + getWidthOption: getWidthOption, + getMinWidthOption: getMinWidthOption, + getMinHeightOption: getMinHeightOption, + getMaxWidthOption: getMaxWidthOption, + getMaxHeightOption: getMaxHeightOption, + getUserStyleFormats: getUserStyleFormats, + shouldMergeStyleFormats: shouldMergeStyleFormats, + shouldAutoHideStyleFormats: shouldAutoHideStyleFormats, + getLineHeightFormats: getLineHeightFormats, + getContentLanguages: getContentLanguages, + getRemovedMenuItems: getRemovedMenuItems, + isMenubarEnabled: isMenubarEnabled, + isMultipleToolbars: isMultipleToolbars, + isToolbarEnabled: isToolbarEnabled, + isToolbarPersist: isToolbarPersist, + getMultipleToolbarsOption: getMultipleToolbarsOption, + getUiContainer: getUiContainer, + useFixedContainer: useFixedContainer, + isSplitUiMode: isSplitUiMode, + getToolbarMode: getToolbarMode, + isDraggableModal: isDraggableModal$1, + isDistractionFree: isDistractionFree, + isStickyToolbar: isStickyToolbar, + getStickyToolbarOffset: getStickyToolbarOffset, + getToolbarLocation: getToolbarLocation, + isToolbarLocationBottom: isToolbarLocationBottom, + getToolbarGroups: getToolbarGroups, + getMenus: getMenus, + getMenubar: getMenubar, + getToolbar: getToolbar, + getFilePickerCallback: getFilePickerCallback, + getFilePickerTypes: getFilePickerTypes, + useTypeaheadUrls: useTypeaheadUrls, + getAnchorTop: getAnchorTop, + getAnchorBottom: getAnchorBottom, + getFilePickerValidatorHandler: getFilePickerValidatorHandler, + getFontSizeInputDefaultUnit: getFontSizeInputDefaultUnit, + useStatusBar: useStatusBar, + useElementPath: useElementPath, + promotionEnabled: promotionEnabled, + useBranding: useBranding, + getResize: getResize, + getPasteAsText: getPasteAsText, + getSidebarShow: getSidebarShow, + useHelpAccessibility: useHelpAccessibility, + getDefaultFontStack: getDefaultFontStack + }); + + // See https://developer.mozilla.org/en-US/docs/Glossary/Scroll_container for what makes an element scrollable + const nonScrollingOverflows = ['visible', 'hidden', 'clip']; + const isScrollingOverflowValue = (value) => trim$1(value).length > 0 && !contains$2(nonScrollingOverflows, value); + const isScroller = (elem) => { + if (isHTMLElement(elem)) { + const overflowX = get$e(elem, 'overflow-x'); + const overflowY = get$e(elem, 'overflow-y'); + return isScrollingOverflowValue(overflowX) || isScrollingOverflowValue(overflowY); + } + else { + return false; + } + }; + const isFullscreen = (editor) => editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen(); + // NOTE: Calculating the list of scrolling ancestors each time this function is called might + // be unnecessary. It will depend on its usage. + const detect = (editor, popupSinkElem) => { + const ancestorsScrollers = ancestors(popupSinkElem, isScroller); + // If there is no scrollable container, we try to see if it's in a shadow root, and try to traverse beyond the host of shadow root to retrieve the scrollable container + // If it is not within a ShadowRoot, since if there's a scrollable container as the ancestors, then it would not execute the code below, or return an empty array if it's not in a ShadowRoot + const scrollers = ancestorsScrollers.length === 0 + ? getShadowRoot(popupSinkElem).map(getShadowHost).map((x) => ancestors(x, isScroller)).getOr([]) + : ancestorsScrollers; + return head(scrollers) + .map((element) => ({ + element, + // A list of all scrolling elements above the nearest scroller, + // ordered from closest to popup -> closest to top of document + others: scrollers.slice(1), + isFullscreen: () => isFullscreen(editor) + })); + }; + const detectWhenSplitUiMode = (editor, popupSinkElem) => isSplitUiMode(editor) ? detect(editor, popupSinkElem) : Optional.none(); + // Using all the scrolling viewports in the ancestry, limit the absolute + // coordinates of window so that the bounds are limited by all the scrolling + // viewports. + const getBoundsFrom = (sc) => { + const scrollableBoxes = [ + // sc.element is the main scroller, others are *additional* scrollers above that + // we need to combine all of them to constrain the bounds + ...map$2(sc.others, box$1), + win() + ]; + return sc.isFullscreen() ? win() : constrainByMany(box$1(sc.element), scrollableBoxes); + }; + + /*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */ + + const { + entries, + setPrototypeOf, + isFrozen, + getPrototypeOf, + getOwnPropertyDescriptor + } = Object; + let { + freeze, + seal, + create: create$1 + } = Object; // eslint-disable-line import/no-mutable-exports + let { + apply, + construct + } = typeof Reflect !== 'undefined' && Reflect; + if (!freeze) { + freeze = function freeze(x) { + return x; + }; + } + if (!seal) { + seal = function seal(x) { + return x; + }; + } + if (!apply) { + apply = function apply(fun, thisValue, args) { + return fun.apply(thisValue, args); + }; + } + if (!construct) { + construct = function construct(Func, args) { + return new Func(...args); + }; + } + const arrayForEach = unapply(Array.prototype.forEach); + const arrayLastIndexOf = unapply(Array.prototype.lastIndexOf); + const arrayPop = unapply(Array.prototype.pop); + const arrayPush = unapply(Array.prototype.push); + const arraySplice = unapply(Array.prototype.splice); + const stringToLowerCase = unapply(String.prototype.toLowerCase); + const stringToString = unapply(String.prototype.toString); + const stringMatch = unapply(String.prototype.match); + const stringReplace = unapply(String.prototype.replace); + const stringIndexOf = unapply(String.prototype.indexOf); + const stringTrim = unapply(String.prototype.trim); + const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty); + const regExpTest = unapply(RegExp.prototype.test); + const typeErrorCreate = unconstruct(TypeError); + /** + * Creates a new function that calls the given function with a specified thisArg and arguments. + * + * @param func - The function to be wrapped and called. + * @returns A new function that calls the given function with a specified thisArg and arguments. + */ + function unapply(func) { + return function (thisArg) { + if (thisArg instanceof RegExp) { + thisArg.lastIndex = 0; + } + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return apply(func, thisArg, args); + }; + } + /** + * Creates a new function that constructs an instance of the given constructor function with the provided arguments. + * + * @param func - The constructor function to be wrapped and called. + * @returns A new function that constructs an instance of the given constructor function with the provided arguments. + */ + function unconstruct(func) { + return function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return construct(func, args); + }; + } + /** + * Add properties to a lookup table + * + * @param set - The set to which elements will be added. + * @param array - The array containing elements to be added to the set. + * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set. + * @returns The modified set with added elements. + */ + function addToSet(set, array) { + let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; + if (setPrototypeOf) { + // Make 'in' and truthy checks like Boolean(set.constructor) + // independent of any properties defined on Object.prototype. + // Prevent prototype setters from intercepting set as a this value. + setPrototypeOf(set, null); + } + let l = array.length; + while (l--) { + let element = array[l]; + if (typeof element === 'string') { + const lcElement = transformCaseFunc(element); + if (lcElement !== element) { + // Config presets (e.g. tags.js, attrs.js) are immutable. + if (!isFrozen(array)) { + array[l] = lcElement; + } + element = lcElement; + } + } + set[element] = true; + } + return set; + } + /** + * Clean up an array to harden against CSPP + * + * @param array - The array to be cleaned. + * @returns The cleaned version of the array + */ + function cleanArray(array) { + for (let index = 0; index < array.length; index++) { + const isPropertyExist = objectHasOwnProperty(array, index); + if (!isPropertyExist) { + array[index] = null; + } + } + return array; + } + /** + * Shallow clone an object + * + * @param object - The object to be cloned. + * @returns A new object that copies the original. + */ + function clone(object) { + const newObject = create$1(null); + for (const [property, value] of entries(object)) { + const isPropertyExist = objectHasOwnProperty(object, property); + if (isPropertyExist) { + if (Array.isArray(value)) { + newObject[property] = cleanArray(value); + } else if (value && typeof value === 'object' && value.constructor === Object) { + newObject[property] = clone(value); + } else { + newObject[property] = value; + } + } + } + return newObject; + } + /** + * This method automatically checks if the prop is function or getter and behaves accordingly. + * + * @param object - The object to look up the getter function in its prototype chain. + * @param prop - The property name for which to find the getter function. + * @returns The getter function found in the prototype chain or a fallback function. + */ + function lookupGetter(object, prop) { + while (object !== null) { + const desc = getOwnPropertyDescriptor(object, prop); + if (desc) { + if (desc.get) { + return unapply(desc.get); + } + if (typeof desc.value === 'function') { + return unapply(desc.value); + } + } + object = getPrototypeOf(object); + } + function fallbackValue() { + return null; + } + return fallbackValue; + } + + const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); + const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']); + const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); + // List of SVG elements that are disallowed by default. + // We still need to know them so that we can do namespace + // checks properly in case one wants to add them to + // allow-list. + const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']); + const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']); + // Similarly to SVG, we want to know all MathML elements, + // even those that we disallow by default. + const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']); + const text$1 = freeze(['#text']); + + const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']); + const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']); + const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']); + const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']); + + // eslint-disable-next-line unicorn/better-regex + const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode + const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); + const TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm); // eslint-disable-line unicorn/better-regex + const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/); // eslint-disable-line no-useless-escape + const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape + const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape + ); + const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); + const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex + ); + const DOCTYPE_NAME = seal(/^html$/i); + const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i); + + var EXPRESSIONS = /*#__PURE__*/Object.freeze({ + __proto__: null, + ARIA_ATTR: ARIA_ATTR, + ATTR_WHITESPACE: ATTR_WHITESPACE, + CUSTOM_ELEMENT: CUSTOM_ELEMENT, + DATA_ATTR: DATA_ATTR, + DOCTYPE_NAME: DOCTYPE_NAME, + ERB_EXPR: ERB_EXPR, + IS_ALLOWED_URI: IS_ALLOWED_URI, + IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, + MUSTACHE_EXPR: MUSTACHE_EXPR, + TMPLIT_EXPR: TMPLIT_EXPR + }); + + /* eslint-disable @typescript-eslint/indent */ + // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + const NODE_TYPE = { + element: 1, + attribute: 2, + text: 3, + cdataSection: 4, + entityReference: 5, + // Deprecated + entityNode: 6, + // Deprecated + progressingInstruction: 7, + comment: 8, + document: 9, + documentType: 10, + documentFragment: 11, + notation: 12 // Deprecated + }; + const getGlobal = function getGlobal() { + return typeof window === 'undefined' ? null : window; + }; + /** + * Creates a no-op policy for internal use only. + * Don't export this function outside this module! + * @param trustedTypes The policy factory. + * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). + * @return The policy created (or null, if Trusted Types + * are not supported or creating the policy failed). + */ + const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { + if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') { + return null; + } + // Allow the callers to control the unique policy name + // by adding a data-tt-policy-suffix to the script element with the DOMPurify. + // Policy creation with duplicate names throws in Trusted Types. + let suffix = null; + const ATTR_NAME = 'data-tt-policy-suffix'; + if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { + suffix = purifyHostElement.getAttribute(ATTR_NAME); + } + const policyName = 'dompurify' + (suffix ? '#' + suffix : ''); + try { + return trustedTypes.createPolicy(policyName, { + createHTML(html) { + return html; + }, + createScriptURL(scriptUrl) { + return scriptUrl; + } + }); + } catch (_) { + // Policy creation failed (most likely another DOMPurify script has + // already run). Skip creating the policy, as this will only cause errors + // if TT are enforced. + console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); + return null; + } + }; + const _createHooksMap = function _createHooksMap() { + return { + afterSanitizeAttributes: [], + afterSanitizeElements: [], + afterSanitizeShadowDOM: [], + beforeSanitizeAttributes: [], + beforeSanitizeElements: [], + beforeSanitizeShadowDOM: [], + uponSanitizeAttribute: [], + uponSanitizeElement: [], + uponSanitizeShadowNode: [] + }; + }; + function createDOMPurify() { + let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); + const DOMPurify = root => createDOMPurify(root); + DOMPurify.version = '3.2.6'; + DOMPurify.removed = []; + if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) { + // Not running in a browser, provide a factory function + // so that you can pass your own Window + DOMPurify.isSupported = false; + return DOMPurify; + } + let { + document + } = window; + const originalDocument = document; + const currentScript = originalDocument.currentScript; + const { + DocumentFragment, + HTMLTemplateElement, + Node, + Element, + NodeFilter, + NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap, + HTMLFormElement, + DOMParser, + trustedTypes + } = window; + const ElementPrototype = Element.prototype; + const cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); + const remove = lookupGetter(ElementPrototype, 'remove'); + const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); + const getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); + const getParentNode = lookupGetter(ElementPrototype, 'parentNode'); + // As per issue #47, the web-components registry is inherited by a + // new document created via createHTMLDocument. As per the spec + // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) + // a new empty registry is used when creating a template contents owner + // document, so we use that as our parent document to ensure nothing + // is inherited. + if (typeof HTMLTemplateElement === 'function') { + const template = document.createElement('template'); + if (template.content && template.content.ownerDocument) { + document = template.content.ownerDocument; + } + } + let trustedTypesPolicy; + let emptyHTML = ''; + const { + implementation, + createNodeIterator, + createDocumentFragment, + getElementsByTagName + } = document; + const { + importNode + } = originalDocument; + let hooks = _createHooksMap(); + /** + * Expose whether this browser supports running the full DOMPurify. + */ + DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined; + const { + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR, + DATA_ATTR, + ARIA_ATTR, + IS_SCRIPT_OR_DATA, + ATTR_WHITESPACE, + CUSTOM_ELEMENT + } = EXPRESSIONS; + let { + IS_ALLOWED_URI: IS_ALLOWED_URI$1 + } = EXPRESSIONS; + /** + * We consider the elements and attributes below to be safe. Ideally + * don't add any new ones but feel free to remove unwanted ones. + */ + /* allowed element names */ + let ALLOWED_TAGS = null; + const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text$1]); + /* Allowed attribute names */ + let ALLOWED_ATTR = null; + const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]); + /* + * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements. + * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) + * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) + * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. + */ + let CUSTOM_ELEMENT_HANDLING = Object.seal(create$1(null, { + tagNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + attributeNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + allowCustomizedBuiltInElements: { + writable: true, + configurable: false, + enumerable: true, + value: false + } + })); + /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ + let FORBID_TAGS = null; + /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ + let FORBID_ATTR = null; + /* Decide if ARIA attributes are okay */ + let ALLOW_ARIA_ATTR = true; + /* Decide if custom data attributes are okay */ + let ALLOW_DATA_ATTR = true; + /* Decide if unknown protocols are okay */ + let ALLOW_UNKNOWN_PROTOCOLS = false; + /* Decide if self-closing tags in attributes are allowed. + * Usually removed due to a mXSS issue in jQuery 3.0 */ + let ALLOW_SELF_CLOSE_IN_ATTR = true; + /* Output should be safe for common template engines. + * This means, DOMPurify removes data attributes, mustaches and ERB + */ + let SAFE_FOR_TEMPLATES = false; + /* Output should be safe even for XML used within HTML and alike. + * This means, DOMPurify removes comments when containing risky content. + */ + let SAFE_FOR_XML = true; + /* Decide if document with ... should be returned */ + let WHOLE_DOCUMENT = false; + /* Track whether config is already set on this instance of DOMPurify. */ + let SET_CONFIG = false; + /* Decide if all elements (e.g. style, script) must be children of + * document.body. By default, browsers might move them to document.head */ + let FORCE_BODY = false; + /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported). + * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead + */ + let RETURN_DOM = false; + /* Decide if a DOM `DocumentFragment` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported) */ + let RETURN_DOM_FRAGMENT = false; + /* Try to return a Trusted Type object instead of a string, return a string in + * case Trusted Types are not supported */ + let RETURN_TRUSTED_TYPE = false; + /* Output should be free from DOM clobbering attacks? + * This sanitizes markups named with colliding, clobberable built-in DOM APIs. + */ + let SANITIZE_DOM = true; + /* Achieve full DOM Clobbering protection by isolating the namespace of named + * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. + * + * HTML/DOM spec rules that enable DOM Clobbering: + * - Named Access on Window (§7.3.3) + * - DOM Tree Accessors (§3.1.5) + * - Form Element Parent-Child Relations (§4.10.3) + * - Iframe srcdoc / Nested WindowProxies (§4.8.5) + * - HTMLCollection (§4.2.10.2) + * + * Namespace isolation is implemented by prefixing `id` and `name` attributes + * with a constant string, i.e., `user-content-` + */ + let SANITIZE_NAMED_PROPS = false; + const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-'; + /* Keep element content when removing element? */ + let KEEP_CONTENT = true; + /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead + * of importing it into a new Document and returning a sanitized copy */ + let IN_PLACE = false; + /* Allow usage of profiles like html, svg and mathMl */ + let USE_PROFILES = {}; + /* Tags to ignore content of when KEEP_CONTENT is true */ + let FORBID_CONTENTS = null; + const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']); + /* Tags that are safe for data: URIs */ + let DATA_URI_TAGS = null; + const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']); + /* Attributes safe for values like "javascript:" */ + let URI_SAFE_ATTRIBUTES = null; + const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']); + const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; + const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; + const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; + /* Document namespace */ + let NAMESPACE = HTML_NAMESPACE; + let IS_EMPTY_INPUT = false; + /* Allowed XHTML+XML namespaces */ + let ALLOWED_NAMESPACES = null; + const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString); + let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']); + let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']); + // Certain elements are allowed in both SVG and HTML + // namespace. We need to specify them explicitly + // so that they don't get erroneously deleted from + // HTML namespace. + const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']); + /* Parsing of strict XHTML documents */ + let PARSER_MEDIA_TYPE = null; + const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html']; + const DEFAULT_PARSER_MEDIA_TYPE = 'text/html'; + let transformCaseFunc = null; + /* Keep a reference to config to pass to hooks */ + let CONFIG = null; + /* Ideally, do not touch anything below this line */ + /* ______________________________________________ */ + const formElement = document.createElement('form'); + const isRegexOrFunction = function isRegexOrFunction(testValue) { + return testValue instanceof RegExp || testValue instanceof Function; + }; + /** + * _parseConfig + * + * @param cfg optional config literal + */ + // eslint-disable-next-line complexity + const _parseConfig = function _parseConfig() { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (CONFIG && CONFIG === cfg) { + return; + } + /* Shield configuration object from tampering */ + if (!cfg || typeof cfg !== 'object') { + cfg = {}; + } + /* Shield configuration object from prototype pollution */ + cfg = clone(cfg); + PARSER_MEDIA_TYPE = + // eslint-disable-next-line unicorn/prefer-includes + SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE; + // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. + transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase; + /* Set configuration parameters */ + ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS; + ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR; + ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES; + URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES; + DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS; + FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; + FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({}); + FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({}); + USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false; + ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true + ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true + ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false + ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true + SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false + SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true + WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false + RETURN_DOM = cfg.RETURN_DOM || false; // Default false + RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false + RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false + FORCE_BODY = cfg.FORCE_BODY || false; // Default false + SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true + SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false + KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true + IN_PLACE = cfg.IN_PLACE || false; // Default false + IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; + NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; + MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS; + HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS; + CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { + CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { + CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') { + CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; + } + if (SAFE_FOR_TEMPLATES) { + ALLOW_DATA_ATTR = false; + } + if (RETURN_DOM_FRAGMENT) { + RETURN_DOM = true; + } + /* Parse profile info */ + if (USE_PROFILES) { + ALLOWED_TAGS = addToSet({}, text$1); + ALLOWED_ATTR = []; + if (USE_PROFILES.html === true) { + addToSet(ALLOWED_TAGS, html$1); + addToSet(ALLOWED_ATTR, html); + } + if (USE_PROFILES.svg === true) { + addToSet(ALLOWED_TAGS, svg$1); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.svgFilters === true) { + addToSet(ALLOWED_TAGS, svgFilters); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.mathMl === true) { + addToSet(ALLOWED_TAGS, mathMl$1); + addToSet(ALLOWED_ATTR, mathMl); + addToSet(ALLOWED_ATTR, xml); + } + } + /* Merge configuration parameters */ + if (cfg.ADD_TAGS) { + if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { + ALLOWED_TAGS = clone(ALLOWED_TAGS); + } + addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); + } + if (cfg.ADD_ATTR) { + if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { + ALLOWED_ATTR = clone(ALLOWED_ATTR); + } + addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); + } + if (cfg.ADD_URI_SAFE_ATTR) { + addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); + } + if (cfg.FORBID_CONTENTS) { + if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { + FORBID_CONTENTS = clone(FORBID_CONTENTS); + } + addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); + } + /* Add #text in case KEEP_CONTENT is set to true */ + if (KEEP_CONTENT) { + ALLOWED_TAGS['#text'] = true; + } + /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ + if (WHOLE_DOCUMENT) { + addToSet(ALLOWED_TAGS, ['html', 'head', 'body']); + } + /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ + if (ALLOWED_TAGS.table) { + addToSet(ALLOWED_TAGS, ['tbody']); + delete FORBID_TAGS.tbody; + } + if (cfg.TRUSTED_TYPES_POLICY) { + if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); + } + if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); + } + // Overwrite existing TrustedTypes policy. + trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; + // Sign local variables required by `sanitize`. + emptyHTML = trustedTypesPolicy.createHTML(''); + } else { + // Uninitialized policy, attempt to initialize the internal dompurify policy. + if (trustedTypesPolicy === undefined) { + trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); + } + // If creating the internal policy succeeded sign internal variables. + if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') { + emptyHTML = trustedTypesPolicy.createHTML(''); + } + } + // Prevent further manipulation of configuration. + // Not available in IE8, Safari 5, etc. + if (freeze) { + freeze(cfg); + } + CONFIG = cfg; + }; + /* Keep track of all possible SVG and MathML tags + * so that we can perform the namespace checks + * correctly. */ + const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]); + const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]); + /** + * @param element a DOM element whose namespace is being checked + * @returns Return false if the element has a + * namespace that a spec-compliant parser would never + * return. Return true otherwise. + */ + const _checkValidNamespace = function _checkValidNamespace(element) { + let parent = getParentNode(element); + // In JSDOM, if we're inside shadow DOM, then parentNode + // can be null. We just simulate parent in this case. + if (!parent || !parent.tagName) { + parent = { + namespaceURI: NAMESPACE, + tagName: 'template' + }; + } + const tagName = stringToLowerCase(element.tagName); + const parentTagName = stringToLowerCase(parent.tagName); + if (!ALLOWED_NAMESPACES[element.namespaceURI]) { + return false; + } + if (element.namespaceURI === SVG_NAMESPACE) { + // The only way to switch from HTML namespace to SVG + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'svg'; + } + // The only way to switch from MathML to SVG is via` + // svg if parent is either or MathML + // text integration points. + if (parent.namespaceURI === MATHML_NAMESPACE) { + return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); + } + // We only allow elements that are defined in SVG + // spec. All others are disallowed in SVG namespace. + return Boolean(ALL_SVG_TAGS[tagName]); + } + if (element.namespaceURI === MATHML_NAMESPACE) { + // The only way to switch from HTML namespace to MathML + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'math'; + } + // The only way to switch from SVG to MathML is via + // and HTML integration points + if (parent.namespaceURI === SVG_NAMESPACE) { + return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; + } + // We only allow elements that are defined in MathML + // spec. All others are disallowed in MathML namespace. + return Boolean(ALL_MATHML_TAGS[tagName]); + } + if (element.namespaceURI === HTML_NAMESPACE) { + // The only way to switch from SVG to HTML is via + // HTML integration points, and from MathML to HTML + // is via MathML text integration points + if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { + return false; + } + if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { + return false; + } + // We disallow tags that are specific for MathML + // or SVG and should never appear in HTML namespace + return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); + } + // For XHTML and XML documents that support custom namespaces + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) { + return true; + } + // The code should never reach this place (this means + // that the element somehow got namespace that is not + // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). + // Return false just in case. + return false; + }; + /** + * _forceRemove + * + * @param node a DOM node + */ + const _forceRemove = function _forceRemove(node) { + arrayPush(DOMPurify.removed, { + element: node + }); + try { + // eslint-disable-next-line unicorn/prefer-dom-node-remove + getParentNode(node).removeChild(node); + } catch (_) { + remove(node); + } + }; + /** + * _removeAttribute + * + * @param name an Attribute name + * @param element a DOM node + */ + const _removeAttribute = function _removeAttribute(name, element) { + try { + arrayPush(DOMPurify.removed, { + attribute: element.getAttributeNode(name), + from: element + }); + } catch (_) { + arrayPush(DOMPurify.removed, { + attribute: null, + from: element + }); + } + element.removeAttribute(name); + // We void attribute values for unremovable "is" attributes + if (name === 'is') { + if (RETURN_DOM || RETURN_DOM_FRAGMENT) { + try { + _forceRemove(element); + } catch (_) {} + } else { + try { + element.setAttribute(name, ''); + } catch (_) {} + } + } + }; + /** + * _initDocument + * + * @param dirty - a string of dirty markup + * @return a DOM, filled with the dirty markup + */ + const _initDocument = function _initDocument(dirty) { + /* Create a HTML document */ + let doc = null; + let leadingWhitespace = null; + if (FORCE_BODY) { + dirty = '' + dirty; + } else { + /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ + const matches = stringMatch(dirty, /^[\r\n\t ]+/); + leadingWhitespace = matches && matches[0]; + } + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) { + // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) + dirty = '' + dirty + ''; + } + const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; + /* + * Use the DOMParser API by default, fallback later if needs be + * DOMParser not work for svg when has multiple root element. + */ + if (NAMESPACE === HTML_NAMESPACE) { + try { + doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); + } catch (_) {} + } + /* Use createHTMLDocument in case DOMParser is not available */ + if (!doc || !doc.documentElement) { + doc = implementation.createDocument(NAMESPACE, 'template', null); + try { + doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; + } catch (_) { + // Syntax error if dirtyPayload is invalid xml + } + } + const body = doc.body || doc.documentElement; + if (dirty && leadingWhitespace) { + body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); + } + /* Work on whole document or just its body */ + if (NAMESPACE === HTML_NAMESPACE) { + return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; + } + return WHOLE_DOCUMENT ? doc.documentElement : body; + }; + /** + * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. + * + * @param root The root element or node to start traversing on. + * @return The created NodeIterator + */ + const _createNodeIterator = function _createNodeIterator(root) { + return createNodeIterator.call(root.ownerDocument || root, root, + // eslint-disable-next-line no-bitwise + NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null); + }; + /** + * _isClobbered + * + * @param element element to check for clobbering attacks + * @return true if clobbered, false if safe + */ + const _isClobbered = function _isClobbered(element) { + return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function'); + }; + /** + * Checks whether the given object is a DOM node. + * + * @param value object to check whether it's a DOM node + * @return true is object is a DOM node + */ + const _isNode = function _isNode(value) { + return typeof Node === 'function' && value instanceof Node; + }; + function _executeHooks(hooks, currentNode, data) { + arrayForEach(hooks, hook => { + hook.call(DOMPurify, currentNode, data, CONFIG); + }); + } + /** + * _sanitizeElements + * + * @protect nodeName + * @protect textContent + * @protect removeChild + * @param currentNode to check for permission to exist + * @return true if node was killed, false if left alive + */ + const _sanitizeElements = function _sanitizeElements(currentNode) { + let content = null; + /* Execute a hook if present */ + _executeHooks(hooks.beforeSanitizeElements, currentNode, null); + /* Check if element is clobbered or can clobber */ + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Now let's check the element's type and name */ + const tagName = transformCaseFunc(currentNode.nodeName); + /* Execute a hook if present */ + _executeHooks(hooks.uponSanitizeElement, currentNode, { + tagName, + allowedTags: ALLOWED_TAGS + }); + /* Detect mXSS attempts abusing namespace confusion */ + if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) { + _forceRemove(currentNode); + return true; + } + /* Remove any occurrence of processing instructions */ + if (currentNode.nodeType === NODE_TYPE.progressingInstruction) { + _forceRemove(currentNode); + return true; + } + /* Remove any kind of possibly harmful comments */ + if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) { + _forceRemove(currentNode); + return true; + } + /* Remove element if anything forbids its presence */ + if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + /* Check if we have a custom element to handle */ + if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) { + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) { + return false; + } + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) { + return false; + } + } + /* Keep content except for bad-listed elements */ + if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { + const parentNode = getParentNode(currentNode) || currentNode.parentNode; + const childNodes = getChildNodes(currentNode) || currentNode.childNodes; + if (childNodes && parentNode) { + const childCount = childNodes.length; + for (let i = childCount - 1; i >= 0; --i) { + const childClone = cloneNode(childNodes[i], true); + childClone.__removalCount = (currentNode.__removalCount || 0) + 1; + parentNode.insertBefore(childClone, getNextSibling(currentNode)); + } + } + } + _forceRemove(currentNode); + return true; + } + /* Check whether element has a valid namespace */ + if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Make sure that older browsers don't get fallback-tag mXSS */ + if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) { + _forceRemove(currentNode); + return true; + } + /* Sanitize element content to be template-safe */ + if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) { + /* Get the element's text content */ + content = currentNode.textContent; + arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { + content = stringReplace(content, expr, ' '); + }); + if (currentNode.textContent !== content) { + arrayPush(DOMPurify.removed, { + element: currentNode.cloneNode() + }); + currentNode.textContent = content; + } + } + /* Execute a hook if present */ + _executeHooks(hooks.afterSanitizeElements, currentNode, null); + return false; + }; + /** + * _isValidAttribute + * + * @param lcTag Lowercase tag name of containing element. + * @param lcName Lowercase attribute name. + * @param value Attribute value. + * @return Returns true if `value` is valid, otherwise false. + */ + // eslint-disable-next-line complexity + const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { + /* Make sure attribute cannot clobber */ + if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) { + return false; + } + /* Allow valid data-* attributes: At least one character after "-" + (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) + XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) + We don't need to check the value; it's always URI safe. */ + if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { + if ( + // First condition does a very basic check if a) it's basically a valid custom element tagname AND + // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck + _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || + // Alternative, second condition checks if it's an `is`-attribute, AND + // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else { + return false; + } + /* Check value is safe. First, is attr inert? If so, is safe */ + } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) { + return false; + } else ; + return true; + }; + /** + * _isBasicCustomElement + * checks if at least one dash is included in tagName, and it's not the first char + * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name + * + * @param tagName name of the tag of the node to sanitize + * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false. + */ + const _isBasicCustomElement = function _isBasicCustomElement(tagName) { + return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT); + }; + /** + * _sanitizeAttributes + * + * @protect attributes + * @protect nodeName + * @protect removeAttribute + * @protect setAttribute + * + * @param currentNode to sanitize + */ + const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { + /* Execute a hook if present */ + _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null); + const { + attributes + } = currentNode; + /* Check if we have attributes; if not we might have a text node */ + if (!attributes || _isClobbered(currentNode)) { + return; + } + const hookEvent = { + attrName: '', + attrValue: '', + keepAttr: true, + allowedAttributes: ALLOWED_ATTR, + forceKeepAttr: undefined + }; + let l = attributes.length; + /* Go backwards over all attributes; safely remove bad ones */ + while (l--) { + const attr = attributes[l]; + const { + name, + namespaceURI, + value: attrValue + } = attr; + const lcName = transformCaseFunc(name); + const initValue = attrValue; + let value = name === 'value' ? initValue : stringTrim(initValue); + /* Execute a hook if present */ + hookEvent.attrName = lcName; + hookEvent.attrValue = value; + hookEvent.keepAttr = true; + hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set + _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent); + value = hookEvent.attrValue; + /* Full DOM Clobbering protection via namespace isolation, + * Prefix id and name attributes with `user-content-` + */ + if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) { + // Remove the attribute with this value + _removeAttribute(name, currentNode); + // Prefix the value and later re-create the attribute with the sanitized value + value = SANITIZE_NAMED_PROPS_PREFIX + value; + } + /* Work around a security issue with comments inside attributes */ + if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Did the hooks approve of the attribute? */ + if (hookEvent.forceKeepAttr) { + continue; + } + /* Did the hooks approve of the attribute? */ + if (!hookEvent.keepAttr) { + _removeAttribute(name, currentNode); + continue; + } + /* Work around a security issue in jQuery 3.0 */ + if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Sanitize attribute content to be template-safe */ + if (SAFE_FOR_TEMPLATES) { + arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { + value = stringReplace(value, expr, ' '); + }); + } + /* Is `value` valid for this attribute? */ + const lcTag = transformCaseFunc(currentNode.nodeName); + if (!_isValidAttribute(lcTag, lcName, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Handle attributes that require Trusted Types */ + if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') { + if (namespaceURI) ; else { + switch (trustedTypes.getAttributeType(lcTag, lcName)) { + case 'TrustedHTML': + { + value = trustedTypesPolicy.createHTML(value); + break; + } + case 'TrustedScriptURL': + { + value = trustedTypesPolicy.createScriptURL(value); + break; + } + } + } + } + /* Handle invalid data-* attribute set by try-catching it */ + if (value !== initValue) { + try { + if (namespaceURI) { + currentNode.setAttributeNS(namespaceURI, name, value); + } else { + /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ + currentNode.setAttribute(name, value); + } + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + } else { + arrayPop(DOMPurify.removed); + } + } catch (_) { + _removeAttribute(name, currentNode); + } + } + } + /* Execute a hook if present */ + _executeHooks(hooks.afterSanitizeAttributes, currentNode, null); + }; + /** + * _sanitizeShadowDOM + * + * @param fragment to iterate over recursively + */ + const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { + let shadowNode = null; + const shadowIterator = _createNodeIterator(fragment); + /* Execute a hook if present */ + _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null); + while (shadowNode = shadowIterator.nextNode()) { + /* Execute a hook if present */ + _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null); + /* Sanitize tags and elements */ + _sanitizeElements(shadowNode); + /* Check attributes next */ + _sanitizeAttributes(shadowNode); + /* Deep shadow DOM detected */ + if (shadowNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(shadowNode.content); + } + } + /* Execute a hook if present */ + _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null); + }; + // eslint-disable-next-line complexity + DOMPurify.sanitize = function (dirty) { + let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + let body = null; + let importedNode = null; + let currentNode = null; + let returnNode = null; + /* Make sure we have a string to sanitize. + DO NOT return early, as this will return the wrong type if + the user has requested a DOM object rather than a string */ + IS_EMPTY_INPUT = !dirty; + if (IS_EMPTY_INPUT) { + dirty = ''; + } + /* Stringify, in case dirty is an object */ + if (typeof dirty !== 'string' && !_isNode(dirty)) { + if (typeof dirty.toString === 'function') { + dirty = dirty.toString(); + if (typeof dirty !== 'string') { + throw typeErrorCreate('dirty is not a string, aborting'); + } + } else { + throw typeErrorCreate('toString is not a function'); + } + } + /* Return dirty HTML if DOMPurify cannot run */ + if (!DOMPurify.isSupported) { + return dirty; + } + /* Assign config vars */ + if (!SET_CONFIG) { + _parseConfig(cfg); + } + /* Clean up removed elements */ + DOMPurify.removed = []; + /* Check if dirty is correctly typed for IN_PLACE */ + if (typeof dirty === 'string') { + IN_PLACE = false; + } + if (IN_PLACE) { + /* Do some early pre-sanitization to avoid unsafe root nodes */ + if (dirty.nodeName) { + const tagName = transformCaseFunc(dirty.nodeName); + if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place'); + } + } + } else if (dirty instanceof Node) { + /* If dirty is a DOM element, append to an empty document to avoid + elements being stripped by the parser */ + body = _initDocument(''); + importedNode = body.ownerDocument.importNode(dirty, true); + if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') { + /* Node is already a body, use as is */ + body = importedNode; + } else if (importedNode.nodeName === 'HTML') { + body = importedNode; + } else { + // eslint-disable-next-line unicorn/prefer-dom-node-append + body.appendChild(importedNode); + } + } else { + /* Exit directly if we have nothing to do */ + if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && + // eslint-disable-next-line unicorn/prefer-includes + dirty.indexOf('<') === -1) { + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; + } + /* Initialize the document to work on */ + body = _initDocument(dirty); + /* Check we have a DOM node from the data */ + if (!body) { + return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ''; + } + } + /* Remove first element node (ours) if FORCE_BODY is set */ + if (body && FORCE_BODY) { + _forceRemove(body.firstChild); + } + /* Get node iterator */ + const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); + /* Now start iterating over the created document */ + while (currentNode = nodeIterator.nextNode()) { + /* Sanitize tags and elements */ + _sanitizeElements(currentNode); + /* Check attributes next */ + _sanitizeAttributes(currentNode); + /* Shadow DOM detected, sanitize it */ + if (currentNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(currentNode.content); + } + } + /* If we sanitized `dirty` in-place, return it. */ + if (IN_PLACE) { + return dirty; + } + /* Return sanitized string or DOM */ + if (RETURN_DOM) { + if (RETURN_DOM_FRAGMENT) { + returnNode = createDocumentFragment.call(body.ownerDocument); + while (body.firstChild) { + // eslint-disable-next-line unicorn/prefer-dom-node-append + returnNode.appendChild(body.firstChild); + } + } else { + returnNode = body; + } + if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { + /* + AdoptNode() is not used because internal state is not reset + (e.g. the past names map of a HTMLFormElement), this is safe + in theory but we would rather not risk another attack vector. + The state that is cloned by importNode() is explicitly defined + by the specs. + */ + returnNode = importNode.call(originalDocument, returnNode, true); + } + return returnNode; + } + let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; + /* Serialize doctype if allowed */ + if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) { + serializedHTML = '\n' + serializedHTML; + } + /* Sanitize final string template-safe */ + if (SAFE_FOR_TEMPLATES) { + arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => { + serializedHTML = stringReplace(serializedHTML, expr, ' '); + }); + } + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML; + }; + DOMPurify.setConfig = function () { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _parseConfig(cfg); + SET_CONFIG = true; + }; + DOMPurify.clearConfig = function () { + CONFIG = null; + SET_CONFIG = false; + }; + DOMPurify.isValidAttribute = function (tag, attr, value) { + /* Initialize shared config vars if necessary. */ + if (!CONFIG) { + _parseConfig({}); + } + const lcTag = transformCaseFunc(tag); + const lcName = transformCaseFunc(attr); + return _isValidAttribute(lcTag, lcName, value); + }; + DOMPurify.addHook = function (entryPoint, hookFunction) { + if (typeof hookFunction !== 'function') { + return; + } + arrayPush(hooks[entryPoint], hookFunction); + }; + DOMPurify.removeHook = function (entryPoint, hookFunction) { + if (hookFunction !== undefined) { + const index = arrayLastIndexOf(hooks[entryPoint], hookFunction); + return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0]; + } + return arrayPop(hooks[entryPoint]); + }; + DOMPurify.removeHooks = function (entryPoint) { + hooks[entryPoint] = []; + }; + DOMPurify.removeAllHooks = function () { + hooks = _createHooksMap(); + }; + return DOMPurify; + } + var purify = createDOMPurify(); + + const sanitizeHtmlString = (html) => purify().sanitize(html); + + var global$6 = tinymce.util.Tools.resolve('tinymce.util.I18n'); + + // Icons that need to be transformed in RTL + const rtlTransform = { + 'indent': true, + 'outdent': true, + 'table-insert-column-after': true, + 'table-insert-column-before': true, + 'paste-column-after': true, + 'paste-column-before': true, + 'unordered-list': true, + 'list-bull-circle': true, + 'list-bull-disc': true, + 'list-bull-default': true, + 'list-bull-square': true + }; + const defaultIconName = 'temporary-placeholder'; + const defaultIcon = (icons) => () => get$h(icons, defaultIconName).getOr('!not found!'); + const getIconName = (name, icons) => { + const lcName = name.toLowerCase(); + // If in rtl mode then try to see if we have a rtl icon to use instead + if (global$6.isRtl()) { + const rtlName = ensureTrailing(lcName, '-rtl'); + return has$2(icons, rtlName) ? rtlName : lcName; + } + else { + return lcName; + } + }; + const lookupIcon = (name, icons) => get$h(icons, getIconName(name, icons)); + const get = (name, iconProvider) => { + const icons = iconProvider(); + return lookupIcon(name, icons).getOrThunk(defaultIcon(icons)); + }; + const getOr = (name, iconProvider, fallbackIcon) => { + const icons = iconProvider(); + return lookupIcon(name, icons).or(fallbackIcon).getOrThunk(defaultIcon(icons)); + }; + const needsRtlTransform = (iconName) => global$6.isRtl() ? has$2(rtlTransform, iconName) : false; + const addFocusableBehaviour = () => config('add-focusable', [ + runOnAttached((comp) => { + // set focusable=false on SVGs to prevent focusing the toolbar when tabbing into the editor + child(comp.element, 'svg').each((svg) => set$9(svg, 'focusable', 'false')); + }) + ]); + const renderIcon$3 = (spec, iconName, icons, fallbackIcon) => { + // If RTL, add the flip icon class if the icon doesn't have a `-rtl` icon available. + const rtlIconClasses = needsRtlTransform(iconName) ? ['tox-icon--flip'] : []; + const iconHtml = get$h(icons, getIconName(iconName, icons)).or(fallbackIcon).getOrThunk(defaultIcon(icons)); + return { + dom: { + tag: spec.tag, + attributes: spec.attributes ?? {}, + classes: spec.classes.concat(rtlIconClasses), + innerHtml: iconHtml + }, + behaviours: derive$1([ + ...spec.behaviours ?? [], + addFocusableBehaviour() + ]), + eventOrder: spec.eventOrder ?? {} + }; + }; + const render$4 = (iconName, spec, iconProvider, fallbackIcon = Optional.none()) => renderIcon$3(spec, iconName, iconProvider(), fallbackIcon); + const renderFirst = (iconNames, spec, iconProvider) => { + const icons = iconProvider(); + const iconName = find$5(iconNames, (name) => has$2(icons, getIconName(name, icons))); + return renderIcon$3(spec, iconName.getOr(defaultIconName), icons, Optional.none()); + }; + + const notificationIconMap = { + success: 'checkmark', + error: 'warning', + err: 'error', + warning: 'warning', + warn: 'warning', + info: 'info' + }; + const factory$4 = (detail) => { + // For using the alert banner as a standalone banner + const notificationTextId = generate$6('notification-text'); + const memBannerText = record({ + dom: fromHtml(`

${sanitizeHtmlString(detail.backstageProvider.translate(detail.text))}

`), + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + const renderPercentBar = (percent) => ({ + dom: { + tag: 'div', + classes: ['tox-bar'], + styles: { + width: `${percent}%` + } + } + }); + const renderPercentText = (percent) => ({ + dom: { + tag: 'div', + classes: ['tox-text'], + innerHtml: `${percent}%` + } + }); + const memBannerProgress = record({ + dom: { + tag: 'div', + classes: detail.progress ? ['tox-progress-bar', 'tox-progress-indicator'] : ['tox-progress-bar'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-bar-container'] + }, + components: [ + renderPercentBar(0) + ] + }, + renderPercentText(0) + ], + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + const updateProgress = (comp, percent) => { + if (comp.getSystem().isConnected()) { + memBannerProgress.getOpt(comp).each((progress) => { + Replacing.set(progress, [ + { + dom: { + tag: 'div', + classes: ['tox-bar-container'] + }, + components: [ + renderPercentBar(percent) + ] + }, + renderPercentText(percent) + ]); + }); + } + }; + const updateText = (comp, text) => { + if (comp.getSystem().isConnected()) { + const banner = memBannerText.get(comp); + Replacing.set(banner, [ + text$2(text) + ]); + } + }; + const apis = { + updateProgress, + updateText + }; + const iconChoices = flatten([ + detail.icon.toArray(), + [detail.level], + Optional.from(notificationIconMap[detail.level]).toArray() + ]); + const memButton = record(Button.sketch({ + dom: { + tag: 'button', + classes: ['tox-notification__dismiss', 'tox-button', 'tox-button--naked', 'tox-button--icon'], + attributes: { + 'aria-label': detail.backstageProvider.translate('Close') + } + }, + components: [ + render$4('close', { + tag: 'span', + classes: ['tox-icon'], + }, detail.iconProvider) + ], + buttonBehaviours: derive$1([ + Tabstopping.config({}), + Tooltipping.config({ + ...detail.backstageProvider.tooltips.getConfig({ + tooltipText: detail.backstageProvider.translate('Close') + }) + }) + ]), + action: (comp) => { + detail.onAction(comp); + } + })); + const notificationIconSpec = renderFirst(iconChoices, { tag: 'div', classes: ['tox-notification__icon'] }, detail.iconProvider); + const notificationBodySpec = { + dom: { + tag: 'div', + classes: ['tox-notification__body'] + }, + components: [ + memBannerText.asSpec() + ], + behaviours: derive$1([ + Replacing.config({}) + ]) + }; + const components = [notificationIconSpec, notificationBodySpec]; + return { + uid: detail.uid, + dom: { + tag: 'div', + attributes: { + 'role': 'alert', + 'aria-labelledby': notificationTextId + }, + classes: ['tox-notification', 'tox-notification--in', `tox-notification--${detail.level}`], + }, + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}), + Keying.config({ + mode: 'special', + onEscape: (comp) => { + detail.onAction(comp); + return Optional.some(true); + } + }) + ]), + components: components + .concat(detail.progress ? [memBannerProgress.asSpec()] : []) + .concat([memButton.asSpec()]), + apis + }; + }; + const Notification = single({ + name: 'Notification', + factory: factory$4, + configFields: [ + defaultedStringEnum('level', 'info', ['success', 'error', 'warning', 'warn', 'info']), + required$1('progress'), + option$3('icon'), + required$1('onAction'), + required$1('text'), + required$1('iconProvider'), + required$1('backstageProvider'), + ], + apis: { + updateProgress: (apis, comp, percent) => { + apis.updateProgress(comp, percent); + }, + updateText: (apis, comp, text) => { + apis.updateText(comp, text); + } + } + }); + + var NotificationManagerImpl = (editor, extras, uiMothership, notificationRegion) => { + const sharedBackstage = extras.backstage.shared; + const getBoundsContainer = () => SugarElement.fromDom(editor.queryCommandValue('ToggleView') === '' ? editor.getContentAreaContainer() : editor.getContainer()); + const getBounds = () => { + const contentArea = box$1(getBoundsContainer()); + return Optional.some(contentArea); + }; + const clampComponentsToBounds = (components) => { + getBounds().each((bounds) => { + each$1(components, (comp) => { + remove$6(comp.element, 'width'); + if (get$c(comp.element) > bounds.width) { + set$7(comp.element, 'width', bounds.width + 'px'); + } + }); + }); + }; + const open = (settings, closeCallback, isEditorOrUIFocused) => { + const close = () => { + const removeNotificationAndReposition = (region) => { + Replacing.remove(region, notification); + reposition(); + }; + const manageRegionVisibility = (region, editorOrUiFocused) => { + if (children(region.element).length === 0) { + handleEmptyRegion(region, editorOrUiFocused); + } + else { + handleRegionWithChildren(region, editorOrUiFocused); + } + }; + const handleEmptyRegion = (region, editorOrUIFocused) => { + InlineView.hide(region); + notificationRegion.clear(); + if (editorOrUIFocused) { + editor.focus(); + } + }; + const handleRegionWithChildren = (region, editorOrUIFocused) => { + if (editorOrUIFocused) { + Keying.focusIn(region); + } + }; + notificationRegion.on((region) => { + closeCallback(); + const editorOrUIFocused = isEditorOrUIFocused(); + removeNotificationAndReposition(region); + manageRegionVisibility(region, editorOrUIFocused); + }); + }; + const shouldApplyDocking = () => !isStickyToolbar(editor) || !sharedBackstage.header.isPositionedAtTop(); + const notification = build$1(Notification.sketch({ + text: settings.text, + level: contains$2(['success', 'error', 'warning', 'warn', 'info'], settings.type) ? settings.type : undefined, + progress: settings.progressBar === true, + icon: settings.icon, + onAction: close, + iconProvider: sharedBackstage.providers.icons, + backstageProvider: sharedBackstage.providers, + })); + if (!notificationRegion.isSet()) { + const notificationWrapper = build$1(InlineView.sketch({ + dom: { + tag: 'div', + classes: ['tox-notifications-container'], + attributes: { + 'aria-label': 'Notifications', + 'role': 'region' + } + }, + lazySink: sharedBackstage.getSink, + fireDismissalEventInstead: {}, + ...sharedBackstage.header.isPositionedAtTop() ? {} : { fireRepositionEventInstead: {} }, + inlineBehaviours: derive$1([ + Keying.config({ + mode: 'cyclic', + selector: '.tox-notification, .tox-notification a, .tox-notification button', + }), + Replacing.config({}), + ...(shouldApplyDocking() + ? [ + Docking.config({ + contextual: { + lazyContext: () => Optional.some(box$1(getBoundsContainer())), + fadeInClass: 'tox-notification-container-dock-fadein', + fadeOutClass: 'tox-notification-container-dock-fadeout', + transitionClass: 'tox-notification-container-dock-transition' + }, + modes: ['top'], + lazyViewport: (comp) => { + const optScrollingContext = detectWhenSplitUiMode(editor, comp.element); + return optScrollingContext + .map((sc) => { + const combinedBounds = getBoundsFrom(sc); + return { + bounds: combinedBounds, + optScrollEnv: Optional.some({ + currentScrollTop: sc.element.dom.scrollTop, + scrollElmTop: absolute$3(sc.element).top + }) + }; + }).getOrThunk(() => ({ + bounds: win(), + optScrollEnv: Optional.none() + })); + } + }) + ] : []) + ]) + })); + const notificationSpec = premade(notification); + const anchorOverrides = { + maxHeightFunction: expandable$1() + }; + const anchor = { + ...sharedBackstage.anchors.banner(), + overrides: anchorOverrides + }; + notificationRegion.set(notificationWrapper); + uiMothership.add(notificationWrapper); + InlineView.showWithinBounds(notificationWrapper, notificationSpec, { anchor }, getBounds); + } + else { + const notificationSpec = premade(notification); + notificationRegion.on((notificationWrapper) => { + Replacing.append(notificationWrapper, notificationSpec); + InlineView.reposition(notificationWrapper); + if (notification.hasConfigured(Docking)) { + Docking.refresh(notificationWrapper); + } + clampComponentsToBounds(notificationWrapper.components()); + }); + } + if (isNumber(settings.timeout) && settings.timeout > 0) { + global$a.setEditorTimeout(editor, () => { + close(); + }, settings.timeout); + } + const reposition = () => { + notificationRegion.on((region) => { + InlineView.reposition(region); + if (region.hasConfigured(Docking)) { + Docking.refresh(region); + } + clampComponentsToBounds(region.components()); + }); + }; + const thisNotification = { + close, + reposition, + text: (nuText) => { + // check if component is still mounted + Notification.updateText(notification, nuText); + }, + settings, + getEl: () => notification.element.dom, + progressBar: { + value: (percent) => { + Notification.updateProgress(notification, percent); + } + } + }; + return thisNotification; + }; + const close = (notification) => { + notification.close(); + }; + const getArgs = (notification) => { + return notification.settings; + }; + return { + open, + close, + getArgs + }; + }; + + const setup$c = (api, editor) => { + const redirectKeyToItem = (item, e) => { + emitWith(item, keydown(), { raw: e }); + }; + const getItem = () => api.getMenu().bind(Highlighting.getHighlighted); + editor.on('keydown', (e) => { + const keyCode = e.which; + // If the autocompleter isn't activated then do nothing + if (!api.isActive()) { + return; + } + if (api.isMenuOpen()) { + // Pressing executes any item currently selected, or does nothing + if (keyCode === 13) { + getItem().each(emitExecute); + e.preventDefault(); + // Pressing either highlights the first option, or moves down the menu + } + else if (keyCode === 40) { + getItem().fold( + // No current item, so highlight the first one + () => { + api.getMenu().each(Highlighting.highlightFirst); + }, + // There is a current item, so move down in the menu + (item) => { + redirectKeyToItem(item, e); + }); + e.preventDefault(); + e.stopImmediatePropagation(); + // Pressing , , gets redirected to the selected item + } + else if (keyCode === 37 || keyCode === 38 || keyCode === 39) { + getItem().each((item) => { + redirectKeyToItem(item, e); + e.preventDefault(); + e.stopImmediatePropagation(); + }); + } + } + else { + // Pressing , or closes the autocompleter when it's active but the menu isn't open + if (keyCode === 13 || keyCode === 38 || keyCode === 40) { + api.cancelIfNecessary(); + } + } + }); + editor.on('NodeChange', () => { + // Close if active, not in the middle of an onAction callback and we're no longer inside the autocompleter span + if (api.isActive() && !api.isProcessingAction() && !editor.queryCommandState('mceAutoCompleterInRange')) { + api.cancelIfNecessary(); + } + }); + }; + const AutocompleterEditorEvents = { + setup: setup$c + }; + + var ItemResponse; + (function (ItemResponse) { + ItemResponse[ItemResponse["CLOSE_ON_EXECUTE"] = 0] = "CLOSE_ON_EXECUTE"; + ItemResponse[ItemResponse["BUBBLE_TO_SANDBOX"] = 1] = "BUBBLE_TO_SANDBOX"; + })(ItemResponse || (ItemResponse = {})); + var ItemResponse$1 = ItemResponse; + + const navClass = 'tox-menu-nav__js'; + const selectableClass = 'tox-collection__item'; + const colorClass = 'tox-swatch'; + const presetClasses = { + normal: navClass, + color: colorClass + }; + const tickedClass = 'tox-collection__item--enabled'; + const groupHeadingClass = 'tox-collection__group-heading'; + const iconClass = 'tox-collection__item-icon'; + const imageClass = 'tox-collection__item-image'; + const imageSelectorClasll = 'tox-collection__item-image-selector'; + const textClass = 'tox-collection__item-label'; + const accessoryClass = 'tox-collection__item-accessory'; + const caretClass = 'tox-collection__item-caret'; + const checkmarkClass = 'tox-collection__item-checkmark'; + const activeClass = 'tox-collection__item--active'; + const containerClass = 'tox-collection__item-container'; + const containerColumnClass = 'tox-collection__item-container--column'; + const containerRowClass = 'tox-collection__item-container--row'; + const containerAlignRightClass = 'tox-collection__item-container--align-right'; + const containerAlignLeftClass = 'tox-collection__item-container--align-left'; + const containerValignTopClass = 'tox-collection__item-container--valign-top'; + const containerValignMiddleClass = 'tox-collection__item-container--valign-middle'; + const containerValignBottomClass = 'tox-collection__item-container--valign-bottom'; + const classForPreset = (presets) => get$h(presetClasses, presets).getOr(navClass); + + const forMenu = (presets) => { + if (presets === 'color') { + return 'tox-swatches'; + } + else { + return 'tox-menu'; + } + }; + const classes = (presets) => ({ + backgroundMenu: 'tox-background-menu', + selectedMenu: 'tox-selected-menu', + selectedItem: 'tox-collection__item--active', + hasIcons: 'tox-menu--has-icons', + menu: forMenu(presets), + tieredMenu: 'tox-tiered-menu' + }); + + const markers = (presets) => { + const menuClasses = classes(presets); + return { + backgroundMenu: menuClasses.backgroundMenu, + selectedMenu: menuClasses.selectedMenu, + menu: menuClasses.menu, + selectedItem: menuClasses.selectedItem, + item: classForPreset(presets) + }; + }; + const dom = (hasIcons, columns, presets) => { + const menuClasses = classes(presets); + return { + tag: 'div', + classes: flatten([ + [menuClasses.menu, `tox-menu-${columns}-column`], + hasIcons ? [menuClasses.hasIcons] : [] + ]) + }; + }; + const components = [ + Menu.parts.items({}) + ]; + // NOTE: Up to here. + const part = (hasIcons, columns, presets) => { + const menuClasses = classes(presets); + const d = { + tag: 'div', + classes: flatten([ + [menuClasses.tieredMenu] + ]) + }; + return { + dom: d, + markers: markers(presets) + }; + }; + + // This event is triggered by a menu item from a dropdown when it wants the + // dropdown to refetch its contents based on a search string. + const refetchTriggerEvent = generate$6('refetch-trigger-event'); + // This event is triggerd by a menu item from a dropdown, when it wants to + // redispatch that event to the currently active item of that dropdown menu. It will + // be used in situations where the event should be firing on the item with fake focus, + // but instead it is firing on the item with real focus (e.g of real focus: + // menu search field) + const redirectMenuItemInteractionEvent = generate$6('redirect-menu-item-interaction'); + + // This is not stored in ItemClasses, because the searcher is not actually + // contained within items. It isn't part of their navigation, and it + // isn't maintained by menus. It is just part of the first menu, but + // not its items. + const menuSearcherClass = 'tox-menu__searcher'; + // Ideally, we'd be using mementos to find it again, but we'd need to pass + // that memento onto the dropdown, which isn't going to have it. Especially, + // because the dropdown isn't responsible for putting this searcher component + // into the menu, NestedMenus is. + const findWithinSandbox = (sandboxComp) => { + return descendant(sandboxComp.element, `.${menuSearcherClass}`).bind((inputElem) => sandboxComp.getSystem().getByDom(inputElem).toOptional()); + }; + // There is nothing sandbox-specific about this code. It just needs to be + // a container that wraps the search field. + const findWithinMenu = findWithinSandbox; + const restoreState = (inputComp, searcherState) => { + Representing.setValue(inputComp, searcherState.fetchPattern); + inputComp.element.dom.selectionStart = searcherState.selectionStart; + inputComp.element.dom.selectionEnd = searcherState.selectionEnd; + }; + const saveState = (inputComp) => { + const fetchPattern = Representing.getValue(inputComp); + const selectionStart = inputComp.element.dom.selectionStart; + const selectionEnd = inputComp.element.dom.selectionEnd; + return { + fetchPattern, + selectionStart, + selectionEnd + }; + }; + // Make sure there is ARIA communicating the currently active item in the results. + const setActiveDescendant = (inputComp, active) => { + getOpt(active.element, 'id') + .each((id) => set$9(inputComp.element, 'aria-activedescendant', id)); + }; + const renderMenuSearcher = (spec) => { + const handleByBrowser = (comp, se) => { + // We "cut" this event, so that the browser still handles it, but it is not processed + // by any of the above alloy components. We could also do this by stopping propagation, + // but not preventing default, but it's probably good to allow some overarching thing + // in the DOM (outside of alloy) to stop it if they want to. + se.cut(); + // Returning a Some here (regardless of boolean value) is going to call `stop` on the + // simulated event, which is going to call: preventDefault and stopPropagation. We want + // neither of these things to happen, so we return None here to say that it hasn't been + // handled. But because we've cut it, it will not propagate to any other alloy components + return Optional.none(); + }; + const handleByHighlightedItem = (comp, se) => { + // Because we need to redispatch based on highlighted items that we don't know about here, + // we are going to emit an event, that the sandbox listens to, and the sandbox will + // redispatch the event. + const eventData = { + interactionEvent: se.event, + eventType: se.event.raw.type + }; + emitWith(comp, redirectMenuItemInteractionEvent, eventData); + return Optional.some(true); + }; + const customSearcherEventsName = 'searcher-events'; + return { + dom: { + tag: 'div', + // NOTE: This is very intentionally NOT the navigation class, because + // we don't want the searcher to be part of the navigation. This class + // is just for styling consistency. Perhaps it should be its own class. + classes: [selectableClass] + }, + components: [ + Input.sketch({ + inputClasses: [menuSearcherClass, 'tox-textfield'], + inputAttributes: { + ...(spec.placeholder.map((placeholder) => ({ placeholder: spec.i18n(placeholder) })).getOr({})), + // This ARIA is based on the algolia example documented in TINY-8952 + 'type': 'search', + 'aria-autocomplete': 'list' + }, + inputBehaviours: derive$1([ + config(customSearcherEventsName, [ + // When the user types into the search field, we want to retrigger + // a fetch on the dropdown. This will be fired from within the + // dropdown's sandbox, so the dropdown is going to have to listen + // for it there. See CommonDropdown.ts. + run$1( + // Use "input" to handle keydown, paste etc. + input(), (inputComp) => { + emit(inputComp, refetchTriggerEvent); + }), + run$1(keydown(), (inputComp, se) => { + // The Special Keying config type since TINY-7005 processes the Escape + // key on keyup, not keydown. We need to stop the keydown event for this + // input, because some browsers (e.g. Chrome) will process a keydown + // for Escape inside an input[type=search] by clearing the input value, + // and then triggering an "input" event. This "input" event will trigger + // a refetch, which if it completes before the keyup is fired for Escape, + // will go back to only showing one level of menu. Then, when the escape + // keyup is processed by Keying, it will close the single remaining menu. + // This has the effect of closing *all* menus that are open when Escape is + // pressed instead of the last one. So, instead, we are going to kill the + // keydown event, so that it doesn't have the default browser behaviour, and + // won't trigger an input (and then Refetch). Then the keyup will still fire + // so just one level of the menu will close. This is all based on the underlying + // assumption that preventDefault and/or stop on a keydown does not suppress + // the related keyup. All of the documentation found so far, suggests it should + // only suppress the keypress, not the keyup, but that might not be across all + // browsers, or implemented consistently. + if (se.event.raw.key === 'Escape') { + se.stop(); + } + }) + ]), + // In addition to input handling, we want special handling for + // Up/Down/Left/Right/Enter/Escape/Space. We can divide these into two categories + // - events that we don't want to allow the overall menu system to process (left and right and space) + // - events that we want to redispatch on the "highlighted item" based on the + // current fake focus. + Keying.config({ + mode: 'special', + onLeft: handleByBrowser, + onRight: handleByBrowser, + onSpace: handleByBrowser, + onEnter: handleByHighlightedItem, + onEscape: handleByHighlightedItem, + onUp: handleByHighlightedItem, + onDown: handleByHighlightedItem + }) + ]), + // Because we have customised handling for keydown, and we are configuring + // Keying, we need to specify which "behaviour" (custom events or keying) gets to + // process the keydown event first. In this situation, we want to stop escape before + // anything happens (although it really isn't necessary) + eventOrder: { + keydown: [customSearcherEventsName, Keying.name()] + } + }) + ] + }; + }; + + const searchResultsClass = 'tox-collection--results__js'; + // NOTE: this is operating on the the final AlloySpec + const augmentWithAria = (item) => { + if (item.dom) { + return { + ...item, + dom: { + ...item.dom, + attributes: { + ...item.dom.attributes ?? {}, + 'id': generate$6('aria-item-search-result-id'), + 'aria-selected': 'false' + } + } + }; + } + else { + return item; + } + }; + + const widgetAriaLabel = 'Use arrow keys to navigate.'; + const chunk = (rowDom, numColumns) => (items) => { + const chunks = chunk$1(items, numColumns); + return map$2(chunks, (c) => ({ + dom: rowDom, + components: c + })); + }; + const forSwatch = (columns) => ({ + dom: { + tag: 'div', + classes: ['tox-menu', 'tox-swatches-menu'], + attributes: { + 'aria-label': global$6.translate(widgetAriaLabel) + } + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-swatches'] + }, + components: [ + Menu.parts.items({ + preprocess: columns !== 'auto' ? chunk({ + tag: 'div', + classes: ['tox-swatches__row'] + }, columns) : identity + }) + ] + } + ] + }); + const forImageSelector = (columns) => ({ + dom: { + tag: 'div', + classes: ['tox-menu', 'tox-image-selector-menu'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-image-selector'] + }, + components: [ + Menu.parts.items({ + preprocess: columns !== 'auto' ? chunk({ + tag: 'div', + classes: ['tox-image-selector__row'] + }, columns) : identity + }) + ] + } + ] + }); + const forToolbar = (columns) => ({ + dom: { + tag: 'div', + // TODO: Configurable lg setting? + classes: ['tox-menu', 'tox-collection', 'tox-collection--toolbar', 'tox-collection--toolbar-lg'] + }, + components: [ + Menu.parts.items({ + preprocess: chunk({ + tag: 'div', + classes: ['tox-collection__group'] + }, columns) + }) + ] + }); + // NOTE: That type signature isn't quite true. + const preprocessCollection = (items, isSeparator) => { + const allSplits = []; + let currentSplit = []; + each$1(items, (item, i) => { + if (isSeparator(item, i)) { + if (currentSplit.length > 0) { + allSplits.push(currentSplit); + } + currentSplit = []; + if (has$2(item.dom, 'innerHtml') || item.components && item.components.length > 0) { + currentSplit.push(item); + } + } + else { + currentSplit.push(item); + } + }); + if (currentSplit.length > 0) { + allSplits.push(currentSplit); + } + return map$2(allSplits, (s) => ({ + dom: { + tag: 'div', + classes: ['tox-collection__group'] + }, + components: s + })); + }; + const insertItemsPlaceholder = (columns, initItems, onItem) => { + return Menu.parts.items({ + preprocess: (rawItems) => { + // Add any information to the items that is required. For example + // when the items are results in a searchable menu, we need them to have + // an ID that can be referenced by aria-activedescendant + const enrichedItems = map$2(rawItems, onItem); + if (columns !== 'auto' && columns > 1) { + return chunk({ + tag: 'div', + classes: ['tox-collection__group'] + }, columns)(enrichedItems); + } + else { + return preprocessCollection(enrichedItems, (_item, i) => initItems[i].type === 'separator'); + } + } + }); + }; + const hasWidget = (items) => exists(items, (item) => item.type === 'widget'); + const forCollection = (columns, initItems, _hasIcons = true) => ({ + dom: { + tag: 'div', + classes: ['tox-menu', 'tox-collection'].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']), + attributes: { + // widget item can be inserttable, colorswatch or imageselect - all of them are navigated with arrow keys + ...hasWidget(initItems) ? { 'aria-label': global$6.translate(widgetAriaLabel) } : {} + }, + }, + components: [ + // We don't need to add IDs for each item because there are no + // aria relationships we need to maintain + insertItemsPlaceholder(columns, initItems, identity) + ] + }); + const forCollectionWithSearchResults = (columns, initItems, _hasIcons = true) => { + // A collection with results is exactly like a collection, except it also has + // an ID and class on its outer div to allow for aria-controls relationships, and ids + // on its items. + // This connects the search bar with the list box. + const ariaControlsSearchResults = generate$6('aria-controls-search-results'); + return { + dom: { + tag: 'div', + classes: ['tox-menu', 'tox-collection', searchResultsClass].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']), + attributes: { + id: ariaControlsSearchResults + } + }, + components: [ + // For each item, it needs to have an ID, so that we can refer to it + // by the aria-activedescendant attribute + insertItemsPlaceholder(columns, initItems, augmentWithAria) + ] + }; + }; + // Does a searchable menu *really* support columns !== 1 ? + const forCollectionWithSearchField = (columns, initItems, searchField) => { + // This connects the search bar with the list box. + const ariaControlsSearchResults = generate$6('aria-controls-search-results'); + return { + dom: { + tag: 'div', + classes: ['tox-menu', 'tox-collection'].concat(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']) + }, + components: [ + // Importantly, the search bar is not in the "items" part, which means that it is + // not given any of the item decorations by default. In order to ensure that is + // not part of the navigation, however, we need to prevent it from getting the nav + // class. For general collection menu items, it is navClass, which is: + // tox-menu-nav__js. So simply, do not add this class when creating + // the search, so that it isn't in the navigation. Ideally, it would only ever look + // inside its items section, but the items aren't guaranteed to have a separate + // container, and navigation candidates are found anywhere inside the menu + // container. We could add configuration to alloy's Menu movement, where there was + // a 'navigation container' that all items would be in. That could be another + // way to solve the problem. For now, we'll just manually avoid adding the navClass + renderMenuSearcher({ + i18n: global$6.translate, + placeholder: searchField.placeholder + }), + { + // We need a separate container for the items, because this is the container + // that multiple tox-collection__groups might go into, and will be the container + // that the search bar controls. + dom: { + tag: 'div', + classes: [ + ...(columns === 1 ? ['tox-collection--list'] : ['tox-collection--grid']), + searchResultsClass + ], + attributes: { + id: ariaControlsSearchResults + } + }, + components: [ + // For each item, it needs to have an ID, so that we can refer to it + // by the aria-activedescendant attribute + insertItemsPlaceholder(columns, initItems, augmentWithAria) + ] + } + ] + }; + }; + const forHorizontalCollection = (initItems, _hasIcons = true) => ({ + dom: { + tag: 'div', + classes: ['tox-collection', 'tox-collection--horizontal'] + }, + components: [ + Menu.parts.items({ + preprocess: (items) => preprocessCollection(items, (_item, i) => initItems[i].type === 'separator') + }) + ] + }); + + const menuHasIcons = (xs) => exists(xs, (item) => 'icon' in item && item.icon !== undefined); + const handleError = (error) => { + // eslint-disable-next-line no-console + console.error(formatError(error)); + // eslint-disable-next-line no-console + console.log(error); + return Optional.none(); + }; + const createHorizontalPartialMenuWithAlloyItems = (value, _hasIcons, items, _columns, _menuLayout) => { + // Horizontal collections do not support different menu layout structures currently. + const structure = forHorizontalCollection(items); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + }; + const createPartialMenuWithAlloyItems = (value, hasIcons, items, columns, menuLayout) => { + const getNormalStructure = () => { + if (menuLayout.menuType !== 'searchable') { + return forCollection(columns, items); + } + else { + return menuLayout.searchMode.searchMode === 'search-with-field' + ? forCollectionWithSearchField(columns, items, menuLayout.searchMode) + : forCollectionWithSearchResults(columns, items); + } + }; + if (menuLayout.menuType === 'color') { + const structure = forSwatch(columns); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + } + else if (menuLayout.menuType === 'imageselector' && columns !== 'auto') { + const structure = forImageSelector(columns); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + } + else if (menuLayout.menuType === 'normal' && columns === 'auto') { + const structure = forCollection(columns, items); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + } + else if (menuLayout.menuType === 'normal' || menuLayout.menuType === 'searchable') { + const structure = getNormalStructure(); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + } + else if (menuLayout.menuType === 'listpreview' && columns !== 'auto') { + const structure = forToolbar(columns); + return { + value, + dom: structure.dom, + components: structure.components, + items + }; + } + else { + return { + value, + dom: dom(hasIcons, columns, menuLayout.menuType), + components: components, + items + }; + } + }; + + const type = requiredString('type'); + const name = requiredString('name'); + const label = requiredString('label'); + const text = requiredString('text'); + const title = requiredString('title'); + const icon = requiredString('icon'); + const url = requiredString('url'); + const value = requiredString('value'); + const fetch = requiredFunction('fetch'); + const getSubmenuItems = requiredFunction('getSubmenuItems'); + const onAction = requiredFunction('onAction'); + const onItemAction = requiredFunction('onItemAction'); + const onSetup = defaultedFunction('onSetup', () => noop); + const optionalName = optionString('name'); + const optionalText = optionString('text'); + const optionalRole = optionString('role'); + const optionalIcon = optionString('icon'); + const optionalTooltip = optionString('tooltip'); + const optionalChevronTooltip = optionString('chevronTooltip'); + const optionalLabel = optionString('label'); + const optionalShortcut = optionString('shortcut'); + const optionalSelect = optionFunction('select'); + const active = defaultedBoolean('active', false); + const borderless = defaultedBoolean('borderless', false); + const enabled = defaultedBoolean('enabled', true); + const primary = defaultedBoolean('primary', false); + const defaultedColumns = (num) => defaulted('columns', num); + const defaultedMeta = defaulted('meta', {}); + const defaultedOnAction = defaultedFunction('onAction', noop); + const defaultedType = (type) => defaultedString('type', type); + const generatedName = (namePrefix) => field$1('name', 'name', defaultedThunk(() => generate$6(`${namePrefix}-name`)), string); + const generatedValue = (valuePrefix) => field$1('value', 'value', defaultedThunk(() => generate$6(`${valuePrefix}-value`)), anyValue()); + + const alertBannerFields = [ + type, + text, + requiredStringEnum('level', ['info', 'warn', 'error', 'success']), + icon, + defaulted('url', '') + ]; + const alertBannerSchema = objOf(alertBannerFields); + + const createBarFields = (itemsField) => [ + type, + itemsField + ]; + + const buttonFields = [ + type, + text, + enabled, + generatedName('button'), + optionalIcon, + borderless, + // this should be defaulted to `secondary` but the implementation needs to manage the deprecation + optionStringEnum('buttonType', ['primary', 'secondary', 'toolbar']), + // this should be removed, but must live here because FieldSchema doesn't have a way to manage deprecated fields + primary, + defaultedString('context', 'mode:design') + ]; + const buttonSchema = objOf(buttonFields); + + const formComponentFields = [ + type, + name + ]; + const formComponentWithLabelFields = formComponentFields.concat([ + optionalLabel + ]); + + const checkboxFields = formComponentFields.concat([ + label, + enabled, + defaultedString('context', 'mode:design') + ]); + const checkboxSchema = objOf(checkboxFields); + const checkboxDataProcessor = boolean; + + const collectionFields = formComponentWithLabelFields.concat([ + defaultedColumns('auto'), + defaultedString('context', 'mode:design') + ]); + const collectionSchema = objOf(collectionFields); + // TODO: Make type for CollectionItem + const collectionDataProcessor = arrOfObj([ + value, + text, + icon + ]); + + const colorInputFields = formComponentWithLabelFields.concat([ + defaultedString('storageKey', 'default'), + defaultedString('context', 'mode:design'), + ]); + const colorInputSchema = objOf(colorInputFields); + const colorInputDataProcessor = string; + + const colorPickerFields = formComponentWithLabelFields; + const colorPickerSchema = objOf(colorPickerFields); + const colorPickerDataProcessor = string; + + const customEditorFields = formComponentFields.concat([ + defaultedString('tag', 'textarea'), + requiredString('scriptId'), + requiredString('scriptUrl'), + optionFunction('onFocus'), + defaultedPostMsg('settings', undefined) + ]); + const customEditorFieldsOld = formComponentFields.concat([ + defaultedString('tag', 'textarea'), + requiredFunction('init') + ]); + const customEditorSchema = valueOf((v) => asRaw('customeditor.old', objOfOnly(customEditorFieldsOld), v).orThunk(() => asRaw('customeditor.new', objOfOnly(customEditorFields), v))); + const customEditorDataProcessor = string; + + const commonMenuItemFields = [ + enabled, + optionalText, + optionalRole, + optionalShortcut, + generatedValue('menuitem'), + defaultedMeta, + defaultedString('context', 'mode:design') + ]; + + const dialogToggleMenuItemSchema = objOf([ + type, + name + ].concat(commonMenuItemFields)); + const dialogToggleMenuItemDataProcessor = boolean; + + const baseFooterButtonFields = [ + generatedName('button'), + optionalIcon, + defaultedStringEnum('align', 'end', ['start', 'end']), + // this should be removed, but must live here because FieldSchema doesn't have a way to manage deprecated fields + primary, + enabled, + // this should be defaulted to `secondary` but the implementation needs to manage the deprecation + optionStringEnum('buttonType', ['primary', 'secondary']), + defaultedString('context', 'mode:design') + ]; + const dialogFooterButtonFields = [ + ...baseFooterButtonFields, + text + ]; + const normalFooterButtonFields = [ + requiredStringEnum('type', ['submit', 'cancel', 'custom']), + ...dialogFooterButtonFields + ]; + const menuFooterButtonFields = [ + requiredStringEnum('type', ['menu']), + optionalText, + optionalTooltip, + optionalIcon, + requiredArrayOf('items', dialogToggleMenuItemSchema), + ...baseFooterButtonFields + ]; + const toggleButtonSpecFields = [ + ...baseFooterButtonFields, + requiredStringEnum('type', ['togglebutton']), + optionalTooltip, + optionalIcon, + optionalText, + defaultedBoolean('active', false) + ]; + const dialogFooterButtonSchema = choose$1('type', { + submit: normalFooterButtonFields, + cancel: normalFooterButtonFields, + custom: normalFooterButtonFields, + menu: menuFooterButtonFields, + togglebutton: toggleButtonSpecFields + }); + + const dropZoneFields = formComponentWithLabelFields.concat([ + defaultedString('context', 'mode:design'), + optionString('dropAreaLabel'), + optionString('buttonLabel'), + optionString('allowedFileTypes'), + optionArrayOf('allowedFileExtensions', string) + ]); + const dropZoneSchema = objOf(dropZoneFields); + const dropZoneDataProcessor = arrOfVal(); + + const createGridFields = (itemsField) => [ + type, + requiredNumber('columns'), + itemsField + ]; + + const htmlPanelFields = [ + type, + requiredString('html'), + defaultedStringEnum('presets', 'presentation', ['presentation', 'document']), + defaultedFunction('onInit', noop), + defaultedBoolean('stretched', false), + ]; + const htmlPanelSchema = objOf(htmlPanelFields); + + const iframeFields = formComponentWithLabelFields.concat([ + defaultedBoolean('border', false), + defaultedBoolean('sandboxed', true), + defaultedBoolean('streamContent', false), + defaultedBoolean('transparent', true) + ]); + const iframeSchema = objOf(iframeFields); + const iframeDataProcessor = string; + + const imagePreviewSchema = objOf(formComponentFields.concat([ + optionString('height'), + ])); + const imagePreviewDataProcessor = objOf([ + requiredString('url'), + optionNumber('zoom'), + optionNumber('cachedWidth'), + optionNumber('cachedHeight'), + ]); + + const inputFields = formComponentWithLabelFields.concat([ + optionString('inputMode'), + optionString('placeholder'), + defaultedBoolean('maximized', false), + enabled, + defaultedString('context', 'mode:design'), + ]); + const inputSchema = objOf(inputFields); + const inputDataProcessor = string; + + const createLabelFields = (itemsField) => [ + type, + label, + itemsField, + defaultedStringEnum('align', 'start', ['start', 'center', 'end']), + optionString('for') + ]; + + const listBoxSingleItemFields = [ + text, + value + ]; + const listBoxNestedItemFields = [ + text, + requiredArrayOf('items', thunkOf('items', () => listBoxItemSchema)) + ]; + const listBoxItemSchema = oneOf([ + objOf(listBoxSingleItemFields), + objOf(listBoxNestedItemFields) + ]); + const listBoxFields = formComponentWithLabelFields.concat([ + requiredArrayOf('items', listBoxItemSchema), + enabled, + defaultedString('context', 'mode:design') + ]); + const listBoxSchema = objOf(listBoxFields); + const listBoxDataProcessor = string; + + const selectBoxFields = formComponentWithLabelFields.concat([ + requiredArrayOfObj('items', [ + text, + value + ]), + defaultedNumber('size', 1), + enabled, + defaultedString('context', 'mode:design') + ]); + const selectBoxSchema = objOf(selectBoxFields); + const selectBoxDataProcessor = string; + + const sizeInputFields = formComponentWithLabelFields.concat([ + defaultedBoolean('constrain', true), + enabled, + defaultedString('context', 'mode:design') + ]); + const sizeInputSchema = objOf(sizeInputFields); + const sizeInputDataProcessor = objOf([ + requiredString('width'), + requiredString('height') + ]); + + const sliderFields = formComponentFields.concat([ + label, + defaultedNumber('min', 0), + defaultedNumber('max', 0), + ]); + const sliderSchema = objOf(sliderFields); + const sliderInputDataProcessor = number; + + const tableFields = [ + type, + requiredArrayOf('header', string), + requiredArrayOf('cells', arrOf(string)) + ]; + const tableSchema = objOf(tableFields); + + const textAreaFields = formComponentWithLabelFields.concat([ + optionString('placeholder'), + defaultedBoolean('maximized', false), + enabled, + defaultedString('context', 'mode:design'), + optionBoolean('spellcheck'), + ]); + const textAreaSchema = objOf(textAreaFields); + const textAreaDataProcessor = string; + + const baseMenuButtonFields = [ + defaultedString('buttonType', 'default'), + optionString('text'), + optionString('tooltip'), + optionString('icon'), + defaultedOf('search', false, + // So our boulder validation are: + // a) boolean -> we need to map it into an Option + // b) object -> we need to map it into a Some + oneOf([ + // Unfortunately, due to objOf not checking to see that the + // input is an object, the boolean check MUST be first + boolean, + objOf([ + optionString('placeholder') + ]) + ], + // This function allows you to standardise the output. + (x) => { + if (isBoolean(x)) { + return x ? Optional.some({ placeholder: Optional.none() }) : Optional.none(); + } + else { + return Optional.some(x); + } + })), + requiredFunction('fetch'), + defaultedFunction('onSetup', () => noop), + defaultedString('context', 'mode:design') + ]; + + const MenuButtonSchema = objOf([ + type, + ...baseMenuButtonFields + ]); + const createMenuButton = (spec) => asRaw('menubutton', MenuButtonSchema, spec); + + const baseTreeItemFields = [ + requiredStringEnum('type', ['directory', 'leaf']), + title, + requiredString('id'), + optionOf('menu', MenuButtonSchema), + optionString('customStateIcon'), + optionString('customStateIconTooltip'), + ]; + const treeItemLeafFields = baseTreeItemFields; + const treeItemLeafSchema = objOf(treeItemLeafFields); + const treeItemDirectoryFields = baseTreeItemFields.concat([ + requiredArrayOf('children', thunkOf('children', () => { + return choose$2('type', { + directory: treeItemDirectorySchema, + leaf: treeItemLeafSchema, + }); + })), + ]); + const treeItemDirectorySchema = objOf(treeItemDirectoryFields); + const treeItemSchema = choose$2('type', { + directory: treeItemDirectorySchema, + leaf: treeItemLeafSchema, + }); + const treeFields = [ + type, + requiredArrayOf('items', treeItemSchema), + optionFunction('onLeafAction'), + optionFunction('onToggleExpand'), + defaultedArrayOf('defaultExpandedIds', [], string), + optionString('defaultSelectedId'), + ]; + const treeSchema = objOf(treeFields); + + const urlInputFields = formComponentWithLabelFields.concat([ + defaultedStringEnum('filetype', 'file', ['image', 'media', 'file']), + enabled, + optionString('picker_text'), + defaultedString('context', 'mode:design') + ]); + const urlInputSchema = objOf(urlInputFields); + const urlInputDataProcessor = objOf([ + value, + defaultedMeta + ]); + + const createItemsField = (name) => field$1('items', 'items', required$2(), arrOf(valueOf((v) => asRaw(`Checking item of ${name}`, itemSchema$1, v).fold((sErr) => Result.error(formatError(sErr)), (passValue) => Result.value(passValue))))); + // We're using a thunk here so we can refer to panel fields + const itemSchema$1 = valueThunk(() => choose$2('type', { + alertbanner: alertBannerSchema, + bar: objOf(createBarFields(createItemsField('bar'))), + button: buttonSchema, + checkbox: checkboxSchema, + colorinput: colorInputSchema, + colorpicker: colorPickerSchema, + dropzone: dropZoneSchema, + grid: objOf(createGridFields(createItemsField('grid'))), + iframe: iframeSchema, + input: inputSchema, + listbox: listBoxSchema, + selectbox: selectBoxSchema, + sizeinput: sizeInputSchema, + slider: sliderSchema, + textarea: textAreaSchema, + urlinput: urlInputSchema, + customeditor: customEditorSchema, + htmlpanel: htmlPanelSchema, + imagepreview: imagePreviewSchema, + collection: collectionSchema, + label: objOf(createLabelFields(createItemsField('label'))), + table: tableSchema, + tree: treeSchema, + panel: panelSchema + })); + const panelFields = [ + type, + defaulted('classes', []), + requiredArrayOf('items', itemSchema$1) + ]; + const panelSchema = objOf(panelFields); + + const tabFields = [ + generatedName('tab'), + title, + requiredArrayOf('items', itemSchema$1) + ]; + const tabPanelFields = [ + type, + requiredArrayOfObj('tabs', tabFields) + ]; + const tabPanelSchema = objOf(tabPanelFields); + + const dialogButtonFields = dialogFooterButtonFields; + const dialogButtonSchema = dialogFooterButtonSchema; + const dialogSchema = objOf([ + requiredString('title'), + requiredOf('body', choose$2('type', { + panel: panelSchema, + tabpanel: tabPanelSchema + })), + defaultedString('size', 'normal'), + defaultedArrayOf('buttons', [], dialogButtonSchema), + defaulted('initialData', {}), + defaultedFunction('onAction', noop), + defaultedFunction('onChange', noop), + defaultedFunction('onSubmit', noop), + defaultedFunction('onClose', noop), + defaultedFunction('onCancel', noop), + defaultedFunction('onTabChange', noop) + ]); + const createDialog = (spec) => asRaw('dialog', dialogSchema, spec); + + const urlDialogButtonSchema = objOf([ + requiredStringEnum('type', ['cancel', 'custom']), + ...dialogButtonFields + ]); + const urlDialogSchema = objOf([ + requiredString('title'), + requiredString('url'), + optionNumber('height'), + optionNumber('width'), + optionArrayOf('buttons', urlDialogButtonSchema), + defaultedFunction('onAction', noop), + defaultedFunction('onCancel', noop), + defaultedFunction('onClose', noop), + defaultedFunction('onMessage', noop) + ]); + const createUrlDialog = (spec) => asRaw('dialog', urlDialogSchema, spec); + + // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types + const getAllObjects = (obj) => { + if (isObject(obj)) { + return [obj].concat(bind$3(values(obj), getAllObjects)); + } + else if (isArray(obj)) { + return bind$3(obj, getAllObjects); + } + else { + return []; + } + }; + + const isNamedItem = (obj) => isString(obj.type) && isString(obj.name); + const dataProcessors = { + checkbox: checkboxDataProcessor, + colorinput: colorInputDataProcessor, + colorpicker: colorPickerDataProcessor, + dropzone: dropZoneDataProcessor, + input: inputDataProcessor, + iframe: iframeDataProcessor, + imagepreview: imagePreviewDataProcessor, + selectbox: selectBoxDataProcessor, + sizeinput: sizeInputDataProcessor, + slider: sliderInputDataProcessor, + listbox: listBoxDataProcessor, + size: sizeInputDataProcessor, + textarea: textAreaDataProcessor, + urlinput: urlInputDataProcessor, + customeditor: customEditorDataProcessor, + collection: collectionDataProcessor, + togglemenuitem: dialogToggleMenuItemDataProcessor + }; + const getDataProcessor = (item) => Optional.from(dataProcessors[item.type]); + const getNamedItems = (structure) => filter$2(getAllObjects(structure), isNamedItem); + + const createDataValidator = (structure) => { + const namedItems = getNamedItems(structure); + const fields = bind$3(namedItems, (item) => getDataProcessor(item).fold(() => [], (schema) => [requiredOf(item.name, schema)])); + return objOf(fields); + }; + + const extract = (structure) => { + const internalDialog = getOrDie(createDialog(structure)); + const dataValidator = createDataValidator(structure); + // We used to validate data here, but it's done when loading the dialog in tinymce + const initialData = structure.initialData ?? {}; + return { + internalDialog, + dataValidator, + initialData + }; + }; + const DialogManager = { + open: (factory, structure) => { + const extraction = extract(structure); + return factory(extraction.internalDialog, extraction.initialData, extraction.dataValidator); + }, + openUrl: (factory, structure) => { + const internalDialog = getOrDie(createUrlDialog(structure)); + return factory(internalDialog); + }, + redial: (structure) => extract(structure) + }; + + const separatorMenuItemSchema = objOf([ + type, + optionalText + ]); + const createSeparatorMenuItem = (spec) => asRaw('separatormenuitem', separatorMenuItemSchema, spec); + + const autocompleterItemSchema = objOf([ + // Currently, autocomplete items don't support configuring type, active, disabled, meta + defaultedType('autocompleteitem'), + active, + enabled, + defaultedMeta, + value, + optionalText, + optionalIcon + ]); + objOf([ + type, + requiredString('trigger'), + defaultedNumber('minChars', 1), + defaultedColumns(1), + defaultedNumber('maxResults', 10), + optionFunction('matches'), + fetch, + onAction, + defaultedArrayOf('highlightOn', [], string) + ]); + const createSeparatorItem = (spec) => asRaw('Autocompleter.Separator', separatorMenuItemSchema, spec); + const createAutocompleterItem = (spec) => asRaw('Autocompleter.Item', autocompleterItemSchema, spec); + + const baseToolbarButtonFields = [ + enabled, + optionalTooltip, + optionalIcon, + optionalText, + onSetup, + defaultedString('context', 'mode:design') + ]; + const toolbarButtonSchema = objOf([ + type, + onAction, + optionalShortcut + ].concat(baseToolbarButtonFields)); + const createToolbarButton = (spec) => asRaw('toolbarbutton', toolbarButtonSchema, spec); + + const baseToolbarToggleButtonFields = [ + active + ].concat(baseToolbarButtonFields); + const toggleButtonSchema = objOf(baseToolbarToggleButtonFields.concat([ + type, + onAction, + optionalShortcut + ])); + const createToggleButton = (spec) => asRaw('ToggleButton', toggleButtonSchema, spec); + + const contextBarFields = [ + defaultedFunction('predicate', never), + defaultedStringEnum('scope', 'node', ['node', 'editor']), + defaultedStringEnum('position', 'selection', ['node', 'selection', 'line']) + ]; + + const contextButtonFields = baseToolbarButtonFields.concat([ + defaultedType('contextformbutton'), + defaultedString('align', 'end'), + primary, + onAction, + customField('original', identity) + ]); + const contextToggleButtonFields = baseToolbarToggleButtonFields.concat([ + defaultedType('contextformbutton'), + defaultedString('align', 'end'), + primary, + onAction, + customField('original', identity) + ]); + const launchButtonFields$1 = baseToolbarButtonFields.concat([ + defaultedType('contextformbutton') + ]); + const launchToggleButtonFields = baseToolbarToggleButtonFields.concat([ + defaultedType('contextformtogglebutton') + ]); + const toggleOrNormal = choose$1('type', { + contextformbutton: contextButtonFields, + contextformtogglebutton: contextToggleButtonFields + }); + const baseContextFormFields = [ + optionalLabel, + requiredArrayOf('commands', toggleOrNormal), + optionOf('launch', choose$1('type', { + contextformbutton: launchButtonFields$1, + contextformtogglebutton: launchToggleButtonFields + })), + defaultedFunction('onInput', noop), + defaultedFunction('onSetup', noop) + ]; + const contextFormFields = [ + ...contextBarFields, + ...baseContextFormFields, + requiredStringEnum('type', ['contextform']), + defaultedFunction('initValue', constant$1('')), + optionString('placeholder'), + ]; + const contextSliderFormFields = [ + ...contextBarFields, + ...baseContextFormFields, + requiredStringEnum('type', ['contextsliderform']), + defaultedFunction('initValue', constant$1(0)), + defaultedFunction('min', constant$1(0)), + defaultedFunction('max', constant$1(100)) + ]; + const contextSizeInputFormFields = [ + ...contextBarFields, + ...baseContextFormFields, + requiredStringEnum('type', ['contextsizeinputform']), + defaultedFunction('initValue', constant$1({ width: '', height: '' })) + ]; + const contextFormSchema = choose$1('type', { + contextform: contextFormFields, + contextsliderform: contextSliderFormFields, + contextsizeinputform: contextSizeInputFormFields + }); + const createContextForm = (spec) => asRaw('ContextForm', contextFormSchema, spec); + + const launchButtonFields = baseToolbarButtonFields.concat([ + defaultedType('contexttoolbarbutton') + ]); + const contextToolbarSchema = objOf([ + defaultedType('contexttoolbar'), + optionObjOf('launch', launchButtonFields), + requiredOf('items', oneOf([ + string, + arrOfObj([ + optionString('name'), + optionString('label'), + requiredArrayOf('items', string) + ]) + ])), + ].concat(contextBarFields)); + const toolbarGroupBackToSpec = (toolbarGroup) => ({ + name: toolbarGroup.name.getOrUndefined(), + label: toolbarGroup.label.getOrUndefined(), + items: toolbarGroup.items + }); + const contextToolbarToSpec = (contextToolbar) => ({ + ...contextToolbar, + launch: contextToolbar.launch.getOrUndefined(), + items: isString(contextToolbar.items) ? contextToolbar.items : map$2(contextToolbar.items, toolbarGroupBackToSpec) + }); + const createContextToolbar = (spec) => asRaw('ContextToolbar', contextToolbarSchema, spec); + + const cardImageFields = [ + type, + requiredString('src'), + optionString('alt'), + defaultedArrayOf('classes', [], string) + ]; + const cardImageSchema = objOf(cardImageFields); + + const cardTextFields = [ + type, + text, + optionalName, + defaultedArrayOf('classes', ['tox-collection__item-label'], string) + ]; + const cardTextSchema = objOf(cardTextFields); + + const itemSchema = valueThunk(() => choose$2('type', { + cardimage: cardImageSchema, + cardtext: cardTextSchema, + cardcontainer: cardContainerSchema + })); + const cardContainerSchema = objOf([ + type, + defaultedString('direction', 'horizontal'), + defaultedString('align', 'left'), + defaultedString('valign', 'middle'), + requiredArrayOf('items', itemSchema) + ]); + + const cardMenuItemSchema = objOf([ + type, + optionalLabel, + requiredArrayOf('items', itemSchema), + onSetup, + defaultedOnAction + ].concat(commonMenuItemFields)); + const createCardMenuItem = (spec) => asRaw('cardmenuitem', cardMenuItemSchema, spec); + + const choiceMenuItemSchema = objOf([ + type, + active, + optionalIcon, + optionalLabel + ].concat(commonMenuItemFields)); + const createChoiceMenuItem = (spec) => asRaw('choicemenuitem', choiceMenuItemSchema, spec); + + const baseFields = [ + type, + requiredString('fancytype'), + defaultedOnAction + ]; + const insertTableFields = [ + defaulted('initData', {}) + ].concat(baseFields); + const colorSwatchFields = [ + optionFunction('select'), + defaultedObjOf('initData', {}, [ + defaultedBoolean('allowCustomColors', true), + defaultedString('storageKey', 'default'), + // Note: We don't validate the colors as they are instead validated by choiceschema when rendering + optionArrayOf('colors', anyValue()) + ]) + ].concat(baseFields); + const imageSelectFields = [ + optionFunction('select'), + requiredObjOf('initData', [ + requiredNumber('columns'), + // Note: We don't validate the items as they are instead validated by imageMenuItemSchema when rendering + defaultedArrayOf('items', [], anyValue()) + ]) + ].concat(baseFields); + const fancyMenuItemSchema = choose$1('fancytype', { + inserttable: insertTableFields, + colorswatch: colorSwatchFields, + imageselect: imageSelectFields + }); + const createFancyMenuItem = (spec) => asRaw('fancymenuitem', fancyMenuItemSchema, spec); + + const imageMenuItemSchema = objOf([ + type, + active, + url, + optionalLabel, + optionalTooltip + ].concat(commonMenuItemFields)); + const resetImageItemSchema = objOf([ + type, + active, + icon, + label, + optionalTooltip, + value + ].concat(commonMenuItemFields)); + const createImageMenuItem = (spec) => asRaw('imagemenuitem', imageMenuItemSchema, spec); + const createResetImageItem = (spec) => asRaw('resetimageitem', resetImageItemSchema, spec); + + const menuItemSchema = objOf([ + type, + onSetup, + defaultedOnAction, + optionalIcon + ].concat(commonMenuItemFields)); + const createMenuItem = (spec) => asRaw('menuitem', menuItemSchema, spec); + + const nestedMenuItemSchema = objOf([ + type, + getSubmenuItems, + onSetup, + optionalIcon + ].concat(commonMenuItemFields)); + const createNestedMenuItem = (spec) => asRaw('nestedmenuitem', nestedMenuItemSchema, spec); + + const toggleMenuItemSchema = objOf([ + type, + optionalIcon, + active, + onSetup, + onAction + ].concat(commonMenuItemFields)); + const createToggleMenuItem = (spec) => asRaw('togglemenuitem', toggleMenuItemSchema, spec); + + const sidebarSchema = objOf([ + optionalIcon, + optionalTooltip, + defaultedFunction('onShow', noop), + defaultedFunction('onHide', noop), + onSetup + ]); + const createSidebar = (spec) => asRaw('sidebar', sidebarSchema, spec); + + const groupToolbarButtonSchema = objOf([ + type, + requiredOf('items', oneOf([ + arrOfObj([ + name, + requiredArrayOf('items', string) + ]), + string + ])) + ].concat(baseToolbarButtonFields)); + const createGroupToolbarButton = (spec) => asRaw('GroupToolbarButton', groupToolbarButtonSchema, spec); + + const splitButtonSchema = objOf([ + type, + optionalTooltip, + optionalChevronTooltip, + optionalIcon, + optionalText, + optionalSelect, + fetch, + onSetup, + // TODO: Validate the allowed presets + defaultedStringEnum('presets', 'normal', ['normal', 'color', 'listpreview']), + defaultedColumns(1), + onAction, + onItemAction, + defaultedString('context', 'mode:design') + ]); + const createSplitButton = (spec) => asRaw('SplitButton', splitButtonSchema, spec); + + const baseButtonFields = [ + optionalText, + optionalIcon, + optionString('tooltip'), + defaultedStringEnum('buttonType', 'secondary', ['primary', 'secondary']), + defaultedBoolean('borderless', false), + requiredFunction('onAction'), + defaultedString('context', 'mode:design') + ]; + const normalButtonFields = [ + ...baseButtonFields, + text, + requiredStringEnum('type', ['button']), + ]; + const toggleButtonFields = [ + ...baseButtonFields, + defaultedBoolean('active', false), + requiredStringEnum('type', ['togglebutton']) + ]; + const schemaWithoutGroupButton = { + button: normalButtonFields, + togglebutton: toggleButtonFields, + }; + const groupFields = [ + requiredStringEnum('type', ['group']), + defaultedArrayOf('buttons', [], choose$1('type', schemaWithoutGroupButton)) + ]; + const viewButtonSchema = choose$1('type', { + ...schemaWithoutGroupButton, + group: groupFields + }); + + const viewSchema = objOf([ + defaultedArrayOf('buttons', [], viewButtonSchema), + requiredFunction('onShow'), + requiredFunction('onHide') + ]); + const createView = (spec) => asRaw('view', viewSchema, spec); + + const detectSize = (comp, margin, selectorClass) => { + const descendants$1 = descendants(comp.element, '.' + selectorClass); + // TODO: This seems to cause performance issues in the emoji dialog + if (descendants$1.length > 0) { + const columnLength = findIndex$1(descendants$1, (c) => { + const thisTop = c.dom.getBoundingClientRect().top; + const cTop = descendants$1[0].dom.getBoundingClientRect().top; + return Math.abs(thisTop - cTop) > margin; + }).getOr(descendants$1.length); + return Optional.some({ + numColumns: columnLength, + numRows: Math.ceil(descendants$1.length / columnLength) + }); + } + else { + return Optional.none(); + } + }; + + // Consider moving to alloy once it takes shape. + const namedEvents = (name, handlers) => derive$1([ + config(name, handlers) + ]); + const unnamedEvents = (handlers) => namedEvents(generate$6('unnamed-events'), handlers); + const SimpleBehaviours = { + namedEvents, + unnamedEvents + }; + + const item = (disabled) => Disabling.config({ + disabled, + disableClass: 'tox-collection__item--state-disabled' + }); + const button = (disabled) => Disabling.config({ + disabled + }); + const splitButton = (disabled) => Disabling.config({ + disabled, + disableClass: 'tox-tbtn--disabled' + }); + const toolbarButton = (disabled) => Disabling.config({ + disabled, + disableClass: 'tox-tbtn--disabled', + useNative: false + }); + const DisablingConfigs = { + item, + button, + splitButton, + toolbarButton + }; + + const runWithApi = (info, comp) => { + const api = info.getApi(comp); + return (f) => { + f(api); + }; + }; + // These handlers are used for providing common onAttached and onDetached handlers. + // Essentially, the `editorOffCell` is used store the onDestroy function returned + // by onSetup. The reason onControlAttached doesn't create the cell itself, is because + // it also has to be passed into onControlDetached. We could make this function return + // the cell and the onAttachedHandler, but that would provide too much complexity. + const onControlAttached = (info, editorOffCell) => runOnAttached((comp) => { + if (isFunction(info.onBeforeSetup)) { + info.onBeforeSetup(comp); + } + const run = runWithApi(info, comp); + run((api) => { + const onDestroy = info.onSetup(api); + if (isFunction(onDestroy)) { + editorOffCell.set(onDestroy); + } + }); + }); + const onControlDetached = (getApi, editorOffCell) => runOnDetached((comp) => runWithApi(getApi, comp)(editorOffCell.get())); + const onContextFormControlDetached = (getApi, editorOffCell, valueState) => runOnDetached((comp) => { + valueState.set(Representing.getValue(comp)); + return runWithApi(getApi, comp)(editorOffCell.get()); + }); + + const UiStateChannel = 'silver.uistate'; + const messageSetDisabled = 'setDisabled'; + const messageSetEnabled = 'setEnabled'; + const messageInit = 'init'; + const messageSwitchMode = 'switchmode'; + const modeContextMessages = [messageSwitchMode, messageInit]; + const broadcastEvents = (uiRefs, messageType) => { + const outerContainer = uiRefs.mainUi.outerContainer; + const motherships = [uiRefs.mainUi.mothership, ...uiRefs.uiMotherships]; + if (messageType === messageSetDisabled) { + each$1(motherships, (m) => { + m.broadcastOn([dismissPopups()], { target: outerContainer.element }); + }); + } + each$1(motherships, (m) => { + m.broadcastOn([UiStateChannel], messageType); + }); + }; + const setupEventsForUi = (editor, uiRefs) => { + editor.on('init SwitchMode', (event) => { + broadcastEvents(uiRefs, event.type); + }); + editor.on('DisabledStateChange', (event) => { + if (!event.isDefaultPrevented()) { + // When the event state indicates the editor is **enabled** (`event.state` is false), + // we send an 'init' message instead of 'setEnabled' because the editor might be in read-only mode. + // Sending 'setEnabled' would enable all the toolbar buttons, which is undesirable if the editor is read-only. + const messageType = event.state ? messageSetDisabled : messageInit; + broadcastEvents(uiRefs, messageType); + // After refreshing the state of the buttons, trigger a NodeChange event. + if (!event.state) { + editor.nodeChanged(); + } + } + }); + editor.on('NodeChange', (e) => { + const messageType = editor.ui.isEnabled() ? e.type : messageSetDisabled; + broadcastEvents(uiRefs, messageType); + }); + if (isReadOnly(editor)) { + editor.mode.set('readonly'); + } + }; + const toggleOnReceive = (getContext) => Receiving.config({ + channels: { + [UiStateChannel]: { + onReceive: (comp, messageType) => { + if (messageType === messageSetDisabled || messageType === messageSetEnabled) { + Disabling.set(comp, messageType === messageSetDisabled); + return; + } + const { contextType, shouldDisable } = getContext(); + if (contextType === 'mode' && !contains$2(modeContextMessages, messageType)) { + return; + } + Disabling.set(comp, shouldDisable); + } + } + } + }); + + // Perform `action` when an item is clicked on, close menus, and stop event + const onMenuItemExecute = (info, itemResponse) => runOnExecute$1((comp, simulatedEvent) => { + // If there is an action, run the action + runWithApi(info, comp)(info.onAction); + if (!info.triggersSubmenu && itemResponse === ItemResponse$1.CLOSE_ON_EXECUTE) { + if (comp.getSystem().isConnected()) { + emit(comp, sandboxClose()); + } + simulatedEvent.stop(); + } + }); + const menuItemEventOrder = { + // TODO: use the constants provided by behaviours. + [execute$5()]: ['disabling', 'alloy.base.behaviour', 'toggling', 'item-events'] + }; + + const componentRenderPipeline = cat; + const renderCommonItem = (spec, structure, itemResponse, providersBackstage) => { + const editorOffCell = Cell(noop); + return { + type: 'item', + dom: structure.dom, + components: componentRenderPipeline(structure.optComponents), + data: spec.data, + eventOrder: menuItemEventOrder, + hasSubmenu: spec.triggersSubmenu, + itemBehaviours: derive$1([ + config('item-events', [ + onMenuItemExecute(spec, itemResponse), + onControlAttached(spec, editorOffCell), + onControlDetached(spec, editorOffCell) + ]), + DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + Replacing.config({}) + ].concat(spec.itemBehaviours)) + }; + }; + const buildData = (source) => ({ + value: source.value, + meta: { + text: source.text.getOr(''), + ...source.meta + } + }); + + const renderImage$1 = (spec, imageUrl) => { + const spinnerElement = SugarElement.fromTag('div'); + add$2(spinnerElement, 'tox-image-selector-loading-spinner'); + const addSpinnerElement = (loadingElement) => { + add$2(loadingElement, 'tox-image-selector-loading-spinner-wrapper'); + append$2(loadingElement, spinnerElement); + }; + const removeSpinnerElement = (loadingElement) => { + remove$3(loadingElement, 'tox-image-selector-loading-spinner-wrapper'); + remove$7(spinnerElement); + }; + return { + dom: { + tag: spec.tag, + attributes: spec.attributes ?? {}, + classes: spec.classes, + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-image-selector-image-wrapper'] + }, + components: [ + { + dom: { + tag: 'img', + attributes: { src: imageUrl }, + classes: ['tox-image-selector-image-img'] + } + }, + ] + }, + ...spec.checkMark.toArray() + ], + behaviours: derive$1([ + ...spec.behaviours ?? [], + config('render-image-events', [ + runOnAttached((component) => { + addSpinnerElement(component.element); + descendant(component.element, 'img').each((image$1) => { + image(image$1).catch((e) => { + // eslint-disable-next-line no-console + console.error(e); + }).finally(() => { + removeSpinnerElement(component.element); + }); + }); + }) + ]), + ]) + }; + }; + const render$3 = (imageUrl, spec) => renderImage$1(spec, imageUrl); + + // Converts shortcut format to Mac/PC variants + // Note: This is different to the help shortcut converter, as it doesn't padd the + symbol with spaces + // so as to not take up large amounts of space in the menus + const convertText = (source) => { + const isMac = global$7.os.isMacOS() || global$7.os.isiOS(); + const mac = { + alt: '\u2325', + ctrl: '\u2303', + shift: '\u21E7', + meta: '\u2318', + access: '\u2303\u2325' + }; + const other = { + meta: 'Ctrl', + access: 'Shift+Alt' + }; + const replace = isMac ? mac : other; + const shortcut = source.split('+'); + const updated = map$2(shortcut, (segment) => { + // search lowercase, but if not found use the original + const search = segment.toLowerCase().trim(); + return has$2(replace, search) ? replace[search] : segment; + }); + return isMac ? updated.join('') : updated.join('+'); + }; + + const renderIcon$2 = (name, icons, classes = [iconClass]) => render$4(name, { tag: 'div', classes }, icons); + const renderText = (text) => ({ + dom: { + tag: 'div', + classes: [textClass] + }, + components: [text$2(global$6.translate(text))] + }); + const renderHtml = (html, classes) => ({ + dom: { + tag: 'div', + classes, + innerHtml: html + } + }); + const renderStyledText = (style, text) => ({ + dom: { + tag: 'div', + classes: [textClass] + }, + components: [ + { + dom: { + tag: style.tag, + styles: style.styles + }, + components: [text$2(global$6.translate(text))] + } + ] + }); + const renderShortcut = (shortcut) => ({ + dom: { + tag: 'div', + classes: [accessoryClass] + }, + components: [ + text$2(convertText(shortcut)) + ] + }); + const renderCheckmark = (icons) => renderIcon$2('checkmark', icons, [checkmarkClass]); + const renderSubmenuCaret = (icons) => renderIcon$2('chevron-right', icons, [caretClass]); + const renderDownwardsCaret = (icons) => renderIcon$2('chevron-down', icons, [caretClass]); + const renderContainer = (container, components) => { + const directionClass = container.direction === 'vertical' ? containerColumnClass : containerRowClass; + const alignClass = container.align === 'left' ? containerAlignLeftClass : containerAlignRightClass; + const getValignClass = () => { + switch (container.valign) { + case 'top': + return containerValignTopClass; + case 'middle': + return containerValignMiddleClass; + case 'bottom': + return containerValignBottomClass; + } + }; + return { + dom: { + tag: 'div', + classes: [ + containerClass, + directionClass, + alignClass, + getValignClass() + ] + }, + components + }; + }; + const renderImage = (src, classes, alt) => ({ + dom: { + tag: 'img', + classes, + attributes: { + src, + alt: alt.getOr('') + } + } + }); + + const renderColorStructure = (item, providerBackstage, fallbackIcon) => { + const colorPickerCommand = 'custom'; + const removeColorCommand = 'remove'; + const itemValue = item.value; + const iconSvg = item.iconContent.map((name) => getOr(name, providerBackstage.icons, fallbackIcon)); + const attributes = item.ariaLabel.map((al) => ({ + 'aria-label': providerBackstage.translate(al), + 'data-mce-name': al + })).getOr({}); + const getDom = () => { + const common = colorClass; + const icon = iconSvg.getOr(''); + const baseDom = { + tag: 'div', + attributes, + classes: [common] + }; + if (itemValue === colorPickerCommand) { + return { + ...baseDom, + tag: 'button', + classes: [...baseDom.classes, 'tox-swatches__picker-btn'], + innerHtml: icon + }; + } + else if (itemValue === removeColorCommand) { + return { + ...baseDom, + classes: [...baseDom.classes, 'tox-swatch--remove'], + innerHtml: icon + }; + } + else if (isNonNullable(itemValue)) { + return { + ...baseDom, + attributes: { + ...baseDom.attributes, + 'data-mce-color': itemValue + }, + styles: { + 'background-color': itemValue + }, + innerHtml: icon + }; + } + else { + return baseDom; + } + }; + return { + dom: getDom(), + optComponents: [] + }; + }; + const renderItemDomStructure = (ariaLabel, classes) => { + const domTitle = ariaLabel.map((label) => ({ + attributes: { + 'id': generate$6('menu-item'), + 'aria-label': global$6.translate(label) + } + })).getOr({}); + return { + tag: 'div', + classes: [navClass, selectableClass].concat(classes), + ...domTitle + }; + }; + const createLabel = (label) => { + return { + dom: { + tag: 'label' + }, + components: [ + text$2(label) + ] + }; + }; + const renderNormalItemStructure = (info, providersBackstage, renderIcons, fallbackIcon) => { + // TODO: TINY-3036 Work out a better way of dealing with custom icons + const iconSpec = { tag: 'div', classes: [iconClass] }; + const renderIcon = (iconName) => render$4(iconName, iconSpec, providersBackstage.icons, fallbackIcon); + const renderEmptyIcon = () => Optional.some({ dom: iconSpec }); + // Note: renderIcons indicates if any icons are present in the menu - if false then the icon column will not be present for the whole menu + const leftIcon = renderIcons ? info.iconContent.map(renderIcon).orThunk(renderEmptyIcon) : Optional.none(); + // TINY-3345: Dedicated columns for icon and checkmark if applicable + const checkmark = info.checkMark; + // Style items and autocompleter both have meta. Need to branch on style + // This could probably be more stable... + const textRender = Optional.from(info.meta).fold(() => renderText, (meta) => has$2(meta, 'style') ? curry(renderStyledText, meta.style) : renderText); + const content = info.htmlContent.fold(() => info.textContent.map(textRender), (html) => Optional.some(renderHtml(html, [textClass]))); + const menuItem = { + dom: renderItemDomStructure(info.ariaLabel, []), + optComponents: [ + leftIcon, + content, + info.shortcutContent.map(renderShortcut), + checkmark, + info.caret, + info.labelContent.map(createLabel) + ] + }; + return menuItem; + }; + const renderImgItemStructure = (info) => { + const menuItem = { + dom: renderItemDomStructure(info.ariaLabel, [imageSelectorClasll]), + optComponents: [ + Optional.some(render$3(info.iconContent.getOrDie(), { tag: 'div', classes: [imageClass], checkMark: info.checkMark })), + info.labelContent.map(createLabel) + ] + }; + return menuItem; + }; + // TODO: Maybe need aria-label + const renderItemStructure = (info, providersBackstage, renderIcons, fallbackIcon = Optional.none()) => { + if (info.presets === 'color') { + return renderColorStructure(info, providersBackstage, fallbackIcon); + } + else if (info.presets === 'img') { + return renderImgItemStructure(info); + } + else { + return renderNormalItemStructure(info, providersBackstage, renderIcons, fallbackIcon); + } + }; + + // Use meta to pass through special information about the tooltip + // (yes this is horrible but it is not yet public API) + const tooltipBehaviour = (meta, sharedBackstage, tooltipText) => get$h(meta, 'tooltipWorker') + .map((tooltipWorker) => [ + Tooltipping.config({ + lazySink: sharedBackstage.getSink, + tooltipDom: { + tag: 'div', + classes: ['tox-tooltip-worker-container'] + }, + tooltipComponents: [], + anchor: (comp) => ({ + type: 'submenu', + item: comp, + overrides: { + // NOTE: this avoids it setting overflow and max-height. + maxHeightFunction: expandable$1 + } + }), + mode: 'follow-highlight', + onShow: (component, _tooltip) => { + tooltipWorker((elm) => { + Tooltipping.setComponents(component, [ + external({ element: SugarElement.fromDom(elm) }) + ]); + }); + } + }) + ]) + .getOrThunk(() => { + return tooltipText.map((text) => [ + Tooltipping.config({ + ...sharedBackstage.providers.tooltips.getConfig({ + tooltipText: text + }), + mode: 'follow-highlight' + }) + ]).getOr([]); + }); + const encodeText = (text) => global$9.DOM.encode(text); + const replaceText = (text, matchText) => { + const translated = global$6.translate(text); + const encoded = encodeText(translated); + if (matchText.length > 0) { + const escapedMatchRegex = new RegExp(escape(matchText), 'gi'); + return encoded.replace(escapedMatchRegex, (match) => `${match}`); + } + else { + return encoded; + } + }; + const renderAutocompleteItem = (spec, matchText, useText, presets, onItemValueHandler, itemResponse, sharedBackstage, renderIcons = true) => { + const structure = renderItemStructure({ + presets, + textContent: Optional.none(), + htmlContent: useText ? spec.text.map((text) => replaceText(text, matchText)) : Optional.none(), + ariaLabel: spec.text, + labelContent: Optional.none(), + iconContent: spec.icon, + shortcutContent: Optional.none(), + checkMark: Optional.none(), + caret: Optional.none(), + value: spec.value + }, sharedBackstage.providers, renderIcons, spec.icon); + const tooltipString = spec.text.filter((text) => !useText && text !== ''); + return renderCommonItem({ + context: 'mode:design', + data: buildData(spec), + enabled: spec.enabled, + getApi: constant$1({}), + onAction: (_api) => onItemValueHandler(spec.value, spec.meta), + onSetup: constant$1(noop), + triggersSubmenu: false, + itemBehaviours: tooltipBehaviour(spec, sharedBackstage, tooltipString) + }, structure, itemResponse, sharedBackstage.providers); + }; + + const render$2 = (items, extras) => map$2(items, (item) => { + switch (item.type) { + case 'cardcontainer': + return renderContainer(item, render$2(item.items, extras)); + case 'cardimage': + return renderImage(item.src, item.classes, item.alt); + case 'cardtext': + // Only highlight targeted text components + const shouldHighlight = item.name.exists((name) => contains$2(extras.cardText.highlightOn, name)); + const matchText = shouldHighlight ? Optional.from(extras.cardText.matchText).getOr('') : ''; + return renderHtml(replaceText(item.text, matchText), item.classes); + } + }); + const renderCardMenuItem = (spec, itemResponse, sharedBackstage, extras) => { + const getApi = (component) => ({ + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => { + Disabling.set(component, !state); + // Disable sub components + each$1(descendants(component.element, '*'), (elm) => { + component.getSystem().getByDom(elm).each((comp) => { + if (comp.hasConfigured(Disabling)) { + Disabling.set(comp, !state); + } + }); + }); + } + }); + const structure = { + dom: renderItemDomStructure(spec.label, []), + optComponents: [ + Optional.some({ + dom: { + tag: 'div', + classes: [containerClass, containerRowClass] + }, + components: render$2(spec.items, extras) + }) + ] + }; + return renderCommonItem({ + context: 'mode:design', + data: buildData({ text: Optional.none(), ...spec }), + enabled: spec.enabled, + getApi, + onAction: spec.onAction, + onSetup: spec.onSetup, + triggersSubmenu: false, + itemBehaviours: Optional.from(extras.itemBehaviours).getOr([]) + }, structure, itemResponse, sharedBackstage.providers); + }; + + const renderChoiceItem = (spec, useText, presets, onItemValueHandler, isSelected, itemResponse, providersBackstage, renderIcons = true) => { + const getApi = (component) => ({ + setActive: (state) => { + Toggling.set(component, state); + }, + isActive: () => Toggling.isOn(component), + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state) + }); + const structure = renderItemStructure({ + presets, + textContent: useText ? spec.text : Optional.none(), + htmlContent: Optional.none(), + labelContent: spec.label, + ariaLabel: spec.text, + iconContent: spec.icon, + shortcutContent: useText ? spec.shortcut : Optional.none(), + // useText essentially says that we have one column. In one column lists, we should show a tick + // The tick is controlled by the tickedClass (via css). It is always present + // but is hidden unless the tickedClass is present. + checkMark: useText ? Optional.some(renderCheckmark(providersBackstage.icons)) : Optional.none(), + caret: Optional.none(), + value: spec.value + }, providersBackstage, renderIcons); + const optTooltipping = spec.text + .filter(constant$1(!useText)) + .map((t) => Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate(t) + }))); + return deepMerge(renderCommonItem({ + context: spec.context, + data: buildData(spec), + enabled: spec.enabled, + getApi, + onAction: (_api) => onItemValueHandler(spec.value), + onSetup: (api) => { + api.setActive(isSelected); + return noop; + }, + triggersSubmenu: false, + itemBehaviours: [ + ...optTooltipping.toArray() + ] + }, structure, itemResponse, providersBackstage), { + toggling: { + toggleClass: tickedClass, + toggleOnExecute: false, + selected: spec.active, + exclusive: true + } + }); + }; + + const hexColour = (value) => ({ + value: normalizeHex(value) + }); + const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + const longformRegex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i; + const isHexString = (hex) => shorthandRegex.test(hex) || longformRegex.test(hex); + const normalizeHex = (hex) => removeLeading(hex, '#').toUpperCase(); + const fromString$1 = (hex) => isHexString(hex) ? Optional.some({ value: normalizeHex(hex) }) : Optional.none(); + // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") + const getLongForm = (hex) => { + const hexString = hex.value.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b); + return { value: hexString }; + }; + const extractValues = (hex) => { + const longForm = getLongForm(hex); + const splitForm = longformRegex.exec(longForm.value); + return splitForm === null ? ['FFFFFF', 'FF', 'FF', 'FF'] : splitForm; + }; + const toHex = (component) => { + const hex = component.toString(16); + return (hex.length === 1 ? '0' + hex : hex).toUpperCase(); + }; + const fromRgba = (rgbaColour) => { + const value = toHex(rgbaColour.red) + toHex(rgbaColour.green) + toHex(rgbaColour.blue); + return hexColour(value); + }; + + const hsvColour = (hue, saturation, value) => ({ + hue, + saturation, + value + }); + const fromRgb = (rgbaColour) => { + let h = 0; + let s = 0; + let v = 0; + const r = rgbaColour.red / 255; + const g = rgbaColour.green / 255; + const b = rgbaColour.blue / 255; + const minRGB = Math.min(r, Math.min(g, b)); + const maxRGB = Math.max(r, Math.max(g, b)); + if (minRGB === maxRGB) { + v = minRGB; + return hsvColour(0, 0, v * 100); + } + /* eslint no-nested-ternary:0 */ + const d = (r === minRGB) ? g - b : ((b === minRGB) ? r - g : b - r); + h = (r === minRGB) ? 3 : ((b === minRGB) ? 1 : 5); + h = 60 * (h - d / (maxRGB - minRGB)); + s = (maxRGB - minRGB) / maxRGB; + v = maxRGB; + return hsvColour(Math.round(h), Math.round(s * 100), Math.round(v * 100)); + }; + + const min = Math.min; + const max = Math.max; + const round$1 = Math.round; + const rgbRegex = /^\s*rgb\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*\)\s*$/i; + // This regex will match rgba(0, 0, 0, 0.5) or rgba(0, 0, 0, 50%) , or without commas + const rgbaRegex = /^\s*rgba\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*((?:\d?\.\d+|\d+)%?)\s*\)\s*$/i; + const rgbaColour = (red, green, blue, alpha) => ({ + red, + green, + blue, + alpha + }); + const isRgbaComponent = (value) => { + const num = parseInt(value, 10); + return num.toString() === value && num >= 0 && num <= 255; + }; + const fromHsv = (hsv) => { + let r; + let g; + let b; + const hue = (hsv.hue || 0) % 360; + let saturation = hsv.saturation / 100; + let brightness = hsv.value / 100; + saturation = max(0, min(saturation, 1)); + brightness = max(0, min(brightness, 1)); + if (saturation === 0) { + r = g = b = round$1(255 * brightness); + return rgbaColour(r, g, b, 1); + } + const side = hue / 60; + const chroma = brightness * saturation; + const x = chroma * (1 - Math.abs(side % 2 - 1)); + const match = brightness - chroma; + switch (Math.floor(side)) { + case 0: + r = chroma; + g = x; + b = 0; + break; + case 1: + r = x; + g = chroma; + b = 0; + break; + case 2: + r = 0; + g = chroma; + b = x; + break; + case 3: + r = 0; + g = x; + b = chroma; + break; + case 4: + r = x; + g = 0; + b = chroma; + break; + case 5: + r = chroma; + g = 0; + b = x; + break; + default: + r = g = b = 0; + } + r = round$1(255 * (r + match)); + g = round$1(255 * (g + match)); + b = round$1(255 * (b + match)); + return rgbaColour(r, g, b, 1); + }; + // Temporarily using: https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb + const fromHex = (hexColour) => { + const result = extractValues(hexColour); + const red = parseInt(result[1], 16); + const green = parseInt(result[2], 16); + const blue = parseInt(result[3], 16); + return rgbaColour(red, green, blue, 1); + }; + const fromStringValues = (red, green, blue, alpha) => { + const r = parseInt(red, 10); + const g = parseInt(green, 10); + const b = parseInt(blue, 10); + const a = parseFloat(alpha); + return rgbaColour(r, g, b, a); + }; + const fromString = (rgbaString) => { + const rgbMatch = rgbRegex.exec(rgbaString); + if (rgbMatch !== null) { + return Optional.some(fromStringValues(rgbMatch[1], rgbMatch[2], rgbMatch[3], '1')); + } + const rgbaMatch = rgbaRegex.exec(rgbaString); + if (rgbaMatch !== null) { + return Optional.some(fromStringValues(rgbaMatch[1], rgbaMatch[2], rgbaMatch[3], rgbaMatch[4])); + } + return Optional.none(); + }; + const toString = (rgba) => `rgba(${rgba.red},${rgba.green},${rgba.blue},${rgba.alpha})`; + const red = rgbaColour(255, 0, 0, 1); + + const hexToHsv = (hex) => fromRgb(fromHex(hex)); + const hsvToHex = (hsv) => fromRgba(fromHsv(hsv)); + const anyToHex = (color) => fromString$1(color) + .orThunk(() => fromString(color).map(fromRgba)) + .getOrThunk(() => { + // Not dealing with Hex or RGBA so use a canvas to parse the color + const canvas = document.createElement('canvas'); + canvas.height = 1; + canvas.width = 1; + const canvasContext = canvas.getContext('2d'); + // all valid colors after this point + canvasContext.clearRect(0, 0, canvas.width, canvas.height); + // invalid colors will be shown as white - the first assignment will pass and the second may be ignored + canvasContext.fillStyle = '#FFFFFF'; + canvasContext.fillStyle = color; + canvasContext.fillRect(0, 0, 1, 1); + const rgba = canvasContext.getImageData(0, 0, 1, 1).data; + const r = rgba[0]; + const g = rgba[1]; + const b = rgba[2]; + const a = rgba[3]; + return fromRgba(rgbaColour(r, g, b, a)); + }); + + const fireSkinLoaded$1 = (editor) => { + editor.dispatch('SkinLoaded'); + }; + const fireSkinLoadError$1 = (editor, error) => { + editor.dispatch('SkinLoadError', error); + }; + const fireResizeEditor = (editor) => { + editor.dispatch('ResizeEditor'); + }; + const fireResizeContent = (editor, e) => { + editor.dispatch('ResizeContent', e); + }; + const fireScrollContent = (editor, e) => { + editor.dispatch('ScrollContent', e); + }; + const fireTextColorChange = (editor, data) => { + editor.dispatch('TextColorChange', data); + }; + const fireAfterProgressState = (editor, state) => { + editor.dispatch('AfterProgressState', { state }); + }; + const fireResolveName = (editor, node) => editor.dispatch('ResolveName', { + name: node.nodeName.toLowerCase(), + target: node + }); + const fireToggleToolbarDrawer = (editor, state) => { + editor.dispatch('ToggleToolbarDrawer', { state }); + }; + const fireStylesTextUpdate = (editor, data) => { + editor.dispatch('StylesTextUpdate', data); + }; + const fireAlignTextUpdate = (editor, data) => { + editor.dispatch('AlignTextUpdate', data); + }; + const fireFontSizeTextUpdate = (editor, data) => { + editor.dispatch('FontSizeTextUpdate', data); + }; + const fireFontSizeInputTextUpdate = (editor, data) => { + editor.dispatch('FontSizeInputTextUpdate', data); + }; + const fireBlocksTextUpdate = (editor, data) => { + editor.dispatch('BlocksTextUpdate', data); + }; + const fireFontFamilyTextUpdate = (editor, data) => { + editor.dispatch('FontFamilyTextUpdate', data); + }; + const fireToggleSidebar = (editor) => { + editor.dispatch('ToggleSidebar'); + }; + const fireToggleView = (editor) => { + editor.dispatch('ToggleView'); + }; + const fireContextToolbarClose = (editor) => { + editor.dispatch('ContextToolbarClose'); + }; + const fireContextFormSlideBack = (editor) => { + editor.dispatch('ContextFormSlideBack'); + }; + + const composeUnbinders = (f, g) => () => { + f(); + g(); + }; + const onSetupEditableToggle = (editor, enabledPredicate = always) => onSetupEvent(editor, 'NodeChange', (api) => { + api.setEnabled(editor.selection.isEditable() && enabledPredicate()); + }); + const onSetupFormatToggle = (editor, name) => (api) => { + const boundFormatChangeCallback = unbindable(); + const init = () => { + api.setActive(editor.formatter.match(name)); + const binding = editor.formatter.formatChanged(name, api.setActive); + boundFormatChangeCallback.set(binding); + }; + // The editor may or may not have been setup yet, so check for that + editor.initialized ? init() : editor.once('init', init); + return () => { + editor.off('init', init); + boundFormatChangeCallback.clear(); + }; + }; + const onSetupStateToggle = (editor, name) => (api) => { + const unbindEditableToogle = onSetupEditableToggle(editor)(api); + const unbindFormatToggle = onSetupFormatToggle(editor, name)(api); + return () => { + unbindEditableToogle(); + unbindFormatToggle(); + }; + }; + const onSetupEvent = (editor, event, f) => (api) => { + const handleEvent = () => f(api); + const init = () => { + f(api); + editor.on(event, handleEvent); + }; + // The editor may or may not have been setup yet, so check for that + editor.initialized ? init() : editor.once('init', init); + return () => { + editor.off('init', init); + editor.off(event, handleEvent); + }; + }; + const onActionToggleFormat$1 = (editor) => (rawItem) => () => { + editor.undoManager.transact(() => { + editor.focus(); + editor.execCommand('mceToggleFormat', false, rawItem.format); + }); + }; + const onActionExecCommand = (editor, command) => () => editor.execCommand(command); + + var global$5 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage'); + + const cacheStorage = {}; + const ColorCache = (storageId, max = 10) => { + const storageString = global$5.getItem(storageId); + const localstorage = isString(storageString) ? JSON.parse(storageString) : []; + const prune = (list) => { + // When the localStorage cache is too big, + // remove the difference from the tail (head is fresh, tail is stale!) + const diff = max - list.length; + return (diff < 0) ? list.slice(0, max) : list; + }; + const cache = prune(localstorage); + const add = (key) => { + // Remove duplicates first. + indexOf(cache, key).each(remove); + cache.unshift(key); + // When max size is exceeded, the oldest colors will be removed + if (cache.length > max) { + cache.pop(); + } + global$5.setItem(storageId, JSON.stringify(cache)); + }; + const remove = (idx) => { + cache.splice(idx, 1); + }; + const state = () => cache.slice(0); + return { + add, + state + }; + }; + const getCacheForId = (id) => get$h(cacheStorage, id).getOrThunk(() => { + const storageId = `tinymce-custom-colors-${id}`; + const currentData = global$5.getItem(storageId); + if (isNullable(currentData)) { + const legacyDefault = global$5.getItem('tinymce-custom-colors'); + global$5.setItem(storageId, isNonNullable(legacyDefault) ? legacyDefault : '[]'); + } + const storage = ColorCache(storageId, 10); + cacheStorage[id] = storage; + return storage; + }); + const getCurrentColors = (id) => map$2(getCacheForId(id).state(), (color) => ({ + type: 'choiceitem', + text: color, + icon: 'checkmark', + value: color + })); + const addColor = (id, color) => { + getCacheForId(id).add(color); + }; + + const foregroundId = 'forecolor'; + const backgroundId = 'hilitecolor'; + const fallbackCols = 5; + const mapColors = (colorMap) => mapColorsRaw(colorMap.map((color, index) => { + if (index % 2 === 0) { + return '#' + anyToHex(color).value; + } + return color; + })); + const mapColorsRaw = (colorMap) => { + const colors = []; + for (let i = 0; i < colorMap.length; i += 2) { + colors.push({ + text: colorMap[i + 1], + value: colorMap[i], + icon: 'checkmark', + type: 'choiceitem' + }); + } + return colors; + }; + const option$1 = (name) => (editor) => editor.options.get(name); + const fallbackColor = '#000000'; + const register$e = (editor) => { + const registerOption = editor.options.register; + const colorProcessor = (value) => { + if (isArrayOf(value, isString)) { + return { value: mapColors(value), valid: true }; + } + else { + return { valid: false, message: 'Must be an array of strings.' }; + } + }; + const colorProcessorRaw = (value) => { + if (isArrayOf(value, isString)) { + return { value: mapColorsRaw(value), valid: true }; + } + else { + return { valid: false, message: 'Must be an array of strings.' }; + } + }; + const colorColsProcessor = (value) => { + if (isNumber(value) && value > 0) { + return { value, valid: true }; + } + else { + return { valid: false, message: 'Must be a positive number.' }; + } + }; + registerOption('color_map', { + processor: colorProcessor, + default: [ + '#BFEDD2', 'Light Green', + '#FBEEB8', 'Light Yellow', + '#F8CAC6', 'Light Red', + '#ECCAFA', 'Light Purple', + '#C2E0F4', 'Light Blue', + '#2DC26B', 'Green', + '#F1C40F', 'Yellow', + '#E03E2D', 'Red', + '#B96AD9', 'Purple', + '#3598DB', 'Blue', + '#169179', 'Dark Turquoise', + '#E67E23', 'Orange', + '#BA372A', 'Dark Red', + '#843FA1', 'Dark Purple', + '#236FA1', 'Dark Blue', + '#ECF0F1', 'Light Gray', + '#CED4D9', 'Medium Gray', + '#95A5A6', 'Gray', + '#7E8C8D', 'Dark Gray', + '#34495E', 'Navy Blue', + '#000000', 'Black', + '#ffffff', 'White' + ] + }); + registerOption('color_map_raw', { + processor: colorProcessorRaw, + }); + registerOption('color_map_background', { + processor: colorProcessor + }); + registerOption('color_map_foreground', { + processor: colorProcessor + }); + registerOption('color_cols', { + processor: colorColsProcessor, + default: calcCols(editor) + }); + registerOption('color_cols_foreground', { + processor: colorColsProcessor, + default: defaultCols(editor, foregroundId) + }); + registerOption('color_cols_background', { + processor: colorColsProcessor, + default: defaultCols(editor, backgroundId) + }); + registerOption('custom_colors', { + processor: 'boolean', + default: true + }); + registerOption('color_default_foreground', { + processor: 'string', + default: fallbackColor + }); + registerOption('color_default_background', { + processor: 'string', + default: fallbackColor + }); + }; + const getColors$2 = (editor, id) => { + if (id === foregroundId && editor.options.isSet('color_map_foreground')) { + return option$1('color_map_foreground')(editor); + } + else if (id === backgroundId && editor.options.isSet('color_map_background')) { + return option$1('color_map_background')(editor); + } + else if (editor.options.isSet('color_map_raw')) { + return option$1('color_map_raw')(editor); + } + else { + return option$1('color_map')(editor); + } + }; + const calcCols = (editor, id = 'default') => Math.max(fallbackCols, Math.ceil(Math.sqrt(getColors$2(editor, id).length))); + const defaultCols = (editor, id) => { + const defaultCols = option$1('color_cols')(editor); + const calculatedCols = calcCols(editor, id); + if (defaultCols === calcCols(editor)) { + return calculatedCols; + } + else { + return defaultCols; + } + }; + const getColorCols$1 = (editor, id = 'default') => { + const getCols = () => { + if (id === foregroundId) { + return option$1('color_cols_foreground')(editor); + } + else if (id === backgroundId) { + return option$1('color_cols_background')(editor); + } + else { + return option$1('color_cols')(editor); + } + }; + return Math.round(getCols()); + }; + const hasCustomColors$1 = option$1('custom_colors'); + const getDefaultForegroundColor = option$1('color_default_foreground'); + const getDefaultBackgroundColor = option$1('color_default_background'); + + const defaultBackgroundColor = 'rgba(0, 0, 0, 0)'; + const isValidBackgroundColor = (value) => fromString(value).exists((c) => c.alpha !== 0); + // Climb up the tree to find the value of the background until finding a non-transparent value or defaulting. + const getClosestCssBackgroundColorValue = (scope) => { + return closest(scope, (node) => { + if (isElement$1(node)) { + const color = get$e(node, 'background-color'); + return someIf(isValidBackgroundColor(color), color); + } + else { + return Optional.none(); + } + }).getOr(defaultBackgroundColor); + }; + const getCurrentColor = (editor, format) => { + const node = SugarElement.fromDom(editor.selection.getStart()); + const cssRgbValue = format === 'hilitecolor' + ? getClosestCssBackgroundColorValue(node) + : get$e(node, 'color'); + return fromString(cssRgbValue).map((rgba) => '#' + fromRgba(rgba).value); + }; + const applyFormat = (editor, format, value) => { + editor.undoManager.transact(() => { + editor.focus(); + editor.formatter.apply(format, { value }); + editor.nodeChanged(); + }); + }; + const removeFormat = (editor, format) => { + editor.undoManager.transact(() => { + editor.focus(); + editor.formatter.remove(format, { value: null }, undefined, true); + editor.nodeChanged(); + }); + }; + const registerCommands = (editor) => { + editor.addCommand('mceApplyTextcolor', (format, value) => { + applyFormat(editor, format, value); + }); + editor.addCommand('mceRemoveTextcolor', (format) => { + removeFormat(editor, format); + }); + }; + const getAdditionalColors = (hasCustom) => { + const type = 'choiceitem'; + const remove = { + type, + text: 'Remove color', + icon: 'color-swatch-remove-color', + value: 'remove' + }; + const custom = { + type, + text: 'Custom color', + icon: 'color-picker', + value: 'custom' + }; + return hasCustom ? [ + remove, + custom + ] : [remove]; + }; + const applyColor = (editor, format, value, onChoice) => { + if (value === 'custom') { + const dialog = colorPickerDialog(editor); + dialog((colorOpt) => { + colorOpt.each((color) => { + addColor(format, color); + editor.execCommand('mceApplyTextcolor', format, color); + onChoice(color); + }); + }, getCurrentColor(editor, format).getOr(fallbackColor)); + } + else if (value === 'remove') { + onChoice(''); + editor.execCommand('mceRemoveTextcolor', format); + } + else { + onChoice(value); + editor.execCommand('mceApplyTextcolor', format, value); + } + }; + const getColors$1 = (colors, id, hasCustom) => colors.concat(getCurrentColors(id).concat(getAdditionalColors(hasCustom))); + const getFetch$1 = (colors, id, hasCustom) => (callback) => { + callback(getColors$1(colors, id, hasCustom)); + }; + const setIconColor = (splitButtonApi, name, newColor) => { + const id = name === 'forecolor' ? 'tox-icon-text-color__color' : 'tox-icon-highlight-bg-color__color'; + splitButtonApi.setIconFill(id, newColor); + }; + const setTooltip = (buttonApi, tooltip) => { + buttonApi.setTooltip(tooltip); + }; + const select$1 = (editor, format) => (value) => { + const optCurrentHex = getCurrentColor(editor, format); + return is$1(optCurrentHex, value.toUpperCase()); + }; + // Selecting `Remove Color` would set the lastColor to '' + const getToolTipText = (editor, format, lastColor) => { + if (isEmpty(lastColor)) { + return format === 'forecolor' ? 'Text color' : 'Background color'; + } + const tooltipPrefix = format === 'forecolor' ? 'Text color {0}' : 'Background color {0}'; + const colors = getColors$1(getColors$2(editor, format), format, false); + const colorText = find$5(colors, (c) => c.value === lastColor).getOr({ text: '' }).text; + return editor.translate([tooltipPrefix, editor.translate(colorText)]); + }; + const registerTextColorButton = (editor, name, format, lastColor) => { + editor.ui.registry.addSplitButton(name, { + tooltip: getToolTipText(editor, format, lastColor.get()), + chevronTooltip: name === 'forecolor' ? 'Text color menu' : 'Background color menu', + presets: 'color', + icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color', + select: select$1(editor, format), + columns: getColorCols$1(editor, format), + fetch: getFetch$1(getColors$2(editor, format), format, hasCustomColors$1(editor)), + onAction: (_splitButtonApi) => { + applyColor(editor, format, lastColor.get(), noop); + }, + onItemAction: (_splitButtonApi, value) => { + applyColor(editor, format, value, (newColor) => { + lastColor.set(newColor); + fireTextColorChange(editor, { + name, + color: newColor + }); + }); + }, + onSetup: (splitButtonApi) => { + setIconColor(splitButtonApi, name, lastColor.get()); + const handler = (e) => { + if (e.name === name) { + setIconColor(splitButtonApi, e.name, e.color); + setTooltip(splitButtonApi, getToolTipText(editor, format, e.color)); + } + }; + editor.on('TextColorChange', handler); + return composeUnbinders(onSetupEditableToggle(editor)(splitButtonApi), () => { + editor.off('TextColorChange', handler); + }); + } + }); + }; + const registerTextColorMenuItem = (editor, name, format, text, lastColor) => { + editor.ui.registry.addNestedMenuItem(name, { + text, + icon: name === 'forecolor' ? 'text-color' : 'highlight-bg-color', + onSetup: (api) => { + setTooltip(api, getToolTipText(editor, format, lastColor.get())); + setIconColor(api, name, lastColor.get()); + return onSetupEditableToggle(editor)(api); + }, + getSubmenuItems: () => [ + { + type: 'fancymenuitem', + fancytype: 'colorswatch', + select: select$1(editor, format), + initData: { + storageKey: format, + }, + onAction: (data) => { + applyColor(editor, format, data.value, (newColor) => { + lastColor.set(newColor); + fireTextColorChange(editor, { + name, + color: newColor + }); + }); + }, + } + ] + }); + }; + const colorPickerDialog = (editor) => (callback, value) => { + let isValid = false; + const onSubmit = (api) => { + const data = api.getData(); + const hex = data.colorpicker; + if (isValid) { + callback(Optional.from(hex)); + api.close(); + } + else { + editor.windowManager.alert(editor.translate(['Invalid hex color code: {0}', hex])); + } + }; + const onAction = (_api, details) => { + if (details.name === 'hex-valid') { + isValid = details.value; + } + }; + const initialData = { + colorpicker: value + }; + editor.windowManager.open({ + title: 'Color Picker', + size: 'normal', + body: { + type: 'panel', + items: [ + { + type: 'colorpicker', + name: 'colorpicker', + label: 'Color' + } + ] + }, + buttons: [ + { + type: 'cancel', + name: 'cancel', + text: 'Cancel' + }, + { + type: 'submit', + name: 'save', + text: 'Save', + primary: true + } + ], + initialData, + onAction, + onSubmit, + onClose: noop, + onCancel: () => { + callback(Optional.none()); + } + }); + }; + const register$d = (editor) => { + registerCommands(editor); + const fallbackColorForeground = getDefaultForegroundColor(editor); + const fallbackColorBackground = getDefaultBackgroundColor(editor); + const lastForeColor = Cell(fallbackColorForeground); + const lastBackColor = Cell(fallbackColorBackground); + registerTextColorButton(editor, 'forecolor', 'forecolor', lastForeColor); + registerTextColorButton(editor, 'backcolor', 'hilitecolor', lastBackColor); + registerTextColorMenuItem(editor, 'forecolor', 'forecolor', 'Text color', lastForeColor); + registerTextColorMenuItem(editor, 'backcolor', 'hilitecolor', 'Background color', lastBackColor); + }; + + const renderImgItem = (spec, onItemValueHandler, isSelected, itemResponse, providersBackstage) => { + const getApi = (component) => ({ + setActive: (state) => { + Toggling.set(component, state); + }, + isActive: () => Toggling.isOn(component), + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state) + }); + const structure = renderItemStructure({ + presets: 'img', + textContent: Optional.none(), + htmlContent: Optional.none(), + ariaLabel: spec.tooltip, + iconContent: Optional.some(spec.url), + labelContent: spec.label, + shortcutContent: Optional.none(), + checkMark: Optional.some(renderCheckmark(providersBackstage.icons)), + caret: Optional.none(), + value: spec.value + }, providersBackstage, true); + const optTooltipping = spec.tooltip + .map((t) => Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate(t) + }))); + return deepMerge(renderCommonItem({ + context: spec.context, + data: buildData(spec), + enabled: spec.enabled, + getApi, + onAction: (api) => { + onItemValueHandler(spec.value); + api.setActive(true); + }, + onSetup: (api) => { + api.setActive(isSelected); + return noop; + }, + triggersSubmenu: false, + itemBehaviours: [ + ...optTooltipping.toArray() + ] + }, structure, itemResponse, providersBackstage), { + toggling: { + toggleClass: tickedClass, + toggleOnExecute: false, + selected: spec.active, + exclusive: true + } + }); + }; + + const createPartialChoiceMenu = (value, items, onItemValueHandler, columns, presets, itemResponse, select, providersBackstage) => { + const hasIcons = menuHasIcons(items); + const presetItemTypes = presets !== 'color' ? 'normal' : 'color'; + const alloyItems = createChoiceItems(items, onItemValueHandler, columns, presetItemTypes, itemResponse, select, providersBackstage); + const menuLayout = { + menuType: presets + }; + return createPartialMenuWithAlloyItems(value, hasIcons, alloyItems, columns, menuLayout); + }; + const createChoiceItems = (items, onItemValueHandler, columns, itemPresets, itemResponse, select, providersBackstage) => cat(map$2(items, (item) => { + if (item.type === 'choiceitem') { + return createChoiceMenuItem(item).fold(handleError, (d) => Optional.some(renderChoiceItem(d, columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items)))); + } + else if (item.type === 'imageitem') { + return createImageMenuItem(item).fold(handleError, (d) => Optional.some(renderImgItem(d, onItemValueHandler, select(d.value), itemResponse, providersBackstage))); + } + else if (item.type === 'resetimage') { + return createResetImageItem(item).fold(handleError, (d) => Optional.some(renderChoiceItem(({ + ...d, + type: 'choiceitem', + text: d.tooltip, + icon: Optional.some(d.icon), + label: Optional.some(d.label), + }), columns === 1, itemPresets, onItemValueHandler, select(d.value), itemResponse, providersBackstage, menuHasIcons(items)))); + } + else { + return Optional.none(); + } + })); + + const deriveMenuMovement = (columns, presets) => { + const menuMarkers = markers(presets); + if (columns === 1) { + return { mode: 'menu', moveOnTab: true }; + } + else if (columns === 'auto') { + return { + mode: 'grid', + selector: '.' + menuMarkers.item, + initSize: { + numColumns: 1, + numRows: 1 + } + }; + } + else { + const rowClass = { + color: 'tox-swatches__row', + imageselector: 'tox-image-selector__row', + listpreview: 'tox-collection__group', + normal: 'tox-collection__group' + }[presets]; + return { + mode: 'matrix', + rowSelector: '.' + rowClass, + previousSelector: (menu) => { + // We only want the navigation to start on the selected item if we are in color-mode (The colorswatch) + return presets === 'color' + ? descendant(menu.element, '[aria-checked=true]') + : Optional.none(); + } + }; + } + }; + const deriveCollectionMovement = (columns, presets) => { + if (columns === 1) { + return { + mode: 'menu', + moveOnTab: false, + selector: '.tox-collection__item' + }; + } + else if (columns === 'auto') { + return { + mode: 'flatgrid', + selector: '.' + 'tox-collection__item', + initSize: { + numColumns: 1, + numRows: 1 + } + }; + } + else { + return { + mode: 'matrix', + selectors: { + row: presets === 'color' ? '.tox-swatches__row' : '.tox-collection__group', + cell: presets === 'color' ? `.${colorClass}` : `.${selectableClass}` + } + }; + } + }; + + const renderColorSwatchItem = (spec, backstage) => { + const items = getColorItems(spec, backstage); + const columns = backstage.colorinput.getColorCols(spec.initData.storageKey); + const presets = 'color'; + const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), items, (value) => { + spec.onAction({ value }); + }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), backstage.shared.providers); + const widgetSpec = { + ...menuSpec, + markers: markers(presets), + movement: deriveMenuMovement(columns, presets), + // TINY-10806: Avoid duplication of ARIA role="menu" in the accessibility tree for Color Swatch menu item. + showMenuRole: false + }; + return { + type: 'widget', + data: { value: generate$6('widget-id') }, + dom: { + tag: 'div', + classes: ['tox-fancymenuitem'] + }, + autofocus: true, + components: [ + parts$7.widget(Menu.sketch(widgetSpec)) + ] + }; + }; + const getColorItems = (spec, backstage) => { + const useCustomColors = spec.initData.allowCustomColors && backstage.colorinput.hasCustomColors(); + return spec.initData.colors.fold(() => getColors$1(backstage.colorinput.getColors(spec.initData.storageKey), spec.initData.storageKey, useCustomColors), (colors) => colors.concat(getAdditionalColors(useCustomColors))); + }; + + const renderImageSelector = (spec, backstage) => { + const presets = 'imageselector'; + const columns = spec.initData.columns; + const menuSpec = createPartialChoiceMenu(generate$6('menu-value'), spec.initData.items, (value) => { + spec.onAction({ value }); + }, columns, presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), backstage.shared.providers); + const widgetSpec = { + ...menuSpec, + markers: markers(presets), + movement: deriveMenuMovement(columns, presets), + // TINY-10806: Avoid duplication of ARIA role="menu" in the accessibility tree for Image Selector menu item. + showMenuRole: false + }; + return { + type: 'widget', + data: { value: generate$6('widget-id') }, + dom: { + tag: 'div', + classes: ['tox-fancymenuitem', 'tox-collection--toolbar'] + }, + autofocus: true, + components: [ + parts$7.widget(Menu.sketch(widgetSpec)) + ] + }; + }; + + const cellOverEvent = generate$6('cell-over'); + const cellExecuteEvent = generate$6('cell-execute'); + const makeAnnouncementText = (backstage) => (row, col) => backstage.shared.providers.translate(['{0} columns, {1} rows', col, row]); + const makeCell = (row, col, label) => { + const emitCellOver = (c) => emitWith(c, cellOverEvent, { row, col }); + const emitExecute = (c) => emitWith(c, cellExecuteEvent, { row, col }); + const onClick = (c, se) => { + se.stop(); + emitExecute(c); + }; + return build$1({ + dom: { + tag: 'div', + attributes: { + role: 'button', + ['aria-label']: label + } + }, + behaviours: derive$1([ + config('insert-table-picker-cell', [ + run$1(mouseover(), Focusing.focus), + run$1(execute$5(), emitExecute), + run$1(click(), onClick), + run$1(tap(), onClick) + ]), + Toggling.config({ + toggleClass: 'tox-insert-table-picker__selected', + toggleOnExecute: false + }), + Focusing.config({ onFocus: emitCellOver }) + ]) + }); + }; + const makeCells = (getCellLabel, numRows, numCols) => { + const cells = []; + for (let i = 0; i < numRows; i++) { + const row = []; + for (let j = 0; j < numCols; j++) { + const label = getCellLabel(i + 1, j + 1); + row.push(makeCell(i, j, label)); + } + cells.push(row); + } + return cells; + }; + const selectCells = (cells, selectedRow, selectedColumn, numRows, numColumns) => { + for (let i = 0; i < numRows; i++) { + for (let j = 0; j < numColumns; j++) { + Toggling.set(cells[i][j], i <= selectedRow && j <= selectedColumn); + } + } + }; + const makeComponents = (cells) => bind$3(cells, (cellRow) => map$2(cellRow, premade)); + const makeLabelText = (row, col) => text$2(`${col}x${row}`); + const renderInsertTableMenuItem = (spec, backstage) => { + const numRows = 10; + const numColumns = 10; + const getCellLabel = makeAnnouncementText(backstage); + const cells = makeCells(getCellLabel, numRows, numColumns); + const emptyLabelText = makeLabelText(0, 0); + const memLabel = record({ + dom: { + tag: 'span', + classes: ['tox-insert-table-picker__label'], + }, + components: [emptyLabelText], + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + return { + type: 'widget', + data: { value: generate$6('widget-id') }, + dom: { + tag: 'div', + classes: ['tox-fancymenuitem'] + }, + autofocus: true, + components: [parts$7.widget({ + dom: { + tag: 'div', + classes: ['tox-insert-table-picker'] + }, + components: makeComponents(cells).concat(memLabel.asSpec()), + behaviours: derive$1([ + config('insert-table-picker', [ + runOnAttached((c) => { + // Restore the empty label when opened, otherwise it may still be using an old label from last time it was opened + Replacing.set(memLabel.get(c), [emptyLabelText]); + }), + runWithTarget(cellOverEvent, (c, t, e) => { + const { row, col } = e.event; + selectCells(cells, row, col, numRows, numColumns); + Replacing.set(memLabel.get(c), [makeLabelText(row + 1, col + 1)]); + }), + runWithTarget(cellExecuteEvent, (c, _, e) => { + const { row, col } = e.event; + // Close the sandbox before triggering the action + emit(c, sandboxClose()); + spec.onAction({ numRows: row + 1, numColumns: col + 1 }); + }) + ]), + Keying.config({ + initSize: { + numRows, + numColumns + }, + mode: 'flatgrid', + selector: '[role="button"]' + }) + ]) + })] + }; + }; + + const fancyMenuItems = { + inserttable: renderInsertTableMenuItem, + colorswatch: renderColorSwatchItem, + imageselect: renderImageSelector + }; + const renderFancyMenuItem = (spec, backstage) => get$h(fancyMenuItems, spec.fancytype).map((render) => render(spec, backstage)); + + // Note, this does not create a valid SketchSpec. + const renderNestedItem = (spec, itemResponse, providersBackstage, renderIcons = true, downwardsCaret = false) => { + const caret = downwardsCaret ? renderDownwardsCaret(providersBackstage.icons) : renderSubmenuCaret(providersBackstage.icons); + const getApi = (component) => ({ + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state), + setIconFill: (id, value) => { + descendant(component.element, `svg path[class="${id}"], rect[class="${id}"]`).each((underlinePath) => { + set$9(underlinePath, 'fill', value); + }); + }, + setTooltip: (tooltip) => { + const translatedTooltip = providersBackstage.translate(tooltip); + set$9(component.element, 'aria-label', translatedTooltip); + } + }); + const structure = renderItemStructure({ + presets: 'normal', + iconContent: spec.icon, + textContent: spec.text, + htmlContent: Optional.none(), + ariaLabel: spec.text, + labelContent: Optional.none(), + caret: Optional.some(caret), + checkMark: Optional.none(), + shortcutContent: spec.shortcut + }, providersBackstage, renderIcons); + return renderCommonItem({ + context: spec.context, + data: buildData(spec), + getApi, + enabled: spec.enabled, + onAction: noop, + onSetup: spec.onSetup, + triggersSubmenu: true, + itemBehaviours: [] + }, structure, itemResponse, providersBackstage); + }; + + // Note, this does not create a valid SketchSpec. + const renderNormalItem = (spec, itemResponse, providersBackstage, renderIcons = true) => { + const getApi = (component) => ({ + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state) + }); + const structure = renderItemStructure({ + presets: 'normal', + iconContent: spec.icon, + textContent: spec.text, + htmlContent: Optional.none(), + labelContent: Optional.none(), + ariaLabel: spec.text, + caret: Optional.none(), + checkMark: Optional.none(), + shortcutContent: spec.shortcut + }, providersBackstage, renderIcons); + return renderCommonItem({ + context: spec.context, + data: buildData(spec), + getApi, + enabled: spec.enabled, + onAction: spec.onAction, + onSetup: spec.onSetup, + triggersSubmenu: false, + itemBehaviours: [] + }, structure, itemResponse, providersBackstage); + }; + + const renderSeparatorItem = (spec) => ({ + type: 'separator', + dom: { + tag: 'div', + classes: [selectableClass, groupHeadingClass] + }, + components: spec.text.map(text$2).toArray() + }); + + const renderToggleMenuItem = (spec, itemResponse, providersBackstage, renderIcons = true) => { + const getApi = (component) => ({ + setActive: (state) => { + Toggling.set(component, state); + }, + isActive: () => Toggling.isOn(component), + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state) + }); + // BespokeSelects use meta to pass through styling information. Bespokes should only + // be togglemenuitems hence meta is only passed through in this MenuItem. + const structure = renderItemStructure({ + iconContent: spec.icon, + textContent: spec.text, + htmlContent: Optional.none(), + labelContent: Optional.none(), + ariaLabel: spec.text, + checkMark: Optional.some(renderCheckmark(providersBackstage.icons)), + caret: Optional.none(), + shortcutContent: spec.shortcut, + presets: 'normal', + meta: spec.meta + }, providersBackstage, renderIcons); + return deepMerge(renderCommonItem({ + context: spec.context, + data: buildData(spec), + enabled: spec.enabled, + getApi, + onAction: spec.onAction, + onSetup: spec.onSetup, + triggersSubmenu: false, + itemBehaviours: [] + }, structure, itemResponse, providersBackstage), { + toggling: { + toggleClass: tickedClass, + toggleOnExecute: false, + selected: spec.active + }, + role: spec.role.getOrUndefined() + }); + }; + + const autocomplete = renderAutocompleteItem; + const separator$3 = renderSeparatorItem; + const normal = renderNormalItem; + const nested = renderNestedItem; + const toggle = renderToggleMenuItem; + const fancy = renderFancyMenuItem; + const card = renderCardMenuItem; + + const identifyMenuLayout = (searchMode) => { + switch (searchMode.searchMode) { + case 'no-search': { + return { + menuType: 'normal' + }; + } + default: { + return { + menuType: 'searchable', + searchMode + }; + } + } + }; + const handleRefetchTrigger = (originalSandboxComp) => { + // At the moment, a Sandbox is "Represented" by its triggering Dropdown. + // We'll want to make this an official API, in case we change it later. + const dropdown = Representing.getValue(originalSandboxComp); + // Because refetch will replace the entire menu, we need to store the + // original version of the searcher state, so that we can reinstate it + // after the fetch completes (which is async) + const optSearcherState = findWithinSandbox(originalSandboxComp).map(saveState); + Dropdown.refetch(dropdown).get(() => { + // It has completed, so now find the searcher and set its value + // again. We can't just use the originalSandbox, because that will + // have been thrown away and recreated by now. + const newSandboxComp = Coupling.getCoupled(dropdown, 'sandbox'); + optSearcherState.each((searcherState) => findWithinSandbox(newSandboxComp).each((inputComp) => restoreState(inputComp, searcherState))); + }); + }; + // This event is triggered by the searcher for key events + // that should be handled by the currently selected item + // (that is, the one with *fake* focus, not real focus). So we + // need to redispatch them to the selected item in the sandbox. + const handleRedirectToMenuItem = (sandboxComp, se) => { + getActiveMenuItemFrom(sandboxComp).each((activeItem) => { + retargetAndDispatchWith(sandboxComp, activeItem.element, se.event.eventType, se.event.interactionEvent); + }); + }; + // This function is useful when you have fakeFocus, so you can't just find the + // currently focused item (or the item that triggered a key event). It relies on + // the following relationships between components + // The Sandbox creates a tieredmenu, so Sandboxing.getState returns the TieredMenu + // The TieredMenu uses Highlighting for managing which menus are active, so + // Highlighting.getHighlighted(tmenu) is the current active menu + // The Menu uses highlighting to manage the active item, so use + // Highlighting.getHighlighted(menu) to get the current item. + const getActiveMenuItemFrom = (sandboxComp) => { + // Consider moving some of these things into shared APIs. For example, make an extra API + // for TieredMenu to get the highlighted item. + return Sandboxing.getState(sandboxComp) + .bind(Highlighting.getHighlighted) + .bind(Highlighting.getHighlighted); + }; + const getSearchResults = (activeMenuComp) => { + // Depending on the menu layout, the search results will either be the entire + // menu, or something within the menu. + return has(activeMenuComp.element, searchResultsClass) + ? Optional.some(activeMenuComp.element) + : descendant(activeMenuComp.element, '.' + searchResultsClass); + }; + // Model the interaction with ARIA + const updateAriaOnHighlight = (tmenuComp, menuComp, itemComp) => { + // This ARIA behaviour is based on the algolia example documented in TINY-8952 + findWithinMenu(tmenuComp).each((inputComp) => { + setActiveDescendant(inputComp, itemComp); + const optActiveResults = getSearchResults(menuComp); + optActiveResults.each((resultsElem) => { + // Link aria-controls of the input to the id of the results container. + getOpt(resultsElem, 'id') + .each((controlledId) => set$9(inputComp.element, 'aria-controls', controlledId)); + }); + }); + // Update the aria-selected on the item. The removal is handled by onDehighlight + set$9(itemComp.element, 'aria-selected', 'true'); + }; + const updateAriaOnDehighlight = (tmenuComp, menuComp, itemComp) => { + // This ARIA behaviour is based on the algolia example documented in TINY-8952 + set$9(itemComp.element, 'aria-selected', 'false'); + }; + const focusSearchField = (tmenuComp) => { + findWithinMenu(tmenuComp).each((searcherComp) => Focusing.focus(searcherComp)); + }; + const getSearchPattern = (dropdownComp) => { + // Dropdowns are "coupled" with their sandbox and generally, create them on demand. + // When using "getExistingCoupled" of Coupling, it only returns the coupled + // component (here: the sandbox) if it already exists ... it won't do any creation. + // So here, we are trying to get possible fetchContext information for our fetch + // callback. If there is no sandbox, then there is no open menu, and we + // don't have any search context, so use an empty string. Otherwise, dive into + // the sandbox, and find the search field's current pattern. + const optSandboxComp = Coupling.getExistingCoupled(dropdownComp, 'sandbox'); + return optSandboxComp + .bind(findWithinSandbox) + .map(saveState) + .map((state) => state.fetchPattern) + .getOr(''); + }; + + var FocusMode; + (function (FocusMode) { + FocusMode[FocusMode["ContentFocus"] = 0] = "ContentFocus"; + FocusMode[FocusMode["UiFocus"] = 1] = "UiFocus"; + })(FocusMode || (FocusMode = {})); + const createMenuItemFromBridge = (item, itemResponse, backstage, menuHasIcons, isHorizontalMenu) => { + const providersBackstage = backstage.shared.providers; + // If we're making a horizontal menu (mobile context menu) we want text OR icons + // to simplify the UI. We also don't want shortcut text. + const parseForHorizontalMenu = (menuitem) => !isHorizontalMenu ? menuitem : ({ + ...menuitem, + shortcut: Optional.none(), + icon: menuitem.text.isSome() ? Optional.none() : menuitem.icon + }); + switch (item.type) { + case 'menuitem': + return createMenuItem(item).fold(handleError, (d) => Optional.some(normal(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons))); + case 'nestedmenuitem': + return createNestedMenuItem(item).fold(handleError, (d) => Optional.some(nested(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons, isHorizontalMenu))); + case 'togglemenuitem': + return createToggleMenuItem(item).fold(handleError, (d) => Optional.some(toggle(parseForHorizontalMenu(d), itemResponse, providersBackstage, menuHasIcons))); + case 'separator': + return createSeparatorMenuItem(item).fold(handleError, (d) => Optional.some(separator$3(d))); + case 'fancymenuitem': + return createFancyMenuItem(item).fold(handleError, + // Fancy menu items don't have shortcuts or icons + (d) => fancy(d, backstage)); + default: { + // eslint-disable-next-line no-console + console.error('Unknown item in general menu', item); + return Optional.none(); + } + } + }; + const createAutocompleteItems = (items, matchText, onItemValueHandler, columns, itemResponse, sharedBackstage, highlightOn) => { + // Render text and icons if we're using a single column, otherwise only render icons + const renderText = columns === 1; + const renderIcons = !renderText || menuHasIcons(items); + return cat(map$2(items, (item) => { + switch (item.type) { + case 'separator': + return createSeparatorItem(item).fold(handleError, (d) => Optional.some(separator$3(d))); + case 'cardmenuitem': + return createCardMenuItem(item).fold(handleError, (d) => Optional.some(card({ + ...d, + // Intercept action + onAction: (api) => { + d.onAction(api); + onItemValueHandler(d.value, d.meta); + } + }, itemResponse, sharedBackstage, { + itemBehaviours: tooltipBehaviour(d.meta, sharedBackstage, Optional.none()), + cardText: { + matchText, + highlightOn + } + }))); + case 'autocompleteitem': + default: + return createAutocompleterItem(item).fold(handleError, (d) => Optional.some(autocomplete(d, matchText, renderText, 'normal', onItemValueHandler, itemResponse, sharedBackstage, renderIcons))); + } + })); + }; + const createPartialMenu = (value, items, itemResponse, backstage, isHorizontalMenu, searchMode) => { + const hasIcons = menuHasIcons(items); + const alloyItems = cat(map$2(items, (item) => { + // Have to check each item for an icon, instead of as part of hasIcons above, + // else in horizontal menus, items with an icon but without text will display + // with neither + const itemHasIcon = (i) => isHorizontalMenu ? !has$2(i, 'text') : hasIcons; + const createItem = (i) => createMenuItemFromBridge(i, itemResponse, backstage, itemHasIcon(i), isHorizontalMenu); + if (item.type === 'nestedmenuitem' && item.getSubmenuItems().length <= 0) { + return createItem({ ...item, enabled: false }); + } + else { + return createItem(item); + } + })); + // The menu layout is dependent upon our search mode. + const menuLayout = identifyMenuLayout(searchMode); + const createPartial = isHorizontalMenu ? + createHorizontalPartialMenuWithAlloyItems : + createPartialMenuWithAlloyItems; + return createPartial(value, hasIcons, alloyItems, 1, menuLayout); + }; + const createTieredDataFrom = (partialMenu) => tieredMenu.singleData(partialMenu.value, partialMenu); + const createInlineMenuFrom = (partialMenu, columns, focusMode, presets) => { + const movement = deriveMenuMovement(columns, presets); + const menuMarkers = markers(presets); + return { + data: createTieredDataFrom({ + ...partialMenu, + movement, + menuBehaviours: SimpleBehaviours.unnamedEvents(columns !== 'auto' ? [] : [ + runOnAttached((comp, _se) => { + detectSize(comp, 4, menuMarkers.item).each(({ numColumns, numRows }) => { + Keying.setGridSize(comp, numRows, numColumns); + }); + }) + ]) + }), + menu: { + markers: markers(presets), + fakeFocus: focusMode === FocusMode.ContentFocus + } + }; + }; + + const rangeToSimRange = (r) => SimRange.create(SugarElement.fromDom(r.startContainer), r.startOffset, SugarElement.fromDom(r.endContainer), r.endOffset); + const register$c = (editor, sharedBackstage) => { + const autocompleterId = generate$6('autocompleter'); + const processingAction = Cell(false); + const activeState = Cell(false); + const activeRange = value$2(); + const autocompleter = build$1(InlineView.sketch({ + dom: { + tag: 'div', + classes: ['tox-autocompleter'], + attributes: { + id: autocompleterId + } + }, + components: [], + fireDismissalEventInstead: {}, + inlineBehaviours: derive$1([ + config('dismissAutocompleter', [ + run$1(dismissRequested(), () => cancelIfNecessary()), + run$1(highlight$1(), (_, se) => { + getOpt(se.event.target, 'id').each((id) => set$9(SugarElement.fromDom(editor.getBody()), 'aria-activedescendant', id)); + }), + ]) + ]), + lazySink: sharedBackstage.getSink + })); + const isMenuOpen = () => InlineView.isOpen(autocompleter); + const isActive = activeState.get; + const hideIfNecessary = () => { + if (isMenuOpen()) { + InlineView.hide(autocompleter); + editor.dom.remove(autocompleterId, false); + const editorBody = SugarElement.fromDom(editor.getBody()); + getOpt(editorBody, 'aria-owns') + .filter((ariaOwnsAttr) => ariaOwnsAttr === autocompleterId) + .each(() => { + remove$8(editorBody, 'aria-owns'); + remove$8(editorBody, 'aria-activedescendant'); + }); + } + }; + const getMenu = () => InlineView.getContent(autocompleter).bind((tmenu) => { + // The autocompleter menu will be the first child component of the tiered menu. + // Unfortunately a memento can't be used to do this lookup because the component + // id is changed while generating the tiered menu. + return get$i(tmenu.components(), 0); + }); + const cancelIfNecessary = () => editor.execCommand('mceAutocompleterClose'); + const getCombinedItems = (matches) => { + const columns = findMap(matches, (m) => Optional.from(m.columns)).getOr(1); + return bind$3(matches, (match) => { + const choices = match.items; + return createAutocompleteItems(choices, match.matchText, (itemValue, itemMeta) => { + const autocompleterApi = { + hide: () => cancelIfNecessary(), + reload: (fetchOptions) => { + hideIfNecessary(); + editor.execCommand('mceAutocompleterReload', false, { fetchOptions }); + } + }; + // Asks the editor for a new active range that emits an event that updates + // the activeRange state not ideal but trying to avoid direct method calls to the core. + // We need to get a fresh range since when you hit enter the IME commits and the updates the DOM so we then need to rescan. + editor.execCommand('mceAutocompleterRefreshActiveRange'); + activeRange.get().each((range) => { + processingAction.set(true); + match.onAction(autocompleterApi, range, itemValue, itemMeta); + processingAction.set(false); + }); + }, columns, ItemResponse$1.BUBBLE_TO_SANDBOX, sharedBackstage, match.highlightOn); + }); + }; + const display = (lookupData, items) => { + // Display the autocompleter menu + const columns = findMap(lookupData, (ld) => Optional.from(ld.columns)).getOr(1); + InlineView.showMenuAt(autocompleter, { + anchor: { + type: 'selection', + getSelection: () => activeRange.get().map(rangeToSimRange), + root: SugarElement.fromDom(editor.getBody()), + } + }, createInlineMenuFrom(createPartialMenuWithAlloyItems('autocompleter-value', true, items, columns, { menuType: 'normal' }), columns, FocusMode.ContentFocus, + // Use the constant. + 'normal')); + getMenu().each(Highlighting.highlightFirst); + }; + const updateDisplay = (lookupData) => { + const combinedItems = getCombinedItems(lookupData); + // Open the autocompleter if there are items to show + if (combinedItems.length > 0) { + display(lookupData, combinedItems); + set$9(SugarElement.fromDom(editor.getBody()), 'aria-owns', autocompleterId); + if (!editor.inline) { + cloneAutocompleterToEditorDoc(); + } + } + else { + hideIfNecessary(); + } + }; + const cloneAutocompleterToEditorDoc = () => { + if (editor.dom.get(autocompleterId)) { + editor.dom.remove(autocompleterId, false); + } + const docElm = editor.getDoc().documentElement; + const selection = editor.selection.getNode(); + const newElm = deep(autocompleter.element); + setAll(newElm, { + border: '0', + clip: 'rect(0 0 0 0)', + height: '1px', + margin: '-1px', + overflow: 'hidden', + padding: '0', + position: 'absolute', + width: '1px', + top: `${selection.offsetTop}px`, + left: `${selection.offsetLeft}px`, + }); + editor.dom.add(docElm, newElm.dom); + // Clean up positioning styles so that the "hidden" autocompleter is around the selection + descendant(newElm, '[role="menu"]').each((child) => { + remove$6(child, 'position'); + remove$6(child, 'max-height'); + }); + }; + editor.on('AutocompleterStart', ({ lookupData }) => { + activeState.set(true); + processingAction.set(false); + updateDisplay(lookupData); + }); + editor.on('AutocompleterUpdate', ({ lookupData }) => updateDisplay(lookupData)); + editor.on('AutocompleterUpdateActiveRange', ({ range }) => activeRange.set(range)); + editor.on('AutocompleterEnd', () => { + // Hide the menu and reset + hideIfNecessary(); + activeState.set(false); + processingAction.set(false); + activeRange.clear(); + }); + const autocompleterUiApi = { + cancelIfNecessary, + isMenuOpen, + isActive, + isProcessingAction: processingAction.get, + getMenu + }; + AutocompleterEditorEvents.setup(autocompleterUiApi, editor); + }; + const Autocompleter = { + register: register$c + }; + + const renderBar = (spec, backstage) => ({ + dom: { + tag: 'div', + classes: ['tox-bar', 'tox-form__controls-h-stack'] + }, + components: map$2(spec.items, backstage.interpreter) + }); + + var global$4 = tinymce.util.Tools.resolve('tinymce.html.Entities'); + + const renderFormFieldWith = (pLabel, pField, extraClasses, extraBehaviours) => { + const spec = renderFormFieldSpecWith(pLabel, pField, extraClasses, extraBehaviours); + return FormField.sketch(spec); + }; + const renderFormField = (pLabel, pField) => renderFormFieldWith(pLabel, pField, [], []); + const renderFormFieldSpecWith = (pLabel, pField, extraClasses, extraBehaviours) => ({ + dom: renderFormFieldDomWith(extraClasses), + components: pLabel.toArray().concat([pField]), + fieldBehaviours: derive$1(extraBehaviours) + }); + const renderFormFieldDom = () => renderFormFieldDomWith([]); + const renderFormFieldDomWith = (extraClasses) => ({ + tag: 'div', + classes: ['tox-form__group'].concat(extraClasses) + }); + const renderLabel$3 = (label, providersBackstage) => FormField.parts.label({ + dom: { + tag: 'label', + classes: ['tox-label'] + }, + components: [ + text$2(providersBackstage.translate(label)) + ] + }); + + const formChangeEvent = generate$6('form-component-change'); + const formInputEvent = generate$6('form-component-input'); + const formCloseEvent = generate$6('form-close'); + const formCancelEvent = generate$6('form-cancel'); + const formActionEvent = generate$6('form-action'); + const formSubmitEvent = generate$6('form-submit'); + const formBlockEvent = generate$6('form-block'); + const formUnblockEvent = generate$6('form-unblock'); + const formTabChangeEvent = generate$6('form-tabchange'); + const formResizeEvent = generate$6('form-resize'); + + const renderCollection = (spec, providersBackstage, initialData) => { + // DUPE with TextField. + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const icons = providersBackstage.icons(); + // TINY-10174: Icon string is either in icon pack or displayed directly + const getIcon = (icon) => icons[icon] ?? icon; + const runOnItem = (f) => (comp, se) => { + closest$3(se.event.target, '[data-collection-item-value]').each((target) => { + f(comp, se, target, get$g(target, 'data-collection-item-value')); + }); + }; + const setContents = (comp, items) => { + // Giving it a default `mode:design` context, these shouldn't run at all in mode:readonly + const disabled = providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled(); + const disabledClass = disabled ? ' tox-collection__item--state-disabled' : ''; + const htmlLines = map$2(items, (item) => { + const itemText = global$6.translate(item.text); + const textContent = spec.columns === 1 ? `
${itemText}
` : ''; + const iconContent = `
${getIcon(item.icon)}
`; + // Replacing the hyphens and underscores in collection items with spaces + // to ensure the screen readers pronounce the words correctly. + // This is only for aria purposes. Emoticon and Special Character names will still use _ and - for autocompletion. + const mapItemName = { + '_': ' ', + ' - ': ' ', + '-': ' ' + }; + // Using aria-label here overrides the Apple description of emojis and special characters in Mac/ MS description in Windows. + // But if only the title attribute is used instead, the names are read out twice. i.e., the description followed by the item.text. + const ariaLabel = itemText.replace(/\_| \- |\-/g, (match) => mapItemName[match]); + return `
${iconContent}${textContent}
`; + }); + const chunks = spec.columns !== 'auto' && spec.columns > 1 ? chunk$1(htmlLines, spec.columns) : [htmlLines]; + const html = map$2(chunks, (ch) => `
${ch.join('')}
`); + set$8(comp.element, html.join('')); + }; + const onClick = runOnItem((comp, se, tgt, itemValue) => { + se.stop(); + if (!(providersBackstage.checkUiComponentContext('mode:design').shouldDisable || providersBackstage.isDisabled())) { + emitWith(comp, formActionEvent, { + name: spec.name, + value: itemValue + }); + } + }); + const collectionEvents = [ + run$1(mouseover(), runOnItem((comp, se, tgt) => { + focus$4(tgt, true); + })), + run$1(click(), onClick), + run$1(tap(), onClick), + run$1(focusin(), runOnItem((comp, se, tgt) => { + descendant(comp.element, '.' + activeClass).each((currentActive) => { + remove$3(currentActive, activeClass); + }); + add$2(tgt, activeClass); + })), + run$1(focusout(), runOnItem((comp) => { + descendant(comp.element, '.' + activeClass).each((currentActive) => { + remove$3(currentActive, activeClass); + blur$1(currentActive); + }); + })), + runOnExecute$1(runOnItem((comp, se, tgt, itemValue) => { + emitWith(comp, formActionEvent, { + name: spec.name, + value: itemValue + }); + })), + ]; + const iterCollectionItems = (comp, applyAttributes) => map$2(descendants(comp.element, '.tox-collection__item'), applyAttributes); + const pField = FormField.parts.field({ + dom: { + tag: 'div', + // FIX: Read from columns + classes: ['tox-collection'].concat(spec.columns !== 1 ? ['tox-collection--grid'] : ['tox-collection--list']) + }, + components: [], + factory: { sketch: identity }, + behaviours: derive$1([ + Disabling.config({ + disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (comp) => { + iterCollectionItems(comp, (childElm) => { + add$2(childElm, 'tox-collection__item--state-disabled'); + set$9(childElm, 'aria-disabled', true); + }); + }, + onEnabled: (comp) => { + iterCollectionItems(comp, (childElm) => { + remove$3(childElm, 'tox-collection__item--state-disabled'); + remove$8(childElm, 'aria-disabled'); + }); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + Replacing.config({}), + Tooltipping.config({ + ...providersBackstage.tooltips.getConfig({ + tooltipText: '', + onShow: (comp) => { + descendant(comp.element, '.' + activeClass + '[data-mce-tooltip]').each((current) => { + getOpt(current, 'data-mce-tooltip').each((text) => { + Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text })); + }); + }); + } + }), + mode: 'children-keyboard-focus', + anchor: (comp) => ({ + type: 'node', + node: descendant(comp.element, '.' + activeClass).orThunk(() => first('.tox-collection__item')), + root: comp.element, + layouts: { + onLtr: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]), + onRtl: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]) + }, + bubble: nu$6(0, -2, {}), + }) + }), + Representing.config({ + store: { + mode: 'memory', + initialValue: initialData.getOr([]) + }, + onSetValue: (comp, items) => { + setContents(comp, items); + if (spec.columns === 'auto') { + detectSize(comp, 5, 'tox-collection__item').each(({ numRows, numColumns }) => { + Keying.setGridSize(comp, numRows, numColumns); + }); + } + emit(comp, formResizeEvent); + } + }), + Tabstopping.config({}), + Keying.config(deriveCollectionMovement(spec.columns, 'normal')), + config('collection-events', collectionEvents) + ]), + eventOrder: { + [execute$5()]: ['disabling', 'alloy.base.behaviour', 'collection-events'], + [focusin()]: ['collection-events', 'tooltipping'], + } + }); + const extraClasses = ['tox-form__group--collection']; + return renderFormFieldWith(pLabel, pField, extraClasses, []); + }; + + const renderPanelButton = (spec, sharedBackstage) => Dropdown.sketch({ + dom: spec.dom, + components: spec.components, + toggleClass: 'mce-active', + dropdownBehaviours: derive$1([ + DisablingConfigs.button(() => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)), + Unselecting.config({}), + Tabstopping.config({}) + ]), + layouts: spec.layouts, + sandboxClasses: ['tox-dialog__popups'], + lazySink: sharedBackstage.getSink, + fetch: (comp) => Future.nu((callback) => spec.fetch(callback)).map((items) => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, (value) => { + spec.onItemAction(comp, value); + }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, + // No colour is ever selected on opening + never, sharedBackstage.providers), { + movement: deriveMenuMovement(spec.columns, spec.presets) + })))), + parts: { + menu: part(false, 1, spec.presets) + } + }); + + const colorInputChangeEvent = generate$6('color-input-change'); + const colorSwatchChangeEvent = generate$6('color-swatch-change'); + const colorPickerCancelEvent = generate$6('color-picker-cancel'); + const renderColorInput = (spec, sharedBackstage, colorInputBackstage, initialData) => { + const pField = FormField.parts.field({ + factory: Input, + inputClasses: ['tox-textfield'], + data: initialData, + onSetValue: (c) => Invalidating.run(c).get(noop), + inputBehaviours: derive$1([ + Disabling.config({ + disabled: () => sharedBackstage.providers.isDisabled() || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable + }), + toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)), + Tabstopping.config({}), + Invalidating.config({ + invalidClass: 'tox-textbox-field-invalid', + getRoot: (comp) => parentElement(comp.element), + notify: { + onValid: (comp) => { + // onValid should pass through the value here + // We need a snapshot of the value validated. + const val = Representing.getValue(comp); + emitWith(comp, colorInputChangeEvent, { + color: val + }); + } + }, + validator: { + validateOnLoad: false, + validate: (input) => { + const inputValue = Representing.getValue(input); + // Consider empty strings valid colours + if (inputValue.length === 0) { + return Future.pure(Result.value(true)); + } + else { + const span = SugarElement.fromTag('span'); + set$7(span, 'background-color', inputValue); + const res = getRaw(span, 'background-color').fold( + // TODO: Work out what we want to do here. + () => Result.error('blah'), (_) => Result.value(inputValue)); + return Future.pure(res); + } + } + } + }) + ]), + selectOnFocus: false + }); + const pLabel = spec.label.map((label) => renderLabel$3(label, sharedBackstage.providers)); + const emitSwatchChange = (colorBit, value) => { + emitWith(colorBit, colorSwatchChangeEvent, { + value + }); + }; + const onItemAction = (comp, value) => { + memColorButton.getOpt(comp).each((colorBit) => { + if (value === 'custom') { + colorInputBackstage.colorPicker((valueOpt) => { + valueOpt.fold(() => emit(colorBit, colorPickerCancelEvent), (value) => { + emitSwatchChange(colorBit, value); + addColor(spec.storageKey, value); + }); + }, '#ffffff'); + } + else if (value === 'remove') { + emitSwatchChange(colorBit, ''); + } + else { + emitSwatchChange(colorBit, value); + } + }); + }; + const memColorButton = record(renderPanelButton({ + dom: { + tag: 'span', + attributes: { + 'aria-label': sharedBackstage.providers.translate('Color swatch') + } + }, + layouts: { + onRtl: () => [southwest$2, southeast$2, south$2], + onLtr: () => [southeast$2, southwest$2, south$2] + }, + components: [], + fetch: getFetch$1(colorInputBackstage.getColors(spec.storageKey), spec.storageKey, colorInputBackstage.hasCustomColors()), + columns: colorInputBackstage.getColorCols(spec.storageKey), + presets: 'color', + onItemAction, + context: spec.context + }, sharedBackstage)); + return FormField.sketch({ + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components: pLabel.toArray().concat([ + { + dom: { + tag: 'div', + classes: ['tox-color-input'] + }, + components: [ + pField, + memColorButton.asSpec() + ] + } + ]), + fieldBehaviours: derive$1([ + config('form-field-events', [ + run$1(colorInputChangeEvent, (comp, se) => { + memColorButton.getOpt(comp).each((colorButton) => { + set$7(colorButton.element, 'background-color', se.event.color); + }); + emitWith(comp, formChangeEvent, { name: spec.name }); + }), + run$1(colorSwatchChangeEvent, (comp, se) => { + FormField.getField(comp).each((field) => { + Representing.setValue(field, se.event.value); + // Focus the field now that we've set its value + Composing.getCurrent(comp).each(Focusing.focus); + }); + }), + run$1(colorPickerCancelEvent, (comp, _se) => { + FormField.getField(comp).each((_field) => { + Composing.getCurrent(comp).each(Focusing.focus); + }); + }) + ]) + ]) + }); + }; + + // TODO: Move this to alloy if the concept works out + // eslint-disable-next-line consistent-this + const self = () => Composing.config({ + find: Optional.some + }); + const memento$1 = (mem) => Composing.config({ + find: mem.getOpt + }); + const childAt = (index) => Composing.config({ + find: (comp) => child$2(comp.element, index) + .bind((element) => comp.getSystem().getByDom(element).toOptional()) + }); + const ComposingConfigs = { + self, + memento: memento$1, + childAt + }; + + const processors = objOf([ + defaulted('preprocess', identity), + defaulted('postprocess', identity) + ]); + const memento = (mem, rawProcessors) => { + const ps = asRawOrDie$1('RepresentingConfigs.memento processors', processors, rawProcessors); + return Representing.config({ + store: { + mode: 'manual', + getValue: (comp) => { + const other = mem.get(comp); + const rawValue = Representing.getValue(other); + return ps.postprocess(rawValue); + }, + setValue: (comp, rawValue) => { + const newValue = ps.preprocess(rawValue); + const other = mem.get(comp); + Representing.setValue(other, newValue); + } + } + }); + }; + const withComp = (optInitialValue, getter, setter) => Representing.config({ + store: { + mode: 'manual', + ...optInitialValue.map((initialValue) => ({ initialValue })).getOr({}), + getValue: getter, + setValue: setter + } + }); + const withElement = (initialValue, getter, setter) => withComp(initialValue, (c) => getter(c.element), (c, v) => setter(c.element, v)); + const domHtml = (optInitialValue) => withElement(optInitialValue, get$f, set$8); + const memory = (initialValue) => Representing.config({ + store: { + mode: 'memory', + initialValue + } + }); + + const fieldsUpdate = generate$6('rgb-hex-update'); + const sliderUpdate = generate$6('slider-update'); + const paletteUpdate = generate$6('palette-update'); + + const sliderFactory = (translate, getClass) => { + const spectrum = Slider.parts.spectrum({ + dom: { + tag: 'div', + classes: [getClass('hue-slider-spectrum')], + attributes: { + role: 'presentation' + } + } + }); + const thumb = Slider.parts.thumb({ + dom: { + tag: 'div', + classes: [getClass('hue-slider-thumb')], + attributes: { + role: 'presentation' + } + } + }); + return Slider.sketch({ + dom: { + tag: 'div', + classes: [getClass('hue-slider')], + attributes: { + 'role': 'slider', + 'aria-valuemin': 0, + 'aria-valuemax': 360, + 'aria-valuenow': 120, + } + }, + rounded: false, + model: { + mode: 'y', + getInitialValue: constant$1(0) + }, + components: [ + spectrum, + thumb + ], + sliderBehaviours: derive$1([ + Focusing.config({}) + ]), + onChange: (slider, _thumb, value) => { + set$9(slider.element, 'aria-valuenow', Math.floor(360 - (value * 3.6))); + emitWith(slider, sliderUpdate, { + value + }); + } + }); + }; + + const validInput = generate$6('valid-input'); + const invalidInput = generate$6('invalid-input'); + const validatingInput = generate$6('validating-input'); + const translatePrefix = 'colorcustom.rgb.'; + const uninitiatedTooltipApi = { + isEnabled: always, + setEnabled: noop, + immediatelyShow: noop, + immediatelyHide: noop, + }; + const rgbFormFactory = (translate, getClass, onValidHexx, onInvalidHexx, tooltipGetConfig, makeIcon) => { + const setTooltipEnabled = (enabled, tooltipApi) => { + const api = tooltipApi.get(); + if (enabled === api.isEnabled()) { + return; + } + api.setEnabled(enabled); + if (enabled) { + api.immediatelyShow(); + } + else { + api.immediatelyHide(); + } + }; + const invalidation = (label, isValid, tooltipApi) => Invalidating.config({ + invalidClass: getClass('invalid'), + notify: { + onValidate: (comp) => { + emitWith(comp, validatingInput, { + type: label + }); + }, + onValid: (comp) => { + setTooltipEnabled(false, tooltipApi); + emitWith(comp, validInput, { + type: label, + value: Representing.getValue(comp) + }); + }, + onInvalid: (comp) => { + setTooltipEnabled(true, tooltipApi); + emitWith(comp, invalidInput, { + type: label, + value: Representing.getValue(comp) + }); + } + }, + validator: { + validate: (comp) => { + const value = Representing.getValue(comp); + const res = isValid(value) ? Result.value(true) : Result.error(translate('aria.input.invalid')); + return Future.pure(res); + }, + validateOnLoad: false + } + }); + const renderTextField = (isValid, name, label, description, data) => { + const tooltipApi = Cell(uninitiatedTooltipApi); + const helptext = translate(translatePrefix + 'range'); + const pLabel = FormField.parts.label({ + dom: { tag: 'label' }, + components: [text$2(label)] + }); + const pField = FormField.parts.field({ + data, + factory: Input, + inputAttributes: { + 'type': 'text', + 'aria-label': description, + ...name === 'hex' ? { 'aria-live': 'polite' } : {} + }, + inputClasses: [getClass('textfield')], + // Have basic invalidating and tabstopping behaviour. + inputBehaviours: derive$1([ + invalidation(name, isValid, tooltipApi), + Tabstopping.config({}), + Tooltipping.config({ + ...tooltipGetConfig({ + tooltipText: '', + onSetup: (comp) => { + tooltipApi.set({ + isEnabled: () => { + return Tooltipping.isEnabled(comp); + }, + setEnabled: (enabled) => { + return Tooltipping.setEnabled(comp, enabled); + }, + immediatelyShow: () => { + return Tooltipping.immediateOpenClose(comp, true); + }, + immediatelyHide: () => { + return Tooltipping.immediateOpenClose(comp, false); + }, + }); + Tooltipping.setEnabled(comp, false); + }, + onShow: (component, _tooltip) => { + Tooltipping.setComponents(component, [ + { + dom: { + tag: 'p', + classes: [ + getClass('rgb-warning-note') + ] + }, + components: [text$2(translate(name === 'hex' ? 'colorcustom.rgb.invalidHex' : 'colorcustom.rgb.invalid'))] + } + ]); + }, + }) + }) + ]), + // If it was invalid, and the value was set, run validation against it. + onSetValue: (input) => { + if (Invalidating.isInvalid(input)) { + const run = Invalidating.run(input); + run.get(noop); + } + } + }); + const errorId = generate$6('aria-invalid'); + const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning')); + const memStatus = record({ + dom: { + tag: 'div', + classes: [getClass('invalid-icon')] + }, + components: [ + memInvalidIcon.asSpec() + ] + }); + const comps = [pLabel, pField, memStatus.asSpec()]; + const concats = name !== 'hex' ? [FormField.parts['aria-descriptor']({ + text: helptext + })] : []; + const components = comps.concat(concats); + return { + dom: { + tag: 'div', + attributes: { + role: 'presentation' + }, + classes: [ + getClass('rgb-container'), + ] + }, + components + }; + }; + const copyRgbToHex = (form, rgba) => { + const hex = fromRgba(rgba); + Form.getField(form, 'hex').each((hexField) => { + // Not amazing, but it turns out that if we have an invalid RGB field, and no hex code + // and then type in a valid three digit hex code, the RGB field will be overriden, then validate and then set + // the hex field to be the six digit version of that same three digit hex code. This is incorrect. + if (!Focusing.isFocused(hexField)) { + Representing.setValue(form, { + hex: hex.value + }); + } + }); + return hex; + }; + const copyRgbToForm = (form, rgb) => { + const red = rgb.red; + const green = rgb.green; + const blue = rgb.blue; + Representing.setValue(form, { red, green, blue }); + }; + const memPreview = record({ + dom: { + tag: 'div', + classes: [getClass('rgba-preview')], + styles: { + 'background-color': 'white' + }, + attributes: { + role: 'presentation' + } + } + }); + const updatePreview = (anyInSystem, hex) => { + memPreview.getOpt(anyInSystem).each((preview) => { + set$7(preview.element, 'background-color', '#' + hex.value); + }); + }; + const factory = () => { + const state = { + red: Cell(Optional.some(255)), + green: Cell(Optional.some(255)), + blue: Cell(Optional.some(255)), + hex: Cell(Optional.some('ffffff')) + }; + const copyHexToRgb = (form, hex) => { + const rgb = fromHex(hex); + copyRgbToForm(form, rgb); + setValueRgb(rgb); + }; + const get = (prop) => state[prop].get(); + const set = (prop, value) => { + state[prop].set(value); + }; + const getValueRgb = () => get('red').bind((red) => get('green').bind((green) => get('blue').map((blue) => rgbaColour(red, green, blue, 1)))); + // TODO: Find way to use this for palette and slider updates + const setValueRgb = (rgb) => { + const red = rgb.red; + const green = rgb.green; + const blue = rgb.blue; + set('red', Optional.some(red)); + set('green', Optional.some(green)); + set('blue', Optional.some(blue)); + }; + const onInvalidInput = (form, simulatedEvent) => { + const data = simulatedEvent.event; + if (data.type !== 'hex') { + set(data.type, Optional.none()); + } + else { + onInvalidHexx(form); + } + }; + const onValidHex = (form, value) => { + onValidHexx(form); + const hex = hexColour(value); + set('hex', Optional.some(hex.value)); + const rgb = fromHex(hex); + copyRgbToForm(form, rgb); + setValueRgb(rgb); + emitWith(form, fieldsUpdate, { + hex + }); + updatePreview(form, hex); + }; + const onValidRgb = (form, prop, value) => { + const val = parseInt(value, 10); + set(prop, Optional.some(val)); + getValueRgb().each((rgb) => { + const hex = copyRgbToHex(form, rgb); + emitWith(form, fieldsUpdate, { + hex + }); + updatePreview(form, hex); + }); + }; + const isHexInputEvent = (data) => data.type === 'hex'; + const onValidInput = (form, simulatedEvent) => { + const data = simulatedEvent.event; + if (isHexInputEvent(data)) { + onValidHex(form, data.value); + } + else { + onValidRgb(form, data.type, data.value); + } + }; + const formPartStrings = (key) => ({ + label: translate(translatePrefix + key + '.label'), + description: translate(translatePrefix + key + '.description') + }); + const redStrings = formPartStrings('red'); + const greenStrings = formPartStrings('green'); + const blueStrings = formPartStrings('blue'); + const hexStrings = formPartStrings('hex'); + // TODO: Provide a nice way of adding APIs to existing sketchers + return deepMerge(Form.sketch((parts) => ({ + dom: { + tag: 'form', + classes: [getClass('rgb-form')], + attributes: { 'aria-label': translate('aria.color.picker') } + }, + components: [ + parts.field('red', FormField.sketch(renderTextField(isRgbaComponent, 'red', redStrings.label, redStrings.description, 255))), + parts.field('green', FormField.sketch(renderTextField(isRgbaComponent, 'green', greenStrings.label, greenStrings.description, 255))), + parts.field('blue', FormField.sketch(renderTextField(isRgbaComponent, 'blue', blueStrings.label, blueStrings.description, 255))), + parts.field('hex', FormField.sketch(renderTextField(isHexString, 'hex', hexStrings.label, hexStrings.description, 'ffffff'))), + memPreview.asSpec() + ], + formBehaviours: derive$1([ + Invalidating.config({ + invalidClass: getClass('form-invalid') + }), + config('rgb-form-events', [ + run$1(validInput, onValidInput), + run$1(invalidInput, onInvalidInput), + run$1(validatingInput, onInvalidInput) + ]) + ]) + })), { + apis: { + updateHex: (form, hex) => { + Representing.setValue(form, { + hex: hex.value + }); + copyHexToRgb(form, hex); + updatePreview(form, hex); + } + } + }); + }; + const rgbFormSketcher = single({ + factory, + name: 'RgbForm', + configFields: [], + apis: { + updateHex: (apis, form, hex) => { + apis.updateHex(form, hex); + } + }, + extraApis: {} + }); + return rgbFormSketcher; + }; + + const paletteFactory = (translate, getClass) => { + const spectrumPart = Slider.parts.spectrum({ + dom: { + tag: 'canvas', + attributes: { + role: 'presentation' + }, + classes: [getClass('sv-palette-spectrum')] + } + }); + const thumbPart = Slider.parts.thumb({ + dom: { + tag: 'div', + attributes: { + role: 'presentation' + }, + classes: [getClass('sv-palette-thumb')], + innerHtml: `` + } + }); + const setColour = (canvas, rgba) => { + const { width, height } = canvas; + const ctx = canvas.getContext('2d'); + if (ctx === null) { + return; + } + ctx.fillStyle = rgba; + ctx.fillRect(0, 0, width, height); + const grdWhite = ctx.createLinearGradient(0, 0, width, 0); + grdWhite.addColorStop(0, 'rgba(255,255,255,1)'); + grdWhite.addColorStop(1, 'rgba(255,255,255,0)'); + ctx.fillStyle = grdWhite; + ctx.fillRect(0, 0, width, height); + const grdBlack = ctx.createLinearGradient(0, 0, 0, height); + grdBlack.addColorStop(0, 'rgba(0,0,0,0)'); + grdBlack.addColorStop(1, 'rgba(0,0,0,1)'); + ctx.fillStyle = grdBlack; + ctx.fillRect(0, 0, width, height); + }; + const setPaletteHue = (slider, hue) => { + const canvas = slider.components()[0].element.dom; + const hsv = hsvColour(hue, 100, 100); + const rgba = fromHsv(hsv); + setColour(canvas, toString(rgba)); + }; + const setPaletteThumb = (slider, hex) => { + const hsv = fromRgb(fromHex(hex)); + Slider.setValue(slider, { x: hsv.saturation, y: 100 - hsv.value }); + set$9(slider.element, 'aria-valuetext', translate(['Saturation {0}%, Brightness {1}%', hsv.saturation, hsv.value])); + }; + const factory = (_detail) => { + const getInitialValue = constant$1({ + x: 0, + y: 0 + }); + const onChange = (slider, _thumb, value) => { + if (!isNumber(value)) { + set$9(slider.element, 'aria-valuetext', translate(['Saturation {0}%, Brightness {1}%', Math.floor(value.x), Math.floor(100 - value.y)])); + } + emitWith(slider, paletteUpdate, { + value + }); + }; + const onInit = (_slider, _thumb, spectrum, _value) => { + // Maybe make this initial value configurable? + setColour(spectrum.element.dom, toString(red)); + }; + const sliderBehaviours = derive$1([ + Composing.config({ + find: Optional.some + }), + Focusing.config({}) + ]); + return Slider.sketch({ + dom: { + tag: 'div', + attributes: { + 'role': 'slider', + 'aria-valuetext': translate(['Saturation {0}%, Brightness {1}%', 0, 0]) + }, + classes: [getClass('sv-palette')] + }, + model: { + mode: 'xy', + getInitialValue, + }, + rounded: false, + components: [ + spectrumPart, + thumbPart + ], + onChange, + onInit, + sliderBehaviours + }); + }; + const saturationBrightnessPaletteSketcher = single({ + factory, + name: 'SaturationBrightnessPalette', + configFields: [], + apis: { + setHue: (_apis, slider, hue) => { + setPaletteHue(slider, hue); + }, + setThumb: (_apis, slider, hex) => { + setPaletteThumb(slider, hex); + } + }, + extraApis: {} + }); + return saturationBrightnessPaletteSketcher; + }; + + const makeFactory = (translate, getClass, tooltipConfig, makeIcon) => { + const factory = (detail) => { + const rgbForm = rgbFormFactory(translate, getClass, detail.onValidHex, detail.onInvalidHex, tooltipConfig, makeIcon); + const sbPalette = paletteFactory(translate, getClass); + const hueSliderToDegrees = (hue) => (100 - hue) / 100 * 360; + const hueDegreesToSlider = (hue) => 100 - (hue / 360) * 100; + const state = { + paletteRgba: Cell(red), + paletteHue: Cell(0) + }; + const memSlider = record(sliderFactory(translate, getClass)); + const memPalette = record(sbPalette.sketch({})); + const memRgb = record(rgbForm.sketch({})); + const updatePalette = (anyInSystem, _hex, hue) => { + memPalette.getOpt(anyInSystem).each((palette) => { + sbPalette.setHue(palette, hue); + }); + }; + const updateFields = (anyInSystem, hex) => { + memRgb.getOpt(anyInSystem).each((form) => { + rgbForm.updateHex(form, hex); + }); + }; + const updateSlider = (anyInSystem, _hex, hue) => { + memSlider.getOpt(anyInSystem).each((slider) => { + Slider.setValue(slider, hueDegreesToSlider(hue)); + }); + }; + const updatePaletteThumb = (anyInSystem, hex) => { + memPalette.getOpt(anyInSystem).each((palette) => { + sbPalette.setThumb(palette, hex); + }); + }; + const updateState = (hex, hue) => { + const rgba = fromHex(hex); + state.paletteRgba.set(rgba); + state.paletteHue.set(hue); + }; + const runUpdates = (anyInSystem, hex, hue, updates) => { + updateState(hex, hue); + each$1(updates, (update) => { + update(anyInSystem, hex, hue); + }); + }; + const onPaletteUpdate = () => { + const updates = [updateFields]; + return (form, simulatedEvent) => { + const value = simulatedEvent.event.value; + const oldHue = state.paletteHue.get(); + const newHsv = hsvColour(oldHue, value.x, (100 - value.y)); + const newHex = hsvToHex(newHsv); + runUpdates(form, newHex, oldHue, updates); + }; + }; + const onSliderUpdate = () => { + const updates = [updatePalette, updateFields]; + return (form, simulatedEvent) => { + const hue = hueSliderToDegrees(simulatedEvent.event.value); + const oldRgb = state.paletteRgba.get(); + const oldHsv = fromRgb(oldRgb); + const newHsv = hsvColour(hue, oldHsv.saturation, oldHsv.value); + const newHex = hsvToHex(newHsv); + runUpdates(form, newHex, hue, updates); + }; + }; + const onFieldsUpdate = () => { + const updates = [updatePalette, updateSlider, updatePaletteThumb]; + return (form, simulatedEvent) => { + const hex = simulatedEvent.event.hex; + const hsv = hexToHsv(hex); + runUpdates(form, hex, hsv.hue, updates); + }; + }; + return { + uid: detail.uid, + dom: detail.dom, + components: [ + memPalette.asSpec(), + memSlider.asSpec(), + memRgb.asSpec() + ], + behaviours: derive$1([ + config('colour-picker-events', [ + run$1(fieldsUpdate, onFieldsUpdate()), + run$1(paletteUpdate, onPaletteUpdate()), + run$1(sliderUpdate, onSliderUpdate()) + ]), + Composing.config({ + find: (comp) => memRgb.getOpt(comp) + }), + Keying.config({ + mode: 'acyclic' + }) + ]) + }; + }; + const colourPickerSketcher = single({ + name: 'ColourPicker', + configFields: [ + required$1('dom'), + defaulted('onValidHex', noop), + defaulted('onInvalidHex', noop) + ], + factory + }); + return colourPickerSketcher; + }; + + const english = { + 'colorcustom.rgb.red.label': 'R', + 'colorcustom.rgb.red.description': 'Red channel', + 'colorcustom.rgb.green.label': 'G', + 'colorcustom.rgb.green.description': 'Green channel', + 'colorcustom.rgb.blue.label': 'B', + 'colorcustom.rgb.blue.description': 'Blue channel', + 'colorcustom.rgb.hex.label': '#', + 'colorcustom.rgb.hex.description': 'Hex color code', + 'colorcustom.rgb.range': 'Range 0 to 255', + 'colorcustom.rgb.invalid': 'Numbers only, 0 to 255', + 'colorcustom.rgb.invalidHex': 'Hexadecimal only, 000000 to FFFFFF', + 'aria.color.picker': 'Color Picker', + 'aria.input.invalid': 'Invalid input' + }; + const translate = (providerBackstage) => (key) => { + if (isString(key)) { + return providerBackstage.translate(english[key]); + } + else { + return providerBackstage.translate(key); + } + }; + const renderColorPicker = (_spec, providerBackstage, initialData) => { + const getClass = (key) => 'tox-' + key; + const renderIcon = (name, errId, icon = name, label = name) => render$4(icon, { + tag: 'div', + classes: ['tox-icon', 'tox-control-wrap__status-icon-' + name], + attributes: { + 'title': providerBackstage.translate(label), + 'aria-live': 'polite', + ...errId.fold(() => ({}), (id) => ({ id })) + } + }, providerBackstage.icons); + const colourPickerFactory = makeFactory(translate(providerBackstage), getClass, providerBackstage.tooltips.getConfig, renderIcon); + const onValidHex = (form) => { + emitWith(form, formActionEvent, { name: 'hex-valid', value: true }); + }; + const onInvalidHex = (form) => { + emitWith(form, formActionEvent, { name: 'hex-valid', value: false }); + }; + const memPicker = record(colourPickerFactory.sketch({ + dom: { + tag: 'div', + classes: [getClass('color-picker-container')], + attributes: { + role: 'presentation' + } + }, + onValidHex, + onInvalidHex + })); + return { + dom: { + tag: 'div' + }, + components: [ + memPicker.asSpec() + ], + behaviours: derive$1([ + // We'll allow invalid values + withComp(initialData, (comp) => { + const picker = memPicker.get(comp); + const optRgbForm = Composing.getCurrent(picker); + const optHex = optRgbForm.bind((rgbForm) => { + const formValues = Representing.getValue(rgbForm); + return formValues.hex; + }); + return optHex.map((hex) => '#' + removeLeading(hex, '#')).getOr(''); + }, (comp, newValue) => { + const pattern = /^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/; + const valOpt = Optional.from(pattern.exec(newValue)).bind((matches) => get$i(matches, 1)); + const picker = memPicker.get(comp); + const optRgbForm = Composing.getCurrent(picker); + optRgbForm.fold(() => { + // eslint-disable-next-line no-console + console.log('Can not find form'); + }, (rgbForm) => { + Representing.setValue(rgbForm, { + hex: valOpt.getOr('') + }); + // So not the way to do this. + Form.getField(rgbForm, 'hex').each((hexField) => { + emit(hexField, input()); + }); + }); + }), + ComposingConfigs.self() + ]) + }; + }; + + var global$3 = tinymce.util.Tools.resolve('tinymce.Resource'); + + const isOldCustomEditor = (spec) => has$2(spec, 'init'); + const renderCustomEditor = (spec) => { + const editorApi = value$2(); + const memReplaced = record({ + dom: { + tag: spec.tag + } + }); + const initialValue = value$2(); + const focusBehaviour = !isOldCustomEditor(spec) && spec.onFocus.isSome() ? [ + Focusing.config({ + onFocus: (comp) => { + spec.onFocus.each((onFocusFn) => { + onFocusFn(comp.element.dom); + }); + } + }), + Tabstopping.config({}) + ] : []; + return { + dom: { + tag: 'div', + classes: ['tox-custom-editor'] + }, + behaviours: derive$1([ + config('custom-editor-events', [ + runOnAttached((component) => { + memReplaced.getOpt(component).each((ta) => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + (isOldCustomEditor(spec) + ? spec.init(ta.element.dom) + : global$3.load(spec.scriptId, spec.scriptUrl).then((init) => init(ta.element.dom, spec.settings))).then((ea) => { + initialValue.on((cvalue) => { + ea.setValue(cvalue); + }); + initialValue.clear(); + editorApi.set(ea); + }); + }); + }) + ]), + withComp(Optional.none(), () => editorApi.get().fold(() => initialValue.get().getOr(''), (ed) => ed.getValue()), (_component, value) => { + editorApi.get().fold(() => initialValue.set(value), (ed) => ed.setValue(value)); + }), + ComposingConfigs.self() + ].concat(focusBehaviour)), + components: [memReplaced.asSpec()] + }; + }; + + var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools'); + + const browseFilesEvent = generate$6('browse.files.event'); + const filterByExtension = (files, providersBackstage, allowedFileExtensions) => { + const allowedImageFileTypes = global$2.explode(providersBackstage.getOption('images_file_types')); + const isFileInAllowedTypes = (file) => allowedFileExtensions.fold(() => exists(allowedImageFileTypes, (type) => endsWith(file.name.toLowerCase(), `.${type.toLowerCase()}`)), (exts) => exists(exts, (type) => endsWith(file.name.toLowerCase(), `.${type.toLowerCase()}`))); + return filter$2(from(files), isFileInAllowedTypes); + }; + const renderDropZone = (spec, providersBackstage, initialData) => { + // TODO: Consider moving to alloy + const stopper = (_, se) => { + se.stop(); + }; + // TODO: Consider moving to alloy + const sequence = (actions) => (comp, se) => { + each$1(actions, (a) => { + a(comp, se); + }); + }; + const onDrop = (comp, se) => { + if (!Disabling.isDisabled(comp)) { + const transferEvent = se.event.raw; + emitWith(comp, browseFilesEvent, { files: transferEvent.dataTransfer?.files }); + } + }; + const onSelect = (component, simulatedEvent) => { + const input = simulatedEvent.event.raw.target; + emitWith(component, browseFilesEvent, { files: input.files }); + }; + const handleFiles = (component, files) => { + if (files) { + Representing.setValue(component, filterByExtension(files, providersBackstage, spec.allowedFileExtensions)); + emitWith(component, formChangeEvent, { name: spec.name }); + } + }; + const memInput = record({ + dom: { + tag: 'input', + attributes: { + type: 'file', + accept: spec.allowedFileTypes.getOr('image/*') + }, + styles: { + display: 'none' + } + }, + behaviours: derive$1([ + config('input-file-events', [ + cutter(click()), + cutter(tap()) + ]) + ]) + }); + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const pField = FormField.parts.field({ + factory: Button, + dom: { + tag: 'button', + styles: { + position: 'relative' + }, + classes: ['tox-button', 'tox-button--secondary'] + }, + components: [ + text$2(providersBackstage.translate(spec.buttonLabel.getOr('Browse for an image'))), + memInput.asSpec() + ], + action: (comp) => { + const inputComp = memInput.get(comp); + inputComp.element.dom.click(); + }, + buttonBehaviours: derive$1([ + ComposingConfigs.self(), + memory(initialData.getOr([])), + Tabstopping.config({}), + DisablingConfigs.button(() => providersBackstage.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)) + ]) + }); + const wrapper = { + dom: { + tag: 'div', + classes: ['tox-dropzone-container'] + }, + behaviours: derive$1([ + Disabling.config({ + disabled: () => providersBackstage.checkUiComponentContext(spec.context).shouldDisable + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + Toggling.config({ + toggleClass: 'dragenter', + toggleOnExecute: false + }), + config('dropzone-events', [ + run$1('dragenter', sequence([stopper, Toggling.toggle])), + run$1('dragleave', sequence([stopper, Toggling.toggle])), + run$1('dragover', stopper), + run$1('drop', sequence([stopper, onDrop])), + run$1(change(), onSelect) + ]) + ]), + components: [ + { + dom: { + tag: 'div', + classes: ['tox-dropzone'], + styles: {} + }, + components: [ + { + dom: { + tag: 'p' + }, + components: [ + text$2(providersBackstage.translate(spec.dropAreaLabel.getOr('Drop an image here'))) + ] + }, + pField + ] + } + ] + }; + return renderFormFieldWith(pLabel, wrapper, ['tox-form__group--stretched'], [config('handle-files', [ + run$1(browseFilesEvent, (comp, se) => { + FormField.getField(comp).each((field) => { + handleFiles(field, se.event.files); + }); + }) + ])]); + }; + + const renderGrid = (spec, backstage) => ({ + dom: { + tag: 'div', + classes: ['tox-form__grid', `tox-form__grid--${spec.columns}col`] + }, + components: map$2(spec.items, backstage.interpreter) + }); + + const beforeObject = generate$6('alloy-fake-before-tabstop'); + const afterObject = generate$6('alloy-fake-after-tabstop'); + const craftWithClasses = (classes) => { + return { + dom: { + tag: 'div', + styles: { + width: '1px', + height: '1px', + outline: 'none' + }, + attributes: { + tabindex: '0' // Capture native tabbing in the appropriate order + }, + classes + }, + behaviours: derive$1([ + Focusing.config({ ignore: true }), + Tabstopping.config({}) + ]) + }; + }; + const craft = (containerClasses, spec) => { + return { + dom: { + tag: 'div', + classes: ['tox-navobj', ...containerClasses.getOr([])] + }, + components: [ + craftWithClasses([beforeObject]), + spec, + craftWithClasses([afterObject]) + ], + behaviours: derive$1([ + ComposingConfigs.childAt(1) + ]) + }; + }; + // TODO: Create an API in alloy to do this. + const triggerTab = (placeholder, shiftKey) => { + emitWith(placeholder, keydown(), { + raw: { + which: 9, + shiftKey + } + }); + }; + const onFocus = (container, targetComp) => { + const target = targetComp.element; + // If focus has shifted naturally to a before object, the tab direction is backwards. + if (has(target, beforeObject)) { + triggerTab(container, true); + } + else if (has(target, afterObject)) { + triggerTab(container, false); + } + }; + const isPseudoStop = (element) => { + return closest$1(element, ['.' + beforeObject, '.' + afterObject].join(','), never); + }; + + const dialogChannel = generate$6('update-dialog'); + const titleChannel = generate$6('update-title'); + const bodyChannel = generate$6('update-body'); + const footerChannel = generate$6('update-footer'); + const bodySendMessageChannel = generate$6('body-send-message'); + const dialogFocusShiftedChannel = generate$6('dialog-focus-shifted'); + + const browser = detect$1().browser; + const isSafari = browser.isSafari(); + const isFirefox = browser.isFirefox(); + const isSafariOrFirefox = isSafari || isFirefox; + const isChromium = browser.isChromium(); + const isElementScrollAtBottom = ({ scrollTop, scrollHeight, clientHeight }) => Math.ceil(scrollTop) + clientHeight >= scrollHeight; + const scrollToY = (win, y) => + // TINY-10128: The iframe body is occasionally null when we attempt to scroll, so instead of using body.scrollHeight, use a + // fallback value of 99999999. To minimise the potential impact of future browser changes, this fallback is significantly smaller + // than the minimum of the maximum value Window.scrollTo would take on supported browsers: + // Chromium: > Number.MAX_SAFE_INTEGER + // Safari: 2^31 - 1 = 2147483647 + // Firefox: 2147483583 + win.scrollTo(0, y === 'bottom' ? 99999999 : y); + const getScrollingElement = (doc, html) => { + // TINY-10110: The scrolling element can change between body and documentElement depending on whether there + // is a doctype declaration. However, this behavior is inconsistent on Chrome and Safari so checking for + // the scroll properties is the most reliable way to determine which element is the scrolling element, at + // least for the purposes of determining whether scroll is at bottom. + const body = doc.body; + return Optional.from(!/^ 1)) + ? body : doc.documentElement); + }; + const writeValue = (iframeElement, html, fallbackFn) => { + const iframe = iframeElement.dom; + Optional.from(iframe.contentDocument).fold(fallbackFn, (doc) => { + let lastScrollTop = 0; + // TINY-10032: If documentElement (or body) is nullable, we assume document is empty and so scroll is at bottom. + const isScrollAtBottom = getScrollingElement(doc, html).map((el) => { + lastScrollTop = el.scrollTop; + return el; + }).forall(isElementScrollAtBottom); + const scrollAfterWrite = () => { + const win = iframe.contentWindow; + if (isNonNullable(win)) { + if (isScrollAtBottom) { + scrollToY(win, 'bottom'); + } + else if (!isScrollAtBottom && isSafariOrFirefox && lastScrollTop !== 0) { + // TINY-10078: Safari and Firefox reset scroll to top on each document.write(), so we need to restore scroll manually + scrollToY(win, lastScrollTop); + } + } + }; + // TINY-10109: On Safari, attempting to scroll before the iframe has finished loading will cause scroll to reset to top upon load. + // TINY-10128: We will not wait for the load event on Chrome and Firefox since doing so causes the scroll to jump around erratically, + // especially on Firefox. However, not waiting for load has the trade-off of potentially losing bottom scroll when updating at a very + // rapid rate, as attempting to scroll before the iframe body is loaded will not work. + if (isSafari) { + iframe.addEventListener('load', scrollAfterWrite, { once: true }); + } + doc.open(); + doc.write(html); + doc.close(); + if (!isSafari) { + scrollAfterWrite(); + } + }); + }; + // TINY-10078: On Firefox, throttle to 200ms to improve scrolling experience. Since we are manually maintaining previous scroll position + // on each update, when updating rapidly without a throttle, attempting to scroll around the iframe can feel stuck. + // TINY-10097: On Safari, throttle to 500ms to reduce flickering as the document.write() method still observes significant flickering. + // Also improves scrolling, as scroll positions are maintained manually similar to Firefox. + const throttleInterval = someIf(isSafariOrFirefox, isSafari ? 500 : 200); + // TINY-10078: Use Throttler.adaptable to ensure that any content added during the waiting period is not lost. + const writeValueThrottler = throttleInterval.map((interval) => adaptable(writeValue, interval)); + const getDynamicSource = (initialData, stream) => { + const cachedValue = Cell(initialData.getOr('')); + return { + getValue: (_frameComponent) => + // Ideally we should fetch data from the iframe...innerHtml, this triggers Cors errors + cachedValue.get(), + setValue: (frameComponent, html) => { + if (cachedValue.get() !== html) { + const iframeElement = frameComponent.element; + const setSrcdocValue = () => set$9(iframeElement, 'srcdoc', html); + if (stream) { + writeValueThrottler.fold(constant$1(writeValue), (throttler) => throttler.throttle)(iframeElement, html, setSrcdocValue); + } + else { + // TINY-3769: We need to use srcdoc here, instead of src with a data URI, otherwise browsers won't retain the Origin. + // See https://bugs.chromium.org/p/chromium/issues/detail?id=58999#c11 + setSrcdocValue(); + } + } + cachedValue.set(html); + } + }; + }; + const renderIFrame = (spec, providersBackstage, initialData) => { + const baseClass = 'tox-dialog__iframe'; + const opaqueClass = spec.transparent ? [] : [`${baseClass}--opaque`]; + const containerBorderedClass = spec.border ? [`tox-navobj-bordered`] : []; + const attributes = { + ...spec.label.map((title) => ({ title })).getOr({}), + ...initialData.map((html) => ({ srcdoc: html })).getOr({}), + ...spec.sandboxed ? { sandbox: 'allow-scripts allow-same-origin' } : {} + }; + const sourcing = getDynamicSource(initialData, spec.streamContent); + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const factory = (newSpec) => craft(Optional.from(containerBorderedClass), { + // We need to use the part uid or the label and field won't be linked with ARIA + uid: newSpec.uid, + dom: { + tag: 'iframe', + attributes, + classes: [ + baseClass, + ...opaqueClass + ] + }, + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}), + withComp(initialData, sourcing.getValue, sourcing.setValue), + Receiving.config({ + channels: { + [dialogFocusShiftedChannel]: { + onReceive: (comp, message) => { + message.newFocus.each((newFocus) => { + parentElement(comp.element).each((parent) => { + const f = eq(comp.element, newFocus) ? add$2 : remove$3; + f(parent, 'tox-navobj-bordered-focus'); + }); + }); + } + } + } + }) + ]) + }); + // Note, it's not going to handle escape at this point. + const pField = FormField.parts.field({ + factory: { sketch: factory } + }); + return renderFormFieldWith(pLabel, pField, ['tox-form__group--stretched'], []); + }; + + const calculateImagePosition = (panelWidth, panelHeight, imageWidth, imageHeight, zoom) => { + const width = imageWidth * zoom; + const height = imageHeight * zoom; + const left = Math.max(0, panelWidth / 2 - width / 2); + const top = Math.max(0, panelHeight / 2 - height / 2); + return { + left: left.toString() + 'px', + top: top.toString() + 'px', + width: width.toString() + 'px', + height: height.toString() + 'px', + }; + }; + const zoomToFit = (panel, width, height) => { + const panelW = get$c(panel); + const panelH = get$d(panel); + return Math.min(panelW / width, panelH / height, 1); + }; + const renderImagePreview = (spec, initialData) => { + const cachedData = Cell(initialData.getOr({ url: '' })); + const memImage = record({ + dom: { + tag: 'img', + classes: ['tox-imagepreview__image'], + attributes: initialData.map((data) => ({ src: data.url })).getOr({}) + }, + }); + const memContainer = record({ + dom: { + tag: 'div', + classes: ['tox-imagepreview__container'], + attributes: { + role: 'presentation' + }, + }, + components: [ + memImage.asSpec() + ] + }); + const setValue = (frameComponent, data) => { + const translatedData = { + url: data.url + }; + // update properties that are set by the data + data.zoom.each((z) => translatedData.zoom = z); + data.cachedWidth.each((z) => translatedData.cachedWidth = z); + data.cachedHeight.each((z) => translatedData.cachedHeight = z); + cachedData.set(translatedData); + const applyFramePositioning = () => { + const { cachedWidth, cachedHeight, zoom } = translatedData; + if (!isUndefined(cachedWidth) && !isUndefined(cachedHeight)) { + if (isUndefined(zoom)) { + const z = zoomToFit(frameComponent.element, cachedWidth, cachedHeight); + // sneaky mutation since we own the object + translatedData.zoom = z; + } + const position = calculateImagePosition(get$c(frameComponent.element), get$d(frameComponent.element), cachedWidth, cachedHeight, translatedData.zoom); + memContainer.getOpt(frameComponent).each((container) => { + setAll(container.element, position); + }); + } + }; + memImage.getOpt(frameComponent).each((imageComponent) => { + const img = imageComponent.element; + if (data.url !== get$g(img, 'src')) { + set$9(img, 'src', data.url); + remove$3(frameComponent.element, 'tox-imagepreview__loaded'); + } + applyFramePositioning(); + // eslint-disable-next-line @typescript-eslint/no-floating-promises + image(img).then((img) => { + // Ensure the component hasn't been removed while the image was loading + // if it is disconnected, just do nothing + if (frameComponent.getSystem().isConnected()) { + add$2(frameComponent.element, 'tox-imagepreview__loaded'); + // sneaky mutation since we own the object + translatedData.cachedWidth = img.dom.naturalWidth; + translatedData.cachedHeight = img.dom.naturalHeight; + applyFramePositioning(); + } + }); + }); + }; + const styles = {}; + spec.height.each((h) => styles.height = h); + // TODO: TINY-8393 Use the initial data properly once it's validated + const fakeValidatedData = initialData.map((d) => ({ + url: d.url, + zoom: Optional.from(d.zoom), + cachedWidth: Optional.from(d.cachedWidth), + cachedHeight: Optional.from(d.cachedHeight), + })); + return { + dom: { + tag: 'div', + classes: ['tox-imagepreview'], + styles, + attributes: { + role: 'presentation' + } + }, + components: [ + memContainer.asSpec(), + ], + behaviours: derive$1([ + ComposingConfigs.self(), + withComp(fakeValidatedData, () => + /* + NOTE: This is intentionally returning the cached image width and height. + + Including those details in the dialog data helps when `setData` only changes the URL, as + the old image must continue to be displayed at the old size until the new image has loaded. + */ + cachedData.get(), setValue), + ]) + }; + }; + + const renderLabel$2 = (spec, backstageShared, getCompByName) => { + const baseClass = 'tox-label'; + const centerClass = spec.align === 'center' ? [`${baseClass}--center`] : []; + const endClass = spec.align === 'end' ? [`${baseClass}--end`] : []; + const label = record({ + dom: { + tag: 'label', + classes: [baseClass, ...centerClass, ...endClass] + }, + components: [ + text$2(backstageShared.providers.translate(spec.label)) + ] + }); + const comps = map$2(spec.items, backstageShared.interpreter); + return { + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components: [ + label.asSpec(), + ...comps + ], + behaviours: derive$1([ + ComposingConfigs.self(), + Replacing.config({}), + domHtml(Optional.none()), + Keying.config({ + mode: 'acyclic' + }), + config('label', [ + runOnAttached((comp) => { + spec.for.each((name) => { + getCompByName(name).each((target) => { + label.getOpt(comp).each((labelComp) => { + const id = get$g(target.element, 'id') ?? generate$6('form-field'); + set$9(target.element, 'id', id); + set$9(labelComp.element, 'for', id); + }); + }); + }); + }) + ]), + ]) + }; + }; + + const internalToolbarButtonExecute = generate$6('toolbar.button.execute'); + // Perform `action` when an item is clicked on, close menus, and stop event + const onToolbarButtonExecute = (info) => runOnExecute$1((comp, _simulatedEvent) => { + // If there is an action, run the action + runWithApi(info, comp)((itemApi) => { + emitWith(comp, internalToolbarButtonExecute, { + buttonApi: itemApi + }); + info.onAction(itemApi); + }); + }); + const commonButtonDisplayEvent = generate$6('common-button-display-events'); + const toolbarButtonEventOrder = { + // TODO: use the constants provided by behaviours. + [execute$5()]: ['disabling', 'alloy.base.behaviour', 'toggling', 'toolbar-button-events', 'tooltipping'], + [attachedToDom()]: [ + 'toolbar-button-events', + commonButtonDisplayEvent + ], + [detachedFromDom()]: ['toolbar-button-events', 'dropdown-events', 'tooltipping'], + [mousedown()]: [ + 'focusing', + 'alloy.base.behaviour', + commonButtonDisplayEvent + ] + }; + + const forceInitialSize = (comp) => set$7(comp.element, 'width', get$e(comp.element, 'width')); + + const renderIcon$1 = (iconName, iconsProvider, behaviours) => render$4(iconName, { + tag: 'span', + classes: ["tox-icon" /* ToolbarButtonClasses.Icon */, "tox-tbtn__icon-wrap" /* ToolbarButtonClasses.IconWrap */], + behaviours + }, iconsProvider); + const renderIconFromPack$1 = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, []); + const renderReplaceableIconFromPack = (iconName, iconsProvider) => renderIcon$1(iconName, iconsProvider, [Replacing.config({})]); + const renderLabel$1 = (text, prefix, providersBackstage) => ({ + dom: { + tag: 'span', + classes: [`${prefix}__select-label`] + }, + components: [ + text$2(providersBackstage.translate(text)) + ], + behaviours: derive$1([ + Replacing.config({}) + ]) + }); + + const updateMenuText = generate$6('update-menu-text'); + const updateMenuIcon = generate$6('update-menu-icon'); + const updateTooltiptext = generate$6('update-tooltip-text'); + // TODO: Use renderCommonStructure here. + const renderCommonDropdown = (spec, prefix, sharedBackstage, btnName) => { + const editorOffCell = Cell(noop); + const tooltip = Cell(spec.tooltip); + // We need mementos for display text and display icon because on the events + // updateMenuText and updateMenuIcon respectively, their contents are changed + // via Replacing. These events are generally emitted by dropdowns that want the + // main text and icon to match the current selection (e.g. bespokes like font family) + const optMemDisplayText = spec.text.map((text) => record(renderLabel$1(text, prefix, sharedBackstage.providers))); + const optMemDisplayIcon = spec.icon.map((iconName) => record(renderReplaceableIconFromPack(iconName, sharedBackstage.providers.icons))); + /* + * The desired behaviour here is: + * + * when left or right is pressed, and it isn't associated with expanding or + * collapsing a submenu, then it should navigate to the next menu item, and + * expand it (without highlighting any items in the expanded menu). + * It also needs to close the previous menu + */ + const onLeftOrRightInMenu = (comp, se) => { + // The originating dropdown is stored on the sandbox itself. This is just an + // implementation detail of alloy. We really need to make it a fully-fledged API. + // TODO: TINY-9014 Make SandboxAPI have a function that just delegates to Representing + const dropdown = Representing.getValue(comp); + // Focus the dropdown. Current workaround required to make FlowLayout recognise the current focus. + // The triggering keydown is going to try to move the focus left or + // right of the current menu, so it needs to know what the current menu dropdown is. It + // can't work it out by the current focus, because the current focus is *in* the menu, so + // we help it by moving the focus to the button, so it can work out what the next menu to + // the left or right is. + Focusing.focus(dropdown); + emitWith(dropdown, 'keydown', { + raw: se.event.raw + }); + // Because we have just navigated off this open menu, we want to close it. + // INVESTIGATE: TINY-9014: Is this handling situations where there were no menus + // to move to? Does it matter if we still close it when there are no other menus? + Dropdown.close(dropdown); + // The Optional.some(true) tells the keyboard handler that this event was handled, + // which will do things like stopPropagation and preventDefault. + return Optional.some(true); + }; + const role = spec.role.fold(() => ({}), (role) => ({ role })); + const listRole = Optional.from(spec.listRole).map((listRole) => ({ listRole })).getOr({}); + const ariaLabelAttribute = spec.ariaLabel.fold(() => ({}), (ariaLabel) => { + const translatedAriaLabel = sharedBackstage.providers.translate(ariaLabel); + return { + 'aria-label': translatedAriaLabel + }; + }); + const iconSpec = render$4('chevron-down', { + tag: 'div', + classes: [`${prefix}__select-chevron`] + }, sharedBackstage.providers.icons); + const fixWidthBehaviourName = generate$6('common-button-display-events'); + // Should we use Id.generate here? + const customEventsName = 'dropdown-events'; + const memDropdown = record(Dropdown.sketch({ + ...spec.uid ? { uid: spec.uid } : {}, + ...role, + ...listRole, + dom: { + tag: 'button', + classes: [prefix, `${prefix}--select`].concat(map$2(spec.classes, (c) => `${prefix}--${c}`)), + attributes: { + ...ariaLabelAttribute, + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}) + } + }, + components: componentRenderPipeline([ + optMemDisplayIcon.map((mem) => mem.asSpec()), + optMemDisplayText.map((mem) => mem.asSpec()), + Optional.some(iconSpec) + ]), + matchWidth: true, + useMinWidth: true, + // When the dropdown opens, if we are in search mode, then we want to + // focus our searcher. + onOpen: (anchor, dropdownComp, tmenuComp) => { + if (spec.searchable) { + focusSearchField(tmenuComp); + } + }, + dropdownBehaviours: derive$1([ + ...spec.dropdownBehaviours, + DisablingConfigs.button(() => spec.disabled || sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)), + // INVESTIGATE (TINY-9012): There was a old comment here about something not quite working, and that + // we can still get the button focused. It was probably related to Unselecting. + Unselecting.config({}), + Replacing.config({}), + ...(spec.tooltip.map((t) => Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ + tooltipText: sharedBackstage.providers.translate(t), + onShow: (comp) => { + if (lift2(tooltip.get(), spec.tooltip, (tooltipStr, tt) => tt !== tooltipStr).getOr(false)) { + const translatedTooltip = sharedBackstage.providers.translate(tooltip.get().getOr('')); + Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: translatedTooltip })); + } + } + })))).toArray(), + // This is the generic way to make onSetup and onDestroy call as the component is attached / + // detached from the page/DOM. + config(customEventsName, [ + onControlAttached(spec, editorOffCell), + onControlDetached(spec, editorOffCell) + ]), + config(fixWidthBehaviourName, [ + runOnAttached((comp, _se) => { + if (spec.listRole !== 'listbox') { + forceInitialSize(comp); + } + }), + ]), + config('update-dropdown-width-variable', [ + run$1(windowResize(), (comp, _se) => Dropdown.close(comp)), + ]), + config('menubutton-update-display-text', [ + // These handlers are just using Replacing to replace either the menu + // text or the icon. + run$1(updateMenuText, (comp, se) => { + optMemDisplayText.bind((mem) => mem.getOpt(comp)).each((displayText) => { + Replacing.set(displayText, [text$2(sharedBackstage.providers.translate(se.event.text))]); + }); + }), + run$1(updateMenuIcon, (comp, se) => { + optMemDisplayIcon.bind((mem) => mem.getOpt(comp)).each((displayIcon) => { + Replacing.set(displayIcon, [ + renderReplaceableIconFromPack(se.event.icon, sharedBackstage.providers.icons) + ]); + }); + }), + run$1(updateTooltiptext, (comp, se) => { + const translatedTooltip = sharedBackstage.providers.translate(se.event.text); + set$9(comp.element, 'aria-label', translatedTooltip); + tooltip.set(Optional.some(se.event.text)); + }) + ]) + ]), + eventOrder: deepMerge(toolbarButtonEventOrder, { + // INVESTIGATE (TINY-9014): Explain why we need the events in this order. + // Ideally, have a test that fails when they are in a different order if order + // is important + [mousedown()]: ['focusing', 'alloy.base.behaviour', 'item-type-events', 'normal-dropdown-events'], + [attachedToDom()]: [ + 'toolbar-button-events', + Tooltipping.name(), + customEventsName, + fixWidthBehaviourName, + ] + }), + sandboxBehaviours: derive$1([ + Keying.config({ + mode: 'special', + onLeft: onLeftOrRightInMenu, + onRight: onLeftOrRightInMenu + }), + config('dropdown-sandbox-events', [ + run$1(refetchTriggerEvent, (originalSandboxComp, se) => { + handleRefetchTrigger(originalSandboxComp); + // It's a custom event that no-one else should be listening to, so stop it. + se.stop(); + }), + run$1(redirectMenuItemInteractionEvent, (sandboxComp, se) => { + handleRedirectToMenuItem(sandboxComp, se); + // It's a custom event that no-one else should be listening to, so stop it. + se.stop(); + }) + ]) + ]), + lazySink: sharedBackstage.getSink, + toggleClass: `${prefix}--active`, + parts: { + menu: { + ...part(false, spec.columns, spec.presets), + // When the menu is "searchable", use fakeFocus so that keyboard + // focus stays in the search field + fakeFocus: spec.searchable, + // We don't want to update the `aria-selected` on highlight or dehighlight for the `listbox` role because that is used to indicate the selected item + ...(spec.listRole === 'listbox' ? {} : { + onHighlightItem: updateAriaOnHighlight, + onCollapseMenu: (tmenuComp, itemCompCausingCollapse, nowActiveMenuComp) => { + // We want to update ARIA on collapsing as well, because it isn't changing + // the highlights. So what we need to do is get the right parameters to + // pass to updateAriaOnHighlight + Highlighting.getHighlighted(nowActiveMenuComp).each((itemComp) => { + updateAriaOnHighlight(tmenuComp, nowActiveMenuComp, itemComp); + }); + }, + onDehighlightItem: updateAriaOnDehighlight + }) + } + }, + getAnchorOverrides: () => { + return { + maxHeightFunction: (element, available) => { + anchored()(element, available - 10); + }, + }; + }, + fetch: (comp) => Future.nu(curry(spec.fetch, comp)) + })); + return memDropdown.asSpec(); + }; + + const isMenuItemReference = (item) => isString(item); + const isSeparator$2 = (item) => item.type === 'separator'; + const isExpandingMenuItem = (item) => has$2(item, 'getSubmenuItems'); + const separator$2 = { + type: 'separator' + }; + const unwrapReferences = (items, menuItems) => { + // Unwrap any string based menu item references + const realItems = foldl(items, (acc, item) => { + if (isMenuItemReference(item)) { + if (item === '') { + return acc; + } + else if (item === '|') { + // Ignore the separator if it's at the start or a duplicate + return acc.length > 0 && !isSeparator$2(acc[acc.length - 1]) ? acc.concat([separator$2]) : acc; + } + else if (has$2(menuItems, item.toLowerCase())) { + return acc.concat([menuItems[item.toLowerCase()]]); + } + else { + // TODO: Add back after TINY-3232 is implemented + // console.error('No representation for menuItem: ' + item); + return acc; + } + } + else { + return acc.concat([item]); + } + }, []); + // Remove any trailing separators + if (realItems.length > 0 && isSeparator$2(realItems[realItems.length - 1])) { + realItems.pop(); + } + return realItems; + }; + const getFromExpandingItem = (item, menuItems) => { + const submenuItems = item.getSubmenuItems(); + const rest = expand(submenuItems, menuItems); + const newMenus = deepMerge(rest.menus, { [item.value]: rest.items }); + const newExpansions = deepMerge(rest.expansions, { [item.value]: item.value }); + return { + item, + menus: newMenus, + expansions: newExpansions + }; + }; + const generateValueIfRequired = (item) => { + // Use the value already in item if it has one. + const itemValue = get$h(item, 'value').getOrThunk(() => generate$6('generated-menu-item')); + return deepMerge({ value: itemValue }, item); + }; + // Takes items, and consolidates them into its return value + const expand = (items, menuItems) => { + // Fistly, we do all substitution using the registry for any items referenced by their + // string key. + const realItems = unwrapReferences(isString(items) ? items.split(' ') : items, menuItems); + // Now that we have complete bridge Item specs for all items, we need to collect the + // submenus, items in the primary menu, and triggering menu items all into one + // giant object to from the building blocks on our TieredData + return foldr(realItems, (acc, item) => { + if (isExpandingMenuItem(item)) { + // We generate a random value for item, but only if there isn't an existing value + const itemWithValue = generateValueIfRequired(item); + // The newData isn't quite in the format you might expect. The list of items + // for an item with nested items is just the single parent item. All of the nested + // items becomes part of '.menus'. Finally, the expansions is just a map from + // the triggering item to the first submenu. Incidentally, they are given the same + // value (triggering item and submenu), for convenience. + const newData = getFromExpandingItem(itemWithValue, menuItems); + return { + // Combine all of our current submenus and items with the new submenus created by + // this item with nested subitems + menus: deepMerge(acc.menus, newData.menus), + // Add our parent item into the list of items in the *current menu*. + items: [newData.item, ...acc.items], + // Merge together our "this item opens this submenu" objects + expansions: deepMerge(acc.expansions, newData.expansions) + }; + } + else { + // If we aren't creating any submenus, then all we need to do is add this item + // to the list of items in the current menu. So this is the same as an expanding + // menu item, except it doesn't add to `menus` or `expansions`. + return { + ...acc, + items: [item, ...acc.items] + }; + } + }, { + menus: {}, + expansions: {}, + items: [] + }); + }; + + const getSearchModeForField = (settings) => { + return settings.search.fold(() => ({ searchMode: 'no-search' }), (searchSettings) => ({ + searchMode: 'search-with-field', + placeholder: searchSettings.placeholder + })); + }; + const getSearchModeForResults = (settings) => { + return settings.search.fold(() => ({ searchMode: 'no-search' }), (_) => ({ searchMode: 'search-with-results' })); + }; + const build = (items, itemResponse, backstage, settings) => { + const primary = generate$6('primary-menu'); + // The expand process identifies all the items, submenus, and triggering items + // defined by the list of items. It substitutes the strings using the values registered + // in the menuItem registry where necessary. It is the building blocks of TieredData, + // but everything is still just in the bridge item format ... nothing has been turned + // into AlloySpecs. + const data = expand(items, backstage.shared.providers.menuItems()); + if (data.items.length === 0) { + return Optional.none(); + } + // Only the main menu has a searchable widget (if it is enabled) + const mainMenuSearchMode = getSearchModeForField(settings); + const mainMenu = createPartialMenu(primary, data.items, itemResponse, backstage, settings.isHorizontalMenu, mainMenuSearchMode); + // The submenus do not have the search field, but will have search results for + // connecting to the search field via aria-controls + const submenuSearchMode = getSearchModeForResults(settings); + const submenus = map$1(data.menus, (menuItems, menuName) => createPartialMenu(menuName, menuItems, itemResponse, backstage, + // Currently, submenus cannot be horizontal menus (so always false) + false, submenuSearchMode)); + const menus = deepMerge(submenus, wrap(primary, mainMenu)); + return Optional.from(tieredMenu.tieredData(primary, menus, data.expansions)); + }; + + const isSingleListItem = (item) => !has$2(item, 'items'); + const dataAttribute = 'data-value'; + const fetchItems = (dropdownComp, name, items, selectedValue, hasNestedItems) => map$2(items, (item) => { + if (!isSingleListItem(item)) { + return { + type: 'nestedmenuitem', + text: item.text, + getSubmenuItems: () => fetchItems(dropdownComp, name, item.items, selectedValue, hasNestedItems) + }; + } + else { + return { + type: 'togglemenuitem', + ...(hasNestedItems ? {} : { role: 'option' }), + text: item.text, + value: item.value, + active: item.value === selectedValue, + onAction: () => { + Representing.setValue(dropdownComp, item.value); + emitWith(dropdownComp, formChangeEvent, { name }); + Focusing.focus(dropdownComp); + } + }; + } + }); + const findItemByValue = (items, value) => findMap(items, (item) => { + if (!isSingleListItem(item)) { + return findItemByValue(item.items, value); + } + else { + return someIf(item.value === value, item); + } + }); + const renderListBox = (spec, backstage, initialData) => { + const hasNestedItems = exists(spec.items, (item) => !isSingleListItem(item)); + const providersBackstage = backstage.shared.providers; + const initialItem = initialData + .bind((value) => findItemByValue(spec.items, value)) + .orThunk(() => head(spec.items).filter(isSingleListItem)); + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const pField = FormField.parts.field({ + dom: {}, + factory: { + sketch: (sketchSpec) => renderCommonDropdown({ + context: spec.context, + uid: sketchSpec.uid, + text: initialItem.map((item) => item.text), + icon: Optional.none(), + tooltip: Optional.none(), + role: someIf(!hasNestedItems, 'combobox'), + ...(hasNestedItems ? {} : { listRole: 'listbox' }), + ariaLabel: spec.label, + fetch: (comp, callback) => { + const items = fetchItems(comp, spec.name, spec.items, Representing.getValue(comp), hasNestedItems); + callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, { + isHorizontalMenu: false, + search: Optional.none() + })); + }, + onSetup: constant$1(noop), + getApi: constant$1({}), + columns: 1, + presets: 'normal', + classes: [], + dropdownBehaviours: [ + Tabstopping.config({}), + withComp(initialItem.map((item) => item.value), (comp) => get$g(comp.element, dataAttribute), (comp, data) => { + // We only want to update the saved value if the value set is a valid property + findItemByValue(spec.items, data) + .each((item) => { + set$9(comp.element, dataAttribute, item.value); + emitWith(comp, updateMenuText, { text: item.text }); + }); + }) + ] + }, 'tox-listbox', backstage.shared) + } + }); + const listBoxWrap = { + dom: { + tag: 'div', + classes: ['tox-listboxfield'] + }, + components: [pField] + }; + return FormField.sketch({ + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components: flatten([pLabel.toArray(), [listBoxWrap]]), + fieldBehaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (comp) => { + FormField.getField(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormField.getField(comp).each(Disabling.enable); + } + }) + ]) + }); + }; + + const renderPanel = (spec, backstage) => ({ + dom: { + tag: 'div', + classes: spec.classes + }, + // All of the items passed through the form need to be put through the interpreter + // with their form part preserved. + components: map$2(spec.items, backstage.shared.interpreter) + }); + + const renderSelectBox = (spec, providersBackstage, initialData) => { + const translatedOptions = map$2(spec.items, (item) => ({ + text: providersBackstage.translate(item.text), + value: item.value + })); + // DUPE with TextField. + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const pField = FormField.parts.field({ + // TODO: Alloy should not allow dom changing of an HTML select! + dom: {}, + ...initialData.map((data) => ({ data })).getOr({}), + selectAttributes: { + size: spec.size + }, + options: translatedOptions, + factory: HtmlSelect, + selectBehaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable + }), + Tabstopping.config({}), + config('selectbox-change', [ + run$1(change(), (component, _) => { + emitWith(component, formChangeEvent, { name: spec.name }); + }) + ]) + ]) + }); + const chevron = spec.size > 1 ? Optional.none() : + Optional.some(render$4('chevron-down', { tag: 'div', classes: ['tox-selectfield__icon-js'] }, providersBackstage.icons)); + const selectWrap = { + dom: { + tag: 'div', + classes: ['tox-selectfield'] + }, + components: flatten([[pField], chevron.toArray()]) + }; + return FormField.sketch({ + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components: flatten([pLabel.toArray(), [selectWrap]]), + fieldBehaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (comp) => { + FormField.getField(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormField.getField(comp).each(Disabling.enable); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)) + ]) + }); + }; + + const formatSize = (size) => { + const unitDec = { + '': 0, + 'px': 0, + 'pt': 1, + 'mm': 1, + 'pc': 2, + 'ex': 2, + 'em': 2, + 'ch': 2, + 'rem': 2, + 'cm': 3, + 'in': 4, + '%': 4 + }; + const maxDecimal = (unit) => unit in unitDec ? unitDec[unit] : 1; + let numText = size.value.toFixed(maxDecimal(size.unit)); + if (numText.indexOf('.') !== -1) { + numText = numText.replace(/\.?0*$/, ''); + } + return numText + size.unit; + }; + const parseSize = (sizeText) => { + const numPattern = /^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/; + const match = numPattern.exec(sizeText); + if (match !== null) { + const value = parseFloat(match[1]); + const unit = match[2]; + return Result.value({ value, unit }); + } + else { + return Result.error(sizeText); + } + }; + const convertUnit = (size, unit) => { + const inInch = { + '': 96, + 'px': 96, + 'pt': 72, + 'cm': 2.54, + 'pc': 12, + 'mm': 25.4, + 'in': 1 + }; + const supported = (u) => has$2(inInch, u); + if (size.unit === unit) { + return Optional.some(size.value); + } + else if (supported(size.unit) && supported(unit)) { + if (inInch[size.unit] === inInch[unit]) { + return Optional.some(size.value); + } + else { + return Optional.some(size.value / inInch[size.unit] * inInch[unit]); + } + } + else { + return Optional.none(); + } + }; + const noSizeConversion = (_input) => Optional.none(); + const ratioSizeConversion = (scale, unit) => (size) => convertUnit(size, unit).map((value) => ({ value: value * scale, unit })); + const makeRatioConverter = (currentFieldText, otherFieldText) => { + const cValue = parseSize(currentFieldText).toOptional(); + const oValue = parseSize(otherFieldText).toOptional(); + return lift2(cValue, oValue, (cSize, oSize) => convertUnit(cSize, oSize.unit).map((val) => oSize.value / val).map((r) => ratioSizeConversion(r, oSize.unit)).getOr(noSizeConversion)).getOr(noSizeConversion); + }; + + const renderSizeInput = (spec, providersBackstage) => { + let converter = noSizeConversion; + const ratioEvent = generate$6('ratio-event'); + const makeIcon = (iconName) => render$4(iconName, { tag: 'span', classes: ['tox-icon', 'tox-lock-icon__' + iconName] }, providersBackstage.icons); + const disabled = () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable; + const toggleOnReceive$1 = toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)); + const label = spec.label.getOr('Constrain proportions'); + const translatedLabel = providersBackstage.translate(label); + const pLock = FormCoupledInputs.parts.lock({ + dom: { + tag: 'button', + classes: ['tox-lock', 'tox-button', 'tox-button--naked', 'tox-button--icon'], + attributes: { + 'aria-label': translatedLabel, + 'data-mce-name': label + } + }, + components: [ + makeIcon('lock'), + makeIcon('unlock') + ], + buttonBehaviours: derive$1([ + Disabling.config({ disabled }), + toggleOnReceive$1, + Tabstopping.config({}), + Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: translatedLabel + })) + ]) + }); + const formGroup = (components) => ({ + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components + }); + const getFieldPart = (isField1) => FormField.parts.field({ + factory: Input, + inputClasses: ['tox-textfield'], + inputBehaviours: derive$1([ + Disabling.config({ disabled }), + toggleOnReceive$1, + Tabstopping.config({}), + config('size-input-events', [ + run$1(focusin(), (component, _simulatedEvent) => { + emitWith(component, ratioEvent, { isField1 }); + }), + run$1(change(), (component, _simulatedEvent) => { + emitWith(component, formChangeEvent, { name: spec.name }); + }) + ]) + ]), + selectOnFocus: false + }); + const getLabel = (label) => ({ + dom: { + tag: 'label', + classes: ['tox-label'] + }, + components: [ + text$2(providersBackstage.translate(label)) + ] + }); + const widthField = FormCoupledInputs.parts.field1(formGroup([FormField.parts.label(getLabel('Width')), getFieldPart(true)])); + const heightField = FormCoupledInputs.parts.field2(formGroup([FormField.parts.label(getLabel('Height')), getFieldPart(false)])); + return FormCoupledInputs.sketch({ + dom: { + tag: 'div', + classes: ['tox-form__group'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-form__controls-h-stack'] + }, + components: [ + // NOTE: Form coupled inputs to the FormField.sketch themselves. + widthField, + heightField, + formGroup([ + getLabel(nbsp), + pLock + ]) + ] + } + ], + field1Name: 'width', + field2Name: 'height', + locked: true, + markers: { + lockClass: 'tox-locked' + }, + onLockedChange: (current, other, _lock) => { + parseSize(Representing.getValue(current)).each((size) => { + converter(size).each((newSize) => { + Representing.setValue(other, formatSize(newSize)); + }); + }); + }, + coupledFieldBehaviours: derive$1([ + Disabling.config({ + disabled, + onDisabled: (comp) => { + FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable); + FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable); + FormCoupledInputs.getLock(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable); + FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable); + FormCoupledInputs.getLock(comp).each(Disabling.enable); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')), + config('size-input-events2', [ + run$1(ratioEvent, (component, simulatedEvent) => { + const isField1 = simulatedEvent.event.isField1; + const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component); + const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component); + const value1 = optCurrent.map(Representing.getValue).getOr(''); + const value2 = optOther.map(Representing.getValue).getOr(''); + converter = makeRatioConverter(value1, value2); + }) + ]) + ]) + }); + }; + + const renderSlider = (spec, providerBackstage, initialData) => { + const labelPart = Slider.parts.label({ + dom: { + tag: 'label', + classes: ['tox-label'] + }, + components: [ + text$2(providerBackstage.translate(spec.label)) + ] + }); + const spectrum = Slider.parts.spectrum({ + dom: { + tag: 'div', + classes: ['tox-slider__rail'], + attributes: { + role: 'presentation' + } + } + }); + const thumb = Slider.parts.thumb({ + dom: { + tag: 'div', + classes: ['tox-slider__handle'], + attributes: { + role: 'presentation' + } + } + }); + return Slider.sketch({ + dom: { + tag: 'div', + classes: ['tox-slider'], + attributes: { + role: 'presentation' + } + }, + model: { + mode: 'x', + minX: spec.min, + maxX: spec.max, + getInitialValue: constant$1(initialData.getOrThunk(() => (Math.abs(spec.max) - Math.abs(spec.min)) / 2)) + }, + components: [ + labelPart, + spectrum, + thumb + ], + sliderBehaviours: derive$1([ + ComposingConfigs.self(), + Focusing.config({}) + ]), + onChoose: (component, thumb, value) => { + emitWith(component, formChangeEvent, { name: spec.name, value }); + }, + onChange: (component, thumb, value) => { + emitWith(component, formChangeEvent, { name: spec.name, value }); + }, + }); + }; + + const renderTable = (spec, providersBackstage) => { + const renderTh = (text) => ({ + dom: { + tag: 'th', + innerHtml: providersBackstage.translate(text) + } + }); + const renderHeader = (header) => ({ + dom: { + tag: 'thead' + }, + components: [ + { + dom: { + tag: 'tr' + }, + components: map$2(header, renderTh) + } + ] + }); + const renderTd = (text) => ({ dom: { tag: 'td', innerHtml: providersBackstage.translate(text) } }); + const renderTr = (row) => ({ dom: { tag: 'tr' }, components: map$2(row, renderTd) }); + const renderRows = (rows) => ({ dom: { tag: 'tbody' }, components: map$2(rows, renderTr) }); + return { + dom: { + tag: 'table', + classes: ['tox-dialog__table'] + }, + components: [ + renderHeader(spec.header), + renderRows(spec.cells) + ], + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}) + ]) + }; + }; + + const renderTextField = (spec, providersBackstage) => { + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + const baseInputBehaviours = [ + Disabling.config({ + disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + Keying.config({ + mode: 'execution', + useEnter: spec.multiline !== true, + useControlEnter: spec.multiline === true, + execute: (comp) => { + emit(comp, formSubmitEvent); + return Optional.some(true); + } + }), + config('textfield-change', [ + run$1(input(), (component, _) => { + emitWith(component, formChangeEvent, { name: spec.name }); + }), + run$1(postPaste(), (component, _) => { + emitWith(component, formChangeEvent, { name: spec.name }); + }) + ]), + Tabstopping.config({}) + ]; + const validatingBehaviours = spec.validation.map((vl) => Invalidating.config({ + getRoot: (input) => { + return parentElement(input.element); + }, + invalidClass: 'tox-invalid', + validator: { + validate: (input) => { + const v = Representing.getValue(input); + const result = vl.validator(v); + return Future.pure(result === true ? Result.value(v) : Result.error(result)); + }, + validateOnLoad: vl.validateOnLoad + } + })).toArray(); + const placeholder = spec.placeholder.fold(constant$1({}), (p) => ({ placeholder: providersBackstage.translate(p) })); + const inputMode = spec.inputMode.fold(constant$1({}), (mode) => ({ inputmode: mode })); + const spellcheck = spec.spellcheck.fold(constant$1({}), (spellchecker) => ({ spellcheck: spellchecker })); + const inputAttributes = { + ...spellcheck, + ...placeholder, + ...inputMode, + 'data-mce-name': spec.name + }; + const pField = FormField.parts.field({ + tag: spec.multiline === true ? 'textarea' : 'input', + ...spec.data.map((data) => ({ data })).getOr({}), + inputAttributes, + inputClasses: [spec.classname], + inputBehaviours: derive$1(flatten([ + baseInputBehaviours, + validatingBehaviours + ])), + selectOnFocus: false, + factory: Input + }); + // TINY-9331: This wrapper is needed to avoid border-radius rendering issues when the textarea has a scrollbar + const pTextField = spec.multiline ? { + dom: { + tag: 'div', + classes: ['tox-textarea-wrap'] + }, + components: [pField] + } : pField; + const extraClasses = spec.flex ? ['tox-form__group--stretched'] : []; + const extraClasses2 = extraClasses.concat(spec.maximized ? ['tox-form-group--maximize'] : []); + const extraBehaviours = [ + Disabling.config({ + disabled: () => spec.disabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (comp) => { + FormField.getField(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormField.getField(comp).each(Disabling.enable); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + ]; + return renderFormFieldWith(pLabel, pTextField, extraClasses2, extraBehaviours); + }; + const renderInput = (spec, providersBackstage, initialData) => renderTextField({ + name: spec.name, + multiline: false, + label: spec.label, + inputMode: spec.inputMode, + placeholder: spec.placeholder, + flex: false, + disabled: !spec.enabled, + classname: 'tox-textfield', + validation: Optional.none(), + maximized: spec.maximized, + data: initialData, + context: spec.context, + spellcheck: Optional.none(), + }, providersBackstage); + const renderTextarea = (spec, providersBackstage, initialData) => renderTextField({ + name: spec.name, + multiline: true, + label: spec.label, + inputMode: Optional.none(), // type attribute is not valid for textareas + placeholder: spec.placeholder, + flex: true, + disabled: !spec.enabled, + classname: 'tox-textarea', + validation: Optional.none(), + maximized: spec.maximized, + data: initialData, + context: spec.context, + spellcheck: spec.spellcheck, + }, providersBackstage); + + const getMenuButtonApi = (component) => ({ + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state), + setActive: (state) => { + // Note: We can't use the toggling behaviour here, as the dropdown for the menu also relies on it. + // As such, we'll need to do this manually + const elm = component.element; + if (state) { + add$2(elm, "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */); + set$9(elm, 'aria-pressed', true); + } + else { + remove$3(elm, "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */); + remove$8(elm, 'aria-pressed'); + } + }, + isActive: () => has(component.element, "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */), + setTooltip: (tooltip) => { + emitWith(component, updateTooltiptext, { + text: tooltip + }); + }, + setText: (text) => { + emitWith(component, updateMenuText, { + text + }); + }, + setIcon: (icon) => emitWith(component, updateMenuIcon, { + icon + }) + }); + const renderMenuButton = (spec, prefix, backstage, role, tabstopping = true, btnName) => { + const classes = spec.buttonType === 'bordered' ? ['bordered'] : []; + return renderCommonDropdown({ + text: spec.text, + icon: spec.icon, + tooltip: spec.tooltip, + ariaLabel: spec.tooltip, + searchable: spec.search.isSome(), + // https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-2/menubar-2.html + role, + fetch: (dropdownComp, callback) => { + const fetchContext = { + pattern: spec.search.isSome() ? getSearchPattern(dropdownComp) : '' + }; + spec.fetch((items) => { + callback(build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, { + isHorizontalMenu: false, + // MenuButtons are the only dropdowns that support searchable (2022-08-16) + search: spec.search + })); + }, fetchContext, getMenuButtonApi(dropdownComp)); + }, + onSetup: spec.onSetup, + getApi: (comp) => getMenuButtonApi(comp), + columns: 1, + presets: 'normal', + classes, + dropdownBehaviours: [ + ...(tabstopping ? [Tabstopping.config({})] : []), + ], + context: spec.context + }, prefix, backstage.shared, btnName); + }; + const getFetch = (items, getButton, backstage) => { + const getMenuItemAction = (item) => (api) => { + // Update the menu item state + const newValue = !api.isActive(); + api.setActive(newValue); + item.storage.set(newValue); + // Fire the form action event + backstage.shared.getSink().each((sink) => { + getButton().getOpt(sink).each((orig) => { + focus$4(orig.element); + emitWith(orig, formActionEvent, { + name: item.name, + value: item.storage.get() + }); + }); + }); + }; + const getMenuItemSetup = (item) => (api) => { + api.setActive(item.storage.get()); + }; + return (success) => { + success(map$2(items, (item) => { + const text = item.text.fold(() => ({}), (text) => ({ + text + })); + return { + type: item.type, + active: false, + ...text, + context: item.context, + onAction: getMenuItemAction(item), + onSetup: getMenuItemSetup(item) + }; + })); + }; + }; + + const renderLabel = (text) => ({ + dom: { + tag: 'span', + classes: ['tox-tree__label'], + attributes: { + 'aria-label': text, + } + }, + components: [ + text$2(text) + ], + }); + const renderCustomStateIcon = (container, components, backstage) => { + container.customStateIcon.each((icon) => components.push(renderIcon(icon, backstage.shared.providers.icons, container.customStateIconTooltip.fold(() => [], (tooltip) => [ + Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ + tooltipText: tooltip + })) + ]), ['tox-icon-custom-state']))); + }; + const leafLabelEventsId = generate$6('leaf-label-event-id'); + const renderLeafLabel = ({ leaf, onLeafAction, visible, treeId, selectedId, backstage }) => { + const internalMenuButton = leaf.menu.map((btn) => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none(), visible)); + const components = [renderLabel(leaf.title)]; + renderCustomStateIcon(leaf, components, backstage); + internalMenuButton.each((btn) => components.push(btn)); + return Button.sketch({ + dom: { + tag: 'div', + classes: ['tox-tree--leaf__label', 'tox-trbtn'] + .concat(visible ? ['tox-tree--leaf__label--visible'] : []), + }, + components, + role: 'treeitem', + action: (button) => { + onLeafAction(leaf.id); + button.getSystem().broadcastOn([`update-active-item-${treeId}`], { + value: leaf.id + }); + }, + eventOrder: { + [keydown()]: [ + leafLabelEventsId, + 'keying', + ] + }, + buttonBehaviours: derive$1([ + ...(visible ? [Tabstopping.config({})] : []), + Toggling.config({ + toggleClass: 'tox-trbtn--enabled', + toggleOnExecute: false, + aria: { + mode: 'selected' + } + }), + Receiving.config({ + channels: { + [`update-active-item-${treeId}`]: { + onReceive: (comp, message) => { + (message.value === leaf.id ? Toggling.on : Toggling.off)(comp); + } + } + } + }), + config(leafLabelEventsId, [ + runOnAttached((comp, _se) => { + selectedId.each((id) => { + const toggle = id === leaf.id ? Toggling.on : Toggling.off; + toggle(comp); + }); + }), + run$1(keydown(), (comp, se) => { + const isLeftArrowKey = se.event.raw.code === 'ArrowLeft'; + const isRightArrowKey = se.event.raw.code === 'ArrowRight'; + if (isLeftArrowKey) { + ancestor$1(comp.element, '.tox-tree--directory').each((dirElement) => { + comp.getSystem().getByDom(dirElement).each((dirComp) => { + child(dirElement, '.tox-tree--directory__label').each((dirLabelElement) => { + dirComp.getSystem().getByDom(dirLabelElement).each(Focusing.focus); + }); + }); + }); + se.stop(); + } + else if (isRightArrowKey) { + se.stop(); + } + }) + ]) + ]), + }); + }; + const renderIcon = (iconName, iconsProvider, behaviours, extraClasses, extraAttributes) => render$4(iconName, { + tag: 'span', + classes: [ + 'tox-tree__icon-wrap', + 'tox-icon', + ].concat(extraClasses || []), + behaviours, + attributes: extraAttributes + }, iconsProvider); + const renderIconFromPack = (iconName, iconsProvider) => renderIcon(iconName, iconsProvider, []); + const directoryLabelEventsId = generate$6('directory-label-event-id'); + const renderDirectoryLabel = ({ directory, visible, noChildren, backstage }) => { + const internalMenuButton = directory.menu.map((btn) => renderMenuButton(btn, 'tox-mbtn', backstage, Optional.none())); + const components = [ + { + dom: { + tag: 'div', + classes: ['tox-chevron'], + }, + components: [ + renderIconFromPack('chevron-right', backstage.shared.providers.icons), + ] + }, + renderLabel(directory.title) + ]; + renderCustomStateIcon(directory, components, backstage); + internalMenuButton.each((btn) => { + components.push(btn); + }); + const toggleExpandChildren = (button) => { + ancestor$1(button.element, '.tox-tree--directory').each((directoryEle) => { + button.getSystem().getByDom(directoryEle).each((directoryComp) => { + const willExpand = !Toggling.isOn(directoryComp); + Toggling.toggle(directoryComp); + emitWith(button, 'expand-tree-node', { expanded: willExpand, node: directory.id }); + }); + }); + }; + return Button.sketch({ + dom: { + tag: 'div', + classes: ['tox-tree--directory__label', 'tox-trbtn'].concat(visible ? ['tox-tree--directory__label--visible'] : []), + }, + components, + action: toggleExpandChildren, + eventOrder: { + [keydown()]: [ + directoryLabelEventsId, + 'keying', + ] + }, + buttonBehaviours: derive$1([ + ...(visible ? [Tabstopping.config({})] : []), + config(directoryLabelEventsId, [ + run$1(keydown(), (comp, se) => { + const isRightArrowKey = se.event.raw.code === 'ArrowRight'; + const isLeftArrowKey = se.event.raw.code === 'ArrowLeft'; + if (isRightArrowKey && noChildren) { + se.stop(); + } + if (isRightArrowKey || isLeftArrowKey) { + ancestor$1(comp.element, '.tox-tree--directory').each((directoryEle) => { + comp.getSystem().getByDom(directoryEle).each((directoryComp) => { + if (!Toggling.isOn(directoryComp) && isRightArrowKey || Toggling.isOn(directoryComp) && isLeftArrowKey) { + toggleExpandChildren(comp); + se.stop(); + } + else if (isLeftArrowKey && !Toggling.isOn(directoryComp)) { + ancestor$1(directoryComp.element, '.tox-tree--directory').each((parentDirElement) => { + child(parentDirElement, '.tox-tree--directory__label').each((parentDirLabelElement) => { + directoryComp.getSystem().getByDom(parentDirLabelElement).each(Focusing.focus); + }); + }); + se.stop(); + } + }); + }); + } + }) + ]) + ]) + }); + }; + const renderDirectoryChildren = ({ children, onLeafAction, visible, treeId, expandedIds, selectedId, backstage }) => { + return { + dom: { + tag: 'div', + classes: ['tox-tree--directory__children'], + }, + components: children.map((item) => { + return item.type === 'leaf' ? + renderLeafLabel({ leaf: item, selectedId, onLeafAction, visible, treeId, backstage }) : + renderDirectory({ directory: item, expandedIds, selectedId, onLeafAction, labelTabstopping: visible, treeId, backstage }); + }), + behaviours: derive$1([ + Sliding.config({ + dimension: { + property: 'height' + }, + closedClass: 'tox-tree--directory__children--closed', + openClass: 'tox-tree--directory__children--open', + growingClass: 'tox-tree--directory__children--growing', + shrinkingClass: 'tox-tree--directory__children--shrinking', + expanded: visible, + }), + Replacing.config({}) + ]) + }; + }; + const directoryEventsId = generate$6('directory-event-id'); + const renderDirectory = ({ directory, onLeafAction, labelTabstopping, treeId, backstage, expandedIds, selectedId }) => { + const { children } = directory; + const expandedIdsCell = Cell(expandedIds); + const computedChildrenComponents = (visible) => children.map((item) => { + return item.type === 'leaf' ? + renderLeafLabel({ leaf: item, selectedId, onLeafAction, visible, treeId, backstage }) : + renderDirectory({ directory: item, expandedIds: expandedIdsCell.get(), selectedId, onLeafAction, labelTabstopping: visible, treeId, backstage }); + }); + const childrenVisible = expandedIds.includes(directory.id); + return ({ + dom: { + tag: 'div', + classes: ['tox-tree--directory'], + attributes: { + role: 'treeitem' + } + }, + components: [ + renderDirectoryLabel({ directory, visible: labelTabstopping, noChildren: directory.children.length === 0, backstage }), + renderDirectoryChildren({ children, expandedIds, selectedId, onLeafAction, visible: childrenVisible, treeId, backstage }) + ], + behaviours: derive$1([ + config(directoryEventsId, [ + runOnAttached((comp, _se) => { + Toggling.set(comp, childrenVisible); + }), + run$1('expand-tree-node', (_cmp, se) => { + const { expanded, node } = se.event; + expandedIdsCell.set(expanded ? + [...expandedIdsCell.get(), node] : + expandedIdsCell.get().filter((id) => id !== node)); + }), + ]), + Toggling.config({ + ...(directory.children.length > 0 ? { + aria: { + mode: 'expanded', + }, + } : {}), + toggleClass: 'tox-tree--directory--expanded', + onToggled: (comp, childrenVisible) => { + const childrenComp = comp.components()[1]; + const newChildren = computedChildrenComponents(childrenVisible); + if (childrenVisible) { + Sliding.grow(childrenComp); + } + else { + Sliding.shrink(childrenComp); + } + Replacing.set(childrenComp, newChildren); + }, + }), + ]) + }); + }; + const treeEventsId = generate$6('tree-event-id'); + const renderTree = (spec, backstage) => { + const onLeafAction = spec.onLeafAction.getOr(noop); + const onToggleExpand = spec.onToggleExpand.getOr(noop); + const defaultExpandedIds = spec.defaultExpandedIds; + const expandedIds = Cell(defaultExpandedIds); + const selectedIdCell = Cell(spec.defaultSelectedId); + const treeId = generate$6('tree-id'); + const children = (selectedId, expandedIds) => spec.items.map((item) => { + return item.type === 'leaf' ? + renderLeafLabel({ leaf: item, selectedId, onLeafAction, visible: true, treeId, backstage }) : + renderDirectory({ directory: item, selectedId, onLeafAction, expandedIds, labelTabstopping: true, treeId, backstage }); + }); + return { + dom: { + tag: 'div', + classes: ['tox-tree'], + attributes: { + role: 'tree' + } + }, + components: children(selectedIdCell.get(), expandedIds.get()), + behaviours: derive$1([ + Keying.config({ + mode: 'flow', + selector: '.tox-tree--leaf__label--visible, .tox-tree--directory__label--visible', + cycles: false, + }), + config(treeEventsId, [ + run$1('expand-tree-node', (_cmp, se) => { + const { expanded, node } = se.event; + expandedIds.set(expanded ? + [...expandedIds.get(), node] : + expandedIds.get().filter((id) => id !== node)); + onToggleExpand(expandedIds.get(), { expanded, node }); + }) + ]), + Receiving.config({ + channels: { + [`update-active-item-${treeId}`]: { + onReceive: (comp, message) => { + selectedIdCell.set(Optional.some(message.value)); + Replacing.set(comp, children(Optional.some(message.value), expandedIds.get())); + } + } + } + }), + Replacing.config({}) + ]) + }; + }; + + const renderCommonSpec = (spec, actionOpt, extraBehaviours = [], dom, components, tooltip, providersBackstage) => { + const action = actionOpt.fold(() => ({}), (action) => ({ + action + })); + const common = { + buttonBehaviours: derive$1([ + DisablingConfigs.item(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + Tabstopping.config({}), + ...tooltip.map((t) => Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate(t) + }))).toArray(), + config('button press', [ + preventDefault('click') + ]) + ].concat(extraBehaviours)), + eventOrder: { + click: ['button press', 'alloy.base.behaviour'], + mousedown: ['button press', 'alloy.base.behaviour'] + }, + ...action + }; + const domFinal = deepMerge(common, { dom }); + return deepMerge(domFinal, { components }); + }; + // An IconButton just seems to be a button that *cannot* have text, but + // can have a tooltip. It's only used for the More Drawer button at the moment. + const renderIconButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], btnName) => { + const tooltipAttributes = spec.tooltip.map((tooltip) => ({ + 'aria-label': providersBackstage.translate(tooltip), + })).getOr({}); + const dom = { + tag: 'button', + classes: ["tox-tbtn" /* ToolbarButtonClasses.Button */], + attributes: { ...tooltipAttributes, 'data-mce-name': btnName } + }; + const icon = spec.icon.map((iconName) => renderIconFromPack$1(iconName, providersBackstage.icons)); + const components = componentRenderPipeline([ + icon + ]); + return renderCommonSpec(spec, action, extraBehaviours, dom, components, spec.tooltip, providersBackstage); + }; + const calculateClassesFromButtonType = (buttonType) => { + switch (buttonType) { + case 'primary': + return ['tox-button']; + case 'toolbar': + return ['tox-tbtn']; + case 'secondary': + default: + return ['tox-button', 'tox-button--secondary']; + } + }; + // Maybe the list of extraBehaviours is better than doing a Merger.deepMerge that + // we do elsewhere? Not sure. + const renderButtonSpec = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => { + // It's a bit confusing that this is called text. It seems to be a tooltip. Although I can see + // that it's used if there is no icon + const translatedText = providersBackstage.translate(spec.text); + const icon = spec.icon.map((iconName) => renderIconFromPack$1(iconName, providersBackstage.icons)); + const components = [icon.getOrThunk(() => text$2(translatedText))]; + // The old default is based on the now-deprecated 'primary' property. `buttonType` takes precedence now. + const buttonType = spec.buttonType.getOr(!spec.primary && !spec.borderless ? 'secondary' : 'primary'); + const baseClasses = calculateClassesFromButtonType(buttonType); + const classes = [ + ...baseClasses, + ...icon.isSome() ? ['tox-button--icon'] : [], + ...spec.borderless ? ['tox-button--naked'] : [], + ...extraClasses + ]; + const dom = { + tag: 'button', + classes, + attributes: { + 'aria-label': translatedText, + 'data-mce-name': spec.text + } + }; + // Only provide a tooltip if we are using an icon. This is because above, a button is only an icon + // or text, and not both. + const optTooltip = spec.icon.map(constant$1(translatedText)); + return renderCommonSpec(spec, action, extraBehaviours, dom, components, optTooltip, providersBackstage); + }; + // This actually seems to be a button on the dialog for UrlInput only (browse). Interesting. + const renderButton$1 = (spec, action, providersBackstage, extraBehaviours = [], extraClasses = []) => { + const buttonSpec = renderButtonSpec(spec, Optional.some(action), providersBackstage, extraBehaviours, extraClasses); + return Button.sketch(buttonSpec); + }; + const getAction = (name, buttonType) => (comp) => { + if (buttonType === 'custom') { + emitWith(comp, formActionEvent, { + name, + value: {} + }); + } + else if (buttonType === 'submit') { + emit(comp, formSubmitEvent); + } + else if (buttonType === 'cancel') { + emit(comp, formCancelEvent); + } + else { + // eslint-disable-next-line no-console + console.error('Unknown button type: ', buttonType); + } + }; + const isMenuFooterButtonSpec = (spec, buttonType) => buttonType === 'menu'; + const isNormalFooterButtonSpec = (spec, buttonType) => buttonType === 'custom' || buttonType === 'cancel' || buttonType === 'submit'; + const isToggleButtonSpec = (spec, buttonType) => buttonType === 'togglebutton'; + const renderToggleButton = (spec, providers, btnName) => { + const optMemIcon = spec.icon + .map((memIcon) => renderReplaceableIconFromPack(memIcon, providers.icons)) + .map(record); + const action = (comp) => { + emitWith(comp, formActionEvent, { + name: spec.name, + value: { + setIcon: (newIcon) => { + optMemIcon.map((memIcon) => memIcon.getOpt(comp).each((displayIcon) => { + Replacing.set(displayIcon, [ + renderReplaceableIconFromPack(newIcon, providers.icons) + ]); + })); + } + } + }); + }; + // The old default is based on the now-deprecated 'primary' property. `buttonType` takes precedence now. + const buttonType = spec.buttonType.getOr(!spec.primary ? 'secondary' : 'primary'); + const buttonSpec = { + ...spec, + name: spec.name ?? '', + primary: buttonType === 'primary', + tooltip: spec.tooltip, + enabled: spec.enabled ?? false, + borderless: false + }; + const tooltipAttributes = buttonSpec.tooltip.or(spec.text).map((tooltip) => ({ + 'aria-label': providers.translate(tooltip), + })).getOr({}); + const buttonTypeClasses = calculateClassesFromButtonType(buttonType ?? 'secondary'); + const showIconAndText = spec.icon.isSome() && spec.text.isSome(); + const dom = { + tag: 'button', + classes: [ + ...buttonTypeClasses.concat(spec.icon.isSome() ? ['tox-button--icon'] : []), + ...(spec.active ? ["tox-button--enabled" /* ViewButtonClasses.Ticked */] : []), + ...(showIconAndText ? ['tox-button--icon-and-text'] : []) + ], + attributes: { + ...tooltipAttributes, + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}) + } + }; + const extraBehaviours = []; + const translatedText = providers.translate(spec.text.getOr('')); + const translatedTextComponed = text$2(translatedText); + const iconComp = componentRenderPipeline([optMemIcon.map((memIcon) => memIcon.asSpec())]); + const components = [ + ...iconComp, + ...(spec.text.isSome() ? [translatedTextComponed] : []) + ]; + const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers); + return Button.sketch(iconButtonSpec); + }; + const renderFooterButton = (spec, buttonType, backstage) => { + if (isMenuFooterButtonSpec(spec, buttonType)) { + const getButton = () => memButton; + const menuButtonSpec = spec; + const fixedSpec = { + ...spec, + buttonType: 'default', + type: 'menubutton', + // Currently, dialog-based menu buttons cannot be searchable. + search: Optional.none(), + onSetup: (api) => { + api.setEnabled(spec.enabled); + return noop; + }, + fetch: getFetch(menuButtonSpec.items, getButton, backstage) + }; + const memButton = record(renderMenuButton(fixedSpec, "tox-tbtn" /* ToolbarButtonClasses.Button */, backstage, Optional.none(), true, spec.text.or(spec.tooltip).getOrUndefined())); + return memButton.asSpec(); + } + else if (isNormalFooterButtonSpec(spec, buttonType)) { + const action = getAction(spec.name, buttonType); + const buttonSpec = { + ...spec, + context: buttonType === 'cancel' ? 'any' : spec.context, + borderless: false + }; + return renderButton$1(buttonSpec, action, backstage.shared.providers, []); + } + else if (isToggleButtonSpec(spec, buttonType)) { + return renderToggleButton(spec, backstage.shared.providers, spec.text.or(spec.tooltip).getOrUndefined()); + } + else { + // eslint-disable-next-line no-console + console.error('Unknown footer button type: ', buttonType); + throw new Error('Unknown footer button type'); + } + }; + const renderDialogButton = (spec, providersBackstage) => { + const action = getAction(spec.name, 'custom'); + return renderFormField(Optional.none(), FormField.parts.field({ + factory: Button, + ...renderButtonSpec(spec, Optional.some(action), providersBackstage, [ + memory(''), + ComposingConfigs.self() + ]) + })); + }; + + const separator$1 = { + type: 'separator' + }; + const toMenuItem = (target) => ({ + type: 'menuitem', + value: target.url, + text: target.title, + meta: { + attach: target.attach + }, + onAction: noop + }); + const staticMenuItem = (title, url) => ({ + type: 'menuitem', + value: url, + text: title, + meta: { + attach: undefined + }, + onAction: noop + }); + const toMenuItems = (targets) => map$2(targets, toMenuItem); + const filterLinkTargets = (type, targets) => filter$2(targets, (target) => target.type === type); + const filteredTargets = (type, targets) => toMenuItems(filterLinkTargets(type, targets)); + const headerTargets = (linkInfo) => filteredTargets('header', linkInfo.targets); + const anchorTargets = (linkInfo) => filteredTargets('anchor', linkInfo.targets); + const anchorTargetTop = (linkInfo) => Optional.from(linkInfo.anchorTop).map((url) => staticMenuItem('', url)).toArray(); + const anchorTargetBottom = (linkInfo) => Optional.from(linkInfo.anchorBottom).map((url) => staticMenuItem('', url)).toArray(); + const historyTargets = (history) => map$2(history, (url) => staticMenuItem(url, url)); + const joinMenuLists = (items) => { + return foldl(items, (a, b) => { + const bothEmpty = a.length === 0 || b.length === 0; + return bothEmpty ? a.concat(b) : a.concat(separator$1, b); + }, []); + }; + const filterByQuery = (term, menuItems) => { + const lowerCaseTerm = term.toLowerCase(); + return filter$2(menuItems, (item) => { + const text = item.meta !== undefined && item.meta.text !== undefined ? item.meta.text : item.text; + const value = item.value ?? ''; + return contains$1(text.toLowerCase(), lowerCaseTerm) || contains$1(value.toLowerCase(), lowerCaseTerm); + }); + }; + + const getItems = (fileType, input, urlBackstage) => { + const urlInputValue = Representing.getValue(input); + const term = urlInputValue?.meta?.text ?? urlInputValue.value; + const info = urlBackstage.getLinkInformation(); + return info.fold(() => [], (linkInfo) => { + const history = filterByQuery(term, historyTargets(urlBackstage.getHistory(fileType))); + return fileType === 'file' ? joinMenuLists([ + history, + filterByQuery(term, headerTargets(linkInfo)), + filterByQuery(term, flatten([ + anchorTargetTop(linkInfo), + anchorTargets(linkInfo), + anchorTargetBottom(linkInfo) + ])) + ]) + : history; + }); + }; + const errorId = generate$6('aria-invalid'); + const renderUrlInput = (spec, backstage, urlBackstage, initialData) => { + const providersBackstage = backstage.shared.providers; + const updateHistory = (component) => { + const urlEntry = Representing.getValue(component); + urlBackstage.addToHistory(urlEntry.value, spec.filetype); + }; + // TODO: Make alloy's typeahead only swallow enter and escape if menu is open + const typeaheadSpec = { + ...initialData.map((initialData) => ({ initialData })).getOr({}), + dismissOnBlur: true, + inputClasses: ['tox-textfield'], + sandboxClasses: ['tox-dialog__popups'], + inputAttributes: { + type: 'url' + }, + minChars: 0, + responseTime: 0, + fetch: (input) => { + const items = getItems(spec.filetype, input, urlBackstage); + const tdata = build(items, ItemResponse$1.BUBBLE_TO_SANDBOX, backstage, { + isHorizontalMenu: false, + search: Optional.none() + }); + return Future.pure(tdata); + }, + getHotspot: (comp) => memUrlBox.getOpt(comp), + onSetValue: (comp, _newValue) => { + if (comp.hasConfigured(Invalidating)) { + Invalidating.run(comp).get(noop); + } + }, + typeaheadBehaviours: derive$1([ + ...urlBackstage.getValidationHandler().map((handler) => Invalidating.config({ + getRoot: (comp) => parentElement(comp.element), + invalidClass: 'tox-control-wrap--status-invalid', + notify: { + onInvalid: (comp, err) => { + memInvalidIcon.getOpt(comp).each((invalidComp) => { + set$9(invalidComp.element, 'title', providersBackstage.translate(err)); + }); + } + }, + validator: { + validate: (input) => { + const urlEntry = Representing.getValue(input); + return FutureResult.nu((completer) => { + handler({ type: spec.filetype, url: urlEntry.value }, (validation) => { + if (validation.status === 'invalid') { + set$9(input.element, 'aria-errormessage', errorId); + const err = Result.error(validation.message); + completer(err); + } + else { + remove$8(input.element, 'aria-errormessage'); + const val = Result.value(validation.message); + completer(val); + } + }); + }); + }, + validateOnLoad: false + } + })).toArray(), + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable + }), + Tabstopping.config({}), + config('urlinput-events', + // We want to get fast feedback for the link dialog, but not sure about others + [ + run$1(input(), (comp) => { + const currentValue = get$5(comp.element); + const trimmedValue = currentValue.trim(); + if (trimmedValue !== currentValue) { + set$4(comp.element, trimmedValue); + } + if (spec.filetype === 'file') { + emitWith(comp, formChangeEvent, { name: spec.name }); + } + }), + run$1(change(), (comp) => { + emitWith(comp, formChangeEvent, { name: spec.name }); + updateHistory(comp); + }), + run$1(postPaste(), (comp) => { + emitWith(comp, formChangeEvent, { name: spec.name }); + updateHistory(comp); + }) + ]) + ]), + eventOrder: { + [input()]: ['streaming', 'urlinput-events', 'invalidating'] + }, + model: { + getDisplayText: (itemData) => itemData.value, + selectsOver: false, + populateFromBrowse: false + }, + markers: { + openClass: 'tox-textfield--popup-open' + }, + lazySink: backstage.shared.getSink, + parts: { + menu: part(false, 1, 'normal') + }, + onExecute: (_menu, component, _entry) => { + emitWith(component, formSubmitEvent, {}); + }, + onItemExecute: (typeahead, _sandbox, _item, _value) => { + updateHistory(typeahead); + emitWith(typeahead, formChangeEvent, { name: spec.name }); + } + }; + const pField = FormField.parts.field({ + ...typeaheadSpec, + factory: Typeahead + }); + const pLabel = spec.label.map((label) => renderLabel$3(label, providersBackstage)); + // TODO: Consider a way of merging with Checkbox. + const makeIcon = (name, errId, icon = name, label = name) => render$4(icon, { + tag: 'div', + classes: ['tox-icon', 'tox-control-wrap__status-icon-' + name], + attributes: { + 'title': providersBackstage.translate(label), + 'aria-live': 'polite', + ...errId.fold(() => ({}), (id) => ({ id })) + } + }, providersBackstage.icons); + const memInvalidIcon = record(makeIcon('invalid', Optional.some(errorId), 'warning')); + const memStatus = record({ + dom: { + tag: 'div', + classes: ['tox-control-wrap__status-icon-wrap'] + }, + components: [ + // Include the 'valid' and 'unknown' icons here only if they are to be displayed + memInvalidIcon.asSpec() + ] + }); + const optUrlPicker = urlBackstage.getUrlPicker(spec.filetype); + const browseUrlEvent = generate$6('browser.url.event'); + const memUrlBox = record({ + dom: { + tag: 'div', + classes: ['tox-control-wrap'] + }, + components: [pField, memStatus.asSpec()], + behaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable + }) + ]) + }); + const memUrlPickerButton = record(renderButton$1({ + context: spec.context, + name: spec.name, + icon: Optional.some('browse'), + text: spec.picker_text.or(spec.label).getOr(''), + enabled: spec.enabled, + primary: false, + buttonType: Optional.none(), + borderless: true + }, (component) => emit(component, browseUrlEvent), providersBackstage, [], ['tox-browse-url'])); + const controlHWrapper = () => ({ + dom: { + tag: 'div', + classes: ['tox-form__controls-h-stack'] + }, + components: flatten([ + [memUrlBox.asSpec()], + optUrlPicker.map(() => memUrlPickerButton.asSpec()).toArray() + ]) + }); + const openUrlPicker = (comp) => { + Composing.getCurrent(comp).each((field) => { + const componentData = Representing.getValue(field); + const urlData = { + fieldname: spec.name, + ...componentData + }; + optUrlPicker.each((picker) => { + picker(urlData).get((chosenData) => { + Representing.setValue(field, chosenData); + emitWith(comp, formChangeEvent, { name: spec.name }); + }); + }); + }); + }; + return FormField.sketch({ + dom: renderFormFieldDom(), + components: pLabel.toArray().concat([ + controlHWrapper() + ]), + fieldBehaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (comp) => { + FormField.getField(comp).each(Disabling.disable); + memUrlPickerButton.getOpt(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormField.getField(comp).each(Disabling.enable); + memUrlPickerButton.getOpt(comp).each(Disabling.enable); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)), + config('url-input-events', [ + run$1(browseUrlEvent, openUrlPicker) + ]) + ]) + }); + }; + + const renderAlertBanner = (spec, providersBackstage) => { + const icon = get(spec.icon, providersBackstage.icons); + // For using the alert banner inside a dialog + return Container.sketch({ + dom: { + tag: 'div', + attributes: { + role: 'alert' + }, + classes: ['tox-notification', 'tox-notification--in', `tox-notification--${spec.level}`] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-notification__icon'], + innerHtml: !spec.url ? icon : undefined + }, + components: spec.url ? [ + Button.sketch({ + dom: { + tag: 'button', + classes: ['tox-button', 'tox-button--naked', 'tox-button--icon'], + innerHtml: icon, + attributes: { + title: providersBackstage.translate(spec.iconTooltip) + } + }, + // TODO: aria label this button! + action: (comp) => emitWith(comp, formActionEvent, { name: 'alert-banner', value: spec.url }), + buttonBehaviours: derive$1([ + addFocusableBehaviour() + ]) + }) + ] : undefined + }, + { + dom: { + tag: 'div', + classes: ['tox-notification__body'], + // TODO: AP-247: Escape this text so that it can't contain script tags + innerHtml: providersBackstage.translate(spec.text) + } + } + ] + }); + }; + + const renderCheckbox = (spec, providerBackstage, initialData) => { + const toggleCheckboxHandler = (comp) => { + comp.element.dom.click(); + return Optional.some(true); + }; + const pField = FormField.parts.field({ + factory: { sketch: identity }, + dom: { + tag: 'input', + classes: ['tox-checkbox__input'], + attributes: { + type: 'checkbox' + } + }, + behaviours: derive$1([ + ComposingConfigs.self(), + Disabling.config({ + disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable, + onDisabled: (component) => { + parentElement(component.element).each((element) => add$2(element, 'tox-checkbox--disabled')); + }, + onEnabled: (component) => { + parentElement(component.element).each((element) => remove$3(element, 'tox-checkbox--disabled')); + } + }), + Tabstopping.config({}), + Focusing.config({}), + withElement(initialData, get$9, set$5), + Keying.config({ + mode: 'special', + onEnter: toggleCheckboxHandler, + onSpace: toggleCheckboxHandler, + stopSpaceKeyup: true + }), + config('checkbox-events', [ + run$1(change(), (component, _) => { + emitWith(component, formChangeEvent, { name: spec.name }); + }) + ]) + ]) + }); + const pLabel = FormField.parts.label({ + dom: { + tag: 'span', + classes: ['tox-checkbox__label'] + }, + components: [ + text$2(providerBackstage.translate(spec.label)) + ], + behaviours: derive$1([ + Unselecting.config({}) + ]) + }); + const makeIcon = (className) => { + const iconName = className === 'checked' ? 'selected' : 'unselected'; + return render$4(iconName, { tag: 'span', classes: ['tox-icon', 'tox-checkbox-icon__' + className] }, providerBackstage.icons); + }; + const memIcons = record({ + dom: { + tag: 'div', + classes: ['tox-checkbox__icons'] + }, + components: [ + makeIcon('checked'), + makeIcon('unchecked') + ] + }); + return FormField.sketch({ + dom: { + tag: 'label', + classes: ['tox-checkbox'] + }, + components: [ + pField, + memIcons.asSpec(), + pLabel + ], + fieldBehaviours: derive$1([ + Disabling.config({ + disabled: () => !spec.enabled || providerBackstage.checkUiComponentContext(spec.context).shouldDisable, + }), + toggleOnReceive(() => providerBackstage.checkUiComponentContext(spec.context)) + ]) + }); + }; + + const renderHtmlPanel = (spec, providersBackstage) => { + const classes = ['tox-form__group', ...(spec.stretched ? ['tox-form__group--stretched'] : [])]; + const init = config('htmlpanel', [ + runOnAttached((comp) => { + spec.onInit(comp.element.dom); + }) + ]); + if (spec.presets === 'presentation') { + return Container.sketch({ + dom: { + tag: 'div', + classes, + innerHtml: spec.html + }, + containerBehaviours: derive$1([ + Tooltipping.config({ + ...providersBackstage.tooltips.getConfig({ + tooltipText: '', + onShow: (comp) => { + descendant(comp.element, '[data-mce-tooltip]:hover').orThunk(() => search(comp.element)) + .each((current) => { + getOpt(current, 'data-mce-tooltip').each((text) => { + Tooltipping.setComponents(comp, providersBackstage.tooltips.getComponents({ tooltipText: text })); + }); + }); + }, + }), + mode: 'children-normal', + anchor: (comp) => ({ + type: 'node', + node: descendant(comp.element, '[data-mce-tooltip]:hover') + .orThunk(() => search(comp.element).filter((current) => getOpt(current, 'data-mce-tooltip').isSome())), + root: comp.element, + layouts: { + onLtr: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]), + onRtl: constant$1([south$2, north$2, southeast$2, northeast$2, southwest$2, northwest$2]) + }, + bubble: nu$6(0, -2, {}), + }) + }), + init + ]) + }); + } + else { + return Container.sketch({ + dom: { + tag: 'div', + classes, + innerHtml: spec.html, + attributes: { + role: 'document' + } + }, + containerBehaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}), + init + ]) + }); + } + }; + + const make$1 = (render) => { + return (parts, spec, dialogData, backstage, getCompByName) => get$h(spec, 'name').fold(() => render(spec, backstage, Optional.none(), getCompByName), (fieldName) => parts.field(fieldName, render(spec, backstage, get$h(dialogData, fieldName), getCompByName))); + }; + const makeIframe = (render) => (parts, spec, dialogData, backstage, getCompByName) => { + const iframeSpec = deepMerge(spec, { + source: 'dynamic' + }); + return make$1(render)(parts, iframeSpec, dialogData, backstage, getCompByName); + }; + const factories = { + bar: make$1((spec, backstage) => renderBar(spec, backstage.shared)), + collection: make$1((spec, backstage, data) => renderCollection(spec, backstage.shared.providers, data)), + alertbanner: make$1((spec, backstage) => renderAlertBanner(spec, backstage.shared.providers)), + input: make$1((spec, backstage, data) => renderInput(spec, backstage.shared.providers, data)), + textarea: make$1((spec, backstage, data) => renderTextarea(spec, backstage.shared.providers, data)), + label: make$1((spec, backstage, _data, getCompByName) => renderLabel$2(spec, backstage.shared, getCompByName)), + iframe: makeIframe((spec, backstage, data) => renderIFrame(spec, backstage.shared.providers, data)), + button: make$1((spec, backstage) => renderDialogButton(spec, backstage.shared.providers)), + checkbox: make$1((spec, backstage, data) => renderCheckbox(spec, backstage.shared.providers, data)), + colorinput: make$1((spec, backstage, data) => renderColorInput(spec, backstage.shared, backstage.colorinput, data)), + colorpicker: make$1((spec, backstage, data) => renderColorPicker(spec, backstage.shared.providers, data)), // Not sure if this needs name. + dropzone: make$1((spec, backstage, data) => renderDropZone(spec, backstage.shared.providers, data)), + grid: make$1((spec, backstage) => renderGrid(spec, backstage.shared)), + listbox: make$1((spec, backstage, data) => renderListBox(spec, backstage, data)), + selectbox: make$1((spec, backstage, data) => renderSelectBox(spec, backstage.shared.providers, data)), + sizeinput: make$1((spec, backstage) => renderSizeInput(spec, backstage.shared.providers)), + slider: make$1((spec, backstage, data) => renderSlider(spec, backstage.shared.providers, data)), + urlinput: make$1((spec, backstage, data) => renderUrlInput(spec, backstage, backstage.urlinput, data)), + customeditor: make$1(renderCustomEditor), + htmlpanel: make$1((spec, backstage) => renderHtmlPanel(spec, backstage.shared.providers)), + imagepreview: make$1((spec, _, data) => renderImagePreview(spec, data)), + table: make$1((spec, backstage) => renderTable(spec, backstage.shared.providers)), + tree: make$1((spec, backstage) => renderTree(spec, backstage)), + panel: make$1((spec, backstage) => renderPanel(spec, backstage)) + }; + const noFormParts = { + // This is cast as we only actually want an alloy spec and don't need the actual part here + field: (_name, spec) => spec, + record: constant$1([]) + }; + const interpretInForm = (parts, spec, dialogData, oldBackstage, getCompByName) => { + // Now, we need to update the backstage to use the parts variant. + const newBackstage = deepMerge(oldBackstage, { + // Add the interpreter based on the form parts. + shared: { + interpreter: (childSpec) => interpretParts(parts, childSpec, dialogData, newBackstage, getCompByName) + } + }); + return interpretParts(parts, spec, dialogData, newBackstage, getCompByName); + }; + const interpretParts = (parts, spec, dialogData, backstage, getCompByName) => get$h(factories, spec.type).fold(() => { + console.error(`Unknown factory type "${spec.type}", defaulting to container: `, spec); + return spec; + }, (factory) => factory(parts, spec, dialogData, backstage, getCompByName)); + const interpretWithoutForm = (spec, dialogData, backstage, getCompByName) => interpretParts(noFormParts, spec, dialogData, backstage, getCompByName); + + const bubbleAlignments$2 = { + valignCentre: [], + alignCentre: [], + alignLeft: [], + alignRight: [], + right: [], + left: [], + bottom: [], + top: [] + }; + const getInlineDialogAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => { + const bubbleSize = 12; + const overrides = { + maxHeightFunction: expandable$1() + }; + const editableAreaAnchor = () => ({ + type: 'node', + root: getContentContainer(getRootNode(contentAreaElement())), + node: Optional.from(contentAreaElement()), + bubble: nu$6(bubbleSize, bubbleSize, bubbleAlignments$2), + layouts: { + onRtl: () => [northeast$1], + onLtr: () => [northwest$1] + }, + overrides + }); + const standardAnchor = () => ({ + type: 'hotspot', + hotspot: lazyAnchorbar(), + bubble: nu$6(-bubbleSize, bubbleSize, bubbleAlignments$2), + layouts: { + onRtl: () => [southeast$2, southwest$2, south$2], + onLtr: () => [southwest$2, southeast$2, south$2] + }, + overrides + }); + return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor(); + }; + const getInlineBottomDialogAnchor = (inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor) => { + const bubbleSize = 12; + const overrides = { + maxHeightFunction: expandable$1() + }; + const editableAreaAnchor = () => ({ + type: 'node', + root: getContentContainer(getRootNode(contentAreaElement())), + node: Optional.from(contentAreaElement()), + bubble: nu$6(bubbleSize, bubbleSize, bubbleAlignments$2), + layouts: { + onRtl: () => [north$1], + onLtr: () => [north$1] + }, + overrides + }); + const standardAnchor = () => inline ? + ({ + type: 'node', + root: getContentContainer(getRootNode(contentAreaElement())), + node: Optional.from(contentAreaElement()), + bubble: nu$6(0, -getOuter$1(contentAreaElement()), bubbleAlignments$2), + layouts: { + onRtl: () => [north$2], + onLtr: () => [north$2] + }, + overrides + }) + : ({ + type: 'hotspot', + hotspot: lazyBottomAnchorBar(), + bubble: nu$6(0, 0, bubbleAlignments$2), + layouts: { + onRtl: () => [north$2], + onLtr: () => [north$2] + }, + overrides + }); + return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor(); + }; + const getBannerAnchor = (contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor) => { + const editableAreaAnchor = () => ({ + type: 'node', + root: getContentContainer(getRootNode(contentAreaElement())), + node: Optional.from(contentAreaElement()), + layouts: { + onRtl: () => [north$1], + onLtr: () => [north$1] + } + }); + const standardAnchor = () => ({ + type: 'hotspot', + hotspot: lazyAnchorbar(), + layouts: { + onRtl: () => [south$2], + onLtr: () => [south$2] + } + }); + return () => lazyUseEditableAreaAnchor() ? editableAreaAnchor() : standardAnchor(); + }; + const getCursorAnchor = (editor, bodyElement) => () => ({ + type: 'selection', + root: bodyElement(), + getSelection: () => { + const rng = editor.selection.getRng(); + // Only return a range if there is a selection of more than one cell. + const selectedCells = editor.model.table.getSelectedCells(); + if (selectedCells.length > 1) { + const firstCell = selectedCells[0]; + const lastCell = selectedCells[selectedCells.length - 1]; + const selectionTableCellRange = { + firstCell: SugarElement.fromDom(firstCell), + lastCell: SugarElement.fromDom(lastCell) + }; + return Optional.some(selectionTableCellRange); + } + return Optional.some(SimSelection.range(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset)); + } + }); + const getNodeAnchor$1 = (bodyElement) => (element) => ({ + type: 'node', + root: bodyElement(), + node: element + }); + const getAnchors = (editor, lazyAnchorbar, lazyBottomAnchorBar, isToolbarTop) => { + const useFixedToolbarContainer = useFixedContainer(editor); + const bodyElement = () => SugarElement.fromDom(editor.getBody()); + const contentAreaElement = () => SugarElement.fromDom(editor.getContentAreaContainer()); + // If using fixed_toolbar_container or if the toolbar is positioned at the bottom + // of the editor, some things should anchor to the top of the editable area. + const lazyUseEditableAreaAnchor = () => useFixedToolbarContainer || !isToolbarTop(); + return { + inlineDialog: getInlineDialogAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor), + inlineBottomDialog: getInlineBottomDialogAnchor(editor.inline, contentAreaElement, lazyBottomAnchorBar, lazyUseEditableAreaAnchor), + banner: getBannerAnchor(contentAreaElement, lazyAnchorbar, lazyUseEditableAreaAnchor), + cursor: getCursorAnchor(editor, bodyElement), + node: getNodeAnchor$1(bodyElement) + }; + }; + + const colorPicker = (editor) => (callback, value) => { + const dialog = colorPickerDialog(editor); + dialog(callback, value); + }; + const hasCustomColors = (editor) => () => hasCustomColors$1(editor); + const getColors = (editor) => (id) => getColors$2(editor, id); + const getColorCols = (editor) => (id) => getColorCols$1(editor, id); + const ColorInputBackstage = (editor) => ({ + colorPicker: colorPicker(editor), + hasCustomColors: hasCustomColors(editor), + getColors: getColors(editor), + getColorCols: getColorCols(editor) + }); + + const isDraggableModal = (editor) => () => isDraggableModal$1(editor); + const DialogBackstage = (editor) => ({ + isDraggableModal: isDraggableModal(editor) + }); + + const HeaderBackstage = (editor) => { + const mode = Cell(isToolbarLocationBottom(editor) ? 'bottom' : 'top'); + return { + isPositionedAtTop: () => mode.get() === 'top', + getDockingMode: mode.get, + setDockingMode: mode.set + }; + }; + + const isNestedFormat = (format) => hasNonNullableKey(format, 'items'); + const isFormatReference = (format) => hasNonNullableKey(format, 'format'); + const defaultStyleFormats = [ + { + title: 'Headings', items: [ + { title: 'Heading 1', format: 'h1' }, + { title: 'Heading 2', format: 'h2' }, + { title: 'Heading 3', format: 'h3' }, + { title: 'Heading 4', format: 'h4' }, + { title: 'Heading 5', format: 'h5' }, + { title: 'Heading 6', format: 'h6' } + ] + }, + { + title: 'Inline', items: [ + { title: 'Bold', format: 'bold' }, + { title: 'Italic', format: 'italic' }, + { title: 'Underline', format: 'underline' }, + { title: 'Strikethrough', format: 'strikethrough' }, + { title: 'Superscript', format: 'superscript' }, + { title: 'Subscript', format: 'subscript' }, + { title: 'Code', format: 'code' } + ] + }, + { + title: 'Blocks', items: [ + { title: 'Paragraph', format: 'p' }, + { title: 'Blockquote', format: 'blockquote' }, + { title: 'Div', format: 'div' }, + { title: 'Pre', format: 'pre' } + ] + }, + { + title: 'Align', items: [ + { title: 'Left', format: 'alignleft' }, + { title: 'Center', format: 'aligncenter' }, + { title: 'Right', format: 'alignright' }, + { title: 'Justify', format: 'alignjustify' } + ] + } + ]; + // Note: Need to cast format below to expected type, as Obj.has uses "K keyof T", which doesn't work with aliases + const isNestedFormats = (format) => has$2(format, 'items'); + const isBlockFormat = (format) => has$2(format, 'block'); + const isInlineFormat = (format) => has$2(format, 'inline'); + const isSelectorFormat = (format) => has$2(format, 'selector'); + const mapFormats = (userFormats) => foldl(userFormats, (acc, fmt) => { + if (isNestedFormats(fmt)) { + // Map the child formats + const result = mapFormats(fmt.items); + return { + customFormats: acc.customFormats.concat(result.customFormats), + formats: acc.formats.concat([{ title: fmt.title, items: result.formats }]) + }; + } + else if (isInlineFormat(fmt) || isBlockFormat(fmt) || isSelectorFormat(fmt)) { + // Convert the format to a reference and add the original to the custom formats to be registered + const formatName = isString(fmt.name) ? fmt.name : fmt.title.toLowerCase(); + const formatNameWithPrefix = `custom-${formatName}`; + return { + customFormats: acc.customFormats.concat([{ name: formatNameWithPrefix, format: fmt }]), + formats: acc.formats.concat([{ title: fmt.title, format: formatNameWithPrefix, icon: fmt.icon }]) + }; + } + else { + return { ...acc, formats: acc.formats.concat(fmt) }; + } + }, { customFormats: [], formats: [] }); + const registerCustomFormats = (editor, userFormats) => { + const result = mapFormats(userFormats); + const registerFormats = (customFormats) => { + each$1(customFormats, (fmt) => { + // Only register the custom format with the editor, if it's not already registered + if (!editor.formatter.has(fmt.name)) { + editor.formatter.register(fmt.name, fmt.format); + } + }); + }; + // The editor may not yet be initialized, so check for that + if (editor.formatter) { + registerFormats(result.customFormats); + } + else { + editor.on('init', () => { + registerFormats(result.customFormats); + }); + } + return result.formats; + }; + const getStyleFormats = (editor) => getUserStyleFormats(editor).map((userFormats) => { + // Ensure that any custom formats specified by the user are registered with the editor + const registeredUserFormats = registerCustomFormats(editor, userFormats); + // Merge the default formats with the custom formats if required + return shouldMergeStyleFormats(editor) ? defaultStyleFormats.concat(registeredUserFormats) : registeredUserFormats; + }).getOr(defaultStyleFormats); + + const isSeparator$1 = (format) => { + const keys$1 = keys(format); + return keys$1.length === 1 && contains$2(keys$1, 'title'); + }; + const processBasic = (item, isSelectedFor, getPreviewFor) => ({ + ...item, + type: 'formatter', + isSelected: isSelectedFor(item.format), + getStylePreview: getPreviewFor(item.format) + }); + // TODO: This is adapted from StyleFormats in the mobile theme. Consolidate. + const register$b = (editor, formats, isSelectedFor, getPreviewFor) => { + const enrichSupported = (item) => processBasic(item, isSelectedFor, getPreviewFor); + // Item that triggers a submenu + const enrichMenu = (item) => { + const newItems = doEnrich(item.items); + return { + ...item, + type: 'submenu', + getStyleItems: constant$1(newItems) + }; + }; + const enrichCustom = (item) => { + const formatName = isString(item.name) ? item.name : generate$6(item.title); + const formatNameWithPrefix = `custom-${formatName}`; + const newItem = { + ...item, + type: 'formatter', + format: formatNameWithPrefix, + isSelected: isSelectedFor(formatNameWithPrefix), + getStylePreview: getPreviewFor(formatNameWithPrefix) + }; + editor.formatter.register(formatName, newItem); + return newItem; + }; + const doEnrich = (items) => map$2(items, (item) => { + // If it is a submenu, enrich all the subitems. + if (isNestedFormat(item)) { + return enrichMenu(item); + } + else if (isFormatReference(item)) { + return enrichSupported(item); + // NOTE: This branch is added from the original StyleFormats in mobile + } + else if (isSeparator$1(item)) { + return { ...item, type: 'separator' }; + } + else { + return enrichCustom(item); + } + }); + return doEnrich(formats); + }; + + const init$1 = (editor) => { + const isSelectedFor = (format) => () => editor.formatter.match(format); + const getPreviewFor = (format) => () => { + const fmt = editor.formatter.get(format); + return fmt !== undefined ? Optional.some({ + tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div', + styles: editor.dom.parseStyle(editor.formatter.getCssText(format)) + }) : Optional.none(); + }; + const settingsFormats = Cell([]); + const eventsFormats = Cell([]); + const replaceSettings = Cell(false); + editor.on('PreInit', (_e) => { + const formats = getStyleFormats(editor); + const enriched = register$b(editor, formats, isSelectedFor, getPreviewFor); + settingsFormats.set(enriched); + }); + editor.on('addStyleModifications', (e) => { + // Is there going to be an order issue here? + const modifications = register$b(editor, e.items, isSelectedFor, getPreviewFor); + eventsFormats.set(modifications); + replaceSettings.set(e.replace); + }); + const getData = () => { + const fromSettings = replaceSettings.get() ? [] : settingsFormats.get(); + const fromEvents = eventsFormats.get(); + return fromSettings.concat(fromEvents); + }; + return { + getData + }; + }; + + const TooltipsBackstage = (getSink) => { + const tooltipDelay = 300; + const intervalDelay = tooltipDelay * 0.2; // Arbitrary value + let numActiveTooltips = 0; + const alreadyShowingTooltips = () => numActiveTooltips > 0; + const getComponents = (spec) => { + return [ + { + dom: { + tag: 'div', + classes: ['tox-tooltip__body'] + }, + components: [ + text$2(spec.tooltipText) + ] + } + ]; + }; + const getConfig = (spec) => { + return { + delayForShow: () => alreadyShowingTooltips() ? intervalDelay : tooltipDelay, + delayForHide: constant$1(tooltipDelay), + exclusive: true, + lazySink: getSink, + tooltipDom: { + tag: 'div', + classes: ['tox-tooltip', 'tox-tooltip--up'] + }, + tooltipComponents: getComponents(spec), + onShow: (comp, tooltip) => { + numActiveTooltips++; + if (spec.onShow) { + spec.onShow(comp, tooltip); + } + }, + onHide: (comp, tooltip) => { + numActiveTooltips--; + if (spec.onHide) { + spec.onHide(comp, tooltip); + } + }, + onSetup: spec.onSetup, + }; + }; + return { + getConfig, + getComponents + }; + }; + + const isElement = (node) => isNonNullable(node) && node.nodeType === 1; + const trim = global$2.trim; + const hasContentEditableState = (value) => { + return (node) => { + if (isElement(node)) { + if (node.contentEditable === value) { + return true; + } + if (node.getAttribute('data-mce-contenteditable') === value) { + return true; + } + } + return false; + }; + }; + const isContentEditableTrue = hasContentEditableState('true'); + const isContentEditableFalse = hasContentEditableState('false'); + const create = (type, title, url, level, attach) => ({ + type, + title, + url, + level, + attach + }); + const isChildOfContentEditableTrue = (node) => { + let tempNode = node; + while ((tempNode = tempNode.parentNode)) { + const value = tempNode.contentEditable; + if (value && value !== 'inherit') { + return isContentEditableTrue(tempNode); + } + } + return false; + }; + const select = (selector, root) => { + return map$2(descendants(SugarElement.fromDom(root), selector), (element) => { + return element.dom; + }); + }; + const getElementText = (elm) => { + return elm.innerText || elm.textContent; + }; + const getOrGenerateId = (elm) => { + return elm.id ? elm.id : generate$6('h'); + }; + const isAnchor = (elm) => { + return elm && elm.nodeName === 'A' && (elm.id || elm.name) !== undefined; + }; + const isValidAnchor = (elm) => { + return isAnchor(elm) && isEditable(elm); + }; + const isHeader = (elm) => { + return elm && /^(H[1-6])$/.test(elm.nodeName); + }; + const isEditable = (elm) => { + return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm); + }; + const isValidHeader = (elm) => { + return isHeader(elm) && isEditable(elm); + }; + const getLevel = (elm) => { + return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0; + }; + const headerTarget = (elm) => { + const headerId = getOrGenerateId(elm); + const attach = () => { + elm.id = headerId; + }; + return create('header', getElementText(elm) ?? '', '#' + headerId, getLevel(elm), attach); + }; + const anchorTarget = (elm) => { + const anchorId = elm.id || elm.name; + const anchorText = getElementText(elm); + return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop); + }; + const getHeaderTargets = (elms) => { + return map$2(filter$2(elms, isValidHeader), headerTarget); + }; + const getAnchorTargets = (elms) => { + return map$2(filter$2(elms, isValidAnchor), anchorTarget); + }; + const getTargetElements = (elm) => { + const elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm); + return elms; + }; + const hasTitle = (target) => { + return trim(target.title).length > 0; + }; + const find = (elm) => { + const elms = getTargetElements(elm); + return filter$2(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle); + }; + const LinkTargets = { + find + }; + + const STORAGE_KEY = 'tinymce-url-history'; + const HISTORY_LENGTH = 5; + // validation functions + const isHttpUrl = (url) => isString(url) && /^https?/.test(url); + const isArrayOfUrl = (a) => isArray(a) && a.length <= HISTORY_LENGTH && forall(a, isHttpUrl); + const isRecordOfUrlArray = (r) => isObject(r) && find$4(r, (value) => !isArrayOfUrl(value)).isNone(); + const getAllHistory = () => { + const unparsedHistory = global$5.getItem(STORAGE_KEY); + if (unparsedHistory === null) { + return {}; + } + // parse history + let history; + try { + history = JSON.parse(unparsedHistory); + } + catch (e) { + if (e instanceof SyntaxError) { + // eslint-disable-next-line no-console + console.log('Local storage ' + STORAGE_KEY + ' was not valid JSON', e); + return {}; + } + throw e; + } + // validate the parsed value + if (!isRecordOfUrlArray(history)) { + // eslint-disable-next-line no-console + console.log('Local storage ' + STORAGE_KEY + ' was not valid format', history); + return {}; + } + return history; + }; + const setAllHistory = (history) => { + if (!isRecordOfUrlArray(history)) { + throw new Error('Bad format for history:\n' + JSON.stringify(history)); + } + global$5.setItem(STORAGE_KEY, JSON.stringify(history)); + }; + const getHistory = (fileType) => { + const history = getAllHistory(); + return get$h(history, fileType).getOr([]); + }; + const addToHistory = (url, fileType) => { + if (!isHttpUrl(url)) { + return; + } + const history = getAllHistory(); + const items = get$h(history, fileType).getOr([]); + const itemsWithoutUrl = filter$2(items, (item) => item !== url); + history[fileType] = [url].concat(itemsWithoutUrl).slice(0, HISTORY_LENGTH); + setAllHistory(history); + }; + + const isTruthy = (value) => !!value; + const makeMap = (value) => map$1(global$2.makeMap(value, /[, ]/), isTruthy); + const getPicker = (editor) => Optional.from(getFilePickerCallback(editor)); + const getPickerTypes = (editor) => { + const optFileTypes = Optional.from(getFilePickerTypes(editor)).filter(isTruthy).map(makeMap); + return getPicker(editor).fold(never, (_picker) => optFileTypes.fold(always, (types) => keys(types).length > 0 ? types : false)); + }; + const getPickerSetting = (editor, filetype) => { + const pickerTypes = getPickerTypes(editor); + if (isBoolean(pickerTypes)) { + return pickerTypes ? getPicker(editor) : Optional.none(); + } + else { + return pickerTypes[filetype] ? getPicker(editor) : Optional.none(); + } + }; + const getUrlPicker = (editor, filetype) => getPickerSetting(editor, filetype).map((picker) => (entry) => Future.nu((completer) => { + const handler = (value, meta) => { + if (!isString(value)) { + throw new Error('Expected value to be string'); + } + if (meta !== undefined && !isObject(meta)) { + throw new Error('Expected meta to be a object'); + } + const r = { value, meta }; + completer(r); + }; + const meta = { + filetype, + fieldname: entry.fieldname, + ...Optional.from(entry.meta).getOr({}) + }; + // file_picker_callback(callback, currentValue, metaData) + picker.call(editor, handler, entry.value, meta); + })); + const getTextSetting = (value) => Optional.from(value).filter(isString).getOrUndefined(); + const getLinkInformation = (editor) => { + if (!useTypeaheadUrls(editor)) { + return Optional.none(); + } + return Optional.some({ + targets: LinkTargets.find(editor.getBody()), + anchorTop: getTextSetting(getAnchorTop(editor)), + anchorBottom: getTextSetting(getAnchorBottom(editor)) + }); + }; + const getValidationHandler = (editor) => Optional.from(getFilePickerValidatorHandler(editor)); + const UrlInputBackstage = (editor) => ({ + getHistory, + addToHistory, + getLinkInformation: () => getLinkInformation(editor), + getValidationHandler: () => getValidationHandler(editor), + getUrlPicker: (filetype) => getUrlPicker(editor, filetype) + }); + + const init = (lazySinks, editor, lazyAnchorbar, lazyBottomAnchorBar) => { + const contextMenuState = Cell(false); + const toolbar = HeaderBackstage(editor); + const providers = { + icons: () => editor.ui.registry.getAll().icons, + menuItems: () => editor.ui.registry.getAll().menuItems, + translate: global$6.translate, + isDisabled: () => !editor.ui.isEnabled(), + getOption: editor.options.get, + tooltips: TooltipsBackstage(lazySinks.dialog), + checkUiComponentContext: (specContext) => { + if (isDisabled(editor)) { + return { + contextType: 'disabled', + shouldDisable: true + }; + } + const [key, value = ''] = specContext.split(':'); + const contexts = editor.ui.registry.getAll().contexts; + const enabledInContext = get$h(contexts, key) + .fold( + // Fallback to 'mode:design' if key is not found + () => get$h(contexts, 'mode').map((pred) => pred('design')).getOr(false), (pred) => value.charAt(0) === '!' ? !pred(value.slice(1)) : pred(value)); + return { + contextType: key, + shouldDisable: !enabledInContext + }; + } + }; + const urlinput = UrlInputBackstage(editor); + const styles = init$1(editor); + const colorinput = ColorInputBackstage(editor); + const dialogSettings = DialogBackstage(editor); + const isContextMenuOpen = () => contextMenuState.get(); + const setContextMenuState = (state) => contextMenuState.set(state); + const commonBackstage = { + shared: { + providers, + anchors: getAnchors(editor, lazyAnchorbar, lazyBottomAnchorBar, toolbar.isPositionedAtTop), + header: toolbar, + }, + urlinput, + styles, + colorinput, + dialog: dialogSettings, + isContextMenuOpen, + setContextMenuState + }; + const getCompByName = (_name) => Optional.none(); + const popupBackstage = { + ...commonBackstage, + shared: { + ...commonBackstage.shared, + interpreter: (s) => interpretWithoutForm(s, {}, popupBackstage, getCompByName), + getSink: lazySinks.popup + } + }; + const dialogBackstage = { + ...commonBackstage, + shared: { + ...commonBackstage.shared, + interpreter: (s) => interpretWithoutForm(s, {}, dialogBackstage, getCompByName), + getSink: lazySinks.dialog + } + }; + return { + popup: popupBackstage, + dialog: dialogBackstage + }; + }; + + const migrationFrom7x = 'https://www.tiny.cloud/docs/tinymce/latest/migration-from-7x/'; + const deprecatedFeatures = { + skipFocus: `ToggleToolbarDrawer skipFocus is deprecated see migration guide: ${migrationFrom7x}`, + }; + const logFeatureDeprecationWarning = (feature) => { + // eslint-disable-next-line no-console + console.warn(deprecatedFeatures[feature], new Error().stack); + }; + + const setup$b = (editor, mothership, uiMotherships) => { + const broadcastEvent = (name, evt) => { + each$1([mothership, ...uiMotherships], (m) => { + m.broadcastEvent(name, evt); + }); + }; + const broadcastOn = (channel, message) => { + each$1([mothership, ...uiMotherships], (m) => { + m.broadcastOn([channel], message); + }); + }; + const fireDismissPopups = (evt) => broadcastOn(dismissPopups(), { target: evt.target }); + const fireCloseTooltips = (event) => { + broadcastOn(closeTooltips(), { + closedTooltip: () => { + event.preventDefault(); + } + }); + }; + // Document touch events + const doc = getDocument(); + const onTouchstart = bind$1(doc, 'touchstart', fireDismissPopups); + const onTouchmove = bind$1(doc, 'touchmove', (evt) => broadcastEvent(documentTouchmove(), evt)); + const onTouchend = bind$1(doc, 'touchend', (evt) => broadcastEvent(documentTouchend(), evt)); + // Document mouse events + const onMousedown = bind$1(doc, 'mousedown', fireDismissPopups); + const onMouseup = bind$1(doc, 'mouseup', (evt) => { + if (evt.raw.button === 0) { + broadcastOn(mouseReleased(), { target: evt.target }); + } + }); + // Editor content events + const onContentClick = (raw) => broadcastOn(dismissPopups(), { target: SugarElement.fromDom(raw.target) }); + const onContentMouseup = (raw) => { + if (raw.button === 0) { + broadcastOn(mouseReleased(), { target: SugarElement.fromDom(raw.target) }); + } + }; + const onContentMousedown = () => { + each$1(editor.editorManager.get(), (loopEditor) => { + if (editor !== loopEditor) { + loopEditor.dispatch('DismissPopups', { relatedTarget: editor }); + } + }); + }; + // Window events + const onWindowScroll = (evt) => broadcastEvent(windowScroll(), fromRawEvent(evt)); + const onWindowResize = (evt) => { + broadcastOn(repositionPopups(), {}); + broadcastEvent(windowResize(), fromRawEvent(evt)); + }; + // TINY-9425: At the moment, we are only supporting situations where the scrolling container + // is *inside* the shadow root - which is why we bind to the root node, instead of just the outer + // document. However, if we needed to support scrolling containers that *contained* the shadow root, + // we would need to listen to the outer document (or at the least, the root node of the scrolling div in + // the case of muliple layers of shadow roots). + const dos = getRootNode(SugarElement.fromDom(editor.getElement())); + const onElementScroll = capture(dos, 'scroll', (evt) => { + requestAnimationFrame(() => { + const c = editor.getContainer(); + // Because this can fire before the editor is rendered, we need to stop that from happening. + // Some tests can create this situation, and then we get a Node name null or defined error. + if (c !== undefined && c !== null) { + const optScrollingContext = detectWhenSplitUiMode(editor, mothership.element); + const scrollers = optScrollingContext.map((sc) => [sc.element, ...sc.others]).getOr([]); + if (exists(scrollers, (s) => eq(s, evt.target))) { + editor.dispatch('ElementScroll', { target: evt.target.dom }); + broadcastEvent(externalElementScroll(), evt); + } + } + }); + }); + const onEditorResize = () => broadcastOn(repositionPopups(), {}); + const onEditorProgress = (evt) => { + if (evt.state) { + broadcastOn(dismissPopups(), { target: SugarElement.fromDom(editor.getContainer()) }); + } + }; + const onDismissPopups = (event) => { + broadcastOn(dismissPopups(), { target: SugarElement.fromDom(event.relatedTarget.getContainer()) }); + }; + const onFocusIn = (event) => editor.dispatch('focusin', event); + const onFocusOut = (event) => editor.dispatch('focusout', event); + // Don't start listening to events until the UI has rendered + editor.on('PostRender', () => { + editor.on('click', onContentClick); + editor.on('tap', onContentClick); + editor.on('mouseup', onContentMouseup); + editor.on('mousedown', onContentMousedown); + editor.on('ScrollWindow', onWindowScroll); + editor.on('ResizeWindow', onWindowResize); + editor.on('ResizeEditor', onEditorResize); + editor.on('AfterProgressState', onEditorProgress); + editor.on('DismissPopups', onDismissPopups); + editor.on('CloseActiveTooltips', fireCloseTooltips); + each$1([mothership, ...uiMotherships], (gui) => { + gui.element.dom.addEventListener('focusin', onFocusIn); + gui.element.dom.addEventListener('focusout', onFocusOut); + }); + }); + editor.on('remove', () => { + // We probably don't need these unbinds, but it helps to have them if we move this code out. + editor.off('click', onContentClick); + editor.off('tap', onContentClick); + editor.off('mouseup', onContentMouseup); + editor.off('mousedown', onContentMousedown); + editor.off('ScrollWindow', onWindowScroll); + editor.off('ResizeWindow', onWindowResize); + editor.off('ResizeEditor', onEditorResize); + editor.off('AfterProgressState', onEditorProgress); + editor.off('DismissPopups', onDismissPopups); + editor.off('CloseActiveTooltips', fireCloseTooltips); + each$1([mothership, ...uiMotherships], (gui) => { + gui.element.dom.removeEventListener('focusin', onFocusIn); + gui.element.dom.removeEventListener('focusout', onFocusOut); + }); + onMousedown.unbind(); + onTouchstart.unbind(); + onTouchmove.unbind(); + onTouchend.unbind(); + onMouseup.unbind(); + onElementScroll.unbind(); + }); + editor.on('detach', () => { + each$1([mothership, ...uiMotherships], detachSystem); + each$1([mothership, ...uiMotherships], (m) => m.destroy()); + }); + }; + + const setup$a = noop; + const isDocked$1 = never; + const getBehaviours$1 = constant$1([]); + + var StaticHeader = /*#__PURE__*/Object.freeze({ + __proto__: null, + setup: setup$a, + isDocked: isDocked$1, + getBehaviours: getBehaviours$1 + }); + + const toolbarHeightChange = constant$1(generate$6('toolbar-height-change')); + + const visibility = { + fadeInClass: 'tox-editor-dock-fadein', + fadeOutClass: 'tox-editor-dock-fadeout', + transitionClass: 'tox-editor-dock-transition' + }; + const editorStickyOnClass = 'tox-tinymce--toolbar-sticky-on'; + const editorStickyOffClass = 'tox-tinymce--toolbar-sticky-off'; + const scrollFromBehindHeader = (e, containerHeader) => { + const doc = owner$4(containerHeader); + const win = defaultView(containerHeader); + const viewHeight = win.dom.innerHeight; + const scrollPos = get$b(doc); + const markerElement = SugarElement.fromDom(e.elm); + const markerPos = absolute$2(markerElement); + const markerHeight = get$d(markerElement); + const markerTop = markerPos.y; + const markerBottom = markerTop + markerHeight; + const editorHeaderPos = absolute$3(containerHeader); + const editorHeaderHeight = get$d(containerHeader); + const editorHeaderTop = editorHeaderPos.top; + const editorHeaderBottom = editorHeaderTop + editorHeaderHeight; + // Check to see if the header is docked to the top/bottom of the page (eg is floating) + const editorHeaderDockedAtTop = Math.abs(editorHeaderTop - scrollPos.top) < 2; + const editorHeaderDockedAtBottom = Math.abs(editorHeaderBottom - (scrollPos.top + viewHeight)) < 2; + // If the element is behind the header at the top of the page, then + // scroll the element down by the header height + if (editorHeaderDockedAtTop && markerTop < editorHeaderBottom) { + to(scrollPos.left, markerTop - editorHeaderHeight, doc); + // If the element is behind the header at the bottom of the page, then + // scroll the element up by the header height + } + else if (editorHeaderDockedAtBottom && markerBottom > editorHeaderTop) { + const y = (markerTop - viewHeight) + markerHeight + editorHeaderHeight; + to(scrollPos.left, y, doc); + } + }; + const isDockedMode = (header, mode) => contains$2(Docking.getModes(header), mode); + const updateIframeContentFlow = (header) => { + const getOccupiedHeight = (elm) => getOuter$1(elm) + + (parseInt(get$e(elm, 'margin-top'), 10) || 0) + + (parseInt(get$e(elm, 'margin-bottom'), 10) || 0); + const elm = header.element; + parentElement(elm).each((parentElem) => { + const padding = 'padding-' + Docking.getModes(header)[0]; + if (Docking.isDocked(header)) { + const parentWidth = get$c(parentElem); + set$7(elm, 'width', parentWidth + 'px'); + set$7(parentElem, padding, getOccupiedHeight(elm) + 'px'); + } + else { + remove$6(elm, 'width'); + remove$6(parentElem, padding); + } + }); + }; + const updateSinkVisibility = (sinkElem, visible) => { + if (visible) { + remove$3(sinkElem, visibility.fadeOutClass); + add$1(sinkElem, [visibility.transitionClass, visibility.fadeInClass]); + } + else { + remove$3(sinkElem, visibility.fadeInClass); + add$1(sinkElem, [visibility.fadeOutClass, visibility.transitionClass]); + } + }; + const updateEditorClasses = (editor, docked) => { + const editorContainer = SugarElement.fromDom(editor.getContainer()); + if (docked) { + add$2(editorContainer, editorStickyOnClass); + remove$3(editorContainer, editorStickyOffClass); + } + else { + add$2(editorContainer, editorStickyOffClass); + remove$3(editorContainer, editorStickyOnClass); + } + }; + const restoreFocus = (headerElem, focusedElem) => { + // When the header is hidden, then the element that was focused will be lost + // so we need to restore it if nothing else has already been focused (eg anything other than the body) + const ownerDoc = owner$4(focusedElem); + active$1(ownerDoc).filter((activeElm) => + // Don't try to refocus the same element + !eq(focusedElem, activeElm)).filter((activeElm) => + // Only attempt to refocus if the current focus is the body or is in the header element + eq(activeElm, SugarElement.fromDom(ownerDoc.dom.body)) || contains(headerElem, activeElm)).each(() => focus$4(focusedElem)); + }; + const findFocusedElem = (rootElm, lazySink) => + // Check to see if an element is focused inside the header or inside the sink + // and if so store the element so we can restore it later + search(rootElm).orThunk(() => lazySink().toOptional().bind((sink) => search(sink.element))); + const setup$9 = (editor, sharedBackstage, lazyHeader) => { + if (!editor.inline) { + // If using bottom toolbar then when the editor resizes we need to reset docking + // otherwise it won't know the original toolbar position has moved + if (!sharedBackstage.header.isPositionedAtTop()) { + editor.on('ResizeEditor', () => { + lazyHeader().each(Docking.reset); + }); + } + // No need to update the content flow in inline mode as the header always floats + editor.on('ResizeWindow ResizeEditor', () => { + lazyHeader().each(updateIframeContentFlow); + }); + // Need to reset the docking position on skin loaded as the original position will have + // changed due the skins styles being applied. + // Note: Inline handles it's own skin loading, as it needs to do other initial positioning + editor.on('SkinLoaded', () => { + lazyHeader().each((comp) => { + Docking.isDocked(comp) ? Docking.reset(comp) : Docking.refresh(comp); + }); + }); + // Need to reset when we go fullscreen so that if the header is docked, + // then it'll undock and viceversa + editor.on('FullscreenStateChanged', () => { + lazyHeader().each(Docking.reset); + }); + } + // If inline or sticky toolbars is enabled, then when scrolling into view we may still be + // behind the editor header so we need to adjust the scroll position to account for that + editor.on('AfterScrollIntoView', (e) => { + lazyHeader().each((header) => { + // We need to make sure the header docking has refreshed, otherwise if a large scroll occurred + // the header may have gone off page and need to be docked before doing calculations + Docking.refresh(header); + // If the header element is still visible, then adjust the scroll position if required + const headerElem = header.element; + if (isVisible(headerElem)) { + scrollFromBehindHeader(e, headerElem); + } + }); + }); + // Update the editor classes once initial rendering has completed + editor.on('PostRender', () => { + updateEditorClasses(editor, false); + }); + }; + const isDocked = (lazyHeader) => lazyHeader().map(Docking.isDocked).getOr(false); + const getIframeBehaviours = () => [ + Receiving.config({ + channels: { + [toolbarHeightChange()]: { + onReceive: updateIframeContentFlow + } + } + }) + ]; + const getBehaviours = (editor, sharedBackstage) => { + const focusedElm = value$2(); + const lazySink = sharedBackstage.getSink; + const runOnSinkElement = (f) => { + lazySink().each((sink) => f(sink.element)); + }; + const onDockingSwitch = (comp) => { + if (!editor.inline) { + updateIframeContentFlow(comp); + } + updateEditorClasses(editor, Docking.isDocked(comp)); + // TINY-9223: This will only reposition the popups in the same mothership as the StickyHeader + // and its sink. If we need to reposition the popups in all motherships (in the two sink + // model) then we'll need a reference to all motherships here. + comp.getSystem().broadcastOn([repositionPopups()], {}); + lazySink().each((sink) => sink.getSystem().broadcastOn([repositionPopups()], {})); + }; + const additionalBehaviours = editor.inline ? [] : getIframeBehaviours(); + return [ + Focusing.config({}), + Docking.config({ + contextual: { + lazyContext: (comp) => { + const headerHeight = getOuter$1(comp.element); + const container = editor.inline ? editor.getContentAreaContainer() : editor.getContainer(); + return Optional.from(container).map((c) => { + const box = box$1(SugarElement.fromDom(c)); + const optScrollingContext = detectWhenSplitUiMode(editor, comp.element); + return optScrollingContext.fold(() => { + // Force the header to hide before it overflows outside the container + const boxHeight = box.height - headerHeight; + const topBound = box.y + (isDockedMode(comp, 'top') ? 0 : headerHeight); + return bounds(box.x, topBound, box.width, boxHeight); + }, (scrollEnv) => { + const constrainedBounds = constrain(box, getBoundsFrom(scrollEnv)); + // When the toolbar location is set to the top, y is the top of the container and height is the available container height minus the header height, as the toolbar will be placed at the top of the container + // This is so that as you scroll the scrollable container/the page, it will dock at the top and when there's insufficient height/space (that's the reason of deducting the headerHeight for the available height), it will be hidden. + // When the toolbar location is set to the bottom, y is the top of the container plus the header height, as the toolbar will be placed at the bottom of the container, beyond the container, so that's why we need to add the headerHeight + // When there's insufficient height/space, it will be hidden, and when you scroll past the editor, it will be hidden + const constrainedBoundsY = isDockedMode(comp, 'top') + ? constrainedBounds.y + : constrainedBounds.y + headerHeight; + return bounds(constrainedBounds.x, + // ASSUMPTION: The constrainedBounds removes the need for us to set this to 0px + // for docked mode. Also, docking in a scrolling environment will often be + // at the scroller top, not the window top + constrainedBoundsY, constrainedBounds.width, constrainedBounds.height - headerHeight); + }); + }); + }, + onShow: () => { + runOnSinkElement((elem) => updateSinkVisibility(elem, true)); + }, + onShown: (comp) => { + runOnSinkElement((elem) => remove$2(elem, [visibility.transitionClass, visibility.fadeInClass])); + // Restore focus and reset the stored focused element + focusedElm.get().each((elem) => { + restoreFocus(comp.element, elem); + focusedElm.clear(); + }); + }, + onHide: (comp) => { + findFocusedElem(comp.element, lazySink).fold(focusedElm.clear, focusedElm.set); + runOnSinkElement((elem) => updateSinkVisibility(elem, false)); + }, + onHidden: () => { + runOnSinkElement((elem) => remove$2(elem, [visibility.transitionClass])); + }, + ...visibility + }, + lazyViewport: (comp) => { + const optScrollingContext = detectWhenSplitUiMode(editor, comp.element); + return optScrollingContext.fold(() => { + const boundsWithoutOffset = win(); + const offset = getStickyToolbarOffset(editor); + const top = boundsWithoutOffset.y + (isDockedMode(comp, 'top') && !isFullscreen(editor) ? offset : 0); + const height = boundsWithoutOffset.height - (isDockedMode(comp, 'bottom') ? offset : 0); + // No scrolling context, so just window + return { + bounds: bounds(boundsWithoutOffset.x, top, boundsWithoutOffset.width, height), + optScrollEnv: Optional.none() + }; + }, (sc) => { + // TINY-9411: Implement sticky toolbar offsets in scrollable containers + const combinedBounds = getBoundsFrom(sc); + return { + bounds: combinedBounds, + optScrollEnv: Optional.some({ + currentScrollTop: sc.element.dom.scrollTop, + scrollElmTop: absolute$3(sc.element).top + }) + }; + }); + }, + modes: [sharedBackstage.header.getDockingMode()], + onDocked: onDockingSwitch, + onUndocked: onDockingSwitch + }), + ...additionalBehaviours + ]; + }; + + var StickyHeader = /*#__PURE__*/Object.freeze({ + __proto__: null, + setup: setup$9, + isDocked: isDocked, + getBehaviours: getBehaviours + }); + + const renderHeader = (spec) => { + const editor = spec.editor; + const getBehaviours$2 = spec.sticky ? getBehaviours : getBehaviours$1; + return { + uid: spec.uid, + dom: spec.dom, + components: spec.components, + behaviours: derive$1(getBehaviours$2(editor, spec.sharedBackstage)) + }; + }; + + const factory$3 = (detail, spec) => { + const setMenus = (comp, menus) => { + const newMenus = map$2(menus, (m) => { + const buttonSpec = { + type: 'menubutton', + text: m.text, + fetch: (callback) => { + callback(m.getItems()); + }, + context: 'any' + }; + // Convert to an internal bridge spec + const internal = createMenuButton(buttonSpec).mapError((errInfo) => formatError(errInfo)).getOrDie(); + return renderMenuButton(internal, "tox-mbtn" /* MenuButtonClasses.Button */, spec.backstage, + // https://www.w3.org/TR/wai-aria-practices/examples/menubar/menubar-2/menubar-2.html + Optional.some('menuitem')); + }); + Replacing.set(comp, newMenus); + }; + const apis = { + focus: Keying.focusIn, + setMenus + }; + return { + uid: detail.uid, + dom: detail.dom, + components: [], + behaviours: derive$1([ + Replacing.config({}), + config('menubar-events', [ + runOnAttached((component) => { + detail.onSetup(component); + }), + run$1(mouseover(), (comp, se) => { + // TODO: Use constants + descendant(comp.element, '.' + "tox-mbtn--active" /* MenuButtonClasses.Active */).each((activeButton) => { + closest$3(se.event.target, '.' + "tox-mbtn" /* MenuButtonClasses.Button */).each((hoveredButton) => { + if (!eq(activeButton, hoveredButton)) { + // Now, find the components, and expand the hovered one, and close the active one + comp.getSystem().getByDom(activeButton).each((activeComp) => { + comp.getSystem().getByDom(hoveredButton).each((hoveredComp) => { + Dropdown.expand(hoveredComp); + Dropdown.close(activeComp); + Focusing.focus(hoveredComp); + }); + }); + } + }); + }); + }), + run$1(focusShifted(), (comp, se) => { + se.event.prevFocus.bind((prev) => comp.getSystem().getByDom(prev).toOptional()).each((prev) => { + se.event.newFocus.bind((nu) => comp.getSystem().getByDom(nu).toOptional()).each((nu) => { + if (Dropdown.isOpen(prev)) { + Dropdown.expand(nu); + Dropdown.close(prev); + } + }); + }); + }) + ]), + Keying.config({ + mode: 'flow', + selector: '.' + "tox-mbtn" /* MenuButtonClasses.Button */, + onEscape: (comp) => { + detail.onEscape(comp); + return Optional.some(true); + } + }), + Tabstopping.config({}) + ]), + apis, + domModification: { + attributes: { + role: 'menubar' + } + } + }; + }; + var SilverMenubar = single({ + factory: factory$3, + name: 'silver.Menubar', + configFields: [ + required$1('dom'), + required$1('uid'), + required$1('onEscape'), + required$1('backstage'), + defaulted('onSetup', noop) + ], + apis: { + focus: (apis, comp) => { + apis.focus(comp); + }, + setMenus: (apis, comp, menus) => { + apis.setMenus(comp, menus); + } + } + }); + + const promotionMessage = '💝 Get all features'; + const promotionLink = 'https://www.tiny.cloud/tinymce-upgrade-to-cloud/?utm_campaign=self_hosted_upgrade_promo&utm_source=tiny&utm_medium=referral'; + const renderPromotion = (spec) => { + const components = spec.promotionLink ? [ + { + dom: { + tag: 'a', + attributes: { + 'href': promotionLink, + 'rel': 'noopener', + 'target': '_blank', + 'aria-hidden': 'true' + }, + classes: ['tox-promotion-link'], + innerHtml: promotionMessage + } + } + ] : []; + return { + uid: spec.uid, + dom: spec.dom, + components + }; + }; + + const setup$8 = (editor) => { + const { sidebars } = editor.ui.registry.getAll(); + // Setup each registered sidebar + each$1(keys(sidebars), (name) => { + const spec = sidebars[name]; + const isActive = () => is$1(Optional.from(editor.queryCommandValue('ToggleSidebar')), name); + editor.ui.registry.addToggleButton(name, { + icon: spec.icon, + tooltip: spec.tooltip, + onAction: (buttonApi) => { + editor.execCommand('ToggleSidebar', false, name); + buttonApi.setActive(isActive()); + }, + onSetup: (buttonApi) => { + buttonApi.setActive(isActive()); + const handleToggle = () => buttonApi.setActive(isActive()); + editor.on('ToggleSidebar', handleToggle); + return () => { + editor.off('ToggleSidebar', handleToggle); + }; + }, + context: 'any' + }); + }); + }; + const getApi = (comp) => ({ + element: () => comp.element.dom + }); + const makePanels = (parts, panelConfigs) => { + const specs = map$2(keys(panelConfigs), (name) => { + const spec = panelConfigs[name]; + const bridged = getOrDie(createSidebar(spec)); + return { + name, + getApi, + onSetup: bridged.onSetup, + onShow: bridged.onShow, + onHide: bridged.onHide + }; + }); + return map$2(specs, (spec) => { + const editorOffCell = Cell(noop); + return parts.slot(spec.name, { + dom: { + tag: 'div', + classes: ['tox-sidebar__pane'] + }, + behaviours: SimpleBehaviours.unnamedEvents([ + onControlAttached(spec, editorOffCell), + onControlDetached(spec, editorOffCell), + run$1(slotVisibility(), (sidepanel, se) => { + const data = se.event; + const optSidePanelSpec = find$5(specs, (config) => config.name === data.name); + optSidePanelSpec.each((sidePanelSpec) => { + const handler = data.visible ? sidePanelSpec.onShow : sidePanelSpec.onHide; + handler(sidePanelSpec.getApi(sidepanel)); + }); + }) + ]) + }); + }); + }; + const makeSidebar = (panelConfigs) => SlotContainer.sketch((parts) => ({ + dom: { + tag: 'div', + classes: ['tox-sidebar__pane-container'] + }, + components: makePanels(parts, panelConfigs), + slotBehaviours: SimpleBehaviours.unnamedEvents([ + runOnAttached((slotContainer) => SlotContainer.hideAllSlots(slotContainer)) + ]) + })); + const setSidebar = (sidebar, panelConfigs, showSidebar) => { + const optSlider = Composing.getCurrent(sidebar); + optSlider.each((slider) => { + Replacing.set(slider, [makeSidebar(panelConfigs)]); + // Show the default sidebar + const configKey = showSidebar?.toLowerCase(); + if (isString(configKey) && has$2(panelConfigs, configKey)) { + Composing.getCurrent(slider).each((slotContainer) => { + SlotContainer.showSlot(slotContainer, configKey); + Sliding.immediateGrow(slider); + // TINY-8710: Remove the width as since the skins/styles won't have loaded yet, so it's going to be incorrect + remove$6(slider.element, 'width'); + updateSidebarRoleOnToggle(sidebar.element, "region" /* SidebarStateRoleAttr.Grown */); + }); + } + }); + }; + const updateSidebarRoleOnToggle = (sidebar, sidebarState) => { + set$9(sidebar, 'role', sidebarState); + }; + const toggleSidebar = (sidebar, name) => { + const optSlider = Composing.getCurrent(sidebar); + optSlider.each((slider) => { + const optSlotContainer = Composing.getCurrent(slider); + optSlotContainer.each((slotContainer) => { + if (Sliding.hasGrown(slider)) { + if (SlotContainer.isShowing(slotContainer, name)) { + // close the slider and then hide the slot after the animation finishes + Sliding.shrink(slider); + updateSidebarRoleOnToggle(sidebar.element, "presentation" /* SidebarStateRoleAttr.Shrunk */); + } + else { + SlotContainer.hideAllSlots(slotContainer); + SlotContainer.showSlot(slotContainer, name); + updateSidebarRoleOnToggle(sidebar.element, "region" /* SidebarStateRoleAttr.Grown */); + } + } + else { + // Should already be hidden if the animation has finished but if it has not we hide them + SlotContainer.hideAllSlots(slotContainer); + SlotContainer.showSlot(slotContainer, name); + Sliding.grow(slider); + updateSidebarRoleOnToggle(sidebar.element, "region" /* SidebarStateRoleAttr.Grown */); + } + }); + }); + }; + const whichSidebar = (sidebar) => { + const optSlider = Composing.getCurrent(sidebar); + return optSlider.bind((slider) => { + const sidebarOpen = Sliding.isGrowing(slider) || Sliding.hasGrown(slider); + if (sidebarOpen) { + const optSlotContainer = Composing.getCurrent(slider); + return optSlotContainer.bind((slotContainer) => find$5(SlotContainer.getSlotNames(slotContainer), (name) => SlotContainer.isShowing(slotContainer, name))); + } + else { + return Optional.none(); + } + }); + }; + const fixSize = generate$6('FixSizeEvent'); + const autoSize = generate$6('AutoSizeEvent'); + const renderSidebar = (spec) => ({ + uid: spec.uid, + dom: { + tag: 'div', + classes: ['tox-sidebar'], + attributes: { + role: "presentation" /* SidebarStateRoleAttr.Shrunk */ + } + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-sidebar__slider'] + }, + components: [ + // this will be replaced on setSidebar + ], + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}), // TODO use Keying and use focusIn, but need to handle if sidebar contains nothing + Sliding.config({ + dimension: { + property: 'width' + }, + closedClass: 'tox-sidebar--sliding-closed', + openClass: 'tox-sidebar--sliding-open', + shrinkingClass: 'tox-sidebar--sliding-shrinking', + growingClass: 'tox-sidebar--sliding-growing', + onShrunk: (slider) => { + const optSlotContainer = Composing.getCurrent(slider); + optSlotContainer.each(SlotContainer.hideAllSlots); + emit(slider, autoSize); + }, + onGrown: (slider) => { + emit(slider, autoSize); + }, + onStartGrow: (slider) => { + emitWith(slider, fixSize, { width: getRaw(slider.element, 'width').getOr('') }); + }, + onStartShrink: (slider) => { + emitWith(slider, fixSize, { width: get$c(slider.element) + 'px' }); + } + }), + Replacing.config({}), + Composing.config({ + find: (comp) => { + const children = Replacing.contents(comp); + return head(children); + } + }) + ]) + } + ], + behaviours: derive$1([ + ComposingConfigs.childAt(0), + config('sidebar-sliding-events', [ + run$1(fixSize, (comp, se) => { + set$7(comp.element, 'width', se.event.width); + }), + run$1(autoSize, (comp, _se) => { + remove$6(comp.element, 'width'); + }) + ]) + ]) + }); + + const getBusySpec$1 = (providerBackstage) => (_root, _behaviours) => ({ + dom: { + tag: 'div', + attributes: { + 'aria-label': providerBackstage.translate('Loading...'), + 'tabindex': '0' + }, + classes: ['tox-throbber__busy-spinner'] + }, + components: [ + { + dom: fromHtml('
') + } + ], + }); + const focusBusyComponent = (throbber) => Composing.getCurrent(throbber).each((comp) => focus$4(comp.element, true)); + // When the throbber is enabled, prevent the iframe from being part of the sequential keyboard navigation when Tabbing + // TODO: TINY-7500 Only works for iframe mode at this stage + const toggleEditorTabIndex = (editor, state) => { + const tabIndexAttr = 'tabindex'; + const dataTabIndexAttr = `data-mce-${tabIndexAttr}`; + Optional.from(editor.iframeElement) + .map(SugarElement.fromDom) + .each((iframe) => { + if (state) { + getOpt(iframe, tabIndexAttr).each((tabIndex) => set$9(iframe, dataTabIndexAttr, tabIndex)); + set$9(iframe, tabIndexAttr, -1); + } + else { + remove$8(iframe, tabIndexAttr); + getOpt(iframe, dataTabIndexAttr).each((tabIndex) => { + set$9(iframe, tabIndexAttr, tabIndex); + remove$8(iframe, dataTabIndexAttr); + }); + } + }); + }; + /* + * If the throbber has been toggled on, only focus the throbber if the editor had focus as we don't to steal focus if it is on an input or dialog + * If the throbber has been toggled off, only put focus back on the editor if the throbber had focus. + * The next logical focus transition from the throbber is to put it back on the editor + */ + const toggleThrobber = (editor, comp, state, providerBackstage) => { + const element = comp.element; + toggleEditorTabIndex(editor, state); + if (state) { + Blocking.block(comp, getBusySpec$1(providerBackstage)); + remove$6(element, 'display'); + remove$8(element, 'aria-hidden'); + if (editor.hasFocus()) { + focusBusyComponent(comp); + } + } + else { + // Get the focus of the busy component before it is removed from the DOM + const throbberFocus = Composing.getCurrent(comp).exists((busyComp) => hasFocus(busyComp.element)); + Blocking.unblock(comp); + set$7(element, 'display', 'none'); + set$9(element, 'aria-hidden', 'true'); + if (throbberFocus) { + editor.focus(); + } + } + }; + const renderThrobber = (spec) => ({ + uid: spec.uid, + dom: { + tag: 'div', + attributes: { + 'aria-hidden': 'true' + }, + classes: ['tox-throbber'], + styles: { + display: 'none' + } + }, + behaviours: derive$1([ + Replacing.config({}), + Blocking.config({ + focus: false + }), + Composing.config({ + find: (comp) => head(comp.components()) + }) + ]), + components: [] + }); + const isFocusEvent = (event) => event.type === 'focusin'; + const isPasteBinTarget = (event) => { + if (isFocusEvent(event)) { + const node = event.composed ? head(event.composedPath()) : Optional.from(event.target); + return node + .map(SugarElement.fromDom) + .filter(isElement$1) + .exists((targetElm) => has(targetElm, 'mce-pastebin')); + } + else { + return false; + } + }; + const setup$7 = (editor, lazyThrobber, sharedBackstage) => { + const throbberState = Cell(false); + const timer = value$2(); + const stealFocus = (e) => { + if (throbberState.get() && !isPasteBinTarget(e)) { + e.preventDefault(); + focusBusyComponent(lazyThrobber()); + editor.editorManager.setActive(editor); + } + }; + // TODO: TINY-7500 Only worrying about iframe mode at this stage since inline mode has a number of other issues + if (!editor.inline) { + editor.on('PreInit', () => { + // Cover focus when the editor is focused natively + editor.dom.bind(editor.getWin(), 'focusin', stealFocus); + // Cover stealing focus when editor.focus() is called + editor.on('BeforeExecCommand', (e) => { + // If skipFocus is specified as true in the command, don't focus the Throbber + if (e.command.toLowerCase() === 'mcefocus' && e.value !== true) { + stealFocus(e); + } + }); + }); + } + const toggle = (state) => { + if (state !== throbberState.get()) { + throbberState.set(state); + toggleThrobber(editor, lazyThrobber(), state, sharedBackstage.providers); + fireAfterProgressState(editor, state); + } + }; + editor.on('ProgressState', (e) => { + timer.on(clearTimeout); + if (isNumber(e.time)) { + const timerId = global$a.setEditorTimeout(editor, () => toggle(e.state), e.time); + timer.set(timerId); + } + else { + toggle(e.state); + timer.clear(); + } + }); + }; + + const renderToolbarGroupCommon = (toolbarGroup) => { + const attributes = toolbarGroup.label.isNone() ? + toolbarGroup.title.fold(() => ({}), (title) => ({ attributes: { 'aria-label': title } })) + : toolbarGroup.label.fold(() => ({}), (label) => ({ attributes: { 'aria-label': label } })); + return { + dom: { + tag: 'div', + classes: ['tox-toolbar__group'].concat(toolbarGroup.label.isSome() ? ['tox-toolbar__group_with_label'] : []), + ...attributes + }, + components: [ + ...(toolbarGroup.label.map((label) => { + return { + dom: { + tag: 'span', + classes: ['tox-label', 'tox-label--context-toolbar'], + }, + components: [text$2(label)] + }; + }).toArray()), + ToolbarGroup.parts.items({}) + ], + items: toolbarGroup.items, + markers: { + // nav within a group breaks if disabled buttons are first in their group so skip them + itemSelector: '.tox-tbtn:not([disabled]), ' + + '.tox-toolbar-nav-item:not([disabled]), ' + + '.tox-number-input:not([disabled])' + }, + tgroupBehaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({ + ignore: true + }) + ]) + }; + }; + const renderToolbarGroup = (toolbarGroup) => ToolbarGroup.sketch(renderToolbarGroupCommon(toolbarGroup)); + const getToolbarBehaviours = (toolbarSpec, modeName) => { + const onAttached = runOnAttached((component) => { + const groups = map$2(toolbarSpec.initGroups, renderToolbarGroup); + Toolbar.setGroups(component, groups); + }); + return derive$1([ + DisablingConfigs.toolbarButton(() => toolbarSpec.providers.checkUiComponentContext('any').shouldDisable), + toggleOnReceive(() => toolbarSpec.providers.checkUiComponentContext('any')), + Keying.config({ + // Tabs between groups + mode: modeName, + onEscape: toolbarSpec.onEscape, + visibilitySelector: '.tox-toolbar__overflow', + selector: '.tox-toolbar__group' + }), + config('toolbar-events', [onAttached]) + ]); + }; + const renderMoreToolbarCommon = (toolbarSpec) => { + const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic'; + return { + uid: toolbarSpec.uid, + dom: { + tag: 'div', + classes: ['tox-toolbar-overlord'] + }, + parts: { + // This already knows it is a toolbar group + 'overflow-group': renderToolbarGroupCommon({ + title: Optional.none(), + label: Optional.none(), + items: [] + }), + 'overflow-button': renderIconButtonSpec({ + context: 'any', + name: 'more', + icon: Optional.some('more-drawer'), + enabled: true, + tooltip: Optional.some('Reveal or hide additional toolbar items'), + primary: false, + buttonType: Optional.none(), + borderless: false + }, Optional.none(), toolbarSpec.providers, [], 'overflow-button') + }, + splitToolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName) + }; + }; + const renderFloatingMoreToolbar = (toolbarSpec) => { + const baseSpec = renderMoreToolbarCommon(toolbarSpec); + const overflowXOffset = 4; + const primary = SplitFloatingToolbar.parts.primary({ + dom: { + tag: 'div', + classes: ['tox-toolbar__primary'] + } + }); + return SplitFloatingToolbar.sketch({ + ...baseSpec, + lazySink: toolbarSpec.getSink, + getOverflowBounds: () => { + // Restrict the left/right bounds to the editor header width, but don't restrict the top/bottom + const headerElem = toolbarSpec.moreDrawerData.lazyHeader().element; + const headerBounds = absolute$2(headerElem); + const docElem = documentElement(headerElem); + const docBounds = absolute$2(docElem); + const height = Math.max(docElem.dom.scrollHeight, docBounds.height); + return bounds(headerBounds.x + overflowXOffset, docBounds.y, headerBounds.width - overflowXOffset * 2, height); + }, + parts: { + ...baseSpec.parts, + overflow: { + dom: { + tag: 'div', + classes: ['tox-toolbar__overflow'], + attributes: toolbarSpec.attributes + } + } + }, + components: [primary], + markers: { + overflowToggledClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */ + }, + onOpened: (comp) => toolbarSpec.onToggled(comp, true), + onClosed: (comp) => toolbarSpec.onToggled(comp, false) + }); + }; + const renderSlidingMoreToolbar = (toolbarSpec) => { + const primary = SplitSlidingToolbar.parts.primary({ + dom: { + tag: 'div', + classes: ['tox-toolbar__primary'] + } + }); + const overflow = SplitSlidingToolbar.parts.overflow({ + dom: { + tag: 'div', + classes: ['tox-toolbar__overflow'] + } + }); + const baseSpec = renderMoreToolbarCommon(toolbarSpec); + return SplitSlidingToolbar.sketch({ + ...baseSpec, + components: [primary, overflow], + markers: { + openClass: 'tox-toolbar__overflow--open', + closedClass: 'tox-toolbar__overflow--closed', + growingClass: 'tox-toolbar__overflow--growing', + shrinkingClass: 'tox-toolbar__overflow--shrinking', + overflowToggledClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */ + }, + onOpened: (comp) => { + // TINY-9223: This will only broadcast to the same mothership as the toolbar + comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'opened' }); + toolbarSpec.onToggled(comp, true); + }, + onClosed: (comp) => { + // TINY-9223: This will only broadcast to the same mothership as the toolbar + comp.getSystem().broadcastOn([toolbarHeightChange()], { type: 'closed' }); + toolbarSpec.onToggled(comp, false); + } + }); + }; + const renderToolbar = (toolbarSpec) => { + const modeName = toolbarSpec.cyclicKeying ? 'cyclic' : 'acyclic'; + return Toolbar.sketch({ + uid: toolbarSpec.uid, + dom: { + tag: 'div', + classes: ['tox-toolbar'].concat(toolbarSpec.type === ToolbarMode$1.scrolling ? ['tox-toolbar--scrolling'] : []) + }, + components: [ + Toolbar.parts.groups({}) + ], + toolbarBehaviours: getToolbarBehaviours(toolbarSpec, modeName) + }); + }; + + const renderButton = (spec, providers) => { + const isToggleButton = spec.type === 'togglebutton'; + const optMemIcon = spec.icon + .map((memIcon) => renderReplaceableIconFromPack(memIcon, providers.icons)) + .map(record); + const getAction = () => (comp) => { + const setIcon = (newIcon) => { + optMemIcon.map((memIcon) => memIcon.getOpt(comp).each((displayIcon) => { + Replacing.set(displayIcon, [ + renderReplaceableIconFromPack(newIcon, providers.icons) + ]); + })); + }; + const setActive = (state) => { + const elm = comp.element; + if (state) { + add$2(elm, "tox-button--enabled" /* ViewButtonClasses.Ticked */); + set$9(elm, 'aria-pressed', true); + } + else { + remove$3(elm, "tox-button--enabled" /* ViewButtonClasses.Ticked */); + remove$8(elm, 'aria-pressed'); + } + }; + const isActive = () => has(comp.element, "tox-button--enabled" /* ViewButtonClasses.Ticked */); + const focus = () => focus$4(comp.element); + if (isToggleButton) { + return spec.onAction({ setIcon, setActive, isActive, focus }); + } + if (spec.type === 'button') { + return spec.onAction({ setIcon }); + } + }; + const action = getAction(); + const buttonSpec = { + ...spec, + name: isToggleButton ? spec.text.getOr(spec.icon.getOr('')) : spec.text ?? spec.icon.getOr(''), + primary: spec.buttonType === 'primary', + buttonType: Optional.from(spec.buttonType), + tooltip: spec.tooltip, + icon: spec.icon, + enabled: true, + borderless: spec.borderless + }; + const buttonTypeClasses = calculateClassesFromButtonType(spec.buttonType ?? 'secondary'); + const optTranslatedText = isToggleButton ? spec.text.map(providers.translate) : Optional.some(providers.translate(spec.text)); + const optTranslatedTextComponed = optTranslatedText.map(text$2); + const ariaLabelAttributes = buttonSpec.tooltip.or(optTranslatedText).map((al) => ({ + 'aria-label': providers.translate(al), + })).getOr({}); + const optIconSpec = optMemIcon.map((memIcon) => memIcon.asSpec()); + const components = componentRenderPipeline([optIconSpec, optTranslatedTextComponed]); + const hasIconAndText = spec.icon.isSome() && optTranslatedTextComponed.isSome(); + const dom = { + tag: 'button', + classes: buttonTypeClasses + .concat(...spec.icon.isSome() && !hasIconAndText ? ['tox-button--icon'] : []) + .concat(...hasIconAndText ? ['tox-button--icon-and-text'] : []) + .concat(...spec.borderless ? ['tox-button--naked'] : []) + .concat(...spec.type === 'togglebutton' && spec.active ? ["tox-button--enabled" /* ViewButtonClasses.Ticked */] : []), + attributes: ariaLabelAttributes + }; + const extraBehaviours = []; + const iconButtonSpec = renderCommonSpec(buttonSpec, Optional.some(action), extraBehaviours, dom, components, spec.tooltip, providers); + return Button.sketch(iconButtonSpec); + }; + + const renderViewButton = (spec, providers) => renderButton(spec, providers); + const renderButtonsGroup = (spec, providers) => { + return { + dom: { + tag: 'div', + classes: ['tox-view__toolbar__group'], + }, + components: map$2(spec.buttons, (button) => renderViewButton(button, providers)) + }; + }; + const deviceDetection = detect$1().deviceType; + const isPhone = deviceDetection.isPhone(); + const isTablet = deviceDetection.isTablet(); + const renderViewHeader = (spec) => { + let hasGroups = false; + const endButtons = map$2(spec.buttons, (btnspec) => { + if (btnspec.type === 'group') { + hasGroups = true; + return renderButtonsGroup(btnspec, spec.providers); + } + else { + return renderViewButton(btnspec, spec.providers); + } + }); + return { + uid: spec.uid, + dom: { + tag: 'div', + classes: [ + !hasGroups ? 'tox-view__header' : 'tox-view__toolbar', + ...(isPhone || isTablet ? ['tox-view--mobile', 'tox-view--scrolling'] : []) + ] + }, + behaviours: derive$1([ + Focusing.config({}), + Keying.config({ + mode: 'flow', + selector: 'button, .tox-button', + focusInside: FocusInsideModes.OnEnterOrSpaceMode + }) + ]), + components: hasGroups ? + endButtons + : [ + Container.sketch({ + dom: { + tag: 'div', + classes: ['tox-view__header-start'] + }, + components: [] + }), + Container.sketch({ + dom: { + tag: 'div', + classes: ['tox-view__header-end'] + }, + components: endButtons + }) + ] + }; + }; + const renderViewPane = (spec) => { + return { + uid: spec.uid, + behaviours: derive$1([ + Focusing.config({}), + Tabstopping.config({}) + ]), + dom: { + tag: 'div', + classes: ['tox-view__pane'] + } + }; + }; + const factory$2 = (detail, components, _spec, _externals) => { + const apis = { + getPane: (comp) => parts$g.getPart(comp, detail, 'pane'), + getOnShow: (_comp) => detail.viewConfig.onShow, + getOnHide: (_comp) => detail.viewConfig.onHide, + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + behaviours: derive$1([ + Focusing.config({}), + Keying.config({ + mode: 'cyclic', + focusInside: FocusInsideModes.OnEnterOrSpaceMode + }) + ]), + apis + }; + }; + var View = composite({ + name: 'silver.View', + configFields: [ + required$1('viewConfig'), + ], + partFields: [ + optional({ + factory: { + sketch: renderViewHeader + }, + schema: [ + required$1('buttons'), + required$1('providers') + ], + name: 'header' + }), + optional({ + factory: { + sketch: renderViewPane + }, + schema: [], + name: 'pane' + }) + ], + factory: factory$2, + apis: { + getPane: (apis, comp) => apis.getPane(comp), + getOnShow: (apis, comp) => apis.getOnShow(comp), + getOnHide: (apis, comp) => apis.getOnHide(comp) + } + }); + + const makeViews = (parts, viewConfigs, providers) => { + return mapToArray(viewConfigs, (config, name) => { + const internalViewConfig = getOrDie(createView(config)); + return parts.slot(name, View.sketch({ + dom: { + tag: 'div', + classes: ['tox-view'] + }, + viewConfig: internalViewConfig, + components: [ + ...internalViewConfig.buttons.length > 0 ? [ + View.parts.header({ + buttons: internalViewConfig.buttons, + providers + }) + ] : [], + View.parts.pane({}) + ] + })); + }); + }; + const makeSlotContainer = (viewConfigs, providers) => SlotContainer.sketch((parts) => ({ + dom: { + tag: 'div', + classes: ['tox-view-wrap__slot-container'] + }, + components: makeViews(parts, viewConfigs, providers), + slotBehaviours: SimpleBehaviours.unnamedEvents([ + runOnAttached((slotContainer) => SlotContainer.hideAllSlots(slotContainer)) + ]) + })); + const getCurrentName = (slotContainer) => { + return find$5(SlotContainer.getSlotNames(slotContainer), (name) => SlotContainer.isShowing(slotContainer, name)); + }; + const hideContainer = (comp) => { + const element = comp.element; + set$7(element, 'display', 'none'); + set$9(element, 'aria-hidden', 'true'); + }; + const showContainer = (comp) => { + const element = comp.element; + remove$6(element, 'display'); + remove$8(element, 'aria-hidden'); + }; + const makeViewInstanceApi = (slot) => ({ + getContainer: constant$1(slot) + }); + const runOnPaneWithInstanceApi = (slotContainer, name, get) => { + SlotContainer.getSlot(slotContainer, name).each((view) => { + View.getPane(view).each((pane) => { + const onCallback = get(view); + onCallback(makeViewInstanceApi(pane.element.dom)); + }); + }); + }; + const runOnShow = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnShow); + const runOnHide = (slotContainer, name) => runOnPaneWithInstanceApi(slotContainer, name, View.getOnHide); + const factory$1 = (detail, spec) => { + const setViews = (comp, viewConfigs) => { + Replacing.set(comp, [makeSlotContainer(viewConfigs, spec.backstage.shared.providers)]); + }; + const whichView = (comp) => { + return Composing.getCurrent(comp).bind(getCurrentName); + }; + const toggleView = (comp, showMainView, hideMainView, name) => { + return Composing.getCurrent(comp).exists((slotContainer) => { + const optCurrentSlotName = getCurrentName(slotContainer); + const isTogglingCurrentView = optCurrentSlotName.exists((current) => name === current); + const exists = SlotContainer.getSlot(slotContainer, name).isSome(); + if (exists) { + SlotContainer.hideAllSlots(slotContainer); + if (!isTogglingCurrentView) { + hideMainView(); + showContainer(comp); + SlotContainer.showSlot(slotContainer, name); + runOnShow(slotContainer, name); + } + else { + hideContainer(comp); + showMainView(); + } + optCurrentSlotName.each((prevName) => runOnHide(slotContainer, prevName)); + } + return exists; + }); + }; + const apis = { + setViews, + whichView, + toggleView + }; + return { + uid: detail.uid, + dom: { + tag: 'div', + classes: ['tox-view-wrap'], + attributes: { 'aria-hidden': 'true' }, + styles: { display: 'none' } + }, + components: [ + // this will be replaced on setViews + ], + behaviours: derive$1([ + Replacing.config({}), + Composing.config({ + find: (comp) => { + const children = Replacing.contents(comp); + return head(children); + } + }) + ]), + apis + }; + }; + var ViewWrapper = single({ + factory: factory$1, + name: 'silver.ViewWrapper', + configFields: [ + required$1('backstage') + ], + apis: { + setViews: (apis, comp, views) => apis.setViews(comp, views), + toggleView: (apis, comp, outerContainer, editorCont, name) => apis.toggleView(comp, outerContainer, editorCont, name), + whichView: (apis, comp) => apis.whichView(comp) + } + }); + + const factory = (detail, components, _spec) => { + let toolbarDrawerOpenState = false; + const toggleStatusbar = (editorContainer) => { + sibling(editorContainer, '.tox-statusbar').each((statusBar) => { + if (get$e(statusBar, 'display') === 'none' && get$g(statusBar, 'aria-hidden') === 'true') { + remove$6(statusBar, 'display'); + remove$8(statusBar, 'aria-hidden'); + } + else { + set$7(statusBar, 'display', 'none'); + set$9(statusBar, 'aria-hidden', 'true'); + } + }); + }; + const apis = { + getSocket: (comp) => { + return parts$g.getPart(comp, detail, 'socket'); + }, + setSidebar: (comp, panelConfigs, showSidebar) => { + parts$g.getPart(comp, detail, 'sidebar').each((sidebar) => setSidebar(sidebar, panelConfigs, showSidebar)); + }, + toggleSidebar: (comp, name) => { + parts$g.getPart(comp, detail, 'sidebar').each((sidebar) => toggleSidebar(sidebar, name)); + }, + whichSidebar: (comp) => { + return parts$g.getPart(comp, detail, 'sidebar').bind(whichSidebar).getOrNull(); + }, + getHeader: (comp) => { + return parts$g.getPart(comp, detail, 'header'); + }, + getToolbar: (comp) => { + return parts$g.getPart(comp, detail, 'toolbar'); + }, + setToolbar: (comp, groups) => { + parts$g.getPart(comp, detail, 'toolbar').each((toolbar) => { + const renderedGroups = map$2(groups, renderToolbarGroup); + toolbar.getApis().setGroups(toolbar, renderedGroups); + }); + }, + setToolbars: (comp, toolbars) => { + parts$g.getPart(comp, detail, 'multiple-toolbar').each((mToolbar) => { + const renderedToolbars = map$2(toolbars, (g) => map$2(g, renderToolbarGroup)); + CustomList.setItems(mToolbar, renderedToolbars); + }); + }, + refreshToolbar: (comp) => { + const toolbar = parts$g.getPart(comp, detail, 'toolbar'); + toolbar.each((toolbar) => toolbar.getApis().refresh(toolbar)); + }, + toggleToolbarDrawer: (comp) => { + parts$g.getPart(comp, detail, 'toolbar').each((toolbar) => { + mapFrom(toolbar.getApis().toggle, (toggle) => toggle(toolbar)); + }); + }, + toggleToolbarDrawerWithoutFocusing: (comp) => { + parts$g.getPart(comp, detail, 'toolbar').each((toolbar) => { + mapFrom(toolbar.getApis().toggleWithoutFocusing, (toggleWithoutFocusing) => toggleWithoutFocusing(toolbar)); + }); + }, + isToolbarDrawerToggled: (comp) => { + // isOpen may not be defined on all toolbars e.g. 'scrolling' and 'wrap' + return parts$g.getPart(comp, detail, 'toolbar') + .bind((toolbar) => Optional.from(toolbar.getApis().isOpen).map((isOpen) => isOpen(toolbar))) + .getOr(false); + }, + getThrobber: (comp) => { + return parts$g.getPart(comp, detail, 'throbber'); + }, + focusToolbar: (comp) => { + const optToolbar = parts$g.getPart(comp, detail, 'toolbar').orThunk(() => parts$g.getPart(comp, detail, 'multiple-toolbar')); + optToolbar.each((toolbar) => { + Keying.focusIn(toolbar); + }); + }, + setMenubar: (comp, menus) => { + parts$g.getPart(comp, detail, 'menubar').each((menubar) => { + SilverMenubar.setMenus(menubar, menus); + }); + }, + focusMenubar: (comp) => { + parts$g.getPart(comp, detail, 'menubar').each((menubar) => { + SilverMenubar.focus(menubar); + }); + }, + setViews: (comp, viewConfigs) => { + parts$g.getPart(comp, detail, 'viewWrapper').each((wrapper) => { + ViewWrapper.setViews(wrapper, viewConfigs); + }); + }, + toggleView: (comp, name) => { + return parts$g.getPart(comp, detail, 'viewWrapper').exists((wrapper) => ViewWrapper.toggleView(wrapper, () => apis.showMainView(comp), () => apis.hideMainView(comp), name)); + }, + whichView: (comp) => { + return parts$g.getPart(comp, detail, 'viewWrapper').bind(ViewWrapper.whichView).getOrNull(); + }, + hideMainView: (comp) => { + toolbarDrawerOpenState = apis.isToolbarDrawerToggled(comp); + if (toolbarDrawerOpenState) { + apis.toggleToolbarDrawer(comp); + } + parts$g.getPart(comp, detail, 'editorContainer').each((editorContainer) => { + const element = editorContainer.element; + toggleStatusbar(element); + set$7(element, 'display', 'none'); + set$9(element, 'aria-hidden', 'true'); + }); + }, + showMainView: (comp) => { + if (toolbarDrawerOpenState) { + apis.toggleToolbarDrawer(comp); + } + parts$g.getPart(comp, detail, 'editorContainer').each((editorContainer) => { + const element = editorContainer.element; + toggleStatusbar(element); + remove$6(element, 'display'); + remove$8(element, 'aria-hidden'); + }); + } + }; + return { + uid: detail.uid, + dom: detail.dom, + components, + apis, + behaviours: detail.behaviours + }; + }; + const partMenubar = partType$1.optional({ + factory: SilverMenubar, + name: 'menubar', + schema: [ + required$1('backstage') + ] + }); + const toolbarFactory = (spec) => { + if (spec.type === ToolbarMode$1.sliding) { + return renderSlidingMoreToolbar; + } + else if (spec.type === ToolbarMode$1.floating) { + return renderFloatingMoreToolbar; + } + else { + return renderToolbar; + } + }; + const partMultipleToolbar = partType$1.optional({ + factory: { + sketch: (spec) => CustomList.sketch({ + uid: spec.uid, + dom: spec.dom, + listBehaviours: derive$1([ + Keying.config({ + mode: 'acyclic', + selector: '.tox-toolbar' + }) + ]), + makeItem: () => renderToolbar({ + type: spec.type, + uid: generate$6('multiple-toolbar-item'), + cyclicKeying: false, + initGroups: [], + providers: spec.providers, + onEscape: () => { + spec.onEscape(); + return Optional.some(true); + } + }), + setupItem: (_mToolbar, tc, data, _index) => { + Toolbar.setGroups(tc, data); + }, + shell: true + }) + }, + name: 'multiple-toolbar', + schema: [ + required$1('dom'), + required$1('onEscape') + ] + }); + const partToolbar = partType$1.optional({ + factory: { + sketch: (spec) => { + const renderer = toolbarFactory(spec); + const toolbarSpec = { + type: spec.type, + uid: spec.uid, + onEscape: () => { + spec.onEscape(); + return Optional.some(true); + }, + onToggled: (_comp, state) => spec.onToolbarToggled(state), + cyclicKeying: false, + initGroups: [], + getSink: spec.getSink, + providers: spec.providers, + moreDrawerData: { + lazyToolbar: spec.lazyToolbar, + lazyMoreButton: spec.lazyMoreButton, + lazyHeader: spec.lazyHeader + }, + attributes: spec.attributes + }; + return renderer(toolbarSpec); + } + }, + name: 'toolbar', + schema: [ + required$1('dom'), + required$1('onEscape'), + required$1('getSink') + ] + }); + const partHeader = partType$1.optional({ + factory: { + sketch: renderHeader + }, + name: 'header', + schema: [ + required$1('dom') + ] + }); + const partPromotion = partType$1.optional({ + factory: { + sketch: renderPromotion + }, + name: 'promotion', + schema: [ + required$1('dom'), + required$1('promotionLink') + ] + }); + const partSocket = partType$1.optional({ + // factory: Fun.identity, + name: 'socket', + schema: [ + required$1('dom') + ] + }); + const partSidebar = partType$1.optional({ + factory: { + sketch: renderSidebar + }, + name: 'sidebar', + schema: [ + required$1('dom') + ] + }); + const partThrobber = partType$1.optional({ + factory: { + sketch: renderThrobber + }, + name: 'throbber', + schema: [ + required$1('dom') + ] + }); + const partViewWrapper = partType$1.optional({ + factory: ViewWrapper, + name: 'viewWrapper', + schema: [ + required$1('backstage') + ] + }); + const renderEditorContainer = (spec) => ({ + uid: spec.uid, + dom: { + tag: 'div', + classes: ['tox-editor-container'] + }, + components: spec.components + }); + const partEditorContainer = partType$1.optional({ + factory: { + sketch: renderEditorContainer + }, + name: 'editorContainer', + schema: [] + }); + var OuterContainer = composite({ + name: 'OuterContainer', + factory, + configFields: [ + required$1('dom'), + required$1('behaviours') + ], + partFields: [ + partHeader, + partMenubar, + partToolbar, + partMultipleToolbar, + partSocket, + partSidebar, + partPromotion, + partThrobber, + partViewWrapper, + partEditorContainer + ], + apis: { + getSocket: (apis, comp) => { + return apis.getSocket(comp); + }, + setSidebar: (apis, comp, panelConfigs, showSidebar) => { + apis.setSidebar(comp, panelConfigs, showSidebar); + }, + toggleSidebar: (apis, comp, name) => { + apis.toggleSidebar(comp, name); + }, + whichSidebar: (apis, comp) => { + return apis.whichSidebar(comp); + }, + getHeader: (apis, comp) => { + return apis.getHeader(comp); + }, + getToolbar: (apis, comp) => { + return apis.getToolbar(comp); + }, + setToolbar: (apis, comp, groups) => { + apis.setToolbar(comp, groups); + }, + setToolbars: (apis, comp, toolbars) => { + apis.setToolbars(comp, toolbars); + }, + refreshToolbar: (apis, comp) => { + return apis.refreshToolbar(comp); + }, + toggleToolbarDrawer: (apis, comp) => { + apis.toggleToolbarDrawer(comp); + }, + toggleToolbarDrawerWithoutFocusing: (apis, comp) => { + apis.toggleToolbarDrawerWithoutFocusing(comp); + }, + isToolbarDrawerToggled: (apis, comp) => { + return apis.isToolbarDrawerToggled(comp); + }, + getThrobber: (apis, comp) => { + return apis.getThrobber(comp); + }, + // FIX: Dupe + setMenubar: (apis, comp, menus) => { + apis.setMenubar(comp, menus); + }, + focusMenubar: (apis, comp) => { + apis.focusMenubar(comp); + }, + focusToolbar: (apis, comp) => { + apis.focusToolbar(comp); + }, + setViews: (apis, comp, views) => { + apis.setViews(comp, views); + }, + toggleView: (apis, comp, name) => { + return apis.toggleView(comp, name); + }, + whichView: (apis, comp) => { + return apis.whichView(comp); + }, + } + }); + + const defaultMenubar = 'file edit view insert format tools table help'; + const defaultMenus = { + file: { title: 'File', items: 'newdocument restoredraft | preview | importword exportpdf exportword | export print | deleteallconversations' }, + edit: { title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall | searchreplace' }, + view: { title: 'View', items: 'code suggestededits revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments' }, + insert: { title: 'Insert', items: 'image video link media addcomment pageembed inserttemplate codesample inserttable accordion math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime' }, + format: { title: 'Format', items: 'bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat' }, + tools: { title: 'Tools', items: 'aidialog aishortcuts | spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code typography wordcount addtemplate' }, + table: { title: 'Table', items: 'inserttable | cell row column | advtablesort | tableprops deletetable' }, + help: { title: 'Help', items: 'help' } + }; + const make = (menu, registry, editor) => { + const removedMenuItems = getRemovedMenuItems(editor).split(/[ ,]/); + return { + text: menu.title, + getItems: () => bind$3(menu.items, (i) => { + const itemName = i.toLowerCase(); + if (itemName.trim().length === 0) { + return []; + } + else if (exists(removedMenuItems, (removedMenuItem) => removedMenuItem === itemName)) { + return []; + } + else if (itemName === 'separator' || itemName === '|') { + return [{ + type: 'separator' + }]; + } + else if (registry.menuItems[itemName]) { + return [registry.menuItems[itemName]]; + } + else { + return []; + } + }) + }; + }; + const parseItemsString = (items) => { + return items.split(' '); + }; + const identifyMenus = (editor, registry) => { + const rawMenuData = { ...defaultMenus, ...registry.menus }; + const userDefinedMenus = keys(registry.menus).length > 0; + const menubar = registry.menubar === undefined || registry.menubar === true ? parseItemsString(defaultMenubar) : parseItemsString(registry.menubar === false ? '' : registry.menubar); + const validMenus = filter$2(menubar, (menuName) => { + const isDefaultMenu = has$2(defaultMenus, menuName); + if (userDefinedMenus) { + return isDefaultMenu || get$h(registry.menus, menuName).exists((menu) => has$2(menu, 'items')); + } + else { + return isDefaultMenu; + } + }); + const menus = map$2(validMenus, (menuName) => { + const menuData = rawMenuData[menuName]; + return make({ title: menuData.title, items: parseItemsString(menuData.items) }, registry, editor); + }); + return filter$2(menus, (menu) => { + // Filter out menus that have no items, or only separators + const isNotSeparator = (item) => isString(item) || item.type !== 'separator'; + return menu.getItems().length > 0 && exists(menu.getItems(), isNotSeparator); + }); + }; + + const fireSkinLoaded = (editor) => { + const done = () => { + editor._skinLoaded = true; + fireSkinLoaded$1(editor); + }; + return () => { + if (editor.initialized) { + done(); + } + else { + editor.on('init', done); + } + }; + }; + const fireSkinLoadError = (editor, err) => () => fireSkinLoadError$1(editor, { message: err }); + + const getSkinResourceIdentifier = (editor) => { + const skin = getSkin(editor); + // Use falsy check to cover false, undefined/null and empty string + if (!skin) { + return Optional.none(); + } + else { + return Optional.from(skin); + } + }; + const loadStylesheet = (editor, stylesheetUrl, styleSheetLoader) => { + // Ensure the stylesheet is cleaned up when the editor is destroyed + editor.on('remove', () => styleSheetLoader.unload(stylesheetUrl)); + return styleSheetLoader.load(stylesheetUrl); + }; + const loadRawCss = (editor, key, css, styleSheetLoader) => { + // Ensure the stylesheet is cleaned up when the editor is destroyed + editor.on('remove', () => styleSheetLoader.unloadRawCss(key)); + return styleSheetLoader.loadRawCss(key, css); + }; + const skinIdentifierToResourceKey = (identifier, filename) => 'ui/' + identifier + '/' + filename; + const getResourceValue = (resourceKey) => Optional.from(tinymce.Resource.get(resourceKey)).filter(isString); + const determineCSSDecision = (editor, filenameBase, skinUrl = '') => { + const resourceKey = getSkinResourceIdentifier(editor) + .map((identifier) => skinIdentifierToResourceKey(identifier, `${filenameBase}.css`)); + const resourceValue = resourceKey.bind(getResourceValue); + return lift2(resourceKey, resourceValue, (key, css) => { + return { _kind: 'load-raw', key, css }; + }).getOrThunk(() => { + const suffix = editor.editorManager.suffix; + const skinUiCssUrl = skinUrl + `/${filenameBase}${suffix}.css`; + return { _kind: 'load-stylesheet', url: skinUiCssUrl }; + }); + }; + const loadUiSkins = (editor, skinUrl) => { + const loader = editor.ui.styleSheetLoader; + const decision = determineCSSDecision(editor, 'skin', skinUrl); + switch (decision._kind) { + case 'load-raw': + const { key, css } = decision; + loadRawCss(editor, key, css, loader); + return Promise.resolve(); + case 'load-stylesheet': + const { url } = decision; + return loadStylesheet(editor, url, loader); + default: + return Promise.resolve(); + } + }; + const loadShadowDomUiSkins = (editor, skinUrl) => { + const isInShadowRoot$1 = isInShadowRoot(SugarElement.fromDom(editor.getElement())); + if (!isInShadowRoot$1) { + return Promise.resolve(); + } + else { + const loader = global$9.DOM.styleSheetLoader; + const decision = determineCSSDecision(editor, 'skin.shadowdom', skinUrl); + switch (decision._kind) { + case 'load-raw': + const { key, css } = decision; + loadRawCss(editor, key, css, loader); + return Promise.resolve(); + case 'load-stylesheet': + const { url } = decision; + return loadStylesheet(editor, url, loader); + default: + return Promise.resolve(); + } + } + }; + const loadUiContentCSS = (editor, isInline, skinUrl) => { + const filenameBase = isInline ? 'content.inline' : 'content'; + const decision = determineCSSDecision(editor, filenameBase, skinUrl); + switch (decision._kind) { + case 'load-raw': + const { key, css } = decision; + if (isInline) { + loadRawCss(editor, key, css, editor.ui.styleSheetLoader); + } + else { + // Need to wait until the iframe is in the DOM before trying to load + // the style into the iframe document + editor.on('PostRender', () => { + loadRawCss(editor, key, css, editor.dom.styleSheetLoader); + }); + } + return Promise.resolve(); + case 'load-stylesheet': + const { url } = decision; + if (skinUrl) { + editor.contentCSS.push(url); + } + return Promise.resolve(); + default: + return Promise.resolve(); + } + }; + const loadUrlSkin = async (isInline, editor) => { + const skinUrl = getSkinUrl(editor); + await loadUiContentCSS(editor, isInline, skinUrl); + // In Modern Inline, this is explicitly called in editor.on('focus', ...) as well as in render(). + // Seems to work without, but adding a note in case things break later + if (!isSkinDisabled(editor) && isString(skinUrl)) { + return Promise.all([ + loadUiSkins(editor, skinUrl), + loadShadowDomUiSkins(editor, skinUrl) + ]).then(); + } + }; + const loadSkin = (isInline, editor) => { + return loadUrlSkin(isInline, editor).then(fireSkinLoaded(editor), fireSkinLoadError(editor, 'Skin could not be loaded')); + }; + const iframe = curry(loadSkin, false); + const inline = curry(loadSkin, true); + + const getButtonApi = (component) => ({ + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state), + setText: (text) => emitWith(component, updateMenuText, { + text + }), + setIcon: (icon) => emitWith(component, updateMenuIcon, { + icon + }) + }); + const getToggleApi = (component) => ({ + setActive: (state) => { + Toggling.set(component, state); + }, + isActive: () => Toggling.isOn(component), + isEnabled: () => !Disabling.isDisabled(component), + setEnabled: (state) => Disabling.set(component, !state), + setText: (text) => emitWith(component, updateMenuText, { + text + }), + setIcon: (icon) => emitWith(component, updateMenuIcon, { + icon + }) + }); + const getTooltipAttributes = (tooltip, providersBackstage) => tooltip.map((tooltip) => ({ + 'aria-label': providersBackstage.translate(tooltip), + })).getOr({}); + const focusButtonEvent = generate$6('focus-button'); + const renderCommonStructure = (optIcon, optText, tooltip, behaviours, providersBackstage, context, btnName) => { + const optMemDisplayText = optText.map((text) => record(renderLabel$1(text, "tox-tbtn" /* ToolbarButtonClasses.Button */, providersBackstage))); + const optMemDisplayIcon = optIcon.map((icon) => record(renderReplaceableIconFromPack(icon, providersBackstage.icons))); + return { + dom: { + tag: 'button', + classes: ["tox-tbtn" /* ToolbarButtonClasses.Button */].concat(optText.isSome() ? ["tox-tbtn--select" /* ToolbarButtonClasses.MatchWidth */] : []), + attributes: { + ...getTooltipAttributes(tooltip, providersBackstage), + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}) + } + }, + components: componentRenderPipeline([ + optMemDisplayIcon.map((mem) => mem.asSpec()), + optMemDisplayText.map((mem) => mem.asSpec()), + ]), + eventOrder: { + [mousedown()]: [ + 'focusing', + 'alloy.base.behaviour', + commonButtonDisplayEvent + ], + [attachedToDom()]: [commonButtonDisplayEvent, 'toolbar-group-button-events'], + [detachedFromDom()]: [commonButtonDisplayEvent, 'toolbar-group-button-events', 'tooltipping'] + }, + buttonBehaviours: derive$1([ + DisablingConfigs.toolbarButton(() => providersBackstage.checkUiComponentContext(context).shouldDisable), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(context)), + config(commonButtonDisplayEvent, [ + runOnAttached((comp, _se) => forceInitialSize(comp)), + run$1(updateMenuText, (comp, se) => { + optMemDisplayText.bind((mem) => mem.getOpt(comp)).each((displayText) => { + Replacing.set(displayText, [text$2(providersBackstage.translate(se.event.text))]); + }); + }), + run$1(updateMenuIcon, (comp, se) => { + optMemDisplayIcon.bind((mem) => mem.getOpt(comp)).each((displayIcon) => { + Replacing.set(displayIcon, [renderReplaceableIconFromPack(se.event.icon, providersBackstage.icons)]); + }); + }), + run$1(mousedown(), (button, se) => { + se.event.prevent(); + emit(button, focusButtonEvent); + }) + ]) + ].concat(behaviours.getOr([]))) + }; + }; + const renderFloatingToolbarButton = (spec, backstage, identifyButtons, attributes, btnName) => { + const sharedBackstage = backstage.shared; + const editorOffCell = Cell(noop); + const specialisation = { + toolbarButtonBehaviours: [], + getApi: getButtonApi, + onSetup: spec.onSetup + }; + const behaviours = [ + config('toolbar-group-button-events', [ + onControlAttached(specialisation, editorOffCell), + onControlDetached(specialisation, editorOffCell) + ]), + ...(spec.tooltip.map((t) => Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ + tooltipText: backstage.shared.providers.translate(t), + })))).toArray() + ]; + return FloatingToolbarButton.sketch({ + lazySink: sharedBackstage.getSink, + fetch: () => Future.nu((resolve) => { + resolve(map$2(identifyButtons(spec.items), renderToolbarGroup)); + }), + markers: { + toggledClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */ + }, + parts: { + button: renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.some(behaviours), sharedBackstage.providers, spec.context, btnName), + toolbar: { + dom: { + tag: 'div', + classes: ['tox-toolbar__overflow'], + attributes + } + } + } + }); + }; + const renderCommonToolbarButton = (spec, specialisation, providersBackstage, btnName) => { + const editorOffCell = Cell(noop); + const structure = renderCommonStructure(spec.icon, spec.text, spec.tooltip, Optional.none(), providersBackstage, spec.context, btnName); + return Button.sketch({ + dom: structure.dom, + components: structure.components, + eventOrder: toolbarButtonEventOrder, + buttonBehaviours: { + ...derive$1([ + config('toolbar-button-events', [ + onToolbarButtonExecute({ + onAction: spec.onAction, + getApi: specialisation.getApi + }), + onControlAttached(specialisation, editorOffCell), + onControlDetached(specialisation, editorOffCell) + ]), + ...(spec.tooltip.map((t) => Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate(t) + spec.shortcut.map((shortcut) => ` (${convertText(shortcut)})`).getOr(''), + })))).toArray(), + // Enable toolbar buttons by default + DisablingConfigs.toolbarButton(() => !spec.enabled || providersBackstage.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => providersBackstage.checkUiComponentContext(spec.context)) + ].concat(specialisation.toolbarButtonBehaviours)), + // Here we add the commonButtonDisplayEvent behaviour from the structure so we can listen + // to updateMenuIcon and updateMenuText events and run the defined callbacks as they are + // defined in the renderCommonStructure function and fix the size of the button onAttached. + [commonButtonDisplayEvent]: structure.buttonBehaviours?.[commonButtonDisplayEvent], + } + }); + }; + const renderToolbarButton = (spec, providersBackstage, btnName) => renderToolbarButtonWith(spec, providersBackstage, [], btnName); + const renderToolbarButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, { + toolbarButtonBehaviours: (bonusEvents.length > 0 ? [ + // TODO: May have to pass through eventOrder if events start clashing + config('toolbarButtonWith', bonusEvents) + ] : []), + getApi: getButtonApi, + onSetup: spec.onSetup + }, providersBackstage, btnName); + const renderToolbarToggleButton = (spec, providersBackstage, btnName) => renderToolbarToggleButtonWith(spec, providersBackstage, [], btnName); + const renderToolbarToggleButtonWith = (spec, providersBackstage, bonusEvents, btnName) => renderCommonToolbarButton(spec, { + toolbarButtonBehaviours: [ + Replacing.config({}), + Toggling.config({ toggleClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */, aria: { mode: 'pressed' }, toggleOnExecute: false }) + ].concat(bonusEvents.length > 0 ? [ + // TODO: May have to pass through eventOrder if events start clashing + config('toolbarToggleButtonWith', bonusEvents) + ] : []), + getApi: getToggleApi, + onSetup: spec.onSetup + }, providersBackstage, btnName); + const fetchChoices = (getApi, spec, providersBackstage) => (comp) => Future.nu((callback) => spec.fetch(callback)) + .map((items) => Optional.from(createTieredDataFrom(deepMerge(createPartialChoiceMenu(generate$6('menu-value'), items, (value) => { + spec.onItemAction(getApi(comp), value); + }, spec.columns, spec.presets, ItemResponse$1.CLOSE_ON_EXECUTE, spec.select.getOr(never), providersBackstage), { + movement: deriveMenuMovement(spec.columns, spec.presets), + menuBehaviours: SimpleBehaviours.unnamedEvents(spec.columns !== 'auto' ? [] : [ + runOnAttached((comp, _se) => { + detectSize(comp, 4, classForPreset(spec.presets)).each(({ numRows, numColumns }) => { + Keying.setGridSize(comp, numRows, numColumns); + }); + }) + ]) + })))); + const makeSplitButtonApi = (tooltipString, sharedBackstage, spec) => (component) => { + const system = component.getSystem(); + const element = component.element; + const getComponents = () => { + const isChevron = has(element, 'tox-split-button__chevron'); + const mainOpt = isChevron ? + prevSibling(element).bind((el) => system.getByDom(el).toOptional()) : + Optional.some(component); + const chevronOpt = isChevron ? + Optional.some(component) : + nextSibling(element).bind((el) => system.getByDom(el).toOptional().filter((comp) => has(comp.element, 'tox-split-button__chevron'))); + return { mainOpt, chevronOpt }; + }; + const applyBoth = (f) => { + const { mainOpt, chevronOpt } = getComponents(); + mainOpt.each(f); + chevronOpt.each(f); + }; + return { + isEnabled: () => { + const { mainOpt } = getComponents(); + return mainOpt.exists((c) => !Disabling.isDisabled(c)); + }, + setEnabled: (state) => applyBoth((c) => Disabling.set(c, !state)), + setText: (text) => { + const { mainOpt } = getComponents(); + mainOpt.each((c) => emitWith(c, updateMenuText, { text })); + }, + setIcon: (icon) => { + const { mainOpt } = getComponents(); + mainOpt.each((c) => emitWith(c, updateMenuIcon, { icon })); + }, + setIconFill: (id, value) => applyBoth((c) => { + descendant(c.element, `svg path[class="${id}"], rect[class="${id}"]`).each((underlinePath) => { + set$9(underlinePath, 'fill', value); + }); + }), + isActive: () => { + const { mainOpt } = getComponents(); + return mainOpt.exists((c) => Toggling.isOn(c)); + }, + setActive: (state) => { + const { mainOpt } = getComponents(); + mainOpt.each((c) => Toggling.set(c, state)); + }, + setTooltip: (tooltip) => { + tooltipString.set(tooltip); + const { mainOpt, chevronOpt } = getComponents(); + mainOpt.each((c) => set$9(c.element, 'aria-label', sharedBackstage.providers.translate(tooltip))); + // For chevron, use the explicit chevronTooltip if provided, otherwise fall back to default behavior + const chevronTooltipText = spec.chevronTooltip + .map((chevronTooltip) => sharedBackstage.providers.translate(chevronTooltip)) + .getOr(sharedBackstage.providers.translate(tooltip)); + chevronOpt.each((c) => set$9(c.element, 'aria-label', chevronTooltipText)); + } + }; + }; + const renderSplitButton = (spec, sharedBackstage, btnName) => { + const editorOffCell = Cell(noop); + const tooltipString = Cell(spec.tooltip.getOr('')); + const getApi = makeSplitButtonApi(tooltipString, sharedBackstage, spec); + const menuId = generate$6('tox-split-menu'); + const expandedCell = Cell(false); + const getAriaAttributes = () => ({ + 'aria-haspopup': 'menu', + 'aria-expanded': String(expandedCell.get()), + 'aria-controls': menuId + }); + // Helper to get ARIA label for the main button + const getMainButtonAriaLabel = () => { + return spec.tooltip.map((tooltip) => sharedBackstage.providers.translate(tooltip)) + .getOr(sharedBackstage.providers.translate('Text color')); + }; + // Helper to get ARIA label and tooltip for the chevron/dropdown button + const getChevronTooltip = () => { + return spec.chevronTooltip + .map((tooltip) => sharedBackstage.providers.translate(tooltip)) + .getOrThunk(() => { + const mainLabel = getMainButtonAriaLabel(); + return sharedBackstage.providers.translate(['{0} menu', mainLabel]); + }); + }; + const updateAriaExpanded = (expanded, comp) => { + expandedCell.set(expanded); + set$9(comp.element, 'aria-expanded', String(expanded)); + }; + const arrow = Dropdown.sketch({ + dom: { + tag: 'button', + classes: ["tox-tbtn" /* ToolbarButtonClasses.Button */, 'tox-split-button__chevron'], + innerHtml: get('chevron-down', sharedBackstage.providers.icons), + attributes: { + 'aria-label': getChevronTooltip(), + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName + '-chevron' } : {}), + ...getAriaAttributes() + } + }, + components: [], + toggleClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */, + dropdownBehaviours: derive$1([ + config('split-dropdown-events', [ + runOnAttached((comp, _se) => forceInitialSize(comp)), + onControlAttached({ getApi, onSetup: spec.onSetup }, editorOffCell), + run$1('alloy-dropdown-open', (comp) => updateAriaExpanded(true, comp)), + run$1('alloy-dropdown-close', (comp) => updateAriaExpanded(false, comp)), + ]), + DisablingConfigs.toolbarButton(() => sharedBackstage.providers.checkUiComponentContext(spec.context).shouldDisable), + toggleOnReceive(() => sharedBackstage.providers.checkUiComponentContext(spec.context)), + Unselecting.config({}), + Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ + tooltipText: getChevronTooltip(), + onShow: (comp) => { + if (tooltipString.get() !== spec.tooltip.getOr('')) { + const chevronTooltipText = spec.chevronTooltip + .map((chevronTooltip) => sharedBackstage.providers.translate(chevronTooltip)) + .getOr(`${sharedBackstage.providers.translate(tooltipString.get())} menu`); + Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: chevronTooltipText })); + } + } + })) + ]), + lazySink: sharedBackstage.getSink, + fetch: fetchChoices(getApi, spec, sharedBackstage.providers), + getHotspot: (comp) => prevSibling(comp.element).bind((el) => comp.getSystem().getByDom(el).toOptional()), + onOpen: (_anchor, _comp, menu) => { + Highlighting.highlightBy(menu, (item) => has(item.element, 'tox-collection__item--active')); + Highlighting.getHighlighted(menu).each(Keying.focusIn); + }, + parts: { + menu: { + ...part(false, spec.columns, spec.presets), + dom: { + ...part(false, spec.columns, spec.presets).dom, + tag: 'div', + attributes: { + id: menuId + } + } + } + } + }); + const structure = renderCommonStructure(spec.icon, spec.text, Optional.none(), Optional.some([ + Toggling.config({ + toggleClass: "tox-tbtn--enabled" /* ToolbarButtonClasses.Ticked */, + aria: spec.presets === 'color' ? { mode: 'none' } : { mode: 'pressed' }, + toggleOnExecute: false + }), + ...(spec.tooltip.isSome() ? [ + Tooltipping.config(sharedBackstage.providers.tooltips.getConfig({ + tooltipText: sharedBackstage.providers.translate(spec.tooltip.getOr('')), + onShow: (comp) => { + if (tooltipString.get() !== spec.tooltip.getOr('')) { + const translated = sharedBackstage.providers.translate(tooltipString.get()); + Tooltipping.setComponents(comp, sharedBackstage.providers.tooltips.getComponents({ tooltipText: translated })); + } + } + })) + ] : []) + ]), sharedBackstage.providers, spec.context, btnName); + const mainButton = Button.sketch({ + dom: { + ...structure.dom, + classes: [ + "tox-tbtn" /* ToolbarButtonClasses.Button */, + 'tox-split-button__main' + ].concat(spec.text.isSome() ? ["tox-tbtn--select" /* ToolbarButtonClasses.MatchWidth */] : []), + attributes: { + 'aria-label': getMainButtonAriaLabel(), + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}) + } + }, + components: structure.components, + eventOrder: structure.eventOrder, + buttonBehaviours: structure.buttonBehaviours, + action: (button) => { + if (spec.onAction) { + const api = getApi(button); + if (api.isEnabled()) { + spec.onAction(api); + } + } + } + }); + return [mainButton, arrow]; + }; + + const contextFormInputSelector = '.tox-toolbar-slider__input,.tox-toolbar-textfield'; + const focusIn = (contextbar) => { + InlineView.getContent(contextbar).each((comp) => { + descendant(comp.element, contextFormInputSelector).fold(() => Keying.focusIn(comp), focus$4); + }); + }; + // TODO: Is this really the best way to move focus out of the input when it gets disabled #TINY-11527 + const focusParent = (comp) => search(comp.element).each((focus) => { + ancestor$1(focus, '[tabindex="-1"]').each((parent) => { + focus$4(parent); + }); + }); + + const forwardSlideEvent = generate$6('forward-slide'); + const backSlideEvent = generate$6('backward-slide'); + const changeSlideEvent = generate$6('change-slide-event'); + const resizingClass = 'tox-pop--resizing'; + const renderContextToolbar = (spec) => { + const stack = Cell([]); + const sketch = InlineView.sketch({ + dom: { + tag: 'div', + classes: ['tox-pop'] + }, + fireDismissalEventInstead: { + event: 'doNotDismissYet' + }, + onShow: (comp) => { + stack.set([]); + InlineView.getContent(comp).each((c) => { + remove$6(c.element, 'visibility'); + }); + remove$3(comp.element, resizingClass); + remove$6(comp.element, 'width'); + }, + onHide: () => { + stack.set([]); + spec.onHide(); + }, + inlineBehaviours: derive$1([ + config('context-toolbar-events', [ + runOnSource(transitionend(), (comp, se) => { + if (se.event.raw.propertyName === 'width') { + remove$3(comp.element, resizingClass); + remove$6(comp.element, 'width'); + } + }), + run$1(changeSlideEvent, (comp, se) => { + const elem = comp.element; + // If it was partially through a slide, clear that and measure afresh + remove$6(elem, 'width'); + const currentWidth = get$c(elem); + const hadFocus = search(comp.element).isSome(); + // Remove these so that we can property measure the width of the context form content + remove$6(elem, 'left'); + remove$6(elem, 'right'); + remove$6(elem, 'max-width'); + InlineView.setContent(comp, se.event.contents); + add$2(elem, resizingClass); + const newWidth = get$c(elem); + // Reposition without transition to avoid it from being animated from previous position + set$7(elem, 'transition', 'none'); + InlineView.reposition(comp); + remove$6(elem, 'transition'); + set$7(elem, 'width', currentWidth + 'px'); + se.event.focus.fold(() => { + if (hadFocus) { + focusIn(comp); + } + }, (f) => { + active$1(getRootNode(comp.element)).fold(() => focus$4(f), (active) => { + // We need this extra check since if the focus is aleady on the iframe we don't want to call focus on it again since that closes the context toolbar + if (!eq(active, f)) { + spec.focusElement(f); + } + }); + }); + setTimeout(() => { + set$7(comp.element, 'width', newWidth + 'px'); + }, 0); + }), + run$1(forwardSlideEvent, (comp, se) => { + InlineView.getContent(comp).each((oldContents) => { + stack.set(stack.get().concat([ + { + bar: oldContents, + focus: active$1(getRootNode(comp.element)) + } + ])); + }); + emitWith(comp, changeSlideEvent, { + contents: se.event.forwardContents, + focus: Optional.none() + }); + }), + run$1(backSlideEvent, (comp, _se) => { + spec.onBack(); + last$1(stack.get()).each((last) => { + stack.set(stack.get().slice(0, stack.get().length - 1)); + emitWith(comp, changeSlideEvent, { + // Because we are using premade, we should have access to the same element + // to give focus (although it isn't working) + contents: premade(last.bar), + focus: last.focus + }); + }); + }) + ]), + Keying.config({ + mode: 'special', + onEscape: (comp) => last$1(stack.get()).fold(() => + // Escape just focuses the content. It no longer closes the toolbar. + spec.onEscape(), (_) => { + emit(comp, backSlideEvent); + return Optional.some(true); + }) + }) + ]), + lazySink: () => Result.value(spec.sink) + }); + return { + sketch, + inSubtoolbar: () => stack.get().length > 0 + }; + }; + + const createNavigateBackButton = (editor, backstage) => { + const bridged = getOrDie(createToolbarButton({ + type: 'button', + icon: 'chevron-left', + tooltip: 'Back', + onAction: noop + })); + return renderToolbarButtonWith(bridged, backstage.shared.providers, [ + run$1(internalToolbarButtonExecute, (comp) => { + emit(comp, backSlideEvent); + }) + ]); + }; + + const makeTooltipText = (editor, labelWithPlaceholder, value) => isEmpty(value) ? editor.translate(labelWithPlaceholder) : editor.translate([labelWithPlaceholder, editor.translate(value)]); + + const generateSelectItems = (backstage, spec) => { + const generateItem = (rawItem, response, invalid, value) => { + const translatedText = backstage.shared.providers.translate(rawItem.title); + if (rawItem.type === 'separator') { + return Optional.some({ + type: 'separator', + text: translatedText + }); + } + else if (rawItem.type === 'submenu') { + const items = bind$3(rawItem.getStyleItems(), (si) => validate(si, response, value)); + if (response === 0 /* IrrelevantStyleItemResponse.Hide */ && items.length <= 0) { + return Optional.none(); + } + else { + return Optional.some({ + type: 'nestedmenuitem', + text: translatedText, + enabled: items.length > 0, + getSubmenuItems: () => bind$3(rawItem.getStyleItems(), (si) => validate(si, response, value)) + }); + } + } + else { + return Optional.some({ + // ONLY TOGGLEMENUITEMS HANDLE STYLE META. + // See ToggleMenuItem and ItemStructure for how it's handled. + // If this type ever changes, we'll need to change that too + type: 'togglemenuitem', + text: translatedText, + icon: rawItem.icon, + active: rawItem.isSelected(value), + enabled: !invalid, + onAction: spec.onAction(rawItem), + ...rawItem.getStylePreview().fold(() => ({}), (preview) => ({ meta: { style: preview } })) + }); + } + }; + const validate = (item, response, value) => { + const invalid = item.type === 'formatter' && spec.isInvalid(item); + // If we are making them disappear based on some setting + if (response === 0 /* IrrelevantStyleItemResponse.Hide */) { + return invalid ? [] : generateItem(item, response, false, value).toArray(); + } + else { + return generateItem(item, response, invalid, value).toArray(); + } + }; + const validateItems = (preItems) => { + const value = spec.getCurrentValue(); + const response = spec.shouldHide ? 0 /* IrrelevantStyleItemResponse.Hide */ : 1 /* IrrelevantStyleItemResponse.Disable */; + return bind$3(preItems, (item) => validate(item, response, value)); + }; + const getFetch = (backstage, getStyleItems) => (comp, callback) => { + const preItems = getStyleItems(); + const items = validateItems(preItems); + const menu = build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, { + isHorizontalMenu: false, + search: Optional.none() + }); + callback(menu); + }; + return { + validateItems, + getFetch + }; + }; + const createMenuItems = (backstage, spec) => { + const dataset = spec.dataset; // needs to be a var for tsc to understand the ternary + const getStyleItems = dataset.type === 'basic' ? + () => map$2(dataset.data, (d) => processBasic(d, spec.isSelectedFor, spec.getPreviewFor)) : + dataset.getData; + return { + items: generateSelectItems(backstage, spec), + getStyleItems + }; + }; + const createSelectButton = (editor, backstage, spec, getTooltip, textUpdateEventName, btnName) => { + const { items, getStyleItems } = createMenuItems(backstage, spec); + const tooltipString = Cell(spec.tooltip); + const getApi = (comp) => ({ + getComponent: constant$1(comp), + setTooltip: (tooltip) => { + const translatedTooltip = backstage.shared.providers.translate(tooltip); + set$9(comp.element, 'aria-label', translatedTooltip); + tooltipString.set(tooltip); + } + }); + // Set the initial text when the component is attached and then update on node changes + const onSetup = (api) => { + const handler = (e) => api.setTooltip(makeTooltipText(editor, getTooltip(e.value), e.value)); + editor.on(textUpdateEventName, handler); + return composeUnbinders(onSetupEvent(editor, 'NodeChange', (api) => { + const comp = api.getComponent(); + spec.updateText(comp); + Disabling.set(api.getComponent(), (!editor.selection.isEditable() || getStyleItems().length === 0)); + })(api), () => editor.off(textUpdateEventName, handler)); + }; + return renderCommonDropdown({ + context: 'mode:design', + text: spec.icon.isSome() ? Optional.none() : spec.text, + icon: spec.icon, + ariaLabel: Optional.some(spec.tooltip), + tooltip: Optional.none(), // TINY-10474 - Using own tooltip config + role: Optional.none(), + fetch: items.getFetch(backstage, getStyleItems), + onSetup, + getApi, + columns: 1, + presets: 'normal', + classes: spec.icon.isSome() ? [] : ['bespoke'], + dropdownBehaviours: [ + Tooltipping.config({ + ...backstage.shared.providers.tooltips.getConfig({ + tooltipText: backstage.shared.providers.translate(spec.tooltip), + onShow: (comp) => { + if (spec.tooltip !== tooltipString.get()) { + const translatedTooltip = backstage.shared.providers.translate(tooltipString.get()); + Tooltipping.setComponents(comp, backstage.shared.providers.tooltips.getComponents({ tooltipText: translatedTooltip })); + } + } + }), + }) + ] + }, "tox-tbtn" /* ToolbarButtonClasses.Button */, backstage.shared, btnName); + }; + + const process = (rawFormats) => map$2(rawFormats, (item) => { + let title = item, format = item; + // Allow text=value block formats + const values = item.split('='); + if (values.length > 1) { + title = values[0]; + format = values[1]; + } + return { title, format }; + }); + const buildBasicStaticDataset = (data) => ({ + type: 'basic', + data + }); + var Delimiter; + (function (Delimiter) { + Delimiter[Delimiter["SemiColon"] = 0] = "SemiColon"; + Delimiter[Delimiter["Space"] = 1] = "Space"; + })(Delimiter || (Delimiter = {})); + const split = (rawFormats, delimiter) => { + if (delimiter === Delimiter.SemiColon) { + return rawFormats.replace(/;$/, '').split(';'); + } + else { + return rawFormats.split(' '); + } + }; + const buildBasicSettingsDataset = (editor, settingName, delimiter) => { + // eslint-disable-next-line @tinymce/no-direct-editor-options + const rawFormats = editor.options.get(settingName); + const data = process(split(rawFormats, delimiter)); + return { + type: 'basic', + data + }; + }; + + const menuTitle$4 = 'Align'; + const getTooltipPlaceholder$4 = constant$1('Alignment {0}'); + const fallbackAlignment = 'left'; + const alignMenuItems = [ + { title: 'Left', icon: 'align-left', format: 'alignleft', command: 'JustifyLeft' }, + { title: 'Center', icon: 'align-center', format: 'aligncenter', command: 'JustifyCenter' }, + { title: 'Right', icon: 'align-right', format: 'alignright', command: 'JustifyRight' }, + { title: 'Justify', icon: 'align-justify', format: 'alignjustify', command: 'JustifyFull' } + ]; + const getSpec$4 = (editor) => { + const getMatchingValue = () => find$5(alignMenuItems, (item) => editor.formatter.match(item.format)); + const isSelectedFor = (format) => () => editor.formatter.match(format); + const getPreviewFor = (_format) => Optional.none; + const updateSelectMenuIcon = (comp) => { + const match = getMatchingValue(); + const alignment = match.fold(constant$1(fallbackAlignment), (item) => item.title.toLowerCase()); + emitWith(comp, updateMenuIcon, { + icon: `align-${alignment}` + }); + fireAlignTextUpdate(editor, { value: alignment }); + }; + const dataset = buildBasicStaticDataset(alignMenuItems); + const onAction = (rawItem) => () => find$5(alignMenuItems, (item) => item.format === rawItem.format) + .each((item) => editor.execCommand(item.command)); + return { + tooltip: makeTooltipText(editor, getTooltipPlaceholder$4(), fallbackAlignment), + text: Optional.none(), + icon: Optional.some('align-left'), + isSelectedFor, + getCurrentValue: Optional.none, + getPreviewFor, + onAction, + updateText: updateSelectMenuIcon, + dataset, + shouldHide: false, + isInvalid: (item) => !editor.formatter.canApply(item.format) + }; + }; + const createAlignButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$4(editor), getTooltipPlaceholder$4, 'AlignTextUpdate', 'align'); + const createAlignMenu = (editor, backstage) => { + const menuItems = createMenuItems(backstage, getSpec$4(editor)); + editor.ui.registry.addNestedMenuItem('align', { + text: backstage.shared.providers.translate(menuTitle$4), + onSetup: onSetupEditableToggle(editor), + getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems()) + }); + }; + + const findNearest = (editor, getStyles) => { + const styles = getStyles(); + const formats = map$2(styles, (style) => style.format); + return Optional.from(editor.formatter.closest(formats)).bind((fmt) => find$5(styles, (data) => data.format === fmt)); + }; + + const menuTitle$3 = 'Blocks'; + const getTooltipPlaceholder$3 = constant$1('Block {0}'); + const fallbackFormat = 'Paragraph'; + const getSpec$3 = (editor) => { + const isSelectedFor = (format) => () => editor.formatter.match(format); + const getPreviewFor = (format) => () => { + const fmt = editor.formatter.get(format); + if (fmt) { + return Optional.some({ + tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div', + styles: editor.dom.parseStyle(editor.formatter.getCssText(format)) + }); + } + else { + return Optional.none(); + } + }; + const updateSelectMenuText = (comp) => { + const detectedFormat = findNearest(editor, () => dataset.data); + const text = detectedFormat.fold(constant$1(fallbackFormat), (fmt) => fmt.title); + emitWith(comp, updateMenuText, { + text + }); + fireBlocksTextUpdate(editor, { value: text }); + }; + const dataset = buildBasicSettingsDataset(editor, 'block_formats', Delimiter.SemiColon); + return { + tooltip: makeTooltipText(editor, getTooltipPlaceholder$3(), fallbackFormat), + text: Optional.some(fallbackFormat), + icon: Optional.none(), + isSelectedFor, + getCurrentValue: Optional.none, + getPreviewFor, + onAction: onActionToggleFormat$1(editor), + updateText: updateSelectMenuText, + dataset, + shouldHide: false, + isInvalid: (item) => !editor.formatter.canApply(item.format) + }; + }; + const createBlocksButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$3(editor), getTooltipPlaceholder$3, 'BlocksTextUpdate', 'blocks'); + // FIX: Test this! + const createBlocksMenu = (editor, backstage) => { + const menuItems = createMenuItems(backstage, getSpec$3(editor)); + editor.ui.registry.addNestedMenuItem('blocks', { + text: menuTitle$3, + onSetup: onSetupEditableToggle(editor), + getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems()) + }); + }; + + const menuTitle$2 = 'Fonts'; + const getTooltipPlaceholder$2 = constant$1('Font {0}'); + const systemFont = 'System Font'; + // A list of fonts that must be in a font family for the font to be recognised as the system stack + // Note: Don't include 'BlinkMacSystemFont', as Chrome on Mac converts it to different names + // The system font stack will be similar to the following. (Note: each has minor variants) + // Oxide: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + // Bootstrap: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + // Wordpress: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + const systemStackFonts = ['-apple-system', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'sans-serif']; + // Split the fonts into an array and strip away any start/end quotes + const splitFonts = (fontFamily) => { + const fonts = fontFamily.split(/\s*,\s*/); + return map$2(fonts, (font) => font.replace(/^['"]+|['"]+$/g, '')); + }; + const matchesStack = (fonts, stack) => stack.length > 0 && forall(stack, (font) => fonts.indexOf(font.toLowerCase()) > -1); + const isSystemFontStack = (fontFamily, userStack) => { + if (fontFamily.indexOf('-apple-system') === 0 || userStack.length > 0) { + const fonts = splitFonts(fontFamily.toLowerCase()); + return matchesStack(fonts, systemStackFonts) || matchesStack(fonts, userStack); + } + else { + return false; + } + }; + const getSpec$2 = (editor) => { + const getMatchingValue = () => { + const getFirstFont = (fontFamily) => fontFamily ? splitFonts(fontFamily)[0] : ''; + const fontFamily = editor.queryCommandValue('FontName'); + const items = dataset.data; + const font = fontFamily ? fontFamily.toLowerCase() : ''; + const userStack = getDefaultFontStack(editor); + const matchOpt = find$5(items, (item) => { + const format = item.format; + return (format.toLowerCase() === font) || (getFirstFont(format).toLowerCase() === getFirstFont(font).toLowerCase()); + }).orThunk(() => { + return someIf(isSystemFontStack(font, userStack), { + title: systemFont, + format: font + }); + }); + return { matchOpt, font: fontFamily }; + }; + const isSelectedFor = (item) => (valueOpt) => valueOpt.exists((value) => value.format === item); + const getCurrentValue = () => { + const { matchOpt } = getMatchingValue(); + return matchOpt; + }; + const getPreviewFor = (item) => () => Optional.some({ + tag: 'div', + styles: item.indexOf('dings') === -1 ? { 'font-family': item } : {} + }); + const onAction = (rawItem) => () => { + editor.undoManager.transact(() => { + editor.focus(); + editor.execCommand('FontName', false, rawItem.format); + }); + }; + const updateSelectMenuText = (comp) => { + const { matchOpt, font } = getMatchingValue(); + const text = matchOpt.fold(constant$1(font), (item) => item.title); + emitWith(comp, updateMenuText, { + text + }); + fireFontFamilyTextUpdate(editor, { value: text }); + }; + const dataset = buildBasicSettingsDataset(editor, 'font_family_formats', Delimiter.SemiColon); + return { + tooltip: makeTooltipText(editor, getTooltipPlaceholder$2(), systemFont), + text: Optional.some(systemFont), + icon: Optional.none(), + isSelectedFor, + getCurrentValue, + getPreviewFor, + onAction, + updateText: updateSelectMenuText, + dataset, + shouldHide: false, + isInvalid: never + }; + }; + const createFontFamilyButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$2(editor), getTooltipPlaceholder$2, 'FontFamilyTextUpdate', 'fontfamily'); + // TODO: Test this! + const createFontFamilyMenu = (editor, backstage) => { + const menuItems = createMenuItems(backstage, getSpec$2(editor)); + editor.ui.registry.addNestedMenuItem('fontfamily', { + text: backstage.shared.providers.translate(menuTitle$2), + onSetup: onSetupEditableToggle(editor), + getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems()) + }); + }; + + var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK'); + + const createBespokeNumberInput = (editor, backstage, spec, btnName) => { + let currentComp = Optional.none(); + const getValueFromCurrentComp = (comp) => comp.map((alloyComp) => Representing.getValue(alloyComp)).getOr(''); + const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', (api) => { + const comp = api.getComponent(); + currentComp = Optional.some(comp); + spec.updateInputValue(comp); + Disabling.set(comp, !editor.selection.isEditable() || isDisabled(editor)); + }); + const getApi = (comp) => ({ getComponent: constant$1(comp) }); + const editorOffCell = Cell(noop); + const customEvents = generate$6('custom-number-input-events'); + const changeValue = (f, fromInput, focusBack) => { + const text = getValueFromCurrentComp(currentComp); + const newValue = spec.getNewValue(text, f); + const lenghtDelta = text.length - `${newValue}`.length; + const oldStart = currentComp.map((comp) => comp.element.dom.selectionStart - lenghtDelta); + const oldEnd = currentComp.map((comp) => comp.element.dom.selectionEnd - lenghtDelta); + spec.onAction(newValue, focusBack); + currentComp.each((comp) => { + Representing.setValue(comp, newValue); + if (fromInput) { + oldStart.each((oldStart) => comp.element.dom.selectionStart = oldStart); + oldEnd.each((oldEnd) => comp.element.dom.selectionEnd = oldEnd); + } + }); + }; + const decrease = (fromInput, focusBack) => changeValue((n, s) => n - s, fromInput, focusBack); + const increase = (fromInput, focusBack) => changeValue((n, s) => n + s, fromInput, focusBack); + const goToParent = (comp) => parentElement(comp.element).fold(Optional.none, (parent) => { + focus$4(parent); + return Optional.some(true); + }); + const focusInput = (comp) => { + if (hasFocus(comp.element)) { + firstChild(comp.element).each((input) => focus$4(input)); + return Optional.some(true); + } + else { + return Optional.none(); + } + }; + const makeStepperButton = (action, title, tooltip, classes) => { + const editorOffCellStepButton = Cell(noop); + const translatedTooltip = backstage.shared.providers.translate(tooltip); + const altExecuting = generate$6('altExecuting'); + const onSetup = onSetupEvent(editor, 'NodeChange SwitchMode DisabledStateChange', (api) => { + Disabling.set(api.getComponent(), !editor.selection.isEditable() || isDisabled(editor)); + }); + const onClick = (comp) => { + if (!Disabling.isDisabled(comp)) { + action(true); + } + }; + return Button.sketch({ + dom: { + tag: 'button', + attributes: { + 'aria-label': translatedTooltip, + 'data-mce-name': title + }, + classes: classes.concat(title) + }, + components: [ + renderIconFromPack$1(title, backstage.shared.providers.icons) + ], + buttonBehaviours: derive$1([ + Disabling.config({}), + Tooltipping.config(backstage.shared.providers.tooltips.getConfig({ + tooltipText: translatedTooltip + })), + config(altExecuting, [ + onControlAttached({ onSetup, getApi }, editorOffCellStepButton), + onControlDetached({ getApi }, editorOffCellStepButton), + run$1(keydown(), (comp, se) => { + if (se.event.raw.keyCode === global$1.SPACEBAR || se.event.raw.keyCode === global$1.ENTER) { + if (!Disabling.isDisabled(comp)) { + action(false); + } + } + }), + run$1(click(), onClick), + run$1(touchend(), onClick) + ]) + ]), + eventOrder: { + [keydown()]: [altExecuting, 'keying'], + [click()]: [altExecuting, 'alloy.base.behaviour'], + [touchend()]: [altExecuting, 'alloy.base.behaviour'], + [attachedToDom()]: ['alloy.base.behaviour', altExecuting, 'tooltipping'], + [detachedFromDom()]: [altExecuting, 'tooltipping'] + } + }); + }; + const memMinus = record(makeStepperButton((focusBack) => decrease(false, focusBack), 'minus', 'Decrease font size', [])); + const memPlus = record(makeStepperButton((focusBack) => increase(false, focusBack), 'plus', 'Increase font size', [])); + const memInput = record({ + dom: { + tag: 'div', + classes: ['tox-input-wrapper'] + }, + components: [ + Input.sketch({ + inputBehaviours: derive$1([ + Disabling.config({}), + config(customEvents, [ + onControlAttached({ onSetup, getApi }, editorOffCell), + onControlDetached({ getApi }, editorOffCell) + ]), + config('input-update-display-text', [ + run$1(updateMenuText, (comp, se) => { + Representing.setValue(comp, se.event.text); + }), + run$1(focusout(), (comp) => { + spec.onAction(Representing.getValue(comp)); + }), + run$1(change(), (comp) => { + spec.onAction(Representing.getValue(comp)); + }) + ]), + Keying.config({ + mode: 'special', + onEnter: (_comp) => { + changeValue(identity, true, true); + return Optional.some(true); + }, + onEscape: goToParent, + onUp: (_comp) => { + increase(true, false); + return Optional.some(true); + }, + onDown: (_comp) => { + decrease(true, false); + return Optional.some(true); + }, + onLeft: (_comp, se) => { + se.cut(); + return Optional.none(); + }, + onRight: (_comp, se) => { + se.cut(); + return Optional.none(); + } + }) + ]) + }) + ], + behaviours: derive$1([ + Focusing.config({}), + Keying.config({ + mode: 'special', + onEnter: focusInput, + onSpace: focusInput, + onEscape: goToParent + }), + config('input-wrapper-events', [ + run$1(mouseover(), (comp) => { + each$1([memMinus, memPlus], (button) => { + const buttonNode = SugarElement.fromDom(button.get(comp).element.dom); + if (hasFocus(buttonNode)) { + blur$1(buttonNode); + } + }); + }) + ]) + ]) + }); + return { + dom: { + tag: 'div', + classes: ['tox-number-input'], + attributes: { + ...(isNonNullable(btnName) ? { 'data-mce-name': btnName } : {}) + } + }, + components: [ + memMinus.asSpec(), + memInput.asSpec(), + memPlus.asSpec() + ], + behaviours: derive$1([ + Focusing.config({}), + Keying.config({ + mode: 'flow', + focusInside: FocusInsideModes.OnEnterOrSpaceMode, + cycles: false, + selector: 'button, .tox-input-wrapper', + onEscape: (wrapperComp) => { + if (hasFocus(wrapperComp.element)) { + return Optional.none(); + } + else { + focus$4(wrapperComp.element); + return Optional.some(true); + } + }, + }) + ]) + }; + }; + + const menuTitle$1 = 'Font sizes'; + const getTooltipPlaceholder$1 = constant$1('Font size {0}'); + const fallbackFontSize = '12pt'; + // See https://websemantics.uk/articles/font-size-conversion/ for conversions + const legacyFontSizes = { + '8pt': '1', + '10pt': '2', + '12pt': '3', + '14pt': '4', + '18pt': '5', + '24pt': '6', + '36pt': '7' + }; + // Note: 'xx-small', 'x-small' and 'large' are rounded up to nearest whole pt + const keywordFontSizes = { + 'xx-small': '7pt', + 'x-small': '8pt', + 'small': '10pt', + 'medium': '12pt', + 'large': '14pt', + 'x-large': '18pt', + 'xx-large': '24pt' + }; + const round = (number, precision) => { + const factor = Math.pow(10, precision); + return Math.round(number * factor) / factor; + }; + const toPt = (fontSize, precision) => { + if (/[0-9.]+px$/.test(fontSize)) { + // Round to the nearest 0.5 + return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt'; + } + else { + return get$h(keywordFontSizes, fontSize).getOr(fontSize); + } + }; + const toLegacy = (fontSize) => get$h(legacyFontSizes, fontSize).getOr(''); + const getSpec$1 = (editor) => { + const getMatchingValue = () => { + let matchOpt = Optional.none(); + const items = dataset.data; + const fontSize = editor.queryCommandValue('FontSize'); + if (fontSize) { + // checking for three digits after decimal point, should be precise enough + for (let precision = 3; matchOpt.isNone() && precision >= 0; precision--) { + const pt = toPt(fontSize, precision); + const legacy = toLegacy(pt); + matchOpt = find$5(items, (item) => item.format === fontSize || item.format === pt || item.format === legacy); + } + } + return { matchOpt, size: fontSize }; + }; + const isSelectedFor = (item) => (valueOpt) => valueOpt.exists((value) => value.format === item); + const getCurrentValue = () => { + const { matchOpt } = getMatchingValue(); + return matchOpt; + }; + const getPreviewFor = constant$1(Optional.none); + const onAction = (rawItem) => () => { + editor.undoManager.transact(() => { + editor.focus(); + editor.execCommand('FontSize', false, rawItem.format); + }); + }; + const updateSelectMenuText = (comp) => { + const { matchOpt, size } = getMatchingValue(); + const text = matchOpt.fold(constant$1(size), (match) => match.title); + emitWith(comp, updateMenuText, { + text + }); + fireFontSizeTextUpdate(editor, { value: text }); + }; + const dataset = buildBasicSettingsDataset(editor, 'font_size_formats', Delimiter.Space); + return { + tooltip: makeTooltipText(editor, getTooltipPlaceholder$1(), fallbackFontSize), + text: Optional.some(fallbackFontSize), + icon: Optional.none(), + isSelectedFor, + getPreviewFor, + getCurrentValue, + onAction, + updateText: updateSelectMenuText, + dataset, + shouldHide: false, + isInvalid: never + }; + }; + const createFontSizeButton = (editor, backstage) => createSelectButton(editor, backstage, getSpec$1(editor), getTooltipPlaceholder$1, 'FontSizeTextUpdate', 'fontsize'); + const getConfigFromUnit = (unit) => { + const baseConfig = { step: 1 }; + const configs = { + em: { step: 0.1 }, + cm: { step: 0.1 }, + in: { step: 0.1 }, + pc: { step: 0.1 }, + ch: { step: 0.1 }, + rem: { step: 0.1 } + }; + return configs[unit] ?? baseConfig; + }; + const defaultValue = 16; + const isValidValue = (value) => value >= 0; + const getNumberInputSpec = (editor) => { + const getCurrentValue = () => editor.queryCommandValue('FontSize'); + const updateInputValue = (comp) => emitWith(comp, updateMenuText, { + text: getCurrentValue() + }); + return { + updateInputValue, + onAction: (format, focusBack) => editor.execCommand('FontSize', false, format, { skip_focus: !focusBack }), + getNewValue: (text, updateFunction) => { + parse(text, ['unsupportedLength', 'empty']); + const currentValue = getCurrentValue(); + const parsedText = parse(text, ['unsupportedLength', 'empty']).or(parse(currentValue, ['unsupportedLength', 'empty'])); + const value = parsedText.map((res) => res.value).getOr(defaultValue); + const defaultUnit = getFontSizeInputDefaultUnit(editor); + const unit = parsedText.map((res) => res.unit).filter((u) => u !== '').getOr(defaultUnit); + const newValue = updateFunction(value, getConfigFromUnit(unit).step); + const res = `${isValidValue(newValue) ? newValue : value}${unit}`; + if (res !== currentValue) { + fireFontSizeInputTextUpdate(editor, { value: res }); + } + return res; + } + }; + }; + const createFontSizeInputButton = (editor, backstage) => createBespokeNumberInput(editor, backstage, getNumberInputSpec(editor), 'fontsizeinput'); + // TODO: Test this! + const createFontSizeMenu = (editor, backstage) => { + const menuItems = createMenuItems(backstage, getSpec$1(editor)); + editor.ui.registry.addNestedMenuItem('fontsize', { + text: menuTitle$1, + onSetup: onSetupEditableToggle(editor), + getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems()) + }); + }; + + const menuTitle = 'Formats'; + const getTooltipPlaceholder = (value) => isEmpty(value) ? 'Formats' : 'Format {0}'; + const getSpec = (editor, dataset) => { + const fallbackFormat = 'Formats'; + const isSelectedFor = (format) => () => editor.formatter.match(format); + const getPreviewFor = (format) => () => { + const fmt = editor.formatter.get(format); + return fmt !== undefined ? Optional.some({ + tag: fmt.length > 0 ? fmt[0].inline || fmt[0].block || 'div' : 'div', + styles: editor.dom.parseStyle(editor.formatter.getCssText(format)) + }) : Optional.none(); + }; + const updateSelectMenuText = (comp) => { + const getFormatItems = (fmt) => { + if (isNestedFormat(fmt)) { + return bind$3(fmt.items, getFormatItems); + } + else if (isFormatReference(fmt)) { + return [{ title: fmt.title, format: fmt.format }]; + } + else { + return []; + } + }; + const flattenedItems = bind$3(getStyleFormats(editor), getFormatItems); + const detectedFormat = findNearest(editor, constant$1(flattenedItems)); + const text = detectedFormat.fold(constant$1({ + title: fallbackFormat, + tooltipLabel: '' + }), (fmt) => ({ + title: fmt.title, + tooltipLabel: fmt.title + })); + emitWith(comp, updateMenuText, { + text: text.title + }); + fireStylesTextUpdate(editor, { value: text.tooltipLabel }); + }; + return { + tooltip: makeTooltipText(editor, getTooltipPlaceholder(''), ''), + text: Optional.some(fallbackFormat), + icon: Optional.none(), + isSelectedFor, + getCurrentValue: Optional.none, + getPreviewFor, + onAction: onActionToggleFormat$1(editor), + updateText: updateSelectMenuText, + shouldHide: shouldAutoHideStyleFormats(editor), + isInvalid: (item) => !editor.formatter.canApply(item.format), + dataset + }; + }; + const createStylesButton = (editor, backstage) => { + const dataset = { type: 'advanced', ...backstage.styles }; + return createSelectButton(editor, backstage, getSpec(editor, dataset), getTooltipPlaceholder, 'StylesTextUpdate', 'styles'); + }; + const createStylesMenu = (editor, backstage) => { + const dataset = { type: 'advanced', ...backstage.styles }; + const menuItems = createMenuItems(backstage, getSpec(editor, dataset)); + editor.ui.registry.addNestedMenuItem('styles', { + text: menuTitle, + onSetup: onSetupEditableToggle(editor, () => menuItems.getStyleItems().length > 0), + getSubmenuItems: () => menuItems.items.validateItems(menuItems.getStyleItems()) + }); + }; + + const defaultToolbar = [ + { + name: 'history', items: ['undo', 'redo'] + }, + { + name: 'ai', items: ['aidialog', 'aishortcuts'] + }, + { + name: 'styles', items: ['styles'] + }, + { + name: 'formatting', items: ['bold', 'italic'] + }, + { + name: 'alignment', items: ['alignleft', 'aligncenter', 'alignright', 'alignjustify'] + }, + { + name: 'indentation', items: ['outdent', 'indent'] + }, + { + name: 'permanent pen', items: ['permanentpen'] + }, + { + name: 'comments', items: ['addcomment'] + } + ]; + const renderFromBridge = (bridgeBuilder, render) => (spec, backstage, editor, btnName) => { + const internal = bridgeBuilder(spec).mapError((errInfo) => formatError(errInfo)).getOrDie(); + return render(internal, backstage, editor, btnName); + }; + const types = { + button: renderFromBridge(createToolbarButton, (s, backstage, _, btnName) => renderToolbarButton(s, backstage.shared.providers, btnName)), + togglebutton: renderFromBridge(createToggleButton, (s, backstage, _, btnName) => renderToolbarToggleButton(s, backstage.shared.providers, btnName)), + menubutton: renderFromBridge(createMenuButton, (s, backstage, _, btnName) => renderMenuButton(s, "tox-tbtn" /* ToolbarButtonClasses.Button */, backstage, Optional.none(), false, btnName)), + splitbutton: renderFromBridge(createSplitButton, (s, backstage, _, btnName) => renderSplitButton(s, backstage.shared, btnName)), + grouptoolbarbutton: renderFromBridge(createGroupToolbarButton, (s, backstage, editor, btnName) => { + const buttons = editor.ui.registry.getAll().buttons; + const identify = (toolbar) => identifyButtons(editor, { buttons, toolbar, allowToolbarGroups: false }, backstage, Optional.none()); + const attributes = { + [Attribute]: backstage.shared.header.isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop + }; + switch (getToolbarMode(editor)) { + case ToolbarMode$1.floating: + return renderFloatingToolbarButton(s, backstage, identify, attributes, btnName); + default: + // TODO change this message and add a case when sliding is available + throw new Error('Toolbar groups are only supported when using floating toolbar mode'); + } + }) + }; + const extractFrom = (spec, backstage, editor, btnName) => get$h(types, spec.type).fold(() => { + // eslint-disable-next-line no-console + console.error('skipping button defined by', spec); + return Optional.none(); + }, (render) => Optional.some(render(spec, backstage, editor, btnName))); + const bespokeButtons = { + styles: createStylesButton, + fontsize: createFontSizeButton, + fontsizeinput: createFontSizeInputButton, + fontfamily: createFontFamilyButton, + blocks: createBlocksButton, + align: createAlignButton, + navigateback: createNavigateBackButton + }; + const removeUnusedDefaults = (buttons) => { + const filteredItemGroups = map$2(defaultToolbar, (group) => { + const items = filter$2(group.items, (subItem) => has$2(buttons, subItem) || has$2(bespokeButtons, subItem)); + return { + name: group.name, + items + }; + }); + return filter$2(filteredItemGroups, (group) => group.items.length > 0); + }; + const convertStringToolbar = (strToolbar) => { + const groupsStrings = strToolbar.split('|'); + return map$2(groupsStrings, (g) => ({ + items: g.trim().split(' ') + })); + }; + const isToolbarGroupSettingArray = (toolbar) => isArrayOf(toolbar, (t) => (has$2(t, 'name') || has$2(t, 'label')) && has$2(t, 'items')); + // Toolbar settings + // false = disabled + // undefined or true = default + // string = enabled with specified buttons and groups + // string array = enabled with specified buttons and groups + // object array = enabled with specified buttons, groups and group titles + const createToolbar = (toolbarConfig) => { + const toolbar = toolbarConfig.toolbar; + const buttons = toolbarConfig.buttons; + if (toolbar === false) { + return []; + } + else if (toolbar === undefined || toolbar === true) { + return removeUnusedDefaults(buttons); + } + else if (isString(toolbar)) { + return convertStringToolbar(toolbar); + } + else if (isToolbarGroupSettingArray(toolbar)) { + return toolbar; + } + else { + // eslint-disable-next-line no-console + console.error('Toolbar type should be string, string[], boolean or ToolbarGroup[]'); + return []; + } + }; + const lookupButton = (editor, buttons, toolbarItem, allowToolbarGroups, backstage, prefixes) => get$h(buttons, toolbarItem.toLowerCase()) + .orThunk(() => prefixes.bind((ps) => findMap(ps, (prefix) => get$h(buttons, prefix + toolbarItem.toLowerCase())))) + .fold(() => get$h(bespokeButtons, toolbarItem.toLowerCase()).map((r) => r(editor, backstage)), + // TODO: Add back after TINY-3232 is implemented + // .orThunk(() => { + // console.error('No representation for toolbarItem: ' + toolbarItem); + // return Optional.none(); + // ), + (spec) => { + if (spec.type === 'grouptoolbarbutton' && !allowToolbarGroups) { + // TODO change this message when sliding is available + // eslint-disable-next-line no-console + console.warn(`Ignoring the '${toolbarItem}' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`); + return Optional.none(); + } + else { + return extractFrom(spec, backstage, editor, toolbarItem.toLowerCase()); + } + }); + const identifyButtons = (editor, toolbarConfig, backstage, prefixes) => { + const toolbarGroups = createToolbar(toolbarConfig); + const groups = map$2(toolbarGroups, (group) => { + const items = bind$3(group.items, (toolbarItem) => { + if (toolbarItem.trim().length === 0) { + return []; + } + return lookupButton(editor, toolbarConfig.buttons, toolbarItem, toolbarConfig.allowToolbarGroups, backstage, prefixes) + .map((spec) => Array.isArray(spec) ? spec : [spec]) + .getOr([]); + }); + return { + title: Optional.from(editor.translate(group.name)), + label: someIf(group.label !== undefined, editor.translate(group.label)), + items + }; + }); + return filter$2(groups, (group) => group.items.length > 0); + }; + + // Set toolbar(s) depending on if multiple toolbars is configured or not + const setToolbar = (editor, uiRefs, rawUiConfig, backstage) => { + const outerContainer = uiRefs.mainUi.outerContainer; + const toolbarConfig = rawUiConfig.toolbar; + const toolbarButtonsConfig = rawUiConfig.buttons; + // Check if toolbar type is a non-empty string array + if (isArrayOf(toolbarConfig, isString)) { + const toolbars = toolbarConfig.map((t) => { + const config = { toolbar: t, buttons: toolbarButtonsConfig, allowToolbarGroups: rawUiConfig.allowToolbarGroups }; + return identifyButtons(editor, config, backstage, Optional.none()); + }); + OuterContainer.setToolbars(outerContainer, toolbars); + } + else { + OuterContainer.setToolbar(outerContainer, identifyButtons(editor, rawUiConfig, backstage, Optional.none())); + } + }; + + const detection = detect$1(); + const isiOS12 = detection.os.isiOS() && detection.os.version.major <= 12; + const setupEvents$1 = (editor, uiRefs) => { + const { uiMotherships } = uiRefs; + const dom = editor.dom; + let contentWindow = editor.getWin(); + const initialDocEle = editor.getDoc().documentElement; + const lastWindowDimensions = Cell(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight)); + const lastDocumentDimensions = Cell(SugarPosition(initialDocEle.offsetWidth, initialDocEle.offsetHeight)); + const resizeWindow = () => { + // Check if the window dimensions have changed and if so then trigger a content resize event + const outer = lastWindowDimensions.get(); + if (outer.left !== contentWindow.innerWidth || outer.top !== contentWindow.innerHeight) { + lastWindowDimensions.set(SugarPosition(contentWindow.innerWidth, contentWindow.innerHeight)); + fireResizeContent(editor); + } + }; + const resizeDocument = () => { + // Don't use the initial doc ele, as there's a small chance it may have changed + const docEle = editor.getDoc().documentElement; + // Check if the document dimensions have changed and if so then trigger a content resize event + const inner = lastDocumentDimensions.get(); + if (inner.left !== docEle.offsetWidth || inner.top !== docEle.offsetHeight) { + lastDocumentDimensions.set(SugarPosition(docEle.offsetWidth, docEle.offsetHeight)); + fireResizeContent(editor); + } + }; + const scroll = (e) => { + fireScrollContent(editor, e); + }; + dom.bind(contentWindow, 'resize', resizeWindow); + dom.bind(contentWindow, 'scroll', scroll); + // Bind to async load events and trigger a content resize event if the size has changed + const elementLoad = capture(SugarElement.fromDom(editor.getBody()), 'load', resizeDocument); + // We want to hide ALL UI motherships here. + editor.on('hide', () => { + each$1(uiMotherships, (m) => { + set$7(m.element, 'display', 'none'); + }); + }); + editor.on('show', () => { + each$1(uiMotherships, (m) => { + remove$6(m.element, 'display'); + }); + }); + editor.on('NodeChange', resizeDocument); + editor.on('remove', () => { + elementLoad.unbind(); + dom.unbind(contentWindow, 'resize', resizeWindow); + dom.unbind(contentWindow, 'scroll', scroll); + // Clean memory for IE + contentWindow = null; + }); + }; + // TINY-9226: When set, the `ui_mode: split` option will create two different sinks (one for popups and one for sinks) + // and the popup sink will be placed adjacent to the editor. This will make it having the same scrolling ancestry. + const attachUiMotherships = (editor, uiRoot, uiRefs) => { + if (isSplitUiMode(editor)) { + attachSystemAfter(uiRefs.mainUi.mothership.element, uiRefs.popupUi.mothership); + } + // In UiRefs, dialogUi and popupUi refer to the same thing if ui_mode: combined + attachSystem(uiRoot, uiRefs.dialogUi.mothership); + }; + const render$1 = (editor, uiRefs, rawUiConfig, backstage, args) => { + const { mainUi, uiMotherships } = uiRefs; + const lastToolbarWidth = Cell(0); + const outerContainer = mainUi.outerContainer; + // eslint-disable-next-line @typescript-eslint/no-floating-promises + iframe(editor); + const eTargetNode = SugarElement.fromDom(args.targetNode); + const uiRoot = getContentContainer(getRootNode(eTargetNode)); + attachSystemAfter(eTargetNode, mainUi.mothership); + attachUiMotherships(editor, uiRoot, uiRefs); + editor.on('PostRender', () => { + OuterContainer.setSidebar(outerContainer, rawUiConfig.sidebar, getSidebarShow(editor)); + OuterContainer.setViews(outerContainer, rawUiConfig.views); + }); + // TINY-10343: Using `SkinLoaded` instead of `PostRender` because if the skin loading takes too long you run in to rendering problems since things are measured before the CSS is being applied + editor.on('SkinLoaded', () => { + // Set the sidebar before the toolbar and menubar + // - each sidebar has an associated toggle toolbar button that needs to check the + // sidebar that is set to determine its active state on setup + setToolbar(editor, uiRefs, rawUiConfig, backstage); + lastToolbarWidth.set(editor.getWin().innerWidth); + OuterContainer.setMenubar(outerContainer, identifyMenus(editor, rawUiConfig)); + setupEvents$1(editor, uiRefs); + }); + const socket = OuterContainer.getSocket(outerContainer).getOrDie('Could not find expected socket element'); + if (isiOS12) { + setAll(socket.element, { + 'overflow': 'scroll', + '-webkit-overflow-scrolling': 'touch' // required for ios < 13 content scrolling + }); + const limit = first$1(() => { + editor.dispatch('ScrollContent'); + }, 20); + const unbinder = bind$1(socket.element, 'scroll', limit.throttle); + editor.on('remove', unbinder.unbind); + } + setupEventsForUi(editor, uiRefs); + editor.addCommand('ToggleSidebar', (_ui, value) => { + OuterContainer.toggleSidebar(outerContainer, value); + fireToggleSidebar(editor); + }); + editor.addQueryValueHandler('ToggleSidebar', () => OuterContainer.whichSidebar(outerContainer) ?? ''); + editor.addCommand('ToggleView', (_ui, value) => { + if (OuterContainer.toggleView(outerContainer, value)) { + const target = outerContainer.element; + mainUi.mothership.broadcastOn([dismissPopups()], { target }); + each$1(uiMotherships, (m) => { + m.broadcastOn([dismissPopups()], { target }); + }); + // Switching back to main view should focus the editor and update any UIs + if (isNull(OuterContainer.whichView(outerContainer))) { + editor.focus(); + editor.nodeChanged(); + OuterContainer.refreshToolbar(outerContainer); + } + fireToggleView(editor); + } + }); + editor.addQueryValueHandler('ToggleView', () => OuterContainer.whichView(outerContainer) ?? ''); + const toolbarMode = getToolbarMode(editor); + const refreshDrawer = () => { + OuterContainer.refreshToolbar(uiRefs.mainUi.outerContainer); + }; + if (toolbarMode === ToolbarMode$1.sliding || toolbarMode === ToolbarMode$1.floating) { + editor.on('ResizeWindow ResizeEditor ResizeContent', () => { + // Check if the width has changed, if so then refresh the toolbar drawer. We don't care if height changes. + const width = editor.getWin().innerWidth; + if (width !== lastToolbarWidth.get()) { + refreshDrawer(); + lastToolbarWidth.set(width); + } + }); + } + const api = { + setEnabled: (state) => { + const eventType = state ? 'setEnabled' : 'setDisabled'; + broadcastEvents(uiRefs, eventType); + }, + isEnabled: () => !Disabling.isDisabled(outerContainer) + }; + return { + iframeContainer: socket.element.dom, + editorContainer: outerContainer.element.dom, + api + }; + }; + + var Iframe = /*#__PURE__*/Object.freeze({ + __proto__: null, + render: render$1 + }); + + const parseToInt = (val) => { + // if size is a number or '_px', will return the number + const re = /^[0-9\.]+(|px)$/i; + if (re.test('' + val)) { + return Optional.some(parseInt('' + val, 10)); + } + return Optional.none(); + }; + const numToPx = (val) => isNumber(val) ? val + 'px' : val; + const calcCappedSize = (size, minSize, maxSize) => { + const minOverride = minSize.filter((min) => size < min); + const maxOverride = maxSize.filter((max) => size > max); + return minOverride.or(maxOverride).getOr(size); + }; + const convertValueToPx = (element, value) => { + if (typeof value === 'number') { + return Optional.from(value); + } + const splitValue = /^([0-9.]+)(pt|em|px)$/.exec(value.trim()); + if (splitValue) { + const type = splitValue[2]; + const parsed = Number.parseFloat(splitValue[1]); + if (Number.isNaN(parsed) || parsed < 0) { + return Optional.none(); + } + else if (type === 'em') { + return Optional.from(parsed * Number.parseFloat(window.getComputedStyle(element.dom).fontSize)); + } + else if (type === 'pt') { + return Optional.from(parsed * (72 / 96)); + } + else if (type === 'px') { + return Optional.from(parsed); + } + } + return Optional.none(); + }; + + const getHeight = (editor) => { + const baseHeight = convertValueToPx(SugarElement.fromDom(editor.targetElm), getHeightOption(editor)); + const minHeight = getMinHeightOption(editor); + const maxHeight = getMaxHeightOption(editor); + return baseHeight.map((height) => calcCappedSize(height, minHeight, maxHeight)); + }; + const getHeightWithFallback = (editor) => { + return getHeight(editor).getOr(getHeightOption(editor)); // If we can't parse, set the height while ignoring min/max values. + }; + const getWidth = (editor) => { + const baseWidth = getWidthOption(editor); + const minWidth = getMinWidthOption(editor); + const maxWidth = getMaxWidthOption(editor); + return parseToInt(baseWidth).map((width) => calcCappedSize(width, minWidth, maxWidth)); + }; + const getWidthWithFallback = (editor) => { + const width = getWidth(editor); + return width.getOr(getWidthOption(editor)); + }; + + const { ToolbarLocation, ToolbarMode } = Options; + const maximumDistanceToEdge = 40; + const InlineHeader = (editor, targetElm, uiRefs, backstage, floatContainer) => { + const { mainUi, uiMotherships } = uiRefs; + const DOM = global$9.DOM; + const useFixedToolbarContainer = useFixedContainer(editor); + const isSticky = isStickyToolbar(editor); + const editorMaxWidthOpt = getMaxWidthOption(editor).or(getWidth(editor)); + const headerBackstage = backstage.shared.header; + const isPositionedAtTop = headerBackstage.isPositionedAtTop; + const minimumToolbarWidth = 150; // Value is arbitrary. + const toolbarMode = getToolbarMode(editor); + const isSplitToolbar = toolbarMode === ToolbarMode.sliding || toolbarMode === ToolbarMode.floating; + const visible = Cell(false); + const isVisible = () => visible.get() && !editor.removed; + // Calculate the toolbar offset when using a split toolbar drawer + const calcToolbarOffset = (toolbar) => isSplitToolbar ? + toolbar.fold(constant$1(0), (tbar) => + // If we have an overflow toolbar, we need to offset the positioning by the height of the overflow toolbar + tbar.components().length > 1 ? get$d(tbar.components()[1].element) : 0) : 0; + const calcMode = (container) => { + switch (getToolbarLocation(editor)) { + case ToolbarLocation.auto: + const toolbar = OuterContainer.getToolbar(mainUi.outerContainer); + const offset = calcToolbarOffset(toolbar); + const toolbarHeight = get$d(container.element) - offset; + const targetBounds = box$1(targetElm); + // Determine if the toolbar has room to render at the top/bottom of the document + const roomAtTop = targetBounds.y > toolbarHeight; + if (roomAtTop) { + return 'top'; + } + else { + const doc = documentElement(targetElm); + const docHeight = Math.max(doc.dom.scrollHeight, get$d(doc)); + const roomAtBottom = targetBounds.bottom < docHeight - toolbarHeight; + // If there isn't ever room to add the toolbar above the target element, then place the toolbar at the bottom. + // Likewise if there's no room at the bottom, then we should show at the top. If there's no room at the bottom + // or top, then prefer the bottom except when it'll prevent accessing the content at the bottom. + // Make sure to exclude scroll position, as we want to still show at the top if the user can scroll up to undock + if (roomAtBottom) { + return 'bottom'; + } + else { + const winBounds = win(); + const isRoomAtBottomViewport = winBounds.bottom < targetBounds.bottom - toolbarHeight; + return isRoomAtBottomViewport ? 'bottom' : 'top'; + } + } + case ToolbarLocation.bottom: + return 'bottom'; + case ToolbarLocation.top: + default: + return 'top'; + } + }; + const setupMode = (mode) => { + // Update the docking mode + floatContainer.on((container) => { + Docking.setModes(container, [mode]); + headerBackstage.setDockingMode(mode); + // Update the vertical menu direction + const verticalDir = isPositionedAtTop() ? AttributeValue.TopToBottom : AttributeValue.BottomToTop; + set$9(container.element, Attribute, verticalDir); + }); + }; + const updateChromeWidth = () => { + floatContainer.on((container) => { + // Update the max width of the inline toolbar + const maxWidth = editorMaxWidthOpt.getOrThunk(() => { + // Adding 10px of margin so that the toolbar won't try to wrap + return getBounds$1().width - viewport$1(targetElm).left - 10; + }); + set$7(container.element, 'max-width', maxWidth + 'px'); + }); + }; + const updateChromePosition = (isOuterContainerWidthRestored, prevScroll) => { + floatContainer.on((container) => { + const toolbar = OuterContainer.getToolbar(mainUi.outerContainer); + const offset = calcToolbarOffset(toolbar); + // The float container/editor may not have been rendered yet, which will cause it to have a non integer based positions + // so we need to round this to account for that. + const targetBounds = box$1(targetElm); + const offsetParent = getOffsetParent$1(editor, mainUi.outerContainer.element); + const getLeft = () => offsetParent.fold(() => targetBounds.x, (offsetParent) => { + // Because for ui_mode: split, the main mothership (which includes the toolbar) is moved and added as a sibling + // If there's any relative position div set as the parent and the offsetParent is no longer the body, + // the absolute top/left positions would no longer be correct + // When there's a relative div and the position is the same as the toolbar container + // then it would produce a negative top as it needs to be positioned on top of the offsetParent + const offsetBox = box$1(offsetParent); + const isOffsetParentBody = eq(offsetParent, body()); + return isOffsetParentBody + ? targetBounds.x + : targetBounds.x - offsetBox.x; + }); + const getTop = () => offsetParent.fold(() => isPositionedAtTop() + ? Math.max(targetBounds.y - get$d(container.element) + offset, 0) + : targetBounds.bottom, (offsetParent) => { + // Because for ui_mode: split, the main mothership (which includes the toolbar) is moved and added as a sibling + // If there's any relative position div set as the parent and the offsetParent is no longer the body, + // the absolute top/left positions would no longer be correct + // When there's a relative div and the position is the same as the toolbar container + // then it would produce a negative top as it needs to be positioned on top of the offsetParent + const offsetBox = box$1(offsetParent); + const scrollDelta = offsetParent.dom.scrollTop ?? 0; + const isOffsetParentBody = eq(offsetParent, body()); + const topValue = isOffsetParentBody + ? Math.max(targetBounds.y - get$d(container.element) + offset, 0) + : targetBounds.y - offsetBox.y + scrollDelta - get$d(container.element) + offset; + return isPositionedAtTop() + ? topValue + : targetBounds.bottom; + }); + const left = getLeft(); + const widthProperties = someIf(isOuterContainerWidthRestored, + // This width can be used for calculating the "width" when resolving issues with flex-wrapping being triggered at the window width, despite scroll space being available to the right. + Math.ceil(mainUi.outerContainer.element.dom.getBoundingClientRect().width)) + // this check is needed because if the toolbar is rendered outside of the `outerContainer` because the toolbar have `position: "fixed"` + // the calculate width isn't correct + .filter((w) => w > minimumToolbarWidth).map((toolbarWidth) => { + const scroll = prevScroll.getOr(get$b()); + /* + As the editor container can wrap its elements (due to flex-wrap), the width of the container impacts also its height. Adding a minimum width works around two problems: + + a) The docking behaviour (e.g. lazyContext) does not handle the situation of a very thin component near the edge of the screen very well, and actually has no concept of horizontal scroll - it only checks y values. + + b) A very small toolbar is essentially unusable. On scrolling of X, we keep updating the width of the toolbar so that it can grow to fit the available space. + + Note: this is entirely determined on the number of items in the menu and the toolbar, because when they wrap, that's what causes the height. Also, having multiple toolbars can also make it higher. + */ + const availableWidth = window.innerWidth - (left - scroll.left); + const width = Math.max(Math.min(toolbarWidth, availableWidth), minimumToolbarWidth); + if (availableWidth < toolbarWidth) { + set$7(mainUi.outerContainer.element, 'width', width + 'px'); + } + return { + width: width + 'px' + }; + }).getOr({ width: 'max-content' }); + const baseProperties = { + position: 'absolute', + left: Math.round(left) + 'px', + top: getTop() + 'px' + }; + setAll(mainUi.outerContainer.element, { + ...baseProperties, + ...widthProperties + }); + }); + }; + // This would return Optional.none, for ui_mode: combined, which will fallback to the default code block + // For ui_mode: split, the offsetParent would be the body if there were no relative div set as parent + const getOffsetParent$1 = (editor, element) => isSplitUiMode(editor) ? getOffsetParent(element) : Optional.none(); + const repositionPopups$1 = () => { + each$1(uiMotherships, (m) => { + m.broadcastOn([repositionPopups()], {}); + }); + }; + const restoreOuterContainerWidth = () => { + /* + Editors can be placed so far to the right that their left position is beyond the window width. This causes problems with flex-wrap. To solve this, set a width style on the container. + Natural width of the container needs to be calculated first. + */ + if (!useFixedToolbarContainer) { + const toolbarCurrentRightsidePosition = absolute$3(mainUi.outerContainer.element).left + getOuter(mainUi.outerContainer.element); + /* + Check the width if we are within X number of pixels to the edge ( or above ). Also check if we have the width-value set. + This helps handling the issue where it goes from having a width set ( because it's too wide ) to going so far from the edge it no longer triggers the problem. Common when the width is changed by test. + */ + if (toolbarCurrentRightsidePosition >= window.innerWidth - maximumDistanceToEdge || getRaw(mainUi.outerContainer.element, 'width').isSome()) { + set$7(mainUi.outerContainer.element, 'position', 'absolute'); + set$7(mainUi.outerContainer.element, 'left', '0px'); + remove$6(mainUi.outerContainer.element, 'width'); + return true; + } + } + return false; + }; + const update = (stickyAction) => { + // Skip updating the ui if it's hidden + if (!isVisible()) { + return; + } + // Handles positioning, docking and SplitToolbar (more drawer) behaviour. Modes: + // 1. Basic inline: does positioning and docking + // 2. Inline + more drawer: does positioning, docking and SplitToolbar + // 3. Inline + fixed_toolbar_container: does nothing + // 4. Inline + fixed_toolbar_container + more drawer: does SplitToolbar + // Update the max width, as the body width may have changed + if (!useFixedToolbarContainer) { + updateChromeWidth(); + } + const prevScroll = get$b(); + const isOuterContainerWidthRestored = useFixedToolbarContainer ? false : restoreOuterContainerWidth(); + /* + Refresh split toolbar. Before calling refresh, we need to make sure that we have the full width (through restoreOuterContainerWidth above), otherwise too much will be put in the overflow drawer. + A split toolbar requires a calculation to see what ends up in the "more drawer". When we don't have a split toolbar, then there is no reason to refresh the toolbar when the size changes. + */ + if (isSplitToolbar) { + OuterContainer.refreshToolbar(mainUi.outerContainer); + } + // Positioning + if (!useFixedToolbarContainer) { + // Getting the current scroll as the previous step may have reset the scroll, + // We also want calculation based on the previous scroll, then restoring the scroll when everything is set. + const currentScroll = get$b(); + const optScroll = someIf(prevScroll.left !== currentScroll.left, prevScroll); + // This will position the container in the right spot. + updateChromePosition(isOuterContainerWidthRestored, optScroll); + // Restore scroll left position only if they are different, keeping the current scroll top, that shouldn't be changed + optScroll.each((scroll) => { + to(scroll.left, currentScroll.top); + }); + } + // Docking + if (isSticky) { + floatContainer.on(stickyAction); + } + // Floating toolbar + repositionPopups$1(); + }; + const doUpdateMode = () => { + // Skip updating the mode if the toolbar is hidden, is + // using a fixed container or has sticky toolbars disabled + if (useFixedToolbarContainer || !isSticky || !isVisible()) { + return false; + } + return floatContainer.get().exists((fc) => { + const currentMode = headerBackstage.getDockingMode(); + const newMode = calcMode(fc); + // Note: the docking mode will only be able to change when the `toolbar_location` + // is set to "auto". + if (newMode !== currentMode) { + setupMode(newMode); + return true; + } + else { + return false; + } + }); + }; + const show = () => { + visible.set(true); + set$7(mainUi.outerContainer.element, 'display', 'flex'); + DOM.addClass(editor.getBody(), 'mce-edit-focus'); + each$1(uiMotherships, (m) => { + // We remove the display style when showing, because when hiding, we set it to "none" + remove$6(m.element, 'display'); + }); + doUpdateMode(); + if (isSplitUiMode(editor)) { + // When the toolbar is shown, then hidden and when the page is then scrolled, + // the toolbar is set to docked, which shouldn't be as it should be static position + // calling reset here, to reset the state. + // Another case would be when the toolbar is shown initially (with location_bottom) + // we don't want to dock the toolbar, calling Docking.refresh + update((elem) => Docking.isDocked(elem) ? Docking.reset(elem) : Docking.refresh(elem)); + } + else { + // Even if we aren't updating the docking mode, we still want to reposition + // the Ui. NOTE: We are using Docking.refresh here, rather than Docking.reset. This + // means it should keep whatever its "previous" coordinates were, and will just + // behave like the window was scrolled again, and Docking needs to work out if it + // is going to dock / undock + update(Docking.refresh); + } + }; + const hide = () => { + visible.set(false); + set$7(mainUi.outerContainer.element, 'display', 'none'); + DOM.removeClass(editor.getBody(), 'mce-edit-focus'); + each$1(uiMotherships, (m) => { + set$7(m.element, 'display', 'none'); + }); + }; + const updateMode = () => { + const changedMode = doUpdateMode(); + // If the docking mode has changed due to the update, we want to reset + // docking. This will clear any prior stored positions + if (changedMode) { + update(Docking.reset); + } + }; + return { + isVisible, + isPositionedAtTop, + show, + hide, + update, + updateMode, + repositionPopups: repositionPopups$1 + }; + }; + + const getTargetPosAndBounds = (targetElm, isToolbarTop) => { + const bounds = box$1(targetElm); + return { + pos: isToolbarTop ? bounds.y : bounds.bottom, + bounds + }; + }; + const setupEvents = (editor, targetElm, ui, toolbarPersist) => { + const prevPosAndBounds = Cell(getTargetPosAndBounds(targetElm, ui.isPositionedAtTop())); + const resizeContent = (e) => { + const { pos, bounds } = getTargetPosAndBounds(targetElm, ui.isPositionedAtTop()); + const { pos: prevPos, bounds: prevBounds } = prevPosAndBounds.get(); + const hasResized = bounds.height !== prevBounds.height || bounds.width !== prevBounds.width; + prevPosAndBounds.set({ pos, bounds }); + if (hasResized) { + fireResizeContent(editor, e); + } + if (ui.isVisible()) { + if (prevPos !== pos) { + // The proposed toolbar location has moved, so we need to reposition the Ui. This might + // include things like refreshing any Docking / stickiness for the toolbars + ui.update(Docking.reset); + } + else if (hasResized) { + // The proposed toolbar location hasn't moved, but the dimensions of the editor have changed. + // We use "updateMode" here instead of "update". The primary reason is that "updateMode" + // only repositions the Ui if it has detected that the docking mode needs to change, which + // will only happen with `toolbar_location` is set to `auto`. + ui.updateMode(); + // NOTE: This repositionPopups call is going to be a duplicate if "updateMode" identifies + // that the mode has changed. We probably need to make it a bit more granular .. so + // that we can just query if the mode has changed. Otherwise, we're going to end up with + // situations like this where we are doing a potentially expensive operation + // (repositionPopups) more than once. + ui.repositionPopups(); + } + } + }; + if (!toolbarPersist) { + editor.on('activate', ui.show); + editor.on('deactivate', ui.hide); + } + // For both the initial load (SkinLoaded) and any resizes (ResizeWindow), we want to + // update the positions of the Ui elements (and reset Docking / stickiness) + editor.on('SkinLoaded ResizeWindow', () => ui.update(Docking.reset)); + editor.on('NodeChange keydown', (e) => { + requestAnimationFrame(() => resizeContent(e)); + }); + // When the page has been scrolled, we need to update any docking positions. We also + // want to reposition all the Ui elements if required. + let lastScrollX = 0; + const updateUi = last(() => ui.update(Docking.refresh), 33); + editor.on('ScrollWindow', () => { + const newScrollX = get$b().left; + if (newScrollX !== lastScrollX) { + lastScrollX = newScrollX; + updateUi.throttle(); + } + ui.updateMode(); + }); + if (isSplitUiMode(editor)) { + editor.on('ElementScroll', (_args) => { + // When the scroller containing the editor scrolls, update the Ui positions + ui.update(Docking.refresh); + }); + } + // Bind to async load events and trigger a content resize event if the size has changed + // This is handling resizing based on anything loading inside the content (e.g. img tags) + const elementLoad = unbindable(); + elementLoad.set(capture(SugarElement.fromDom(editor.getBody()), 'load', (e) => resizeContent(e.raw))); + editor.on('remove', () => { + elementLoad.clear(); + }); + }; + const render = (editor, uiRefs, rawUiConfig, backstage, args) => { + const { mainUi } = uiRefs; + // This is used to store the reference to the header part of OuterContainer, which is + // *not* created by this module. This reference is used to make sure that we only bind + // events for an inline container *once* ... because our show function is just the + // InlineHeader's show function if this reference is already set. We pass it through to + // InlineHeader because InlineHeader will depend on it. + const floatContainer = value$2(); + const targetElm = SugarElement.fromDom(args.targetNode); + const ui = InlineHeader(editor, targetElm, uiRefs, backstage, floatContainer); + const toolbarPersist = isToolbarPersist(editor); + // eslint-disable-next-line @typescript-eslint/no-floating-promises + inline(editor); + const render = () => { + // Because we set the floatContainer immediately afterwards, this is just telling us + // if we have already called this code (e.g. show, hide, show) - then don't do anything + // more than show. It's a pretty messy way of ensuring that all the code that follows + // this `if` block is only executed once (setting up events etc.). So the first call + // to `render` will execute it, but the second call won't. This `render` function is + // used for most of the "show" handlers here, so the function can be invoked either + // for the first time, or or just because something is being show again, after being + // toggled to hidden earlier. + if (floatContainer.isSet()) { + ui.show(); + return; + } + // Set up the header part of OuterContainer. Once configured, the `InlineHeader` code + // will use it when setting up and updating the Ui. This module uses it mainly just to + // allow us to call `render` multiple times, but only have it execute the setup code once. + floatContainer.set(OuterContainer.getHeader(mainUi.outerContainer).getOrDie()); + // `uiContainer` handles *where* the motherhips get added by default. Currently, uiContainer + // will mostly be the of the document (unless it's a ShadowRoot). When using ui_mode: split, + // the main mothership (which includes the toolbar) and popup sinks will be added as siblings of + // the target element, so that they have the same scrolling context / environment + const uiContainer = getUiContainer(editor); + // Position the motherships based on the editor Ui options. + if (isSplitUiMode(editor)) { + attachSystemAfter(targetElm, mainUi.mothership); + // Only in ui_mode: split, do we have a separate popup sink + attachSystemAfter(targetElm, uiRefs.popupUi.mothership); + } + else { + attachSystem(uiContainer, mainUi.mothership); + } + // NOTE: In UiRefs, dialogUi and popupUi refer to the same thing if ui_mode: combined + attachSystem(uiContainer, uiRefs.dialogUi.mothership); + const setup = () => { + // Unlike menubar below which uses OuterContainer directly, this level of abstraction is + // required because of the different types of toolbars available (e.g. multiple vs single) + setToolbar(editor, uiRefs, rawUiConfig, backstage); + OuterContainer.setMenubar(mainUi.outerContainer, identifyMenus(editor, rawUiConfig)); + // Initialise the toolbar - set initial positioning then show + ui.show(); + setupEvents(editor, targetElm, ui, toolbarPersist); + editor.nodeChanged(); + }; + if (toolbarPersist) { + // TINY-10482: for `toolbar_persist: true` we need to wait for the skin to be loaded before showing the toolbar/menubar. + // Without this, there's the occasional chance that the toolbar/menubar could be set/shown before the skin has finished + // loading, which causes CSS issues. + editor.once('SkinLoaded', setup); + } + else { + setup(); + } + }; + editor.on('show', render); + editor.on('hide', ui.hide); + if (!toolbarPersist) { + editor.on('focus', render); + editor.on('blur', ui.hide); + } + editor.on('init', () => { + if (editor.hasFocus() || toolbarPersist) { + render(); + } + }); + setupEventsForUi(editor, uiRefs); + const api = { + show: render, + hide: ui.hide, + setEnabled: (state) => { + const eventType = state ? 'setEnabled' : 'setDisabled'; + broadcastEvents(uiRefs, eventType); + }, + isEnabled: () => !Disabling.isDisabled(mainUi.outerContainer) + }; + return { + editorContainer: mainUi.outerContainer.element.dom, + api + }; + }; + + var Inline = /*#__PURE__*/Object.freeze({ + __proto__: null, + render: render + }); + + const LazyUiReferences = () => { + const dialogUi = value$2(); + const popupUi = value$2(); + const mainUi = value$2(); + const lazyGetInOuterOrDie = (label, f) => () => mainUi.get().bind((oc) => f(oc.outerContainer)).getOrDie(`Could not find ${label} element in OuterContainer`); + // TINY-9226: If the motherships are the same, return just the dialog Ui of them (ui_mode: combined mode) + const getUiMotherships = () => { + const optDialogMothership = dialogUi.get().map((ui) => ui.mothership); + const optPopupMothership = popupUi.get().map((ui) => ui.mothership); + return optDialogMothership.fold(() => optPopupMothership.toArray(), (dm) => optPopupMothership.fold(() => [dm], (pm) => eq(dm.element, pm.element) ? [dm] : [dm, pm])); + }; + return { + dialogUi, + popupUi, + mainUi, + getUiMotherships, + lazyGetInOuterOrDie + }; + }; + + // TODO: Find a better way of doing this. We probably don't want to just listen to + // editor events. Having an API available like WindowManager would be the best option + const showContextToolbarEvent = 'contexttoolbar-show'; + const hideContextToolbarEvent = 'contexttoolbar-hide'; + + const getFormApi = (input, valueState, focusfallbackElement) => { + return ({ + setInputEnabled: (state) => { + if (!state && focusfallbackElement) { + focus$4(focusfallbackElement); + } + Disabling.set(input, !state); + }, + isInputEnabled: () => !Disabling.isDisabled(input), + hide: () => { + emit(input, sandboxClose()); + }, + back: () => { + emit(input, backSlideEvent); + }, + getValue: () => { + return valueState.get().getOrThunk(() => Representing.getValue(input)); + }, + setValue: (value) => { + if (input.getSystem().isConnected()) { + Representing.setValue(input, value); + } + else { + valueState.set(value); + } + } + }); + }; + const getFormParentApi = (comp, valueState, focusfallbackElement) => { + const parent$1 = parent(comp.element); + const parentCompOpt = parent$1.bind((parent) => comp.getSystem().getByDom(parent).toOptional()); + return getFormApi(parentCompOpt.getOr(comp), valueState, focusfallbackElement); + }; + + const runOnExecute = (memInput, original, valueState) => run$1(internalToolbarButtonExecute, (comp, se) => { + const input = memInput.get(comp); + const formApi = getFormApi(input, valueState, comp.element); + original.onAction(formApi, se.event.buttonApi); + }); + const renderContextButton = (memInput, button, providers, valueState) => { + const { primary, ...rest } = button.original; + const bridged = getOrDie(createToolbarButton({ + ...rest, + type: 'button', + onAction: noop + })); + return renderToolbarButtonWith(bridged, providers, [ + runOnExecute(memInput, button, valueState) + ]); + }; + const renderContextToggleButton = (memInput, button, providers, valueState) => { + const { primary, ...rest } = button.original; + const bridged = getOrDie(createToggleButton({ + ...rest, + type: 'togglebutton', + onAction: noop + })); + return renderToolbarToggleButtonWith(bridged, providers, [ + runOnExecute(memInput, button, valueState) + ]); + }; + const isToggleButton = (button) => button.type === 'contextformtogglebutton'; + const generateOne = (memInput, button, providersBackstage, valueState) => { + if (isToggleButton(button)) { + return renderContextToggleButton(memInput, button, providersBackstage, valueState); + } + else { + return renderContextButton(memInput, button, providersBackstage, valueState); + } + }; + const generate = (memInput, buttons, providersBackstage, valueState) => { + const mementos = map$2(buttons, (button) => record(generateOne(memInput, button, providersBackstage, valueState))); + const asSpecs = () => map$2(mementos, (mem) => mem.asSpec()); + const findPrimary = (compInSystem) => findMap(buttons, (button, i) => { + if (button.primary) { + return Optional.from(mementos[i]).bind((mem) => mem.getOpt(compInSystem)).filter(not(Disabling.isDisabled)); + } + else { + return Optional.none(); + } + }); + return { + asSpecs, + findPrimary + }; + }; + + const renderContextFormSizeInput = (ctx, providersBackstage, onEnter, valueState) => { + const { width, height } = ctx.initValue(); + let converter = noSizeConversion; + const enabled = true; + const ratioEvent = generate$6('ratio-event'); + const getApi = (comp) => getFormApi(comp, valueState); + const makeIcon = (iconName) => render$4(iconName, { tag: 'span', classes: ['tox-icon', 'tox-lock-icon__' + iconName] }, providersBackstage.icons); + const disabled = () => !enabled; + const label = ctx.label.getOr('Constrain proportions'); + const translatedLabel = providersBackstage.translate(label); + const pLock = FormCoupledInputs.parts.lock({ + dom: { + tag: 'button', + classes: ['tox-lock', 'tox-lock-context-form-size-input', 'tox-button', 'tox-button--naked', 'tox-button--icon'], + attributes: { + 'aria-label': translatedLabel, + 'data-mce-name': label + } + }, + components: [ + makeIcon('lock'), + makeIcon('unlock') + ], + buttonBehaviours: derive$1([ + Disabling.config({ disabled }), + Tabstopping.config({}), + Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: translatedLabel + })) + ]) + }); + const formGroup = (components) => ({ + dom: { + tag: 'div', + classes: ['tox-context-form__group'] + }, + components + }); + const goToParent = (comp) => { + const focussableWrapperOpt = ancestor$1(comp.element, 'div.tox-focusable-wrapper'); + return focussableWrapperOpt.fold(Optional.none, (focussableWrapper) => { + focus$4(focussableWrapper); + return Optional.some(true); + }); + }; + const getFieldPart = (isField1) => FormField.parts.field({ + factory: Input, + inputClasses: ['tox-textfield', 'tox-toolbar-textfield', 'tox-textfield-size'], + data: isField1 ? width : height, + inputBehaviours: derive$1([ + Disabling.config({ disabled }), + Tabstopping.config({}), + config('size-input-toolbar-events', [ + run$1(focusin(), (component, _simulatedEvent) => { + emitWith(component, ratioEvent, { isField1 }); + }) + ]), + Keying.config({ mode: 'special', onEnter, onEscape: goToParent }) + ]), + selectOnFocus: false + }); + const getLabel = (label) => ({ + dom: { + tag: 'label', + classes: ['tox-label'] + }, + components: [ + text$2(providersBackstage.translate(label)) + ] + }); + const focusableWrapper = (field) => ({ + dom: { + tag: 'div', + classes: ['tox-focusable-wrapper', 'tox-toolbar-nav-item'], + }, + components: [field], + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}), + Keying.config({ + mode: 'special', + onEnter: (comp) => { + const focussableInputOpt = descendant(comp.element, 'input'); + return focussableInputOpt.fold(Optional.none, (focussableInput) => { + focus$4(focussableInput); + return Optional.some(true); + }); + } + }) + ]) + }); + const widthField = focusableWrapper(FormCoupledInputs.parts.field1(formGroup([FormField.parts.label(getLabel('Width:')), getFieldPart(true)]))); + const heightField = focusableWrapper(FormCoupledInputs.parts.field2(formGroup([FormField.parts.label(getLabel('Height:')), getFieldPart(false)]))); + const editorOffCell = Cell(noop); + const controlLifecycleHandlers = [ + onControlAttached({ + onBeforeSetup: (comp) => descendant(comp.element, 'input').each(focus$4), + onSetup: ctx.onSetup, + getApi + }, editorOffCell), + onContextFormControlDetached({ getApi }, editorOffCell, valueState), + ]; + return FormCoupledInputs.sketch({ + dom: { + tag: 'div', + classes: ['tox-context-form__group'] + }, + components: [ + // NOTE: Form coupled inputs to the FormField.sketch themselves. + widthField, + formGroup([ + pLock + ]), + heightField + ], + field1Name: 'width', + field2Name: 'height', + locked: true, + markers: { + lockClass: 'tox-locked' + }, + onLockedChange: (current, other, _lock) => { + parseSize(Representing.getValue(current)).each((size) => { + converter(size).each((newSize) => { + Representing.setValue(other, formatSize(newSize)); + }); + }); + }, + onInput: (current) => emit(current, formInputEvent), + coupledFieldBehaviours: derive$1([ + Focusing.config({}), + Keying.config({ + mode: 'flow', + focusInside: FocusInsideModes.OnEnterOrSpaceMode, + cycles: false, + selector: 'button, .tox-focusable-wrapper', + }), + Disabling.config({ + disabled, + onDisabled: (comp) => { + FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.disable); + FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.disable); + FormCoupledInputs.getLock(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormCoupledInputs.getField1(comp).bind(FormField.getField).each(Disabling.enable); + FormCoupledInputs.getField2(comp).bind(FormField.getField).each(Disabling.enable); + FormCoupledInputs.getLock(comp).each(Disabling.enable); + } + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext('mode:design')), + config('size-input-toolbar-events2', [ + run$1(ratioEvent, (component, simulatedEvent) => { + const isField1 = simulatedEvent.event.isField1; + const optCurrent = isField1 ? FormCoupledInputs.getField1(component) : FormCoupledInputs.getField2(component); + const optOther = isField1 ? FormCoupledInputs.getField2(component) : FormCoupledInputs.getField1(component); + const value1 = optCurrent.map(Representing.getValue).getOr(''); + const value2 = optOther.map(Representing.getValue).getOr(''); + converter = makeRatioConverter(value1, value2); + }), + run$1(formInputEvent, (input) => ctx.onInput(getApi(input))), + ...controlLifecycleHandlers, + ]) + ]) + }); + }; + + const createContextFormFieldFromParts = (pLabel, pField, providers) => FormField.sketch({ + dom: { + tag: 'div', + classes: ['tox-context-form__group'] + }, + components: [...pLabel.toArray(), pField], + fieldBehaviours: derive$1([ + Disabling.config({ + disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable, + onDisabled: (comp) => { + focusParent(comp); + FormField.getField(comp).each(Disabling.disable); + }, + onEnabled: (comp) => { + FormField.getField(comp).each(Disabling.enable); + } + }), + ]) + }); + + const renderContextFormSliderInput = (ctx, providers, onEnter, valueState) => { + const editorOffCell = Cell(noop); + const getApi = (comp) => getFormParentApi(comp, valueState); + const pLabel = ctx.label.map((label) => FormField.parts.label({ + dom: { tag: 'label', classes: ['tox-label'] }, + components: [text$2(providers.translate(label))] + })); + const pField = FormField.parts.field({ + factory: Input, + type: 'range', + inputClasses: ['tox-toolbar-slider__input', 'tox-toolbar-nav-item'], + inputAttributes: { + min: String(ctx.min()), + max: String(ctx.max()) + }, + data: ctx.initValue().toString(), + fromInputValue: (value) => toFloat(value).getOr(ctx.min()), + toInputValue: (value) => String(value), + inputBehaviours: derive$1([ + Disabling.config({ + disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable + }), + toggleOnReceive(() => providers.checkUiComponentContext('mode:design')), + Keying.config({ + mode: 'special', + onEnter, + // These two lines need to be tested. They are about left and right bypassing + // any keyboard handling, and allowing left and right to be processed by the input + // Maybe this should go in an alloy sketch for Input? + onLeft: (comp, se) => { + se.cut(); + return Optional.none(); + }, + onRight: (comp, se) => { + se.cut(); + return Optional.none(); + } + }), + config('slider-events', [ + onControlAttached({ + onSetup: ctx.onSetup, + getApi, + onBeforeSetup: Keying.focusIn + }, editorOffCell), + onContextFormControlDetached({ getApi }, editorOffCell, valueState), + run$1(input(), (comp) => { + ctx.onInput(getApi(comp)); + }) + ]) + ]) + }); + return createContextFormFieldFromParts(pLabel, pField, providers); + }; + + const renderContextFormTextInput = (ctx, providers, onEnter, valueState) => { + const editorOffCell = Cell(noop); + const getFormApi = (comp) => getFormParentApi(comp, valueState); + const pLabel = ctx.label.map((label) => FormField.parts.label({ + dom: { tag: 'label', classes: ['tox-label'] }, + components: [text$2(providers.translate(label))] + })); + const placeholder = ctx.placeholder.map((p) => ({ placeholder: providers.translate(p) })).getOr({}); + const inputAttributes = { + ...placeholder, + }; + const pField = FormField.parts.field({ + factory: Input, + inputClasses: ['tox-toolbar-textfield', 'tox-toolbar-nav-item'], + inputAttributes, + data: ctx.initValue(), + selectOnFocus: true, + inputBehaviours: derive$1([ + Disabling.config({ + disabled: () => providers.checkUiComponentContext('mode:design').shouldDisable + }), + toggleOnReceive(() => providers.checkUiComponentContext('mode:design')), + Keying.config({ + mode: 'special', + onEnter, + // These two lines need to be tested. They are about left and right bypassing + // any keyboard handling, and allowing left and right to be processed by the input + // Maybe this should go in an alloy sketch for Input? + onLeft: (comp, se) => { + se.cut(); + return Optional.none(); + }, + onRight: (comp, se) => { + se.cut(); + return Optional.none(); + } + }), + config('input-events', [ + onControlAttached({ + onSetup: ctx.onSetup, + getApi: (comp) => { + const closestFocussableOpt = ancestor$1(comp.element, '.tox-toolbar').bind((toolbar) => descendant(toolbar, 'button:enabled')); + return closestFocussableOpt.fold(() => getFormParentApi(comp, valueState), (closestFocussable) => getFormParentApi(comp, valueState, closestFocussable)); + }, + onBeforeSetup: Keying.focusIn + }, editorOffCell), + onContextFormControlDetached({ getApi: getFormApi }, editorOffCell, valueState), + run$1(input(), (comp) => { + ctx.onInput(getFormApi(comp)); + }) + ]) + ]) + }); + return createContextFormFieldFromParts(pLabel, pField, providers); + }; + + const buildInitGroup = (f, ctx, providers) => { + const valueState = value$2(); + const onEnter = (input) => { + return startCommands.findPrimary(input).orThunk(() => endCommands.findPrimary(input)).map((primary) => { + emitExecute(primary); + return true; + }); + }; + const memInput = record(f(providers, onEnter, valueState)); + const commandParts = partition$3(ctx.commands, (command) => command.align === 'start'); + const startCommands = generate(memInput, commandParts.pass, providers, valueState); + const endCommands = generate(memInput, commandParts.fail, providers, valueState); + return filter$2([ + { + title: Optional.none(), + label: Optional.none(), + items: startCommands.asSpecs() + }, + { + title: Optional.none(), + label: Optional.none(), + items: [memInput.asSpec()] + }, + { + title: Optional.none(), + label: Optional.none(), + items: endCommands.asSpecs() + } + ], (group) => group.items.length > 0); + }; + const buildInitGroups = (ctx, providers) => { + switch (ctx.type) { + case 'contextform': return buildInitGroup(curry(renderContextFormTextInput, ctx), ctx, providers); + case 'contextsliderform': return buildInitGroup(curry(renderContextFormSliderInput, ctx), ctx, providers); + case 'contextsizeinputform': return buildInitGroup(curry(renderContextFormSizeInput, ctx), ctx, providers); + } + }; + const renderContextForm = (toolbarType, ctx, providers) => renderToolbar({ + type: toolbarType, + uid: generate$6('context-toolbar'), + initGroups: buildInitGroups(ctx, providers), + onEscape: Optional.none, + cyclicKeying: true, + providers + }); + const ContextForm = { + renderContextForm, + buildInitGroups + }; + + // The "threshold" here is the amount of overlap. To make the overlap check + // be more permissive (return true for 'almost' an overlap), use a negative + // threshold value + const isVerticalOverlap = (a, b, threshold) => b.bottom - a.y >= threshold && a.bottom - b.y >= threshold; + const getRangeRect = (rng) => { + const rect = rng.getBoundingClientRect(); + // Some ranges (eg
) will return a 0x0 rect, so we'll need to calculate it from the leaf instead + if (rect.height <= 0 && rect.width <= 0) { + const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset).element; + const elm = isText(leaf$1) ? parent(leaf$1) : Optional.some(leaf$1); + return elm.filter(isElement$1) + .map((e) => e.dom.getBoundingClientRect()) + // We have nothing valid, so just fallback to the original rect + .getOr(rect); + } + else { + return rect; + } + }; + const getSelectionBounds = (editor) => { + const rng = editor.selection.getRng(); + const rect = getRangeRect(rng); + if (editor.inline) { + const scroll = get$b(); + return bounds(scroll.left + rect.left, scroll.top + rect.top, rect.width, rect.height); + } + else { + // Translate to the top level document, as rect is relative to the iframe viewport + const bodyPos = absolute$2(SugarElement.fromDom(editor.getBody())); + return bounds(bodyPos.x + rect.left, bodyPos.y + rect.top, rect.width, rect.height); + } + }; + const getAnchorElementBounds = (editor, lastElement) => lastElement + .filter((elem) => inBody(elem) && isHTMLElement(elem)) + .map(absolute$2) + .getOrThunk(() => getSelectionBounds(editor)); + const getHorizontalBounds = (contentAreaBox, viewportBounds, margin) => { + const x = Math.max(contentAreaBox.x + margin, viewportBounds.x); + const right = Math.min(contentAreaBox.right - margin, viewportBounds.right); + return { x, width: right - x }; + }; + const getVerticalBounds = (editor, contentAreaBox, viewportBounds, isToolbarLocationTop, toolbarType, margin) => { + const container = SugarElement.fromDom(editor.getContainer()); + const header = descendant(container, '.tox-editor-header').getOr(container); + const headerBox = box$1(header); + const isToolbarBelowContentArea = headerBox.y >= contentAreaBox.bottom; + const isToolbarAbove = isToolbarLocationTop && !isToolbarBelowContentArea; + // Scenario toolbar top & inline: Bottom of the header -> Bottom of the viewport + if (editor.inline && isToolbarAbove) { + return { + y: Math.max(headerBox.bottom + margin, viewportBounds.y), + bottom: viewportBounds.bottom + }; + } + // Scenario toolbar top & inline: Top of the viewport -> Top of the header + if (editor.inline && !isToolbarAbove) { + return { + y: viewportBounds.y, + bottom: Math.min(headerBox.y - margin, viewportBounds.bottom) + }; + } + // Allow line based context toolbar to overlap the statusbar + const containerBounds = toolbarType === 'line' ? box$1(container) : contentAreaBox; + // Scenario toolbar bottom & Iframe: Bottom of the header -> Bottom of the editor container + if (isToolbarAbove) { + return { + y: Math.max(headerBox.bottom + margin, viewportBounds.y), + bottom: Math.min(containerBounds.bottom - margin, viewportBounds.bottom) + }; + } + // Scenario toolbar bottom & Iframe: Top of the editor container -> Top of the header + return { + y: Math.max(containerBounds.y + margin, viewportBounds.y), + bottom: Math.min(headerBox.y - margin, viewportBounds.bottom) + }; + }; + const getContextToolbarBounds = (editor, sharedBackstage, toolbarType, margin = 0) => { + const viewportBounds = getBounds$1(window); + const contentAreaBox = box$1(SugarElement.fromDom(editor.getContentAreaContainer())); + const toolbarOrMenubarEnabled = isMenubarEnabled(editor) || isToolbarEnabled(editor) || isMultipleToolbars(editor); + const { x, width } = getHorizontalBounds(contentAreaBox, viewportBounds, margin); + // Create bounds that lets the context toolbar overflow outside the content area, but remains in the viewport + if (editor.inline && !toolbarOrMenubarEnabled) { + return bounds(x, viewportBounds.y, width, viewportBounds.height); + } + else { + const isToolbarTop = sharedBackstage.header.isPositionedAtTop(); + const { y, bottom } = getVerticalBounds(editor, contentAreaBox, viewportBounds, isToolbarTop, toolbarType, margin); + return bounds(x, y, width, bottom - y); + } + }; + + const bubbleSize$1 = 12; + const bubbleAlignments$1 = { + valignCentre: [], + alignCentre: [], + alignLeft: ['tox-pop--align-left'], + alignRight: ['tox-pop--align-right'], + right: ['tox-pop--right'], + left: ['tox-pop--left'], + bottom: ['tox-pop--bottom'], + top: ['tox-pop--top'], + inset: ['tox-pop--inset'] + }; + const anchorOverrides = { + maxHeightFunction: expandable$1(), + maxWidthFunction: expandable() + }; + const isEntireElementSelected = (editor, elem) => { + const rng = editor.selection.getRng(); + const leaf$1 = leaf(SugarElement.fromDom(rng.startContainer), rng.startOffset); + return rng.startContainer === rng.endContainer && rng.startOffset === rng.endOffset - 1 && eq(leaf$1.element, elem); + }; + const preservePosition = (elem, position, f) => { + const currentPosition = getRaw(elem, 'position'); + set$7(elem, 'position', position); + const result = f(elem); + currentPosition.each((pos) => set$7(elem, 'position', pos)); + return result; + }; + // Don't use an inset layout when using a selection/line based anchors as it'll cover the content and can't be moved out the way + const shouldUseInsetLayouts = (position) => position === 'node'; + /** + * This function is designed to attempt to intelligently detect where the contextbar should be anchored when using an inside + * layout. It will attempt to preserve the previous outside placement when anchoring to the same element. However, when the + * placement is re-triggered (e.g. not triggered by a reposition) and the current editor selection overlaps with the contextbar, + * then the anchoring should flip from the previous position to avoid conflicting with the selection. + */ + const determineInsetLayout = (editor, contextbar, elem, data, bounds) => { + const selectionBounds = getSelectionBounds(editor); + const isSameAnchorElement = data.lastElement().exists((prev) => eq(elem, prev)); + if (isEntireElementSelected(editor, elem)) { + // The entire anchor element is selected so it'll always overlap with the selection, in which case just + // preserve or show at the top for a new anchor element. + return isSameAnchorElement ? preserve$1 : north$1; + } + else if (isSameAnchorElement) { + // Preserve the position, get the bounds and then see if we have an overlap. + // If overlapping and this wasn't triggered by a reposition then flip the placement + return preservePosition(contextbar, data.getMode(), () => { + // TINY-8890: The negative 20px threshold here was arrived at by considering the use + // case of a table with default heights for the rows. The threshold had to be + // large enough so that the context toolbar would not prevent the user selecting + // in the row containing the context toolbar. + const isOverlapping = isVerticalOverlap(selectionBounds, box$1(contextbar), -20); + return isOverlapping && !data.isReposition() ? flip : preserve$1; + }); + } + else { + // Attempt to find the best layout to use that won't cause an overlap for the new anchor element + // Note: In fixed positioning mode we need to translate by adding the scroll pos to get the absolute position + const yBounds = data.getMode() === 'fixed' ? bounds.y + get$b().top : bounds.y; + const contextbarHeight = get$d(contextbar) + bubbleSize$1; + return yBounds + contextbarHeight <= selectionBounds.y ? north$1 : south$1; + } + }; + const getAnchorSpec$2 = (editor, mobile, data, position) => { + // IMPORTANT: We lazily determine the layout here so that we only do the calculations if absolutely necessary + const smartInsetLayout = (elem) => (anchor, element, bubbles, placee, bounds) => { + const layout = determineInsetLayout(editor, placee, elem, data, bounds); + // Adjust the anchor box to use the passed y bound coords so that we simulate a "docking" type of behaviour + const newAnchor = { + ...anchor, + y: bounds.y, + height: bounds.height + }; + return { + ...layout(newAnchor, element, bubbles, placee, bounds), + // Ensure this is always the preferred option if no outside layouts fit + alwaysFit: true + }; + }; + const getInsetLayouts = (elem) => shouldUseInsetLayouts(position) ? [smartInsetLayout(elem)] : []; + // On desktop we prioritise north-then-south because it's cleaner, but on mobile we prioritise south to try to avoid overlapping with native context toolbars + const desktopAnchorSpecLayouts = { + onLtr: (elem) => [north$2, south$2, northeast$2, southeast$2, northwest$2, southwest$2].concat(getInsetLayouts(elem)), + onRtl: (elem) => [north$2, south$2, northwest$2, southwest$2, northeast$2, southeast$2].concat(getInsetLayouts(elem)) + }; + const mobileAnchorSpecLayouts = { + onLtr: (elem) => [south$2, southeast$2, southwest$2, northeast$2, northwest$2, north$2].concat(getInsetLayouts(elem)), + onRtl: (elem) => [south$2, southwest$2, southeast$2, northwest$2, northeast$2, north$2].concat(getInsetLayouts(elem)) + }; + return mobile ? mobileAnchorSpecLayouts : desktopAnchorSpecLayouts; + }; + const getAnchorLayout = (editor, position, isTouch, data) => { + if (position === 'line') { + return { + bubble: nu$6(bubbleSize$1, 0, bubbleAlignments$1), + layouts: { + onLtr: () => [east$2], + onRtl: () => [west$2] + }, + overrides: anchorOverrides + }; + } + else { + return { + // Ensure that inset layouts use a 1px bubble since we're hiding the bubble arrow + bubble: nu$6(0, bubbleSize$1, bubbleAlignments$1, 1 / bubbleSize$1), + layouts: getAnchorSpec$2(editor, isTouch, data, position), + overrides: anchorOverrides + }; + } + }; + + const matchTargetWith = (elem, candidates) => { + const ctxs = filter$2(candidates, (toolbarApi) => toolbarApi.predicate(elem.dom)); + // TODO: somehow type this properly (Arr.partition can't) + // e.g. here pass is Toolbar.ContextToolbar and fail is Toolbar.ContextForm + const { pass, fail } = partition$3(ctxs, (t) => t.type === 'contexttoolbar'); + return { + contextToolbars: pass, + contextForms: fail + }; + }; + const filterByPositionForStartNode = (toolbars) => { + if (toolbars.length <= 1) { + return toolbars; + } + else { + const doesPositionExist = (value) => exists(toolbars, (t) => t.position === value); + const filterToolbarsByPosition = (value) => filter$2(toolbars, (t) => t.position === value); + const hasSelectionToolbars = doesPositionExist('selection'); + const hasNodeToolbars = doesPositionExist('node'); + if (hasSelectionToolbars || hasNodeToolbars) { + if (hasNodeToolbars && hasSelectionToolbars) { + // if there's a mix, change the 'selection' toolbars to 'node' so there's no positioning confusion + const nodeToolbars = filterToolbarsByPosition('node'); + const selectionToolbars = map$2(filterToolbarsByPosition('selection'), (t) => ({ ...t, position: 'node' })); + return nodeToolbars.concat(selectionToolbars); + } + else { + return hasSelectionToolbars ? filterToolbarsByPosition('selection') : filterToolbarsByPosition('node'); + } + } + else { + return filterToolbarsByPosition('line'); + } + } + }; + const filterByPositionForAncestorNode = (toolbars) => { + if (toolbars.length <= 1) { + return toolbars; + } + else { + const findPosition = (value) => find$5(toolbars, (t) => t.position === value); + // prioritise position by 'selection' -> 'node' -> 'line' + const basePosition = findPosition('selection') + .orThunk(() => findPosition('node')) + .orThunk(() => findPosition('line')) + .map((t) => t.position); + return basePosition.fold(() => [], (pos) => filter$2(toolbars, (t) => t.position === pos)); + } + }; + const matchStartNode = (elem, nodeCandidates, editorCandidates) => { + // requirements: + // 1. prioritise context forms over context menus + // 2. prioritise node scoped over editor scoped context forms + // 3. only show max 1 context form + // 4. concatenate all available context toolbars if no context form + const nodeMatches = matchTargetWith(elem, nodeCandidates); + if (nodeMatches.contextForms.length > 0) { + return Optional.some({ elem, toolbars: [nodeMatches.contextForms[0]] }); + } + else { + const editorMatches = matchTargetWith(elem, editorCandidates); + if (editorMatches.contextForms.length > 0) { + return Optional.some({ elem, toolbars: [editorMatches.contextForms[0]] }); + } + else if (nodeMatches.contextToolbars.length > 0 || editorMatches.contextToolbars.length > 0) { + const toolbars = filterByPositionForStartNode(nodeMatches.contextToolbars.concat(editorMatches.contextToolbars)); + return Optional.some({ elem, toolbars }); + } + else { + return Optional.none(); + } + } + }; + const matchAncestor = (isRoot, startNode, scopes) => { + // Don't continue to traverse if the start node is the root node + if (isRoot(startNode)) { + return Optional.none(); + } + else { + return ancestor(startNode, (ancestorElem) => { + if (isElement$1(ancestorElem)) { + const { contextToolbars, contextForms } = matchTargetWith(ancestorElem, scopes.inNodeScope); + const toolbars = contextForms.length > 0 ? contextForms : filterByPositionForAncestorNode(contextToolbars); + return toolbars.length > 0 ? Optional.some({ elem: ancestorElem, toolbars }) : Optional.none(); + } + else { + return Optional.none(); + } + }, isRoot); + } + }; + const lookup$1 = (scopes, editor) => { + const rootElem = SugarElement.fromDom(editor.getBody()); + const isRoot = (elem) => eq(elem, rootElem); + const isOutsideRoot = (startNode) => !isRoot(startNode) && !contains(rootElem, startNode); + const startNode = SugarElement.fromDom(editor.selection.getNode()); + // Ensure the lookup doesn't start on a parent or sibling element of the root node + if (isOutsideRoot(startNode)) { + return Optional.none(); + } + return matchStartNode(startNode, scopes.inNodeScope, scopes.inEditorScope).orThunk(() => matchAncestor(isRoot, startNode, scopes)); + }; + + const categorise = (contextToolbars, navigate) => { + // TODO: Use foldl/foldr and avoid as much mutation. + const forms = {}; + const inNodeScope = []; + const inEditorScope = []; + const formNavigators = {}; + const lookupTable = {}; + const registerForm = (key, toolbarSpec) => { + const contextForm = getOrDie(createContextForm(toolbarSpec)); + forms[key] = contextForm; + contextForm.launch.map((launch) => { + // Use the original here (pre-boulder), because using as a the spec for toolbar buttons + formNavigators['form:' + key + ''] = { + ...toolbarSpec.launch, + type: (launch.type === 'contextformtogglebutton' ? 'togglebutton' : 'button'), + onAction: () => { + navigate(contextForm); + } + }; + }); + if (contextForm.scope === 'editor') { + inEditorScope.push(contextForm); + } + else { + inNodeScope.push(contextForm); + } + lookupTable[key] = contextForm; + }; + const registerToolbar = (key, toolbarSpec) => { + createContextToolbar(toolbarSpec).each((contextToolbar) => { + if (contextToolbar.launch.isSome()) { + formNavigators['toolbar:' + key + ''] = { + ...toolbarSpec.launch, + type: 'button', + onAction: () => { + navigate(contextToolbar); + } + }; + } + if (toolbarSpec.scope === 'editor') { + inEditorScope.push(contextToolbar); + } + else { + inNodeScope.push(contextToolbar); + } + lookupTable[key] = contextToolbar; + }); + }; + const keys$1 = keys(contextToolbars); + each$1(keys$1, (key) => { + const toolbarApi = contextToolbars[key]; + if (toolbarApi.type === 'contextform' || toolbarApi.type === 'contextsliderform' || toolbarApi.type === 'contextsizeinputform') { + registerForm(key, toolbarApi); + } + else if (toolbarApi.type === 'contexttoolbar') { + registerToolbar(key, toolbarApi); + } + }); + return { + forms, + inNodeScope, + inEditorScope, + lookupTable, + formNavigators + }; + }; + + const transitionClass = 'tox-pop--transition'; + const isToolbarActionKey = (keyCode) => keyCode === global$1.ENTER || keyCode === global$1.SPACEBAR; + const register$a = (editor, registryContextToolbars, sink, extras) => { + const backstage = extras.backstage; + const sharedBackstage = backstage.shared; + const isTouch = detect$1().deviceType.isTouch; + const lastElement = value$2(); + const lastTrigger = value$2(); + const lastContextPosition = value$2(); + const contextToolbarResult = renderContextToolbar({ + sink, + onEscape: () => { + editor.focus(); + fireContextToolbarClose(editor); + return Optional.some(true); + }, + onHide: () => { + fireContextToolbarClose(editor); + }, + onBack: () => { + fireContextFormSlideBack(editor); + }, + focusElement: (el) => { + if (editor.getBody().contains(el.dom)) { + editor.focus(); + } + else { + focus$4(el); + } + } + }); + const contextbar = build$1(contextToolbarResult.sketch); + const getBounds = () => { + const position = lastContextPosition.get().getOr('node'); + // Use a 1px margin for the bounds to keep the context toolbar from butting directly against + // the header, etc... when switching to inset layouts + const margin = shouldUseInsetLayouts(position) ? 1 : 0; + return getContextToolbarBounds(editor, sharedBackstage, position, margin); + }; + const canLaunchToolbar = () => { + // If a mobile context menu is open, don't launch else they'll probably overlap. For android, specifically. + return !editor.removed && !(isTouch() && backstage.isContextMenuOpen()); + }; + const isSameLaunchElement = (elem) => is$1(lift2(elem, lastElement.get(), eq), true); + const shouldContextToolbarHide = () => { + if (!canLaunchToolbar()) { + return true; + } + else { + const contextToolbarBounds = getBounds(); + // Get the anchor bounds. For node anchors we should always try to use the last element bounds + const anchorBounds = is$1(lastContextPosition.get(), 'node') ? + getAnchorElementBounds(editor, lastElement.get()) : + getSelectionBounds(editor); + // If the anchor bounds aren't overlapping with the context toolbar bounds, then the context toolbar + // should hide. We want the threshold to require some overlap here (+.01), so that as soon as the + // anchor is off-screen, the context toolbar disappers. + return contextToolbarBounds.height <= 0 || !isVerticalOverlap(anchorBounds, contextToolbarBounds, 0.01); + } + }; + const close = () => { + lastElement.clear(); + lastTrigger.clear(); + lastContextPosition.clear(); + InlineView.hide(contextbar); + }; + const hideOrRepositionIfNecessary = () => { + if (InlineView.isOpen(contextbar)) { + const contextBarEle = contextbar.element; + remove$6(contextBarEle, 'display'); + if (shouldContextToolbarHide()) { + set$7(contextBarEle, 'display', 'none'); + } + else { + lastTrigger.set(0 /* TriggerCause.Reposition */); + InlineView.reposition(contextbar); + } + } + }; + const wrapInPopDialog = (toolbarSpec) => ({ + dom: { + tag: 'div', + classes: ['tox-pop__dialog'] + }, + components: [toolbarSpec], + behaviours: derive$1([ + Keying.config({ + mode: 'acyclic' + }), + config('pop-dialog-wrap-events', [ + runOnAttached((comp) => { + editor.shortcuts.add('ctrl+F9', 'focus statusbar', () => Keying.focusIn(comp)); + }), + runOnDetached((_comp) => { + editor.shortcuts.remove('ctrl+F9'); + }) + ]) + ]) + }); + const navigate = (toolbarApi) => { + // ASSUMPTION: This should only ever show one context toolbar since it's used for context forms hence [toolbarApi] + const alloySpec = buildToolbar([toolbarApi]); + emitWith(contextbar, forwardSlideEvent, { + forwardContents: wrapInPopDialog(alloySpec) + }); + }; + const getScopes = cached(() => categorise(registryContextToolbars, navigate)); + const buildContextToolbarGroups = (allButtons, ctx) => { + return identifyButtons(editor, { buttons: allButtons, toolbar: ctx.items, allowToolbarGroups: false }, extras.backstage, Optional.some(['form:', 'toolbar:'])); + }; + const buildContextFormGroups = (ctx, providers) => ContextForm.buildInitGroups(ctx, providers); + const buildToolbar = (toolbars) => { + const { buttons } = editor.ui.registry.getAll(); + const scopes = getScopes(); + const allButtons = { ...buttons, ...scopes.formNavigators }; + // For context toolbars we don't want to use floating or sliding, so just restrict this + // to scrolling or wrapping (default) + const toolbarType = getToolbarMode(editor) === ToolbarMode$1.scrolling ? ToolbarMode$1.scrolling : ToolbarMode$1.default; + const initGroups = flatten(map$2(toolbars, (ctx) => ctx.type === 'contexttoolbar' ? buildContextToolbarGroups(allButtons, contextToolbarToSpec(ctx)) : buildContextFormGroups(ctx, sharedBackstage.providers))); + return renderToolbar({ + type: toolbarType, + uid: generate$6('context-toolbar'), + initGroups, + onEscape: Optional.none, + cyclicKeying: true, + providers: sharedBackstage.providers + }); + }; + const getAnchor = (position, element) => { + const anchorage = position === 'node' ? sharedBackstage.anchors.node(element) : sharedBackstage.anchors.cursor(); + const anchorLayout = getAnchorLayout(editor, position, isTouch(), { + lastElement: lastElement.get, + isReposition: () => is$1(lastTrigger.get(), 0 /* TriggerCause.Reposition */), + getMode: () => Positioning.getMode(sink) + }); + return deepMerge(anchorage, anchorLayout); + }; + const launchContext = (toolbarApi, elem) => { + launchContextToolbar.cancel(); + // Don't launch if the editor has something else open that would conflict + if (!canLaunchToolbar()) { + return; + } + const toolbarSpec = buildToolbar(toolbarApi); + // TINY-4495 ASSUMPTION: Can only do toolbarApi[0].position because ContextToolbarLookup.filterToolbarsByPosition + // ensures all toolbars returned by ContextToolbarLookup have the same position. + // And everything else that gets toolbars from elsewhere only returns maximum 1 toolbar + const position = toolbarApi[0].position; + const anchor = getAnchor(position, elem); + lastContextPosition.set(position); + lastTrigger.set(1 /* TriggerCause.NewAnchor */); + const contextBarEle = contextbar.element; + remove$6(contextBarEle, 'display'); + // Reset placement and transitions when moving to different elements + if (!isSameLaunchElement(elem)) { + remove$3(contextBarEle, transitionClass); + Positioning.reset(sink, contextbar); + } + // Place the element + InlineView.showWithinBounds(contextbar, wrapInPopDialog(toolbarSpec), { + anchor, + transition: { + classes: [transitionClass], + mode: 'placement' + } + }, () => Optional.some(getBounds())); + // IMPORTANT: This must be stored after the initial render, otherwise the lookup of the last element in the + // anchor placement will be incorrect as it'll reuse the new element as the anchor point. + elem.fold(lastElement.clear, lastElement.set); + // It's possible we may have launched offscreen, if so then hide + if (shouldContextToolbarHide()) { + set$7(contextBarEle, 'display', 'none'); + } + }; + const instantReposition = () => { + // Sometimes when we reposition the toolbar it might be in a transitioning state and + // if we try to reposition while that happens the computed position/width will be incorrect. + set$7(contextbar.element, 'transition', 'none'); + hideOrRepositionIfNecessary(); + remove$6(contextbar.element, 'transition'); + }; + let isDragging = false; + const launchContextToolbar = last(() => { + // Don't launch if the editor doesn't have focus or has been destroyed + if (!editor.hasFocus() || editor.removed || isDragging) { + return; + } + // If currently transitioning then throttle again so we don't interrupt the transition + if (has(contextbar.element, transitionClass)) { + launchContextToolbar.throttle(); + } + else { + const scopes = getScopes(); + lookup$1(scopes, editor).fold(close, (info) => { + launchContext(info.toolbars, Optional.some(info.elem)); + }); + } + }, 17); // 17ms is used as that's about 1 frame at 60fps + editor.on('init', () => { + editor.on('remove', close); + editor.on('ScrollContent ScrollWindow ObjectResized ResizeEditor longpress', hideOrRepositionIfNecessary); + // FIX: Make it go away when the action makes it go away. E.g. deleting a column deletes the table. + editor.on('click focus SetContent', launchContextToolbar.throttle); + editor.on('keyup', (e) => { + // If you use keyboard to press a button in a subtoolbar then the keyup will happen inside the editor and that should not re-render the toolbar + if (!isToolbarActionKey(e.keyCode) || !contextToolbarResult.inSubtoolbar()) { + launchContextToolbar.throttle(); + } + }); + editor.on(hideContextToolbarEvent, close); + editor.on(showContextToolbarEvent, (e) => { + const scopes = getScopes(); + // TODO: Have this stored in a better structure + get$h(scopes.lookupTable, e.toolbarKey).each((ctx) => { + // ASSUMPTION: this is only used to open one specific toolbar at a time, hence [ctx] + launchContext([ctx], someIf(e.target !== editor, e.target)); + focusIn(contextbar); + }); + }); + editor.on('focusout', (_e) => { + global$a.setEditorTimeout(editor, () => { + if (search(sink.element).isNone() && search(contextbar.element).isNone() && !editor.hasFocus()) { + close(); + } + }, 0); + }); + editor.on('SwitchMode', () => { + if (editor.mode.isReadOnly()) { + close(); + } + }); + editor.on('DisabledStateChange', (e) => { + if (e.state) { + close(); + } + }); + // TINY-10640: Firefox was flaking in tests and was not properly dismissing the toolbar could not reproduce it manually but adding this seems to resolve it. + editor.on('ExecCommand', ({ command }) => { + if (command.toLowerCase() === 'toggleview') { + close(); + } + }); + editor.on('AfterProgressState', (event) => { + if (event.state) { + close(); + } + else if (editor.hasFocus()) { + launchContextToolbar.throttle(); + } + }); + editor.on('dragstart', () => { + isDragging = true; + }); + editor.on('dragend drop', () => { + isDragging = false; + }); + editor.on('NodeChange', (_e) => { + if (!contextToolbarResult.inSubtoolbar()) { + search(contextbar.element).fold(launchContextToolbar.throttle, noop); + } + else { + instantReposition(); + } + }); + }); + }; + + const register$9 = (editor) => { + const alignToolbarButtons = [ + { name: 'alignleft', text: 'Align left', cmd: 'JustifyLeft', icon: 'align-left' }, + { name: 'aligncenter', text: 'Align center', cmd: 'JustifyCenter', icon: 'align-center' }, + { name: 'alignright', text: 'Align right', cmd: 'JustifyRight', icon: 'align-right' }, + { name: 'alignjustify', text: 'Justify', cmd: 'JustifyFull', icon: 'align-justify' } + ]; + each$1(alignToolbarButtons, (item) => { + editor.ui.registry.addToggleButton(item.name, { + tooltip: item.text, + icon: item.icon, + onAction: onActionExecCommand(editor, item.cmd), + onSetup: onSetupStateToggle(editor, item.name) + }); + }); + editor.ui.registry.addButton('alignnone', { + tooltip: 'No alignment', + icon: 'align-none', + onSetup: onSetupEditableToggle(editor), + onAction: onActionExecCommand(editor, 'JustifyNone') + }); + }; + + const registerController = (editor, spec) => { + const getMenuItems = () => { + const options = spec.getOptions(editor); + const initial = spec.getCurrent(editor).map(spec.hash); + const current = value$2(); + return map$2(options, (value) => ({ + type: 'togglemenuitem', + text: spec.display(value), + onSetup: (api) => { + const setActive = (active) => { + if (active) { + current.on((oldApi) => oldApi.setActive(false)); + current.set(api); + } + api.setActive(active); + }; + setActive(is$1(initial, spec.hash(value))); + const unbindWatcher = spec.watcher(editor, value, setActive); + return () => { + current.clear(); + unbindWatcher(); + }; + }, + onAction: () => spec.setCurrent(editor, value) + })); + }; + editor.ui.registry.addMenuButton(spec.name, { + tooltip: spec.text, + icon: spec.icon, + fetch: (callback) => callback(getMenuItems()), + onSetup: spec.onToolbarSetup + }); + editor.ui.registry.addNestedMenuItem(spec.name, { + type: 'nestedmenuitem', + text: spec.text, + getSubmenuItems: getMenuItems, + onSetup: spec.onMenuSetup + }); + }; + const lineHeightSpec = (editor) => ({ + name: 'lineheight', + text: 'Line height', + icon: 'line-height', + getOptions: getLineHeightFormats, + hash: (input) => normalise(input, ['fixed', 'relative', 'empty']).getOr(input), + display: identity, + watcher: (editor, value, callback) => editor.formatter.formatChanged('lineheight', callback, false, { value }).unbind, + getCurrent: (editor) => Optional.from(editor.queryCommandValue('LineHeight')), + setCurrent: (editor, value) => editor.execCommand('LineHeight', false, value), + onToolbarSetup: onSetupEditableToggle(editor), + onMenuSetup: onSetupEditableToggle(editor) + }); + const languageSpec = (editor) => { + const settingsOpt = Optional.from(getContentLanguages(editor)); + return settingsOpt.map((settings) => ({ + name: 'language', + text: 'Language', + icon: 'language', + getOptions: constant$1(settings), + hash: (input) => isUndefined(input.customCode) ? input.code : `${input.code}/${input.customCode}`, + display: (input) => input.title, + watcher: (editor, value, callback) => editor.formatter.formatChanged('lang', callback, false, { value: value.code, customValue: value.customCode ?? null }).unbind, + getCurrent: (editor) => { + const node = SugarElement.fromDom(editor.selection.getNode()); + return closest(node, (n) => Optional.some(n) + .filter(isElement$1) + .bind((ele) => { + const codeOpt = getOpt(ele, 'lang'); + return codeOpt.map((code) => { + const customCode = getOpt(ele, 'data-mce-lang').getOrUndefined(); + return { code, customCode, title: '' }; + }); + })); + }, + setCurrent: (editor, lang) => editor.execCommand('Lang', false, lang), + onToolbarSetup: (api) => { + const unbinder = unbindable(); + api.setActive(editor.formatter.match('lang', {}, undefined, true)); + unbinder.set(editor.formatter.formatChanged('lang', api.setActive, true)); + return composeUnbinders(unbinder.clear, onSetupEditableToggle(editor)(api)); + }, + onMenuSetup: onSetupEditableToggle(editor) + })); + }; + const register$8 = (editor) => { + registerController(editor, lineHeightSpec(editor)); + languageSpec(editor).each((spec) => registerController(editor, spec)); + }; + + const register$7 = (editor, backstage) => { + createAlignMenu(editor, backstage); + createFontFamilyMenu(editor, backstage); + createStylesMenu(editor, backstage); + createBlocksMenu(editor, backstage); + createFontSizeMenu(editor, backstage); + }; + + const register$6 = (editor) => { + editor.ui.registry.addContext('editable', () => { + return editor.selection.isEditable(); + }); + editor.ui.registry.addContext('mode', (mode) => { + return editor.mode.get() === mode; + }); + editor.ui.registry.addContext('any', always); + editor.ui.registry.addContext('formatting', (format) => { + return editor.formatter.canApply(format); + }); + editor.ui.registry.addContext('insert', (child) => { + return editor.schema.isValidChild(editor.selection.getNode().tagName, child); + }); + }; + + const onSetupOutdentState = (editor) => onSetupEvent(editor, 'NodeChange', (api) => { + api.setEnabled(editor.queryCommandState('outdent') && editor.selection.isEditable()); + }); + const registerButtons$2 = (editor) => { + editor.ui.registry.addButton('outdent', { + tooltip: 'Decrease indent', + icon: 'outdent', + onSetup: onSetupOutdentState(editor), + onAction: onActionExecCommand(editor, 'outdent') + }); + editor.ui.registry.addButton('indent', { + tooltip: 'Increase indent', + icon: 'indent', + onSetup: onSetupEditableToggle(editor, () => editor.queryCommandState('indent')), + onAction: onActionExecCommand(editor, 'indent') + }); + }; + const register$5 = (editor) => { + registerButtons$2(editor); + }; + + const makeSetupHandler = (editor, pasteAsText) => (api) => { + api.setActive(pasteAsText.get()); + const pastePlainTextToggleHandler = (e) => { + pasteAsText.set(e.state); + api.setActive(e.state); + }; + editor.on('PastePlainTextToggle', pastePlainTextToggleHandler); + return composeUnbinders(() => editor.off('PastePlainTextToggle', pastePlainTextToggleHandler), onSetupEditableToggle(editor)(api)); + }; + const register$4 = (editor) => { + const pasteAsText = Cell(getPasteAsText(editor)); + const onAction = () => editor.execCommand('mceTogglePlainTextPaste'); + editor.ui.registry.addToggleButton('pastetext', { + active: false, + icon: 'paste-text', + tooltip: 'Paste as text', + onAction, + onSetup: makeSetupHandler(editor, pasteAsText) + }); + editor.ui.registry.addToggleMenuItem('pastetext', { + text: 'Paste as text', + icon: 'paste-text', + onAction, + onSetup: makeSetupHandler(editor, pasteAsText) + }); + }; + + const onActionToggleFormat = (editor, fmt) => () => { + editor.execCommand('mceToggleFormat', false, fmt); + }; + const registerFormatButtons = (editor) => { + global$2.each([ + { name: 'bold', text: 'Bold', icon: 'bold', shortcut: 'Meta+B' }, + { name: 'italic', text: 'Italic', icon: 'italic', shortcut: 'Meta+I' }, + { name: 'underline', text: 'Underline', icon: 'underline', shortcut: 'Meta+U' }, + { name: 'strikethrough', text: 'Strikethrough', icon: 'strike-through' }, + { name: 'subscript', text: 'Subscript', icon: 'subscript' }, + { name: 'superscript', text: 'Superscript', icon: 'superscript' } + ], (btn, _idx) => { + editor.ui.registry.addToggleButton(btn.name, { + tooltip: btn.text, + icon: btn.icon, + onSetup: onSetupStateToggle(editor, btn.name), + onAction: onActionToggleFormat(editor, btn.name), + shortcut: btn.shortcut + }); + }); + for (let i = 1; i <= 6; i++) { + const name = 'h' + i; + const shortcut = `Access+${i}`; + editor.ui.registry.addToggleButton(name, { + text: name.toUpperCase(), + tooltip: 'Heading ' + i, + onSetup: onSetupStateToggle(editor, name), + onAction: onActionToggleFormat(editor, name), + shortcut + }); + } + }; + const registerCommandButtons = (editor) => { + global$2.each([ + { name: 'copy', text: 'Copy', action: 'Copy', icon: 'copy', context: 'any' }, + { name: 'help', text: 'Help', action: 'mceHelp', icon: 'help', shortcut: 'Alt+0', context: 'any' }, + { name: 'selectall', text: 'Select all', action: 'SelectAll', icon: 'select-all', shortcut: 'Meta+A', context: 'any' }, + { name: 'newdocument', text: 'New document', action: 'mceNewDocument', icon: 'new-document' }, + { name: 'print', text: 'Print', action: 'mcePrint', icon: 'print', shortcut: 'Meta+P', context: 'any' }, + ], (btn) => { + editor.ui.registry.addButton(btn.name, { + tooltip: btn.text, + icon: btn.icon, + onAction: onActionExecCommand(editor, btn.action), + shortcut: btn.shortcut, + context: btn.context + }); + }); + global$2.each([ + { name: 'cut', text: 'Cut', action: 'Cut', icon: 'cut' }, + { name: 'paste', text: 'Paste', action: 'Paste', icon: 'paste' }, + // visualaid was here but also exists in VisualAid.ts? + { name: 'removeformat', text: 'Clear formatting', action: 'RemoveFormat', icon: 'remove-formatting' }, + { name: 'remove', text: 'Remove', action: 'Delete', icon: 'remove' }, + { name: 'hr', text: 'Horizontal line', action: 'InsertHorizontalRule', icon: 'horizontal-rule' } + ], (btn) => { + editor.ui.registry.addButton(btn.name, { + tooltip: btn.text, + icon: btn.icon, + onSetup: onSetupEditableToggle(editor), + onAction: onActionExecCommand(editor, btn.action) + }); + }); + }; + const registerCommandToggleButtons = (editor) => { + global$2.each([ + { name: 'blockquote', text: 'Blockquote', action: 'mceBlockQuote', icon: 'quote' } + ], (btn) => { + editor.ui.registry.addToggleButton(btn.name, { + tooltip: btn.text, + icon: btn.icon, + onAction: onActionExecCommand(editor, btn.action), + onSetup: onSetupStateToggle(editor, btn.name) + }); + }); + }; + const registerButtons$1 = (editor) => { + registerFormatButtons(editor); + registerCommandButtons(editor); + registerCommandToggleButtons(editor); + }; + const registerMenuItems$2 = (editor) => { + global$2.each([ + { name: 'newdocument', text: 'New document', action: 'mceNewDocument', icon: 'new-document' }, + { name: 'copy', text: 'Copy', action: 'Copy', icon: 'copy', shortcut: 'Meta+C', context: 'any' }, + { name: 'selectall', text: 'Select all', action: 'SelectAll', icon: 'select-all', shortcut: 'Meta+A', context: 'any' }, + { name: 'print', text: 'Print...', action: 'mcePrint', icon: 'print', shortcut: 'Meta+P', context: 'any' } + ], (menuitem) => { + editor.ui.registry.addMenuItem(menuitem.name, { + text: menuitem.text, + icon: menuitem.icon, + shortcut: menuitem.shortcut, + onAction: onActionExecCommand(editor, menuitem.action), + context: menuitem.context + }); + }); + global$2.each([ + { name: 'bold', text: 'Bold', action: 'Bold', icon: 'bold', shortcut: 'Meta+B' }, + { name: 'italic', text: 'Italic', action: 'Italic', icon: 'italic', shortcut: 'Meta+I' }, + { name: 'underline', text: 'Underline', action: 'Underline', icon: 'underline', shortcut: 'Meta+U' }, + { name: 'strikethrough', text: 'Strikethrough', action: 'Strikethrough', icon: 'strike-through' }, + { name: 'subscript', text: 'Subscript', action: 'Subscript', icon: 'subscript' }, + { name: 'superscript', text: 'Superscript', action: 'Superscript', icon: 'superscript' }, + { name: 'removeformat', text: 'Clear formatting', action: 'RemoveFormat', icon: 'remove-formatting' }, + { name: 'cut', text: 'Cut', action: 'Cut', icon: 'cut', shortcut: 'Meta+X' }, + { name: 'paste', text: 'Paste', action: 'Paste', icon: 'paste', shortcut: 'Meta+V' }, + { name: 'hr', text: 'Horizontal line', action: 'InsertHorizontalRule', icon: 'horizontal-rule' } + ], (menuitem) => { + editor.ui.registry.addMenuItem(menuitem.name, { + text: menuitem.text, + icon: menuitem.icon, + shortcut: menuitem.shortcut, + onSetup: onSetupEditableToggle(editor), + onAction: onActionExecCommand(editor, menuitem.action) + }); + }); + editor.ui.registry.addMenuItem('codeformat', { + text: 'Code', + icon: 'sourcecode', + onSetup: onSetupEditableToggle(editor), + onAction: onActionToggleFormat(editor, 'code') + }); + }; + const register$3 = (editor) => { + registerButtons$1(editor); + registerMenuItems$2(editor); + }; + + const onSetupUndoRedoState = (editor, type) => onSetupEvent(editor, 'Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', (api) => { + api.setEnabled(!editor.mode.isReadOnly() && editor.undoManager[type]()); + }); + const registerMenuItems$1 = (editor) => { + editor.ui.registry.addMenuItem('undo', { + text: 'Undo', + icon: 'undo', + shortcut: 'Meta+Z', + onSetup: onSetupUndoRedoState(editor, 'hasUndo'), + onAction: onActionExecCommand(editor, 'undo') + }); + editor.ui.registry.addMenuItem('redo', { + text: 'Redo', + icon: 'redo', + shortcut: 'Meta+Y', + onSetup: onSetupUndoRedoState(editor, 'hasRedo'), + onAction: onActionExecCommand(editor, 'redo') + }); + }; + // Note: The undo/redo buttons are disabled by default here, as they'll be rendered + // on init generally and it won't have any undo levels at that stage. + const registerButtons = (editor) => { + editor.ui.registry.addButton('undo', { + tooltip: 'Undo', + icon: 'undo', + enabled: false, + onSetup: onSetupUndoRedoState(editor, 'hasUndo'), + onAction: onActionExecCommand(editor, 'undo'), + shortcut: 'Meta+Z' + }); + editor.ui.registry.addButton('redo', { + tooltip: 'Redo', + icon: 'redo', + enabled: false, + onSetup: onSetupUndoRedoState(editor, 'hasRedo'), + onAction: onActionExecCommand(editor, 'redo'), + shortcut: 'Meta+Y' + }); + }; + const register$2 = (editor) => { + registerMenuItems$1(editor); + registerButtons(editor); + }; + + const onSetupVisualAidState = (editor) => onSetupEvent(editor, 'VisualAid', (api) => { + api.setActive(editor.hasVisual); + }); + const registerMenuItems = (editor) => { + editor.ui.registry.addToggleMenuItem('visualaid', { + text: 'Visual aids', + onSetup: onSetupVisualAidState(editor), + onAction: onActionExecCommand(editor, 'mceToggleVisualAid'), + context: 'any' + }); + }; + const registerToolbarButton = (editor) => { + editor.ui.registry.addButton('visualaid', { + tooltip: 'Visual aids', + text: 'Visual aids', + onAction: onActionExecCommand(editor, 'mceToggleVisualAid'), + context: 'any' + }); + }; + const register$1 = (editor) => { + registerToolbarButton(editor); + registerMenuItems(editor); + }; + + const setup$6 = (editor, backstage) => { + register$9(editor); + register$3(editor); + register$7(editor, backstage); + register$2(editor); + register$d(editor); + register$1(editor); + register$5(editor); + register$8(editor); + register$4(editor); + register$6(editor); + }; + + const patchPipeConfig = (config) => isString(config) ? config.split(/[ ,]/) : config; + const option = (name) => (editor) => editor.options.get(name); + const register = (editor) => { + const registerOption = editor.options.register; + registerOption('contextmenu_avoid_overlap', { + processor: 'string', + default: '' + }); + registerOption('contextmenu_never_use_native', { + processor: 'boolean', + default: false + }); + registerOption('contextmenu', { + processor: (value) => { + if (value === false) { + return { value: [], valid: true }; + } + else if (isString(value) || isArrayOf(value, isString)) { + return { value: patchPipeConfig(value), valid: true }; + } + else { + return { valid: false, message: 'Must be false or a string.' }; + } + }, + default: 'link linkchecker image editimage table spellchecker configurepermanentpen' + }); + }; + const shouldNeverUseNative = option('contextmenu_never_use_native'); + const getAvoidOverlapSelector = option('contextmenu_avoid_overlap'); + const isContextMenuDisabled = (editor) => getContextMenu(editor).length === 0; + const getContextMenu = (editor) => { + const contextMenus = editor.ui.registry.getAll().contextMenus; + const contextMenu = editor.options.get('contextmenu'); + if (editor.options.isSet('contextmenu')) { + return contextMenu; + } + else { + // Filter default context menu items when they are not in the registry (e.g. when the plugin is not loaded) + return filter$2(contextMenu, (item) => has$2(contextMenus, item)); + } + }; + + const nu = (x, y) => ({ + type: 'makeshift', + x, + y + }); + const transpose = (pos, dx, dy) => { + return nu(pos.x + dx, pos.y + dy); + }; + const isTouchEvent$1 = (e) => e.type === 'longpress' || e.type.indexOf('touch') === 0; + const fromPageXY = (e) => { + if (isTouchEvent$1(e)) { + const touch = e.touches[0]; + return nu(touch.pageX, touch.pageY); + } + else { + return nu(e.pageX, e.pageY); + } + }; + const fromClientXY = (e) => { + if (isTouchEvent$1(e)) { + const touch = e.touches[0]; + return nu(touch.clientX, touch.clientY); + } + else { + return nu(e.clientX, e.clientY); + } + }; + const transposeContentAreaContainer = (element, pos) => { + const containerPos = global$9.DOM.getPos(element); + return transpose(pos, containerPos.x, containerPos.y); + }; + const getPointAnchor = (editor, e) => { + // If the contextmenu event is fired via the editor.dispatch() API or some other means, fall back to selection anchor + if (e.type === 'contextmenu' || e.type === 'longpress') { + if (editor.inline) { + return fromPageXY(e); + } + else { + return transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e)); + } + } + else { + return getSelectionAnchor(editor); + } + }; + const getSelectionAnchor = (editor) => { + return { + type: 'selection', + root: SugarElement.fromDom(editor.selection.getNode()) + }; + }; + const getNodeAnchor = (editor) => ({ + type: 'node', + node: Optional.some(SugarElement.fromDom(editor.selection.getNode())), + root: SugarElement.fromDom(editor.getBody()) + }); + const getAnchorSpec$1 = (editor, e, anchorType) => { + switch (anchorType) { + case 'node': + return getNodeAnchor(editor); + case 'point': + return getPointAnchor(editor, e); + case 'selection': + return getSelectionAnchor(editor); + } + }; + + const initAndShow$1 = (editor, e, buildMenu, backstage, contextmenu, anchorType) => { + const items = buildMenu(); + const anchorSpec = getAnchorSpec$1(editor, e, anchorType); + build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, { + isHorizontalMenu: false, + search: Optional.none() + }).map((menuData) => { + e.preventDefault(); + // show the context menu, with items set to close on click + InlineView.showMenuAt(contextmenu, { anchor: anchorSpec }, { + menu: { + markers: markers('normal') + }, + data: menuData + }); + }); + }; + + const layouts = { + onLtr: () => [south$2, southeast$2, southwest$2, northeast$2, northwest$2, north$2, + north$1, south$1, northeast$1, southeast$1, northwest$1, southwest$1], + onRtl: () => [south$2, southwest$2, southeast$2, northwest$2, northeast$2, north$2, + north$1, south$1, northwest$1, southwest$1, northeast$1, southeast$1] + }; + const bubbleSize = 12; + const bubbleAlignments = { + valignCentre: [], + alignCentre: [], + alignLeft: ['tox-pop--align-left'], + alignRight: ['tox-pop--align-right'], + right: ['tox-pop--right'], + left: ['tox-pop--left'], + bottom: ['tox-pop--bottom'], + top: ['tox-pop--top'] + }; + const isTouchWithinSelection = (editor, e) => { + const selection = editor.selection; + if (selection.isCollapsed() || e.touches.length < 1) { + return false; + } + else { + const touch = e.touches[0]; + const rng = selection.getRng(); + const rngRectOpt = getFirstRect(editor.getWin(), SimSelection.domRange(rng)); + return rngRectOpt.exists((rngRect) => rngRect.left <= touch.clientX && + rngRect.right >= touch.clientX && + rngRect.top <= touch.clientY && + rngRect.bottom >= touch.clientY); + } + }; + const setupiOSOverrides = (editor) => { + // iOS will change the selection due to longpress also being a range selection gesture. As such we + // need to reset the selection back to the original selection after the touchend event has fired + const originalSelection = editor.selection.getRng(); + const selectionReset = () => { + global$a.setEditorTimeout(editor, () => { + editor.selection.setRng(originalSelection); + }, 10); + unbindEventListeners(); + }; + editor.once('touchend', selectionReset); + // iPadOS will trigger a mousedown after the longpress which will close open context menus + // so we want to prevent that from running + const preventMousedown = (e) => { + e.preventDefault(); + e.stopImmediatePropagation(); + }; + editor.on('mousedown', preventMousedown, true); + // If a longpresscancel is fired, then a touchmove has occurred so we shouldn't do any overrides + const clearSelectionReset = () => unbindEventListeners(); + editor.once('longpresscancel', clearSelectionReset); + const unbindEventListeners = () => { + editor.off('touchend', selectionReset); + editor.off('longpresscancel', clearSelectionReset); + editor.off('mousedown', preventMousedown); + }; + }; + const getAnchorSpec = (editor, e, anchorType) => { + const anchorSpec = getAnchorSpec$1(editor, e, anchorType); + const bubbleYOffset = anchorType === 'point' ? bubbleSize : 0; + return { + bubble: nu$6(0, bubbleYOffset, bubbleAlignments), + layouts, + overrides: { + maxWidthFunction: expandable(), + maxHeightFunction: expandable$1() + }, + ...anchorSpec + }; + }; + const show = (editor, e, items, backstage, contextmenu, anchorType, highlightImmediately) => { + const anchorSpec = getAnchorSpec(editor, e, anchorType); + build(items, ItemResponse$1.CLOSE_ON_EXECUTE, backstage, { + // MobileContextMenus are the *only* horizontal menus currently (2022-08-16) + isHorizontalMenu: true, + search: Optional.none() + }).map((menuData) => { + e.preventDefault(); + // If we are highlighting immediately, then we want to highlight the menu + // and the item. Otherwise, we don't want to highlight anything. + const highlightOnOpen = highlightImmediately + ? HighlightOnOpen.HighlightMenuAndItem + : HighlightOnOpen.HighlightNone; + // Show the context menu, with items set to close on click + InlineView.showMenuWithinBounds(contextmenu, { anchor: anchorSpec }, { + menu: { + markers: markers('normal'), + highlightOnOpen + }, + data: menuData, + type: 'horizontal' + }, () => Optional.some(getContextToolbarBounds(editor, backstage.shared, anchorType === 'node' ? 'node' : 'selection'))); + // Ensure the context toolbar is hidden + editor.dispatch(hideContextToolbarEvent); + }); + }; + const initAndShow = (editor, e, buildMenu, backstage, contextmenu, anchorType) => { + const detection = detect$1(); + const isiOS = detection.os.isiOS(); + const isMacOS = detection.os.isMacOS(); + const isAndroid = detection.os.isAndroid(); + const isTouch = detection.deviceType.isTouch(); + const shouldHighlightImmediately = () => !(isAndroid || isiOS || (isMacOS && isTouch)); + const open = () => { + const items = buildMenu(); + show(editor, e, items, backstage, contextmenu, anchorType, shouldHighlightImmediately()); + }; + // On iOS/iPadOS if we've long pressed on a ranged selection then we've already selected the content + // and just need to open the menu. Otherwise we need to wait for a selection change to occur as long + // press triggers a ranged selection on iOS. + if ((isMacOS || isiOS) && anchorType !== 'node') { + const openiOS = () => { + setupiOSOverrides(editor); + open(); + }; + if (isTouchWithinSelection(editor, e)) { + openiOS(); + } + else { + editor.once('selectionchange', openiOS); + editor.once('touchend', () => editor.off('selectionchange', openiOS)); + } + } + else { + open(); + } + }; + + const isSeparator = (item) => isString(item) ? item === '|' : item.type === 'separator'; + const separator = { + type: 'separator' + }; + const makeContextItem = (item) => { + const commonMenuItem = (item) => ({ + text: item.text, + icon: item.icon, + enabled: item.enabled, + shortcut: item.shortcut, + }); + if (isString(item)) { + return item; + } + else { + switch (item.type) { + case 'separator': + return separator; + case 'submenu': + return { + type: 'nestedmenuitem', + ...commonMenuItem(item), + getSubmenuItems: () => { + const items = item.getSubmenuItems(); + if (isString(items)) { + return items; + } + else { + return map$2(items, makeContextItem); + } + } + }; + default: + // case 'item', or anything else really + const commonItem = item; + return { + type: 'menuitem', + ...commonMenuItem(commonItem), + // disconnect the function from the menu item API bridge defines + onAction: noarg(commonItem.onAction) + }; + } + } + }; + const addContextMenuGroup = (xs, groupItems) => { + // Skip if there are no items + if (groupItems.length === 0) { + return xs; + } + // Only add a separator at the beginning if the last item isn't a separator + const lastMenuItem = last$1(xs).filter((item) => !isSeparator(item)); + const before = lastMenuItem.fold(() => [], (_) => [separator]); + return xs.concat(before).concat(groupItems).concat([separator]); + }; + const generateContextMenu = (contextMenus, menuConfig, selectedElement) => { + const sections = foldl(menuConfig, (acc, name) => { + // Either read and convert the list of items out of the plugin, or assume it's a standard menu item reference + return get$h(contextMenus, name.toLowerCase()).map((menu) => { + const items = menu.update(selectedElement); + if (isString(items) && isNotEmpty(trim$1(items))) { + return addContextMenuGroup(acc, items.split(' ')); + } + else if (isArray(items) && items.length > 0) { + // TODO: Should we add a StructureSchema check here? + const allItems = map$2(items, makeContextItem); + return addContextMenuGroup(acc, allItems); + } + else { + return acc; + } + }).getOrThunk(() => acc.concat([name])); + }, []); + // Strip off any trailing separator + if (sections.length > 0 && isSeparator(sections[sections.length - 1])) { + sections.pop(); + } + return sections; + }; + const isNativeOverrideKeyEvent = (editor, e) => e.ctrlKey && !shouldNeverUseNative(editor); + const isTouchEvent = (e) => e.type === 'longpress' || has$2(e, 'touches'); + const isTriggeredByKeyboard = (editor, e) => + // Different browsers trigger the context menu from keyboards differently, so need to check various different things here. + // If a longpress touch event, always treat it as a pointer event + // Chrome: button = 0, pointerType = undefined & target = the selection range node + // Firefox: button = 0, pointerType = undefined & target = body + // Safari: N/A (Mac's don't expose a contextmenu keyboard shortcut) + !isTouchEvent(e) && (e.button !== 2 || e.target === editor.getBody() && e.pointerType === ''); + const getSelectedElement = (editor, e) => isTriggeredByKeyboard(editor, e) ? editor.selection.getStart(true) : e.target; + const getAnchorType = (editor, e) => { + const selector = getAvoidOverlapSelector(editor); + const anchorType = isTriggeredByKeyboard(editor, e) ? 'selection' : 'point'; + if (isNotEmpty(selector)) { + const target = getSelectedElement(editor, e); + const selectorExists = closest$1(SugarElement.fromDom(target), selector); + return selectorExists ? 'node' : anchorType; + } + else { + return anchorType; + } + }; + const setup$5 = (editor, lazySink, backstage) => { + const detection = detect$1(); + const isTouch = detection.deviceType.isTouch; + const contextmenu = build$1(InlineView.sketch({ + dom: { + tag: 'div' + }, + lazySink, + onEscape: () => editor.focus(), + onShow: () => backstage.setContextMenuState(true), + onHide: () => backstage.setContextMenuState(false), + fireDismissalEventInstead: {}, + inlineBehaviours: derive$1([ + config('dismissContextMenu', [ + run$1(dismissRequested(), (comp, _se) => { + Sandboxing.close(comp); + editor.focus(); + }) + ]) + ]) + })); + const hideContextMenu = () => InlineView.hide(contextmenu); + const showContextMenu = (e) => { + // Prevent the default if we should never use native + if (shouldNeverUseNative(editor)) { + e.preventDefault(); + } + if (isNativeOverrideKeyEvent(editor, e) || isContextMenuDisabled(editor)) { + return; + } + const anchorType = getAnchorType(editor, e); + const buildMenu = () => { + // Use the event target element for touch events, otherwise fallback to the current selection + const selectedElement = getSelectedElement(editor, e); + const registry = editor.ui.registry.getAll(); + const menuConfig = getContextMenu(editor); + return generateContextMenu(registry.contextMenus, menuConfig, selectedElement); + }; + const initAndShow$2 = isTouch() ? initAndShow : initAndShow$1; + initAndShow$2(editor, e, buildMenu, backstage, contextmenu, anchorType); + }; + editor.on('init', () => { + // Hide the context menu when scrolling or resizing + // Except ResizeWindow on mobile which fires when the keyboard appears/disappears + const hideEvents = 'ResizeEditor ScrollContent ScrollWindow longpresscancel' + (isTouch() ? '' : ' ResizeWindow'); + editor.on(hideEvents, hideContextMenu); + editor.on('longpress contextmenu', showContextMenu); + }); + }; + + const snapWidth = 40; + const snapOffset = snapWidth / 2; + // const insertDebugDiv = (left, top, width, height, color, clazz) => { + // const debugArea = SugarElement.fromHtml(`
`); + // Css.setAll(debugArea, { + // 'left': left.toString() + 'px', + // 'top': top.toString() + 'px', + // 'background-color': color, + // 'position': 'absolute', + // 'width': width.toString() + 'px', + // 'height': height.toString() + 'px', + // 'opacity': '0.2' + // }); + // Insert.append(SugarBody.body(), debugArea); + // }; + const calcSnap = (selectorOpt, td, x, y, width, height) => selectorOpt.fold(() => Dragging.snap({ + sensor: absolute$1(x - snapOffset, y - snapOffset), + range: SugarPosition(width, height), + output: absolute$1(Optional.some(x), Optional.some(y)), + extra: { + td + } + }), (selectorHandle) => { + const sensorLeft = x - snapOffset; + const sensorTop = y - snapOffset; + const sensorWidth = snapWidth; // box.width(); + const sensorHeight = snapWidth; // box.height(); + const rect = selectorHandle.element.dom.getBoundingClientRect(); + // insertDebugDiv(sensorLeft, sensorTop, sensorWidth, sensorHeight, 'green', 'top-left-snap-debug'); + return Dragging.snap({ + sensor: absolute$1(sensorLeft, sensorTop), + range: SugarPosition(sensorWidth, sensorHeight), + output: absolute$1(Optional.some(x - (rect.width / 2)), Optional.some(y - (rect.height / 2))), + extra: { + td + } + }); + }); + const getSnapsConfig = (getSnapPoints, cell, onChange) => { + // Can't use Optional.is() here since we need to do a dom compare, not an equality compare + const isSameCell = (cellOpt, td) => cellOpt.exists((currentTd) => eq(currentTd, td)); + return { + getSnapPoints, + leftAttr: 'data-drag-left', + topAttr: 'data-drag-top', + onSensor: (component, extra) => { + const td = extra.td; + if (!isSameCell(cell.get(), td)) { + cell.set(td); + onChange(td); + } + }, + mustSnap: true + }; + }; + const createSelector = (snaps) => record(Button.sketch({ + dom: { + tag: 'div', + classes: ['tox-selector'] + }, + buttonBehaviours: derive$1([ + Dragging.config({ + mode: 'mouseOrTouch', + blockerClass: 'blocker', + snaps + }), + Unselecting.config({}) + ]), + eventOrder: { + // Because this is a button, allow dragging. It will stop clicking. + mousedown: ['dragging', 'alloy.base.behaviour'], + touchstart: ['dragging', 'alloy.base.behaviour'] + } + })); + const setup$4 = (editor, sink) => { + const tlTds = Cell([]); + const brTds = Cell([]); + const isVisible = Cell(false); + const startCell = value$2(); + const finishCell = value$2(); + const getTopLeftSnap = (td) => { + const box = absolute$2(td); + return calcSnap(memTopLeft.getOpt(sink), td, box.x, box.y, box.width, box.height); + }; + const getTopLeftSnaps = () => + // const body = SugarBody.body(); + // const debugs = SelectorFilter.descendants(body, '.top-left-snap-debug'); + // Arr.each(debugs, (debugArea) => { + // Remove.remove(debugArea); + // }); + map$2(tlTds.get(), (td) => getTopLeftSnap(td)); + const getBottomRightSnap = (td) => { + const box = absolute$2(td); + return calcSnap(memBottomRight.getOpt(sink), td, box.right, box.bottom, box.width, box.height); + }; + const getBottomRightSnaps = () => + // const body = SugarBody.body(); + // const debugs = SelectorFilter.descendants(body, '.bottom-right-snap-debug'); + // Arr.each(debugs, (debugArea) => { + // Remove.remove(debugArea); + // }); + map$2(brTds.get(), (td) => getBottomRightSnap(td)); + const topLeftSnaps = getSnapsConfig(getTopLeftSnaps, startCell, (start) => { + finishCell.get().each((finish) => { + editor.dispatch('TableSelectorChange', { start, finish }); + }); + }); + const bottomRightSnaps = getSnapsConfig(getBottomRightSnaps, finishCell, (finish) => { + startCell.get().each((start) => { + editor.dispatch('TableSelectorChange', { start, finish }); + }); + }); + const memTopLeft = createSelector(topLeftSnaps); + const memBottomRight = createSelector(bottomRightSnaps); + const topLeft = build$1(memTopLeft.asSpec()); + const bottomRight = build$1(memBottomRight.asSpec()); + const showOrHideHandle = (selector, cell, isAbove, isBelow) => { + const cellRect = cell.dom.getBoundingClientRect(); + remove$6(selector.element, 'display'); + const viewportHeight = defaultView(SugarElement.fromDom(editor.getBody())).dom.innerHeight; + const aboveViewport = isAbove(cellRect); + const belowViewport = isBelow(cellRect, viewportHeight); + if (aboveViewport || belowViewport) { + set$7(selector.element, 'display', 'none'); + } + }; + const snapTo = (selector, cell, getSnapConfig, pos) => { + const snap = getSnapConfig(cell); + Dragging.snapTo(selector, snap); + const isAbove = (rect) => rect[pos] < 0; + const isBelow = (rect, viewportHeight) => rect[pos] > viewportHeight; + showOrHideHandle(selector, cell, isAbove, isBelow); + }; + const snapTopLeft = (cell) => snapTo(topLeft, cell, getTopLeftSnap, 'top'); + const snapLastTopLeft = () => startCell.get().each(snapTopLeft); + const snapBottomRight = (cell) => snapTo(bottomRight, cell, getBottomRightSnap, 'bottom'); + const snapLastBottomRight = () => finishCell.get().each(snapBottomRight); + // TODO: Make this work for desktop maybe? + if (detect$1().deviceType.isTouch()) { + const domToSugar = (arr) => map$2(arr, SugarElement.fromDom); + editor.on('TableSelectionChange', (e) => { + if (!isVisible.get()) { + attach(sink, topLeft); + attach(sink, bottomRight); + isVisible.set(true); + } + const start = SugarElement.fromDom(e.start); + const finish = SugarElement.fromDom(e.finish); + startCell.set(start); + finishCell.set(finish); + Optional.from(e.otherCells).each((otherCells) => { + tlTds.set(domToSugar(otherCells.upOrLeftCells)); + brTds.set(domToSugar(otherCells.downOrRightCells)); + snapTopLeft(start); + snapBottomRight(finish); + }); + }); + editor.on('ResizeEditor ResizeWindow ScrollContent', () => { + snapLastTopLeft(); + snapLastBottomRight(); + }); + editor.on('TableSelectionClear', () => { + if (isVisible.get()) { + detach(topLeft); + detach(bottomRight); + isVisible.set(false); + } + startCell.clear(); + finishCell.clear(); + }); + } + }; + + var Logo = "\n"; + + const isHidden = (elm) => elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus') || elm.getAttribute('data-mce-type') === 'bookmark'; + const renderElementPath = (editor, settings, providersBackstage) => { + const delimiter = settings.delimiter ?? '\u203A'; + const renderElement = (name, element, index) => Button.sketch({ + dom: { + tag: 'div', + classes: ['tox-statusbar__path-item'], + attributes: { + 'data-index': index, + } + }, + components: [ + text$2(name) + ], + action: (_btn) => { + editor.focus(); + editor.selection.select(element); + editor.nodeChanged(); + }, + buttonBehaviours: derive$1([ + Tooltipping.config({ + ...providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate(['Select the {0} element', element.nodeName.toLowerCase()]), + onShow: (comp, tooltip) => { + describedBy(comp.element, tooltip.element); + }, + onHide: (comp) => { + remove$1(comp.element); + } + }), + }), + DisablingConfigs.button(providersBackstage.isDisabled), + toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')) + ]) + }); + const renderDivider = () => ({ + dom: { + tag: 'div', + classes: ['tox-statusbar__path-divider'], + attributes: { + 'aria-hidden': true + } + }, + components: [ + text$2(` ${delimiter} `) + ] + }); + const renderPathData = (data) => foldl(data, (acc, path, index) => { + const element = renderElement(path.name, path.element, index); + if (index === 0) { + return acc.concat([element]); + } + else { + return acc.concat([renderDivider(), element]); + } + }, []); + const updatePath = (parents) => { + const newPath = []; + let i = parents.length; + while (i-- > 0) { + const parent = parents[i]; + if (parent.nodeType === 1 && !isHidden(parent)) { + const args = fireResolveName(editor, parent); + if (!args.isDefaultPrevented()) { + newPath.push({ name: args.name, element: parent }); + } + if (args.isPropagationStopped()) { + break; + } + } + } + return newPath; + }; + return { + dom: { + tag: 'div', + classes: ['tox-statusbar__path'], + attributes: { + role: 'navigation' + } + }, + behaviours: derive$1([ + Keying.config({ + mode: 'flow', + selector: 'div[role=button]' + }), + Disabling.config({ + disabled: providersBackstage.isDisabled + }), + toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')), + Tabstopping.config({}), + Replacing.config({}), + config('elementPathEvents', [ + runOnAttached((comp, _e) => { + // NOTE: If statusbar ever gets re-rendered, we will need to free this. + editor.shortcuts.add('alt+F11', 'focus statusbar elementpath', () => Keying.focusIn(comp)); + editor.on('NodeChange', (e) => { + const newPath = updatePath(e.parents); + const newChildren = newPath.length > 0 ? renderPathData(newPath) : []; + Replacing.set(comp, newChildren); + }); + }) + ]) + ]), + components: [] + }; + }; + + var ResizeTypes; + (function (ResizeTypes) { + ResizeTypes[ResizeTypes["None"] = 0] = "None"; + ResizeTypes[ResizeTypes["Both"] = 1] = "Both"; + ResizeTypes[ResizeTypes["Vertical"] = 2] = "Vertical"; + })(ResizeTypes || (ResizeTypes = {})); + const getOriginalDimensions = (editor) => { + const container = SugarElement.fromDom(editor.getContainer()); + const originalHeight = get$d(container); + const originalWidth = get$c(container); + return { + height: originalHeight, + width: originalWidth, + }; + }; + const getDimensions = (editor, deltas, resizeType, originalDimentions) => { + const height = calcCappedSize(originalDimentions.height + deltas.top, getMinHeightOption(editor), getMaxHeightOption(editor)); + if (resizeType === ResizeTypes.Both) { + return { + height, + width: calcCappedSize(originalDimentions.width + deltas.left, getMinWidthOption(editor), getMaxWidthOption(editor)) + }; + } + return { height }; + }; + const resize = (editor, deltas, resizeType) => { + const container = SugarElement.fromDom(editor.getContainer()); + const originalDimensions = getOriginalDimensions(editor); + const dimensions = getDimensions(editor, deltas, resizeType, originalDimensions); + each(dimensions, (val, dim) => { + if (isNumber(val)) { + set$7(container, dim, numToPx(val)); + } + }); + fireResizeEditor(editor); + return dimensions; + }; + + const getResizeType = (editor) => { + const resize = getResize(editor); + if (resize === false) { + return ResizeTypes.None; + } + else if (resize === 'both') { + return ResizeTypes.Both; + } + else { + return ResizeTypes.Vertical; + } + }; + const getAriaValuetext = (dimensions, resizeType) => { + return resizeType === ResizeTypes.Both + ? global$6.translate([`Editor's height: {0} pixels, Editor's width: {1} pixels`, dimensions.height, dimensions.width]) + : global$6.translate([`Editor's height: {0} pixels`, dimensions.height]); + }; + const setAriaValuetext = (comp, dimensions, resizeType) => { + set$9(comp.element, 'aria-valuetext', getAriaValuetext(dimensions, resizeType)); + }; + const keyboardHandler = (editor, comp, resizeType, x, y) => { + const scale = 20; + const delta = SugarPosition(x * scale, y * scale); + const newDimentions = resize(editor, delta, resizeType); + setAriaValuetext(comp, newDimentions, resizeType); + return Optional.some(true); + }; + const renderResizeHandler = (editor, providersBackstage) => { + const resizeType = getResizeType(editor); + if (resizeType === ResizeTypes.None) { + return Optional.none(); + } + const resizeLabel = resizeType === ResizeTypes.Both + ? global$6.translate('Press the arrow keys to resize the editor.') + : global$6.translate('Press the Up and Down arrow keys to resize the editor.'); + const cursorClass = resizeType === ResizeTypes.Both + ? 'tox-statusbar__resize-cursor-both' + : 'tox-statusbar__resize-cursor-default'; + return Optional.some(render$4('resize-handle', { + tag: 'div', + classes: ['tox-statusbar__resize-handle', cursorClass], + attributes: { + 'aria-label': providersBackstage.translate(resizeLabel), + 'data-mce-name': 'resize-handle', + 'role': 'separator' + }, + behaviours: [ + Dragging.config({ + mode: 'mouse', + repositionTarget: false, + onDrag: (comp, _target, delta) => { + const newDimentions = resize(editor, delta, resizeType); + setAriaValuetext(comp, newDimentions, resizeType); + }, + blockerClass: 'tox-blocker' + }), + Keying.config({ + mode: 'special', + onLeft: (comp) => keyboardHandler(editor, comp, resizeType, -1, 0), + onRight: (comp) => keyboardHandler(editor, comp, resizeType, 1, 0), + onUp: (comp) => keyboardHandler(editor, comp, resizeType, 0, -1), + onDown: (comp) => keyboardHandler(editor, comp, resizeType, 0, 1), + }), + Tabstopping.config({}), + Focusing.config({}), + Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate('Resize') + })), + config('set-aria-valuetext', [ + runOnAttached((comp) => { + const setInitialValuetext = () => { + setAriaValuetext(comp, getOriginalDimensions(editor), resizeType); + }; + if (editor._skinLoaded) { + setInitialValuetext(); + } + else { + editor.once('SkinLoaded', setInitialValuetext); + } + }) + ]) + ], + eventOrder: { + [attachedToDom()]: ['add-focusable', 'set-aria-valuetext'] + } + }, providersBackstage.icons)); + }; + + const renderWordCount = (editor, providersBackstage) => { + const replaceCountText = (comp, count, mode) => Replacing.set(comp, [text$2(providersBackstage.translate(['{0} ' + mode, count[mode]]))]); + return Button.sketch({ + dom: { + // The tag for word count was changed to 'button' as Jaws does not read out spans. + // Word count is just a toggle and changes modes between words and characters. + tag: 'button', + classes: ['tox-statusbar__wordcount'] + }, + components: [], + buttonBehaviours: derive$1([ + DisablingConfigs.button(providersBackstage.isDisabled), + toggleOnReceive(() => providersBackstage.checkUiComponentContext('any')), + Tabstopping.config({}), + Replacing.config({}), + Representing.config({ + store: { + mode: 'memory', + initialValue: { + mode: "words" /* WordCountMode.Words */, + count: { words: 0, characters: 0 } + } + } + }), + config('wordcount-events', [ + runOnExecute$1((comp) => { + const currentVal = Representing.getValue(comp); + const newMode = currentVal.mode === "words" /* WordCountMode.Words */ ? "characters" /* WordCountMode.Characters */ : "words" /* WordCountMode.Words */; + Representing.setValue(comp, { mode: newMode, count: currentVal.count }); + replaceCountText(comp, currentVal.count, newMode); + }), + runOnAttached((comp) => { + editor.on('wordCountUpdate', (e) => { + const { mode } = Representing.getValue(comp); + Representing.setValue(comp, { mode, count: e.wordCount }); + replaceCountText(comp, e.wordCount, mode); + }); + }) + ]) + ]), + eventOrder: { + [execute$5()]: ['disabling', 'alloy.base.behaviour', 'wordcount-events'] + } + }); + }; + + const renderStatusbar = (editor, providersBackstage) => { + const renderBranding = () => { + return { + dom: { + tag: 'span', + classes: ['tox-statusbar__branding'], + }, + components: [ + { + dom: { + tag: 'a', + attributes: { + 'href': 'https://www.tiny.cloud/powered-by-tiny?utm_campaign=poweredby&utm_source=tiny&utm_medium=referral&utm_content=v7', + 'rel': 'noopener', + 'target': '_blank', + 'aria-label': editor.translate(['Build with {0}', 'TinyMCE']) + }, + innerHtml: editor.translate(['Build with {0}', Logo.trim()]) + }, + behaviours: derive$1([ + Focusing.config({}) + ]) + } + ] + }; + }; + const renderHelpAccessibility = () => { + const shortcutText = convertText('Alt+0'); + const text = `Press {0} for help`; + return { + dom: { + tag: 'div', + classes: ['tox-statusbar__help-text'], + }, + components: [ + text$2(global$6.translate([text, shortcutText])) + ] + }; + }; + const renderRightContainer = () => { + const components = []; + if (editor.hasPlugin('wordcount')) { + components.push(renderWordCount(editor, providersBackstage)); + } + if (useBranding(editor)) { + components.push(renderBranding()); + } + return { + dom: { + tag: 'div', + classes: ['tox-statusbar__right-container'] + }, + components + }; + }; + const getTextComponents = () => { + const components = []; + const shouldRenderHelp = useHelpAccessibility(editor); + const shouldRenderElementPath = useElementPath(editor); + const shouldRenderRightContainer = useBranding(editor) || editor.hasPlugin('wordcount'); + const getTextComponentClasses = () => { + const flexStart = 'tox-statusbar__text-container--flex-start'; + const flexEnd = 'tox-statusbar__text-container--flex-end'; + const spaceAround = 'tox-statusbar__text-container--space-around'; + if (shouldRenderHelp) { + const container3Columns = 'tox-statusbar__text-container-3-cols'; + if (!shouldRenderRightContainer && !shouldRenderElementPath) { + return [container3Columns, spaceAround]; + } + if (shouldRenderRightContainer && !shouldRenderElementPath) { + return [container3Columns, flexEnd]; + } + return [container3Columns, flexStart]; + } + return [shouldRenderRightContainer && !shouldRenderElementPath ? flexEnd : flexStart]; + }; + if (shouldRenderElementPath) { + components.push(renderElementPath(editor, {}, providersBackstage)); + } + if (shouldRenderHelp) { + components.push(renderHelpAccessibility()); + } + if (shouldRenderRightContainer) { + components.push(renderRightContainer()); + } + if (components.length > 0) { + return [{ + dom: { + tag: 'div', + classes: ['tox-statusbar__text-container', ...getTextComponentClasses()] + }, + components + }]; + } + return []; + }; + const getComponents = () => { + const components = getTextComponents(); + const resizeHandler = renderResizeHandler(editor, providersBackstage); + return components.concat(resizeHandler.toArray()); + }; + return { + dom: { + tag: 'div', + classes: ['tox-statusbar'] + }, + components: getComponents() + }; + }; + + const getLazyMothership = (label, singleton) => singleton.get().getOrDie(`UI for ${label} has not been rendered`); + const setup$3 = (editor, setupForTheme) => { + const isInline = editor.inline; + const mode = isInline ? Inline : Iframe; + // We use a different component for creating the sticky toolbar behaviour. The + // most important difference is it needs "Docking" configured and all of the + // ripple effects that creates. + const header = isStickyToolbar(editor) ? StickyHeader : StaticHeader; + const lazyUiRefs = LazyUiReferences(); + // Importantly, this is outside the setup function. + const lazyMothership = value$2(); + const lazyDialogMothership = value$2(); + const lazyPopupMothership = value$2(); + const platform = detect$1(); + const isTouch = platform.deviceType.isTouch(); + const touchPlatformClass = 'tox-platform-touch'; + const deviceClasses = isTouch ? [touchPlatformClass] : []; + const isToolbarBottom = isToolbarLocationBottom(editor); + const toolbarMode = getToolbarMode(editor); + const memAnchorBar = record({ + dom: { + tag: 'div', + classes: ['tox-anchorbar'] + } + }); + const memBottomAnchorBar = record({ + dom: { + tag: 'div', + classes: ['tox-bottom-anchorbar'] + } + }); + const lazyHeader = () => lazyUiRefs.mainUi.get() + .map((ui) => ui.outerContainer) + .bind(OuterContainer.getHeader); + const lazyDialogSinkResult = () => Result.fromOption(lazyUiRefs.dialogUi.get().map((ui) => ui.sink), 'UI has not been rendered'); + const lazyPopupSinkResult = () => Result.fromOption(lazyUiRefs.popupUi.get().map((ui) => ui.sink), '(popup) UI has not been rendered'); + const lazyAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('anchor bar', memAnchorBar.getOpt); + const lazyBottomAnchorBar = lazyUiRefs.lazyGetInOuterOrDie('bottom anchor bar', memBottomAnchorBar.getOpt); + const lazyToolbar = lazyUiRefs.lazyGetInOuterOrDie('toolbar', OuterContainer.getToolbar); + const lazyThrobber = lazyUiRefs.lazyGetInOuterOrDie('throbber', OuterContainer.getThrobber); + // Here, we build the backstage. The backstage is going to use different sinks for dialog + // vs popup. + const backstages = init({ + popup: lazyPopupSinkResult, + dialog: lazyDialogSinkResult + }, editor, lazyAnchorBar, lazyBottomAnchorBar); + const makeHeaderPart = () => { + const verticalDirAttributes = { + attributes: { + [Attribute]: isToolbarBottom ? + AttributeValue.BottomToTop : + AttributeValue.TopToBottom + } + }; + const partMenubar = OuterContainer.parts.menubar({ + dom: { + tag: 'div', + classes: ['tox-menubar'] + }, + // TINY-9223: The menu bar should scroll with the editor. + backstage: backstages.popup, + onEscape: () => { + editor.focus(); + } + }); + const partToolbar = OuterContainer.parts.toolbar({ + dom: { + tag: 'div', + classes: ['tox-toolbar'] + }, + getSink: backstages.popup.shared.getSink, + providers: backstages.popup.shared.providers, + onEscape: () => { + editor.focus(); + }, + onToolbarToggled: (state) => { + fireToggleToolbarDrawer(editor, state); + }, + type: toolbarMode, + lazyToolbar, + lazyHeader: () => lazyHeader().getOrDie('Could not find header element'), + ...verticalDirAttributes + }); + const partMultipleToolbar = OuterContainer.parts['multiple-toolbar']({ + dom: { + tag: 'div', + classes: ['tox-toolbar-overlord'] + }, + providers: backstages.popup.shared.providers, + onEscape: () => { + editor.focus(); + }, + type: toolbarMode + }); + // False should stop the menubar and toolbar rendering altogether + const hasMultipleToolbar = isMultipleToolbars(editor); + const hasToolbar = isToolbarEnabled(editor); + const hasMenubar = isMenubarEnabled(editor); + const shouldHavePromotionLink = promotionEnabled(editor); + const partPromotion = makePromotion(shouldHavePromotionLink); + const hasAnyContents = hasMultipleToolbar || hasToolbar || hasMenubar; + const getPartToolbar = () => { + if (hasMultipleToolbar) { + return [partMultipleToolbar]; + } + else if (hasToolbar) { + return [partToolbar]; + } + else { + return []; + } + }; + const menubarCollection = [partPromotion, partMenubar]; + return OuterContainer.parts.header({ + dom: { + tag: 'div', + classes: ['tox-editor-header'] + .concat(hasAnyContents ? [] : ['tox-editor-header--empty']), + ...verticalDirAttributes + }, + components: flatten([ + hasMenubar ? menubarCollection : [], + getPartToolbar(), + // fixed_toolbar_container anchors to the editable area, else add an anchor bar + useFixedContainer(editor) ? [] : [memAnchorBar.asSpec()] + ]), + sticky: isStickyToolbar(editor), + editor, + // TINY-9223: If using a sticky toolbar, which sink should it really go in? + sharedBackstage: backstages.popup.shared + }); + }; + const makePromotion = (promotionLink) => { + return OuterContainer.parts.promotion({ + dom: { + tag: 'div', + classes: ['tox-promotion'], + }, + promotionLink + }); + }; + const makeSidebarDefinition = () => { + const partSocket = OuterContainer.parts.socket({ + dom: { + tag: 'div', + classes: ['tox-edit-area'] + } + }); + const partSidebar = OuterContainer.parts.sidebar({ + dom: { + tag: 'div', + classes: ['tox-sidebar'] + } + }); + return { + dom: { + tag: 'div', + classes: ['tox-sidebar-wrap'] + }, + components: [ + partSocket, + partSidebar + ] + }; + }; + const renderDialogUi = () => { + const uiContainer = getUiContainer(editor); + // TINY-3321: When the body is using a grid layout, we need to ensure the sink width is manually set + const isGridUiContainer = eq(body(), uiContainer) && get$e(uiContainer, 'display') === 'grid'; + const sinkSpec = { + dom: { + tag: 'div', + classes: ['tox', 'tox-silver-sink', 'tox-tinymce-aux'].concat(deviceClasses), + attributes: { + ...global$6.isRtl() ? { dir: 'rtl' } : {} + } + }, + behaviours: derive$1([ + Positioning.config({ + useFixed: () => header.isDocked(lazyHeader) + }) + ]) + }; + const reactiveWidthSpec = { + dom: { + styles: { width: document.body.clientWidth + 'px' } + }, + events: derive$2([ + run$1(windowResize(), (comp) => { + set$7(comp.element, 'width', document.body.clientWidth + 'px'); + }) + ]) + }; + const sink = build$1(deepMerge(sinkSpec, isGridUiContainer ? reactiveWidthSpec : {})); + const uiMothership = takeover(sink); + lazyDialogMothership.set(uiMothership); + return { sink, mothership: uiMothership }; + }; + const renderPopupUi = () => { + // TINY-9226: Because the popupUi is going to be placed adjacent to the editor, we aren't currently + // implementing the behaviour to reset widths based on window sizing. It is a workaround that + // is mainly targeted at Ui containers in the root. However, we may need to revisit this + // if the ui_mode: split setting is commonly used when the editor is at the root level, and the + // page has size-unfriendly CSS for sinks (like CSS grid) + const sinkSpec = { + dom: { + tag: 'div', + classes: ['tox', 'tox-silver-sink', 'tox-silver-popup-sink', 'tox-tinymce-aux'].concat(deviceClasses), + attributes: { + ...global$6.isRtl() ? { dir: 'rtl' } : {} + } + }, + behaviours: derive$1([ + Positioning.config({ + useFixed: () => header.isDocked(lazyHeader), + // TINY-9226: We want to limit the popup sink's bounds based on its scrolling environment. We don't + // want it to try to position things outside of its scrolling viewport, because they will + // just appear offscreen (hidden by the current scroll values) + getBounds: () => setupForTheme.getPopupSinkBounds() + }) + ]) + }; + const sink = build$1(sinkSpec); + const uiMothership = takeover(sink); + lazyPopupMothership.set(uiMothership); + return { sink, mothership: uiMothership }; + }; + const renderMainUi = () => { + const partHeader = makeHeaderPart(); + const sidebarContainer = makeSidebarDefinition(); + const partThrobber = OuterContainer.parts.throbber({ + dom: { + tag: 'div', + classes: ['tox-throbber'] + }, + backstage: backstages.popup + }); + const partViewWrapper = OuterContainer.parts.viewWrapper({ + backstage: backstages.popup + }); + const statusbar = useStatusBar(editor) && !isInline ? Optional.some(renderStatusbar(editor, backstages.popup.shared.providers)) : Optional.none(); + // We need the statusbar to be separate to everything else so resizing works properly + const editorComponents = flatten([ + isToolbarBottom ? [] : [partHeader], + // Inline mode does not have a socket/sidebar + isInline ? [] : [sidebarContainer], + isToolbarBottom ? [partHeader] : [] + ]); + const editorContainer = OuterContainer.parts.editorContainer({ + components: flatten([ + editorComponents, + isInline ? [] : [memBottomAnchorBar.asSpec()] + ]) + }); + // Hide the outer container if using inline mode and there's no menubar or toolbar + const isHidden = isDistractionFree(editor); + const attributes = { + role: 'application', + ...global$6.isRtl() ? { dir: 'rtl' } : {}, + ...isHidden ? { 'aria-hidden': 'true' } : {} + }; + const outerContainer = build$1(OuterContainer.sketch({ + dom: { + tag: 'div', + classes: ['tox', 'tox-tinymce'] + .concat(isInline ? ['tox-tinymce-inline'] : []) + .concat(isToolbarBottom ? ['tox-tinymce--toolbar-bottom'] : []) + .concat(deviceClasses), + styles: { + // This is overridden by the skin, it helps avoid FOUC + visibility: 'hidden', + // Hide the container if needed, but don't use "display: none" so that it still has a position + ...isHidden ? { opacity: '0', border: '0' } : {} + }, + attributes + }, + components: [ + editorContainer, + // Inline mode does not have a status bar + ...isInline ? [] : [partViewWrapper, ...statusbar.toArray()], + partThrobber, + ], + behaviours: derive$1([ + toggleOnReceive(() => backstages.popup.shared.providers.checkUiComponentContext('any')), + Disabling.config({ + disableClass: 'tox-tinymce--disabled' + }), + Keying.config({ + mode: 'cyclic', + selector: '.tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle' + }) + ]) + })); + const mothership = takeover(outerContainer); + lazyMothership.set(mothership); + return { mothership, outerContainer }; + }; + const setEditorSize = (outerContainer) => { + // Set height and width if they were given, though height only applies to iframe mode + const parsedHeight = numToPx(getHeightWithFallback(editor)); + const parsedWidth = numToPx(getWidthWithFallback(editor)); + if (!editor.inline) { + // Update the width + if (isValidValue$1('div', 'width', parsedWidth)) { + set$7(outerContainer.element, 'width', parsedWidth); + } + // Update the height + if (isValidValue$1('div', 'height', parsedHeight)) { + set$7(outerContainer.element, 'height', parsedHeight); + } + else { + set$7(outerContainer.element, 'height', '400px'); + } + } + return parsedHeight; + }; + const setupShortcutsAndCommands = (outerContainer) => { + editor.addShortcut('alt+F9', 'focus menubar', () => { + OuterContainer.focusMenubar(outerContainer); + }); + editor.addShortcut('alt+F10', 'focus toolbar', () => { + OuterContainer.focusToolbar(outerContainer); + }); + editor.addCommand('ToggleToolbarDrawer', (_ui, options, args) => { + if (options?.skipFocus) { + logFeatureDeprecationWarning('skipFocus'); + OuterContainer.toggleToolbarDrawerWithoutFocusing(outerContainer); + } + else if (args?.skip_focus) { + OuterContainer.toggleToolbarDrawerWithoutFocusing(outerContainer); + } + else { + OuterContainer.toggleToolbarDrawer(outerContainer); + } + }); + editor.addQueryStateHandler('ToggleToolbarDrawer', () => OuterContainer.isToolbarDrawerToggled(outerContainer)); + editor.on('blur', () => { + if (getToolbarMode(editor) === ToolbarMode$1.floating && OuterContainer.isToolbarDrawerToggled(outerContainer)) { + OuterContainer.toggleToolbarDrawerWithoutFocusing(outerContainer); + } + }); + }; + const renderUIWithRefs = (uiRefs) => { + const { mainUi, popupUi, uiMotherships } = uiRefs; + map$1(getToolbarGroups(editor), (toolbarGroupButtonConfig, name) => { + editor.ui.registry.addGroupToolbarButton(name, toolbarGroupButtonConfig); + }); + // Apply Bridge types + const { buttons, menuItems, contextToolbars, sidebars, views } = editor.ui.registry.getAll(); + const toolbarOpt = getMultipleToolbarsOption(editor); + const rawUiConfig = { + menuItems, + menus: getMenus(editor), + menubar: getMenubar(editor), + toolbar: toolbarOpt.getOrThunk(() => getToolbar(editor)), + allowToolbarGroups: toolbarMode === ToolbarMode$1.floating, + buttons, + sidebar: sidebars, + views + }; + setupShortcutsAndCommands(mainUi.outerContainer); + setup$b(editor, mainUi.mothership, uiMotherships); + // This backstage needs to kept in sync with the one passed to the Header part. + header.setup(editor, backstages.popup.shared, lazyHeader); + // This backstage is probably needed for just the bespoke dropdowns + setup$6(editor, backstages.popup); + setup$5(editor, backstages.popup.shared.getSink, backstages.popup); + setup$8(editor); + setup$7(editor, lazyThrobber, backstages.popup.shared); + register$a(editor, contextToolbars, popupUi.sink, { backstage: backstages.popup }); + setup$4(editor, popupUi.sink); + const elm = editor.getElement(); + const height = setEditorSize(mainUi.outerContainer); + const args = { targetNode: elm, height }; + // The only components that use backstages.dialog currently are the Modal dialogs. + return mode.render(editor, uiRefs, rawUiConfig, backstages.popup, args); + }; + const reuseDialogUiForPopuUi = (dialogUi) => { + lazyPopupMothership.set(dialogUi.mothership); + return dialogUi; + }; + const renderUI = () => { + const mainUi = renderMainUi(); + const dialogUi = renderDialogUi(); + // If dialogUi and popupUi are the same, LazyUiReferences should handle deduplicating then + // get calling getUiMotherships + const popupUi = isSplitUiMode(editor) ? renderPopupUi() : reuseDialogUiForPopuUi(dialogUi); + lazyUiRefs.dialogUi.set(dialogUi); + lazyUiRefs.popupUi.set(popupUi); + lazyUiRefs.mainUi.set(mainUi); + // From this point on, we shouldn't use LazyReferences any more. + const uiRefs = { + popupUi, + dialogUi, + mainUi, + uiMotherships: lazyUiRefs.getUiMotherships() + }; + return renderUIWithRefs(uiRefs); + }; + // We don't have uiRefs here, so we have to rely on cells that are set by renderUI unfortunately. + return { + popups: { + backstage: backstages.popup, + getMothership: () => getLazyMothership('popups', lazyPopupMothership) + }, + dialogs: { + backstage: backstages.dialog, + getMothership: () => getLazyMothership('dialogs', lazyDialogMothership) + }, + renderUI + }; + }; + + const toValidValues = (values) => { + const errors = []; + const result = {}; + each(values, (value, name) => { + value.fold(() => { + errors.push(name); + }, (v) => { + result[name] = v; + }); + }); + return errors.length > 0 ? Result.error(errors) : + Result.value(result); + }; + + const renderBodyPanel = (spec, dialogData, backstage, getCompByName) => { + const memForm = record(Form.sketch((parts) => ({ + dom: { + tag: 'div', + classes: ['tox-form'].concat(spec.classes) + }, + // All of the items passed through the form need to be put through the interpreter + // with their form part preserved. + components: map$2(spec.items, (item) => interpretInForm(parts, item, dialogData, backstage, getCompByName)) + }))); + return { + dom: { + tag: 'div', + classes: ['tox-dialog__body'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-dialog__body-content'] + }, + components: [ + memForm.asSpec() + ] + } + ], + behaviours: derive$1([ + Keying.config({ + mode: 'acyclic', + useTabstopAt: not(isPseudoStop) + }), + ComposingConfigs.memento(memForm), + memento(memForm, { + postprocess: (formValue) => toValidValues(formValue).fold((err) => { + // eslint-disable-next-line no-console + console.error(err); + return {}; + }, identity) + }), + config('dialog-body-panel', [ + // TINY-10101: This is to cater for the case where clicks are made into the dialog instead using keyboard navigation, as FocusShifted would not be triggered in that case. + run$1(focusin(), (comp, se) => { + comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { + newFocus: Optional.some(se.event.target) + }); + }), + ]) + ]) + }; + }; + + const measureHeights = (allTabs, tabview, tabviewComp) => map$2(allTabs, (_tab, i) => { + Replacing.set(tabviewComp, allTabs[i].view()); + const rect = tabview.dom.getBoundingClientRect(); + Replacing.set(tabviewComp, []); + return rect.height; + }); + const getMaxHeight = (heights) => head(sort(heights, (a, b) => { + if (a > b) { + return -1; + } + else if (a < b) { + return +1; + } + else { + return 0; + } + })); + const getMaxTabviewHeight = (dialog, tabview, tablist) => { + const documentElement$1 = documentElement(dialog).dom; + const rootElm = ancestor$1(dialog, '.tox-dialog-wrap').getOr(dialog); + const isFixed = get$e(rootElm, 'position') === 'fixed'; + // Get the document or window/viewport height + let maxHeight; + if (isFixed) { + maxHeight = Math.max(documentElement$1.clientHeight, window.innerHeight); + } + else { + maxHeight = Math.max(documentElement$1.offsetHeight, documentElement$1.scrollHeight); + } + // Determine the current height taken up by the tabview panel + const tabviewHeight = get$d(tabview); + const isTabListBeside = tabview.dom.offsetLeft >= tablist.dom.offsetLeft + get$c(tablist); + const currentTabHeight = isTabListBeside ? Math.max(get$d(tablist), tabviewHeight) : tabviewHeight; + // Get the dialog height, making sure to account for any margins on the dialog + const dialogTopMargin = parseInt(get$e(dialog, 'margin-top'), 10) || 0; + const dialogBottomMargin = parseInt(get$e(dialog, 'margin-bottom'), 10) || 0; + const dialogHeight = get$d(dialog) + dialogTopMargin + dialogBottomMargin; + const chromeHeight = dialogHeight - currentTabHeight; + return maxHeight - chromeHeight; + }; + const showTab = (allTabs, comp) => { + head(allTabs).each((tab) => TabSection.showTab(comp, tab.value)); + }; + const setTabviewHeight = (tabview, height) => { + // Set both height and flex-basis as some browsers don't support flex-basis. + set$7(tabview, 'height', height + 'px'); + set$7(tabview, 'flex-basis', height + 'px'); + }; + const updateTabviewHeight = (dialogBody, tabview, maxTabHeight) => { + ancestor$1(dialogBody, '[role="dialog"]').each((dialog) => { + descendant(dialog, '[role="tablist"]').each((tablist) => { + maxTabHeight.get().map((height) => { + // Set the tab view height to 0, so we can calculate the max tabview height, without worrying about overflows + set$7(tabview, 'height', '0'); + set$7(tabview, 'flex-basis', '0'); + return Math.min(height, getMaxTabviewHeight(dialog, tabview, tablist)); + }).each((height) => { + setTabviewHeight(tabview, height); + }); + }); + }); + }; + const getTabview = (dialog) => descendant(dialog, '[role="tabpanel"]'); + const smartMode = (allTabs) => { + const maxTabHeight = value$2(); + const extraEvents = [ + runOnAttached((comp) => { + const dialog = comp.element; + getTabview(dialog).each((tabview) => { + set$7(tabview, 'visibility', 'hidden'); + // Determine the maximum heights of each tab + comp.getSystem().getByDom(tabview).toOptional().each((tabviewComp) => { + const heights = measureHeights(allTabs, tabview, tabviewComp); + // Calculate the maximum tab height and store it + const maxTabHeightOpt = getMaxHeight(heights); + maxTabHeightOpt.fold(maxTabHeight.clear, maxTabHeight.set); + }); + // Set an initial height, based on the current size + updateTabviewHeight(dialog, tabview, maxTabHeight); + // Show the tabs + remove$6(tabview, 'visibility'); + showTab(allTabs, comp); + // Use a delay here and recalculate the height, as we need all the components attached + // to be able to properly calculate the max height + requestAnimationFrame(() => { + updateTabviewHeight(dialog, tabview, maxTabHeight); + }); + }); + }), + run$1(windowResize(), (comp) => { + const dialog = comp.element; + getTabview(dialog).each((tabview) => { + updateTabviewHeight(dialog, tabview, maxTabHeight); + }); + }), + run$1(formResizeEvent, (comp, _se) => { + const dialog = comp.element; + getTabview(dialog).each((tabview) => { + const oldFocus = active$1(getRootNode(tabview)); + set$7(tabview, 'visibility', 'hidden'); + const oldHeight = getRaw(tabview, 'height').map((h) => parseInt(h, 10)); + remove$6(tabview, 'height'); + remove$6(tabview, 'flex-basis'); + const newHeight = tabview.dom.getBoundingClientRect().height; + const hasGrown = oldHeight.forall((h) => newHeight > h); + if (hasGrown) { + maxTabHeight.set(newHeight); + updateTabviewHeight(dialog, tabview, maxTabHeight); + } + else { + oldHeight.each((h) => { + setTabviewHeight(tabview, h); + }); + } + remove$6(tabview, 'visibility'); + oldFocus.each(focus$4); + }); + }) + ]; + const selectFirst = false; + return { + extraEvents, + selectFirst + }; + }; + + const SendDataToSectionChannel = 'send-data-to-section'; + const SendDataToViewChannel = 'send-data-to-view'; + const renderTabPanel = (spec, dialogData, backstage, getCompByName) => { + const storedValue = Cell({}); + const updateDataWithForm = (form) => { + const formData = Representing.getValue(form); + const validData = toValidValues(formData).getOr({}); + const currentData = storedValue.get(); + const newData = deepMerge(currentData, validData); + storedValue.set(newData); + }; + const setDataOnForm = (form) => { + const tabData = storedValue.get(); + Representing.setValue(form, tabData); + }; + const oldTab = Cell(null); + const allTabs = map$2(spec.tabs, (tab) => { + return { + value: tab.name, + dom: { + tag: 'div', + classes: ['tox-dialog__body-nav-item'] + }, + components: [ + text$2(backstage.shared.providers.translate(tab.title)) + ], + view: () => { + return [ + // Dupe with SilverDialog + Form.sketch((parts) => ({ + dom: { + tag: 'div', + classes: ['tox-form'] + }, + components: map$2(tab.items, (item) => interpretInForm(parts, item, dialogData, backstage, getCompByName)), + formBehaviours: derive$1([ + Keying.config({ + mode: 'acyclic', + useTabstopAt: not(isPseudoStop) + }), + config('TabView.form.events', [ + runOnAttached(setDataOnForm), + runOnDetached(updateDataWithForm) + ]), + Receiving.config({ + channels: wrapAll([ + { + key: SendDataToSectionChannel, + value: { + onReceive: updateDataWithForm + } + }, + { + key: SendDataToViewChannel, + value: { + onReceive: setDataOnForm + } + } + ]) + }) + ]) + })) + ]; + } + }; + }); + // Assign fixed height or variable height to the tabs + const tabMode = smartMode(allTabs); + return TabSection.sketch({ + dom: { + tag: 'div', + classes: ['tox-dialog__body'] + }, + onChangeTab: (section, button, _viewItems) => { + const name = Representing.getValue(button); + emitWith(section, formTabChangeEvent, { + name, + oldName: oldTab.get() + }); + oldTab.set(name); + }, + tabs: allTabs, + components: [ + TabSection.parts.tabbar({ + dom: { + tag: 'div', + classes: ['tox-dialog__body-nav'] + }, + components: [ + Tabbar.parts.tabs({}) + ], + markers: { + tabClass: 'tox-tab', + selectedClass: 'tox-dialog__body-nav-item--active' + }, + tabbarBehaviours: derive$1([ + Tabstopping.config({}) + ]) + }), + TabSection.parts.tabview({ + dom: { + tag: 'div', + classes: ['tox-dialog__body-content'] + } + }) + ], + selectFirst: tabMode.selectFirst, + tabSectionBehaviours: derive$1([ + config('tabpanel', tabMode.extraEvents), + Keying.config({ + mode: 'acyclic' + }), + // INVESTIGATE: Is this necessary? Probably used by getCompByName. + Composing.config({ + // TODO: Think about this + find: (comp) => head(TabSection.getViewItems(comp)) + }), + withComp(Optional.none(), (tsection) => { + // NOTE: Assumes synchronous updating of store. + tsection.getSystem().broadcastOn([SendDataToSectionChannel], {}); + return storedValue.get(); + }, (tsection, value) => { + storedValue.set(value); + tsection.getSystem().broadcastOn([SendDataToViewChannel], {}); + }) + ]) + }); + }; + + // ariaAttrs is being passed through to silver inline dialog + // from the WindowManager as a property of 'params' + const renderBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => { + const renderComponents = (incoming) => { + const body = incoming.body; + switch (body.type) { + case 'tabpanel': { + return [ + renderTabPanel(body, incoming.initialData, backstage, getCompByName) + ]; + } + default: { + return [ + renderBodyPanel(body, incoming.initialData, backstage, getCompByName) + ]; + } + } + }; + const updateState = (_comp, incoming) => Optional.some({ + isTabPanel: () => incoming.body.type === 'tabpanel' + }); + const ariaAttributes = { + 'aria-live': 'polite' + }; + return { + dom: { + tag: 'div', + classes: ['tox-dialog__content-js'], + attributes: { + ...contentId.map((x) => ({ id: x })).getOr({}), + ...ariaAttrs ? ariaAttributes : {} + } + }, + components: [], + behaviours: derive$1([ + ComposingConfigs.childAt(0), + Reflecting.config({ + channel: `${bodyChannel}-${dialogId}`, + updateState, + renderComponents, + initialData: spec + }) + ]) + }; + }; + const renderInlineBody = (spec, dialogId, contentId, backstage, ariaAttrs, getCompByName) => renderBody(spec, dialogId, Optional.some(contentId), backstage, ariaAttrs, getCompByName); + const renderModalBody = (spec, dialogId, backstage, getCompByName) => { + const bodySpec = renderBody(spec, dialogId, Optional.none(), backstage, false, getCompByName); + return ModalDialog.parts.body(bodySpec); + }; + const renderIframeBody = (spec) => { + const bodySpec = { + dom: { + tag: 'div', + classes: ['tox-dialog__content-js'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-dialog__body-iframe'] + }, + components: [ + craft(Optional.none(), { + dom: { + tag: 'iframe', + attributes: { + src: spec.url + } + }, + behaviours: derive$1([ + Tabstopping.config({}), + Focusing.config({}) + ]) + }) + ] + } + ], + behaviours: derive$1([ + Keying.config({ + mode: 'acyclic', + useTabstopAt: not(isPseudoStop) + }) + ]) + }; + return ModalDialog.parts.body(bodySpec); + }; + + const isTouch = global$7.deviceType.isTouch(); + const hiddenHeader = (title, close) => ({ + dom: { + tag: 'div', + styles: { display: 'none' }, + classes: ['tox-dialog__header'] + }, + components: [ + title, + close + ] + }); + const pClose = (onClose, providersBackstage) => ModalDialog.parts.close( + // Need to find a way to make it clear in the docs whether parts can be sketches + Button.sketch({ + dom: { + tag: 'button', + classes: ['tox-button', 'tox-button--icon', 'tox-button--naked'], + attributes: { + 'type': 'button', + 'aria-label': providersBackstage.translate('Close') + } + }, + action: onClose, + buttonBehaviours: derive$1([ + Tabstopping.config({}) + ]) + })); + const pUntitled = () => ModalDialog.parts.title({ + dom: { + tag: 'div', + classes: ['tox-dialog__title'], + innerHtml: '', + styles: { + display: 'none' + } + } + }); + const pBodyMessage = (message, providersBackstage) => ModalDialog.parts.body({ + dom: { + tag: 'div', + classes: ['tox-dialog__body'] + }, + components: [ + { + dom: { + tag: 'div', + classes: ['tox-dialog__body-content'] + }, + components: [ + { + dom: fromHtml(`

${sanitizeHtmlString(providersBackstage.translate(message))}

`) + } + ] + } + ] + }); + const pFooter = (buttons) => ModalDialog.parts.footer({ + dom: { + tag: 'div', + classes: ['tox-dialog__footer'] + }, + components: buttons + }); + const pFooterGroup = (startButtons, endButtons) => [ + Container.sketch({ + dom: { + tag: 'div', + classes: ['tox-dialog__footer-start'] + }, + components: startButtons + }), + Container.sketch({ + dom: { + tag: 'div', + classes: ['tox-dialog__footer-end'] + }, + components: endButtons + }) + ]; + const renderDialog$1 = (spec) => { + const dialogClass = 'tox-dialog'; + const blockerClass = dialogClass + '-wrap'; + const blockerBackdropClass = blockerClass + '__backdrop'; + const scrollLockClass = dialogClass + '__disable-scroll'; + return ModalDialog.sketch({ + lazySink: spec.lazySink, + onEscape: (comp) => { + spec.onEscape(comp); + // TODO: Make a strong type for Handled KeyEvent + return Optional.some(true); + }, + useTabstopAt: (elem) => !isPseudoStop(elem), + firstTabstop: spec.firstTabstop, + dom: { + tag: 'div', + classes: [dialogClass].concat(spec.extraClasses), + styles: { + position: 'relative', + ...spec.extraStyles + } + }, + components: [ + spec.header, + spec.body, + ...spec.footer.toArray() + ], + parts: { + blocker: { + dom: fromHtml(`
`), + components: [ + { + dom: { + tag: 'div', + classes: (isTouch ? [blockerBackdropClass, blockerBackdropClass + '--opaque'] : [blockerBackdropClass]) + } + } + ] + } + }, + dragBlockClass: blockerClass, + modalBehaviours: derive$1([ + Focusing.config({}), + config('dialog-events', spec.dialogEvents.concat([ + // Note: `runOnSource` here will only listen to the event at the outer component level. + // Using just `run` instead will cause an infinite loop as `focusIn` would fire a `focusin` which would then get responded to and so forth. + runOnSource(focusin(), (comp, _se) => { + Blocking.isBlocked(comp) ? noop() : Keying.focusIn(comp); + }), + run$1(focusShifted(), (comp, se) => { + comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { + newFocus: se.event.newFocus + }); + }) + ])), + config('scroll-lock', [ + runOnAttached(() => { + add$2(body(), scrollLockClass); + }), + runOnDetached(() => { + remove$3(body(), scrollLockClass); + }) + ]), + ...spec.extraBehaviours + ]), + eventOrder: { + [execute$5()]: ['dialog-events'], + [attachedToDom()]: ['scroll-lock', 'dialog-events', 'alloy.base.behaviour'], + [detachedFromDom()]: ['alloy.base.behaviour', 'dialog-events', 'scroll-lock'], + ...spec.eventOrder + } + }); + }; + + const renderClose = (providersBackstage) => Button.sketch({ + dom: { + tag: 'button', + classes: ['tox-button', 'tox-button--icon', 'tox-button--naked'], + attributes: { + 'type': 'button', + 'aria-label': providersBackstage.translate('Close'), + 'data-mce-name': 'close' + } + }, + buttonBehaviours: derive$1([ + Tabstopping.config({}), + Tooltipping.config(providersBackstage.tooltips.getConfig({ + tooltipText: providersBackstage.translate('Close') + })) + ]), + components: [ + render$4('close', { tag: 'span', classes: ['tox-icon'] }, providersBackstage.icons) + ], + action: (comp) => { + emit(comp, formCancelEvent); + }, + }); + const renderTitle = (spec, dialogId, titleId, providersBackstage) => { + const renderComponents = (data) => [text$2(providersBackstage.translate(data.title))]; + return { + dom: { + tag: 'h1', + classes: ['tox-dialog__title'], + attributes: { + ...titleId.map((x) => ({ id: x })).getOr({}) + } + }, + components: [], + behaviours: derive$1([ + Reflecting.config({ + channel: `${titleChannel}-${dialogId}`, + initialData: spec, + renderComponents + }) + ]) + }; + }; + const renderDragHandle = () => ({ + dom: fromHtml('
') + }); + const renderInlineHeader = (spec, dialogId, titleId, providersBackstage) => Container.sketch({ + dom: fromHtml('
'), + components: [ + renderTitle(spec, dialogId, Optional.some(titleId), providersBackstage), + renderDragHandle(), + renderClose(providersBackstage) + ], + containerBehaviours: derive$1([ + Dragging.config({ + mode: 'mouse', + blockerClass: 'blocker', + getTarget: (handle) => { + return closest$3(handle, '[role="dialog"]').getOrDie(); + }, + snaps: { + getSnapPoints: () => [], + leftAttr: 'data-drag-left', + topAttr: 'data-drag-top' + }, + onDrag: (comp, target) => { + comp.getSystem().broadcastOn([repositionPopups()], { target }); + } + }) + ]) + }); + const renderModalHeader = (spec, dialogId, providersBackstage) => { + const pTitle = ModalDialog.parts.title(renderTitle(spec, dialogId, Optional.none(), providersBackstage)); + const pHandle = ModalDialog.parts.draghandle(renderDragHandle()); + const pClose = ModalDialog.parts.close(renderClose(providersBackstage)); + const components = [pTitle].concat(spec.draggable ? [pHandle] : []).concat([pClose]); + return Container.sketch({ + dom: fromHtml('
'), + components + }); + }; + + const getHeader = (title, dialogId, backstage) => renderModalHeader({ + title: backstage.shared.providers.translate(title), + draggable: backstage.dialog.isDraggableModal() + }, dialogId, backstage.shared.providers); + const getBusySpec = (message, bs, providers, headerHeight) => ({ + dom: { + tag: 'div', + classes: ['tox-dialog__busy-spinner'], + attributes: { + 'aria-label': providers.translate(message) + }, + styles: { + left: '0px', + right: '0px', + bottom: '0px', + top: `${headerHeight.getOr(0)}px`, + position: 'absolute' + } + }, + behaviours: bs, + components: [{ + dom: fromHtml('
') + }] + }); + const getEventExtras = (lazyDialog, providers, extra) => ({ + onClose: () => extra.closeWindow(), + onBlock: (blockEvent) => { + const headerHeight = descendant(lazyDialog().element, '.tox-dialog__header').map((header) => get$d(header)); + ModalDialog.setBusy(lazyDialog(), (_comp, bs) => getBusySpec(blockEvent.message, bs, providers, headerHeight)); + }, + onUnblock: () => { + ModalDialog.setIdle(lazyDialog()); + } + }); + const fullscreenClass = 'tox-dialog--fullscreen'; + const largeDialogClass = 'tox-dialog--width-lg'; + const mediumDialogClass = 'tox-dialog--width-md'; + const getDialogSizeClass = (size) => { + switch (size) { + case 'large': + return Optional.some(largeDialogClass); + case 'medium': + return Optional.some(mediumDialogClass); + default: + return Optional.none(); + } + }; + const updateDialogSizeClass = (size, component) => { + const dialogBody = SugarElement.fromDom(component.element.dom); + if (!has(dialogBody, fullscreenClass)) { + remove$2(dialogBody, [largeDialogClass, mediumDialogClass]); + getDialogSizeClass(size).each((dialogSizeClass) => add$2(dialogBody, dialogSizeClass)); + } + }; + const toggleFullscreen = (comp, currentSize) => { + const dialogBody = SugarElement.fromDom(comp.element.dom); + const classes = get$7(dialogBody); + const currentSizeClass = find$5(classes, (c) => c === largeDialogClass || c === mediumDialogClass).or(getDialogSizeClass(currentSize)); + toggle$3(dialogBody, [fullscreenClass, ...currentSizeClass.toArray()]); + }; + const renderModalDialog = (spec, dialogEvents, backstage) => build$1(renderDialog$1({ + ...spec, + firstTabstop: 1, + lazySink: backstage.shared.getSink, + extraBehaviours: [ + memory({}), + ...spec.extraBehaviours + ], + onEscape: (comp) => { + emit(comp, formCancelEvent); + }, + dialogEvents, + eventOrder: { + [receive()]: [Reflecting.name(), Receiving.name()], + [attachedToDom()]: ['scroll-lock', Reflecting.name(), 'messages', 'dialog-events', 'alloy.base.behaviour'], + [detachedFromDom()]: ['alloy.base.behaviour', 'dialog-events', 'messages', Reflecting.name(), 'scroll-lock'] + } + })); + const mapMenuButtons = (buttons, menuItemStates = {}) => { + const mapItems = (button) => { + const items = map$2(button.items, (item) => { + const cell = get$h(menuItemStates, item.name).getOr(Cell(false)); + return { + ...item, + storage: cell + }; + }); + return { + ...button, + items + }; + }; + return map$2(buttons, (button) => { + return button.type === 'menu' ? mapItems(button) : button; + }); + }; + const extractCellsToObject = (buttons) => foldl(buttons, (acc, button) => { + if (button.type === 'menu') { + const menuButton = button; + return foldl(menuButton.items, (innerAcc, item) => { + innerAcc[item.name] = item.storage; + return innerAcc; + }, acc); + } + return acc; + }, {}); + + const initCommonEvents = (fireApiEvent, extras) => [ + // When focus moves onto a tab-placeholder, skip to the next thing in the tab sequence + runWithTarget(focusin(), onFocus), + // TODO: Test if disabled first. + fireApiEvent(formCloseEvent, (_api, spec, _event, self) => { + // TINY-9148: Safari scrolls down to the sink if the dialog is selected before removing, + // so we should blur the currently active element beforehand. + if (hasFocus(self.element)) { + active$1(getRootNode(self.element)).each(blur$1); + } + extras.onClose(); + spec.onClose(); + }), + // TODO: Test if disabled first. + fireApiEvent(formCancelEvent, (api, spec, _event, self) => { + spec.onCancel(api); + emit(self, formCloseEvent); + }), + run$1(formUnblockEvent, (_c, _se) => extras.onUnblock()), + run$1(formBlockEvent, (_c, se) => extras.onBlock(se.event)) + ]; + const initUrlDialog = (getInstanceApi, extras) => { + const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => { + withSpec(c, (spec, _c) => { + f(getInstanceApi(), spec, se.event, c); + }); + }); + const withSpec = (c, f) => { + Reflecting.getState(c).get().each((currentDialog) => { + f(currentDialog, c); + }); + }; + return [ + ...initCommonEvents(fireApiEvent, extras), + fireApiEvent(formActionEvent, (api, spec, event) => { + spec.onAction(api, { name: event.name }); + }) + ]; + }; + const initDialog = (getInstanceApi, extras, getSink) => { + const fireApiEvent = (eventName, f) => run$1(eventName, (c, se) => { + withSpec(c, (spec, _c) => { + f(getInstanceApi(), spec, se.event, c); + }); + }); + const withSpec = (c, f) => { + Reflecting.getState(c).get().each((currentDialogInit) => { + f(currentDialogInit.internalDialog, c); + }); + }; + return [ + ...initCommonEvents(fireApiEvent, extras), + fireApiEvent(formSubmitEvent, (api, spec) => spec.onSubmit(api)), + fireApiEvent(formChangeEvent, (api, spec, event) => { + spec.onChange(api, { name: event.name }); + }), + fireApiEvent(formActionEvent, (api, spec, event, component) => { + // TODO: add a test for focusIn (TINY-10125) + const focusIn = () => component.getSystem().isConnected() ? Keying.focusIn(component) : undefined; + const isDisabled = (focused) => has$1(focused, 'disabled') || getOpt(focused, 'aria-disabled').exists((val) => val === 'true'); + const rootNode = getRootNode(component.element); + const current = active$1(rootNode); + spec.onAction(api, { name: event.name, value: event.value }); + active$1(rootNode).fold(focusIn, (focused) => { + // We need to check if the focused element is disabled because apparently firefox likes to leave focus on disabled elements. + if (isDisabled(focused)) { + focusIn(); + // And we need the below check for IE, which likes to leave focus on the parent of disabled elements + } + else if (current.exists((cur) => contains(focused, cur) && isDisabled(cur))) { + focusIn(); + // Lastly if something outside the sink has focus then return the focus back to the dialog + } + else { + getSink().toOptional() + .filter((sink) => !contains(sink.element, focused)) + .each(focusIn); + } + }); + }), + fireApiEvent(formTabChangeEvent, (api, spec, event) => { + spec.onTabChange(api, { newTabName: event.name, oldTabName: event.oldName }); + }), + // When the dialog is being closed, store the current state of the form + runOnDetached((component) => { + const api = getInstanceApi(); + Representing.setValue(component, api.getData()); + }) + ]; + }; + + const makeButton = (button, backstage) => renderFooterButton(button, button.type, backstage); + const lookup = (compInSystem, footerButtons, buttonName) => find$5(footerButtons, (button) => button.name === buttonName) + .bind((memButton) => memButton.memento.getOpt(compInSystem)); + const renderComponents = (_data, state) => { + // default group is 'end' + const footerButtons = state.map((s) => s.footerButtons).getOr([]); + const buttonGroups = partition$3(footerButtons, (button) => button.align === 'start'); + const makeGroup = (edge, buttons) => Container.sketch({ + dom: { + tag: 'div', + classes: [`tox-dialog__footer-${edge}`] + }, + components: map$2(buttons, (button) => button.memento.asSpec()) + }); + const startButtons = makeGroup('start', buttonGroups.pass); + const endButtons = makeGroup('end', buttonGroups.fail); + return [startButtons, endButtons]; + }; + const renderFooter = (initSpec, dialogId, backstage) => { + const updateState = (comp, data) => { + const footerButtons = map$2(data.buttons, (button) => { + const memButton = record(makeButton(button, backstage)); + return { + name: button.name, + align: button.align, + memento: memButton + }; + }); + const lookupByName = (buttonName) => lookup(comp, footerButtons, buttonName); + return Optional.some({ + lookupByName, + footerButtons + }); + }; + return { + dom: fromHtml(''), + components: [], + behaviours: derive$1([ + Reflecting.config({ + channel: `${footerChannel}-${dialogId}`, + initialData: initSpec, + updateState, + renderComponents + }) + ]) + }; + }; + const renderInlineFooter = (initSpec, dialogId, backstage) => renderFooter(initSpec, dialogId, backstage); + const renderModalFooter = (initSpec, dialogId, backstage) => ModalDialog.parts.footer(renderFooter(initSpec, dialogId, backstage)); + + const getCompByName = (access, name) => { + // TODO: Add API to alloy to find the inner most component of a Composing chain. + const root = access.getRoot(); + // This is just to avoid throwing errors if the dialog closes before this. We should take it out + // while developing (probably), and put it back in for the real thing. + if (root.getSystem().isConnected()) { + const form = Composing.getCurrent(access.getFormWrapper()).getOr(access.getFormWrapper()); + return Form.getField(form, name).orThunk(() => { + const footer = access.getFooter(); + const footerState = footer.bind((f) => Reflecting.getState(f).get()); + return footerState.bind((f) => f.lookupByName(name)); + }); + } + else { + return Optional.none(); + } + }; + const validateData$1 = (access, data) => { + const root = access.getRoot(); + return Reflecting.getState(root).get().map((dialogState) => getOrDie(asRaw('data', dialogState.dataValidator, data))).getOr(data); + }; + const getDialogApi = (access, doRedial, menuItemStates) => { + const withRoot = (f) => { + const root = access.getRoot(); + if (root.getSystem().isConnected()) { + f(root); + } + }; + const getData = () => { + const root = access.getRoot(); + const valueComp = root.getSystem().isConnected() ? access.getFormWrapper() : root; + const representedValues = Representing.getValue(valueComp); + const menuItemCurrentState = map$1(menuItemStates, (cell) => cell.get()); + return { + ...representedValues, + ...menuItemCurrentState + }; + }; + const setData = (newData) => { + // Currently, the decision is to ignore setData calls that fire after the dialog is closed + withRoot((_) => { + const prevData = instanceApi.getData(); + const mergedData = deepMerge(prevData, newData); + const newInternalData = validateData$1(access, mergedData); + const form = access.getFormWrapper(); + Representing.setValue(form, newInternalData); + each(menuItemStates, (v, k) => { + if (has$2(mergedData, k)) { + v.set(mergedData[k]); + } + }); + }); + }; + const setEnabled = (name, state) => { + getCompByName(access, name).each(state ? Disabling.enable : Disabling.disable); + }; + const focus = (name) => { + getCompByName(access, name).each(Focusing.focus); + }; + const block = (message) => { + if (!isString(message)) { + throw new Error('The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument'); + } + withRoot((root) => { + emitWith(root, formBlockEvent, { message }); + }); + }; + const unblock = () => { + withRoot((root) => { + emit(root, formUnblockEvent); + }); + }; + const showTab = (name) => { + withRoot((_) => { + const body = access.getBody(); + const bodyState = Reflecting.getState(body); + if (bodyState.get().exists((b) => b.isTabPanel())) { + Composing.getCurrent(body).each((tabSection) => { + TabSection.showTab(tabSection, name); + }); + } + }); + }; + const redial = (d) => { + withRoot((root) => { + const id = access.getId(); + const dialogInit = doRedial(d); + const storedMenuButtons = mapMenuButtons(dialogInit.internalDialog.buttons, menuItemStates); + // TINY-9223: We only need to broadcast to the mothership containing the dialog + root.getSystem().broadcastOn([`${dialogChannel}-${id}`], dialogInit); + // NOTE: Reflecting does not have any smart handling of nested reflecting components, + // and the order of receiving a broadcast is non-deterministic. Here we use separate + // channels for each section (title, body, footer), and make those broadcasts *after* + // we've already sent the overall dialog broadcast. The overall dialog broadcast + // doesn't actually change the components ... its Reflecting config just stores state, + // but these Reflecting configs (title, body, footer) do change the components based on + // the received broadcasts. + root.getSystem().broadcastOn([`${titleChannel}-${id}`], dialogInit.internalDialog); + root.getSystem().broadcastOn([`${bodyChannel}-${id}`], dialogInit.internalDialog); + root.getSystem().broadcastOn([`${footerChannel}-${id}`], { + ...dialogInit.internalDialog, + buttons: storedMenuButtons + }); + instanceApi.setData(dialogInit.initialData); + }); + }; + const close = () => { + withRoot((root) => { + emit(root, formCloseEvent); + }); + }; + const instanceApi = { + getData, + setData, + setEnabled, + focus, + block, + unblock, + showTab, + redial, + close, + toggleFullscreen: access.toggleFullscreen + }; + return instanceApi; + }; + + const renderDialog = (dialogInit, extra, backstage) => { + const dialogId = generate$6('dialog'); + const internalDialog = dialogInit.internalDialog; + const header = getHeader(internalDialog.title, dialogId, backstage); + const dialogSize = Cell(internalDialog.size); + const getCompByName$1 = (name) => getCompByName(modalAccess, name); + const dialogSizeClasses = getDialogSizeClass(dialogSize.get()).toArray(); + const updateState = (comp, incoming) => { + dialogSize.set(incoming.internalDialog.size); + updateDialogSizeClass(incoming.internalDialog.size, comp); + return Optional.some(incoming); + }; + const body = renderModalBody({ + body: internalDialog.body, + initialData: internalDialog.initialData + }, dialogId, backstage, getCompByName$1); + const storedMenuButtons = mapMenuButtons(internalDialog.buttons); + const objOfCells = extractCellsToObject(storedMenuButtons); + const footer = someIf(storedMenuButtons.length !== 0, renderModalFooter({ buttons: storedMenuButtons }, dialogId, backstage)); + const dialogEvents = initDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra), backstage.shared.getSink); + const spec = { + id: dialogId, + header, + body, + footer, + extraClasses: dialogSizeClasses, + extraBehaviours: [ + Reflecting.config({ + channel: `${dialogChannel}-${dialogId}`, + updateState, + initialData: dialogInit + }), + ], + extraStyles: {} + }; + const dialog = renderModalDialog(spec, dialogEvents, backstage); + const modalAccess = (() => { + const getForm = () => { + const outerForm = ModalDialog.getBody(dialog); + return Composing.getCurrent(outerForm).getOr(outerForm); + }; + const toggleFullscreen$1 = () => { + toggleFullscreen(dialog, dialogSize.get()); + }; + return { + getId: constant$1(dialogId), + getRoot: constant$1(dialog), + getBody: () => ModalDialog.getBody(dialog), + getFooter: () => ModalDialog.getFooter(dialog), + getFormWrapper: getForm, + toggleFullscreen: toggleFullscreen$1 + }; + })(); + // TODO: Get the validator from the dialog state. + const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells); + return { + dialog, + instanceApi + }; + }; + + // DUPE with SilverDialog. Cleaning up. + const renderInlineDialog = (dialogInit, extra, backstage, ariaAttrs = false, refreshDocking) => { + const dialogId = generate$6('dialog'); + const dialogLabelId = generate$6('dialog-label'); + const dialogContentId = generate$6('dialog-content'); + const internalDialog = dialogInit.internalDialog; + const getCompByName$1 = (name) => getCompByName(modalAccess, name); + const dialogSize = Cell(internalDialog.size); + const dialogSizeClass = getDialogSizeClass(dialogSize.get()).toArray(); + // Reflecting behaviour broadcasts on dialog channel only on redial. + const updateState = (comp, incoming) => { + // Update dialog size and position upon redial. + dialogSize.set(incoming.internalDialog.size); + updateDialogSizeClass(incoming.internalDialog.size, comp); + refreshDocking(); + return Optional.some(incoming); + }; + const memHeader = record(renderInlineHeader({ + title: internalDialog.title, + draggable: true + }, dialogId, dialogLabelId, backstage.shared.providers)); + const memBody = record(renderInlineBody({ + body: internalDialog.body, + initialData: internalDialog.initialData, + }, dialogId, dialogContentId, backstage, ariaAttrs, getCompByName$1)); + const storagedMenuButtons = mapMenuButtons(internalDialog.buttons); + const objOfCells = extractCellsToObject(storagedMenuButtons); + const optMemFooter = someIf(storagedMenuButtons.length !== 0, record(renderInlineFooter({ + buttons: storagedMenuButtons + }, dialogId, backstage))); + const dialogEvents = initDialog(() => instanceApi, { + onBlock: (event) => { + Blocking.block(dialog, (_comp, bs) => { + const headerHeight = memHeader.getOpt(dialog).map((dialog) => get$d(dialog.element)); + return getBusySpec(event.message, bs, backstage.shared.providers, headerHeight); + }); + }, + onUnblock: () => { + Blocking.unblock(dialog); + }, + onClose: () => extra.closeWindow() + }, backstage.shared.getSink); + const inlineClass = 'tox-dialog-inline'; + const os = detect$1().os; + // TODO: Disable while validating? + const dialog = build$1({ + dom: { + tag: 'div', + classes: ['tox-dialog', inlineClass, ...dialogSizeClass], + attributes: { + role: 'dialog', + // TINY-10808 - Workaround to address the dialog header not being announced on VoiceOver with aria-labelledby, ideally we should use the aria-labelledby + ...os.isMacOS() ? { 'aria-label': internalDialog.title } : { 'aria-labelledby': dialogLabelId } + } + }, + eventOrder: { + [receive()]: [Reflecting.name(), Receiving.name()], + [execute$5()]: ['execute-on-form'], + [attachedToDom()]: ['reflecting', 'execute-on-form'] + }, + // Dupe with SilverDialog. + behaviours: derive$1([ + Keying.config({ + mode: 'cyclic', + onEscape: (c) => { + emit(c, formCloseEvent); + return Optional.some(true); + }, + useTabstopAt: (elem) => !isPseudoStop(elem) && (name$3(elem) !== 'button' || get$g(elem, 'disabled') !== 'disabled'), + firstTabstop: 1 + }), + Reflecting.config({ + channel: `${dialogChannel}-${dialogId}`, + updateState, + initialData: dialogInit + }), + Focusing.config({}), + config('execute-on-form', dialogEvents.concat([ + // Note: `runOnSource` here will only listen to the event at the outer component level. + // Using just `run` instead will cause an infinite loop as `focusIn` would fire a `focusin` which would then get responded to and so forth. + runOnSource(focusin(), (comp, _se) => { + Keying.focusIn(comp); + }), + run$1(focusShifted(), (comp, se) => { + comp.getSystem().broadcastOn([dialogFocusShiftedChannel], { + newFocus: se.event.newFocus + }); + }) + ])), + Blocking.config({ getRoot: () => Optional.some(dialog) }), + Replacing.config({}), + memory({}) + ]), + components: [ + memHeader.asSpec(), + memBody.asSpec(), + ...optMemFooter.map((memFooter) => memFooter.asSpec()).toArray() + ] + }); + const toggleFullscreen$1 = () => { + toggleFullscreen(dialog, dialogSize.get()); + }; + // TODO: Clean up the dupe between this (InlineDialog) and SilverDialog + const modalAccess = { + getId: constant$1(dialogId), + getRoot: constant$1(dialog), + getFooter: () => optMemFooter.map((memFooter) => memFooter.get(dialog)), + getBody: () => memBody.get(dialog), + getFormWrapper: () => { + const body = memBody.get(dialog); + return Composing.getCurrent(body).getOr(body); + }, + toggleFullscreen: toggleFullscreen$1 + }; + const instanceApi = getDialogApi(modalAccess, extra.redial, objOfCells); + return { + dialog, + instanceApi + }; + }; + + var global = tinymce.util.Tools.resolve('tinymce.util.URI'); + + const getUrlDialogApi = (root) => { + const withRoot = (f) => { + if (root.getSystem().isConnected()) { + f(root); + } + }; + const block = (message) => { + if (!isString(message)) { + throw new Error('The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument'); + } + withRoot((root) => { + emitWith(root, formBlockEvent, { message }); + }); + }; + const unblock = () => { + withRoot((root) => { + emit(root, formUnblockEvent); + }); + }; + const close = () => { + withRoot((root) => { + emit(root, formCloseEvent); + }); + }; + const sendMessage = (data) => { + withRoot((root) => { + root.getSystem().broadcastOn([bodySendMessageChannel], data); + }); + }; + return { + block, + unblock, + close, + sendMessage + }; + }; + + // A list of supported message actions + const SUPPORTED_MESSAGE_ACTIONS = ['insertContent', 'setContent', 'execCommand', 'close', 'block', 'unblock']; + const isSupportedMessage = (data) => isObject(data) && SUPPORTED_MESSAGE_ACTIONS.indexOf(data.mceAction) !== -1; + const isCustomMessage = (data) => !isSupportedMessage(data) && isObject(data) && has$2(data, 'mceAction'); + const handleMessage = (editor, api, data) => { + switch (data.mceAction) { + case 'insertContent': + editor.insertContent(data.content); + break; + case 'setContent': + editor.setContent(data.content); + break; + case 'execCommand': + const ui = isBoolean(data.ui) ? data.ui : false; + editor.execCommand(data.cmd, ui, data.value); + break; + case 'close': + api.close(); + break; + case 'block': + api.block(data.message); + break; + case 'unblock': + api.unblock(); + break; + } + }; + const renderUrlDialog = (internalDialog, extra, editor, backstage) => { + const dialogId = generate$6('dialog'); + const header = getHeader(internalDialog.title, dialogId, backstage); + const body = renderIframeBody(internalDialog); + const footer = internalDialog.buttons.bind((buttons) => { + // Don't render a footer if no buttons are specified + if (buttons.length === 0) { + return Optional.none(); + } + else { + return Optional.some(renderModalFooter({ buttons }, dialogId, backstage)); + } + }); + const dialogEvents = initUrlDialog(() => instanceApi, getEventExtras(() => dialog, backstage.shared.providers, extra)); + // Add the styles for the modal width/height + const styles = { + ...internalDialog.height.fold(() => ({}), (height) => ({ 'height': height + 'px', 'max-height': height + 'px' })), + ...internalDialog.width.fold(() => ({}), (width) => ({ 'width': width + 'px', 'max-width': width + 'px' })) + }; + // Default back to using a large sized dialog, if no dimensions are specified + const classes = internalDialog.width.isNone() && internalDialog.height.isNone() ? ['tox-dialog--width-lg'] : []; + // Determine the iframe urls domain, so we can target that specifically when sending messages + const iframeUri = new global(internalDialog.url, { base_uri: new global(window.location.href) }); + const iframeDomain = `${iframeUri.protocol}://${iframeUri.host}${iframeUri.port ? ':' + iframeUri.port : ''}`; + const messageHandlerUnbinder = unbindable(); + const updateState = (_comp, incoming) => Optional.some(incoming); + // Setup the behaviours for dealing with messages between the iframe and current window + const extraBehaviours = [ + // Because this doesn't define `renderComponents`, all this does is update the state. + // We use the state for the initialData. The other parts (body etc.) render the + // components based on what reflecting receives. + Reflecting.config({ + channel: `${dialogChannel}-${dialogId}`, + updateState, + initialData: internalDialog + }), + config('messages', [ + // When the dialog is opened, bind a window message listener for the spec url + runOnAttached(() => { + const unbind = bind$1(SugarElement.fromDom(window), 'message', (e) => { + // Validate that the request came from the correct domain + if (iframeUri.isSameOrigin(new global(e.raw.origin))) { + const data = e.raw.data; + // Handle the message if it has the 'mceAction' key, otherwise just ignore it + if (isSupportedMessage(data)) { + handleMessage(editor, instanceApi, data); + } + else if (isCustomMessage(data)) { + internalDialog.onMessage(instanceApi, data); + } + } + }); + messageHandlerUnbinder.set(unbind); + }), + // When the dialog is closed, unbind the window message listener + runOnDetached(messageHandlerUnbinder.clear) + ]), + Receiving.config({ + channels: { + [bodySendMessageChannel]: { + onReceive: (comp, data) => { + // Send the message to the iframe via postMessage + descendant(comp.element, 'iframe').each((iframeEle) => { + const iframeWin = iframeEle.dom.contentWindow; + if (isNonNullable(iframeWin)) { + iframeWin.postMessage(data, iframeDomain); + } + }); + } + } + } + }) + ]; + const spec = { + id: dialogId, + header, + body, + footer, + extraClasses: classes, + extraBehaviours, + extraStyles: styles + }; + const dialog = renderModalDialog(spec, dialogEvents, backstage); + const instanceApi = getUrlDialogApi(dialog); + return { + dialog, + instanceApi + }; + }; + + const setup$2 = (backstage) => { + const sharedBackstage = backstage.shared; + const open = (message, callback) => { + const closeDialog = () => { + ModalDialog.hide(alertDialog); + callback(); + }; + const memFooterClose = record(renderFooterButton({ + context: 'any', + name: 'close-alert', + text: 'OK', + primary: true, + buttonType: Optional.some('primary'), + align: 'end', + enabled: true, + icon: Optional.none() + }, 'cancel', backstage)); + const titleSpec = pUntitled(); + const closeSpec = pClose(closeDialog, sharedBackstage.providers); + const alertDialog = build$1(renderDialog$1({ + lazySink: () => sharedBackstage.getSink(), + header: hiddenHeader(titleSpec, closeSpec), + body: pBodyMessage(message, sharedBackstage.providers), + footer: Optional.some(pFooter(pFooterGroup([], [ + memFooterClose.asSpec() + ]))), + onEscape: closeDialog, + extraClasses: ['tox-alert-dialog'], + extraBehaviours: [], + extraStyles: {}, + dialogEvents: [ + run$1(formCancelEvent, closeDialog) + ], + eventOrder: {} + })); + ModalDialog.show(alertDialog); + const footerCloseButton = memFooterClose.get(alertDialog); + Focusing.focus(footerCloseButton); + }; + return { + open + }; + }; + + const setup$1 = (backstage) => { + const sharedBackstage = backstage.shared; + // FIX: Extreme dupe with Alert dialog + const open = (message, callback) => { + const closeDialog = (state) => { + ModalDialog.hide(confirmDialog); + callback(state); + }; + const memFooterYes = record(renderFooterButton({ + context: 'any', + name: 'yes', + text: 'Yes', + primary: true, + buttonType: Optional.some('primary'), + align: 'end', + enabled: true, + icon: Optional.none() + }, 'submit', backstage)); + const footerNo = renderFooterButton({ + context: 'any', + name: 'no', + text: 'No', + primary: false, + buttonType: Optional.some('secondary'), + align: 'end', + enabled: true, + icon: Optional.none() + }, 'cancel', backstage); + const titleSpec = pUntitled(); + const closeSpec = pClose(() => closeDialog(false), sharedBackstage.providers); + const confirmDialog = build$1(renderDialog$1({ + lazySink: () => sharedBackstage.getSink(), + header: hiddenHeader(titleSpec, closeSpec), + body: pBodyMessage(message, sharedBackstage.providers), + footer: Optional.some(pFooter(pFooterGroup([], [ + footerNo, + memFooterYes.asSpec() + ]))), + onEscape: () => closeDialog(false), + extraClasses: ['tox-confirm-dialog'], + extraBehaviours: [], + extraStyles: {}, + dialogEvents: [ + run$1(formCancelEvent, () => closeDialog(false)), + run$1(formSubmitEvent, () => closeDialog(true)) + ], + eventOrder: {} + })); + ModalDialog.show(confirmDialog); + const footerYesButton = memFooterYes.get(confirmDialog); + Focusing.focus(footerYesButton); + }; + return { + open + }; + }; + + const validateData = (data, validator) => getOrDie(asRaw('data', validator, data)); + const isAlertOrConfirmDialog = (target) => closest$1(target, '.tox-alert-dialog') || closest$1(target, '.tox-confirm-dialog'); + const inlineAdditionalBehaviours = (editor, isStickyToolbar, isToolbarLocationTop, onHide) => { + // When using sticky toolbars it already handles the docking behaviours so applying docking would + // do nothing except add additional processing when scrolling, so we don't want to include it here + // (Except when the toolbar is located at the bottom since the anchor will be at the top) + if (isStickyToolbar && isToolbarLocationTop) { + return []; + } + else { + return [ + Docking.config({ + contextual: { + lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))), + fadeInClass: 'tox-dialog-dock-fadein', + fadeOutClass: 'tox-dialog-dock-fadeout', + transitionClass: 'tox-dialog-dock-transition', + onHide + }, + modes: ['top'], + lazyViewport: (comp) => { + // If we don't have a special scrolling environment, then just use the default + // viewport of (window) + const optScrollingContext = detectWhenSplitUiMode(editor, comp.element); + return optScrollingContext + .map((sc) => { + const combinedBounds = getBoundsFrom(sc); + return { + bounds: combinedBounds, + optScrollEnv: Optional.some({ + currentScrollTop: sc.element.dom.scrollTop, + scrollElmTop: absolute$3(sc.element).top + }) + }; + }).getOrThunk(() => ({ + bounds: win(), + optScrollEnv: Optional.none() + })); + } + }) + ]; + } + }; + const setup = (extras) => { + const editor = extras.editor; + const isStickyToolbar$1 = isStickyToolbar(editor); + // Alert and Confirm dialogs are Modal Dialogs + const alertDialog = setup$2(extras.backstages.dialog); + const confirmDialog = setup$1(extras.backstages.dialog); + const open = (config, params, closeWindow) => { + if (!isUndefined(params)) { + if (params.inline === 'toolbar') { + return openInlineDialog(config, extras.backstages.popup.shared.anchors.inlineDialog(), closeWindow, params); + } + else if (params.inline === 'bottom') { + return openBottomInlineDialog(config, extras.backstages.popup.shared.anchors.inlineBottomDialog(), closeWindow, params); + } + else if (params.inline === 'cursor') { + return openInlineDialog(config, extras.backstages.popup.shared.anchors.cursor(), closeWindow, params); + } + } + return openModalDialog(config, closeWindow); + }; + const openUrl = (config, closeWindow) => openModalUrlDialog(config, closeWindow); + const openModalUrlDialog = (config, closeWindow) => { + const factory = (contents) => { + const dialog = renderUrlDialog(contents, { + closeWindow: () => { + ModalDialog.hide(dialog.dialog); + closeWindow(dialog.instanceApi); + } + }, editor, extras.backstages.dialog); + ModalDialog.show(dialog.dialog); + return dialog.instanceApi; + }; + return DialogManager.openUrl(factory, config); + }; + const openModalDialog = (config, closeWindow) => { + const factory = (contents, internalInitialData, dataValidator) => { + // We used to validate data here, but it's done by the instanceApi.setData call below. + const initialData = internalInitialData; + const dialogInit = { + dataValidator, + initialData, + internalDialog: contents + }; + const dialog = renderDialog(dialogInit, { + redial: DialogManager.redial, + closeWindow: () => { + ModalDialog.hide(dialog.dialog); + closeWindow(dialog.instanceApi); + } + }, extras.backstages.dialog); + ModalDialog.show(dialog.dialog); + dialog.instanceApi.setData(initialData); + return dialog.instanceApi; + }; + return DialogManager.open(factory, config); + }; + const openInlineDialog = (config$1, anchor, closeWindow, windowParams) => { + const factory = (contents, internalInitialData, dataValidator) => { + const initialData = validateData(internalInitialData, dataValidator); + const inlineDialog = value$2(); + const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop(); + const dialogInit = { + dataValidator, + initialData, + internalDialog: contents + }; + const refreshDocking = () => inlineDialog.on((dialog) => { + InlineView.reposition(dialog); + if (!isStickyToolbar$1 || !isToolbarLocationTop) { + Docking.refresh(dialog); + } + }); + const dialogUi = renderInlineDialog(dialogInit, { + redial: DialogManager.redial, + closeWindow: () => { + inlineDialog.on(InlineView.hide); + editor.off('ResizeEditor', refreshDocking); + editor.off('ScrollWindow', repositionPopups$1); + inlineDialog.clear(); + closeWindow(dialogUi.instanceApi); + } + }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking); + const repositionPopups$1 = () => dialogUi.dialog.getSystem().broadcastOn([repositionPopups()], { target: dialogUi.dialog.element }); + const dismissPopups$1 = () => dialogUi.dialog.getSystem().broadcastOn([dismissPopups()], { target: dialogUi.dialog.element }); + const inlineDialogComp = build$1(InlineView.sketch({ + lazySink: extras.backstages.popup.shared.getSink, + dom: { + tag: 'div', + classes: [] + }, + // Fires the default dismiss event. + fireDismissalEventInstead: (windowParams.persistent ? { event: 'doNotDismissYet' } : {}), + // TINY-9412: The docking behaviour for inline dialogs is inconsistent + // for toolbar_location: bottom. We need to clarify exactly what the behaviour + // should be. The intent here might have been that they shouldn't automatically + // reposition at all because they aren't visually connected to the toolbar + // (i.e. inline "toolbar" dialogs still display at the top, even when the + // toolbar_location is bottom), but it's unclear. + ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} }, + inlineBehaviours: derive$1([ + config('window-manager-inline-events', [ + run$1(dismissRequested(), (_comp, _se) => { + emit(dialogUi.dialog, formCancelEvent); + }) + ]), + ...inlineAdditionalBehaviours(editor, isStickyToolbar$1, isToolbarLocationTop, dismissPopups$1) + ]), + // Treat alert or confirm dialogs as part of the inline dialog + isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target) + })); + inlineDialog.set(inlineDialogComp); + const getInlineDialogBounds = () => { + // At the moment the inline dialog is just put anywhere in the body, and docking is what is used to make + // sure that it stays onscreen + const elem = editor.inline ? body() : SugarElement.fromDom(editor.getContainer()); + const bounds = box$1(elem); + return Optional.some(bounds); + }; + // Position the inline dialog + InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds); + // Refresh the docking position if not using a sticky toolbar + if (!isStickyToolbar$1 || !isToolbarLocationTop) { + Docking.refresh(inlineDialogComp); + // Bind to the editor resize event and update docking as needed. We don't need to worry about + // 'ResizeWindow` as that's handled by docking already. + editor.on('ResizeEditor', refreshDocking); + } + editor.on('ScrollWindow', repositionPopups$1); + // Set the initial data in the dialog and focus the first focusable item + dialogUi.instanceApi.setData(initialData); + Keying.focusIn(dialogUi.dialog); + return dialogUi.instanceApi; + }; + return DialogManager.open(factory, config$1); + }; + const openBottomInlineDialog = (config$1, anchor, closeWindow, windowParams) => { + const factory = (contents, internalInitialData, dataValidator) => { + const initialData = validateData(internalInitialData, dataValidator); + const inlineDialog = value$2(); + const isToolbarLocationTop = extras.backstages.popup.shared.header.isPositionedAtTop(); + const dialogInit = { + dataValidator, + initialData, + internalDialog: contents + }; + const refreshDocking = () => inlineDialog.on((dialog) => { + InlineView.reposition(dialog); + Docking.refresh(dialog); + }); + const dialogUi = renderInlineDialog(dialogInit, { + redial: DialogManager.redial, + closeWindow: () => { + inlineDialog.on(InlineView.hide); + editor.off('ResizeEditor ScrollWindow ElementScroll', refreshDocking); + inlineDialog.clear(); + closeWindow(dialogUi.instanceApi); + } + }, extras.backstages.popup, windowParams.ariaAttrs, refreshDocking); + const inlineDialogComp = build$1(InlineView.sketch({ + lazySink: extras.backstages.popup.shared.getSink, + dom: { + tag: 'div', + classes: [] + }, + // Fires the default dismiss event. + fireDismissalEventInstead: (windowParams.persistent ? { event: 'doNotDismissYet' } : {}), + ...isToolbarLocationTop ? {} : { fireRepositionEventInstead: {} }, + inlineBehaviours: derive$1([ + config('window-manager-inline-events', [ + run$1(dismissRequested(), (_comp, _se) => { + emit(dialogUi.dialog, formCancelEvent); + }) + ]), + Docking.config({ + contextual: { + lazyContext: () => Optional.some(box$1(SugarElement.fromDom(editor.getContentAreaContainer()))), + fadeInClass: 'tox-dialog-dock-fadein', + fadeOutClass: 'tox-dialog-dock-fadeout', + transitionClass: 'tox-dialog-dock-transition' + }, + modes: ['top', 'bottom'], + lazyViewport: (comp) => { + const optScrollingContext = detectWhenSplitUiMode(editor, comp.element); + return optScrollingContext.map((sc) => { + const combinedBounds = getBoundsFrom(sc); + return { + bounds: combinedBounds, + optScrollEnv: Optional.some({ + currentScrollTop: sc.element.dom.scrollTop, + scrollElmTop: absolute$3(sc.element).top + }) + }; + }).getOrThunk(() => ({ + bounds: win(), + optScrollEnv: Optional.none() + })); + } + }) + ]), + // Treat alert or confirm dialogs as part of the inline dialog + isExtraPart: (_comp, target) => isAlertOrConfirmDialog(target) + })); + inlineDialog.set(inlineDialogComp); + const getInlineDialogBounds = () => { + return extras.backstages.popup.shared.getSink().toOptional().bind((s) => { + const optScrollingContext = detectWhenSplitUiMode(editor, s.element); + // Margin between element and the bottom of the screen or the editor content area container + const margin = 15; + const bounds$1 = optScrollingContext.map((sc) => getBoundsFrom(sc)).getOr(win()); + const contentAreaContainer = box$1(SugarElement.fromDom(editor.getContentAreaContainer())); + const constrainedBounds = constrain(contentAreaContainer, bounds$1); + return Optional.some(bounds(constrainedBounds.x, constrainedBounds.y, constrainedBounds.width, constrainedBounds.height - margin)); + }); + }; + // Position the inline dialog + InlineView.showWithinBounds(inlineDialogComp, premade(dialogUi.dialog), { anchor }, getInlineDialogBounds); + Docking.refresh(inlineDialogComp); + editor.on('ResizeEditor ScrollWindow ElementScroll ResizeWindow', refreshDocking); + // Set the initial data in the dialog and focus the first focusable item + dialogUi.instanceApi.setData(initialData); + Keying.focusIn(dialogUi.dialog); + return dialogUi.instanceApi; + }; + return DialogManager.open(factory, config$1); + }; + const confirm = (message, callback) => { + confirmDialog.open(message, callback); + }; + const alert = (message, callback) => { + alertDialog.open(message, callback); + }; + const close = (instanceApi) => { + instanceApi.close(); + }; + return { + open, + openUrl, + alert, + close, + confirm + }; + }; + + const registerOptions = (editor) => { + register$f(editor); + register$e(editor); + register(editor); + }; + var Theme = () => { + global$b.add('silver', (editor) => { + registerOptions(editor); + // When using the ui_mode: split, the popup sink is placed as a sibling to the + // editor, which means that it might be subject to any scrolling environments + // that the editor has. Therefore, we want to make the popup sink have an overall + // bounds that is dependent on its scrolling environment. We don't know that ahead + // of time, so we use a mutable variable whose value will change if there is a scrolling context. + let popupSinkBounds = () => win(); + const { dialogs, popups, renderUI: renderModeUI } = setup$3(editor, { + // consult the mutable variable to find out the bounds for the popup sink. When renderUI is + // called, this mutable variable might be reassigned + getPopupSinkBounds: () => popupSinkBounds() + }); + // We wrap the `renderModeUI` function being returned by Render so that we can update + // the getPopupSinkBounds mutable variable if required. + // DON'T define this function as `async`; otherwise, it will slow down the rendering process and cause flickering if the editor is repeatedly removed and re-initialized. + const renderUI = () => { + const renderResult = renderModeUI(); + const optScrollingContext = detectWhenSplitUiMode(editor, popups.getMothership().element); + optScrollingContext.each((sc) => { + popupSinkBounds = () => { + // At this stage, it looks like we need to calculate the bounds each time, just in + // case the scrolling context details have changed since the last time. The bounds considers + // the Boxes.box sizes, which might change over time. + return getBoundsFrom(sc); + }; + }); + return renderResult; + }; + Autocompleter.register(editor, popups.backstage.shared); + const windowMgr = setup({ + editor, + backstages: { + popup: popups.backstage, + dialog: dialogs.backstage + } + }); + const notificationRegion = value$2(); + // The NotificationManager uses the popup mothership (and sink) + const getNotificationManagerImpl = () => NotificationManagerImpl(editor, { backstage: popups.backstage }, popups.getMothership(), notificationRegion); + const getPromotionElement = () => { + return descendant(SugarElement.fromDom(editor.getContainer()), '.tox-promotion').map((promotion) => promotion.dom).getOrNull(); + }; + return { + renderUI, + getWindowManagerImpl: constant$1(windowMgr), + getNotificationManagerImpl, + getPromotionElement + }; + }); + }; + + Theme(); + /** ***** + * DO NOT EXPORT ANYTHING + * + * IF YOU DO ROLLUP WILL LEAVE A GLOBAL ON THE PAGE + *******/ + +})(); diff --git a/public/tinymce/themes/silver/theme.min.js b/public/tinymce/themes/silver/theme.min.js new file mode 100644 index 0000000..6f98f8f --- /dev/null +++ b/public/tinymce/themes/silver/theme.min.js @@ -0,0 +1 @@ +!function(){"use strict";const e=Object.getPrototypeOf,t=(e,t,o)=>!!o(e,t.prototype)||e.constructor?.name===t.name,o=e=>o=>(e=>{const o=typeof e;return null===e?"null":"object"===o&&Array.isArray(e)?"array":"object"===o&&t(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":o})(o)===e,n=e=>t=>typeof t===e,s=e=>t=>e===t,r=o("string"),a=o("object"),i=o=>((o,n)=>a(o)&&t(o,n,((t,o)=>e(t)===o)))(o,Object),l=o("array"),c=s(null),d=n("boolean"),u=s(void 0),m=e=>null==e,g=e=>!m(e),p=n("function"),h=n("number"),f=(e,t)=>{if(l(e)){for(let o=0,n=e.length;o{},v=e=>()=>e(),x=(e,t)=>(...o)=>e(t.apply(null,o)),y=e=>()=>e,w=e=>e,S=(e,t)=>e===t;function C(e,...t){return(...o)=>{const n=t.concat(o);return e.apply(null,n)}}const k=e=>t=>!e(t),O=e=>()=>{throw new Error(e)},_=e=>e(),T=y(!1),E=y(!0);class A{tag;value;static singletonNone=new A(!1);constructor(e,t){this.tag=e,this.value=t}static some(e){return new A(!0,e)}static none(){return A.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?A.some(e(this.value)):A.none()}bind(e){return this.tag?e(this.value):A.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:A.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(e??"Called getOrDie on None")}static from(e){return g(e)?A.some(e):A.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}const M=Array.prototype.slice,D=Array.prototype.indexOf,B=Array.prototype.push,F=(e,t)=>D.call(e,t),I=(e,t)=>F(e,t)>-1,R=(e,t)=>{for(let o=0,n=e.length;o{const o=[];for(let n=0;n{const o=[];for(let n=0;n{const o=e.length,n=new Array(o);for(let s=0;s{for(let o=0,n=e.length;o{const o=[],n=[];for(let s=0,r=e.length;s{const o=[];for(let n=0,s=e.length;n(((e,t)=>{for(let o=e.length-1;o>=0;o--)t(e[o],o)})(e,((e,n)=>{o=t(o,e,n)})),o),W=(e,t,o)=>(V(e,((e,n)=>{o=t(o,e,n)})),o),$=(e,t)=>((e,t,o)=>{for(let n=0,s=e.length;n{for(let o=0,n=e.length;o{const t=[];for(let o=0,n=e.length;oj(L(e,t)),X=(e,t)=>{for(let o=0,n=e.length;o{const t=M.call(e,0);return t.reverse(),t},K=(e,t)=>P(e,(e=>!I(t,e))),J=(e,t)=>{const o={};for(let n=0,s=e.length;n[e],Z=(e,t)=>{const o=M.call(e,0);return o.sort(t),o},ee=(e,t)=>t>=0&&tee(e,0),oe=e=>ee(e,e.length-1),ne=p(Array.from)?Array.from:e=>M.call(e),se=(e,t)=>{for(let o=0;o{const o=re(e);for(let n=0,s=o.length;nce(e,((e,o)=>({k:o,v:t(e,o)}))),ce=(e,t)=>{const o={};return ie(e,((e,n)=>{const s=t(e,n);o[s.k]=s.v})),o},de=e=>(t,o)=>{e[o]=t},ue=(e,t,o,n)=>{ie(e,((e,s)=>{(t(e,s)?o:n)(e,s)}))},me=(e,t)=>{const o={};return ue(e,t,de(o),b),o},ge=(e,t)=>{const o=[];return ie(e,((e,n)=>{o.push(t(e,n))})),o},pe=(e,t)=>{const o=re(e);for(let n=0,s=o.length;nge(e,w),fe=(e,t)=>be(e,t)?A.from(e[t]):A.none(),be=(e,t)=>ae.call(e,t),ve=(e,t)=>be(e,t)&&void 0!==e[t]&&null!==e[t],xe=e=>{if(!l(e))throw new Error("cases must be an array");if(0===e.length)throw new Error("there must be at least one case");const t=[],o={};return V(e,((n,s)=>{const r=re(n);if(1!==r.length)throw new Error("one and only one name per case");const a=r[0],i=n[a];if(void 0!==o[a])throw new Error("duplicate key detected:"+a);if("cata"===a)throw new Error("cannot have a case named cata (sorry)");if(!l(i))throw new Error("case arguments must be an array");t.push(a),o[a]=(...o)=>{const n=o.length;if(n!==i.length)throw new Error("Wrong number of arguments to case "+a+". Expected "+i.length+" ("+i+"), got "+n);return{fold:(...t)=>{if(t.length!==e.length)throw new Error("Wrong number of arguments to fold. Expected "+e.length+", got "+t.length);return t[s].apply(null,o)},match:e=>{const n=re(e);if(t.length!==n.length)throw new Error("Wrong number of arguments to match. Expected: "+t.join(",")+"\nActual: "+n.join(","));if(!X(t,(e=>I(n,e))))throw new Error("Not all branches were specified when using match. Specified: "+n.join(", ")+"\nRequired: "+t.join(", "));return e[a].apply(null,o)},log:e=>{console.log(e,{constructors:t,constructor:a,params:o})}}}})),o},ye=e=>{let t=e;return{get:()=>t,set:e=>{t=e}}},we=e=>{let t=A.none(),o=[];const n=e=>{s()?r(e):o.push(e)},s=()=>t.isSome(),r=e=>{t.each((t=>{setTimeout((()=>{e(t)}),0)}))};return e((e=>{s()||(t=A.some(e),V(o,r),o=[])})),{get:n,map:e=>we((t=>{n((o=>{t(e(o))}))})),isReady:s}},Se={nu:we,pure:e=>we((t=>{t(e)}))},Ce=e=>{setTimeout((()=>{throw e}),0)},ke=e=>{const t=t=>{e().then(t,Ce)};return{map:t=>ke((()=>e().then(t))),bind:t=>ke((()=>e().then((e=>t(e).toPromise())))),anonBind:t=>ke((()=>e().then((()=>t.toPromise())))),toLazy:()=>Se.nu(t),toCached:()=>{let t=null;return ke((()=>(null===t&&(t=e()),t)))},toPromise:e,get:t}},Oe=e=>ke((()=>new Promise(e))),_e=e=>ke((()=>Promise.resolve(e))),Te=e=>{const t=t=>t(e),o=y(e),n=()=>s,s={tag:!0,inner:e,fold:(t,o)=>o(e),isValue:E,isError:T,map:t=>Ae.value(t(e)),mapError:n,bind:t,exists:t,forall:t,getOr:o,or:n,getOrThunk:o,orThunk:n,getOrDie:o,each:t=>{t(e)},toOptional:()=>A.some(e)};return s},Ee=e=>{const t=()=>o,o={tag:!1,inner:e,fold:(t,o)=>t(e),isValue:T,isError:E,map:t,mapError:t=>Ae.error(t(e)),bind:t,exists:T,forall:E,getOr:w,or:w,getOrThunk:_,orThunk:_,getOrDie:O(String(e)),each:b,toOptional:A.none};return o},Ae={value:Te,error:Ee,fromOption:(e,t)=>e.fold((()=>Ee(t)),Te)},Me=e=>({...e,toCached:()=>Me(e.toCached()),bindFuture:t=>Me(e.bind((e=>e.fold((e=>_e(Ae.error(e))),(e=>t(e)))))),bindResult:t=>Me(e.map((e=>e.bind(t)))),mapResult:t=>Me(e.map((e=>e.map(t)))),mapError:t=>Me(e.map((e=>e.mapError(t)))),foldResult:(t,o)=>e.map((e=>e.fold(t,o))),withTimeout:(t,o)=>Me(Oe((n=>{let s=!1;const r=setTimeout((()=>{s=!0,n(Ae.error(o()))}),t);e.get((e=>{s||(clearTimeout(r),n(e))}))})))}),De=e=>Me(Oe(e)),Be="undefined"!=typeof window?window:Function("return this;")(),Fe=(e,t,o,n)=>{const s=e+t;return s>n?o:sMath.min(Math.max(e,t),o);let Re=0;const Ne=e=>{const t=(new Date).getTime(),o=Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*1e9);return Re++,e+"_"+o+Re+String(t)},ze=e=>(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const o={};for(let n=0;ni(e)&&i(t)?Le(e,t):t)),Ve=ze(((e,t)=>t)),He=(e,t,o=S)=>e.exists((e=>o(e,t))),Pe=e=>{const t=[],o=e=>{t.push(e)};for(let t=0;te.isSome()&&t.isSome()?A.some(o(e.getOrDie(),t.getOrDie())):A.none(),We=(e,t)=>null!=e?A.some(t(e)):A.none(),$e=(e,t)=>e?A.some(t):A.none(),Ge=(e,t)=>((e,t)=>{let o=null!=t?t:Be;for(let t=0;t{const t=ye(A.none()),o=()=>t.get().each(e);return{clear:()=>{o(),t.set(A.none())},isSet:()=>t.get().isSome(),get:()=>t.get(),set:e=>{o(),t.set(A.some(e))}}},qe=()=>je((e=>e.unbind())),Xe=()=>{const e=je(b);return{...e,on:t=>e.get().each(t)}},Ye=(e,t,o)=>""===t||e.length>=t.length&&e.substr(o,o+t.length)===t,Ke=(e,t)=>Qe(e,t)?((e,t)=>e.substring(t))(e,t.length):e,Je=(e,t,o=0,n)=>{const s=e.indexOf(t,o);return-1!==s&&(!!u(n)||s+t.length<=n)},Qe=(e,t)=>Ye(e,t,0),Ze=(e,t)=>Ye(e,t,e.length-t.length),et=(ft=/^\s+|\s+$/g,e=>e.replace(ft,"")),tt=e=>e.length>0,ot=e=>!tt(e),nt=(e,t)=>{let o=null;const n=()=>{c(o)||(clearTimeout(o),o=null)};return{cancel:n,throttle:(...s)=>{n(),o=setTimeout((()=>{o=null,e.apply(null,s)}),t)}}},st=e=>{let t,o=!1;return(...n)=>(o||(o=!0,t=e.apply(null,n)),t)},rt=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},at=(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return rt(o.childNodes[0])},it=(e,t)=>{const o=(t||document).createElement(e);return rt(o)},lt=(e,t)=>{const o=(t||document).createTextNode(e);return rt(o)},ct=rt,dt=(e,t,o)=>{const n=e.document.createRange();var s;return s=n,t.fold((e=>{s.setStartBefore(e.dom)}),((e,t)=>{s.setStart(e.dom,t)}),(e=>{s.setStartAfter(e.dom)})),((e,t)=>{t.fold((t=>{e.setEndBefore(t.dom)}),((t,o)=>{e.setEnd(t.dom,o)}),(t=>{e.setEndAfter(t.dom)}))})(n,o),n},ut=(e,t,o,n,s)=>{const r=e.document.createRange();return r.setStart(t.dom,o),r.setEnd(n.dom,s),r},mt=e=>({left:e.left,top:e.top,right:e.right,bottom:e.bottom,width:e.width,height:e.height}),gt=xe([{ltr:["start","soffset","finish","foffset"]},{rtl:["start","soffset","finish","foffset"]}]),pt=(e,t,o)=>t(ct(o.startContainer),o.startOffset,ct(o.endContainer),o.endOffset),ht=(e,t)=>((e,t)=>{const o=((e,t)=>t.match({domRange:e=>({ltr:y(e),rtl:A.none}),relative:(t,o)=>({ltr:st((()=>dt(e,t,o))),rtl:st((()=>A.some(dt(e,o,t))))}),exact:(t,o,n,s)=>({ltr:st((()=>ut(e,t,o,n,s))),rtl:st((()=>A.some(ut(e,n,s,t,o))))})}))(e,t);return((e,t)=>{const o=t.ltr();return o.collapsed?t.rtl().filter((e=>!1===e.collapsed)).map((e=>gt.rtl(ct(e.endContainer),e.endOffset,ct(e.startContainer),e.startOffset))).getOrThunk((()=>pt(0,gt.ltr,o))):pt(0,gt.ltr,o)})(0,o)})(e,t).match({ltr:(t,o,n,s)=>{const r=e.document.createRange();return r.setStart(t.dom,o),r.setEnd(n.dom,s),r},rtl:(t,o,n,s)=>{const r=e.document.createRange();return r.setStart(n.dom,s),r.setEnd(t.dom,o),r}});var ft;gt.ltr,gt.rtl;const bt=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},vt=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,xt=(e,t)=>{const o=void 0===t?document:t.dom;return vt(o)?A.none():A.from(o.querySelector(e)).map(ct)},yt=(e,t)=>e.dom===t.dom,wt=(e,t)=>{const o=e.dom,n=t.dom;return o!==n&&o.contains(n)},St=()=>Ct(0,0),Ct=(e,t)=>({major:e,minor:t}),kt={nu:Ct,detect:(e,t)=>{const o=String(t).toLowerCase();return 0===e.length?St():((e,t)=>{const o=((e,t)=>{for(let o=0;oNumber(t.replace(o,"$"+e));return Ct(n(1),n(2))})(e,o)},unknown:St},Ot=(e,t)=>{const o=String(t).toLowerCase();return $(e,(e=>e.search(o)))},_t=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Tt=e=>t=>Je(t,e),Et=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>Je(e,"edge/")&&Je(e,"chrome")&&Je(e,"safari")&&Je(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,_t],search:e=>Je(e,"chrome")&&!Je(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>Je(e,"msie")||Je(e,"trident")},{name:"Opera",versionRegexes:[_t,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Tt("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Tt("firefox")},{name:"Safari",versionRegexes:[_t,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(Je(e,"safari")||Je(e,"mobile/"))&&Je(e,"applewebkit")}],At=[{name:"Windows",search:Tt("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>Je(e,"iphone")||Je(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Tt("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:Tt("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Tt("linux"),versionRegexes:[]},{name:"Solaris",search:Tt("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Tt("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:Tt("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],Mt={browsers:y(Et),oses:y(At)},Dt="Edge",Bt="Chromium",Ft="Opera",It="Firefox",Rt="Safari",Nt=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isEdge:n(Dt),isChromium:n(Bt),isIE:n("IE"),isOpera:n(Ft),isFirefox:n(It),isSafari:n(Rt)}},zt=()=>Nt({current:void 0,version:kt.unknown()}),Lt=Nt,Vt=(y(Dt),y(Bt),y("IE"),y(Ft),y(It),y(Rt),"Windows"),Ht="Android",Pt="Linux",Ut="macOS",Wt="Solaris",$t="FreeBSD",Gt="ChromeOS",jt=e=>{const t=e.current,o=e.version,n=e=>()=>t===e;return{current:t,version:o,isWindows:n(Vt),isiOS:n("iOS"),isAndroid:n(Ht),isMacOS:n(Ut),isLinux:n(Pt),isSolaris:n(Wt),isFreeBSD:n($t),isChromeOS:n(Gt)}},qt=()=>jt({current:void 0,version:kt.unknown()}),Xt=jt,Yt=(y(Vt),y("iOS"),y(Ht),y(Pt),y(Ut),y(Wt),y($t),y(Gt),e=>window.matchMedia(e).matches);let Kt=st((()=>((e,t,o)=>{const n=Mt.browsers(),s=Mt.oses(),r=t.bind((e=>((e,t)=>se(t.brands,(t=>{const o=t.brand.toLowerCase();return $(e,(e=>o===e.brand?.toLowerCase())).map((e=>({current:e.name,version:kt.nu(parseInt(t.version,10),0)})))})))(n,e))).orThunk((()=>((e,t)=>Ot(e,t).map((e=>{const o=kt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(n,e))).fold(zt,Lt),a=((e,t)=>Ot(e,t).map((e=>{const o=kt.detect(e.versionRegexes,t);return{current:e.name,version:o}})))(s,e).fold(qt,Xt),i=((e,t,o,n)=>{const s=e.isiOS()&&!0===/ipad/i.test(o),r=e.isiOS()&&!s,a=e.isiOS()||e.isAndroid(),i=a||n("(pointer:coarse)"),l=s||!r&&a&&n("(min-device-width:768px)"),c=r||a&&!l,d=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(o),u=!c&&!l&&!d;return{isiPad:y(s),isiPhone:y(r),isTablet:y(l),isPhone:y(c),isTouch:y(i),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:y(d),isDesktop:y(u)}})(a,r,e,o);return{browser:r,os:a,deviceType:i}})(window.navigator.userAgent,A.from(window.navigator.userAgentData),Yt)));const Jt=()=>Kt(),Qt=Object.getPrototypeOf,Zt=e=>{const t=Ge("ownerDocument.defaultView",e);return a(e)&&((e=>((e,t)=>{const o=((e,t)=>Ge(e,t))(e,t);if(null==o)throw new Error(e+" not available on this browser");return o})("HTMLElement",e))(t).prototype.isPrototypeOf(e)||/^HTML\w*Element$/.test(Qt(e).constructor.name))},eo=e=>e.dom.nodeName.toLowerCase(),to=e=>t=>(e=>e.dom.nodeType)(t)===e,oo=e=>no(e)&&Zt(e.dom),no=to(1),so=to(3),ro=to(9),ao=to(11),io=e=>t=>no(t)&&eo(t)===e,lo=e=>ct(e.dom.ownerDocument),co=e=>ro(e)?e:lo(e),uo=e=>ct(co(e).dom.documentElement),mo=e=>ct(co(e).dom.defaultView),go=e=>A.from(e.dom.parentNode).map(ct),po=e=>A.from(e.dom.parentElement).map(ct),ho=e=>A.from(e.dom.offsetParent).map(ct),fo=e=>A.from(e.dom.previousSibling).map(ct),bo=e=>A.from(e.dom.nextSibling).map(ct),vo=e=>L(e.dom.childNodes,ct),xo=(e,t)=>{const o=e.dom.childNodes;return A.from(o[t]).map(ct)},yo=e=>xo(e,0),wo=(e,t)=>({element:e,offset:t}),So=(e,t)=>{const o=vo(e);return o.length>0&&tao(e)&&g(e.dom.host),ko=e=>ct(e.dom.getRootNode()),Oo=e=>Co(e)?e:ct(co(e).dom.body),_o=e=>{const t=ko(e);return Co(t)?A.some(t):A.none()},To=e=>ct(e.dom.host),Eo=e=>{const t=ct((e=>{if(g(e.target)){const t=ct(e.target);if(no(t)&&(e=>g(e.dom.shadowRoot))(t)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return te(t)}}return A.from(e.target)})(e).getOr(e.target)),o=()=>e.stopPropagation(),n=()=>e.preventDefault(),s=x(n,o);return((e,t,o,n,s,r,a)=>({target:e,x:t,y:o,stop:n,prevent:s,kill:r,raw:a}))(t,e.clientX,e.clientY,o,n,s,e)},Ao=(e,t,o,n,s)=>{const r=((e,t)=>o=>{e(o)&&t(Eo(o))})(o,n);return e.dom.addEventListener(t,r,s),{unbind:C(Mo,e,t,r,s)}},Mo=(e,t,o,n)=>{e.dom.removeEventListener(t,o,n)},Do=E,Bo=(e,t,o)=>((e,t,o,n)=>Ao(e,t,o,n,!1))(e,t,Do,o),Fo=(e,t,o)=>((e,t,o,n)=>Ao(e,t,o,n,!0))(e,t,Do,o),Io=Eo,Ro=()=>ct(document),No=(e,t=!1)=>e.dom.focus({preventScroll:t}),zo=e=>e.dom.blur(),Lo=e=>{const t=ko(e).dom;return e.dom===t.activeElement},Vo=(e=Ro())=>A.from(e.dom.activeElement).map(ct),Ho=e=>Vo(ko(e)).filter((t=>e.dom.contains(t.dom))),Po=(e,t)=>{go(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},Uo=(e,t)=>{bo(e).fold((()=>{go(e).each((e=>{$o(e,t)}))}),(e=>{Po(e,t)}))},Wo=(e,t)=>{yo(e).fold((()=>{$o(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},$o=(e,t)=>{e.dom.appendChild(t.dom)},Go=(e,t)=>{V(t,(t=>{$o(e,t)}))},jo=(e,t,o)=>{if(!(r(o)||d(o)||h(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},qo=(e,t,o)=>{jo(e.dom,t,o)},Xo=(e,t)=>{const o=e.dom;ie(t,((e,t)=>{jo(o,t,e)}))},Yo=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},Ko=(e,t)=>A.from(Yo(e,t)),Jo=(e,t)=>{const o=e.dom;return!(!o||!o.hasAttribute)&&o.hasAttribute(t)},Qo=(e,t)=>{e.dom.removeAttribute(t)},Zo=e=>{e.dom.textContent="",V(vo(e),(e=>{en(e)}))},en=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},tn=(e,t)=>ct(e.dom.cloneNode(t)),on=e=>e.dom.innerHTML,nn=(e,t)=>{const o=lo(e).dom,n=ct(o.createDocumentFragment()),s=((e,t)=>{const o=(t||document).createElement("div");return o.innerHTML=e,vo(ct(o))})(t,o);Go(n,s),Zo(e),$o(e,n)},sn=e=>new Promise(((t,o)=>{const n=()=>{r(),t(e)},s=[Bo(e,"load",n),Bo(e,"error",(()=>{r(),o("Unable to load data from image: "+e.dom.src)}))],r=()=>V(s,(e=>e.unbind()));e.dom.complete&&n()})),rn=e=>void 0!==e.style&&p(e.style.getPropertyValue),an=e=>{const t=so(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return _o(ct(t)).fold((()=>o.body.contains(t)),(n=an,s=To,e=>n(s(e))));var n,s},ln=()=>cn(ct(document)),cn=e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return ct(t)},dn=(e,t,o)=>{if(!r(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);rn(e)&&e.style.setProperty(t,o)},un=(e,t)=>{rn(e)&&e.style.removeProperty(t)},mn=(e,t,o)=>{const n=e.dom;dn(n,t,o)},gn=(e,t)=>{const o=e.dom;ie(t,((e,t)=>{dn(o,t,e)}))},pn=(e,t)=>{const o=e.dom;ie(t,((e,t)=>{e.fold((()=>{un(o,t)}),(e=>{dn(o,t,e)}))}))},hn=(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||an(e)?n:fn(o,t)},fn=(e,t)=>rn(e)?e.style.getPropertyValue(t):"",bn=(e,t)=>{const o=e.dom,n=fn(o,t);return A.from(n).filter((e=>e.length>0))},vn=e=>{const t={},o=e.dom;if(rn(o))for(let e=0;e{const n=it(e);return mn(n,t,o),bn(n,t).isSome()},yn=(e,t)=>{const o=e.dom;un(o,t),He(Ko(e,"style").map(et),"")&&Qo(e,"style")},wn=e=>e.dom.offsetWidth,Sn=(e,t)=>{const o=o=>{const n=t(o);if(n<=0||null===n){const t=hn(o,e);return parseFloat(t)||0}return n},n=(e,t)=>W(t,((t,o)=>{const n=hn(e,o),s=void 0===n?0:parseInt(n,10);return isNaN(s)?t:t+s}),0);return{set:(t,o)=>{if(!h(o)&&!o.match(/^[0-9]+$/))throw new Error(e+".set accepts only positive integer values. Value was "+o);const n=t.dom;rn(n)&&(n.style[e]=o+"px")},get:o,getOuter:o,aggregate:n,max:(e,t,o)=>{const s=n(e,o);return t>s?t-s:0}}},Cn=Sn("height",(e=>{const t=e.dom;return an(e)?t.getBoundingClientRect().height:t.offsetHeight})),kn=e=>Cn.get(e),On=e=>Cn.getOuter(e),_n=e=>!(e=>e.offsetWidth<=0&&e.offsetHeight<=0)(e.dom),Tn=Sn("width",(e=>{const t=e.dom;return an(e)?t.getBoundingClientRect().width:t.offsetWidth})),En=e=>Tn.get(e),An=e=>Tn.getOuter(e),Mn=(e,t)=>({left:e,top:t,translate:(o,n)=>Mn(e+o,t+n)}),Dn=Mn,Bn=(e,t)=>void 0!==e?e:void 0!==t?t:0,Fn=e=>{const t=e.dom.ownerDocument,o=t.body,n=t.defaultView,s=t.documentElement;if(o===e.dom)return Dn(o.offsetLeft,o.offsetTop);const r=Bn(n?.pageYOffset,s.scrollTop),a=Bn(n?.pageXOffset,s.scrollLeft),i=Bn(s.clientTop,o.clientTop),l=Bn(s.clientLeft,o.clientLeft);return In(e).translate(a-l,r-i)},In=e=>{const t=e.dom,o=t.ownerDocument.body;return o===t?Dn(o.offsetLeft,o.offsetTop):an(e)?(e=>{const t=e.getBoundingClientRect();return Dn(t.left,t.top)})(t):Dn(0,0)},Rn=e=>{const t=void 0!==e?e.dom:document,o=t.body.scrollLeft||t.documentElement.scrollLeft,n=t.body.scrollTop||t.documentElement.scrollTop;return Dn(o,n)},Nn=(e,t,o)=>{const n=(void 0!==o?o.dom:document).defaultView;n&&n.scrollTo(e,t)},zn=(e=>{const t=t=>e(t)?A.from(t.dom.nodeValue):A.none();return{get:o=>{if(!e(o))throw new Error("Can only get text value of a text node");return t(o).getOr("")},getOption:t,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(so),Ln=(e,t)=>o=>"rtl"===Vn(o)?t:e,Vn=e=>"rtl"===hn(e,"direction")?"rtl":"ltr",Hn=(e,t)=>{const o=Yo(e,t);return void 0===o||""===o?[]:o.split(" ")};var Pn=(e,t,o,n,s)=>e(o,n)?A.some(o):p(s)&&s(o)?A.none():t(o,n,s);const Un=(e,t,o)=>{let n=e.dom;const s=p(o)?o:T;for(;n.parentNode;){n=n.parentNode;const e=ct(n);if(t(e))return A.some(e);if(s(e))break}return A.none()},Wn=(e,t,o)=>Pn(((e,t)=>t(e)),Un,e,t,o),$n=(e,t)=>$(e.dom.childNodes,(e=>t(ct(e)))).map(ct),Gn=(e,t,o)=>Un(e,(e=>bt(e,t)),o),jn=(e,t)=>(e=>{const o=e.dom;return o.parentNode?$n(ct(o.parentNode),(o=>!yt(e,o)&&bt(o,t))):A.none()})(e),qn=(e,t)=>$n(e,(e=>bt(e,t))),Xn=(e,t)=>xt(t,e),Yn=(e,t,o)=>Pn(((e,t)=>bt(e,t)),Gn,e,t,o),Kn=(e,t)=>{e.dom.checked=t},Jn=e=>e.dom.checked,Qn=e=>void 0!==e.dom.classList,Zn=e=>Hn(e,"class"),es=(e,t)=>((e,t,o)=>{const n=Hn(e,t).concat([o]);return qo(e,t,n.join(" ")),!0})(e,"class",t),ts=(e,t)=>((e,t,o)=>{const n=P(Hn(e,t),(e=>e!==o));return n.length>0?qo(e,t,n.join(" ")):Qo(e,t),!1})(e,"class",t),os=(e,t)=>{Qn(e)?e.dom.classList.add(t):es(e,t)},ns=e=>{0===(Qn(e)?e.dom.classList:Zn(e)).length&&Qo(e,"class")},ss=(e,t)=>{Qn(e)?e.dom.classList.remove(t):ts(e,t),ns(e)},rs=(e,t)=>Qn(e)&&e.dom.classList.contains(t),as=(e,t)=>{V(t,(t=>{os(e,t)}))},is=(e,t)=>{V(t,(t=>{ss(e,t)}))},ls=e=>Qn(e)?(e=>{const t=e.dom.classList,o=new Array(t.length);for(let e=0;ee.dom.value,ds=(e,t)=>{if(void 0===t)throw new Error("Value.set was undefined");e.dom.value=t},us=(e,t,o)=>P(((e,t)=>{const o=p(t)?t:T;let n=e.dom;const s=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=ct(e);if(s.push(t),!0===o(t))break;n=e}return s})(e,o),t),ms=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return vt(o)?[]:L(o.querySelectorAll(e),ct)})(t,e),gs=(e,t,o)=>Wn(e,t,o).isSome(),ps=(e,t,o)=>Yn(e,t,o).isSome(),hs=e=>p(e)?e:T,fs=(e,t,o)=>{let n=e.dom;const s=hs(o);for(;n.parentNode;){n=n.parentNode;const e=ct(n),o=t(e);if(o.isSome())return o;if(s(e))break}return A.none()},bs=(e,t,o)=>{const n=t(e),s=hs(o);return n.orThunk((()=>s(e)?A.none():fs(e,t,s)))},vs=(e,t,o,n)=>({start:e,soffset:t,finish:o,foffset:n}),xs=xe([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),ys=(xs.before,xs.on,xs.after,e=>e.fold(w,w,w)),ws=xe([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Ss={domRange:ws.domRange,relative:ws.relative,exact:ws.exact,exactFromRange:e=>ws.exact(e.start,e.soffset,e.finish,e.foffset),getWin:e=>{const t=(e=>e.match({domRange:e=>ct(e.startContainer),relative:(e,t)=>ys(e),exact:(e,t,o,n)=>e}))(e);return mo(t)},range:vs},Cs=e=>{if(e.rangeCount>0){const t=e.getRangeAt(0),o=e.getRangeAt(e.rangeCount-1);return A.some(vs(ct(t.startContainer),t.startOffset,ct(o.endContainer),o.endOffset))}return A.none()},ks=e=>{if(null===e.anchorNode||null===e.focusNode)return Cs(e);{const t=ct(e.anchorNode),o=ct(e.focusNode);return((e,t,o,n)=>{const s=((e,t,o,n)=>{const s=lo(e).dom.createRange();return s.setStart(e.dom,t),s.setEnd(o.dom,n),s})(e,t,o,n),r=yt(e,o)&&t===n;return s.collapsed&&!r})(t,e.anchorOffset,o,e.focusOffset)?A.some(vs(t,e.anchorOffset,o,e.focusOffset)):Cs(e)}},Os=(e,t)=>(e=>{const t=e.getClientRects(),o=t.length>0?t[0]:e.getBoundingClientRect();return o.width>0||o.height>0?A.some(o).map(mt):A.none()})(ht(e,t)),_s={unsupportedLength:["em","ex","cap","ch","ic","rem","lh","rlh","vw","vh","vi","vb","vmin","vmax","cm","mm","Q","in","pc","pt","px"],fixed:["px","pt"],relative:["%"],empty:[""]},Ts=(()=>{const e="[0-9]+",t="[eE][+-]?"+e,o=e=>`(?:${e})?`,n=["Infinity",e+"\\."+o(e)+o(t),"\\."+e+o(t),e+o(t)].join("|");return new RegExp(`^([+-]?(?:${n}))(.*)$`)})(),Es=(e,t)=>A.from(Ts.exec(e)).bind((e=>{const o=Number(e[1]),n=e[2];return((e,t)=>R(t,(t=>R(_s[t],(t=>e===t)))))(n,t)?A.some({value:o,unit:n}):A.none()})),As=(e,t,o,n)=>({x:e,y:t,width:o,height:n,right:e+o,bottom:t+n}),Ms=e=>{const t=void 0===e?window:e,o=t.document,n=Rn(ct(o));return(e=>{const t=void 0===e?window:e;return Jt().browser.isFirefox()?A.none():A.from(t.visualViewport)})(t).fold((()=>{const e=t.document.documentElement,o=e.clientWidth,s=e.clientHeight;return As(n.left,n.top,o,s)}),(e=>As(Math.max(e.pageLeft,n.left),Math.max(e.pageTop,n.top),e.width,e.height)))},Ds=(e,t)=>e.view(t).fold(y([]),(t=>{const o=e.owner(t),n=Ds(e,o);return[t].concat(n)}));var Bs=Object.freeze({__proto__:null,view:e=>(e.dom===document?A.none():A.from(e.dom.defaultView?.frameElement)).map(ct),owner:e=>lo(e)});const Fs=e=>{const t=Ro(),o=Rn(t),n=((e,t)=>{const o=t.owner(e),n=Ds(t,o);return A.some(n)})(e,Bs);return n.fold(C(Fn,e),(t=>{const n=In(e),s=U(t,((e,t)=>{const o=In(t);return{left:e.left+o.left,top:e.top+o.top}}),{left:0,top:0});return Dn(s.left+n.left+o.left,s.top+n.top+o.top)}))},Is=(e,t,o,n)=>({x:e,y:t,width:o,height:n,right:e+o,bottom:t+n}),Rs=e=>{const t=Fn(e),o=An(e),n=On(e);return Is(t.left,t.top,o,n)},Ns=e=>{const t=Fs(e),o=An(e),n=On(e);return Is(t.left,t.top,o,n)},zs=(e,t)=>{const o=Math.max(e.x,t.x),n=Math.max(e.y,t.y),s=Math.min(e.right,t.right),r=Math.min(e.bottom,t.bottom);return Is(o,n,s-o,r-n)},Ls=()=>Ms(window),Vs=(e,t)=>yt(e.element,t.event.target),Hs=e=>(He(bn(e,"position"),"fixed")?A.none():ho(e)).orThunk((()=>{const t=it("span");return go(e).bind((e=>{$o(e,t);const o=ho(t);return en(t),o}))})),Ps=e=>Hs(e).map(Fn).getOrThunk((()=>Dn(0,0)));var Us;!function(e){e[e.Error=0]="Error",e[e.Value=1]="Value"}(Us||(Us={}));const Ws=(e,t,o)=>e.stype===Us.Error?t(e.serror):o(e.svalue),$s=e=>({stype:Us.Value,svalue:e}),Gs=e=>({stype:Us.Error,serror:e}),js=$s,qs=Gs,Xs=Ws,Ys=e=>a(e)&&re(e).length>100?" removed due to size":JSON.stringify(e,null,2),Ks=(e,t)=>qs([{path:e,getErrorInfo:t}]),Js=e=>({extract:(t,o)=>((e,t)=>e.stype===Us.Error?t(e.serror):e)(e(o),(e=>((e,t)=>Ks(e,y(t)))(t,e))),toString:y("val")}),Qs=Js(js),Zs=y(Qs),er=(e,t)=>Js((o=>{const n=typeof o;return e(o)?js(o):qs(`Expected type: ${t} but got: ${n}`)})),tr=er(h,"number"),or=er(r,"string"),nr=er(d,"boolean"),sr=er(p,"function"),rr=e=>{if(Object(e)!==e)return!0;switch({}.toString.call(e).slice(8,-1)){case"Boolean":case"Number":case"String":case"Date":case"RegExp":case"Blob":case"FileList":case"ImageData":case"ImageBitmap":case"ArrayBuffer":return!0;case"Array":case"Object":return Object.keys(e).every((t=>rr(e[t])));default:return!1}},ar=Js((e=>rr(e)?js(e):qs("Expected value to be acceptable for sending via postMessage"))),ir=e=>({tag:"defaultedThunk",process:e}),lr=e=>ir(y(e)),cr=e=>({tag:"mergeWithThunk",process:e}),dr=(e,t,o,n)=>({tag:"field",key:e,newKey:t,presence:o,prop:n}),ur=(e,t,o)=>{switch(e.tag){case"field":return t(e.key,e.newKey,e.presence,e.prop);case"custom":return o(e.newKey,e.instantiator)}},mr=e=>{const t=(e=>{const t=[],o=[];return V(e,(e=>{Ws(e,(e=>o.push(e)),(e=>t.push(e)))})),{values:t,errors:o}})(e);return t.errors.length>0?(o=t.errors,x(qs,j)(o)):js(t.values);var o},gr=(e,t,o,n)=>n(fe(e,t).getOrThunk((()=>o(e)))),pr=(e,t,o,n,s)=>{const r=e=>s.extract(t.concat([n]),e),a=e=>e.fold((()=>js(A.none())),(e=>((e,t)=>e.stype===Us.Value?{stype:Us.Value,svalue:t(e.svalue)}:e)(s.extract(t.concat([n]),e),A.some)));switch(e.tag){case"required":return((e,t,o,n)=>fe(t,o).fold((()=>((e,t,o)=>Ks(e,(()=>'Could not find valid *required* value for "'+t+'" in '+Ys(o))))(e,o,t)),n))(t,o,n,r);case"defaultedThunk":return gr(o,n,e.process,r);case"option":return((e,t,o)=>o(fe(e,t)))(o,n,a);case"defaultedOptionThunk":return((e,t,o,n)=>n(fe(e,t).map((t=>!0===t?o(e):t))))(o,n,e.process,a);case"mergeWithThunk":return gr(o,n,y({}),(t=>{const n=Le(e.process(o),t);return r(n)}))}},hr=e=>({extract:(t,o)=>e().extract(t,o),toString:()=>e().toString()}),fr=e=>re(me(e,g)),br=e=>{const t=vr(e),o=U(e,((e,t)=>ur(t,(t=>Le(e,{[t]:!0})),y(e))),{});return{extract:(e,n)=>{const s=d(n)?[]:fr(n),r=P(s,(e=>!ve(o,e)));return 0===r.length?t.extract(e,n):((e,t)=>Ks(e,(()=>"There are unsupported fields: ["+t.join(", ")+"] specified")))(e,r)},toString:t.toString}},vr=e=>({extract:(t,o)=>((e,t,o)=>{const n={},s=[];for(const r of o)ur(r,((o,r,a,i)=>{const l=pr(a,e,t,o,i);Xs(l,(e=>{s.push(...e)}),(e=>{n[r]=e}))}),((e,o)=>{n[e]=o(t)}));return s.length>0?qs(s):js(n)})(t,o,e),toString:()=>{const t=L(e,(e=>ur(e,((e,t,o,n)=>e+" -> "+n.toString()),((e,t)=>"state("+e+")"))));return"obj{\n"+t.join("\n")+"}"}}),xr=e=>({extract:(t,o)=>{const n=L(o,((o,n)=>e.extract(t.concat(["["+n+"]"]),o)));return mr(n)},toString:()=>"array("+e.toString()+")"}),yr=(e,t)=>{const o=void 0!==t?t:w;return{extract:(t,n)=>{const s=[];for(const r of e){const e=r.extract(t,n);if(e.stype===Us.Value)return{stype:Us.Value,svalue:o(e.svalue)};s.push(e)}return mr(s)},toString:()=>"oneOf("+L(e,(e=>e.toString())).join(", ")+")"}},wr=(e,t)=>({extract:(o,n)=>{const s=re(n),r=((t,o)=>xr(Js(e)).extract(t,o))(o,s);return((e,t)=>e.stype===Us.Value?t(e.svalue):e)(r,(e=>{const s=L(e,(e=>dr(e,e,{tag:"required",process:{}},t)));return vr(s).extract(o,n)}))},toString:()=>"setOf("+t.toString()+")"}),Sr=x(xr,vr),Cr=(e,t)=>({extract:(o,n)=>fe(n,e).fold((()=>((e,t)=>Ks(e,(()=>'Choice schema did not contain choice key: "'+t+'"')))(o,e)),(e=>((e,t,o,n)=>fe(o,n).fold((()=>((e,t,o)=>Ks(e,(()=>'The chosen schema: "'+o+'" did not exist in branches: '+Ys(t))))(e,o,n)),(o=>o.extract(e.concat(["branch: "+n]),t))))(o,n,t,e))),toString:()=>"chooseOn("+e+"). Possible values: "+re(t)}),kr=e=>Js((t=>e(t).fold(qs,js))),Or=(e,t)=>wr((t=>e(t).fold(Gs,$s)),t),_r=(e,t,o)=>{return n=((e,t,o)=>((e,t)=>e.stype===Us.Error?{stype:Us.Error,serror:t(e.serror)}:e)(t.extract([e],o),(e=>({input:o,errors:e}))))(e,t,o),Ws(n,Ae.error,Ae.value);var n},Tr=e=>e.fold((e=>{throw new Error(Ar(e))}),w),Er=(e,t,o)=>Tr(_r(e,t,o)),Ar=e=>"Errors: \n"+(e=>{const t=e.length>10?e.slice(0,10).concat([{path:[],getErrorInfo:y("... (only showing first ten failures)")}]):e;return L(t,(e=>"Failed path: ("+e.path.join(" > ")+")\n"+e.getErrorInfo()))})(e.errors).join("\n")+"\n\nInput object: "+Ys(e.input),Mr=(e,t)=>Cr(e,le(t,vr)),Dr=(e,t)=>((e,t)=>{const o=st(t);return{extract:(e,t)=>o().extract(e,t),toString:()=>o().toString()}})(0,t),Br=dr,Fr=(e,t)=>({tag:"custom",newKey:e,instantiator:t}),Ir=e=>kr((t=>I(e,t)?Ae.value(t):Ae.error(`Unsupported value: "${t}", choose one of "${e.join(", ")}".`))),Rr=e=>Br(e,e,{tag:"required",process:{}},Zs()),Nr=(e,t)=>Br(e,e,{tag:"required",process:{}},t),zr=e=>Nr(e,tr),Lr=e=>Nr(e,or),Vr=(e,t)=>Br(e,e,{tag:"required",process:{}},Ir(t)),Hr=e=>Nr(e,sr),Pr=(e,t)=>Br(e,e,{tag:"required",process:{}},vr(t)),Ur=(e,t)=>Br(e,e,{tag:"required",process:{}},Sr(t)),Wr=(e,t)=>Br(e,e,{tag:"required",process:{}},xr(t)),$r=e=>Br(e,e,{tag:"option",process:{}},Zs()),Gr=(e,t)=>Br(e,e,{tag:"option",process:{}},t),jr=e=>Gr(e,tr),qr=e=>Gr(e,or),Xr=(e,t)=>Gr(e,Ir(t)),Yr=e=>Gr(e,sr),Kr=(e,t)=>Gr(e,xr(t)),Jr=(e,t)=>Gr(e,vr(t)),Qr=(e,t)=>Br(e,e,lr(t),Zs()),Zr=(e,t,o)=>Br(e,e,lr(t),o),ea=(e,t)=>Zr(e,t,tr),ta=(e,t)=>Zr(e,t,or),oa=(e,t,o)=>Zr(e,t,Ir(o)),na=(e,t)=>Zr(e,t,nr),sa=(e,t)=>Zr(e,t,sr),ra=(e,t,o)=>Zr(e,t,xr(o)),aa=(e,t,o)=>Zr(e,t,vr(o)),ia=(e,t)=>((e,t)=>({[e]:t}))(e,t),la=e=>(e=>{const t={};return V(e,(e=>{t[e.key]=e.value})),t})(e),ca=y,da=ca("touchstart"),ua=ca("touchmove"),ma=ca("touchend"),ga=ca("touchcancel"),pa=ca("mousedown"),ha=ca("mousemove"),fa=ca("mouseout"),ba=ca("mouseup"),va=ca("mouseover"),xa=ca("focusin"),ya=ca("focusout"),wa=ca("keydown"),Sa=ca("keyup"),Ca=ca("input"),ka=ca("change"),Oa=ca("click"),_a=ca("transitioncancel"),Ta=ca("transitionend"),Ea=ca("transitionstart"),Aa=ca("selectstart"),Ma=e=>y("alloy."+e),Da={tap:Ma("tap")},Ba=Ma("focus"),Fa=Ma("blur.post"),Ia=Ma("paste.post"),Ra=Ma("receive"),Na=Ma("execute"),za=Ma("focus.item"),La=Da.tap,Va=Ma("longpress"),Ha=Ma("sandbox.close"),Pa=Ma("typeahead.cancel"),Ua=Ma("system.init"),Wa=Ma("system.touchmove"),$a=Ma("system.touchend"),Ga=Ma("system.scroll"),ja=Ma("system.resize"),qa=Ma("system.attached"),Xa=Ma("system.detached"),Ya=Ma("system.dismissRequested"),Ka=Ma("system.repositionRequested"),Ja=Ma("focusmanager.shifted"),Qa=Ma("slotcontainer.visibility"),Za=Ma("system.external.element.scroll"),ei=Ma("change.tab"),ti=Ma("dismiss.tab"),oi=Ma("highlight"),ni=Ma("dehighlight"),si=e=>(e=>{if(Co(e))return"#shadow-root";{const t=(e=>tn(e,!1))(e);return(e=>{const t=it("div"),o=ct(e.dom.cloneNode(!0));return $o(t,o),on(t)})(t)}})(e);var ri;!function(e){e[e.STOP=0]="STOP",e[e.NORMAL=1]="NORMAL",e[e.LOGGING=2]="LOGGING"}(ri||(ri={}));const ai=ye({}),ii=["alloy/data/Fields","alloy/debugging/Debugging"],li=(e,t,o)=>((e,t,o)=>{switch(fe(ai.get(),e).orThunk((()=>{const t=re(ai.get());return se(t,(t=>e.indexOf(t)>-1?A.some(ai.get()[t]):A.none()))})).getOr(ri.NORMAL)){case ri.NORMAL:return o(ci());case ri.LOGGING:{const n=((e,t)=>{const o=[],n=(new Date).getTime();return{logEventCut:(e,t,n)=>{o.push({outcome:"cut",target:t,purpose:n})},logEventStopped:(e,t,n)=>{o.push({outcome:"stopped",target:t,purpose:n})},logNoParent:(e,t,n)=>{o.push({outcome:"no-parent",target:t,purpose:n})},logEventNoHandlers:(e,t)=>{o.push({outcome:"no-handlers-left",target:t})},logEventResponse:(e,t,n)=>{o.push({outcome:"response",purpose:n,target:t})},write:()=>{const s=(new Date).getTime();I(["mousemove","mouseover","mouseout",Ua()],e)||console.log(e,{event:e,time:s-n,target:t.dom,sequence:L(o,(e=>I(["cut","stopped","response"],e.outcome)?"{"+e.purpose+"} "+e.outcome+" at ("+si(e.target)+")":e.outcome))})}}})(e,t),s=o(n);return n.write(),s}case ri.STOP:return!0}})(e,t,o),ci=y({logEventCut:b,logEventStopped:b,logNoParent:b,logEventNoHandlers:b,logEventResponse:b,write:b}),di=y([Rr("menu"),Rr("selectedMenu")]),ui=y([Rr("item"),Rr("selectedItem")]);y(vr(ui().concat(di())));const mi=y(vr(ui())),gi=Pr("initSize",[Rr("numColumns"),Rr("numRows")]),pi=()=>Pr("markers",[Rr("backgroundMenu")].concat(di()).concat(ui())),hi=e=>Pr("markers",L(e,Rr)),fi=(e,t,o)=>((()=>{const e=new Error;if(void 0!==e.stack){const t=e.stack.split("\n");$(t,(e=>e.indexOf("alloy")>0&&!R(ii,(t=>e.indexOf(t)>-1)))).getOr("unknown")}})(),Br(t,t,o,kr((e=>Ae.value(((...t)=>e.apply(void 0,t))))))),bi=e=>fi(0,e,lr(b)),vi=e=>fi(0,e,lr(A.none)),xi=e=>fi(0,e,{tag:"required",process:{}}),yi=e=>fi(0,e,{tag:"required",process:{}}),wi=(e,t)=>Fr(e,y(t)),Si=e=>Fr(e,w),Ci=y(gi),ki=e=>L(e,(e=>Ze(e,"/*")?e.substring(0,e.length-2):e)),Oi=(e,t)=>{const o=e.toString(),n=o.indexOf(")")+1,s=o.indexOf("("),r=o.substring(s+1,n-1).split(/,\s*/);return e.toFunctionAnnotation=()=>({name:t,parameters:ki(r)}),e},_i=(e,t)=>{let o=null;return{cancel:()=>{null!==o&&(clearTimeout(o),o=null)},schedule:(...n)=>{o=setTimeout((()=>{e.apply(null,n),o=null}),t)}}},Ti=e=>{const t=e.raw;return void 0===t.touches||1!==t.touches.length?A.none():A.some(t.touches[0])};var Ei;!function(e){e.OnFocusMode="onFocus",e.OnEnterOrSpaceMode="onEnterOrSpace",e.OnApiMode="onApi"}(Ei||(Ei={}));const Ai="placeholder",Mi=xe([{single:["required","valueThunk"]},{multiple:["required","valueThunks"]}]),Di=e=>be(e,"uiType"),Bi=(e,t,o,n)=>((e,t,o,n)=>Di(o)&&o.uiType===Ai?((e,t,o,n)=>e.exists((e=>e!==o.owner))?Mi.single(!0,y(o)):fe(n,o.name).fold((()=>{throw new Error("Unknown placeholder component: "+o.name+"\nKnown: ["+re(n)+"]\nNamespace: "+e.getOr("none")+"\nSpec: "+JSON.stringify(o,null,2))}),(e=>e.replace())))(e,0,o,n):Mi.single(!1,y(o)))(e,0,o,n).fold(((s,r)=>{const a=Di(o)?r(t,o.config,o.validated):r(t),i=fe(a,"components").getOr([]),l=q(i,(o=>Bi(e,t,o,n)));return[{...a,components:l}]}),((e,n)=>{if(Di(o)){const e=n(t,o.config,o.validated);return o.validated.preprocess.getOr(w)(e)}return n(t)})),Fi=Mi.single,Ii=Mi.multiple,Ri=y(Ai),Ni=xe([{required:["data"]},{external:["data"]},{optional:["data"]},{group:["data"]}]),zi=Qr("factory",{sketch:w}),Li=Qr("schema",[]),Vi=Rr("name"),Hi=Br("pname","pname",ir((e=>"")),Zs()),Pi=Fr("schema",(()=>[$r("preprocess")])),Ui=Qr("defaults",y({})),Wi=Qr("overrides",y({})),$i=vr([zi,Li,Vi,Hi,Ui,Wi]),Gi=vr([zi,Li,Vi,Ui,Wi]),ji=vr([zi,Li,Vi,Hi,Ui,Wi]),qi=vr([zi,Pi,Vi,Rr("unit"),Hi,Ui,Wi]),Xi=e=>e.fold(A.some,A.none,A.some,A.some),Yi=e=>{const t=e=>e.name;return e.fold(t,t,t,t)},Ki=(e,t)=>o=>{const n=Er("Converting part type",t,o);return e(n)},Ji=Ki(Ni.required,$i),Qi=Ki(Ni.external,Gi),Zi=Ki(Ni.optional,ji),el=Ki(Ni.group,qi),tl=y("entirety");var ol=Object.freeze({__proto__:null,required:Ji,external:Qi,optional:Zi,group:el,asNamedPart:Xi,name:Yi,asCommon:e=>e.fold(w,w,w,w),original:tl});const nl=(e,t,o,n)=>Le(t.defaults(e,o,n),o,{uid:e.partUids[t.name]},t.overrides(e,o,n)),sl=(e,t)=>{const o={};return V(t,(t=>{Xi(t).each((t=>{const n=rl(e,t.pname);o[t.name]=o=>{const s=Er("Part: "+t.name+" in "+e,vr(t.schema),o);return{...n,config:o,validated:s}}}))})),o},rl=(e,t)=>({uiType:Ri(),owner:e,name:t}),al=(e,t,o)=>({uiType:Ri(),owner:e,name:t,config:o,validated:{}}),il=e=>q(e,(e=>e.fold(A.none,A.some,A.none,A.none).map((e=>Pr(e.name,e.schema.concat([Si(tl())])))).toArray())),ll=e=>L(e,Yi),cl=(e,t,o)=>((e,t,o)=>{const n={},s={};return V(o,(e=>{e.fold((e=>{n[e.pname]=Fi(!0,((t,o,n)=>e.factory.sketch(nl(t,e,o,n))))}),(e=>{const o=t.parts[e.name];s[e.name]=y(e.factory.sketch(nl(t,e,o[tl()]),o))}),(e=>{n[e.pname]=Fi(!1,((t,o,n)=>e.factory.sketch(nl(t,e,o,n))))}),(e=>{n[e.pname]=Ii(!0,((t,o,n)=>{const s=t[e.name];return L(s,(o=>e.factory.sketch(Le(e.defaults(t,o,n),o,e.overrides(t,o)))))}))}))})),{internals:y(n),externals:y(s)}})(0,t,o),dl=(e,t,o)=>((e,t,o,n)=>{const s=le(n,((e,t)=>((e,t)=>{let o=!1;return{name:y(e),required:()=>t.fold(((e,t)=>e),((e,t)=>e)),used:()=>o,replace:()=>{if(o)throw new Error("Trying to use the same placeholder more than once: "+e);return o=!0,t}}})(t,e))),r=((e,t,o,n)=>q(o,(o=>Bi(e,t,o,n))))(e,t,o,s);return ie(s,(o=>{if(!1===o.used()&&o.required())throw new Error("Placeholder: "+o.name()+" was not found in components list\nNamespace: "+e.getOr("none")+"\nComponents: "+JSON.stringify(t.components,null,2))})),r})(A.some(e),t,t.components,o),ul=(e,t,o)=>{const n=t.partUids[o];return e.getSystem().getByUid(n).toOptional()},ml=(e,t,o)=>ul(e,t,o).getOrDie("Could not find part: "+o),gl=(e,t,o)=>{const n={},s=t.partUids,r=e.getSystem();return V(o,(e=>{n[e]=y(r.getByUid(s[e]))})),n},pl=(e,t)=>{const o=e.getSystem();return le(t.partUids,((e,t)=>y(o.getByUid(e))))},hl=e=>re(e.partUids),fl=(e,t,o)=>{const n={},s=t.partUids,r=e.getSystem();return V(o,(e=>{n[e]=y(r.getByUid(s[e]).getOrDie())})),n},bl=(e,t)=>{const o=ll(t);return la(L(o,(t=>({key:t,value:e+"-"+t}))))},vl=e=>Br("partUids","partUids",cr((t=>bl(t.uid,e))),Zs());var xl=Object.freeze({__proto__:null,generate:sl,generateOne:al,schemas:il,names:ll,substitutes:cl,components:dl,defaultUids:bl,defaultUidsSchema:vl,getAllParts:pl,getAllPartNames:hl,getPart:ul,getPartOrDie:ml,getParts:gl,getPartsOrDie:fl});const yl=["valignCentre","alignLeft","alignRight","alignCentre","top","bottom","left","right","inset"],wl=(e,t,o,n=1)=>{const s=e*n,r=t*n,a=e=>fe(o,e).getOr([]),i=(e,t,o)=>{const n=K(yl,o);return{offset:Dn(e,t),classesOn:q(o,a),classesOff:q(n,a)}};return{southeast:()=>i(-e,t,["top","alignLeft"]),southwest:()=>i(e,t,["top","alignRight"]),south:()=>i(-e/2,t,["top","alignCentre"]),northeast:()=>i(-e,-t,["bottom","alignLeft"]),northwest:()=>i(e,-t,["bottom","alignRight"]),north:()=>i(-e/2,-t,["bottom","alignCentre"]),east:()=>i(e,-t/2,["valignCentre","left"]),west:()=>i(-e,-t/2,["valignCentre","right"]),insetNortheast:()=>i(s,r,["top","alignLeft","inset"]),insetNorthwest:()=>i(-s,r,["top","alignRight","inset"]),insetNorth:()=>i(-s/2,r,["top","alignCentre","inset"]),insetSoutheast:()=>i(s,-r,["bottom","alignLeft","inset"]),insetSouthwest:()=>i(-s,-r,["bottom","alignRight","inset"]),insetSouth:()=>i(-s/2,-r,["bottom","alignCentre","inset"]),insetEast:()=>i(-s,-r/2,["valignCentre","right","inset"]),insetWest:()=>i(s,-r/2,["valignCentre","left","inset"])}},Sl=()=>wl(0,0,{}),Cl=(e,t,o,n,s,r,a,i=!1)=>({x:e,y:t,bubble:o,direction:n,placement:s,restriction:r,label:`${a}-${s}`,alwaysFit:i}),kl=xe([{southeast:[]},{southwest:[]},{northeast:[]},{northwest:[]},{south:[]},{north:[]},{east:[]},{west:[]}]),Ol=kl.southeast,_l=kl.southwest,Tl=kl.northeast,El=kl.northwest,Al=kl.south,Ml=kl.north,Dl=kl.east,Bl=kl.west,Fl=(e,t)=>J(["left","right","top","bottom"],(o=>fe(t,o).map((t=>((e,t)=>{switch(t){case 1:return e.x;case 0:return e.x+e.width;case 2:return e.y;case 3:return e.y+e.height}})(e,t))))),Il="layout",Rl=e=>e.x,Nl=(e,t)=>e.x+e.width/2-t.width/2,zl=(e,t)=>e.x+e.width-t.width,Ll=(e,t)=>e.y-t.height,Vl=e=>e.y+e.height,Hl=(e,t)=>e.y+e.height/2-t.height/2,Pl=(e,t,o)=>Cl(Rl(e),Vl(e),o.southeast(),Ol(),"southeast",Fl(e,{left:1,top:3}),Il),Ul=(e,t,o)=>Cl(zl(e,t),Vl(e),o.southwest(),_l(),"southwest",Fl(e,{right:0,top:3}),Il),Wl=(e,t,o)=>Cl(Rl(e),Ll(e,t),o.northeast(),Tl(),"northeast",Fl(e,{left:1,bottom:2}),Il),$l=(e,t,o)=>Cl(zl(e,t),Ll(e,t),o.northwest(),El(),"northwest",Fl(e,{right:0,bottom:2}),Il),Gl=(e,t,o)=>Cl(Nl(e,t),Ll(e,t),o.north(),Ml(),"north",Fl(e,{bottom:2}),Il),jl=(e,t,o)=>Cl(Nl(e,t),Vl(e),o.south(),Al(),"south",Fl(e,{top:3}),Il),ql=(e,t,o)=>Cl((e=>e.x+e.width)(e),Hl(e,t),o.east(),Dl(),"east",Fl(e,{left:0}),Il),Xl=(e,t,o)=>Cl(((e,t)=>e.x-t.width)(e,t),Hl(e,t),o.west(),Bl(),"west",Fl(e,{right:1}),Il),Yl=()=>[Pl,Ul,Wl,$l,jl,Gl,ql,Xl],Kl=()=>[Ul,Pl,$l,Wl,jl,Gl,ql,Xl],Jl=()=>[Wl,$l,Pl,Ul,Gl,jl],Ql=()=>[$l,Wl,Ul,Pl,Gl,jl],Zl=()=>[Pl,Ul,Wl,$l,jl,Gl],ec=()=>[Ul,Pl,$l,Wl,jl,Gl],tc="data-alloy-placement",oc=e=>Ko(e,tc),nc="layout-inset",sc=e=>e.x,rc=(e,t)=>e.x+e.width/2-t.width/2,ac=(e,t)=>e.x+e.width-t.width,ic=e=>e.y,lc=(e,t)=>e.y+e.height-t.height,cc=(e,t)=>e.y+e.height/2-t.height/2,dc=(e,t,o)=>Cl(ac(e,t),lc(e,t),o.insetSouthwest(),El(),"southwest",Fl(e,{right:0,bottom:3}),nc),uc=(e,t,o)=>Cl(sc(e),lc(e,t),o.insetSoutheast(),Tl(),"southeast",Fl(e,{left:1,bottom:3}),nc),mc=(e,t,o)=>Cl(ac(e,t),ic(e),o.insetNorthwest(),_l(),"northwest",Fl(e,{right:0,top:2}),nc),gc=(e,t,o)=>Cl(sc(e),ic(e),o.insetNortheast(),Ol(),"northeast",Fl(e,{left:1,top:2}),nc),pc=(e,t,o)=>Cl(rc(e,t),ic(e),o.insetNorth(),Al(),"north",Fl(e,{top:2}),nc),hc=(e,t,o)=>Cl(rc(e,t),lc(e,t),o.insetSouth(),Ml(),"south",Fl(e,{bottom:3}),nc),fc=(e,t,o)=>Cl(ac(e,t),cc(e,t),o.insetEast(),Bl(),"east",Fl(e,{right:0}),nc),bc=(e,t,o)=>Cl(sc(e),cc(e,t),o.insetWest(),Dl(),"west",Fl(e,{left:1}),nc),vc=e=>{switch(e){case"north":return pc;case"northeast":return gc;case"northwest":return mc;case"south":return hc;case"southeast":return uc;case"southwest":return dc;case"east":return fc;case"west":return bc}},xc=(e,t,o,n,s)=>oc(n).map(vc).getOr(pc)(e,t,o,n,s),yc=e=>{switch(e){case"north":return hc;case"northeast":return uc;case"northwest":return dc;case"south":return pc;case"southeast":return gc;case"southwest":return mc;case"east":return bc;case"west":return fc}},wc=(e,t,o,n,s)=>oc(n).map(yc).getOr(pc)(e,t,o,n,s),Sc=(e,t)=>{((e,t)=>{const o=Cn.max(e,t,["margin-top","border-top-width","padding-top","padding-bottom","border-bottom-width","margin-bottom"]);mn(e,"max-height",o+"px")})(e,Math.floor(t))},Cc=y(((e,t)=>{Sc(e,t),gn(e,{"overflow-x":"hidden","overflow-y":"auto"})})),kc=y(((e,t)=>{Sc(e,t)})),Oc=y(((e,t)=>{((e,t)=>{const o=Tn.max(e,t,["margin-left","border-left-width","padding-left","padding-right","border-right-width","margin-right"]);mn(e,"max-width",o+"px")})(e,Math.floor(t))}));var _c;!function(e){e.TopToBottom="toptobottom",e.BottomToTop="bottomtotop"}(_c||(_c={}));const Tc="data-alloy-vertical-dir",Ec=e=>gs(e,(e=>no(e)&&Yo(e,"data-alloy-vertical-dir")===_c.BottomToTop));var Ac;!function(e){e[e.HighlightMenuAndItem=0]="HighlightMenuAndItem",e[e.HighlightJustMenu=1]="HighlightJustMenu",e[e.HighlightNone=2]="HighlightNone"}(Ac||(Ac={}));const Mc={init:()=>Dc({readState:y("No State required")})},Dc=e=>e,Bc={can:E,abort:T,run:b},Fc=e=>{if(!ve(e,"can")&&!ve(e,"abort")&&!ve(e,"run"))throw new Error("EventHandler defined by: "+JSON.stringify(e,null,2)+" does not have can, abort, or run!");return{...Bc,...e}},Ic=(e,t)=>{Lc(e,e.element,t,{})},Rc=(e,t,o)=>{Lc(e,e.element,t,o)},Nc=e=>{Ic(e,Na())},zc=(e,t,o)=>{Lc(e,t,o,{})},Lc=(e,t,o,n)=>{const s={target:t,...n};e.getSystem().triggerEvent(o,t,s)},Vc=(e,t,o,n)=>{e.getSystem().triggerEvent(o,t,n.event)},Hc=e=>la(e),Pc=(e,t)=>({key:e,value:Fc({abort:t})}),Uc=e=>({key:e,value:Fc({run:(e,t)=>{t.event.prevent()}})}),Wc=(e,t)=>({key:e,value:Fc({run:t})}),$c=(e,t,o)=>({key:e,value:Fc({run:(e,n)=>{t.apply(void 0,[e,n].concat(o))}})}),Gc=e=>t=>({key:e,value:Fc({run:(e,o)=>{Vs(e,o)&&t(e,o)}})}),jc=(e,t,o)=>((e,t)=>Wc(e,((o,n)=>{o.getSystem().getByUid(t).each((t=>{Vc(t,t.element,e,n)}))})))(e,t.partUids[o]),qc=(e,t)=>Wc(e,((e,o)=>{const n=o.event,s=e.getSystem().getByDom(n.target).getOrThunk((()=>bs(n.target,(t=>e.getSystem().getByDom(t).toOptional()),T).getOr(e)));t(e,s,o)})),Xc=e=>Wc(e,((e,t)=>{t.cut()})),Yc=e=>Wc(e,((e,t)=>{t.stop()})),Kc=(e,t)=>Gc(e)(t),Jc=Gc(qa()),Qc=Gc(Xa()),Zc=Gc(Ua()),ed=(e=>t=>Wc(e,t))(Na()),td=e=>({classes:u(e.classes)?[]:e.classes,attributes:u(e.attributes)?{}:e.attributes,styles:u(e.styles)?{}:e.styles}),od=(e,t,o)=>Zc(((n,s)=>{o(n,e,t)})),nd=e=>({key:e,value:void 0}),sd=(e,t,o,n,s,r,a)=>{const i=e=>ve(e,o)?e[o]():A.none(),l=le(s,((e,t)=>((e,t,o)=>((e,t,o)=>{const n=o.toString(),s=n.indexOf(")")+1,r=n.indexOf("("),a=n.substring(r+1,s-1).split(/,\s*/);return e.toFunctionAnnotation=()=>({name:t,parameters:ki(a.slice(0,1).concat(a.slice(3)))}),e})(((n,...s)=>{const r=[n].concat(s);return n.config({name:y(e)}).fold((()=>{throw new Error("We could not find any behaviour configuration for: "+e+". Using API: "+o)}),(e=>{const o=Array.prototype.slice.call(r,1);return t.apply(void 0,[n,e.config,e.state].concat(o))}))}),o,t))(o,e,t))),c={...le(r,((e,t)=>Oi(e,t))),...l,revoke:C(nd,o),config:t=>{const n=Er(o+"-config",e,t);return{key:o,value:{config:n,me:c,configAsRaw:st((()=>Er(o+"-config",e,t))),initialConfig:t,state:a}}},schema:y(t),exhibit:(e,t)=>Ue(i(e),fe(n,"exhibit"),((e,o)=>o(t,e.config,e.state))).getOrThunk((()=>td({}))),name:y(o),handlers:e=>i(e).map((e=>fe(n,"events").getOr((()=>({})))(e.config,e.state))).getOr({})};return c},rd=e=>la(e),ad=br([Rr("fields"),Rr("name"),Qr("active",{}),Qr("apis",{}),Qr("state",Mc),Qr("extra",{})]),id=e=>{const t=Er("Creating behaviour: "+e.name,ad,e);return((e,t,o,n,s,r)=>{const a=br(e),i=Jr(t,[(l=e,Gr("config",br(l)))]);var l;return sd(a,i,t,o,n,s,r)})(t.fields,t.name,t.active,t.apis,t.extra,t.state)},ld=br([Rr("branchKey"),Rr("branches"),Rr("name"),Qr("active",{}),Qr("apis",{}),Qr("state",Mc),Qr("extra",{})]),cd=e=>{const t=Er("Creating behaviour: "+e.name,ld,e);return((e,t,o,n,s,r)=>{const a=e,i=Jr(t,[Gr("config",e)]);return sd(a,i,t,o,n,s,r)})(Mr(t.branchKey,t.branches),t.name,t.active,t.apis,t.extra,t.state)},dd=y(void 0),ud=(e,t)=>{const o=((e,t)=>{const o=Hc(t);return id({fields:[Rr("enabled")],name:e,active:{events:y(o)}})})(e,t);return{key:e,value:{config:{},me:o,configAsRaw:y({}),initialConfig:{},state:Mc}}},md=(e,t)=>{t.ignore||(No(e.element),t.onFocus(e))};var gd=Object.freeze({__proto__:null,focus:md,blur:(e,t)=>{t.ignore||zo(e.element)},isFocused:e=>Lo(e.element)}),pd=Object.freeze({__proto__:null,exhibit:(e,t)=>{const o=t.ignore?{}:{attributes:{tabindex:"-1"}};return td(o)},events:e=>Hc([Wc(Ba(),((t,o)=>{md(t,e),o.stop()}))].concat(e.stopMousedown?[Wc(pa(),((e,t)=>{t.event.prevent()}))]:[]))}),hd=[bi("onFocus"),Qr("stopMousedown",!1),Qr("ignore",!1)];const fd=id({fields:hd,name:"focusing",active:pd,apis:gd}),bd=[8],vd=[9],xd=[13],yd=[27],wd=[32],Sd=[37],Cd=[38],kd=[39],Od=[40],_d=y("tooltipping.close.all"),Td=y("dismiss.popups"),Ed=y("reposition.popups"),Ad=y("mouse.released"),Md=(e,t,o)=>{const n=Y(e.slice(0,t)),s=Y(e.slice(t+1));return $(n.concat(s),o)},Dd=(e,t,o)=>{const n=Y(e.slice(0,t));return $(n,o)},Bd=(e,t,o)=>{const n=e.slice(0,t),s=e.slice(t+1);return $(s.concat(n),o)},Fd=(e,t,o)=>{const n=e.slice(t+1);return $(n,o)},Id=e=>t=>{const o=t.raw;return I(e,o.which)},Rd=e=>t=>X(e,(e=>e(t))),Nd=e=>!0===e.raw.shiftKey,zd=e=>!0===e.raw.ctrlKey,Ld=k(Nd),Vd=(e,t)=>({matches:e,classification:t}),Hd=(e,t,o,n)=>{const s=ms(e.element,"."+t.highlightClass);V(s,(o=>{R(n,(e=>yt(e.element,o)))||(ss(o,t.highlightClass),e.getSystem().getByDom(o).each((o=>{t.onDehighlight(e,o),Ic(o,ni())})))}))},Pd=(e,t,o,n)=>{Hd(e,t,0,[n]),Ud(e,t,o,n)||(os(n.element,t.highlightClass),t.onHighlight(e,n),Ic(n,oi()))},Ud=(e,t,o,n)=>rs(n.element,t.highlightClass),Wd=(e,t,o)=>Xn(e.element,"."+t.itemClass).bind((t=>e.getSystem().getByDom(t).toOptional())),$d=(e,t,o)=>{const n=ms(e.element,"."+t.itemClass);return(n.length>0?A.some(n[n.length-1]):A.none()).bind((t=>e.getSystem().getByDom(t).toOptional()))},Gd=(e,t,o,n)=>{const s=ms(e.element,"."+t.itemClass);return G(s,(e=>rs(e,t.highlightClass))).bind((t=>{const o=Fe(t,n,0,s.length-1);return e.getSystem().getByDom(s[o]).toOptional()}))},jd=(e,t,o)=>{const n=ms(e.element,"."+t.itemClass);return Pe(L(n,(t=>e.getSystem().getByDom(t).toOptional())))};var qd=Object.freeze({__proto__:null,dehighlightAll:(e,t,o)=>Hd(e,t,0,[]),dehighlight:(e,t,o,n)=>{Ud(e,t,o,n)&&(ss(n.element,t.highlightClass),t.onDehighlight(e,n),Ic(n,ni()))},highlight:Pd,highlightFirst:(e,t,o)=>{Wd(e,t).each((n=>{Pd(e,t,o,n)}))},highlightLast:(e,t,o)=>{$d(e,t).each((n=>{Pd(e,t,o,n)}))},highlightAt:(e,t,o,n)=>{((e,t,o,n)=>{const s=ms(e.element,"."+t.itemClass);return A.from(s[n]).fold((()=>Ae.error(new Error("No element found with index "+n))),e.getSystem().getByDom)})(e,t,0,n).fold((e=>{throw e}),(n=>{Pd(e,t,o,n)}))},highlightBy:(e,t,o,n)=>{const s=jd(e,t);$(s,n).each((n=>{Pd(e,t,o,n)}))},isHighlighted:Ud,getHighlighted:(e,t,o)=>Xn(e.element,"."+t.highlightClass).bind((t=>e.getSystem().getByDom(t).toOptional())),getFirst:Wd,getLast:$d,getPrevious:(e,t,o)=>Gd(e,t,0,-1),getNext:(e,t,o)=>Gd(e,t,0,1),getCandidates:jd}),Xd=[Rr("highlightClass"),Rr("itemClass"),bi("onHighlight"),bi("onDehighlight")];const Yd=id({fields:Xd,name:"highlighting",apis:qd}),Kd=(e,t,o)=>{t.exists((e=>o.exists((t=>yt(t,e)))))||Rc(e,Ja(),{prevFocus:t,newFocus:o})},Jd=()=>{const e=e=>Ho(e.element);return{get:e,set:(t,o)=>{const n=e(t);t.getSystem().triggerFocus(o,t.element);const s=e(t);Kd(t,n,s)}}},Qd=()=>{const e=e=>Yd.getHighlighted(e).map((e=>e.element));return{get:e,set:(t,o)=>{const n=e(t);t.getSystem().getByDom(o).fold(b,(e=>{Yd.highlight(t,e)}));const s=e(t);Kd(t,n,s)}}},Zd=(e,t,o,n,s)=>{const r=(e,t,o,n,s)=>{return(r=o(e,t,n,s),a=t.event,$(r,(e=>e.matches(a))).map((e=>e.classification))).bind((o=>o(e,t,n,s)));var r,a},a={schema:()=>e.concat([Qr("focusManager",Jd()),Zr("focusInside","onFocus",kr((e=>I(["onFocus","onEnterOrSpace","onApi"],e)?Ae.value(e):Ae.error("Invalid value for focusInside")))),wi("handler",a),wi("state",t),wi("sendFocusIn",s)]),processKey:r,toEvents:(e,t)=>{const a=e.focusInside!==Ei.OnFocusMode?A.none():s(e).map((o=>Wc(Ba(),((n,s)=>{o(n,e,t),s.stop()})))),i=[Wc(wa(),((n,a)=>{r(n,a,o,e,t).fold((()=>{((o,n)=>{const r=Id(wd.concat(xd))(n.event);e.focusInside===Ei.OnEnterOrSpaceMode&&r&&Vs(o,n)&&s(e).each((s=>{s(o,e,t),n.stop()}))})(n,a)}),(e=>{a.stop()}))})),Wc(Sa(),((o,s)=>{r(o,s,n,e,t).each((e=>{s.stop()}))}))];return Hc(a.toArray().concat(i))}};return a},eu=e=>{const t=[$r("onEscape"),$r("onEnter"),Qr("selector",'[data-alloy-tabstop="true"]:not(:disabled)'),Qr("firstTabstop",0),Qr("useTabstopAt",E),$r("visibilitySelector")].concat([e]),o=(e,t)=>{const o=e.visibilitySelector.bind((e=>Yn(t,e))).getOr(t);return kn(o)>0},n=(e,t)=>t.focusManager.get(e).bind((e=>Yn(e,t.selector))),s=(e,t,n)=>{((e,t)=>{const n=ms(e.element,t.selector),s=P(n,(e=>o(t,e)));return A.from(s[t.firstTabstop])})(e,t).each((o=>{t.focusManager.set(e,o)}))},r=(e,t,s,r)=>{const a=P(ms(e.element,s.selector),(e=>o(s,e)));return n(e,s).bind((t=>G(a,C(yt,t)).bind((t=>((e,t,n,s,r)=>r(t,n,(e=>((e,t)=>o(e,t)&&e.useTabstopAt(t))(s,e))).fold((()=>s.cyclic?A.some(!0):A.none()),(t=>(s.focusManager.set(e,t),A.some(!0)))))(e,a,t,s,r)))))},a=(e,t,o)=>{const n=o.cyclic?Md:Dd;return r(e,0,o,n)},i=(e,t,o)=>{const n=o.cyclic?Bd:Fd;return r(e,0,o,n)},l=y([Vd(Rd([Nd,Id(vd)]),a),Vd(Id(vd),i),Vd(Rd([Ld,Id(xd)]),((e,t,o)=>o.onEnter.bind((o=>o(e,t)))))]),c=y([Vd(Id(yd),((e,t,o)=>(e.getSystem().broadcastOn([_d()],{closedTooltip:()=>{t.stop()}}),t.isStopped()?A.none():o.onEscape.bind((o=>o(e,t)))))),Vd(Id(vd),((e,t,o)=>n(e,o).filter((e=>!o.useTabstopAt(e))).bind((n=>((e=>(e=>go(e))(e).bind(yo).exists((t=>yt(t,e))))(n)?a:i)(e,t,o)))))]);return Zd(t,Mc.init,l,c,(()=>A.some(s)))};var tu=eu(Fr("cyclic",T)),ou=eu(Fr("cyclic",E));const nu=e=>io("input")(e)&&"radio"!==Yo(e,"type")||io("textarea")(e),su=(e,t,o)=>nu(o)&&Id(wd)(t.event)?A.none():((e,t,o)=>(zc(e,o,Na()),A.some(!0)))(e,0,o),ru=(e,t)=>A.some(!0),au=[Qr("execute",su),Qr("useSpace",!1),Qr("useEnter",!0),Qr("useControlEnter",!1),Qr("useDown",!1)],iu=(e,t,o)=>o.execute(e,t,e.element);var lu=Zd(au,Mc.init,((e,t,o,n)=>{const s=o.useSpace&&!nu(e.element)?wd:[],r=o.useEnter?xd:[],a=o.useDown?Od:[],i=s.concat(r).concat(a);return[Vd(Id(i),iu)].concat(o.useControlEnter?[Vd(Rd([zd,Id(xd)]),iu)]:[])}),((e,t,o,n)=>o.useSpace&&!nu(e.element)?[Vd(Id(wd),ru)]:[]),(()=>A.none()));const cu=()=>{const e=Xe();return Dc({readState:()=>e.get().map((e=>({numRows:String(e.numRows),numColumns:String(e.numColumns)}))).getOr({numRows:"?",numColumns:"?"}),setGridSize:(t,o)=>{e.set({numRows:t,numColumns:o})},getNumRows:()=>e.get().map((e=>e.numRows)),getNumColumns:()=>e.get().map((e=>e.numColumns))})};var du=Object.freeze({__proto__:null,flatgrid:cu,init:e=>e.state(e)});const uu=e=>(t,o,n,s)=>{const r=e(t.element);return hu(r,t,o,n,s)},mu=(e,t)=>{const o=Ln(e,t);return uu(o)},gu=(e,t)=>{const o=Ln(t,e);return uu(o)},pu=e=>(t,o,n,s)=>hu(e,t,o,n,s),hu=(e,t,o,n,s)=>n.focusManager.get(t).bind((o=>e(t.element,o,n,s))).map((e=>(n.focusManager.set(t,e),!0))),fu=pu,bu=pu,vu=pu,xu=(e,t,o)=>{const n=ms(e,o);return(e=>G(e,(e=>yt(e,t))).map((t=>({index:t,candidates:e}))))(P(n,_n))},yu=(e,t)=>G(e,(e=>yt(t,e))),wu=(e,t,o,n)=>n(Math.floor(t/o),t%o).bind((t=>{const n=t.row*o+t.column;return n>=0&&nwu(e,t,n,((t,r)=>{const a=t===o-1?e.length-t*n:n,i=Fe(r,s,0,a-1);return A.some({row:t,column:i})})),Cu=(e,t,o,n,s)=>wu(e,t,n,((t,r)=>{const a=Fe(t,s,0,o-1),i=a===o-1?e.length-a*n:n,l=Ie(r,0,i-1);return A.some({row:a,column:l})})),ku=[Rr("selector"),Qr("execute",su),vi("onEscape"),Qr("captureTab",!1),Ci()],Ou=(e,t,o)=>{Xn(e.element,t.selector).each((o=>{t.focusManager.set(e,o)}))},_u=e=>(t,o,n,s)=>xu(t,o,n.selector).bind((t=>e(t.candidates,t.index,s.getNumRows().getOr(n.initSize.numRows),s.getNumColumns().getOr(n.initSize.numColumns)))),Tu=(e,t,o)=>o.captureTab?A.some(!0):A.none(),Eu=_u(((e,t,o,n)=>Su(e,t,o,n,-1))),Au=_u(((e,t,o,n)=>Su(e,t,o,n,1))),Mu=_u(((e,t,o,n)=>Cu(e,t,o,n,-1))),Du=_u(((e,t,o,n)=>Cu(e,t,o,n,1))),Bu=y([Vd(Id(Sd),mu(Eu,Au)),Vd(Id(kd),gu(Eu,Au)),Vd(Id(Cd),fu(Mu)),Vd(Id(Od),bu(Du)),Vd(Rd([Nd,Id(vd)]),Tu),Vd(Rd([Ld,Id(vd)]),Tu),Vd(Id(wd.concat(xd)),((e,t,o,n)=>((e,t)=>t.focusManager.get(e).bind((e=>Yn(e,t.selector))))(e,o).bind((n=>o.execute(e,t,n)))))]),Fu=y([Vd(Id(yd),((e,t,o)=>o.onEscape(e,t))),Vd(Id(wd),ru)]);var Iu=Zd(ku,cu,Bu,Fu,(()=>A.some(Ou)));const Ru=(e,t,o,n,s)=>{const r=(e,t,o)=>s(e,t,n,0,o.length-1,o[t],(t=>{return n=o[t],"button"===eo(n)&&"disabled"===Yo(n,"disabled")?r(e,t,o):A.from(o[t]);var n}));return xu(e,o,t).bind((e=>{const t=e.index,o=e.candidates;return r(t,t,o)}))},Nu=(e,t,o,n)=>Ru(e,t,o,n,((e,t,o,n,s,r,a)=>{const i=Ie(t+o,n,s);return i===e?A.from(r):a(i)})),zu=(e,t,o,n)=>Ru(e,t,o,n,((e,t,o,n,s,r,a)=>{const i=Fe(t,o,n,s);return i===e?A.none():a(i)})),Lu=[Rr("selector"),Qr("getInitial",A.none),Qr("execute",su),vi("onEscape"),Qr("executeOnMove",!1),Qr("allowVertical",!0),Qr("allowHorizontal",!0),Qr("cycles",!0)],Vu=(e,t,o)=>((e,t)=>t.focusManager.get(e).bind((e=>Yn(e,t.selector))))(e,o).bind((n=>o.execute(e,t,n))),Hu=(e,t,o)=>{t.getInitial(e).orThunk((()=>Xn(e.element,t.selector))).each((o=>{t.focusManager.set(e,o)}))},Pu=(e,t,o)=>(o.cycles?zu:Nu)(e,o.selector,t,-1),Uu=(e,t,o)=>(o.cycles?zu:Nu)(e,o.selector,t,1),Wu=e=>(t,o,n,s)=>e(t,o,n,s).bind((()=>n.executeOnMove?Vu(t,o,n):A.some(!0))),$u=y([Vd(Id(wd),ru),Vd(Id(yd),((e,t,o)=>o.onEscape(e,t)))]);var Gu=Zd(Lu,Mc.init,((e,t,o,n)=>{const s=[...o.allowHorizontal?Sd:[]].concat(o.allowVertical?Cd:[]),r=[...o.allowHorizontal?kd:[]].concat(o.allowVertical?Od:[]);return[Vd(Id(s),Wu(mu(Pu,Uu))),Vd(Id(r),Wu(gu(Pu,Uu))),Vd(Id(xd),Vu),Vd(Id(wd),Vu)]}),$u,(()=>A.some(Hu)));const ju=(e,t,o)=>A.from(e[t]).bind((e=>A.from(e[o]).map((e=>({rowIndex:t,columnIndex:o,cell:e}))))),qu=(e,t,o,n)=>{const s=e[t].length,r=Fe(o,n,0,s-1);return ju(e,t,r)},Xu=(e,t,o,n)=>{const s=Fe(o,n,0,e.length-1),r=e[s].length,a=Ie(t,0,r-1);return ju(e,s,a)},Yu=(e,t,o,n)=>{const s=e[t].length,r=Ie(o+n,0,s-1);return ju(e,t,r)},Ku=(e,t,o,n)=>{const s=Ie(o+n,0,e.length-1),r=e[s].length,a=Ie(t,0,r-1);return ju(e,s,a)},Ju=[Pr("selectors",[Rr("row"),Rr("cell")]),Qr("cycles",!0),Qr("previousSelector",A.none),Qr("execute",su)],Qu=(e,t,o)=>{t.previousSelector(e).orThunk((()=>{const o=t.selectors;return Xn(e.element,o.cell)})).each((o=>{t.focusManager.set(e,o)}))},Zu=(e,t)=>(o,n,s)=>{const r=s.cycles?e:t;return Yn(n,s.selectors.row).bind((e=>{const t=ms(e,s.selectors.cell);return yu(t,n).bind((t=>{const n=ms(o,s.selectors.row);return yu(n,e).bind((e=>{const o=((e,t)=>L(e,(e=>ms(e,t.selectors.cell))))(n,s);return r(o,e,t).map((e=>e.cell))}))}))}))},em=Zu(((e,t,o)=>qu(e,t,o,-1)),((e,t,o)=>Yu(e,t,o,-1))),tm=Zu(((e,t,o)=>qu(e,t,o,1)),((e,t,o)=>Yu(e,t,o,1))),om=Zu(((e,t,o)=>Xu(e,o,t,-1)),((e,t,o)=>Ku(e,o,t,-1))),nm=Zu(((e,t,o)=>Xu(e,o,t,1)),((e,t,o)=>Ku(e,o,t,1))),sm=y([Vd(Id(Sd),mu(em,tm)),Vd(Id(kd),gu(em,tm)),Vd(Id(Cd),fu(om)),Vd(Id(Od),bu(nm)),Vd(Id(wd.concat(xd)),((e,t,o)=>Ho(e.element).bind((n=>o.execute(e,t,n)))))]),rm=y([Vd(Id(wd),ru)]);var am=Zd(Ju,Mc.init,sm,rm,(()=>A.some(Qu)));const im=[Rr("selector"),Qr("execute",su),Qr("moveOnTab",!1)],lm=(e,t,o)=>o.focusManager.get(e).bind((n=>o.execute(e,t,n))),cm=(e,t,o)=>{Xn(e.element,t.selector).each((o=>{t.focusManager.set(e,o)}))},dm=(e,t,o)=>zu(e,o.selector,t,-1),um=(e,t,o)=>zu(e,o.selector,t,1),mm=y([Vd(Id(Cd),vu(dm)),Vd(Id(Od),vu(um)),Vd(Rd([Nd,Id(vd)]),((e,t,o,n)=>o.moveOnTab?vu(dm)(e,t,o,n):A.none())),Vd(Rd([Ld,Id(vd)]),((e,t,o,n)=>o.moveOnTab?vu(um)(e,t,o,n):A.none())),Vd(Id(xd),lm),Vd(Id(wd),lm)]),gm=y([Vd(Id(wd),ru)]);var pm=Zd(im,Mc.init,mm,gm,(()=>A.some(cm)));const hm=[vi("onSpace"),vi("onEnter"),vi("onShiftEnter"),vi("onLeft"),vi("onRight"),vi("onTab"),vi("onShiftTab"),vi("onUp"),vi("onDown"),vi("onEscape"),Qr("stopSpaceKeyup",!1),$r("focusIn")];var fm=Zd(hm,Mc.init,((e,t,o)=>[Vd(Id(wd),o.onSpace),Vd(Rd([Ld,Id(xd)]),o.onEnter),Vd(Rd([Nd,Id(xd)]),o.onShiftEnter),Vd(Rd([Nd,Id(vd)]),o.onShiftTab),Vd(Rd([Ld,Id(vd)]),o.onTab),Vd(Id(Cd),o.onUp),Vd(Id(Od),o.onDown),Vd(Id(Sd),o.onLeft),Vd(Id(kd),o.onRight),Vd(Id(wd),o.onSpace)]),((e,t,o)=>[...o.stopSpaceKeyup?[Vd(Id(wd),ru)]:[],Vd(Id(yd),o.onEscape)]),(e=>e.focusIn));const bm=tu.schema(),vm=ou.schema(),xm=Gu.schema(),ym=Iu.schema(),wm=am.schema(),Sm=lu.schema(),Cm=pm.schema(),km=fm.schema(),Om=cd({branchKey:"mode",branches:Object.freeze({__proto__:null,acyclic:bm,cyclic:vm,flow:xm,flatgrid:ym,matrix:wm,execution:Sm,menu:Cm,special:km}),name:"keying",active:{events:(e,t)=>e.handler.toEvents(e,t)},apis:{focusIn:(e,t,o)=>{t.sendFocusIn(t).fold((()=>{e.getSystem().triggerFocus(e.element,e.element)}),(n=>{n(e,t,o)}))},setGridSize:(e,t,o,n,s)=>{(e=>ve(e,"setGridSize"))(o)?o.setGridSize(n,s):console.error("Layout does not support setGridSize")}},state:du}),_m=Ne("alloy-premade"),Tm=e=>(Object.defineProperty(e.element.dom,_m,{value:e.uid,writable:!0}),ia(_m,e)),Em=e=>fe(e,_m),Am=e=>((e,t)=>{const o=t.toString(),n=o.indexOf(")")+1,s=o.indexOf("("),r=o.substring(s+1,n-1).split(/,\s*/);return e.toFunctionAnnotation=()=>({name:"OVERRIDE",parameters:ki(r.slice(1))}),e})(((t,...o)=>e(t.getApis(),t,...o)),e),Mm=e=>e.getSystem().isConnected(),Dm=e=>{Ic(e,Xa());const t=e.components();V(t,Dm)},Bm=e=>{const t=e.components();V(t,Bm),Ic(e,qa())},Fm=(e,t)=>{e.getSystem().addToWorld(t),an(e.element)&&Bm(t)},Im=e=>{Dm(e),e.getSystem().removeFromWorld(e)},Rm=(e,t)=>{$o(e.element,t.element)},Nm=(e,t)=>{zm(e,t,$o)},zm=(e,t,o)=>{e.getSystem().addToWorld(t),o(e.element,t.element),an(e.element)&&Bm(t),e.syncComponents()},Lm=e=>{Dm(e),en(e.element),e.getSystem().removeFromWorld(e)},Vm=e=>{const t=go(e.element).bind((t=>e.getSystem().getByDom(t).toOptional()));Lm(e),t.each((e=>{e.syncComponents()}))},Hm=e=>{const t=e.components();V(t,Lm),Zo(e.element),e.syncComponents()},Pm=(e,t)=>{Wm(e,t,$o)},Um=(e,t)=>{Wm(e,t,Uo)},Wm=(e,t,o)=>{o(e,t.element);const n=vo(t.element);V(n,(e=>{t.getByDom(e).each(Bm)}))},$m=e=>{const t=vo(e.element);V(t,(t=>{e.getByDom(t).each(Dm)})),en(e.element)},Gm=(e,t,o)=>{o.fold((()=>$o(e,t)),(e=>{yt(e,t)||(Po(e,t),en(e))}))},jm=(e,t,o)=>{const n=L(t,o),s=vo(e);return V(s.slice(n.length),en),n},qm=(e,t,o,n)=>{const s=xo(e,t),r=n(o,s),a=((e,t,o)=>xo(e,t).map((e=>{if(o.exists((t=>!yt(t,e)))){const t=o.map(eo).getOr("span"),n=it(t);return Po(e,n),n}return e})))(e,t,s);return Gm(e,r.element,a),r},Xm=(e,t)=>{const o=ko(t),n=Vo(o).bind((e=>{const o=t=>yt(e,t);return o(t)?A.some(t):((e,t)=>{const o=e=>{for(let n=0;n{Vo(o).filter((t=>yt(t,e))).fold((()=>{No(e)}),b)})),s},Ym=(e,t)=>{Xm((()=>{((e,t,o)=>{const n=e.components();(e=>{V(e.components(),(e=>en(e.element))),Zo(e.element),e.syncComponents()})(e);const s=o(t),r=K(n,s);V(r,(t=>{Dm(t),e.getSystem().removeFromWorld(t)})),V(s,(t=>{Mm(t)?Rm(e,t):(e.getSystem().addToWorld(t),Rm(e,t),an(e.element)&&Bm(t))})),e.syncComponents()})(e,t,(()=>L(t,e.getSystem().build)))}),e.element)},Km=(e,t)=>{Xm((()=>{((o,n)=>{const s=o.components(),r=q(n,(e=>Em(e).toArray()));V(s,(e=>{I(r,e)||Im(e)}));const a=((e,t,o)=>jm(e,t,((t,n)=>qm(e,n,t,o))))(e.element,t,e.getSystem().buildOrPatch),i=K(s,a);V(i,(e=>{Mm(e)&&Im(e)})),V(a,(e=>{Mm(e)||Fm(o,e)})),o.syncComponents()})(e,t)}),e.element)},Jm=(e,t,o,n)=>{Im(t);const s=qm(e.element,o,n,e.getSystem().buildOrPatch);Fm(e,s),e.syncComponents()},Qm=(e,t,o)=>{const n=e.getSystem().build(o);zm(e,n,t)},Zm=(e,t,o,n)=>{Vm(t),Qm(e,((e,t)=>((e,t,o)=>{xo(e,o).fold((()=>{$o(e,t)}),(e=>{Po(e,t)}))})(e,t,o)),n)},eg=(e,t)=>e.components(),tg=(e,t,o,n,s)=>{const r=eg(e);return A.from(r[n]).map((o=>(s.fold((()=>Vm(o)),(s=>{(t.reuseDom?Jm:Zm)(e,o,n,s)})),o)))};var og=Object.freeze({__proto__:null,append:(e,t,o,n)=>{Qm(e,$o,n)},prepend:(e,t,o,n)=>{Qm(e,Wo,n)},remove:(e,t,o,n)=>{const s=eg(e),r=$(s,(e=>yt(n.element,e.element)));r.each(Vm)},replaceAt:tg,replaceBy:(e,t,o,n,s)=>{const r=eg(e);return G(r,n).bind((o=>tg(e,t,0,o,s)))},set:(e,t,o,n)=>(t.reuseDom?Km:Ym)(e,n),contents:eg});const ng=id({fields:[na("reuseDom",!0)],name:"replacing",apis:og}),sg=Hc([(e=>({key:e,value:Fc({can:(e,t)=>{const o=t.event,n=o.originator,s=o.target;return!((e,t,o)=>yt(t,e.element)&&!yt(t,o))(e,n,s)||(console.warn(Ba()+" did not get interpreted by the desired target. \nOriginator: "+si(n)+"\nTarget: "+si(s)+"\nCheck the "+Ba()+" event handlers"),!1)}})}))(Ba())]);var rg=Object.freeze({__proto__:null,events:sg});const ag=y("alloy-id-"),ig=y("data-alloy-id"),lg=ag(),cg=ig(),dg=(e,t)=>{Object.defineProperty(e.dom,cg,{value:t,writable:!0})},ug=e=>{const t=no(e)?e.dom[cg]:null;return A.from(t)},mg=e=>Ne(e),gg=w,pg=e=>{const t=t=>`The component must be in a context to execute: ${t}`+(e?"\n"+si(e().element)+" is not in context.":""),o=e=>()=>{throw new Error(t(e))},n=e=>()=>{console.warn(t(e))};return{debugInfo:y("fake"),triggerEvent:n("triggerEvent"),triggerFocus:n("triggerFocus"),triggerEscape:n("triggerEscape"),broadcast:n("broadcast"),broadcastOn:n("broadcastOn"),broadcastEvent:n("broadcastEvent"),build:o("build"),buildOrPatch:o("buildOrPatch"),addToWorld:o("addToWorld"),removeFromWorld:o("removeFromWorld"),addToGui:o("addToGui"),removeFromGui:o("removeFromGui"),getByUid:o("getByUid"),getByDom:o("getByDom"),isConnected:T}},hg=pg(),fg=(e,t)=>{const o={};return ie(e,((e,n)=>{ie(e,((e,s)=>{const r=fe(o,s).getOr([]);o[s]=r.concat([t(n,e)])}))})),o},bg=e=>e.cHandler,vg=(e,t)=>({name:e,handler:t}),xg=(e,t)=>{const o={};return V(e,(e=>{o[e.name()]=e.handlers(t)})),o},yg=(e,t,o)=>{const n=t[o];return n?((e,t,o,n)=>{try{const s=Z(o,((o,s)=>{const r=o[t],a=s[t],i=n.indexOf(r),l=n.indexOf(a);if(-1===i)throw new Error("The ordering for "+e+" does not have an entry for "+r+".\nOrder specified: "+JSON.stringify(n,null,2));if(-1===l)throw new Error("The ordering for "+e+" does not have an entry for "+a+".\nOrder specified: "+JSON.stringify(n,null,2));return i(e=>{const t=(e=>(...t)=>W(e,((e,o)=>e&&(e=>e.can)(o).apply(void 0,t)),!0))(e),o=(e=>(...t)=>W(e,((e,o)=>e||(e=>e.abort)(o).apply(void 0,t)),!1))(e);return{can:t,abort:o,run:(...t)=>{V(e,(e=>{e.run.apply(void 0,t)}))}}})(L(e,(e=>e.handler))))):((e,t)=>Ae.error(["The event ("+e+') has more than one behaviour that listens to it.\nWhen this occurs, you must specify an event ordering for the behaviours in your spec (e.g. [ "listing", "toggling" ]).\nThe behaviours that can trigger it are: '+JSON.stringify(L(t,(e=>e.name)),null,2)]))(o,e)},wg=(e,t)=>((e,t)=>{const o=(e=>{const t=[],o=[];return V(e,(e=>{e.fold((e=>{t.push(e)}),(e=>{o.push(e)}))})),{errors:t,values:o}})(e);return o.errors.length>0?(n=o.errors,Ae.error(j(n))):((e,t)=>0===e.length?Ae.value(t):Ae.value(Le(t,Ve.apply(void 0,e))))(o.values,t);var n})(ge(e,((e,o)=>(1===e.length?Ae.value(e[0].handler):yg(e,t,o)).map((n=>{const s=(e=>{const t=(e=>p(e)?{can:E,abort:T,run:e}:e)(e);return(e,o,...n)=>{const s=[e,o].concat(n);t.abort.apply(void 0,s)?o.stop():t.can.apply(void 0,s)&&t.run.apply(void 0,s)}})(n),r=e.length>1?P(t[o],(t=>R(e,(e=>e.name===t)))).join(" > "):e[0].name;return ia(o,((e,t)=>({handler:e,purpose:t}))(s,r))})))),{}),Sg="alloy.base.behaviour",Cg=vr([Br("dom","dom",{tag:"required",process:{}},vr([Rr("tag"),Qr("styles",{}),Qr("classes",[]),Qr("attributes",{}),$r("value"),$r("innerHtml")])),Rr("components"),Rr("uid"),Qr("events",{}),Qr("apis",{}),Br("eventOrder","eventOrder",(Rg={[Na()]:["disabling",Sg,"toggling","typeaheadevents"],[Ba()]:[Sg,"focusing","keying"],[Ua()]:[Sg,"disabling","toggling","representing","tooltipping"],[Ca()]:[Sg,"representing","streaming","invalidating"],[Xa()]:[Sg,"representing","item-events","toolbar-button-events","tooltipping"],[pa()]:["focusing",Sg,"item-type-events"],[da()]:["focusing",Sg,"item-type-events"],[va()]:["item-type-events","tooltipping"],[Ra()]:["receiving","reflecting","tooltipping"]},cr(y(Rg))),Zs()),$r("domModification")]),kg=e=>e.events,Og=(e,t)=>{const o=re(e),n=re(t),s=K(n,o),r=(e=>{const o={},n={};return ue(e,((e,o)=>!be(t,o)||e!==t[o]),de(o),de(n)),{t:o,f:n}})(e).t;return{toRemove:s,toSet:r}},_g=(e,t)=>{const o=t.filter((t=>eo(t)===e.tag&&!(e=>e.innerHtml.isSome()&&e.domChildren.length>0)(e)&&!(e=>be(e.dom,_m))(t))).bind((t=>((e,t)=>{try{const o=((e,t)=>{const{class:o,style:n,...s}=(e=>W(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}))(t),{toSet:r,toRemove:a}=Og(e.attributes,s),i=vn(t),{toSet:l,toRemove:c}=Og(e.styles,i),d=ls(t),u=K(d,e.classes),m=K(e.classes,d);return V(a,(e=>Qo(t,e))),Xo(t,r),as(t,m),is(t,u),V(c,(e=>yn(t,e))),gn(t,l),e.innerHtml.fold((()=>{const o=e.domChildren;((e,t)=>{jm(e,t,((t,o)=>{const n=xo(e,o);return Gm(e,t,n),t}))})(t,o)}),(e=>{nn(t,e)})),(()=>{const o=t,n=e.value.getOrUndefined();n!==cs(o)&&ds(o,n??"")})(),t})(e,t);return A.some(o)}catch{return A.none()}})(e,t))).getOrThunk((()=>(e=>{const t=it(e.tag);Xo(t,e.attributes),as(t,e.classes),gn(t,e.styles),e.innerHtml.each((e=>nn(t,e)));const o=e.domChildren;return Go(t,o),e.value.each((e=>{ds(t,e)})),t})(e)));return dg(o,e.uid),o},Tg=e=>{const t=(e=>{const t=fe(e,"behaviours").getOr({});return q(re(t),(e=>{const o=t[e];return g(o)?[o.me]:[]}))})(e);return((e,t)=>((e,t)=>{const o=L(t,(e=>Jr(e.name(),[Rr("config"),Qr("state",Mc)]))),n=_r("component.behaviours",vr(o),e.behaviours).fold((t=>{throw new Error(Ar(t)+"\nComplete spec:\n"+JSON.stringify(e,null,2))}),w);return{list:t,data:le(n,(e=>{const t=e.map((e=>({config:e.config,state:e.state.init(e.config)})));return y(t)}))}})(e,t))(e,t)},Eg=(e,t)=>{const o=()=>m,n=ye(hg),s=Tr((e=>_r("custom.definition",Cg,e))(e)),r=Tg(e),a=(e=>e.list)(r),i=(e=>e.data)(r),l=((e,t,o)=>{const n={...(s=e).dom,uid:s.uid,domChildren:L(s.components,(e=>e.element))};var s;const r=(e=>e.domModification.fold((()=>td({})),td))(e),a={"alloy.base.modification":r},i=t.length>0?((e,t,o,n)=>{const s={...t};V(o,(t=>{s[t.name()]=t.exhibit(e,n)}));const r=fg(s,((e,t)=>({name:e,modification:t}))),a=e=>U(e,((e,t)=>({...t.modification,...e})),{}),i=U(r.classes,((e,t)=>t.modification.concat(e)),[]),l=a(r.attributes),c=a(r.styles);return td({classes:i,attributes:l,styles:c})})(o,a,t,n):r;return l=n,c=i,{...l,attributes:{...l.attributes,...c.attributes},styles:{...l.styles,...c.styles},classes:l.classes.concat(c.classes)};var l,c})(s,a,i),c=_g(l,t),d=((e,t,o)=>{const n={"alloy.base.behaviour":kg(e)};return((e,t,o,n)=>{const s=((e,t,o)=>{const n={...o,...xg(t,e)};return fg(n,vg)})(e,o,n);return wg(s,t)})(o,e.eventOrder,t,n).getOrDie()})(s,a,i),u=ye(s.components),m={uid:e.uid,getSystem:n.get,config:t=>{const o=i;return(p(o[t.name()])?o[t.name()]:()=>{throw new Error("Could not find "+t.name()+" in "+JSON.stringify(e,null,2))})()},hasConfigured:e=>p(i[e.name()]),spec:e,readState:e=>i[e]().map((e=>e.state.readState())).getOr("not enabled"),getApis:()=>s.apis,connect:e=>{n.set(e)},disconnect:()=>{n.set(pg(o))},element:c,syncComponents:()=>{const e=vo(c),t=q(e,(e=>n.get().getByDom(e).fold((()=>[]),Q)));u.set(t)},components:u.get,events:d};return m},Ag=e=>{const t=lt(e);return Mg({element:t})},Mg=e=>{const t=Er("external.component",br([Rr("element"),$r("uid")]),e),o=ye(pg()),n=t.uid.getOrThunk((()=>mg("external")));dg(t.element,n);const s={uid:n,getSystem:o.get,config:A.none,hasConfigured:T,connect:e=>{o.set(e)},disconnect:()=>{o.set(pg((()=>s)))},getApis:()=>({}),element:t.element,spec:e,readState:y("No state"),syncComponents:b,components:y([]),events:{}};return Tm(s)},Dg=mg,Bg=(e,t)=>Em(e).getOrThunk((()=>((e,t)=>{const{events:o,...n}=gg(e),s=((e,t)=>{const o=fe(e,"components").getOr([]);return t.fold((()=>L(o,Fg)),(e=>L(o,((t,o)=>Bg(t,xo(e,o))))))})(n,t),r={...n,events:{...rg,...o},components:s};return Ae.value(Eg(r,t))})((e=>be(e,"uid"))(e)?e:{uid:Dg(""),...e},t).getOrDie())),Fg=e=>Bg(e,A.none()),Ig=Tm;var Rg,Ng=Object.freeze({__proto__:null,block:(e,t,o,n)=>{qo(e.element,"aria-busy",!0);const s=t.getRoot(e).getOr(e),r=rd([Om.config({mode:"special",onTab:()=>A.some(!0),onShiftTab:()=>A.some(!0)}),fd.config({})]),a=n(s,r),i=s.getSystem().build(a);ng.append(s,Ig(i)),i.hasConfigured(Om)&&t.focus&&Om.focusIn(i),o.isBlocked()||t.onBlock(e),o.blockWith((()=>ng.remove(s,i)))},unblock:(e,t,o)=>{Qo(e.element,"aria-busy"),o.isBlocked()&&t.onUnblock(e),o.clear()},isBlocked:(e,t,o)=>o.isBlocked()}),zg=[sa("getRoot",A.none),na("focus",!0),bi("onBlock"),bi("onUnblock")];const Lg=id({fields:zg,name:"blocking",apis:Ng,state:Object.freeze({__proto__:null,init:()=>{const e=je((e=>e.destroy()));return Dc({readState:e.isSet,blockWith:t=>{e.set({destroy:t})},clear:e.clear,isBlocked:e.isSet})}})});var Vg=Object.freeze({__proto__:null,getCurrent:(e,t,o)=>t.find(e)});const Hg=[Rr("find")],Pg=id({fields:Hg,name:"composing",apis:Vg});var Ug=Object.freeze({__proto__:null,getCoupled:(e,t,o,n)=>o.getOrCreate(e,t,n),getExistingCoupled:(e,t,o,n)=>o.getExisting(e,t,n)}),Wg=[Nr("others",Or(Ae.value,Zs()))],$g=Object.freeze({__proto__:null,init:()=>{const e={},t=(t,o)=>{if(0===re(t.others).length)throw new Error("Cannot find any known coupled components");return fe(e,o)},o=y({});return Dc({readState:o,getExisting:(e,o,n)=>t(o,n).orThunk((()=>(fe(o.others,n).getOrDie("No information found for coupled component: "+n),A.none()))),getOrCreate:(o,n,s)=>t(n,s).getOrThunk((()=>{const t=fe(n.others,s).getOrDie("No information found for coupled component: "+s)(o),r=o.getSystem().build(t);return e[s]=r,r}))})}});const Gg=id({fields:Wg,name:"coupling",apis:Ug,state:$g}),jg=["input","button","textarea","select"],qg=(e,t,o)=>{(t.disabled()?Zg:ep)(e,t)},Xg=(e,t)=>!0===t.useNative&&I(jg,eo(e.element)),Yg=e=>{qo(e.element,"disabled","disabled")},Kg=e=>{Qo(e.element,"disabled")},Jg=e=>{qo(e.element,"aria-disabled","true")},Qg=e=>{qo(e.element,"aria-disabled","false")},Zg=(e,t,o)=>{t.disableClass.each((t=>{os(e.element,t)})),(Xg(e,t)?Yg:Jg)(e),t.onDisabled(e)},ep=(e,t,o)=>{t.disableClass.each((t=>{ss(e.element,t)})),(Xg(e,t)?Kg:Qg)(e),t.onEnabled(e)},tp=(e,t)=>Xg(e,t)?(e=>Jo(e.element,"disabled"))(e):(e=>"true"===Yo(e.element,"aria-disabled"))(e);var op=Object.freeze({__proto__:null,enable:ep,disable:Zg,isDisabled:tp,onLoad:qg,set:(e,t,o,n)=>{(n?Zg:ep)(e,t)}}),np=Object.freeze({__proto__:null,exhibit:(e,t)=>td({classes:t.disabled()?t.disableClass.toArray():[]}),events:(e,t)=>Hc([Pc(Na(),((t,o)=>tp(t,e))),od(e,t,qg)])}),sp=[sa("disabled",T),Qr("useNative",!0),$r("disableClass"),bi("onDisabled"),bi("onEnabled")];const rp=id({fields:sp,name:"disabling",active:np,apis:op}),ap=(e,t,o,n,s)=>{const r=e=>e+"px";return{position:e,left:t.map(r),top:o.map(r),right:n.map(r),bottom:s.map(r)}},ip=(e,t)=>{pn(e,(e=>({...e,position:A.some(e.position)}))(t))},lp=(e,t)=>{const o=e.element;os(o,t.transitionClass),ss(o,t.fadeOutClass),os(o,t.fadeInClass),t.onShow(e)},cp=(e,t)=>{const o=e.element;os(o,t.transitionClass),ss(o,t.fadeInClass),os(o,t.fadeOutClass),t.onHide(e)},dp=(e,t)=>e.y>=t.y,up=(e,t)=>e.bottom<=t.bottom,mp=(e,t,o)=>({location:"top",leftX:t,topY:o.bounds.y-e.y}),gp=(e,t,o)=>({location:"bottom",leftX:t,bottomY:e.bottom-o.bounds.bottom}),pp=e=>e.box.x-e.win.x,hp=(e,t,o)=>o.getInitialPos().map((o=>{const n=((e,t)=>{const o=t.optScrollEnv.fold(y(e.bounds.y),(t=>t.scrollElmTop+(e.bounds.y-t.currentScrollTop)));return Dn(e.bounds.x,o)})(o,t);return{box:Is(n.left,n.top,En(e),kn(e)),location:o.location}})),fp=(e,t,o,n,s)=>{const r=((e,t)=>{const o=t.optScrollEnv.fold(y(e.y),(t=>e.y+t.currentScrollTop-t.scrollElmTop));return Dn(e.x,o)})(t,o),a=Is(r.left,r.top,t.width,t.height);n.setInitialPos({style:vn(e),position:hn(e,"position")||"static",bounds:a,location:s.location})},bp=(e,t,o)=>o.getInitialPos().bind((n=>{switch(o.clearInitialPos(),n.position){case"static":return A.some({morph:"static"});case"absolute":const o=Hs(e).getOr(ln()),s=Rs(o),r=o.dom.scrollTop??0;return A.some({morph:"absolute",positionCss:ap("absolute",fe(n.style,"left").map((e=>t.x-s.x)),fe(n.style,"top").map((e=>t.y-s.y+r)),fe(n.style,"right").map((e=>s.right-t.right)),fe(n.style,"bottom").map((e=>s.bottom-t.bottom)))});default:return A.none()}})),vp=e=>{switch(e.location){case"top":return A.some({morph:"fixed",positionCss:ap("fixed",A.some(e.leftX),A.some(e.topY),A.none(),A.none())});case"bottom":return A.some({morph:"fixed",positionCss:ap("fixed",A.some(e.leftX),A.none(),A.none(),A.some(e.bottomY))});default:return A.none()}},xp=(e,t,o)=>{const n=e.element;return He(bn(n,"position"),"fixed")?((e,t,o)=>((e,t,o)=>hp(e,t,o).filter((({box:e})=>((e,t,o)=>X(e,(e=>{switch(e){case"bottom":return up(t,o.bounds);case"top":return dp(t,o.bounds)}})))(o.getModes(),e,t))).bind((({box:t})=>bp(e,t,o))))(e,t,o).orThunk((()=>t.optScrollEnv.bind((n=>hp(e,t,o))).bind((({box:e,location:o})=>{const n=Ls(),s=pp({win:n,box:e}),r="top"===o?mp(n,s,t):gp(n,s,t);return vp(r)})))))(n,t,o):((e,t,o)=>{const n=Rs(e),s=Ls(),r=((e,t,o)=>{const n=t.win,s=t.box,r=pp(t);return se(e,(e=>{switch(e){case"bottom":return up(s,o.bounds)?A.none():A.some(gp(n,r,o));case"top":return dp(s,o.bounds)?A.none():A.some(mp(n,r,o));default:return A.none()}})).getOr({location:"no-dock"})})(o.getModes(),{win:s,box:n},t);return"top"===r.location||"bottom"===r.location?(fp(e,n,t,o,r),vp(r)):A.none()})(n,t,o)},yp=(e,t,o)=>{o.setDocked(!1),V(["left","right","top","bottom","position"],(t=>yn(e.element,t))),t.onUndocked(e)},wp=(e,t,o,n)=>{const s="fixed"===n.position;o.setDocked(s),ip(e.element,n),(s?t.onDocked:t.onUndocked)(e)},Sp=(e,t,o,n,s=!1)=>{t.contextual.each((t=>{t.lazyContext(e).each((r=>{const a=((e,t)=>e.yt.y)(r,n.bounds);a!==o.isVisible()&&(o.setVisible(a),s&&!a?(as(e.element,[t.fadeOutClass]),t.onHide(e)):(a?lp:cp)(e,t))}))}))},Cp=(e,t,o,n,s)=>{Sp(e,t,o,n,!0),wp(e,t,o,s.positionCss)},kp=(e,t,o)=>{e.getSystem().isConnected()&&((e,t,o)=>{const n=t.lazyViewport(e);Sp(e,t,o,n),xp(e,n,o).each((s=>{((e,t,o,n,s)=>{switch(s.morph){case"static":return yp(e,t,o);case"absolute":return wp(e,t,o,s.positionCss);case"fixed":Cp(e,t,o,n,s)}})(e,t,o,n,s)}))})(e,t,o)},Op=(e,t,o)=>{o.isDocked()&&((e,t,o)=>{const n=e.element;o.setDocked(!1);const s=t.lazyViewport(e);((e,t,o)=>{const n=e.element;return hp(n,t,o).bind((({box:e})=>bp(n,e,o)))})(e,s,o).each((n=>{switch(n.morph){case"static":yp(e,t,o);break;case"absolute":wp(e,t,o,n.positionCss)}})),o.setVisible(!0),t.contextual.each((t=>{is(n,[t.fadeInClass,t.fadeOutClass,t.transitionClass]),t.onShow(e)})),kp(e,t,o)})(e,t,o)},_p=e=>(t,o,n)=>{const s=o.lazyViewport(t);((e,t,o,n)=>{const s=Rs(e),r=Ls(),a=n(r,pp({win:r,box:s}),t);return"bottom"===a.location||"top"===a.location?(((e,t,o,n,s)=>{n.getInitialPos().fold((()=>fp(e,t,o,n,s)),(()=>b))})(e,s,t,o,a),vp(a)):A.none()})(t.element,s,n,e).each((e=>{Cp(t,o,n,s,e)}))},Tp=_p(mp),Ep=_p(gp);var Ap=Object.freeze({__proto__:null,refresh:kp,reset:Op,isDocked:(e,t,o)=>o.isDocked(),getModes:(e,t,o)=>o.getModes(),setModes:(e,t,o,n)=>o.setModes(n),forceDockToTop:Tp,forceDockToBottom:Ep}),Mp=Object.freeze({__proto__:null,events:(e,t)=>Hc([Kc(Ta(),((o,n)=>{e.contextual.each((e=>{rs(o.element,e.transitionClass)&&(is(o.element,[e.transitionClass,e.fadeInClass]),(t.isVisible()?e.onShown:e.onHidden)(o)),n.stop()}))})),Wc(Ga(),((o,n)=>{kp(o,e,t)})),Wc(Za(),((o,n)=>{kp(o,e,t)})),Wc(ja(),((o,n)=>{Op(o,e,t)}))])}),Dp=[Jr("contextual",[Lr("fadeInClass"),Lr("fadeOutClass"),Lr("transitionClass"),Hr("lazyContext"),bi("onShow"),bi("onShown"),bi("onHide"),bi("onHidden")]),sa("lazyViewport",(()=>({bounds:Ls(),optScrollEnv:A.none()}))),ra("modes",["top","bottom"],or),bi("onDocked"),bi("onUndocked")];const Bp=id({fields:Dp,name:"docking",active:Mp,apis:Ap,state:Object.freeze({__proto__:null,init:e=>{const t=ye(!1),o=ye(!0),n=Xe(),s=ye(e.modes);return Dc({isDocked:t.get,setDocked:t.set,getInitialPos:n.get,setInitialPos:n.set,clearInitialPos:n.clear,isVisible:o.get,setVisible:o.set,getModes:s.get,setModes:s.set,readState:()=>`docked: ${t.get()}, visible: ${o.get()}, modes: ${s.get().join(",")}`})}})}),Fp=xe([{offset:["x","y"]},{absolute:["x","y"]},{fixed:["x","y"]}]),Ip=e=>t=>t.translate(-e.left,-e.top),Rp=e=>t=>t.translate(e.left,e.top),Np=e=>(t,o)=>W(e,((e,t)=>t(e)),Dn(t,o)),zp=(e,t,o)=>e.fold(Np([Rp(o),Ip(t)]),Np([Ip(t)]),Np([])),Lp=(e,t,o)=>e.fold(Np([Rp(o)]),Np([]),Np([Rp(t)])),Vp=(e,t,o)=>e.fold(Np([]),Np([Ip(o)]),Np([Rp(t),Ip(o)])),Hp=(e,t,o)=>{const n=e.fold(((e,t)=>({position:A.some("absolute"),left:A.some(e+"px"),top:A.some(t+"px")})),((e,t)=>({position:A.some("absolute"),left:A.some(e-o.left+"px"),top:A.some(t-o.top+"px")})),((e,t)=>({position:A.some("fixed"),left:A.some(e+"px"),top:A.some(t+"px")})));return{right:A.none(),bottom:A.none(),...n}},Pp=(e,t,o,n)=>{const s=(e,s)=>(r,a)=>{const i=e(t,o,n);return s(r.getOr(i.left),a.getOr(i.top))};return e.fold(s(Vp,Up),s(Lp,Wp),s(zp,$p))},Up=Fp.offset,Wp=Fp.absolute,$p=Fp.fixed,Gp=(e,t)=>{const o=Yo(e,t);return u(o)?NaN:parseInt(o,10)},jp=(e,t,o,n,s,r)=>{const a=((e,t,o,n)=>((e,t)=>{const o=e.element,n=Gp(o,t.leftAttr),s=Gp(o,t.topAttr);return isNaN(n)||isNaN(s)?A.none():A.some(Dn(n,s))})(e,t).fold((()=>o),(e=>$p(e.left+n.left,e.top+n.top))))(e,t,o,n),i=t.mustSnap?Xp(e,t,a,s,r):Yp(e,t,a,s,r),l=zp(a,s,r);return((e,t,o)=>{const n=e.element;qo(n,t.leftAttr,o.left+"px"),qo(n,t.topAttr,o.top+"px")})(e,t,l),i.fold((()=>({coord:$p(l.left,l.top),extra:A.none()})),(e=>({coord:e.output,extra:e.extra})))},qp=(e,t,o,n)=>se(e,(e=>{const s=e.sensor,r=((e,t,o,n,s,r)=>{const a=Lp(e,s,r),i=Lp(t,s,r);return Math.abs(a.left-i.left)<=o&&Math.abs(a.top-i.top)<=n})(t,s,e.range.left,e.range.top,o,n);return r?A.some({output:Pp(e.output,t,o,n),extra:e.extra}):A.none()})),Xp=(e,t,o,n,s)=>{const r=t.getSnapPoints(e);return qp(r,o,n,s).orThunk((()=>{const e=W(r,((e,t)=>{const r=t.sensor,a=((e,t,o,n,s,r)=>{const a=Lp(e,s,r),i=Lp(t,s,r),l=Math.abs(a.left-i.left),c=Math.abs(a.top-i.top);return Dn(l,c)})(o,r,t.range.left,t.range.top,n,s);return e.deltas.fold((()=>({deltas:A.some(a),snap:A.some(t)})),(o=>(a.left+a.top)/2<=(o.left+o.top)/2?{deltas:A.some(a),snap:A.some(t)}:e))}),{deltas:A.none(),snap:A.none()});return e.snap.map((e=>({output:Pp(e.output,o,n,s),extra:e.extra})))}))},Yp=(e,t,o,n,s)=>{const r=t.getSnapPoints(e);return qp(r,o,n,s)};var Kp=Object.freeze({__proto__:null,snapTo:(e,t,o,n)=>{const s=t.getTarget(e.element);if(t.repositionTarget){const t=lo(e.element),o=Rn(t),r=Ps(s),a=((e,t,o)=>({coord:Pp(e.output,e.output,t,o),extra:e.extra}))(n,o,r),i=Hp(a.coord,0,r);pn(s,i)}}});const Jp=(e,t)=>aa(e,{},L(t,(t=>{return o=t.name(),n="Cannot configure "+t.name()+" for "+e,Br(o,o,{tag:"option",process:{}},Js((e=>qs("The field: "+o+" is forbidden. "+n))));var o,n})).concat([Fr("dump",w)])),Qp=e=>e.dump,Zp=(e,t)=>({...rd(t),...e.dump}),eh=Jp,th=Zp,oh=(e,t,o,n,s)=>{const r=((e,t)=>(e.length>0?[Pr("parts",e)]:[]).concat([Rr("uid"),Qr("dom",{}),Qr("components",[]),Si("originalSpec"),Qr("debug.sketcher",{})]).concat(t))(n,s);return Er(e+" [SpecSchema]",br(r.concat(t)),o)},nh=(e,t,o,n,s)=>{const r=sh(s),a=il(o),i=vl(o),l=oh(e,t,r,a,[i]),c=cl(0,l,o);return n(l,dl(e,l,c.internals()),r,c.externals())},sh=e=>(e=>be(e,"uid"))(e)?e:{...e,uid:mg("uid")},rh=br([Rr("name"),Rr("factory"),Rr("configFields"),Qr("apis",{}),Qr("extraApis",{})]),ah=br([Rr("name"),Rr("factory"),Rr("configFields"),Rr("partFields"),Qr("apis",{}),Qr("extraApis",{})]),ih=e=>{const t=Er("Sketcher for "+e.name,rh,e),o=le(t.apis,Am),n=le(t.extraApis,((e,t)=>Oi(e,t)));return{name:t.name,configFields:t.configFields,sketch:e=>((e,t,o,n)=>{const s=sh(n);return o(oh(e,t,s,[],[]),s)})(t.name,t.configFields,t.factory,e),...o,...n}},lh=e=>{const t=Er("Sketcher for "+e.name,ah,e),o=sl(t.name,t.partFields),n=le(t.apis,Am),s=le(t.extraApis,((e,t)=>Oi(e,t)));return{name:t.name,partFields:t.partFields,configFields:t.configFields,sketch:e=>nh(t.name,t.configFields,t.partFields,t.factory,e),parts:o,...n,...s}},ch=ih({name:"Container",factory:e=>{const{attributes:t,...o}=e.dom;return{uid:e.uid,dom:{tag:"div",attributes:{role:"presentation",...t},...o},components:e.components,behaviours:Qp(e.containerBehaviours),events:e.events,domModification:e.domModification,eventOrder:e.eventOrder}},configFields:[Qr("components",[]),Jp("containerBehaviours",[]),Qr("events",{}),Qr("domModification",{}),Qr("eventOrder",{})]}),dh="data-initial-z-index",uh=(e,t)=>{e.getSystem().addToGui(t),(e=>{go(e.element).filter(no).each((t=>{bn(t,"z-index").each((e=>{qo(t,dh,e)})),mn(t,"z-index",hn(e.element,"z-index"))}))})(t)},mh=e=>{(e=>{go(e.element).filter(no).each((e=>{Ko(e,dh).fold((()=>yn(e,"z-index")),(t=>mn(e,"z-index",t))),Qo(e,dh)}))})(e),e.getSystem().removeFromGui(e)},gh=(e,t,o)=>e.getSystem().build(ch.sketch({dom:{styles:{left:"0px",top:"0px",width:"100%",height:"100%",position:"fixed","z-index":"1000000000000000"},classes:[t]},events:o}));var ph=Jr("snaps",[Rr("getSnapPoints"),bi("onSensor"),Rr("leftAttr"),Rr("topAttr"),Qr("lazyViewport",Ls),Qr("mustSnap",!1)]);const hh=[Qr("useFixed",T),Rr("blockerClass"),Qr("getTarget",w),Qr("onDrag",b),Qr("repositionTarget",!0),Qr("onDrop",b),sa("getBounds",Ls),ph],fh=e=>{return(t=bn(e,"left"),o=bn(e,"top"),n=bn(e,"position"),t.isSome()&&o.isSome()&&n.isSome()?A.some(((e,t,o)=>("fixed"===o?$p:Up)(parseInt(e,10),parseInt(t,10)))(t.getOrDie(),o.getOrDie(),n.getOrDie())):A.none()).getOrThunk((()=>{const t=Fn(e);return Wp(t.left,t.top)}));var t,o,n},bh=(e,t)=>({bounds:e.getBounds(),height:On(t.element),width:An(t.element)}),vh=(e,t,o,n,s)=>{const r=o.update(n,s),a=o.getStartData().getOrThunk((()=>bh(t,e)));r.each((o=>{((e,t,o,n)=>{const s=t.getTarget(e.element);if(t.repositionTarget){const r=lo(e.element),a=Rn(r),i=Ps(s),l=fh(s),c=((e,t,o,n,s,r,a)=>((e,t,o,n,s)=>{const r=s.bounds,a=Lp(t,o,n),i=Ie(a.left,r.x,r.x+r.width-s.width),l=Ie(a.top,r.y,r.y+r.height-s.height),c=Wp(i,l);return t.fold((()=>{const e=Vp(c,o,n);return Up(e.left,e.top)}),y(c),(()=>{const e=zp(c,o,n);return $p(e.left,e.top)}))})(0,t.fold((()=>{const e=(t=o,a=r.left,i=r.top,t.fold(((e,t)=>Up(e+a,t+i)),((e,t)=>Wp(e+a,t+i)),((e,t)=>$p(e+a,t+i))));var t,a,i;const l=zp(e,n,s);return $p(l.left,l.top)}),(t=>{const a=jp(e,t,o,r,n,s);return a.extra.each((o=>{t.onSensor(e,o)})),a.coord})),n,s,a))(e,t.snaps,l,a,i,n,o),d=Hp(c,0,i);pn(s,d)}t.onDrag(e,s,n)})(e,t,a,o)}))},xh=(e,t,o,n)=>{t.each(mh),o.snaps.each((t=>{((e,t)=>{((e,t)=>{const o=e.element;Qo(o,t.leftAttr),Qo(o,t.topAttr)})(e,t)})(e,t)}));const s=o.getTarget(e.element);n.reset(),o.onDrop(e,s)},yh=e=>(t,o)=>{const n=e=>{o.setStartData(bh(t,e))};return Hc([Wc(Ga(),(e=>{o.getStartData().each((()=>n(e)))})),...e(t,o,n)])};var wh=Object.freeze({__proto__:null,getData:e=>A.from(Dn(e.x,e.y)),getDelta:(e,t)=>Dn(t.left-e.left,t.top-e.top)});const Sh=(e,t,o)=>[Wc(pa(),((n,s)=>{if(0!==s.event.raw.button)return;s.stop();const r=()=>xh(n,A.some(l),e,t),a=_i(r,200),i={drop:r,delayDrop:a.schedule,forceDrop:r,move:o=>{a.cancel(),vh(n,e,t,wh,o)}},l=gh(n,e.blockerClass,(e=>Hc([Wc(pa(),e.forceDrop),Wc(ba(),e.drop),Wc(ha(),((t,o)=>{e.move(o.event)})),Wc(fa(),e.delayDrop)]))(i));o(n),uh(n,l)}))],Ch=[...hh,wi("dragger",{handlers:yh(Sh)})];var kh=Object.freeze({__proto__:null,getData:e=>{const t=e.raw.touches;return 1===t.length?(e=>{const t=e[0];return A.some(Dn(t.clientX,t.clientY))})(t):A.none()},getDelta:(e,t)=>Dn(t.left-e.left,t.top-e.top)});const Oh=(e,t,o)=>{const n=Xe(),s=o=>{xh(o,n.get(),e,t),n.clear()};return[Wc(da(),((r,a)=>{a.stop();const i=()=>s(r),l={drop:i,delayDrop:b,forceDrop:i,move:o=>{vh(r,e,t,kh,o)}},c=gh(r,e.blockerClass,(e=>Hc([Wc(da(),e.forceDrop),Wc(ma(),e.drop),Wc(ga(),e.drop),Wc(ua(),((t,o)=>{e.move(o.event)}))]))(l));n.set(c),o(r),uh(r,c)})),Wc(ua(),((o,n)=>{n.stop(),vh(o,e,t,kh,n.event)})),Wc(ma(),((e,t)=>{t.stop(),s(e)})),Wc(ga(),s)]},_h=Ch,Th=[...hh,wi("dragger",{handlers:yh(Oh)})],Eh=[...hh,wi("dragger",{handlers:yh(((e,t,o)=>[...Sh(e,t,o),...Oh(e,t,o)]))})];var Ah=Object.freeze({__proto__:null,mouse:_h,touch:Th,mouseOrTouch:Eh}),Mh=Object.freeze({__proto__:null,init:()=>{let e=A.none(),t=A.none();const o=y({});return Dc({readState:o,reset:()=>{e=A.none(),t=A.none()},update:(t,o)=>t.getData(o).bind((o=>((t,o)=>{const n=e.map((e=>t.getDelta(e,o)));return e=A.some(o),n})(t,o))),getStartData:()=>t,setStartData:e=>{t=A.some(e)}})}});const Dh=cd({branchKey:"mode",branches:Ah,name:"dragging",active:{events:(e,t)=>e.dragger.handlers(e,t)},extra:{snap:e=>({sensor:e.sensor,range:e.range,output:e.output,extra:A.from(e.extra)})},state:Mh,apis:Kp}),Bh=["input","textarea"],Fh=e=>{const t=eo(e);return I(Bh,t)},Ih=(e,t)=>{const o=t.getRoot(e).getOr(e.element);ss(o,t.invalidClass),t.notify.each((t=>{Fh(e.element)&&qo(e.element,"aria-invalid",!1),t.getContainer(e).each((e=>{nn(e,t.validHtml)})),t.onValid(e)}))},Rh=(e,t,o,n)=>{const s=t.getRoot(e).getOr(e.element);os(s,t.invalidClass),t.notify.each((t=>{Fh(e.element)&&qo(e.element,"aria-invalid",!0),t.getContainer(e).each((e=>{nn(e,n)})),t.onInvalid(e,n)}))},Nh=(e,t,o)=>t.validator.fold((()=>_e(Ae.value(!0))),(t=>t.validate(e))),zh=(e,t,o)=>(t.notify.each((t=>{t.onValidate(e)})),Nh(e,t).map((o=>e.getSystem().isConnected()?o.fold((o=>(Rh(e,t,0,o),Ae.error(o))),(o=>(Ih(e,t),Ae.value(o)))):Ae.error("No longer in system"))));var Lh=Object.freeze({__proto__:null,markValid:Ih,markInvalid:Rh,query:Nh,run:zh,isInvalid:(e,t)=>{const o=t.getRoot(e).getOr(e.element);return rs(o,t.invalidClass)}}),Vh=Object.freeze({__proto__:null,events:(e,t)=>e.validator.map((t=>Hc([Wc(t.onEvent,(t=>{zh(t,e).get(w)}))].concat(t.validateOnLoad?[Jc((t=>{zh(t,e).get(b)}))]:[])))).getOr({})}),Hh=[Rr("invalidClass"),Qr("getRoot",A.none),Jr("notify",[Qr("aria","alert"),Qr("getContainer",A.none),Qr("validHtml",""),bi("onValid"),bi("onInvalid"),bi("onValidate")]),Jr("validator",[Rr("validate"),Qr("onEvent","input"),Qr("validateOnLoad",!0)])];const Ph=(e,t,o)=>{t.store.manager.onLoad(e,t,o)},Uh=(e,t,o)=>{t.store.manager.onUnload(e,t,o)};var Wh=Object.freeze({__proto__:null,onLoad:Ph,onUnload:Uh,setValue:(e,t,o,n)=>{t.store.manager.setValue(e,t,o,n)},getValue:(e,t,o)=>t.store.manager.getValue(e,t,o),getState:(e,t,o)=>o}),$h=Object.freeze({__proto__:null,events:(e,t)=>{const o=e.resetOnDom?[Jc(((o,n)=>{Ph(o,e,t)})),Qc(((o,n)=>{Uh(o,e,t)}))]:[od(e,t,Ph)];return Hc(o)}});const Gh=()=>{const e=ye(null);return Dc({set:e.set,get:e.get,isNotSet:()=>null===e.get(),clear:()=>{e.set(null)},readState:()=>({mode:"memory",value:e.get()})})},jh=()=>{const e=ye({}),t=ye({});return Dc({readState:()=>({mode:"dataset",dataByValue:e.get(),dataByText:t.get()}),lookup:o=>fe(e.get(),o).orThunk((()=>fe(t.get(),o))),update:o=>{const n=e.get(),s=t.get(),r={},a={};V(o,(e=>{r[e.value]=e,fe(e,"meta").each((t=>{fe(t,"text").each((t=>{a[t]=e}))}))})),e.set({...n,...r}),t.set({...s,...a})},clear:()=>{e.set({}),t.set({})}})};var qh=Object.freeze({__proto__:null,memory:Gh,dataset:jh,manual:()=>Dc({readState:b}),init:e=>e.store.manager.state(e)});const Xh=(e,t,o,n)=>{const s=t.store;o.update([n]),s.setValue(e,n),t.onSetValue(e,n)};var Yh=[$r("initialValue"),Rr("getFallbackEntry"),Rr("getDataKey"),Rr("setValue"),wi("manager",{setValue:Xh,getValue:(e,t,o)=>{const n=t.store,s=n.getDataKey(e);return o.lookup(s).getOrThunk((()=>n.getFallbackEntry(s)))},onLoad:(e,t,o)=>{t.store.initialValue.each((n=>{Xh(e,t,o,n)}))},onUnload:(e,t,o)=>{o.clear()},state:jh})],Kh=[Rr("getValue"),Qr("setValue",b),$r("initialValue"),wi("manager",{setValue:(e,t,o,n)=>{t.store.setValue(e,n),t.onSetValue(e,n)},getValue:(e,t,o)=>t.store.getValue(e),onLoad:(e,t,o)=>{t.store.initialValue.each((o=>{t.store.setValue(e,o)}))},onUnload:b,state:Mc.init})],Jh=[$r("initialValue"),wi("manager",{setValue:(e,t,o,n)=>{o.set(n),t.onSetValue(e,n)},getValue:(e,t,o)=>o.get(),onLoad:(e,t,o)=>{t.store.initialValue.each((e=>{o.isNotSet()&&o.set(e)}))},onUnload:(e,t,o)=>{o.clear()},state:Gh})],Qh=[Zr("store",{mode:"memory"},Mr("mode",{memory:Jh,manual:Kh,dataset:Yh})),bi("onSetValue"),Qr("resetOnDom",!1)];const Zh=id({fields:Qh,name:"representing",active:$h,apis:Wh,extra:{setValueFrom:(e,t)=>{const o=Zh.getValue(t);Zh.setValue(e,o)}},state:qh}),ef=id({fields:Hh,name:"invalidating",active:Vh,apis:Lh,extra:{validation:e=>t=>{const o=Zh.getValue(t);return _e(e(o))}}});var tf=Object.freeze({__proto__:null,exhibit:(e,t)=>td({classes:[],styles:t.useFixed()?{}:{position:"relative"}})});const of=xe([{none:[]},{relative:["x","y","width","height"]},{fixed:["x","y","width","height"]}]),nf=(e,t,o,n,s,r)=>{const a=t.rect,i=a.x-o,l=a.y-n,c=s-(i+a.width),d=r-(l+a.height),u=A.some(i),m=A.some(l),g=A.some(c),p=A.some(d),h=A.none();return t.direction.fold((()=>ap(e,u,m,h,h)),(()=>ap(e,h,m,g,h)),(()=>ap(e,u,h,h,p)),(()=>ap(e,h,h,g,p)),(()=>ap(e,u,m,h,h)),(()=>ap(e,u,h,h,p)),(()=>ap(e,u,m,h,h)),(()=>ap(e,h,m,g,h)))},sf=(e,t)=>e.fold((()=>{const e=t.rect;return ap("absolute",A.some(e.x),A.some(e.y),A.none(),A.none())}),((e,o,n,s)=>nf("absolute",t,e,o,n,s)),((e,o,n,s)=>nf("fixed",t,e,o,n,s))),rf=(e,t)=>{const o=C(Fs,t),n=e.fold(o,o,(()=>{const e=Rn();return Fs(t).translate(-e.left,-e.top)})),s=An(t),r=On(t);return Is(n.left,n.top,s,r)},af=(e,t)=>t.fold((()=>e.fold(Ls,Ls,Is)),(t=>e.fold(y(t),y(t),(()=>{const o=lf(e,t.x,t.y);return Is(o.left,o.top,t.width,t.height)})))),lf=(e,t,o)=>{const n=Dn(t,o);return e.fold(y(n),y(n),(()=>{const e=Rn();return n.translate(-e.left,-e.top)}))};of.none;const cf=of.relative,df=of.fixed,uf=xe([{fit:["reposition"]},{nofit:["reposition","visibleW","visibleH","isVisible"]}]),mf=(e,t,o,n)=>{const s=e.bubble,r=s.offset,a=((e,t,o)=>{const n=(n,s)=>t[n].map((t=>{const r="top"===n||"bottom"===n,a=r?o.top:o.left,i=("left"===n||"top"===n?Math.max:Math.min)(t,s)+a;return r?Ie(i,e.y,e.bottom):Ie(i,e.x,e.right)})).getOr(s),s=n("left",e.x),r=n("top",e.y),a=n("right",e.right),i=n("bottom",e.bottom);return Is(s,r,a-s,i-r)})(n,e.restriction,r),i=e.x+r.left,l=e.y+r.top,c=Is(i,l,t,o),{originInBounds:d,sizeInBounds:u,visibleW:m,visibleH:g}=((e,t)=>{const{x:o,y:n,right:s,bottom:r}=t,{x:a,y:i,right:l,bottom:c,width:d,height:u}=e;return{originInBounds:a>=o&&a<=s&&i>=n&&i<=r,sizeInBounds:l<=s&&l>=o&&c<=r&&c>=n,visibleW:Math.min(d,a>=o?s-a:l-o),visibleH:Math.min(u,i>=n?r-i:c-n)}})(c,a),p=d&&u,h=p?c:((e,t)=>{const{x:o,y:n,right:s,bottom:r}=t,{x:a,y:i,width:l,height:c}=e,d=Math.max(o,s-l),u=Math.max(n,r-c),m=Ie(a,o,d),g=Ie(i,n,u),p=Math.min(m+l,s)-m,h=Math.min(g+c,r)-g;return Is(m,g,p,h)})(c,a),f=h.width>0&&h.height>0,{maxWidth:b,maxHeight:v}=((e,t,o)=>{const n=y(t.bottom-o.y),s=y(o.bottom-t.y),r=((e,t,o,n)=>e.fold(t,t,n,n,t,n,o,o))(e,s,s,n),a=y(t.right-o.x),i=y(o.right-t.x),l=((e,t,o,n)=>e.fold(t,n,t,n,o,o,t,n))(e,i,i,a);return{maxWidth:l,maxHeight:r}})(e.direction,h,n),x={rect:h,maxHeight:v,maxWidth:b,direction:e.direction,placement:e.placement,classes:{on:s.classesOn,off:s.classesOff},layout:e.label,testY:l};return p||e.alwaysFit?uf.fit(x):uf.nofit(x,m,g,f)},gf=["top","bottom","right","left"],pf="data-alloy-transition-timer",hf=(e,t,o,n,s,a)=>{const i=((e,t,o)=>o.exists((o=>{const n=e.mode;return"all"===n||o[n]!==t[n]})))(n,s,a);if(i||((e,t)=>((e,t)=>X(t,(t=>rs(e,t))))(e,t.classes))(e,n)){mn(e,"position",o.position);const a=rf(t,e),l=sf(t,{...s,rect:a}),c=J(gf,(e=>l[e]));((e,t)=>{const o=e=>parseFloat(e).toFixed(3);return pe(t,((t,n)=>!((e,t,o=S)=>Ue(e,t,o).getOr(e.isNone()&&t.isNone()))(e[n].map(o),t.map(o)))).isSome()})(o,c)&&(pn(e,c),i&&((e,t)=>{as(e,t.classes),Ko(e,pf).each((t=>{clearTimeout(parseInt(t,10)),Qo(e,pf)})),((e,t)=>{const o=qe(),n=qe();let s;const a=t=>{const o=t.raw.pseudoElement??"";return yt(t.target,e)&&ot(o)&&I(gf,t.raw.propertyName)},i=r=>{if(m(r)||a(r)){o.clear(),n.clear();const a=r?.raw.type;(m(a)||a===Ta())&&(clearTimeout(s),Qo(e,pf),is(e,t.classes))}},l=Bo(e,Ea(),(t=>{a(t)&&(l.unbind(),o.set(Bo(e,Ta(),i)),n.set(Bo(e,_a(),i)))})),c=(e=>{const t=t=>{const o=hn(e,t).split(/\s*,\s*/);return P(o,tt)},o=e=>{if(r(e)&&/^[\d.]+/.test(e)){const t=parseFloat(e);return Ze(e,"ms")?t:1e3*t}return 0},n=t("transition-delay"),s=t("transition-duration");return W(s,((e,t,s)=>{const r=o(n[s])+o(t);return Math.max(e,r)}),0)})(e);window.requestAnimationFrame((()=>{s=setTimeout(i,c+17),qo(e,pf,s)}))})(e,t)})(e,n),wn(e))}else is(e,n.classes)},ff=(e,t,o)=>void 0===e[t]?o:e[t],bf=(e,t,o,n)=>{const s=((e,t,o,n)=>{yn(t,"max-height"),yn(t,"max-width");const s=(r=t,{width:Math.ceil(An(r)),height:On(r)});var r;return((e,t,o,n,s,r)=>{const a=n.width,i=n.height,l=(t,l,c,d,u)=>{const m=t(o,n,s,e,r),g=mf(m,a,i,r);return g.fold(y(g),((e,t,o,n)=>(u===n?o>d||t>c:!u&&n)?g:uf.nofit(l,c,d,u)))};return W(t,((e,t)=>{const o=C(l,t);return e.fold(y(e),o)}),uf.nofit({rect:o,maxHeight:n.height,maxWidth:n.width,direction:Ol(),placement:"southeast",classes:{on:[],off:[]},layout:"none",testY:o.y},-1,-1,!1)).fold(w,w)})(t,n.preference,e,s,o,n.bounds)})(e,t,o,n);return((e,t,o)=>{const n=sf(o.origin,t);o.transition.each((s=>{hf(e,o.origin,n,s,t,o.lastPlacement)})),ip(e,n)})(t,s,n),((e,t)=>{((e,t)=>{qo(e,tc,t)})(e,t.placement)})(t,s),((e,t)=>{const o=t.classes;is(e,o.off),as(e,o.on)})(t,s),((e,t,o)=>{(0,o.maxHeightFunction)(e,t.maxHeight)})(t,s,n),((e,t,o)=>{(0,o.maxWidthFunction)(e,t.maxWidth)})(t,s,n),{layout:s.layout,placement:s.placement}},vf=w,xf=()=>Jr("layouts",[Rr("onLtr"),Rr("onRtl"),$r("onBottomLtr"),$r("onBottomRtl")]),yf=(e,t,o,n,s,r,a)=>{const i=a.map(Ec).getOr(!1),l=t.layouts.map((t=>t.onLtr(e))),c=t.layouts.map((t=>t.onRtl(e))),d=i?t.layouts.bind((t=>t.onBottomLtr.map((t=>t(e))))).or(l).getOr(s):l.getOr(o),u=i?t.layouts.bind((t=>t.onBottomRtl.map((t=>t(e))))).or(c).getOr(r):c.getOr(n);return Ln(d,u)(e)};var wf=[Rr("hotspot"),$r("bubble"),Qr("overrides",{}),xf(),wi("placement",((e,t,o)=>{const n=t.hotspot,s=rf(o,n.element),r=yf(e.element,t,Zl(),ec(),Jl(),Ql(),A.some(t.hotspot.element));return A.some(vf({anchorBox:s,bubble:t.bubble.getOr(Sl()),overrides:t.overrides,layouts:r}))}))],Sf=[Rr("x"),Rr("y"),Qr("height",0),Qr("width",0),Qr("bubble",Sl()),Qr("overrides",{}),xf(),wi("placement",((e,t,o)=>{const n=lf(o,t.x,t.y),s=Is(n.left,n.top,t.width,t.height),r=yf(e.element,t,Yl(),Kl(),Yl(),Kl(),A.none());return A.some(vf({anchorBox:s,bubble:t.bubble,overrides:t.overrides,layouts:r}))}))];const Cf=xe([{screen:["point"]},{absolute:["point","scrollLeft","scrollTop"]}]),kf=e=>e.fold(w,((e,t,o)=>e.translate(-t,-o))),Of=e=>e.fold(w,w),_f=e=>W(e,((e,t)=>e.translate(t.left,t.top)),Dn(0,0)),Tf=e=>{const t=L(e,Of);return _f(t)},Ef=Cf.screen,Af=Cf.absolute,Mf=(e,t,o)=>{const n=lo(e.element),s=Rn(n),r=((e,t,o)=>{const n=mo(o.root).dom;return A.from(n.frameElement).map(ct).filter((t=>{const o=lo(t),n=lo(e.element);return yt(o,n)})).map(Fn)})(e,0,o).getOr(s);return Af(r,s.left,s.top)},Df=(e,t,o,n)=>{const s=Ef(Dn(e,t));return A.some(((e,t,o)=>({point:e,width:t,height:o}))(s,o,n))},Bf=(e,t,o,n,s)=>e.map((e=>{const r=[t,e.point],a=(i=()=>Tf(r),l=()=>Tf(r),c=()=>(e=>{const t=L(e,kf);return _f(t)})(r),n.fold(i,l,c));var i,l,c;const d=(p=a.left,h=a.top,f=e.width,b=e.height,{x:p,y:h,width:f,height:b}),u=o.showAbove?Jl():Zl(),m=o.showAbove?Ql():ec(),g=yf(s,o,u,m,u,m,A.none());var p,h,f,b;return vf({anchorBox:d,bubble:o.bubble.getOr(Sl()),overrides:o.overrides,layouts:g})}));var Ff=[Rr("node"),Rr("root"),$r("bubble"),xf(),Qr("overrides",{}),Qr("showAbove",!1),wi("placement",((e,t,o)=>{const n=Mf(e,0,t);return t.node.filter(an).bind((s=>{const r=s.dom.getBoundingClientRect(),a=Df(r.left,r.top,r.width,r.height),i=t.node.getOr(e.element);return Bf(a,n,t,o,i)}))}))];const If=(e,t)=>({element:e,offset:t}),Rf=(e,t)=>so(e)?If(e,t):((e,t)=>{const o=vo(e);if(0===o.length)return If(e,t);if(tzn.get(e))(e).length:vo(e).length;return If(e,t)}})(e,t),Nf=e=>void 0!==e.foffset,zf=(e,t)=>t.getSelection.getOrThunk((()=>()=>(e=>(e=>A.from(e.getSelection()))(e).filter((e=>e.rangeCount>0)).bind(ks))(e)))().map((e=>{if(Nf(e)){const t=Rf(e.start,e.soffset),o=Rf(e.finish,e.foffset);return Ss.range(t.element,t.offset,o.element,o.offset)}return e}));var Lf=[$r("getSelection"),Rr("root"),$r("bubble"),xf(),Qr("overrides",{}),Qr("showAbove",!1),wi("placement",((e,t,o)=>{const n=mo(t.root).dom,s=Mf(e,0,t),r=zf(n,t).bind((e=>{if(Nf(e)){const t=((e,t)=>(e=>{const t=e.getBoundingClientRect();return t.width>0||t.height>0?A.some(t).map(mt):A.none()})(ht(e,t)))(n,Ss.exactFromRange(e)).orThunk((()=>{const t=lt("\ufeff");Po(e.start,t);const o=Os(n,Ss.exact(t,0,t,1));return en(t),o}));return t.bind((e=>Df(e.left,e.top,e.width,e.height)))}{const t=le(e,(e=>e.dom.getBoundingClientRect())),o={left:Math.min(t.firstCell.left,t.lastCell.left),right:Math.max(t.firstCell.right,t.lastCell.right),top:Math.min(t.firstCell.top,t.lastCell.top),bottom:Math.max(t.firstCell.bottom,t.lastCell.bottom)};return Df(o.left,o.top,o.right-o.left,o.bottom-o.top)}})),a=zf(n,t).bind((e=>Nf(e)?no(e.start)?A.some(e.start):po(e.start):A.some(e.firstCell))).getOr(e.element);return Bf(r,s,t,o,a)}))];const Vf="link-layout",Hf=e=>e.x+e.width,Pf=(e,t)=>e.x-t.width,Uf=(e,t)=>e.y-t.height+e.height,Wf=e=>e.y,$f=(e,t,o)=>Cl(Hf(e),Wf(e),o.southeast(),Ol(),"southeast",Fl(e,{left:0,top:2}),Vf),Gf=(e,t,o)=>Cl(Pf(e,t),Wf(e),o.southwest(),_l(),"southwest",Fl(e,{right:1,top:2}),Vf),jf=(e,t,o)=>Cl(Hf(e),Uf(e,t),o.northeast(),Tl(),"northeast",Fl(e,{left:0,bottom:3}),Vf),qf=(e,t,o)=>Cl(Pf(e,t),Uf(e,t),o.northwest(),El(),"northwest",Fl(e,{right:1,bottom:3}),Vf),Xf=()=>[$f,Gf,jf,qf],Yf=()=>[Gf,$f,qf,jf];var Kf=[Rr("item"),xf(),Qr("overrides",{}),wi("placement",((e,t,o)=>{const n=rf(o,t.item.element),s=yf(e.element,t,Xf(),Yf(),Xf(),Yf(),A.none());return A.some(vf({anchorBox:n,bubble:Sl(),overrides:t.overrides,layouts:s}))}))],Jf=Mr("type",{selection:Lf,node:Ff,hotspot:wf,submenu:Kf,makeshift:Sf});const Qf=[Wr("classes",or),oa("mode","all",["all","layout","placement"])],Zf=[Qr("useFixed",T),$r("getBounds")],eb=[Nr("anchor",Jf),Jr("transition",Qf)],tb=(e,t,o,n,s,r)=>{const a=Er("placement.info",vr(eb),s),i=a.anchor,l=n.element,c=o.get(n.uid);Xm((()=>{mn(l,"position","fixed");const s=bn(l,"visibility");mn(l,"visibility","hidden");const d=t.useFixed()?(()=>{const e=document.documentElement;return df(0,0,e.clientWidth,e.clientHeight)})():(e=>{const t=Fn(e.element),o=e.element.dom.getBoundingClientRect();return cf(t.left,t.top,o.width,o.height)})(e);i.placement(e,i,d).each((e=>{const s=r.orThunk((()=>t.getBounds.map(_))),i=((e,t,o,n,s,r)=>((e,t,o,n,s,r,a,i)=>{const l=ff(a,"maxHeightFunction",Cc()),c=ff(a,"maxWidthFunction",b),d=e.anchorBox,u=e.origin,m={bounds:af(u,r),origin:u,preference:n,maxHeightFunction:l,maxWidthFunction:c,lastPlacement:s,transition:i};return bf(d,t,o,m)})(((e,t)=>((e,t)=>({anchorBox:e,origin:t}))(e,t))(t.anchorBox,e),n.element,t.bubble,t.layouts,s,o,t.overrides,r))(d,e,s,n,c,a.transition);o.set(n.uid,i)})),s.fold((()=>{yn(l,"visibility")}),(e=>{mn(l,"visibility",e)})),bn(l,"left").isNone()&&bn(l,"top").isNone()&&bn(l,"right").isNone()&&bn(l,"bottom").isNone()&&He(bn(l,"position"),"fixed")&&yn(l,"position")}),l)};var ob=Object.freeze({__proto__:null,position:(e,t,o,n,s)=>{const r=A.none();tb(e,t,o,n,s,r)},positionWithinBounds:tb,getMode:(e,t,o)=>t.useFixed()?"fixed":"absolute",reset:(e,t,o,n)=>{const s=n.element;V(["position","left","right","top","bottom"],(e=>yn(s,e))),(e=>{Qo(e,tc)})(s),o.clear(n.uid)}});const nb=id({fields:Zf,name:"positioning",active:tf,apis:ob,state:Object.freeze({__proto__:null,init:()=>{let e={};return Dc({readState:()=>e,clear:t=>{g(t)?delete e[t]:e={}},set:(t,o)=>{e[t]=o},get:t=>fe(e,t)})}})});var sb=Object.freeze({__proto__:null,events:e=>Hc([Wc(Ra(),((t,o)=>{const n=e.channels,s=re(n),r=o,a=((e,t)=>t.universal?e:P(e,(e=>I(t.channels,e))))(s,r);V(a,(e=>{const o=n[e],s=o.schema,a=Er("channel["+e+"] data\nReceiver: "+si(t.element),s,r.data);o.onReceive(t,a)}))}))])}),rb=[Nr("channels",Or(Ae.value,br([xi("onReceive"),Qr("schema",Zs())])))];const ab=id({fields:rb,name:"receiving",active:sb});var ib=Object.freeze({__proto__:null,events:(e,t)=>{const o=(o,n)=>{e.updateState.each((e=>{const s=e(o,n);t.set(s)})),e.renderComponents.each((s=>{const r=s(n,t.get());(e.reuseDom?Km:Ym)(o,r)}))};return Hc([Wc(Ra(),((t,n)=>{const s=n;if(!s.universal){const n=e.channel;I(s.channels,n)&&o(t,s.data)}})),Jc(((t,n)=>{e.initialData.each((e=>{o(t,e)}))}))])}}),lb=Object.freeze({__proto__:null,getState:(e,t,o)=>o}),cb=[Rr("channel"),$r("renderComponents"),$r("updateState"),$r("initialData"),na("reuseDom",!0)];const db=id({fields:cb,name:"reflecting",active:ib,apis:lb,state:Object.freeze({__proto__:null,init:()=>{const e=ye(A.none());return{readState:()=>e.get().getOr("none"),get:e.get,set:e.set,clear:()=>e.set(A.none())}}})}),ub=(e,t,o,n)=>{o.get().each((t=>{Hm(e)}));const s=t.getAttachPoint(e);Nm(s,e);const r=e.getSystem().build(n);return Nm(e,r),o.set(r),r},mb=(e,t,o,n)=>{const s=ub(e,t,o,n);return t.onOpen(e,s),s},gb=(e,t,o)=>{o.get().each((n=>{Hm(e),Vm(e),t.onClose(e,n),o.clear()}))},pb=(e,t,o)=>o.isOpen(),hb=(e,t,o)=>{const n=t.getAttachPoint(e);mn(e.element,"position",nb.getMode(n)),((e,t,o)=>{bn(e.element,t).fold((()=>{Qo(e.element,o)}),(t=>{qo(e.element,o,t)})),mn(e.element,t,"hidden")})(e,"visibility",t.cloakVisibilityAttr)},fb=(e,t,o)=>{(e=>R(["top","left","right","bottom"],(t=>bn(e,t).isSome())))(e.element)||yn(e.element,"position"),((e,t,o)=>{Ko(e.element,o).fold((()=>yn(e.element,t)),(o=>mn(e.element,t,o)))})(e,"visibility",t.cloakVisibilityAttr)};var bb=Object.freeze({__proto__:null,cloak:hb,decloak:fb,open:mb,openWhileCloaked:(e,t,o,n,s)=>{hb(e,t),mb(e,t,o,n),s(),fb(e,t)},close:gb,isOpen:pb,isPartOf:(e,t,o,n)=>pb(0,0,o)&&o.get().exists((o=>t.isPartOf(e,o,n))),getState:(e,t,o)=>o.get(),setContent:(e,t,o,n)=>o.get().map((()=>ub(e,t,o,n)))}),vb=Object.freeze({__proto__:null,events:(e,t)=>Hc([Wc(Ha(),((o,n)=>{gb(o,e,t)}))])}),xb=[bi("onOpen"),bi("onClose"),Rr("isPartOf"),Rr("getAttachPoint"),Qr("cloakVisibilityAttr","data-precloak-visibility")],yb=Object.freeze({__proto__:null,init:()=>{const e=Xe(),t=y("not-implemented");return Dc({readState:t,isOpen:e.isSet,clear:e.clear,set:e.set,get:e.get})}});const wb=id({fields:xb,name:"sandboxing",active:vb,apis:bb,state:yb}),Sb=(e,t)=>t.getAnimationRoot.fold((()=>e.element),(t=>t(e))),Cb=e=>e.dimension.property,kb=(e,t)=>e.dimension.getDimension(t),Ob=(e,t)=>{const o=Sb(e,t);is(o,[t.shrinkingClass,t.growingClass])},_b=(e,t)=>{ss(e.element,t.openClass),os(e.element,t.closedClass),mn(e.element,Cb(t),"0px"),wn(e.element)},Tb=(e,t)=>{ss(e.element,t.closedClass),os(e.element,t.openClass),yn(e.element,Cb(t))},Eb=(e,t,o,n)=>{o.setCollapsed(),mn(e.element,Cb(t),kb(t,e.element)),Ob(e,t),_b(e,t),t.onStartShrink(e),t.onShrunk(e)},Ab=(e,t,o,n)=>{const s=n.getOrThunk((()=>kb(t,e.element)));o.setCollapsed(),mn(e.element,Cb(t),s),wn(e.element);const r=Sb(e,t);ss(r,t.growingClass),os(r,t.shrinkingClass),_b(e,t),t.onStartShrink(e)},Mb=(e,t,o)=>{const n=kb(t,e.element);("0px"===n?Eb:Ab)(e,t,o,A.some(n))},Db=(e,t,o)=>{const n=Sb(e,t),s=rs(n,t.shrinkingClass),r=kb(t,e.element);Tb(e,t);const a=kb(t,e.element);(s?()=>{mn(e.element,Cb(t),r),wn(e.element)}:()=>{_b(e,t)})(),ss(n,t.shrinkingClass),os(n,t.growingClass),Tb(e,t),mn(e.element,Cb(t),a),o.setExpanded(),t.onStartGrow(e)},Bb=(e,t,o)=>{const n=Sb(e,t);return!0===rs(n,t.growingClass)},Fb=(e,t,o)=>{const n=Sb(e,t);return!0===rs(n,t.shrinkingClass)};var Ib=Object.freeze({__proto__:null,refresh:(e,t,o)=>{if(o.isExpanded()){yn(e.element,Cb(t));const o=kb(t,e.element);mn(e.element,Cb(t),o)}},grow:(e,t,o)=>{o.isExpanded()||Db(e,t,o)},shrink:(e,t,o)=>{o.isExpanded()&&Mb(e,t,o)},immediateShrink:(e,t,o)=>{o.isExpanded()&&Eb(e,t,o)},hasGrown:(e,t,o)=>o.isExpanded(),hasShrunk:(e,t,o)=>o.isCollapsed(),isGrowing:Bb,isShrinking:Fb,isTransitioning:(e,t,o)=>Bb(e,t)||Fb(e,t),toggleGrow:(e,t,o)=>{(o.isExpanded()?Mb:Db)(e,t,o)},disableTransitions:Ob,immediateGrow:(e,t,o)=>{o.isExpanded()||(Tb(e,t),mn(e.element,Cb(t),kb(t,e.element)),Ob(e,t),o.setExpanded(),t.onStartGrow(e),t.onGrown(e))}}),Rb=Object.freeze({__proto__:null,exhibit:(e,t,o)=>{const n=t.expanded;return td(n?{classes:[t.openClass],styles:{}}:{classes:[t.closedClass],styles:ia(t.dimension.property,"0px")})},events:(e,t)=>Hc([Kc(Ta(),((o,n)=>{n.event.raw.propertyName===e.dimension.property&&(Ob(o,e),t.isExpanded()&&yn(o.element,e.dimension.property),(t.isExpanded()?e.onGrown:e.onShrunk)(o))}))])}),Nb=[Rr("closedClass"),Rr("openClass"),Rr("shrinkingClass"),Rr("growingClass"),$r("getAnimationRoot"),bi("onShrunk"),bi("onStartShrink"),bi("onGrown"),bi("onStartGrow"),Qr("expanded",!1),Nr("dimension",Mr("property",{width:[wi("property","width"),wi("getDimension",(e=>En(e)+"px"))],height:[wi("property","height"),wi("getDimension",(e=>kn(e)+"px"))]}))];const zb=id({fields:Nb,name:"sliding",active:Rb,apis:Ib,state:Object.freeze({__proto__:null,init:e=>{const t=ye(e.expanded);return Dc({isExpanded:()=>!0===t.get(),isCollapsed:()=>!1===t.get(),setCollapsed:C(t.set,!1),setExpanded:C(t.set,!0),readState:()=>"expanded: "+t.get()})}})});var Lb=Object.freeze({__proto__:null,events:(e,t)=>{const o=e.stream.streams.setup(e,t);return Hc([Wc(e.event,o),Qc((()=>t.cancel()))].concat(e.cancelEvent.map((e=>[Wc(e,(()=>t.cancel()))])).getOr([])))}});const Vb=e=>{const t=ye(null);return Dc({readState:()=>({timer:null!==t.get()?"set":"unset"}),setTimer:e=>{t.set(e)},cancel:()=>{const e=t.get();null!==e&&e.cancel()}})};var Hb=Object.freeze({__proto__:null,throttle:Vb,init:e=>e.stream.streams.state(e)}),Pb=[Nr("stream",Mr("mode",{throttle:[Rr("delay"),Qr("stopEvent",!0),wi("streams",{setup:(e,t)=>{const o=e.stream,n=nt(e.onStream,o.delay);return t.setTimer(n),(e,t)=>{n.throttle(e,t),o.stopEvent&&t.stop()}},state:Vb})]})),Qr("event","input"),$r("cancelEvent"),xi("onStream")];const Ub=id({fields:Pb,name:"streaming",active:Lb,state:Hb});var Wb=Object.freeze({__proto__:null,exhibit:(e,t)=>td({attributes:la([{key:t.tabAttr,value:"true"}])})}),$b=[Qr("tabAttr","data-alloy-tabstop")];const Gb=id({fields:$b,name:"tabstopping",active:Wb}),jb=(e,t,o,n)=>{const s=o.get();o.set(n),((e,t,o)=>{t.toggleClass.each((t=>{o.get()?os(e.element,t):ss(e.element,t)}))})(e,t,o),((e,t,o)=>{const n=t.aria;n.update(e,n,o.get())})(e,t,o),s!==n&&t.onToggled(e,n)},qb=(e,t,o)=>{jb(e,t,o,!o.get())},Xb=(e,t,o)=>{jb(e,t,o,t.selected)};var Yb=Object.freeze({__proto__:null,onLoad:Xb,toggle:qb,isOn:(e,t,o)=>o.get(),on:(e,t,o)=>{jb(e,t,o,!0)},off:(e,t,o)=>{jb(e,t,o,!1)},set:jb}),Kb=Object.freeze({__proto__:null,exhibit:()=>td({}),events:(e,t)=>{const o=(n=e,s=t,r=qb,ed((e=>{r(e,n,s)})));var n,s,r;const a=od(e,t,Xb);return Hc(j([e.toggleOnExecute?[o]:[],[a]]))}});const Jb=(e,t,o)=>{qo(e.element,"aria-expanded",o)};var Qb=[Qr("selected",!1),$r("toggleClass"),Qr("toggleOnExecute",!0),bi("onToggled"),Zr("aria",{mode:"none"},Mr("mode",{pressed:[Qr("syncWithExpanded",!1),wi("update",((e,t,o)=>{qo(e.element,"aria-pressed",o),t.syncWithExpanded&&Jb(e,0,o)}))],checked:[wi("update",((e,t,o)=>{qo(e.element,"aria-checked",o)}))],expanded:[wi("update",Jb)],selected:[wi("update",((e,t,o)=>{qo(e.element,"aria-selected",o)}))],none:[wi("update",b)]}))];const Zb=id({fields:Qb,name:"toggling",active:Kb,apis:Yb,state:(ev=!1,{init:()=>{const e=ye(ev);return{get:()=>e.get(),set:t=>e.set(t),clear:()=>e.set(ev),readState:()=>e.get()}}})});var ev;const tv=Ne("tooltip.exclusive"),ov=Ne("tooltip.show"),nv=Ne("tooltip.hide"),sv=Ne("tooltip.immediateHide"),rv=Ne("tooltip.immediateShow"),av=(e,t,o)=>{e.getSystem().broadcastOn([tv],{})};var iv=Object.freeze({__proto__:null,hideAllExclusive:av,immediateOpenClose:(e,t,o,n)=>Ic(e,n?rv:sv),isEnabled:(e,t,o)=>o.isEnabled(),setComponents:(e,t,o,n)=>{o.getTooltip().each((e=>{e.getSystem().isConnected()&&ng.set(e,n)}))},setEnabled:(e,t,o,n)=>o.setEnabled(n)}),lv=Object.freeze({__proto__:null,events:(e,t)=>{const o=o=>{t.getTooltip().each((n=>{n.getSystem().isConnected()&&(Vm(n),e.onHide(o,n),t.clearTooltip())})),t.clearTimer()},n=o=>{if(!t.isShowing()&&t.isEnabled()){av(o);const n=e.lazySink(o).getOrDie(),s=o.getSystem().build({dom:e.tooltipDom,components:e.tooltipComponents,events:Hc("normal"===e.mode?[Wc(va(),(e=>{Ic(o,ov)})),Wc(fa(),(e=>{Ic(o,nv)}))]:[]),behaviours:rd([ng.config({})])});t.setTooltip(s),Nm(n,s),e.onShow(o,s),nb.position(n,s,{anchor:e.anchor(o)})}},s=o=>{t.getTooltip().each((t=>{const n=e.lazySink(o).getOrDie();nb.position(n,t,{anchor:e.anchor(o)})}))};return Hc(j([[Zc((t=>{e.onSetup(t)})),Wc(ov,(o=>{t.resetTimer((()=>{n(o)}),e.delayForShow())})),Wc(nv,(n=>{t.resetTimer((()=>{o(n)}),e.delayForHide())})),Wc(rv,(e=>{t.resetTimer((()=>{n(e)}),0)})),Wc(sv,(e=>{t.resetTimer((()=>{o(e)}),0)})),Wc(Ra(),((e,n)=>{const s=n;s.universal||(I(s.channels,tv)||I(s.channels,_d()))&&(s.data.closedTooltip&&t.isShowing()&&s.data.closedTooltip(),o(e))})),Qc((e=>{o(e)}))],(()=>{switch(e.mode){case"normal":return[Wc(xa(),(e=>{Ic(e,rv)})),Wc(Fa(),(e=>{Ic(e,sv)})),Wc(va(),(e=>{Ic(e,ov)})),Wc(fa(),(e=>{Ic(e,nv)}))];case"follow-highlight":return[Wc(oi(),((e,t)=>{Ic(e,ov)})),Wc(ni(),(e=>{Ic(e,nv)}))];case"children-normal":return[Wc(xa(),((o,n)=>{Ho(o.element).each((r=>{bt(n.event.target,"[data-mce-tooltip]")&&t.getTooltip().fold((()=>{Ic(o,rv)}),(n=>{t.isShowing()&&(e.onShow(o,n),s(o))}))}))})),Wc(Fa(),(e=>{Ho(e.element).fold((()=>{Ic(e,sv)}),b)})),Wc(va(),(o=>{Xn(o.element,"[data-mce-tooltip]:hover").each((n=>{t.getTooltip().fold((()=>{Ic(o,ov)}),(n=>{t.isShowing()&&(e.onShow(o,n),s(o))}))}))})),Wc(fa(),(e=>{Xn(e.element,"[data-mce-tooltip]:hover").fold((()=>{Ic(e,nv)}),b)}))];default:return[Wc(xa(),((o,n)=>{Ho(o.element).each((r=>{bt(n.event.target,"[data-mce-tooltip]")&&t.getTooltip().fold((()=>{Ic(o,rv)}),(n=>{t.isShowing()&&(e.onShow(o,n),s(o))}))}))})),Wc(Fa(),(e=>{Ho(e.element).fold((()=>{Ic(e,sv)}),b)}))]}})()]))}}),cv=[Rr("lazySink"),Rr("tooltipDom"),Qr("exclusive",!0),Qr("tooltipComponents",[]),sa("delayForShow",y(300)),sa("delayForHide",y(100)),sa("onSetup",b),oa("mode","normal",["normal","follow-highlight","children-keyboard-focus","children-normal"]),Qr("anchor",(e=>({type:"hotspot",hotspot:e,layouts:{onLtr:y([jl,Gl,Pl,Wl,Ul,$l]),onRtl:y([jl,Gl,Pl,Wl,Ul,$l])},bubble:wl(0,-2,{})}))),bi("onHide"),bi("onShow")],dv=Object.freeze({__proto__:null,init:()=>{const e=ye(!0),t=Xe(),o=Xe(),n=()=>{t.on(clearTimeout)},s=y("not-implemented");return Dc({getTooltip:o.get,isShowing:o.isSet,setTooltip:o.set,clearTooltip:o.clear,clearTimer:n,resetTimer:(e,o)=>{n(),t.set(setTimeout(e,o))},readState:s,isEnabled:()=>e.get(),setEnabled:t=>e.set(t)})}});const uv=id({fields:cv,name:"tooltipping",active:lv,state:dv,apis:iv}),mv=id({fields:[],name:"unselecting",active:Object.freeze({__proto__:null,events:()=>Hc([Pc(Aa(),E)]),exhibit:()=>td({styles:{"-webkit-user-select":"none","user-select":"none","-ms-user-select":"none","-moz-user-select":"-moz-none"},attributes:{unselectable:"on"}})})}),gv=e=>{const t=at(e),o=vo(t),n=(e=>{const t=void 0!==e.dom.attributes?e.dom.attributes:[];return W(t,((e,t)=>"class"===t.name?e:{...e,[t.name]:t.value}),{})})(t),s=(e=>Array.prototype.slice.call(e.dom.classList,0))(t),r=0===o.length?{}:{innerHtml:on(t)};return{tag:eo(t),classes:s,attributes:n,...r}},pv=e=>{const t=(e=>void 0!==e.uid)(e)&&ve(e,"uid")?e.uid:mg("memento");return{get:e=>e.getSystem().getByUid(t).getOrDie(),getOpt:e=>e.getSystem().getByUid(t).toOptional(),asSpec:()=>({...e,uid:t})}},hv=xl,fv=ol,bv=(e,t)=>{const o={stopBackspace:!0,...t},n=(e=>{const t=Xe(),o=ye(!1),n=_i((t=>{e.triggerEvent(Va(),t),o.set(!0)}),400),s=la([{key:da(),value:e=>(Ti(e).each((s=>{n.cancel();const r={x:s.clientX,y:s.clientY,target:e.target};n.schedule(e),o.set(!1),t.set(r)})),A.none())},{key:ua(),value:e=>(n.cancel(),Ti(e).each((e=>{t.on((o=>{((e,t)=>{const o=Math.abs(e.clientX-t.x),n=Math.abs(e.clientY-t.y);return o>5||n>5})(e,o)&&t.clear()}))})),A.none())},{key:ma(),value:s=>(n.cancel(),t.get().filter((e=>yt(e.target,s.target))).map((t=>o.get()?(s.prevent(),!1):e.triggerEvent(La(),s))))}]);return{fireIfReady:(e,t)=>fe(s,t).bind((t=>t(e)))}})(o),s=L(["touchstart","touchmove","touchend","touchcancel","gesturestart","mousedown","mouseup","mouseover","mousemove","mouseout","click"].concat(["selectstart","input","contextmenu","change","transitionend","transitioncancel","drag","dragstart","dragend","dragenter","dragleave","dragover","drop","keyup"]),(t=>Bo(e,t,(e=>{n.fireIfReady(e,t).each((t=>{t&&e.kill()})),o.triggerEvent(t,e)&&e.kill()})))),r=Xe(),a=Bo(e,"paste",(e=>{n.fireIfReady(e,"paste").each((t=>{t&&e.kill()})),o.triggerEvent("paste",e)&&e.kill(),r.set(setTimeout((()=>{o.triggerEvent(Ia(),e)}),0))})),i=Bo(e,"keydown",(e=>{o.triggerEvent("keydown",e)?e.kill():o.stopBackspace&&(e=>e.raw.which===bd[0]&&!I(["input","textarea"],eo(e.target))&&!ps(e.target,'[contenteditable="true"]'))(e)&&e.prevent()})),l=Bo(e,"focusin",(e=>{o.triggerEvent("focusin",e)&&e.kill()})),c=Xe(),d=Bo(e,"focusout",(e=>{o.triggerEvent("focusout",e)&&e.kill(),c.set(setTimeout((()=>{o.triggerEvent(Fa(),e)}),0))}));return{unbind:()=>{V(s,(e=>{e.unbind()})),i.unbind(),l.unbind(),d.unbind(),a.unbind(),r.on(clearTimeout),c.on(clearTimeout)}}},vv=(e,t)=>{const o=fe(e,"target").getOr(t);return ye(o)},xv=xe([{stopped:[]},{resume:["element"]},{complete:[]}]),yv=(e,t,o,n,s,r)=>{const a=e(t,n),i=((e,t)=>{const o=ye(!1),n=ye(!1);return{stop:()=>{o.set(!0)},cut:()=>{n.set(!0)},isStopped:o.get,isCut:n.get,event:e,setSource:t.set,getSource:t.get}})(o,s);return a.fold((()=>(r.logEventNoHandlers(t,n),xv.complete())),(e=>{const o=e.descHandler;return bg(o)(i),i.isStopped()?(r.logEventStopped(t,e.element,o.purpose),xv.stopped()):i.isCut()?(r.logEventCut(t,e.element,o.purpose),xv.complete()):go(e.element).fold((()=>(r.logNoParent(t,e.element,o.purpose),xv.complete())),(n=>(r.logEventResponse(t,e.element,o.purpose),xv.resume(n))))}))},wv=(e,t,o,n,s,r)=>yv(e,t,o,n,s,r).fold(E,(n=>wv(e,t,o,n,s,r)),T),Sv=(e,t,o,n,s)=>{const r=vv(o,n);return wv(e,t,o,n,r,s)},Cv=()=>{const e=(()=>{const e={};return{registerId:(t,o,n)=>{ie(n,((n,s)=>{const r=void 0!==e[s]?e[s]:{};r[o]=((e,t)=>({cHandler:C.apply(void 0,[e.handler].concat(t)),purpose:e.purpose}))(n,t),e[s]=r}))},unregisterId:t=>{ie(e,((e,o)=>{be(e,t)&&delete e[t]}))},filterByType:t=>fe(e,t).map((e=>ge(e,((e,t)=>((e,t)=>({id:e,descHandler:t}))(t,e))))).getOr([]),find:(t,o,n)=>fe(e,o).bind((e=>bs(n,(t=>((e,t)=>ug(t).bind((t=>fe(e,t))).map((e=>((e,t)=>({element:e,descHandler:t}))(t,e))))(e,t)),t)))}})(),t={},o=o=>{ug(o.element).each((o=>{delete t[o],e.unregisterId(o)}))};return{find:(t,o,n)=>e.find(t,o,n),filter:t=>e.filterByType(t),register:n=>{const s=(e=>{const t=e.element;return ug(t).getOrThunk((()=>((e,t)=>{const o=Ne(lg+"uid-");return dg(t,o),o})(0,e.element)))})(n);ve(t,s)&&((e,n)=>{const s=t[n];if(s!==e)throw new Error('The tagId "'+n+'" is already used by: '+si(s.element)+"\nCannot use it for: "+si(e.element)+"\nThe conflicting element is"+(an(s.element)?" ":" not ")+"already in the DOM");o(e)})(n,s);const r=[n];e.registerId(r,s,n.events),t[s]=n},unregister:o,getById:e=>fe(t,e)}},kv=e=>{const t=t=>go(e.element).fold(E,(e=>yt(t,e))),o=Cv(),n=(e,n)=>o.find(t,e,n),s=bv(e.element,{triggerEvent:(e,t)=>li(e,t.target,(o=>((e,t,o,n)=>Sv(e,t,o,o.target,n))(n,e,t,o)))}),r={debugInfo:y("real"),triggerEvent:(e,t,o)=>{li(e,t,(s=>Sv(n,e,o,t,s)))},triggerFocus:(e,t)=>{ug(e).fold((()=>{No(e)}),(o=>{li(Ba(),e,(o=>(((e,t,o,n,s)=>{const r=vv(o,n);yv(e,t,o,n,r,s)})(n,Ba(),{originator:t,kill:b,prevent:b,target:e},e,o),!1)))}))},triggerEscape:(e,t)=>{r.triggerEvent("keydown",e.element,t.event)},getByUid:e=>p(e),getByDom:e=>h(e),build:Fg,buildOrPatch:Bg,addToGui:e=>{l(e)},removeFromGui:e=>{c(e)},addToWorld:e=>{a(e)},removeFromWorld:e=>{i(e)},broadcast:e=>{u(e)},broadcastOn:(e,t)=>{m(e,t)},broadcastEvent:(e,t)=>{g(e,t)},isConnected:E},a=e=>{e.connect(r),so(e.element)||(o.register(e),V(e.components(),a),r.triggerEvent(Ua(),e.element,{target:e.element}))},i=e=>{so(e.element)||(V(e.components(),i),o.unregister(e)),e.disconnect()},l=t=>{Nm(e,t)},c=e=>{Vm(e)},d=e=>{const t=o.filter(Ra());V(t,(t=>{const o=t.descHandler;bg(o)(e)}))},u=e=>{d({universal:!0,data:e})},m=(e,t)=>{d({universal:!1,channels:e,data:t})},g=(e,t)=>((e,t)=>{const o=(e=>{const t=ye(!1);return{stop:()=>{t.set(!0)},cut:b,isStopped:t.get,isCut:T,event:e,setSource:O("Cannot set source of a broadcasted event"),getSource:O("Cannot get source of a broadcasted event")}})(t);return V(e,(e=>{const t=e.descHandler;bg(t)(o)})),o.isStopped()})(o.filter(e),t),p=e=>o.getById(e).fold((()=>Ae.error(new Error('Could not find component with uid: "'+e+'" in system.'))),Ae.value),h=e=>{const t=ug(e).getOr("not found");return p(t)};return a(e),{root:e,element:e.element,destroy:()=>{s.unbind(),en(e.element)},add:l,remove:c,getByUid:p,getByDom:h,addToWorld:a,removeFromWorld:i,broadcast:u,broadcastOn:m,broadcastEvent:g}},Ov=()=>{const e=(e,t)=>{t.stop(),Nc(e)};return[Wc(Oa(),e),Wc(La(),e),Xc(da()),Xc(pa())]},_v=e=>Hc(j([e.map((e=>ed(((t,o)=>{e(t),o.stop()})))).toArray(),Ov()])),Tv=ih({name:"Button",factory:e=>{const t=_v(e.action),o=e.dom.tag,n=t=>fe(e.dom,"attributes").bind((e=>fe(e,t)));return{uid:e.uid,dom:e.dom,components:e.components,events:t,behaviours:th(e.buttonBehaviours,[fd.config({}),Om.config({mode:"execution",useSpace:!0,useEnter:!0})]),domModification:{attributes:"button"===o?{type:n("type").getOr("button"),...n("role").map((e=>({role:e}))).getOr({})}:{role:e.role.getOr(n("role").getOr("button"))}},eventOrder:e.eventOrder}},configFields:[Qr("uid",void 0),Rr("dom"),Qr("components",[]),eh("buttonBehaviours",[fd,Om]),$r("action"),$r("role"),Qr("eventOrder",{})]}),Ev=y([Qr("shell",!1),Rr("makeItem"),Qr("setupItem",b),eh("listBehaviours",[ng])]),Av=Zi({name:"items",overrides:()=>({behaviours:rd([ng.config({})])})}),Mv=y([Av]),Dv=lh({name:y("CustomList")(),configFields:Ev(),partFields:Mv(),factory:(e,t,o,n)=>{const s=e.shell?{behaviours:[ng.config({})],components:[]}:{behaviours:[],components:t};return{uid:e.uid,dom:e.dom,components:s.components,behaviours:Zp(e.listBehaviours,s.behaviours),apis:{setItems:(t,o)=>{var n;(n=t,e.shell?A.some(n):ul(n,e,"items")).fold((()=>{throw console.error("Custom List was defined to not be a shell, but no item container was specified in components"),new Error("Custom List was defined to not be a shell, but no item container was specified in components")}),(n=>{const s=ng.contents(n),r=o.length,a=r-s.length,i=a>0?N(a,(()=>e.makeItem())):[],l=s.slice(r);V(l,(e=>ng.remove(n,e))),V(i,(e=>ng.append(n,e)));const c=ng.contents(n);V(c,((n,s)=>{e.setupItem(t,n,o[s],s)}))}))}}}},apis:{setItems:(e,t,o)=>{e.setItems(t,o)}}}),Bv="aria-controls",Fv=()=>{const e=Ne(Bv);return{id:e,link:t=>{qo(t,Bv,e)},unlink:e=>{Qo(e,Bv)}}},Iv=(e,t)=>gs(t,(t=>yt(t,e.element)),T)||((e,t)=>(e=>Wn(e,(e=>{if(!no(e))return!1;const t=Yo(e,"id");return void 0!==t&&t.indexOf(Bv)>-1})).bind((e=>{const t=Yo(e,"id"),o=ko(e);return Xn(o,`[${Bv}="${t}"]`)})))(t).exists((t=>Iv(e,t))))(e,t),Rv="alloy.item-hover",Nv="alloy.item-focus",zv="alloy.item-toggled",Lv=e=>{(Ho(e.element).isNone()||fd.isFocused(e))&&(fd.isFocused(e)||fd.focus(e),Rc(e,Rv,{item:e}))},Vv=e=>{Rc(e,Nv,{item:e})},Hv=y(Rv),Pv=y(Nv),Uv=y(zv),Wv=e=>e.role.fold((()=>e.toggling.map((e=>e.exclusive?"menuitemradio":"menuitemcheckbox")).getOr("menuitem")),w);var $v=[Rr("data"),Rr("components"),Rr("dom"),Qr("hasSubmenu",!1),$r("toggling"),$r("role"),eh("itemBehaviours",[Zb,fd,Om,Zh]),Qr("ignoreFocus",!1),Qr("domModification",{}),wi("builder",(e=>({dom:e.dom,domModification:{...e.domModification,attributes:{role:Wv(e),...e.domModification.attributes,"aria-haspopup":e.hasSubmenu,...e.hasSubmenu?{"aria-expanded":!1}:{}}},behaviours:th(e.itemBehaviours,[e.toggling.fold(Zb.revoke,(t=>Zb.config(((e,t)=>({aria:{mode:t?"selected":"checked"},...me(e,((e,t)=>"exclusive"!==t)),onToggled:(t,o)=>{p(e.onToggled)&&e.onToggled(t,o),((e,t)=>{Rc(e,zv,{item:e,state:t})})(t,o)}}))(t,e.role.exists((e=>"option"===e)))))),fd.config({ignore:e.ignoreFocus,stopMousedown:e.ignoreFocus,onFocus:e=>{Vv(e)}}),Om.config({mode:"execution"}),Zh.config({store:{mode:"memory",initialValue:e.data}}),ud("item-type-events",[...Ov(),Wc(va(),Lv),Wc(za(),fd.focus)])]),components:e.components,eventOrder:e.eventOrder}))),Qr("eventOrder",{})],Gv=[Rr("dom"),Rr("components"),wi("builder",(e=>({dom:e.dom,components:e.components,events:Hc([Yc(za())])})))];const jv=y("item-widget"),qv=y([Ji({name:"widget",overrides:e=>({behaviours:rd([Zh.config({store:{mode:"manual",getValue:t=>e.data,setValue:b}})])})})]),Xv=[Rr("uid"),Rr("data"),Rr("components"),Rr("dom"),Qr("autofocus",!1),Qr("ignoreFocus",!1),eh("widgetBehaviours",[Zh,fd,Om]),Qr("domModification",{}),vl(qv()),wi("builder",(e=>{const t=cl(jv(),e,qv()),o=dl(jv(),e,t.internals()),n=t=>ul(t,e,"widget").map((e=>(Om.focusIn(e),e))),s=(t,o)=>nu(o.event.target)?A.none():e.autofocus?(o.setSource(t.element),A.none()):A.none();return{dom:e.dom,components:o,domModification:e.domModification,events:Hc([ed(((e,t)=>{n(e).each((e=>{t.stop()}))})),Wc(va(),Lv),Wc(za(),((t,o)=>{e.autofocus?n(t):fd.focus(t)}))]),behaviours:th(e.widgetBehaviours,[Zh.config({store:{mode:"memory",initialValue:e.data}}),fd.config({ignore:e.ignoreFocus,onFocus:e=>{Vv(e)}}),Om.config({mode:"special",focusIn:e.autofocus?e=>{n(e)}:dd(),onLeft:s,onRight:s,onEscape:(t,o)=>fd.isFocused(t)||e.autofocus?e.autofocus?(o.setSource(t.element),A.none()):A.none():(fd.focus(t),A.some(!0))})])}}))],Yv=Mr("type",{widget:Xv,item:$v,separator:Gv}),Kv=y([el({factory:{sketch:e=>{const t=Er("menu.spec item",Yv,e);return t.builder(t)}},name:"items",unit:"item",defaults:(e,t)=>be(t,"uid")?t:{...t,uid:mg("item")},overrides:(e,t)=>({type:t.type,ignoreFocus:e.fakeFocus,domModification:{classes:[e.markers.item]}})})]),Jv=y([qr("role"),Rr("value"),Rr("items"),Rr("dom"),Rr("components"),Qr("eventOrder",{}),Jp("menuBehaviours",[Yd,Zh,Pg,Om]),Zr("movement",{mode:"menu",moveOnTab:!0},Mr("mode",{grid:[Ci(),wi("config",((e,t)=>({mode:"flatgrid",selector:"."+e.markers.item,initSize:{numColumns:t.initSize.numColumns,numRows:t.initSize.numRows},focusManager:e.focusManager})))],matrix:[wi("config",((e,t)=>({mode:"matrix",selectors:{row:t.rowSelector,cell:"."+e.markers.item},previousSelector:t.previousSelector,focusManager:e.focusManager}))),Rr("rowSelector"),Qr("previousSelector",A.none)],menu:[Qr("moveOnTab",!0),wi("config",((e,t)=>({mode:"menu",selector:"."+e.markers.item,moveOnTab:t.moveOnTab,focusManager:e.focusManager})))]})),Nr("markers",mi()),Qr("fakeFocus",!1),Qr("focusManager",Jd()),bi("onHighlight"),bi("onDehighlight"),Qr("showMenuRole",!0)]),Qv=y("alloy.menu-focus"),Zv=lh({name:"Menu",configFields:Jv(),partFields:Kv(),factory:(e,t,o,n)=>({uid:e.uid,dom:e.dom,markers:e.markers,behaviours:Zp(e.menuBehaviours,[Yd.config({highlightClass:e.markers.selectedItem,itemClass:e.markers.item,onHighlight:e.onHighlight,onDehighlight:e.onDehighlight}),Zh.config({store:{mode:"memory",initialValue:e.value}}),Pg.config({find:A.some}),Om.config(e.movement.config(e,e.movement))]),events:Hc([Wc(Pv(),((e,t)=>{const o=t.event;e.getSystem().getByDom(o.target).each((o=>{Yd.highlight(e,o),t.stop(),Rc(e,Qv(),{menu:e,item:o})}))})),Wc(Hv(),((e,t)=>{const o=t.event.item;Yd.highlight(e,o)})),Wc(Uv(),((e,t)=>{const{item:o,state:n}=t.event;n&&"menuitemradio"===Yo(o.element,"role")&&((e,t)=>{const o=ms(e.element,'[role="menuitemradio"][aria-checked="true"]');V(o,(o=>{yt(o,t.element)||e.getSystem().getByDom(o).each((e=>{Zb.off(e)}))}))})(e,o)}))]),components:t,eventOrder:e.eventOrder,...e.showMenuRole?{domModification:{attributes:{role:e.role.getOr("menu")}}}:{}})}),ex=(e,t,o,n)=>fe(o,n).bind((n=>fe(e,n).bind((n=>{const s=ex(e,t,o,n);return A.some([n].concat(s))})))).getOr([]),tx=e=>"prepared"===e.type?A.some(e.menu):A.none(),ox=()=>{const e=ye({}),t=ye({}),o=ye({}),n=Xe(),s=ye({}),r=e=>a(e).bind(tx),a=e=>fe(t.get(),e),i=t=>fe(e.get(),t);return{setMenuBuilt:(e,o)=>{t.set({...t.get(),[e]:{type:"prepared",menu:o}})},setContents:(r,a,i,l)=>{n.set(r),e.set(i),t.set(a),s.set(l);const c=((e,t)=>{const o={};ie(e,((e,t)=>{V(e,(e=>{o[e]=t}))}));const n=t,s=ce(t,((e,t)=>({k:e,v:t}))),r=le(s,((e,t)=>[t].concat(ex(o,n,s,t))));return le(o,(e=>fe(r,e).getOr([e])))})(l,i);o.set(c)},expand:t=>fe(e.get(),t).map((e=>{const n=fe(o.get(),t).getOr([]);return[e].concat(n)})),refresh:e=>fe(o.get(),e),collapse:e=>fe(o.get(),e).bind((e=>e.length>1?A.some(e.slice(1)):A.none())),lookupMenu:a,lookupItem:i,otherMenus:e=>{const t=s.get();return K(re(t),e)},getPrimary:()=>n.get().bind(r),getMenus:()=>t.get(),clear:()=>{e.set({}),t.set({}),o.set({}),n.clear()},isClear:()=>n.get().isNone(),getTriggeringPath:(t,s)=>{const a=P(i(t).toArray(),(e=>r(e).isSome()));return fe(o.get(),t).bind((t=>{const o=Y(a.concat(t));return(e=>{const t=[];for(let o=0;o((t,o,n)=>r(t).bind((s=>(t=>pe(e.get(),((e,o)=>e===t)))(t).bind((e=>o(e).map((e=>({triggeredMenu:s,triggeringItem:e,triggeringPath:n}))))))))(t,s,o.slice(0,a+1)).fold((()=>He(n.get(),t)?[]:[A.none()]),(e=>[A.some(e)])))))}))}}},nx=tx,sx=Ne("tiered-menu-item-highlight"),rx=Ne("tiered-menu-item-dehighlight"),ax=y("collapse-item"),ix=ih({name:"TieredMenu",configFields:[yi("onExecute"),yi("onEscape"),xi("onOpenMenu"),xi("onOpenSubmenu"),bi("onRepositionMenu"),bi("onCollapseMenu"),Qr("highlightOnOpen",Ac.HighlightMenuAndItem),Pr("data",[Rr("primary"),Rr("menus"),Rr("expansions")]),Qr("fakeFocus",!1),bi("onHighlightItem"),bi("onDehighlightItem"),bi("onHover"),pi(),Rr("dom"),Qr("navigateOnHover",!0),Qr("stayInDom",!1),Jp("tmenuBehaviours",[Om,Yd,Pg,ng]),Qr("eventOrder",{})],apis:{collapseMenu:(e,t)=>{e.collapseMenu(t)},highlightPrimary:(e,t)=>{e.highlightPrimary(t)},repositionMenus:(e,t)=>{e.repositionMenus(t)}},factory:(e,t)=>{const o=Xe(),n=ox(),s=e=>Zh.getValue(e).value,r=t=>le(e.data.menus,((e,t)=>q(e.items,(e=>"separator"===e.type?[]:[e.data.value])))),a=Yd.highlight,i=(t,o)=>{a(t,o),Yd.getHighlighted(o).orThunk((()=>Yd.getFirst(o))).each((n=>{e.fakeFocus?Yd.highlight(o,n):zc(t,n.element,za())}))},l=(e,t)=>Pe(L(t,(t=>e.lookupMenu(t).bind((e=>"prepared"===e.type?A.some(e.menu):A.none()))))),c=(t,o,n)=>{const s=l(o,o.otherMenus(n));V(s,(o=>{is(o.element,[e.markers.backgroundMenu]),e.stayInDom||ng.remove(t,o)}))},d=(t,n)=>{const r=(t=>o.get().getOrThunk((()=>{const n={},r=ms(t.element,`.${e.markers.item}`),a=P(r,(e=>"true"===Yo(e,"aria-haspopup")));return V(a,(e=>{t.getSystem().getByDom(e).each((e=>{const t=s(e);n[t]=e}))})),o.set(n),n})))(t);ie(r,((e,t)=>{const o=I(n,t);qo(e.element,"aria-expanded",o)}))},u=(t,o,n)=>A.from(n[0]).bind((s=>o.lookupMenu(s).bind((s=>{if("notbuilt"===s.type)return A.none();{const r=s.menu,a=l(o,n.slice(1));return V(a,(t=>{os(t.element,e.markers.backgroundMenu)})),an(r.element)||ng.append(t,Ig(r)),is(r.element,[e.markers.backgroundMenu]),i(t,r),c(t,o,n),A.some(r)}}))));let m;!function(e){e[e.HighlightSubmenu=0]="HighlightSubmenu",e[e.HighlightParent=1]="HighlightParent"}(m||(m={}));const g=(t,o,r=m.HighlightSubmenu)=>{if(o.hasConfigured(rp)&&rp.isDisabled(o))return A.some(o);{const a=s(o);return n.expand(a).bind((s=>(d(t,s),A.from(s[0]).bind((a=>n.lookupMenu(a).bind((i=>{const l=((e,t,o)=>{if("notbuilt"===o.type){const s=e.getSystem().build(o.nbMenu());return n.setMenuBuilt(t,s),s}return o.menu})(t,a,i);return an(l.element)||ng.append(t,Ig(l)),e.onOpenSubmenu(t,o,l,Y(s)),r===m.HighlightSubmenu?(Yd.highlightFirst(l),u(t,n,s)):(Yd.dehighlightAll(l),A.some(o))})))))))}},p=(t,o)=>{const r=s(o);return n.collapse(r).bind((s=>(d(t,s),u(t,n,s).map((n=>(e.onCollapseMenu(t,o,n),n))))))},h=t=>(o,n)=>Yn(n.getSource(),`.${e.markers.item}`).bind((e=>o.getSystem().getByDom(e).toOptional().bind((e=>t(o,e).map(E))))),f=Hc([Wc(Qv(),((e,t)=>{const o=t.event.item;n.lookupItem(s(o)).each((()=>{const o=t.event.menu;Yd.highlight(e,o);const r=s(t.event.item);n.refresh(r).each((t=>c(e,n,t)))}))})),ed(((t,o)=>{const n=o.event.target;t.getSystem().getByDom(n).each((o=>{0===s(o).indexOf("collapse-item")&&p(t,o),g(t,o,m.HighlightSubmenu).fold((()=>{e.onExecute(t,o)}),b)}))})),Jc(((t,o)=>{(t=>{const o=((t,o,n)=>le(n,((n,s)=>{const r=()=>Zv.sketch({...n,value:s,markers:e.markers,fakeFocus:e.fakeFocus,onHighlight:(e,t)=>{Rc(e,sx,{menuComp:e,itemComp:t})},onDehighlight:(e,t)=>{Rc(e,rx,{menuComp:e,itemComp:t})},focusManager:e.fakeFocus?Qd():Jd()});return s===o?{type:"prepared",menu:t.getSystem().build(r())}:{type:"notbuilt",nbMenu:r}})))(t,e.data.primary,e.data.menus),s=r();return n.setContents(e.data.primary,o,e.data.expansions,s),n.getPrimary()})(t).each((o=>{ng.append(t,Ig(o)),e.onOpenMenu(t,o),e.highlightOnOpen===Ac.HighlightMenuAndItem?i(t,o):e.highlightOnOpen===Ac.HighlightJustMenu&&a(t,o)}))})),Wc(sx,((t,o)=>{e.onHighlightItem(t,o.event.menuComp,o.event.itemComp)})),Wc(rx,((t,o)=>{e.onDehighlightItem(t,o.event.menuComp,o.event.itemComp)})),...e.navigateOnHover?[Wc(Hv(),((t,o)=>{const r=o.event.item;((e,t)=>{const o=s(t);n.refresh(o).bind((t=>(d(e,t),u(e,n,t))))})(t,r),g(t,r,m.HighlightParent),e.onHover(t,r)}))]:[]]),v=e=>Yd.getHighlighted(e).bind(Yd.getHighlighted),x={collapseMenu:e=>{v(e).each((t=>{p(e,t)}))},highlightPrimary:e=>{n.getPrimary().each((t=>{i(e,t)}))},repositionMenus:t=>{const o=n.getPrimary().bind((e=>v(t).bind((e=>{const t=s(e),o=he(n.getMenus()),r=Pe(L(o,nx));return n.getTriggeringPath(t,(e=>((e,t,o)=>se(t,(e=>{if(!e.getSystem().isConnected())return A.none();const t=Yd.getCandidates(e);return $(t,(e=>s(e)===o))})))(0,r,e)))})).map((t=>({primary:e,triggeringPath:t})))));o.fold((()=>{(e=>A.from(e.components()[0]).filter((e=>"menu"===Yo(e.element,"role"))))(t).each((o=>{e.onRepositionMenu(t,o,[])}))}),(({primary:o,triggeringPath:n})=>{e.onRepositionMenu(t,o,n)}))}};return{uid:e.uid,dom:e.dom,markers:e.markers,behaviours:Zp(e.tmenuBehaviours,[Om.config({mode:"special",onRight:h(((e,t)=>nu(t.element)?A.none():g(e,t,m.HighlightSubmenu))),onLeft:h(((e,t)=>nu(t.element)?A.none():p(e,t))),onEscape:h(((t,o)=>p(t,o).orThunk((()=>e.onEscape(t,o).map((()=>t)))))),focusIn:(e,t)=>{n.getPrimary().each((t=>{zc(e,t.element,za())}))}}),Yd.config({highlightClass:e.markers.selectedMenu,itemClass:e.markers.menu}),Pg.config({find:e=>Yd.getHighlighted(e)}),ng.config({})]),eventOrder:e.eventOrder,apis:x,events:f}},extraApis:{tieredData:(e,t,o)=>({primary:e,menus:t,expansions:o}),singleData:(e,t)=>({primary:e,menus:ia(e,t),expansions:{}}),collapseItem:e=>({value:Ne(ax()),meta:{text:e}})}}),lx=y("sink"),cx=y(Zi({name:lx(),overrides:y({dom:{tag:"div"},behaviours:rd([nb.config({useFixed:E})]),events:Hc([Xc(wa()),Xc(pa()),Xc(Oa())])})})),dx=br([Qr("isExtraPart",T),Jr("fireEventInstead",[Qr("event",Ya())])]),ux=e=>{const t=Er("Dismissal",dx,e);return{[Td()]:{schema:br([Rr("target")]),onReceive:(e,o)=>{wb.isOpen(e)&&(wb.isPartOf(e,o.target)||t.isExtraPart(e,o.target)||t.fireEventInstead.fold((()=>wb.close(e)),(t=>Ic(e,t.event))))}}}},mx=br([Jr("fireEventInstead",[Qr("event",Ka())]),Hr("doReposition")]),gx=e=>{const t=Er("Reposition",mx,e);return{[Ed()]:{onReceive:e=>{wb.isOpen(e)&&t.fireEventInstead.fold((()=>t.doReposition(e)),(t=>Ic(e,t.event)))}}}},px=(e,t)=>{const o=e.getHotspot(t).getOr(t),n="hotspot",s=e.getAnchorOverrides();return e.layouts.fold((()=>({type:n,hotspot:o,overrides:s})),(e=>({type:n,hotspot:o,overrides:s,layouts:e})))},hx=(e,t,o,n,s,r,a)=>{const i=((e,t,o,n,s,r,a)=>{const i=((e,t,o)=>(0,e.fetch)(o).map(t))(e,t,n),l=vx(n,e);return i.map((t=>t.bind((t=>{const i=t.menus[t.primary];return A.from(i).each((t=>{e.listRole.each((e=>{t.role=e}))})),A.from(ix.sketch({...r.menu(),uid:mg(""),data:t,highlightOnOpen:a,onOpenMenu:(e,t)=>{const n=l().getOrDie();nb.position(n,t,{anchor:o}),wb.decloak(s)},onOpenSubmenu:(e,t,o)=>{const n=l().getOrDie();nb.position(n,o,{anchor:{type:"submenu",item:t}}),wb.decloak(s)},onRepositionMenu:(e,t,n)=>{const s=l().getOrDie();nb.position(s,t,{anchor:o}),V(n,(e=>{nb.position(s,e.triggeredMenu,{anchor:{type:"submenu",item:e.triggeringItem}})}))},onEscape:()=>(fd.focus(n),wb.close(s),A.some(!0))}))}))))})(e,t,px(e,o),o,n,s,a);return i.map((e=>(e.fold((()=>{wb.isOpen(n)&&wb.close(n)}),(e=>{wb.cloak(n),wb.open(n,e),r(n)})),n)))},fx=(e,t,o,n,s,r,a)=>(wb.close(n),_e(n)),bx=(e,t,o,n,s,r)=>{const a=Gg.getCoupled(o,"sandbox");return(wb.isOpen(a)?fx:hx)(e,t,o,a,n,s,r)},vx=(e,t)=>e.getSystem().getByUid(t.uid+"-"+lx()).map((e=>()=>Ae.value(e))).getOrThunk((()=>t.lazySink.fold((()=>()=>Ae.error(new Error("No internal sink is specified, nor could an external sink be found"))),(t=>()=>t(e))))),xx=e=>{wb.getState(e).each((e=>{ix.repositionMenus(e)}))},yx=(e,t,o)=>{const n=Fv(),s=vx(t,e);return{dom:{tag:"div",classes:e.sandboxClasses,attributes:{id:n.id}},behaviours:th(e.sandboxBehaviours,[Zh.config({store:{mode:"memory",initialValue:t}}),wb.config({onOpen:(s,r)=>{const a=px(e,t);n.link(t.element),e.matchWidth&&((e,t,o)=>{const n=Pg.getCurrent(t).getOr(t),s=En(e.element);o?mn(n.element,"min-width",s+"px"):((e,t)=>{Tn.set(e,t)})(n.element,s)})(a.hotspot,r,e.useMinWidth),e.onOpen(a,s,r),void 0!==o&&void 0!==o.onOpen&&o.onOpen(s,r)},onClose:(e,r)=>{n.unlink(t.element),s().getOr(r).element.dom.dispatchEvent(new window.FocusEvent("focusout")),void 0!==o&&void 0!==o.onClose&&o.onClose(e,r)},isPartOf:(e,o,n)=>Iv(o,n)||Iv(t,n),getAttachPoint:()=>s().getOrDie()}),Pg.config({find:e=>wb.getState(e).bind((e=>Pg.getCurrent(e)))}),ab.config({channels:{...ux({isExtraPart:T}),...gx({doReposition:xx})}})])}},wx=()=>[Qr("sandboxClasses",[]),eh("sandboxBehaviours",[Pg,ab,wb,Zh])],Sx=y([Rr("dom"),Rr("fetch"),bi("onOpen"),vi("onExecute"),Qr("getHotspot",A.some),Qr("getAnchorOverrides",y({})),xf(),Jp("dropdownBehaviours",[Zb,Gg,Om,fd]),Rr("toggleClass"),Qr("eventOrder",{}),$r("lazySink"),Qr("matchWidth",!1),Qr("useMinWidth",!1),$r("role"),$r("listRole")].concat(wx())),Cx=y([Qi({schema:[pi(),Qr("fakeFocus",!1)],name:"menu",defaults:e=>({onExecute:e.onExecute})}),cx()]),kx=lh({name:"Dropdown",configFields:Sx(),partFields:Cx(),factory:(e,t,o,n)=>{const s=e=>{wb.getState(e).each((e=>{ix.highlightPrimary(e)}))},r=(t,o,s)=>bx(e,w,t,n,o,s),a={expand:e=>{Zb.isOn(e)||r(e,b,Ac.HighlightNone).get(b)},open:e=>{Zb.isOn(e)||r(e,b,Ac.HighlightMenuAndItem).get(b)},refetch:t=>Gg.getExistingCoupled(t,"sandbox").fold((()=>r(t,b,Ac.HighlightMenuAndItem).map(b)),(o=>hx(e,w,t,o,n,b,Ac.HighlightMenuAndItem).map(b))),isOpen:Zb.isOn,close:e=>{Zb.isOn(e)&&r(e,b,Ac.HighlightMenuAndItem).get(b)},repositionMenus:e=>{Zb.isOn(e)&&(e=>{const t=Gg.getCoupled(e,"sandbox");xx(t)})(e)}},i=(e,t)=>(Nc(e),A.some(!0));return{uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.dropdownBehaviours,[Zb.config({toggleClass:e.toggleClass,aria:{mode:"expanded"}}),Gg.config({others:{sandbox:t=>yx(e,t,{onOpen:()=>Zb.on(t),onClose:()=>Zb.off(t)})}}),Om.config({mode:"special",onSpace:i,onEnter:i,onDown:(e,t)=>{if(kx.isOpen(e)){const t=Gg.getCoupled(e,"sandbox");s(t)}else kx.open(e);return A.some(!0)},onEscape:(e,t)=>kx.isOpen(e)?(kx.close(e),A.some(!0)):A.none()}),fd.config({})]),events:_v(A.some((e=>{r(e,s,Ac.HighlightMenuAndItem).get(b)}))),eventOrder:{...e.eventOrder,[Na()]:["disabling","toggling","alloy.base.behaviour"]},apis:a,domModification:{attributes:{"aria-haspopup":e.listRole.getOr("true"),...e.role.fold((()=>({})),(e=>({role:e}))),..."button"===e.dom.tag?{type:fe(e.dom,"attributes").bind((e=>fe(e,"type"))).getOr("button")}:{}}}}},apis:{open:(e,t)=>e.open(t),refetch:(e,t)=>e.refetch(t),expand:(e,t)=>e.expand(t),close:(e,t)=>e.close(t),isOpen:(e,t)=>e.isOpen(t),repositionMenus:(e,t)=>e.repositionMenus(t)}}),Ox="form",_x=[Jp("formBehaviours",[Zh])],Tx=e=>"",Ex=(e,t)=>({uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.formBehaviours,[Zh.config({store:{mode:"manual",getValue:t=>{const o=pl(t,e);return le(o,((e,t)=>e().bind((e=>{return o=Pg.getCurrent(e),n=new Error(`Cannot find a current component to extract the value from for form part '${t}': `+si(e.element)),o.fold((()=>Ae.error(n)),Ae.value);var o,n})).map(Zh.getValue)))},setValue:(t,o)=>{ie(o,((o,n)=>{ul(t,e,n).each((e=>{Pg.getCurrent(e).each((e=>{Zh.setValue(e,o)}))}))}))}}})]),apis:{getField:(t,o)=>ul(t,e,o).bind(Pg.getCurrent)}}),Ax={getField:Am(((e,t,o)=>e.getField(t,o))),sketch:e=>{const t=(()=>{const e=[];return{field:(t,o)=>(e.push(t),al(Ox,Tx(t),o)),record:y(e)}})(),o=e(t),n=t.record(),s=L(n,(e=>Ji({name:e,pname:Tx(e)})));return nh(Ox,_x,s,Ex,o)}},Mx=y([Rr("dom"),Qr("shell",!0),Jp("toolbarBehaviours",[ng])]),Dx=y([Zi({name:"groups",overrides:()=>({behaviours:rd([ng.config({})])})})]),Bx=lh({name:"Toolbar",configFields:Mx(),partFields:Dx(),factory:(e,t,o,n)=>{const s=e.shell?{behaviours:[ng.config({})],components:[]}:{behaviours:[],components:t};return{uid:e.uid,dom:e.dom,components:s.components,behaviours:Zp(e.toolbarBehaviours,s.behaviours),apis:{setGroups:(t,o)=>{var n;(n=t,e.shell?A.some(n):ul(n,e,"groups")).fold((()=>{throw console.error("Toolbar was defined to not be a shell, but no groups container was specified in components"),new Error("Toolbar was defined to not be a shell, but no groups container was specified in components")}),(e=>{ng.set(e,o)}))},refresh:b},domModification:{attributes:{role:"group"}}}},apis:{setGroups:(e,t,o)=>{e.setGroups(t,o)}}}),Fx=y([hi(["toggledClass"]),Rr("lazySink"),Hr("fetch"),Yr("getBounds"),Jr("fireDismissalEventInstead",[Qr("event",Ya())]),xf(),bi("onToggled")]),Ix=y([Qi({name:"button",overrides:e=>({dom:{attributes:{"aria-haspopup":"true"}},buttonBehaviours:rd([Zb.config({toggleClass:e.markers.toggledClass,aria:{mode:"expanded"},toggleOnExecute:!1,onToggled:e.onToggled})])})}),Qi({factory:Bx,schema:Mx(),name:"toolbar",overrides:e=>({toolbarBehaviours:rd([Om.config({mode:"cyclic",onEscape:t=>(ul(t,e,"button").each(fd.focus),A.none())})])})})]),Rx=Xe(),Nx=(e,t)=>{const o=Gg.getCoupled(e,"toolbarSandbox");wb.isOpen(o)?wb.close(o):wb.open(o,t.toolbar())},zx=(e,t,o,n)=>{const s=o.getBounds.map((e=>e())),r=o.lazySink(e).getOrDie();nb.positionWithinBounds(r,t,{anchor:{type:"hotspot",hotspot:e,layouts:n,overrides:{maxWidthFunction:Oc()}}},s)},Lx=(e,t,o,n,s)=>{Bx.setGroups(t,s),zx(e,t,o,n),Zb.on(e)},Vx=lh({name:"FloatingToolbarButton",factory:(e,t,o,n)=>({...Tv.sketch({...n.button(),action:e=>{Nx(e,n)},buttonBehaviours:th({dump:n.button().buttonBehaviours},[Gg.config({others:{toolbarSandbox:t=>((e,t,o)=>{const n=Fv();return{dom:{tag:"div",attributes:{id:n.id}},behaviours:rd([Om.config({mode:"special",onEscape:e=>(wb.close(e),A.some(!0))}),wb.config({onOpen:(s,r)=>{const a=Rx.get().getOr(!1);o.fetch().get((s=>{Lx(e,r,o,t.layouts,s),n.link(e.element),a||Om.focusIn(r)}))},onClose:()=>{Zb.off(e),Rx.get().getOr(!1)||fd.focus(e),n.unlink(e.element)},isPartOf:(t,o,n)=>Iv(o,n)||Iv(e,n),getAttachPoint:()=>o.lazySink(e).getOrDie()}),ab.config({channels:{...ux({isExtraPart:T,...o.fireDismissalEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({})}),...gx({doReposition:()=>{wb.getState(Gg.getCoupled(e,"toolbarSandbox")).each((n=>{zx(e,n,o,t.layouts)}))}})}})])}})(t,o,e)}})])}),apis:{setGroups:(t,n)=>{wb.getState(Gg.getCoupled(t,"toolbarSandbox")).each((s=>{Lx(t,s,e,o.layouts,n)}))},reposition:t=>{wb.getState(Gg.getCoupled(t,"toolbarSandbox")).each((n=>{zx(t,n,e,o.layouts)}))},toggle:e=>{Nx(e,n)},toggleWithoutFocusing:e=>{((e,t)=>{Rx.set(!0),Nx(e,t),Rx.clear()})(e,n)},getToolbar:e=>wb.getState(Gg.getCoupled(e,"toolbarSandbox")),isOpen:e=>wb.isOpen(Gg.getCoupled(e,"toolbarSandbox"))}}),configFields:Fx(),partFields:Ix(),apis:{setGroups:(e,t,o)=>{e.setGroups(t,o)},reposition:(e,t)=>{e.reposition(t)},toggle:(e,t)=>{e.toggle(t)},toggleWithoutFocusing:(e,t)=>{e.toggleWithoutFocusing(t)},getToolbar:(e,t)=>e.getToolbar(t),isOpen:(e,t)=>e.isOpen(t)}}),Hx=y([Qr("prefix","form-field"),Jp("fieldBehaviours",[Pg,Zh])]),Px=y([Zi({schema:[Rr("dom")],name:"label"}),Zi({factory:{sketch:e=>({uid:e.uid,dom:{tag:"span",styles:{display:"none"},attributes:{"aria-hidden":"true"},innerHtml:e.text}})},schema:[Rr("text")],name:"aria-descriptor"}),Ji({factory:{sketch:e=>{const t=((e,t)=>{const o={};return ie(e,((e,n)=>{I(t,n)||(o[n]=e)})),o})(e,["factory"]);return e.factory.sketch(t)}},schema:[Rr("factory")],name:"field"})]),Ux=lh({name:"FormField",configFields:Hx(),partFields:Px(),factory:(e,t,o,n)=>{const s=Zp(e.fieldBehaviours,[Pg.config({find:t=>ul(t,e,"field")}),Zh.config({store:{mode:"manual",getValue:e=>Pg.getCurrent(e).bind(Zh.getValue),setValue:(e,t)=>{Pg.getCurrent(e).each((e=>{Zh.setValue(e,t)}))}}})]),r=Hc([Jc(((t,o)=>{const n=gl(t,e,["label","field","aria-descriptor"]);n.field().each((t=>{const o=Ne(e.prefix);n.label().each((e=>{qo(e.element,"for",o),qo(t.element,"id",o)})),n["aria-descriptor"]().each((o=>{const n=Ne(e.prefix);qo(o.element,"id",n),qo(t.element,"aria-describedby",n)}))}))}))]),a={getField:t=>ul(t,e,"field"),getLabel:t=>ul(t,e,"label")};return{uid:e.uid,dom:e.dom,components:t,behaviours:s,events:r,apis:a}},apis:{getField:(e,t)=>e.getField(t),getLabel:(e,t)=>e.getLabel(t)}}),Wx=y([Qr("field1Name","field1"),Qr("field2Name","field2"),xi("onLockedChange"),hi(["lockClass"]),Qr("locked",!1),eh("coupledFieldBehaviours",[Pg,Zh]),sa("onInput",b)]),$x=(e,t)=>Ji({factory:Ux,name:e,overrides:e=>({fieldBehaviours:rd([ud("coupled-input-behaviour",[Wc(Ca(),(o=>{((e,t,o)=>ul(e,t,o).bind(Pg.getCurrent))(o,e,t).each((t=>{ul(o,e,"lock").each((n=>{Zb.isOn(n)&&e.onLockedChange(o,t,n),e.onInput(o)}))}))}))])])})}),Gx=y([$x("field1","field2"),$x("field2","field1"),Ji({factory:Tv,schema:[Rr("dom")],name:"lock",overrides:e=>({buttonBehaviours:rd([Zb.config({selected:e.locked,toggleClass:e.markers.lockClass,aria:{mode:"pressed"}})])})})]),jx=lh({name:"FormCoupledInputs",configFields:Wx(),partFields:Gx(),factory:(e,t,o,n)=>({uid:e.uid,dom:e.dom,components:t,behaviours:th(e.coupledFieldBehaviours,[Pg.config({find:A.some}),Zh.config({store:{mode:"manual",getValue:t=>{const o=fl(t,e,["field1","field2"]);return{[e.field1Name]:Zh.getValue(o.field1()),[e.field2Name]:Zh.getValue(o.field2())}},setValue:(t,o)=>{const n=fl(t,e,["field1","field2"]);ve(o,e.field1Name)&&Zh.setValue(n.field1(),o[e.field1Name]),ve(o,e.field2Name)&&Zh.setValue(n.field2(),o[e.field2Name])}}})]),apis:{getField1:t=>ul(t,e,"field1"),getField2:t=>ul(t,e,"field2"),getLock:t=>ul(t,e,"lock")}}),apis:{getField1:(e,t)=>e.getField1(t),getField2:(e,t)=>e.getField2(t),getLock:(e,t)=>e.getLock(t)}}),qx=ih({name:"HtmlSelect",configFields:[Rr("options"),Jp("selectBehaviours",[fd,Zh]),Qr("selectClasses",[]),Qr("selectAttributes",{}),$r("data")],factory:(e,t)=>{const o=L(e.options,(e=>({dom:{tag:"option",value:e.value,innerHtml:e.text}}))),n=e.data.map((e=>ia("initialValue",e))).getOr({});return{uid:e.uid,dom:{tag:"select",classes:e.selectClasses,attributes:e.selectAttributes},components:o,behaviours:Zp(e.selectBehaviours,[fd.config({}),Zh.config({store:{mode:"manual",getValue:e=>cs(e.element),setValue:(t,o)=>{const n=te(e.options);$(e.options,(e=>e.value===o)).isSome()?ds(t.element,o):-1===t.element.dom.selectedIndex&&""===o&&n.each((e=>ds(t.element,e.value)))},...n}})])}}}),Xx=ih({name:"InlineView",configFields:[Rr("lazySink"),bi("onShow"),bi("onHide"),Yr("onEscape"),Jp("inlineBehaviours",[wb,Zh,ab]),Jr("fireDismissalEventInstead",[Qr("event",Ya())]),Jr("fireRepositionEventInstead",[Qr("event",Ka())]),Qr("getRelated",A.none),Qr("isExtraPart",T),Qr("eventOrder",A.none)],factory:(e,t)=>{const o=(t,o,n,s)=>{const r=e.lazySink(t).getOrDie();wb.openWhileCloaked(t,o,(()=>nb.positionWithinBounds(r,t,n,s()))),Zh.setValue(t,A.some({mode:"position",config:n,getBounds:s}))},n=(t,o,n,s)=>{const r=((e,t,o,n,s)=>{const r=()=>e.lazySink(t),a="horizontal"===n.type?{layouts:{onLtr:()=>Zl(),onRtl:()=>ec()}}:{},i=e=>(e=>2===e.length)(e)?a:{};return ix.sketch({dom:{tag:"div"},data:n.data,markers:n.menu.markers,highlightOnOpen:n.menu.highlightOnOpen,fakeFocus:n.menu.fakeFocus,onEscape:()=>(wb.close(t),e.onEscape.map((e=>e(t))),A.some(!0)),onExecute:()=>A.some(!0),onOpenMenu:(e,t)=>{nb.positionWithinBounds(r().getOrDie(),t,o,s())},onOpenSubmenu:(e,t,o,n)=>{const s=r().getOrDie();nb.position(s,o,{anchor:{type:"submenu",item:t,...i(n)}})},onRepositionMenu:(e,t,n)=>{const a=r().getOrDie();nb.positionWithinBounds(a,t,o,s()),V(n,(e=>{const t=i(e.triggeringPath);nb.position(a,e.triggeredMenu,{anchor:{type:"submenu",item:e.triggeringItem,...t}})}))}})})(e,t,o,n,s);wb.open(t,r),Zh.setValue(t,A.some({mode:"menu",menu:r}))},s=t=>{wb.isOpen(t)&&Zh.getValue(t).each((o=>{switch(o.mode){case"menu":wb.getState(t).each(ix.repositionMenus);break;case"position":const n=e.lazySink(t).getOrDie();nb.positionWithinBounds(n,t,o.config,o.getBounds())}}))},r={setContent:(e,t)=>{wb.setContent(e,t)},showAt:(e,t,n)=>{const s=A.none;o(e,t,n,s)},showWithinBounds:o,showMenuAt:(e,t,o)=>{n(e,t,o,A.none)},showMenuWithinBounds:n,hide:e=>{wb.isOpen(e)&&(Zh.setValue(e,A.none()),wb.close(e))},getContent:e=>wb.getState(e),reposition:s,isOpen:wb.isOpen};return{uid:e.uid,dom:e.dom,behaviours:Zp(e.inlineBehaviours,[wb.config({isPartOf:(t,o,n)=>Iv(o,n)||((t,o)=>e.getRelated(t).exists((e=>Iv(e,o))))(t,n),getAttachPoint:t=>e.lazySink(t).getOrDie(),onOpen:t=>{e.onShow(t)},onClose:t=>{e.onHide(t)}}),Zh.config({store:{mode:"memory",initialValue:A.none()}}),ab.config({channels:{...ux({isExtraPart:t.isExtraPart,...e.fireDismissalEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({})}),...gx({...e.fireRepositionEventInstead.map((e=>({fireEventInstead:{event:e.event}}))).getOr({}),doReposition:s})}})]),eventOrder:e.eventOrder,apis:r}},apis:{showAt:(e,t,o,n)=>{e.showAt(t,o,n)},showWithinBounds:(e,t,o,n,s)=>{e.showWithinBounds(t,o,n,s)},showMenuAt:(e,t,o,n)=>{e.showMenuAt(t,o,n)},showMenuWithinBounds:(e,t,o,n,s)=>{e.showMenuWithinBounds(t,o,n,s)},hide:(e,t)=>{e.hide(t)},isOpen:(e,t)=>e.isOpen(t),getContent:(e,t)=>e.getContent(t),setContent:(e,t,o)=>{e.setContent(t,o)},reposition:(e,t)=>{e.reposition(t)}}}),Yx=y([ta("type","text"),$r("data"),Qr("inputAttributes",{}),Qr("inputStyles",{}),Qr("tag","input"),Qr("inputClasses",[]),bi("onSetValue"),sa("fromInputValue",w),sa("toInputValue",w),Qr("styles",{}),Qr("eventOrder",{}),Jp("inputBehaviours",[Zh,fd]),Qr("selectOnFocus",!0)]),Kx=e=>rd([fd.config({onFocus:e.selectOnFocus?t=>{const o=t.element,n=cs(o);"range"!==e.type&&o.dom.setSelectionRange(0,n.length)}:b})]),Jx=e=>({...Kx(e),...Zp(e.inputBehaviours,[Zh.config({store:{mode:"manual",...e.data.map((e=>({initialValue:e}))).getOr({}),getValue:t=>e.fromInputValue(cs(t.element)),setValue:(t,o)=>{cs(t.element)!==o&&ds(t.element,e.toInputValue(o))}},onSetValue:e.onSetValue})])}),Qx=e=>({tag:e.tag,attributes:{type:e.type,...e.inputAttributes},styles:e.inputStyles,classes:e.inputClasses}),Zx=ih({name:"Input",configFields:Yx(),factory:(e,t)=>({uid:e.uid,dom:Qx(e),components:[],behaviours:Jx(e),eventOrder:e.eventOrder})}),ey=sl(jv(),qv()),ty=y([Rr("lazySink"),$r("dragBlockClass"),sa("getBounds",Ls),Qr("useTabstopAt",E),Qr("firstTabstop",0),Qr("eventOrder",{}),Jp("modalBehaviours",[Om]),vi("onExecute"),yi("onEscape")]),oy={sketch:w},ny=y([Zi({name:"draghandle",overrides:(e,t)=>({behaviours:rd([Dh.config({mode:"mouse",getTarget:e=>Gn(e,'[role="dialog"]').getOr(e),blockerClass:e.dragBlockClass.getOrDie(new Error("The drag blocker class was not specified for a dialog with a drag handle: \n"+JSON.stringify(t,null,2)).message),getBounds:e.getDragBounds})])})}),Ji({schema:[Rr("dom")],name:"title"}),Ji({factory:oy,schema:[Rr("dom")],name:"close"}),Ji({factory:oy,schema:[Rr("dom")],name:"body"}),Zi({factory:oy,schema:[Rr("dom")],name:"footer"}),Qi({factory:{sketch:(e,t)=>({...e,dom:t.dom,components:t.components})},schema:[Qr("dom",{tag:"div",styles:{position:"fixed",left:"0px",top:"0px",right:"0px",bottom:"0px"}}),Qr("components",[])],name:"blocker"})]),sy=lh({name:"ModalDialog",configFields:ty(),partFields:ny(),factory:(e,t,o,n)=>{const s=Xe(),r=Ne("modal-events"),a={...e.eventOrder,[qa()]:[r].concat(e.eventOrder["alloy.system.attached"]||[])},i=Jt();return{uid:e.uid,dom:e.dom,components:t,apis:{show:t=>{s.set(t);const o=e.lazySink(t).getOrDie(),r=n.blocker(),a=o.getSystem().build({...r,components:r.components.concat([Ig(t)]),behaviours:rd([fd.config({}),ud("dialog-blocker-events",[Kc(xa(),(()=>{Lg.isBlocked(t)||Om.focusIn(t)}))])])});Nm(o,a),Om.focusIn(t)},hide:e=>{s.clear(),go(e.element).each((t=>{e.getSystem().getByDom(t).each((e=>{Vm(e)}))}))},getBody:t=>ml(t,e,"body"),getFooter:t=>ul(t,e,"footer"),setIdle:e=>{Lg.unblock(e)},setBusy:(e,t)=>{Lg.block(e,t)}},eventOrder:a,domModification:{attributes:{role:"dialog","aria-modal":"true"}},behaviours:Zp(e.modalBehaviours,[ng.config({}),Om.config({mode:"cyclic",onEnter:e.onExecute,onEscape:e.onEscape,useTabstopAt:e.useTabstopAt,firstTabstop:e.firstTabstop}),Lg.config({getRoot:s.get}),ud(r,[Jc((t=>{const o=ml(t,e,"title").element,n=(e=>e.dom.textContent)(o);i.os.isMacOS()&&g(n)?qo(t.element,"aria-label",n):((e,t)=>{const o=Ko(e,"id").fold((()=>{const e=Ne("dialog-label");return qo(t,"id",e),e}),w);qo(e,"aria-labelledby",o)})(t.element,o)}))])])}},apis:{show:(e,t)=>{e.show(t)},hide:(e,t)=>{e.hide(t)},getBody:(e,t)=>e.getBody(t),getFooter:(e,t)=>e.getFooter(t),setBusy:(e,t,o)=>{e.setBusy(t,o)},setIdle:(e,t)=>{e.setIdle(t)}}}),ry=Zi({schema:[Rr("dom")],name:"label"}),ay=e=>Zi({name:e+"-edge",overrides:t=>t.model.manager.edgeActions[e].fold((()=>({})),(e=>({events:Hc([$c(da(),((t,o,n)=>e(t,n)),[t]),$c(pa(),((t,o,n)=>e(t,n)),[t]),$c(ha(),((t,o,n)=>{n.mouseIsDown.get()&&e(t,n)}),[t])])})))}),iy=ay("top-left"),ly=ay("top"),cy=ay("top-right"),dy=ay("right"),uy=ay("bottom-right"),my=ay("bottom"),gy=ay("bottom-left"),py=ay("left"),hy=Ji({name:"thumb",defaults:y({dom:{styles:{position:"absolute"}}}),overrides:e=>({events:Hc([jc(da(),e,"spectrum"),jc(ua(),e,"spectrum"),jc(ma(),e,"spectrum"),jc(pa(),e,"spectrum"),jc(ha(),e,"spectrum"),jc(ba(),e,"spectrum")])})}),fy=e=>Nd(e.event),by=Ji({schema:[Fr("mouseIsDown",(()=>ye(!1)))],name:"spectrum",overrides:e=>{const t=e.model.manager,o=(o,n)=>t.getValueFromEvent(n).map((n=>t.setValueFrom(o,e,n)));return{behaviours:rd([Om.config({mode:"special",onLeft:(o,n)=>t.onLeft(o,e,fy(n)),onRight:(o,n)=>t.onRight(o,e,fy(n)),onUp:(o,n)=>t.onUp(o,e,fy(n)),onDown:(o,n)=>t.onDown(o,e,fy(n))}),Gb.config({}),fd.config({})]),events:Hc([Wc(da(),o),Wc(ua(),o),Wc(pa(),o),Wc(ha(),((t,n)=>{e.mouseIsDown.get()&&o(t,n)}))])}}});var vy=[ry,py,dy,ly,my,iy,cy,gy,uy,hy,by];const xy=y("slider.change.value"),yy=e=>{const t=e.event.raw;if((e=>-1!==e.type.indexOf("touch"))(t)){const e=t;return void 0!==e.touches&&1===e.touches.length?A.some(e.touches[0]).map((e=>Dn(e.clientX,e.clientY))):A.none()}{const e=t;return void 0!==e.clientX?A.some(e).map((e=>Dn(e.clientX,e.clientY))):A.none()}},wy=e=>e.model.minX,Sy=e=>e.model.minY,Cy=e=>e.model.minX-1,ky=e=>e.model.minY-1,Oy=e=>e.model.maxX,_y=e=>e.model.maxY,Ty=e=>e.model.maxX+1,Ey=e=>e.model.maxY+1,Ay=(e,t,o)=>t(e)-o(e),My=e=>Ay(e,Oy,wy),Dy=e=>Ay(e,_y,Sy),By=e=>My(e)/2,Fy=e=>Dy(e)/2,Iy=(e,t)=>t?e.stepSize*e.speedMultiplier:e.stepSize,Ry=e=>e.snapToGrid,Ny=e=>e.snapStart,zy=e=>e.rounded,Ly=(e,t)=>void 0!==e[t+"-edge"],Vy=e=>Ly(e,"left"),Hy=e=>Ly(e,"right"),Py=e=>Ly(e,"top"),Uy=e=>Ly(e,"bottom"),Wy=e=>e.model.value.get(),$y=(e,t)=>({x:e,y:t}),Gy=(e,t)=>{Rc(e,xy(),{value:t})},jy=(e,t,o,n)=>eo?o:e===t?t-1:Math.max(t,e-n),qy=(e,t,o,n)=>e>o?e:eMath.max(t,Math.min(o,e)),Yy=e=>{const{min:t,max:o,range:n,value:s,step:r,snap:a,snapStart:i,rounded:l,hasMinEdge:c,hasMaxEdge:d,minBound:u,maxBound:m,screenRange:g}=e,p=c?t-1:t,h=d?o+1:o;if(sm)return h;{const e=((e,t,o)=>Math.min(o,Math.max(e,t))-t)(s,u,m),c=Xy(e/g*n+t,p,h);return a&&c>=t&&c<=o?((e,t,o,n,s)=>s.fold((()=>{const s=e-t,r=Math.round(s/n)*n;return Xy(t+r,t-1,o+1)}),(t=>{const s=(e-t)%n,r=Math.round(s/n),a=Math.floor((e-t)/n),i=Math.floor((o-t)/n),l=t+Math.min(i,a+r)*n;return Math.max(t,l)})))(c,t,o,r,i):l?Math.round(c):c}},Ky=e=>{const{min:t,max:o,range:n,value:s,hasMinEdge:r,hasMaxEdge:a,maxBound:i,maxOffset:l,centerMinEdge:c,centerMaxEdge:d}=e;return so?a?i:d:(s-t)/n*l},Jy="top",Qy="right",Zy="bottom",ew="left",tw=e=>e.element.dom.getBoundingClientRect(),ow=(e,t)=>e[t],nw=e=>{const t=tw(e);return ow(t,ew)},sw=e=>{const t=tw(e);return ow(t,Qy)},rw=e=>{const t=tw(e);return ow(t,Jy)},aw=e=>{const t=tw(e);return ow(t,Zy)},iw=e=>{const t=tw(e);return ow(t,"width")},lw=e=>{const t=tw(e);return ow(t,"height")},cw=(e,t,o)=>(e+t)/2-o,dw=(e,t)=>{const o=tw(e),n=tw(t),s=ow(o,ew),r=ow(o,Qy),a=ow(n,ew);return cw(s,r,a)},uw=(e,t)=>{const o=tw(e),n=tw(t),s=ow(o,Jy),r=ow(o,Zy),a=ow(n,Jy);return cw(s,r,a)},mw=(e,t)=>{Rc(e,xy(),{value:t})},gw=(e,t,o)=>{const n={min:wy(t),max:Oy(t),range:My(t),value:o,step:Iy(t),snap:Ry(t),snapStart:Ny(t),rounded:zy(t),hasMinEdge:Vy(t),hasMaxEdge:Hy(t),minBound:nw(e),maxBound:sw(e),screenRange:iw(e)};return Yy(n)},pw=e=>(t,o,n)=>((e,t,o,n)=>{const s=(e>0?qy:jy)(Wy(o),wy(o),Oy(o),Iy(o,n));return mw(t,s),A.some(s)})(e,t,o,n).map(E),hw=(e,t,o,n,s,r)=>{const a=((e,t,o,n,s)=>{const r=iw(e),a=n.bind((t=>A.some(dw(t,e)))).getOr(0),i=s.bind((t=>A.some(dw(t,e)))).getOr(r),l={min:wy(t),max:Oy(t),range:My(t),value:o,hasMinEdge:Vy(t),hasMaxEdge:Hy(t),minBound:nw(e),minOffset:0,maxBound:sw(e),maxOffset:r,centerMinEdge:a,centerMaxEdge:i};return Ky(l)})(t,r,o,n,s);return nw(t)-nw(e)+a},fw=pw(-1),bw=pw(1),vw=A.none,xw=A.none,yw={"top-left":A.none(),top:A.none(),"top-right":A.none(),right:A.some(((e,t)=>{Gy(e,Ty(t))})),"bottom-right":A.none(),bottom:A.none(),"bottom-left":A.none(),left:A.some(((e,t)=>{Gy(e,Cy(t))}))};var ww=Object.freeze({__proto__:null,setValueFrom:(e,t,o)=>{const n=gw(e,t,o);return mw(e,n),n},setToMin:(e,t)=>{const o=wy(t);mw(e,o)},setToMax:(e,t)=>{const o=Oy(t);mw(e,o)},findValueOfOffset:gw,getValueFromEvent:e=>yy(e).map((e=>e.left)),findPositionOfValue:hw,setPositionFromValue:(e,t,o,n)=>{const s=Wy(o),r=hw(e,n.getSpectrum(e),s,n.getLeftEdge(e),n.getRightEdge(e),o),a=En(t.element)/2;mn(t.element,"left",r-a+"px")},onLeft:fw,onRight:bw,onUp:vw,onDown:xw,edgeActions:yw});const Sw=(e,t)=>{Rc(e,xy(),{value:t})},Cw=(e,t,o)=>{const n={min:Sy(t),max:_y(t),range:Dy(t),value:o,step:Iy(t),snap:Ry(t),snapStart:Ny(t),rounded:zy(t),hasMinEdge:Py(t),hasMaxEdge:Uy(t),minBound:rw(e),maxBound:aw(e),screenRange:lw(e)};return Yy(n)},kw=e=>(t,o,n)=>((e,t,o,n)=>{const s=(e>0?qy:jy)(Wy(o),Sy(o),_y(o),Iy(o,n));return Sw(t,s),A.some(s)})(e,t,o,n).map(E),Ow=(e,t,o,n,s,r)=>{const a=((e,t,o,n,s)=>{const r=lw(e),a=n.bind((t=>A.some(uw(t,e)))).getOr(0),i=s.bind((t=>A.some(uw(t,e)))).getOr(r),l={min:Sy(t),max:_y(t),range:Dy(t),value:o,hasMinEdge:Py(t),hasMaxEdge:Uy(t),minBound:rw(e),minOffset:0,maxBound:aw(e),maxOffset:r,centerMinEdge:a,centerMaxEdge:i};return Ky(l)})(t,r,o,n,s);return rw(t)-rw(e)+a},_w=A.none,Tw=A.none,Ew=kw(-1),Aw=kw(1),Mw={"top-left":A.none(),top:A.some(((e,t)=>{Gy(e,ky(t))})),"top-right":A.none(),right:A.none(),"bottom-right":A.none(),bottom:A.some(((e,t)=>{Gy(e,Ey(t))})),"bottom-left":A.none(),left:A.none()};var Dw=Object.freeze({__proto__:null,setValueFrom:(e,t,o)=>{const n=Cw(e,t,o);return Sw(e,n),n},setToMin:(e,t)=>{const o=Sy(t);Sw(e,o)},setToMax:(e,t)=>{const o=_y(t);Sw(e,o)},findValueOfOffset:Cw,getValueFromEvent:e=>yy(e).map((e=>e.top)),findPositionOfValue:Ow,setPositionFromValue:(e,t,o,n)=>{const s=Wy(o),r=Ow(e,n.getSpectrum(e),s,n.getTopEdge(e),n.getBottomEdge(e),o),a=kn(t.element)/2;mn(t.element,"top",r-a+"px")},onLeft:_w,onRight:Tw,onUp:Ew,onDown:Aw,edgeActions:Mw});const Bw=(e,t)=>{Rc(e,xy(),{value:t})},Fw=(e,t)=>({x:e,y:t}),Iw=(e,t)=>(o,n,s)=>((e,t,o,n,s)=>{const r=e>0?qy:jy,a=t?Wy(n).x:r(Wy(n).x,wy(n),Oy(n),Iy(n,s)),i=t?r(Wy(n).y,Sy(n),_y(n),Iy(n,s)):Wy(n).y;return Bw(o,Fw(a,i)),A.some(a)})(e,t,o,n,s).map(E),Rw=Iw(-1,!1),Nw=Iw(1,!1),zw=Iw(-1,!0),Lw=Iw(1,!0),Vw={"top-left":A.some(((e,t)=>{Gy(e,$y(Cy(t),ky(t)))})),top:A.some(((e,t)=>{Gy(e,$y(By(t),ky(t)))})),"top-right":A.some(((e,t)=>{Gy(e,$y(Ty(t),ky(t)))})),right:A.some(((e,t)=>{Gy(e,$y(Ty(t),Fy(t)))})),"bottom-right":A.some(((e,t)=>{Gy(e,$y(Ty(t),Ey(t)))})),bottom:A.some(((e,t)=>{Gy(e,$y(By(t),Ey(t)))})),"bottom-left":A.some(((e,t)=>{Gy(e,$y(Cy(t),Ey(t)))})),left:A.some(((e,t)=>{Gy(e,$y(Cy(t),Fy(t)))}))};var Hw=Object.freeze({__proto__:null,setValueFrom:(e,t,o)=>{const n=gw(e,t,o.left),s=Cw(e,t,o.top),r=Fw(n,s);return Bw(e,r),r},setToMin:(e,t)=>{const o=wy(t),n=Sy(t);Bw(e,Fw(o,n))},setToMax:(e,t)=>{const o=Oy(t),n=_y(t);Bw(e,Fw(o,n))},getValueFromEvent:e=>yy(e),setPositionFromValue:(e,t,o,n)=>{const s=Wy(o),r=hw(e,n.getSpectrum(e),s.x,n.getLeftEdge(e),n.getRightEdge(e),o),a=Ow(e,n.getSpectrum(e),s.y,n.getTopEdge(e),n.getBottomEdge(e),o),i=En(t.element)/2,l=kn(t.element)/2;mn(t.element,"left",r-i+"px"),mn(t.element,"top",a-l+"px")},onLeft:Rw,onRight:Nw,onUp:zw,onDown:Lw,edgeActions:Vw});const Pw=lh({name:"Slider",configFields:[Qr("stepSize",1),Qr("speedMultiplier",10),Qr("onChange",b),Qr("onChoose",b),Qr("onInit",b),Qr("onDragStart",b),Qr("onDragEnd",b),Qr("snapToGrid",!1),Qr("rounded",!0),$r("snapStart"),Nr("model",Mr("mode",{x:[Qr("minX",0),Qr("maxX",100),Fr("value",(e=>ye(e.mode.minX))),Rr("getInitialValue"),wi("manager",ww)],y:[Qr("minY",0),Qr("maxY",100),Fr("value",(e=>ye(e.mode.minY))),Rr("getInitialValue"),wi("manager",Dw)],xy:[Qr("minX",0),Qr("maxX",100),Qr("minY",0),Qr("maxY",100),Fr("value",(e=>ye({x:e.mode.minX,y:e.mode.minY}))),Rr("getInitialValue"),wi("manager",Hw)]})),Jp("sliderBehaviours",[Om,Zh]),Fr("mouseIsDown",(()=>ye(!1)))],partFields:vy,factory:(e,t,o,n)=>{const s=t=>ml(t,e,"thumb"),r=t=>ml(t,e,"spectrum"),a=t=>ul(t,e,"left-edge"),i=t=>ul(t,e,"right-edge"),l=t=>ul(t,e,"top-edge"),c=t=>ul(t,e,"bottom-edge"),d=e.model,u=d.manager,m=(t,o)=>{u.setPositionFromValue(t,o,e,{getLeftEdge:a,getRightEdge:i,getTopEdge:l,getBottomEdge:c,getSpectrum:r})},g=(e,t)=>{d.value.set(t);const o=s(e);m(e,o)},p=t=>{const o=e.mouseIsDown.get();e.mouseIsDown.set(!1),o&&ul(t,e,"thumb").each((o=>{const n=d.value.get();e.onChoose(t,o,n)}))},h=(t,o)=>{o.stop(),e.mouseIsDown.set(!0),e.onDragStart(t,s(t))},f=(t,o)=>{o.stop(),e.onDragEnd(t,s(t)),p(t)},b=t=>{ul(t,e,"spectrum").map(Om.focusIn)};return{uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.sliderBehaviours,[Om.config({mode:"special",focusIn:b}),Zh.config({store:{mode:"manual",getValue:e=>d.value.get(),setValue:g}}),ab.config({channels:{[Ad()]:{onReceive:p}}})]),events:Hc([Wc(xy(),((t,o)=>{((t,o)=>{g(t,o);const n=s(t);e.onChange(t,n,o),A.some(!0)})(t,o.event.value)})),Jc(((t,o)=>{const n=d.getInitialValue();d.value.set(n);const a=s(t);m(t,a);const i=r(t);e.onInit(t,a,i,d.value.get())})),Wc(da(),h),Wc(ma(),f),Wc(pa(),((e,t)=>{b(e),h(e,t)})),Wc(ba(),f)]),apis:{resetToMin:t=>{u.setToMin(t,e)},resetToMax:t=>{u.setToMax(t,e)},setValue:g,refresh:m},domModification:{styles:{position:"relative"}}}},apis:{setValue:(e,t,o)=>{e.setValue(t,o)},resetToMin:(e,t)=>{e.resetToMin(t)},resetToMax:(e,t)=>{e.resetToMax(t)},refresh:(e,t)=>{e.refresh(t)}}}),Uw="container",Ww=[Jp("slotBehaviours",[])],$w=e=>"",Gw=(e,t)=>{const o=t=>hl(e),n=(t,o)=>(n,s)=>ul(n,e,s).map((e=>t(e,s))).getOr(o),s=(e,t)=>"true"!==Yo(e.element,"aria-hidden"),r=n(s,!1),a=n(((e,t)=>{if(s(e)){const o=e.element;mn(o,"display","none"),qo(o,"aria-hidden","true"),Rc(e,Qa(),{name:t,visible:!1})}})),i=(e=>(t,o)=>{V(o,(o=>e(t,o)))})(a),l=n(((e,t)=>{if(!s(e)){const o=e.element;yn(o,"display"),Qo(o,"aria-hidden"),Rc(e,Qa(),{name:t,visible:!0})}})),c={getSlotNames:o,getSlot:(t,o)=>ul(t,e,o),isShowing:r,hideSlot:a,hideAllSlots:e=>i(e,o()),showSlot:l};return{uid:e.uid,dom:e.dom,components:t,behaviours:Qp(e.slotBehaviours),apis:c}},jw=le({getSlotNames:(e,t)=>e.getSlotNames(t),getSlot:(e,t,o)=>e.getSlot(t,o),isShowing:(e,t,o)=>e.isShowing(t,o),hideSlot:(e,t,o)=>e.hideSlot(t,o),hideAllSlots:(e,t)=>e.hideAllSlots(t),showSlot:(e,t,o)=>e.showSlot(t,o)},(e=>Am(e))),qw={...jw,sketch:e=>{const t=(()=>{const e=[];return{slot:(t,o)=>(e.push(t),al(Uw,$w(t),o)),record:y(e)}})(),o=e(t),n=t.record(),s=L(n,(e=>Ji({name:e,pname:$w(e)})));return nh(Uw,Ww,s,Gw,o)}},Xw=(e,t,o)=>({within:e,extra:t,withinWidth:o}),Yw=(e,t,o)=>{const n=W(e,((e,t)=>((e,t)=>{const n=o(e);return A.some({element:e,start:t,finish:t+n,width:n})})(t,e.len).fold(y(e),(t=>({len:t.finish,list:e.list.concat([t])})))),{len:0,list:[]}).list,s=P(n,(e=>e.finish<=t)),r=U(s,((e,t)=>e+t.width),0);return{within:s,extra:n.slice(s.length),withinWidth:r}},Kw=e=>L(e,(e=>e.element)),Jw=(e,t)=>{const o=L(t,(e=>Ig(e)));Bx.setGroups(e,o)},Qw=(e,t,o)=>{const n=t.builtGroups.get();if(0===n.length)return;const s=ml(e,t,"primary"),r=Gg.getCoupled(e,"overflowGroup");mn(s.element,"visibility","hidden");const a=n.concat([r]),i=se(a,(e=>Ho(e.element).bind((t=>e.getSystem().getByDom(t).toOptional()))));o([]),Jw(s,a);const l=((e,t,o,n)=>{const s=((e,t,o)=>{const n=Yw(t,e,o);return 0===n.extra.length?A.some(n):A.none()})(e,t,o).getOrThunk((()=>Yw(t,e-o(n),o))),r=s.within,a=s.extra,i=s.withinWidth;return 1===a.length&&a[0].width<=o(n)?((e,t,o)=>{const n=Kw(e.concat(t));return Xw(n,[],o)})(r,a,i):a.length>=1?((e,t,o,n)=>{const s=Kw(e).concat([o]);return Xw(s,Kw(t),n)})(r,a,n,i):((e,t,o)=>Xw(Kw(e),[],o))(r,0,i)})(En(s.element),t.builtGroups.get(),(e=>Math.ceil(e.element.dom.getBoundingClientRect().width)),r);0===l.extra.length?(ng.remove(s,r),o([])):(Jw(s,l.within),o(l.extra)),yn(s.element,"visibility"),wn(s.element),i.each(fd.focus)},Zw=y([Jp("splitToolbarBehaviours",[Gg]),Fr("builtGroups",(()=>ye([])))]),eS=y([hi(["overflowToggledClass"]),Yr("getOverflowBounds"),Rr("lazySink"),Fr("overflowGroups",(()=>ye([]))),bi("onOpened"),bi("onClosed")].concat(Zw())),tS=y([Ji({factory:Bx,schema:Mx(),name:"primary"}),Qi({schema:Mx(),name:"overflow"}),Qi({name:"overflow-button"}),Qi({name:"overflow-group"})]),oS=y([Rr("items"),hi(["itemSelector"]),Jp("tgroupBehaviours",[Om])]),nS=y([el({name:"items",unit:"item"})]),sS=lh({name:"ToolbarGroup",configFields:oS(),partFields:nS(),factory:(e,t,o,n)=>({uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.tgroupBehaviours,[Om.config({mode:"flow",selector:e.markers.itemSelector})]),domModification:{attributes:{role:"toolbar"}}})}),rS=e=>L(e,(e=>Ig(e))),aS=(e,t,o)=>{Qw(e,o,(n=>{o.overflowGroups.set(n),t.getOpt(e).each((e=>{Vx.setGroups(e,rS(n))}))}))},iS=lh({name:"SplitFloatingToolbar",configFields:eS(),partFields:tS(),factory:(e,t,o,n)=>{const s=pv(Vx.sketch({fetch:()=>Oe((t=>{t(rS(e.overflowGroups.get()))})),layouts:{onLtr:()=>[Ul,Pl],onRtl:()=>[Pl,Ul],onBottomLtr:()=>[$l,Wl],onBottomRtl:()=>[Wl,$l]},getBounds:o.getOverflowBounds,lazySink:e.lazySink,fireDismissalEventInstead:{},markers:{toggledClass:e.markers.overflowToggledClass},parts:{button:n["overflow-button"](),toolbar:n.overflow()},onToggled:(t,o)=>e[o?"onOpened":"onClosed"](t)}));return{uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.splitToolbarBehaviours,[Gg.config({others:{overflowGroup:()=>sS.sketch({...n["overflow-group"](),items:[s.asSpec()]})}})]),apis:{setGroups:(t,o)=>{e.builtGroups.set(L(o,t.getSystem().build)),aS(t,s,e)},refresh:t=>aS(t,s,e),toggle:e=>{s.getOpt(e).each((e=>{Vx.toggle(e)}))},toggleWithoutFocusing:e=>{s.getOpt(e).each(Vx.toggleWithoutFocusing)},isOpen:e=>s.getOpt(e).map(Vx.isOpen).getOr(!1),reposition:e=>{s.getOpt(e).each((e=>{Vx.reposition(e)}))},getOverflow:e=>s.getOpt(e).bind(Vx.getToolbar)},domModification:{attributes:{role:"group"}}}},apis:{setGroups:(e,t,o)=>{e.setGroups(t,o)},refresh:(e,t)=>{e.refresh(t)},reposition:(e,t)=>{e.reposition(t)},toggle:(e,t)=>{e.toggle(t)},toggleWithoutFocusing:(e,t)=>{e.toggle(t)},isOpen:(e,t)=>e.isOpen(t),getOverflow:(e,t)=>e.getOverflow(t)}}),lS=y([hi(["closedClass","openClass","shrinkingClass","growingClass","overflowToggledClass"]),bi("onOpened"),bi("onClosed")].concat(Zw())),cS=y([Ji({factory:Bx,schema:Mx(),name:"primary"}),Ji({factory:Bx,schema:Mx(),name:"overflow",overrides:e=>({toolbarBehaviours:rd([zb.config({dimension:{property:"height"},closedClass:e.markers.closedClass,openClass:e.markers.openClass,shrinkingClass:e.markers.shrinkingClass,growingClass:e.markers.growingClass,onShrunk:t=>{ul(t,e,"overflow-button").each((e=>{Zb.off(e)})),e.onClosed(t)},onGrown:t=>{e.onOpened(t)},onStartGrow:t=>{ul(t,e,"overflow-button").each(Zb.on)}}),Om.config({mode:"acyclic",onEscape:t=>(ul(t,e,"overflow-button").each(fd.focus),A.some(!0))})])})}),Qi({name:"overflow-button",overrides:e=>({buttonBehaviours:rd([Zb.config({toggleClass:e.markers.overflowToggledClass,aria:{mode:"expanded"},toggleOnExecute:!1})])})}),Qi({name:"overflow-group"})]),dS=(e,t,o)=>{ul(e,t,"overflow-button").each((n=>{ul(e,t,"overflow").each((s=>{if(uS(e,t),zb.hasShrunk(s)){const e=t.onOpened;t.onOpened=n=>{o||Om.focusIn(s),e(n),t.onOpened=e}}else{const e=t.onClosed;t.onClosed=s=>{o||fd.focus(n),e(s),t.onClosed=e}}zb.toggleGrow(s)}))}))},uS=(e,t)=>{ul(e,t,"overflow").each((o=>{Qw(e,t,(e=>{const t=L(e,(e=>Ig(e)));Bx.setGroups(o,t)})),ul(e,t,"overflow-button").each((e=>{zb.hasGrown(o)&&Zb.on(e)})),zb.refresh(o)}))},mS=lh({name:"SplitSlidingToolbar",configFields:lS(),partFields:cS(),factory:(e,t,o,n)=>{const s="alloy.toolbar.toggle";return{uid:e.uid,dom:e.dom,components:t,behaviours:Zp(e.splitToolbarBehaviours,[Gg.config({others:{overflowGroup:e=>sS.sketch({...n["overflow-group"](),items:[Tv.sketch({...n["overflow-button"](),action:t=>{Ic(e,s)}})]})}}),ud("toolbar-toggle-events",[Wc(s,(t=>{dS(t,e,!1)}))])]),apis:{setGroups:(t,o)=>{((t,o)=>{const n=L(o,t.getSystem().build);e.builtGroups.set(n)})(t,o),uS(t,e)},refresh:t=>uS(t,e),toggle:t=>{dS(t,e,!1)},toggleWithoutFocusing:t=>{dS(t,e,!0)},isOpen:t=>((e,t)=>ul(e,t,"overflow").map(zb.hasGrown).getOr(!1))(t,e)},domModification:{attributes:{role:"group"}}}},apis:{setGroups:(e,t,o)=>{e.setGroups(t,o)},refresh:(e,t)=>{e.refresh(t)},toggle:(e,t)=>{e.toggle(t)},isOpen:(e,t)=>e.isOpen(t)}}),gS=ih({name:"TabButton",configFields:[Qr("uid",void 0),Rr("value"),Br("dom","dom",cr((()=>({attributes:{role:"tab",id:Ne("aria"),"aria-selected":"false"}}))),Zs()),$r("action"),Qr("domModification",{}),Jp("tabButtonBehaviours",[fd,Om,Zh]),Rr("view")],factory:(e,t)=>({uid:e.uid,dom:e.dom,components:e.components,events:_v(e.action),behaviours:Zp(e.tabButtonBehaviours,[fd.config({}),Om.config({mode:"execution",useSpace:!0,useEnter:!0}),Zh.config({store:{mode:"memory",initialValue:e.value}})]),domModification:e.domModification})}),pS=y([Rr("tabs"),Rr("dom"),Qr("clickToDismiss",!1),Jp("tabbarBehaviours",[Yd,Om]),hi(["tabClass","selectedClass"])]),hS=el({factory:gS,name:"tabs",unit:"tab",overrides:e=>{const t=(e,t)=>{Yd.dehighlight(e,t),Rc(e,ti(),{tabbar:e,button:t})},o=(e,t)=>{Yd.highlight(e,t),Rc(e,ei(),{tabbar:e,button:t})};return{action:n=>{const s=n.getSystem().getByUid(e.uid).getOrDie(),r=Yd.isHighlighted(s,n);(r&&e.clickToDismiss?t:r?b:o)(s,n)},domModification:{classes:[e.markers.tabClass]}}}}),fS=y([hS]),bS=lh({name:"Tabbar",configFields:pS(),partFields:fS(),factory:(e,t,o,n)=>({uid:e.uid,dom:e.dom,components:t,"debug.sketcher":"Tabbar",domModification:{attributes:{role:"tablist"}},behaviours:Zp(e.tabbarBehaviours,[Yd.config({highlightClass:e.markers.selectedClass,itemClass:e.markers.tabClass,onHighlight:(e,t)=>{qo(t.element,"aria-selected","true")},onDehighlight:(e,t)=>{qo(t.element,"aria-selected","false")}}),Om.config({mode:"flow",getInitial:e=>Yd.getHighlighted(e).map((e=>e.element)),selector:"."+e.markers.tabClass,executeOnMove:!0})])})}),vS=ih({name:"Tabview",configFields:[Jp("tabviewBehaviours",[ng])],factory:(e,t)=>({uid:e.uid,dom:e.dom,behaviours:Zp(e.tabviewBehaviours,[ng.config({})]),domModification:{attributes:{role:"tabpanel"}}})}),xS=y([Qr("selectFirst",!0),bi("onChangeTab"),bi("onDismissTab"),Qr("tabs",[]),Jp("tabSectionBehaviours",[])]),yS=Ji({factory:bS,schema:[Rr("dom"),Pr("markers",[Rr("tabClass"),Rr("selectedClass")])],name:"tabbar",defaults:e=>({tabs:e.tabs})}),wS=Ji({factory:vS,name:"tabview"}),SS=y([yS,wS]),CS=lh({name:"TabSection",configFields:xS(),partFields:SS(),factory:(e,t,o,n)=>{const s=(t,o)=>{ul(t,e,"tabbar").each((e=>{o(e).each(Nc)}))};return{uid:e.uid,dom:e.dom,components:t,behaviours:Qp(e.tabSectionBehaviours),events:Hc(j([e.selectFirst?[Jc(((e,t)=>{s(e,Yd.getFirst)}))]:[],[Wc(ei(),((t,o)=>{(t=>{const o=Zh.getValue(t);ul(t,e,"tabview").each((n=>{$(e.tabs,(e=>e.value===o)).each((o=>{const s=o.view();Ko(t.element,"id").each((e=>{qo(n.element,"aria-labelledby",e)})),ng.set(n,s),e.onChangeTab(n,t,s)}))}))})(o.event.button)})),Wc(ti(),((t,o)=>{const n=o.event.button;e.onDismissTab(t,n)}))]])),apis:{getViewItems:t=>ul(t,e,"tabview").map((e=>ng.contents(e))).getOr([]),showTab:(e,t)=>{s(e,(e=>{const o=Yd.getCandidates(e);return $(o,(e=>Zh.getValue(e)===t)).filter((t=>!Yd.isHighlighted(e,t)))}))}}}},apis:{getViewItems:(e,t)=>e.getViewItems(t),showTab:(e,t,o)=>{e.showTab(t,o)}}}),kS=(e,t,o)=>{const n=Zh.getValue(o);Zh.setValue(t,n),_S(t)},OS=(e,t)=>{const o=e.element,n=cs(o),s=o.dom;"number"!==Yo(o,"type")&&t(s,n)},_S=e=>{OS(e,((e,t)=>e.setSelectionRange(t.length,t.length)))},TS=y("alloy.typeahead.itemexecute"),ES=y([$r("lazySink"),Rr("fetch"),Qr("minChars",5),Qr("responseTime",1e3),bi("onOpen"),Qr("getHotspot",A.some),Qr("getAnchorOverrides",y({})),Qr("layouts",A.none()),Qr("eventOrder",{}),aa("model",{},[Qr("getDisplayText",(e=>void 0!==e.meta&&void 0!==e.meta.text?e.meta.text:e.value)),Qr("selectsOver",!0),Qr("populateFromBrowse",!0)]),bi("onSetValue"),vi("onExecute"),bi("onItemExecute"),Qr("inputClasses",[]),Qr("inputAttributes",{}),Qr("inputStyles",{}),Qr("matchWidth",!0),Qr("useMinWidth",!1),Qr("dismissOnBlur",!0),hi(["openClass"]),$r("initialData"),$r("listRole"),Jp("typeaheadBehaviours",[fd,Zh,Ub,Om,Zb,Gg]),Fr("lazyTypeaheadComp",(()=>ye(A.none))),Fr("previewing",(()=>ye(!0)))].concat(Yx()).concat(wx())),AS=y([Qi({schema:[pi()],name:"menu",overrides:e=>({fakeFocus:!0,onHighlightItem:(t,o,n)=>{e.previewing.get()?e.lazyTypeaheadComp.get().each((t=>{((e,t,o)=>{if(e.selectsOver){const n=Zh.getValue(t),s=e.getDisplayText(n),r=Zh.getValue(o);return 0===e.getDisplayText(r).indexOf(s)?A.some((()=>{kS(0,t,o),((e,t)=>{OS(e,((e,o)=>e.setSelectionRange(t,o.length)))})(t,s.length)})):A.none()}return A.none()})(e.model,t,n).fold((()=>{e.model.selectsOver?(Yd.dehighlight(o,n),e.previewing.set(!0)):e.previewing.set(!1)}),(t=>{t(),e.previewing.set(!1)}))})):e.lazyTypeaheadComp.get().each((t=>{e.model.populateFromBrowse&&kS(e.model,t,n),Ko(n.element,"id").each((e=>qo(t.element,"aria-activedescendant",e)))}))},onExecute:(t,o)=>e.lazyTypeaheadComp.get().map((e=>(Rc(e,TS(),{item:o}),!0))),onHover:(t,o)=>{e.previewing.set(!1),e.lazyTypeaheadComp.get().each((t=>{e.model.populateFromBrowse&&kS(e.model,t,o)}))}})})]),MS=lh({name:"Typeahead",configFields:ES(),partFields:AS(),factory:(e,t,o,n)=>{const s=(t,o,s)=>{e.previewing.set(!1);const r=Gg.getCoupled(t,"sandbox");if(wb.isOpen(r))Pg.getCurrent(r).each((e=>{Yd.getHighlighted(e).fold((()=>{s(e)}),(()=>{Vc(r,e.element,"keydown",o)}))}));else{const o=e=>{Pg.getCurrent(e).each(s)};hx(e,a(t),t,r,n,o,Ac.HighlightMenuAndItem).get(b)}},r=Kx(e),a=e=>t=>t.map((t=>{const o=he(t.menus),n=q(o,(e=>P(e.items,(e=>"item"===e.type))));return Zh.getState(e).update(L(n,(e=>e.data))),t})),i=e=>Pg.getCurrent(e),l="typeaheadevents",c=[fd.config({}),Zh.config({onSetValue:e.onSetValue,store:{mode:"dataset",getDataKey:e=>cs(e.element),getFallbackEntry:e=>({value:e,meta:{}}),setValue:(t,o)=>{ds(t.element,e.model.getDisplayText(o))},...e.initialData.map((e=>ia("initialValue",e))).getOr({})}}),Ub.config({stream:{mode:"throttle",delay:e.responseTime,stopEvent:!1},onStream:(t,o)=>{const s=Gg.getCoupled(t,"sandbox");if(fd.isFocused(t)&&cs(t.element).length>=e.minChars){const o=i(s).bind((e=>Yd.getHighlighted(e).map(Zh.getValue)));e.previewing.set(!0);const r=t=>{i(s).each((t=>{o.fold((()=>{e.model.selectsOver&&Yd.highlightFirst(t)}),(e=>{Yd.highlightBy(t,(t=>Zh.getValue(t).value===e.value)),Yd.getHighlighted(t).orThunk((()=>(Yd.highlightFirst(t),A.none())))}))}))};hx(e,a(t),t,s,n,r,Ac.HighlightJustMenu).get(b)}},cancelEvent:Pa()}),Om.config({mode:"special",onDown:(e,t)=>(s(e,t,Yd.highlightFirst),A.some(!0)),onEscape:e=>{const t=Gg.getCoupled(e,"sandbox");return wb.isOpen(t)?(wb.close(t),A.some(!0)):A.none()},onUp:(e,t)=>(s(e,t,Yd.highlightLast),A.some(!0)),onEnter:t=>{const o=Gg.getCoupled(t,"sandbox"),n=wb.isOpen(o);if(n&&!e.previewing.get())return i(o).bind((e=>Yd.getHighlighted(e))).map((e=>(Rc(t,TS(),{item:e}),!0)));{const s=Zh.getValue(t);return Ic(t,Pa()),e.onExecute(o,t,s),n&&wb.close(o),A.some(!0)}}}),Zb.config({toggleClass:e.markers.openClass,aria:{mode:"expanded"}}),Gg.config({others:{sandbox:t=>yx(e,t,{onOpen:()=>Zb.on(t),onClose:()=>{e.lazyTypeaheadComp.get().each((e=>Qo(e.element,"aria-activedescendant"))),Zb.off(t)}})}}),ud(l,[Jc((t=>{e.lazyTypeaheadComp.set(A.some(t))})),Qc((t=>{e.lazyTypeaheadComp.set(A.none())})),ed((t=>{const o=b;bx(e,a(t),t,n,o,Ac.HighlightMenuAndItem).get(b)})),Wc(TS(),((t,o)=>{const n=Gg.getCoupled(t,"sandbox");kS(e.model,t,o.event.item),Ic(t,Pa()),e.onItemExecute(t,n,o.event.item,Zh.getValue(t)),wb.close(n),_S(t)}))].concat(e.dismissOnBlur?[Wc(Fa(),(e=>{const t=Gg.getCoupled(e,"sandbox");Ho(t.element).isNone()&&wb.close(t)}))]:[]))],d={[Xa()]:[Zh.name(),Ub.name(),l],...e.eventOrder};return{uid:e.uid,dom:Qx(Le(e,{inputAttributes:{role:"combobox","aria-autocomplete":"list","aria-haspopup":"true"}})),behaviours:{...r,...Zp(e.typeaheadBehaviours,c)},eventOrder:d}}});var DS,BS,FS=tinymce.util.Tools.resolve("tinymce.ThemeManager"),IS=tinymce.util.Tools.resolve("tinymce.util.Delay"),RS=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),NS=tinymce.util.Tools.resolve("tinymce.EditorManager"),zS=tinymce.util.Tools.resolve("tinymce.Env");!function(e){e.default="wrap",e.floating="floating",e.sliding="sliding",e.scrolling="scrolling"}(DS||(DS={})),function(e){e.auto="auto",e.top="top",e.bottom="bottom"}(BS||(BS={}));const LS=e=>t=>t.options.get(e),VS=e=>t=>A.from(e(t)),HS=e=>{const t=zS.deviceType.isPhone(),o=zS.deviceType.isTablet()||t,n=e.options.register,s=e=>r(e)||!1===e,a=e=>r(e)||h(e);n("skin",{processor:e=>r(e)||!1===e,default:"oxide"}),n("skin_url",{processor:"string"}),n("height",{processor:a,default:Math.max(e.getElement().offsetHeight,400)}),n("width",{processor:a,default:RS.DOM.getStyle(e.getElement(),"width")}),n("min_height",{processor:"number",default:100}),n("min_width",{processor:"number"}),n("max_height",{processor:"number"}),n("max_width",{processor:"number"}),n("style_formats",{processor:"object[]"}),n("style_formats_merge",{processor:"boolean",default:!1}),n("style_formats_autohide",{processor:"boolean",default:!1}),n("line_height_formats",{processor:"string",default:"1 1.1 1.2 1.3 1.4 1.5 2"}),n("font_family_formats",{processor:"string",default:"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"}),n("font_size_formats",{processor:"string",default:"8pt 10pt 12pt 14pt 18pt 24pt 36pt"}),n("font_size_input_default_unit",{processor:"string",default:"pt"}),n("block_formats",{processor:"string",default:"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre"}),n("content_langs",{processor:"object[]"}),n("removed_menuitems",{processor:"string",default:""}),n("menubar",{processor:e=>r(e)||d(e),default:!t}),n("menu",{processor:"object",default:{}}),n("toolbar",{processor:e=>d(e)||r(e)||l(e)?{value:e,valid:!0}:{valid:!1,message:"Must be a boolean, string or array."},default:!0}),N(9,(e=>{n("toolbar"+(e+1),{processor:"string"})})),n("toolbar_mode",{processor:"string",default:o?"scrolling":"floating"}),n("toolbar_groups",{processor:"object",default:{}}),n("toolbar_location",{processor:"string",default:BS.auto}),n("toolbar_persist",{processor:"boolean",default:!1}),n("toolbar_sticky",{processor:"boolean",default:e.inline}),n("toolbar_sticky_offset",{processor:"number",default:0}),n("fixed_toolbar_container",{processor:"string",default:""}),n("fixed_toolbar_container_target",{processor:"object"}),n("ui_mode",{processor:"string",default:"combined"}),n("file_picker_callback",{processor:"function"}),n("file_picker_validator_handler",{processor:"function"}),n("file_picker_types",{processor:"string"}),n("typeahead_urls",{processor:"boolean",default:!0}),n("anchor_top",{processor:s,default:"#top"}),n("anchor_bottom",{processor:s,default:"#bottom"}),n("draggable_modal",{processor:"boolean",default:!1}),n("statusbar",{processor:"boolean",default:!0}),n("elementpath",{processor:"boolean",default:!0}),n("branding",{processor:"boolean",default:!0}),n("promotion",{processor:"boolean",default:!0}),n("resize",{processor:e=>"both"===e||d(e),default:!zS.deviceType.isTouch()}),n("sidebar_show",{processor:"string"}),n("help_accessibility",{processor:"boolean",default:e.hasPlugin("help")}),n("default_font_stack",{processor:"string[]",default:[]})},PS=LS("readonly"),US=LS("disabled"),WS=LS("height"),$S=LS("width"),GS=VS(LS("min_width")),jS=VS(LS("min_height")),qS=VS(LS("max_width")),XS=VS(LS("max_height")),YS=VS(LS("style_formats")),KS=LS("style_formats_merge"),JS=LS("style_formats_autohide"),QS=LS("content_langs"),ZS=LS("removed_menuitems"),eC=LS("toolbar_mode"),tC=LS("toolbar_groups"),oC=LS("toolbar_location"),nC=LS("fixed_toolbar_container"),sC=LS("fixed_toolbar_container_target"),rC=LS("toolbar_persist"),aC=LS("toolbar_sticky_offset"),iC=LS("menubar"),lC=LS("toolbar"),cC=LS("file_picker_callback"),dC=LS("file_picker_validator_handler"),uC=LS("font_size_input_default_unit"),mC=LS("file_picker_types"),gC=LS("typeahead_urls"),pC=LS("anchor_top"),hC=LS("anchor_bottom"),fC=LS("draggable_modal"),bC=LS("statusbar"),vC=LS("elementpath"),xC=LS("branding"),yC=LS("resize"),wC=LS("paste_as_text"),SC=LS("sidebar_show"),CC=LS("promotion"),kC=LS("help_accessibility"),OC=LS("default_font_stack"),_C=LS("skin"),TC=e=>!1===e.options.get("skin"),EC=e=>!1!==e.options.get("menubar"),AC=e=>{const t=e.options.get("skin_url");if(TC(e))return t;if(t)return e.documentBaseURI.toAbsolute(t);{const t=e.options.get("skin");return NS.baseURL+"/skins/ui/"+t}},MC=e=>e.options.get("line_height_formats").split(" "),DC=e=>{const t=lC(e),o=r(t),n=l(t)&&t.length>0;return!FC(e)&&(n||o||!0===t)},BC=e=>{const t=N(9,(t=>e.options.get("toolbar"+(t+1)))),o=P(t,r);return $e(o.length>0,o)},FC=e=>BC(e).fold((()=>{const t=lC(e);return f(t,r)&&t.length>0}),E),IC=e=>oC(e)===BS.bottom,RC=e=>{if(!e.inline)return A.none();const t=nC(e)??"";if(t.length>0)return Xn(ln(),t);const o=sC(e);return g(o)?A.some(ct(o)):A.none()},NC=e=>e.inline&&RC(e).isSome(),zC=e=>RC(e).getOrThunk((()=>Oo(ko(ct(e.getElement()))))),LC=e=>e.inline&&!EC(e)&&!DC(e)&&!FC(e),VC=e=>(e.options.get("toolbar_sticky")||e.inline)&&!NC(e)&&!LC(e),HC=e=>!NC(e)&&"split"===e.options.get("ui_mode"),PC=e=>{const t=e.options.get("menu");return le(t,(e=>({...e,items:e.items})))};var UC=Object.freeze({__proto__:null,get ToolbarMode(){return DS},get ToolbarLocation(){return BS},register:HS,getSkinUrl:AC,getSkinUrlOption:e=>A.from(e.options.get("skin_url")),isReadOnly:PS,isDisabled:US,getSkin:_C,isSkinDisabled:TC,getHeightOption:WS,getWidthOption:$S,getMinWidthOption:GS,getMinHeightOption:jS,getMaxWidthOption:qS,getMaxHeightOption:XS,getUserStyleFormats:YS,shouldMergeStyleFormats:KS,shouldAutoHideStyleFormats:JS,getLineHeightFormats:MC,getContentLanguages:QS,getRemovedMenuItems:ZS,isMenubarEnabled:EC,isMultipleToolbars:FC,isToolbarEnabled:DC,isToolbarPersist:rC,getMultipleToolbarsOption:BC,getUiContainer:zC,useFixedContainer:NC,isSplitUiMode:HC,getToolbarMode:eC,isDraggableModal:fC,isDistractionFree:LC,isStickyToolbar:VC,getStickyToolbarOffset:aC,getToolbarLocation:oC,isToolbarLocationBottom:IC,getToolbarGroups:tC,getMenus:PC,getMenubar:iC,getToolbar:lC,getFilePickerCallback:cC,getFilePickerTypes:mC,useTypeaheadUrls:gC,getAnchorTop:pC,getAnchorBottom:hC,getFilePickerValidatorHandler:dC,getFontSizeInputDefaultUnit:uC,useStatusBar:bC,useElementPath:vC,promotionEnabled:CC,useBranding:xC,getResize:yC,getPasteAsText:wC,getSidebarShow:SC,useHelpAccessibility:kC,getDefaultFontStack:OC});const WC=["visible","hidden","clip"],$C=e=>et(e).length>0&&!I(WC,e),GC=e=>{if(oo(e)){const t=hn(e,"overflow-x"),o=hn(e,"overflow-y");return $C(t)||$C(o)}return!1},jC=e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen(),qC=(e,t)=>HC(e)?((e,t)=>{const o=us(t,GC),n=0===o.length?_o(t).map(To).map((e=>us(e,GC))).getOr([]):o;return te(n).map((t=>({element:t,others:n.slice(1),isFullscreen:()=>jC(e)})))})(e,t):A.none(),XC=e=>{const t=[...L(e.others,Rs),Ls()];return e.isFullscreen()?Ls():((e,t)=>W(t,((e,t)=>zs(e,t)),e))(Rs(e.element),t)},{entries:YC,setPrototypeOf:KC,isFrozen:JC,getPrototypeOf:QC,getOwnPropertyDescriptor:ZC}=Object;let{freeze:ek,seal:tk,create:ok}=Object,{apply:nk,construct:sk}="undefined"!=typeof Reflect&&Reflect;ek||(ek=function(e){return e}),tk||(tk=function(e){return e}),nk||(nk=function(e,t,o){return e.apply(t,o)}),sk||(sk=function(e,t){return new e(...t)});const rk=yk(Array.prototype.forEach),ak=yk(Array.prototype.lastIndexOf),ik=yk(Array.prototype.pop),lk=yk(Array.prototype.push),ck=yk(Array.prototype.splice),dk=yk(String.prototype.toLowerCase),uk=yk(String.prototype.toString),mk=yk(String.prototype.match),gk=yk(String.prototype.replace),pk=yk(String.prototype.indexOf),hk=yk(String.prototype.trim),fk=yk(Object.prototype.hasOwnProperty),bk=yk(RegExp.prototype.test),vk=(xk=TypeError,function(){for(var e=arguments.length,t=new Array(e),o=0;o1?o-1:0),s=1;s2&&void 0!==arguments[2]?arguments[2]:dk;KC&&KC(e,null);let n=t.length;for(;n--;){let s=t[n];if("string"==typeof s){const e=o(s);e!==s&&(JC(t)||(t[n]=e),s=e)}e[s]=!0}return e}function Sk(e){for(let t=0;t/gm),Lk=tk(/\$\{[\w\W]*/gm),Vk=tk(/^data-[\-\w.\u00B7-\uFFFF]+$/),Hk=tk(/^aria-[\-\w]+$/),Pk=tk(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Uk=tk(/^(?:\w+script|data):/i),Wk=tk(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),$k=tk(/^html$/i),Gk=tk(/^[a-z][.\w]*(-[.\w]+)+$/i);var jk=Object.freeze({__proto__:null,ARIA_ATTR:Hk,ATTR_WHITESPACE:Wk,CUSTOM_ELEMENT:Gk,DATA_ATTR:Vk,DOCTYPE_NAME:$k,ERB_EXPR:zk,IS_ALLOWED_URI:Pk,IS_SCRIPT_OR_DATA:Uk,MUSTACHE_EXPR:Nk,TMPLIT_EXPR:Lk});const qk=function(){return"undefined"==typeof window?null:window};var Xk=function e(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:qk();const o=t=>e(t);if(o.version="3.2.6",o.removed=[],!t||!t.document||9!==t.document.nodeType||!t.Element)return o.isSupported=!1,o;let{document:n}=t;const s=n,r=s.currentScript,{DocumentFragment:a,HTMLTemplateElement:i,Node:l,Element:c,NodeFilter:d,NamedNodeMap:u=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:m,DOMParser:g,trustedTypes:p}=t,h=c.prototype,f=kk(h,"cloneNode"),b=kk(h,"remove"),v=kk(h,"nextSibling"),x=kk(h,"childNodes"),y=kk(h,"parentNode");if("function"==typeof i){const e=n.createElement("template");e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let w,S="";const{implementation:C,createNodeIterator:k,createDocumentFragment:O,getElementsByTagName:_}=n,{importNode:T}=s;let E={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]};o.isSupported="function"==typeof YC&&"function"==typeof y&&C&&void 0!==C.createHTMLDocument;const{MUSTACHE_EXPR:A,ERB_EXPR:M,TMPLIT_EXPR:D,DATA_ATTR:B,ARIA_ATTR:F,IS_SCRIPT_OR_DATA:I,ATTR_WHITESPACE:R,CUSTOM_ELEMENT:N}=jk;let{IS_ALLOWED_URI:z}=jk,L=null;const V=wk({},[...Ok,..._k,...Tk,...Ak,...Dk]);let H=null;const P=wk({},[...Bk,...Fk,...Ik,...Rk]);let U=Object.seal(ok(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),W=null,$=null,G=!0,j=!0,q=!1,X=!0,Y=!1,K=!0,J=!1,Q=!1,Z=!1,ee=!1,te=!1,oe=!1,ne=!0,se=!1,re=!0,ae=!1,ie={},le=null;const ce=wk({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let de=null;const ue=wk({},["audio","video","img","source","image","track"]);let me=null;const ge=wk({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),pe="http://www.w3.org/1998/Math/MathML",he="http://www.w3.org/2000/svg",fe="http://www.w3.org/1999/xhtml";let be=fe,ve=!1,xe=null;const ye=wk({},[pe,he,fe],uk);let we=wk({},["mi","mo","mn","ms","mtext"]),Se=wk({},["annotation-xml"]);const Ce=wk({},["title","style","font","a","script"]);let ke=null;const Oe=["application/xhtml+xml","text/html"];let _e=null,Te=null;const Ee=n.createElement("form"),Ae=function(e){return e instanceof RegExp||e instanceof Function},Me=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!Te||Te!==e){if(e&&"object"==typeof e||(e={}),e=Ck(e),ke=-1===Oe.indexOf(e.PARSER_MEDIA_TYPE)?"text/html":e.PARSER_MEDIA_TYPE,_e="application/xhtml+xml"===ke?uk:dk,L=fk(e,"ALLOWED_TAGS")?wk({},e.ALLOWED_TAGS,_e):V,H=fk(e,"ALLOWED_ATTR")?wk({},e.ALLOWED_ATTR,_e):P,xe=fk(e,"ALLOWED_NAMESPACES")?wk({},e.ALLOWED_NAMESPACES,uk):ye,me=fk(e,"ADD_URI_SAFE_ATTR")?wk(Ck(ge),e.ADD_URI_SAFE_ATTR,_e):ge,de=fk(e,"ADD_DATA_URI_TAGS")?wk(Ck(ue),e.ADD_DATA_URI_TAGS,_e):ue,le=fk(e,"FORBID_CONTENTS")?wk({},e.FORBID_CONTENTS,_e):ce,W=fk(e,"FORBID_TAGS")?wk({},e.FORBID_TAGS,_e):Ck({}),$=fk(e,"FORBID_ATTR")?wk({},e.FORBID_ATTR,_e):Ck({}),ie=!!fk(e,"USE_PROFILES")&&e.USE_PROFILES,G=!1!==e.ALLOW_ARIA_ATTR,j=!1!==e.ALLOW_DATA_ATTR,q=e.ALLOW_UNKNOWN_PROTOCOLS||!1,X=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,Y=e.SAFE_FOR_TEMPLATES||!1,K=!1!==e.SAFE_FOR_XML,J=e.WHOLE_DOCUMENT||!1,ee=e.RETURN_DOM||!1,te=e.RETURN_DOM_FRAGMENT||!1,oe=e.RETURN_TRUSTED_TYPE||!1,Z=e.FORCE_BODY||!1,ne=!1!==e.SANITIZE_DOM,se=e.SANITIZE_NAMED_PROPS||!1,re=!1!==e.KEEP_CONTENT,ae=e.IN_PLACE||!1,z=e.ALLOWED_URI_REGEXP||Pk,be=e.NAMESPACE||fe,we=e.MATHML_TEXT_INTEGRATION_POINTS||we,Se=e.HTML_INTEGRATION_POINTS||Se,U=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&Ae(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(U.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&Ae(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(U.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(U.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Y&&(j=!1),te&&(ee=!0),ie&&(L=wk({},Dk),H=[],!0===ie.html&&(wk(L,Ok),wk(H,Bk)),!0===ie.svg&&(wk(L,_k),wk(H,Fk),wk(H,Rk)),!0===ie.svgFilters&&(wk(L,Tk),wk(H,Fk),wk(H,Rk)),!0===ie.mathMl&&(wk(L,Ak),wk(H,Ik),wk(H,Rk))),e.ADD_TAGS&&(L===V&&(L=Ck(L)),wk(L,e.ADD_TAGS,_e)),e.ADD_ATTR&&(H===P&&(H=Ck(H)),wk(H,e.ADD_ATTR,_e)),e.ADD_URI_SAFE_ATTR&&wk(me,e.ADD_URI_SAFE_ATTR,_e),e.FORBID_CONTENTS&&(le===ce&&(le=Ck(le)),wk(le,e.FORBID_CONTENTS,_e)),re&&(L["#text"]=!0),J&&wk(L,["html","head","body"]),L.table&&(wk(L,["tbody"]),delete W.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw vk('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw vk('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');w=e.TRUSTED_TYPES_POLICY,S=w.createHTML("")}else void 0===w&&(w=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let o=null;const n="data-tt-policy-suffix";t&&t.hasAttribute(n)&&(o=t.getAttribute(n));const s="dompurify"+(o?"#"+o:"");try{return e.createPolicy(s,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+s+" could not be created."),null}}(p,r)),null!==w&&"string"==typeof S&&(S=w.createHTML(""));ek&&ek(e),Te=e}},De=wk({},[..._k,...Tk,...Ek]),Be=wk({},[...Ak,...Mk]),Fe=function(e){lk(o.removed,{element:e});try{y(e).removeChild(e)}catch(t){b(e)}},Ie=function(e,t){try{lk(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){lk(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e)if(ee||te)try{Fe(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Re=function(e){let t=null,o=null;if(Z)e=""+e;else{const t=mk(e,/^[\r\n\t ]+/);o=t&&t[0]}"application/xhtml+xml"===ke&&be===fe&&(e=''+e+"");const s=w?w.createHTML(e):e;if(be===fe)try{t=(new g).parseFromString(s,ke)}catch(e){}if(!t||!t.documentElement){t=C.createDocument(be,"template",null);try{t.documentElement.innerHTML=ve?S:s}catch(e){}}const r=t.body||t.documentElement;return e&&o&&r.insertBefore(n.createTextNode(o),r.childNodes[0]||null),be===fe?_.call(t,J?"html":"body")[0]:J?t.documentElement:r},Ne=function(e){return k.call(e.ownerDocument||e,e,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},ze=function(e){return e instanceof m&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof u)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},Le=function(e){return"function"==typeof l&&e instanceof l};function Ve(e,t,n){rk(e,(e=>{e.call(o,t,n,Te)}))}const He=function(e){let t=null;if(Ve(E.beforeSanitizeElements,e,null),ze(e))return Fe(e),!0;const n=_e(e.nodeName);if(Ve(E.uponSanitizeElement,e,{tagName:n,allowedTags:L}),K&&e.hasChildNodes()&&!Le(e.firstElementChild)&&bk(/<[/\w!]/g,e.innerHTML)&&bk(/<[/\w!]/g,e.textContent))return Fe(e),!0;if(7===e.nodeType)return Fe(e),!0;if(K&&8===e.nodeType&&bk(/<[/\w]/g,e.data))return Fe(e),!0;if(!L[n]||W[n]){if(!W[n]&&Ue(n)){if(U.tagNameCheck instanceof RegExp&&bk(U.tagNameCheck,n))return!1;if(U.tagNameCheck instanceof Function&&U.tagNameCheck(n))return!1}if(re&&!le[n]){const t=y(e)||e.parentNode,o=x(e)||e.childNodes;if(o&&t)for(let n=o.length-1;n>=0;--n){const s=f(o[n],!0);s.__removalCount=(e.__removalCount||0)+1,t.insertBefore(s,v(e))}}return Fe(e),!0}return e instanceof c&&!function(e){let t=y(e);t&&t.tagName||(t={namespaceURI:be,tagName:"template"});const o=dk(e.tagName),n=dk(t.tagName);return!!xe[e.namespaceURI]&&(e.namespaceURI===he?t.namespaceURI===fe?"svg"===o:t.namespaceURI===pe?"svg"===o&&("annotation-xml"===n||we[n]):Boolean(De[o]):e.namespaceURI===pe?t.namespaceURI===fe?"math"===o:t.namespaceURI===he?"math"===o&&Se[n]:Boolean(Be[o]):e.namespaceURI===fe?!(t.namespaceURI===he&&!Se[n])&&!(t.namespaceURI===pe&&!we[n])&&!Be[o]&&(Ce[o]||!De[o]):!("application/xhtml+xml"!==ke||!xe[e.namespaceURI]))}(e)?(Fe(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!bk(/<\/no(script|embed|frames)/i,e.innerHTML)?(Y&&3===e.nodeType&&(t=e.textContent,rk([A,M,D],(e=>{t=gk(t,e," ")})),e.textContent!==t&&(lk(o.removed,{element:e.cloneNode()}),e.textContent=t)),Ve(E.afterSanitizeElements,e,null),!1):(Fe(e),!0)},Pe=function(e,t,o){if(ne&&("id"===t||"name"===t)&&(o in n||o in Ee))return!1;if(j&&!$[t]&&bk(B,t));else if(G&&bk(F,t));else if(!H[t]||$[t]){if(!(Ue(e)&&(U.tagNameCheck instanceof RegExp&&bk(U.tagNameCheck,e)||U.tagNameCheck instanceof Function&&U.tagNameCheck(e))&&(U.attributeNameCheck instanceof RegExp&&bk(U.attributeNameCheck,t)||U.attributeNameCheck instanceof Function&&U.attributeNameCheck(t))||"is"===t&&U.allowCustomizedBuiltInElements&&(U.tagNameCheck instanceof RegExp&&bk(U.tagNameCheck,o)||U.tagNameCheck instanceof Function&&U.tagNameCheck(o))))return!1}else if(me[t]);else if(bk(z,gk(o,R,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==pk(o,"data:")||!de[e])if(q&&!bk(I,gk(o,R,"")));else if(o)return!1;return!0},Ue=function(e){return"annotation-xml"!==e&&mk(e,N)},We=function(e){Ve(E.beforeSanitizeAttributes,e,null);const{attributes:t}=e;if(!t||ze(e))return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:H,forceKeepAttr:void 0};let s=t.length;for(;s--;){const r=t[s],{name:a,namespaceURI:i,value:l}=r,c=_e(a),d=l;let u="value"===a?d:hk(d);if(n.attrName=c,n.attrValue=u,n.keepAttr=!0,n.forceKeepAttr=void 0,Ve(E.uponSanitizeAttribute,e,n),u=n.attrValue,!se||"id"!==c&&"name"!==c||(Ie(a,e),u="user-content-"+u),K&&bk(/((--!?|])>)|<\/(style|title)/i,u)){Ie(a,e);continue}if(n.forceKeepAttr)continue;if(!n.keepAttr){Ie(a,e);continue}if(!X&&bk(/\/>/i,u)){Ie(a,e);continue}Y&&rk([A,M,D],(e=>{u=gk(u,e," ")}));const m=_e(e.nodeName);if(Pe(m,c,u)){if(w&&"object"==typeof p&&"function"==typeof p.getAttributeType)if(i);else switch(p.getAttributeType(m,c)){case"TrustedHTML":u=w.createHTML(u);break;case"TrustedScriptURL":u=w.createScriptURL(u)}if(u!==d)try{i?e.setAttributeNS(i,a,u):e.setAttribute(a,u),ze(e)?Fe(e):ik(o.removed)}catch(t){Ie(a,e)}}else Ie(a,e)}Ve(E.afterSanitizeAttributes,e,null)},$e=function e(t){let o=null;const n=Ne(t);for(Ve(E.beforeSanitizeShadowDOM,t,null);o=n.nextNode();)Ve(E.uponSanitizeShadowNode,o,null),He(o),We(o),o.content instanceof a&&e(o.content);Ve(E.afterSanitizeShadowDOM,t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,c=null;if(ve=!e,ve&&(e="\x3c!--\x3e"),"string"!=typeof e&&!Le(e)){if("function"!=typeof e.toString)throw vk("toString is not a function");if("string"!=typeof(e=e.toString()))throw vk("dirty is not a string, aborting")}if(!o.isSupported)return e;if(Q||Me(t),o.removed=[],"string"==typeof e&&(ae=!1),ae){if(e.nodeName){const t=_e(e.nodeName);if(!L[t]||W[t])throw vk("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof l)n=Re("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),1===r.nodeType&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!ee&&!Y&&!J&&-1===e.indexOf("<"))return w&&oe?w.createHTML(e):e;if(n=Re(e),!n)return ee?null:oe?S:""}n&&Z&&Fe(n.firstChild);const d=Ne(ae?e:n);for(;i=d.nextNode();)He(i),We(i),i.content instanceof a&&$e(i.content);if(ae)return e;if(ee){if(te)for(c=O.call(n.ownerDocument);n.firstChild;)c.appendChild(n.firstChild);else c=n;return(H.shadowroot||H.shadowrootmode)&&(c=T.call(s,c,!0)),c}let u=J?n.outerHTML:n.innerHTML;return J&&L["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&bk($k,n.ownerDocument.doctype.name)&&(u="\n"+u),Y&&rk([A,M,D],(e=>{u=gk(u,e," ")})),w&&oe?w.createHTML(u):u},o.setConfig=function(){Me(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Q=!0},o.clearConfig=function(){Te=null,Q=!1},o.isValidAttribute=function(e,t,o){Te||Me({});const n=_e(e),s=_e(t);return Pe(n,s,o)},o.addHook=function(e,t){"function"==typeof t&&lk(E[e],t)},o.removeHook=function(e,t){if(void 0!==t){const o=ak(E[e],t);return-1===o?void 0:ck(E[e],o,1)[0]}return ik(E[e])},o.removeHooks=function(e){E[e]=[]},o.removeAllHooks=function(){E={afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},o}();const Yk=e=>Xk().sanitize(e);var Kk=tinymce.util.Tools.resolve("tinymce.util.I18n");const Jk={indent:!0,outdent:!0,"table-insert-column-after":!0,"table-insert-column-before":!0,"paste-column-after":!0,"paste-column-before":!0,"unordered-list":!0,"list-bull-circle":!0,"list-bull-disc":!0,"list-bull-default":!0,"list-bull-square":!0},Qk="temporary-placeholder",Zk=e=>()=>fe(e,Qk).getOr("!not found!"),eO=(e,t)=>{const o=e.toLowerCase();if(Kk.isRtl()){const e=((e,t)=>Ze(e,t)?e:((e,t)=>e+t)(e,t))(o,"-rtl");return be(t,e)?e:o}return o},tO=(e,t)=>fe(t,eO(e,t)),oO=(e,t)=>{const o=t();return tO(e,o).getOrThunk(Zk(o))},nO=()=>ud("add-focusable",[Jc((e=>{qn(e.element,"svg").each((e=>qo(e,"focusable","false")))}))]),sO=(e,t,o,n)=>{const s=(e=>!!Kk.isRtl()&&be(Jk,e))(t)?["tox-icon--flip"]:[],r=fe(o,eO(t,o)).or(n).getOrThunk(Zk(o));return{dom:{tag:e.tag,attributes:e.attributes??{},classes:e.classes.concat(s),innerHtml:r},behaviours:rd([...e.behaviours??[],nO()]),eventOrder:e.eventOrder??{}}},rO=(e,t,o,n=A.none())=>sO(t,e,o(),n),aO={success:"checkmark",error:"warning",err:"error",warning:"warning",warn:"warning",info:"info"},iO=ih({name:"Notification",factory:e=>{const t=Ne("notification-text"),o=pv({dom:gv(`

${Yk(e.backstageProvider.translate(e.text))}

`),behaviours:rd([ng.config({})])}),n=e=>({dom:{tag:"div",classes:["tox-bar"],styles:{width:`${e}%`}}}),s=e=>({dom:{tag:"div",classes:["tox-text"],innerHtml:`${e}%`}}),r=pv({dom:{tag:"div",classes:e.progress?["tox-progress-bar","tox-progress-indicator"]:["tox-progress-bar"]},components:[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(0)]},s(0)],behaviours:rd([ng.config({})])}),a={updateProgress:(e,t)=>{e.getSystem().isConnected()&&r.getOpt(e).each((e=>{ng.set(e,[{dom:{tag:"div",classes:["tox-bar-container"]},components:[n(t)]},s(t)])}))},updateText:(e,t)=>{if(e.getSystem().isConnected()){const n=o.get(e);ng.set(n,[Ag(t)])}}},i=j([e.icon.toArray(),[e.level],A.from(aO[e.level]).toArray()]),l=pv(Tv.sketch({dom:{tag:"button",classes:["tox-notification__dismiss","tox-button","tox-button--naked","tox-button--icon"],attributes:{"aria-label":e.backstageProvider.translate("Close")}},components:[rO("close",{tag:"span",classes:["tox-icon"]},e.iconProvider)],buttonBehaviours:rd([Gb.config({}),uv.config({...e.backstageProvider.tooltips.getConfig({tooltipText:e.backstageProvider.translate("Close")})})]),action:t=>{e.onAction(t)}})),c=((e,t,o)=>{const n=o(),s=$(e,(e=>be(n,eO(e,n))));return sO({tag:"div",classes:["tox-notification__icon"]},s.getOr(Qk),n,A.none())})(i,0,e.iconProvider),d=[c,{dom:{tag:"div",classes:["tox-notification__body"]},components:[o.asSpec()],behaviours:rd([ng.config({})])}];return{uid:e.uid,dom:{tag:"div",attributes:{role:"alert","aria-labelledby":t},classes:["tox-notification","tox-notification--in",`tox-notification--${e.level}`]},behaviours:rd([Gb.config({}),fd.config({}),Om.config({mode:"special",onEscape:t=>(e.onAction(t),A.some(!0))})]),components:d.concat(e.progress?[r.asSpec()]:[]).concat([l.asSpec()]),apis:a}},configFields:[oa("level","info",["success","error","warning","warn","info"]),Rr("progress"),$r("icon"),Rr("onAction"),Rr("text"),Rr("iconProvider"),Rr("backstageProvider")],apis:{updateProgress:(e,t,o)=>{e.updateProgress(t,o)},updateText:(e,t,o)=>{e.updateText(t,o)}}});var lO=(e,t,o,n)=>{const s=t.backstage.shared,r=()=>ct(""===e.queryCommandValue("ToggleView")?e.getContentAreaContainer():e.getContainer()),a=()=>{const e=Rs(r());return A.some(e)},i=e=>{a().each((t=>{V(e,(e=>{yn(e.element,"width"),En(e.element)>t.width&&mn(e.element,"width",t.width+"px")}))}))};return{open:(t,l,c)=>{const d=()=>{n.on((t=>{l();const o=c();(e=>{ng.remove(e,u),m()})(t),((t,o)=>{0===vo(t.element).length?((t,o)=>{Xx.hide(t),n.clear(),o&&e.focus()})(t,o):((e,t)=>{t&&Om.focusIn(e)})(t,o)})(t,o)}))},u=Fg(iO.sketch({text:t.text,level:I(["success","error","warning","warn","info"],t.type)?t.type:void 0,progress:!0===t.progressBar,icon:t.icon,onAction:d,iconProvider:s.providers.icons,backstageProvider:s.providers}));if(n.isSet()){const e=Ig(u);n.on((t=>{ng.append(t,e),Xx.reposition(t),u.hasConfigured(Bp)&&Bp.refresh(t),i(t.components())}))}else{const t=Fg(Xx.sketch({dom:{tag:"div",classes:["tox-notifications-container"],attributes:{"aria-label":"Notifications",role:"region"}},lazySink:s.getSink,fireDismissalEventInstead:{},...s.header.isPositionedAtTop()?{}:{fireRepositionEventInstead:{}},inlineBehaviours:rd([Om.config({mode:"cyclic",selector:".tox-notification, .tox-notification a, .tox-notification button"}),ng.config({}),...VC(e)&&s.header.isPositionedAtTop()?[]:[Bp.config({contextual:{lazyContext:()=>A.some(Rs(r())),fadeInClass:"tox-notification-container-dock-fadein",fadeOutClass:"tox-notification-container-dock-fadeout",transitionClass:"tox-notification-container-dock-transition"},modes:["top"],lazyViewport:t=>qC(e,t.element).map((e=>({bounds:XC(e),optScrollEnv:A.some({currentScrollTop:e.element.dom.scrollTop,scrollElmTop:Fn(e.element).top})}))).getOrThunk((()=>({bounds:Ls(),optScrollEnv:A.none()})))})]])})),i=Ig(u),l={maxHeightFunction:kc()},c={...s.anchors.banner(),overrides:l};n.set(t),o.add(t),Xx.showWithinBounds(t,i,{anchor:c},a)}h(t.timeout)&&t.timeout>0&&IS.setEditorTimeout(e,(()=>{d()}),t.timeout);const m=()=>{n.on((e=>{Xx.reposition(e),e.hasConfigured(Bp)&&Bp.refresh(e),i(e.components())}))};return{close:d,reposition:m,text:e=>{iO.updateText(u,e)},settings:t,getEl:()=>u.element.dom,progressBar:{value:e=>{iO.updateProgress(u,e)}}}},close:e=>{e.close()},getArgs:e=>e.settings}};var cO;!function(e){e[e.CLOSE_ON_EXECUTE=0]="CLOSE_ON_EXECUTE",e[e.BUBBLE_TO_SANDBOX=1]="BUBBLE_TO_SANDBOX"}(cO||(cO={}));var dO=cO;const uO="tox-menu-nav__js",mO="tox-collection__item",gO="tox-swatch",pO={normal:uO,color:gO},hO="tox-collection__item--enabled",fO="tox-collection__item-icon",bO="tox-collection__item-label",vO="tox-collection__item-caret",xO="tox-collection__item--active",yO="tox-collection__item-container",wO="tox-collection__item-container--row",SO=e=>fe(pO,e).getOr(uO),CO=e=>"color"===e?"tox-swatches":"tox-menu",kO=e=>({backgroundMenu:"tox-background-menu",selectedMenu:"tox-selected-menu",selectedItem:"tox-collection__item--active",hasIcons:"tox-menu--has-icons",menu:CO(e),tieredMenu:"tox-tiered-menu"}),OO=e=>{const t=kO(e);return{backgroundMenu:t.backgroundMenu,selectedMenu:t.selectedMenu,menu:t.menu,selectedItem:t.selectedItem,item:SO(e)}},_O=(e,t,o)=>{const n=kO(o);return{tag:"div",classes:j([[n.menu,`tox-menu-${t}-column`],e?[n.hasIcons]:[]])}},TO=[Zv.parts.items({})],EO=(e,t,o)=>{const n=kO(o);return{dom:{tag:"div",classes:j([[n.tieredMenu]])},markers:OO(o)}},AO=Ne("refetch-trigger-event"),MO=Ne("redirect-menu-item-interaction"),DO="tox-menu__searcher",BO=e=>Xn(e.element,`.${DO}`).bind((t=>e.getSystem().getByDom(t).toOptional())),FO=BO,IO=e=>({fetchPattern:Zh.getValue(e),selectionStart:e.element.dom.selectionStart,selectionEnd:e.element.dom.selectionEnd}),RO=e=>{const t=(e,t)=>(t.cut(),A.none()),o=(e,t)=>{const o={interactionEvent:t.event,eventType:t.event.raw.type};return Rc(e,MO,o),A.some(!0)},n="searcher-events";return{dom:{tag:"div",classes:[mO]},components:[Zx.sketch({inputClasses:[DO,"tox-textfield"],inputAttributes:{...e.placeholder.map((t=>({placeholder:e.i18n(t)}))).getOr({}),type:"search","aria-autocomplete":"list"},inputBehaviours:rd([ud(n,[Wc(Ca(),(e=>{Ic(e,AO)})),Wc(wa(),((e,t)=>{"Escape"===t.event.raw.key&&t.stop()}))]),Om.config({mode:"special",onLeft:t,onRight:t,onSpace:t,onEnter:o,onEscape:o,onUp:o,onDown:o})]),eventOrder:{keydown:[n,Om.name()]}})]}},NO="tox-collection--results__js",zO=e=>e.dom?{...e,dom:{...e.dom,attributes:{...e.dom.attributes??{},id:Ne("aria-item-search-result-id"),"aria-selected":"false"}}}:e,LO="Use arrow keys to navigate.",VO=(e,t)=>o=>{const n=z(o,t);return L(n,(t=>({dom:e,components:t})))},HO=(e,t)=>{const o=[];let n=[];return V(e,((e,s)=>{t(e,s)?(n.length>0&&o.push(n),n=[],(be(e.dom,"innerHtml")||e.components&&e.components.length>0)&&n.push(e)):n.push(e)})),n.length>0&&o.push(n),L(o,(e=>({dom:{tag:"div",classes:["tox-collection__group"]},components:e})))},PO=(e,t,o)=>Zv.parts.items({preprocess:n=>{const s=L(n,o);return"auto"!==e&&e>1?VO({tag:"div",classes:["tox-collection__group"]},e)(s):HO(s,((e,o)=>"separator"===t[o].type))}}),UO=(e,t,o=!0)=>{return{dom:{tag:"div",classes:["tox-menu","tox-collection"].concat(1===e?["tox-collection--list"]:["tox-collection--grid"]),attributes:{...(n=t,R(n,(e=>"widget"===e.type))?{"aria-label":Kk.translate(LO)}:{})}},components:[PO(e,t,w)]};var n},WO=e=>R(e,(e=>"icon"in e&&void 0!==e.icon)),$O=e=>(console.error(Ar(e)),console.log(e),A.none()),GO=(e,t,o,n,s)=>{const r=(a=o,{dom:{tag:"div",classes:["tox-collection","tox-collection--horizontal"]},components:[Zv.parts.items({preprocess:e=>HO(e,((e,t)=>"separator"===a[t].type))})]});var a;return{value:e,dom:r.dom,components:r.components,items:o}},jO=(e,t,o,n,s)=>{if("color"===s.menuType){const t=(e=>({dom:{tag:"div",classes:["tox-menu","tox-swatches-menu"],attributes:{"aria-label":Kk.translate(LO)}},components:[{dom:{tag:"div",classes:["tox-swatches"]},components:[Zv.parts.items({preprocess:"auto"!==e?VO({tag:"div",classes:["tox-swatches__row"]},e):w})]}]}))(n);return{value:e,dom:t.dom,components:t.components,items:o}}if("imageselector"===s.menuType&&"auto"!==n){const t=(e=>({dom:{tag:"div",classes:["tox-menu","tox-image-selector-menu"]},components:[{dom:{tag:"div",classes:["tox-image-selector"]},components:[Zv.parts.items({preprocess:"auto"!==e?VO({tag:"div",classes:["tox-image-selector__row"]},e):w})]}]}))(n);return{value:e,dom:t.dom,components:t.components,items:o}}if("normal"===s.menuType&&"auto"===n){const t=UO(n,o);return{value:e,dom:t.dom,components:t.components,items:o}}if("normal"===s.menuType||"searchable"===s.menuType){const t="searchable"!==s.menuType?UO(n,o):"search-with-field"===s.searchMode.searchMode?((e,t,o)=>{const n=Ne("aria-controls-search-results");return{dom:{tag:"div",classes:["tox-menu","tox-collection"].concat(1===e?["tox-collection--list"]:["tox-collection--grid"])},components:[RO({i18n:Kk.translate,placeholder:o.placeholder}),{dom:{tag:"div",classes:[...1===e?["tox-collection--list"]:["tox-collection--grid"],NO],attributes:{id:n}},components:[PO(e,t,zO)]}]}})(n,o,s.searchMode):((e,t)=>{const o=Ne("aria-controls-search-results");return{dom:{tag:"div",classes:["tox-menu","tox-collection",NO].concat(1===e?["tox-collection--list"]:["tox-collection--grid"]),attributes:{id:o}},components:[PO(e,t,zO)]}})(n,o);return{value:e,dom:t.dom,components:t.components,items:o}}if("listpreview"===s.menuType&&"auto"!==n){const t=(e=>({dom:{tag:"div",classes:["tox-menu","tox-collection","tox-collection--toolbar","tox-collection--toolbar-lg"]},components:[Zv.parts.items({preprocess:VO({tag:"div",classes:["tox-collection__group"]},e)})]}))(n);return{value:e,dom:t.dom,components:t.components,items:o}}return{value:e,dom:_O(t,n,s.menuType),components:TO,items:o}},qO=Lr("type"),XO=Lr("name"),YO=Lr("label"),KO=Lr("text"),JO=Lr("title"),QO=Lr("icon"),ZO=Lr("url"),e_=Lr("value"),t_=Hr("fetch"),o_=Hr("getSubmenuItems"),n_=Hr("onAction"),s_=Hr("onItemAction"),r_=sa("onSetup",(()=>b)),a_=qr("name"),i_=qr("text"),l_=qr("role"),c_=qr("icon"),d_=qr("tooltip"),u_=qr("chevronTooltip"),m_=qr("label"),g_=qr("shortcut"),p_=Yr("select"),h_=na("active",!1),f_=na("borderless",!1),b_=na("enabled",!0),v_=na("primary",!1),x_=e=>Qr("columns",e),y_=Qr("meta",{}),w_=sa("onAction",b),S_=e=>ta("type",e),C_=e=>Br("name","name",ir((()=>Ne(`${e}-name`))),or),k_=[qO,KO,Vr("level",["info","warn","error","success"]),QO,Qr("url","")],O_=vr(k_),__=[qO,KO,b_,C_("button"),c_,f_,Xr("buttonType",["primary","secondary","toolbar"]),v_,ta("context","mode:design")],T_=vr(__),E_=[qO,XO],A_=E_.concat([m_]),M_=E_.concat([YO,b_,ta("context","mode:design")]),D_=vr(M_),B_=nr,F_=A_.concat([x_("auto"),ta("context","mode:design")]),I_=vr(F_),R_=Sr([e_,KO,QO]),N_=A_.concat([ta("storageKey","default"),ta("context","mode:design")]),z_=vr(N_),L_=or,V_=vr(A_),H_=or,P_=E_.concat([ta("tag","textarea"),Lr("scriptId"),Lr("scriptUrl"),Yr("onFocus"),Zr("settings",void 0,ar)]),U_=E_.concat([ta("tag","textarea"),Hr("init")]),W_=kr((e=>_r("customeditor.old",br(U_),e).orThunk((()=>_r("customeditor.new",br(P_),e))))),$_=or,G_=[b_,i_,l_,g_,Br("value","value",ir((()=>Ne("menuitem-value"))),Zs()),y_,ta("context","mode:design")];const j_=vr([qO,XO].concat(G_)),q_=nr,X_=[C_("button"),c_,oa("align","end",["start","end"]),v_,b_,Xr("buttonType",["primary","secondary"]),ta("context","mode:design")],Y_=[...X_,KO],K_=[Vr("type",["submit","cancel","custom"]),...Y_],J_=[Vr("type",["menu"]),i_,d_,c_,Wr("items",j_),...X_],Q_=[...X_,Vr("type",["togglebutton"]),d_,c_,i_,na("active",!1)],Z_=Mr("type",{submit:K_,cancel:K_,custom:K_,menu:J_,togglebutton:Q_}),eT=A_.concat([ta("context","mode:design"),qr("dropAreaLabel"),qr("buttonLabel"),qr("allowedFileTypes"),Kr("allowedFileExtensions",or)]),tT=vr(eT),oT=xr(Qs),nT=e=>[qO,zr("columns"),e],sT=[qO,Lr("html"),oa("presets","presentation",["presentation","document"]),sa("onInit",b),na("stretched",!1)],rT=vr(sT),aT=A_.concat([na("border",!1),na("sandboxed",!0),na("streamContent",!1),na("transparent",!0)]),iT=vr(aT),lT=or,cT=vr(E_.concat([qr("height")])),dT=vr([Lr("url"),jr("zoom"),jr("cachedWidth"),jr("cachedHeight")]),uT=A_.concat([qr("inputMode"),qr("placeholder"),na("maximized",!1),b_,ta("context","mode:design")]),mT=vr(uT),gT=or,pT=e=>[qO,YO,e,oa("align","start",["start","center","end"]),qr("for")],hT=[KO,e_],fT=[KO,Wr("items",Dr(0,(()=>bT)))],bT=yr([vr(hT),vr(fT)]),vT=A_.concat([Wr("items",bT),b_,ta("context","mode:design")]),xT=vr(vT),yT=or,wT=A_.concat([Ur("items",[KO,e_]),ea("size",1),b_,ta("context","mode:design")]),ST=vr(wT),CT=or,kT=A_.concat([na("constrain",!0),b_,ta("context","mode:design")]),OT=vr(kT),_T=vr([Lr("width"),Lr("height")]),TT=E_.concat([YO,ea("min",0),ea("max",0)]),ET=vr(TT),AT=tr,MT=[qO,Wr("header",or),Wr("cells",xr(or))],DT=vr(MT),BT=A_.concat([qr("placeholder"),na("maximized",!1),b_,ta("context","mode:design"),Gr("spellcheck",nr)]);const FT=vr(BT),IT=or,RT=[ta("buttonType","default"),qr("text"),qr("tooltip"),qr("icon"),Zr("search",!1,yr([nr,vr([qr("placeholder")])],(e=>d(e)?e?A.some({placeholder:A.none()}):A.none():A.some(e)))),Hr("fetch"),sa("onSetup",(()=>b)),ta("context","mode:design")],NT=vr([qO,...RT]),zT=e=>_r("menubutton",NT,e),LT=[Vr("type",["directory","leaf"]),JO,Lr("id"),Gr("menu",NT),qr("customStateIcon"),qr("customStateIconTooltip")],VT=vr(LT),HT=LT.concat([Wr("children",Dr(0,(()=>Cr("type",{directory:PT,leaf:VT}))))]),PT=vr(HT),UT=Cr("type",{directory:PT,leaf:VT}),WT=[qO,Wr("items",UT),Yr("onLeafAction"),Yr("onToggleExpand"),ra("defaultExpandedIds",[],or),qr("defaultSelectedId")],$T=vr(WT),GT=A_.concat([oa("filetype","file",["image","media","file"]),b_,qr("picker_text"),ta("context","mode:design")]),jT=vr(GT),qT=vr([e_,y_]),XT=e=>Br("items","items",{tag:"required",process:{}},xr(kr((t=>_r(`Checking item of ${e}`,YT,t).fold((e=>Ae.error(Ar(e))),(e=>Ae.value(e))))))),YT=hr((()=>{return Cr("type",{alertbanner:O_,bar:vr((e=XT("bar"),[qO,e])),button:T_,checkbox:D_,colorinput:z_,colorpicker:V_,dropzone:tT,grid:vr(nT(XT("grid"))),iframe:iT,input:mT,listbox:xT,selectbox:ST,sizeinput:OT,slider:ET,textarea:FT,urlinput:jT,customeditor:W_,htmlpanel:rT,imagepreview:cT,collection:I_,label:vr(pT(XT("label"))),table:DT,tree:$T,panel:JT});var e})),KT=[qO,Qr("classes",[]),Wr("items",YT)],JT=vr(KT),QT=[C_("tab"),JO,Wr("items",YT)],ZT=[qO,Ur("tabs",QT)],eE=vr(ZT),tE=Y_,oE=Z_,nE=vr([Lr("title"),Nr("body",Cr("type",{panel:JT,tabpanel:eE})),ta("size","normal"),ra("buttons",[],oE),Qr("initialData",{}),sa("onAction",b),sa("onChange",b),sa("onSubmit",b),sa("onClose",b),sa("onCancel",b),sa("onTabChange",b)]),sE=vr([Vr("type",["cancel","custom"]),...tE]),rE=vr([Lr("title"),Lr("url"),jr("height"),jr("width"),Kr("buttons",sE),sa("onAction",b),sa("onCancel",b),sa("onClose",b),sa("onMessage",b)]),aE=e=>a(e)?[e].concat(q(he(e),aE)):l(e)?q(e,aE):[],iE=e=>r(e.type)&&r(e.name),lE={checkbox:B_,colorinput:L_,colorpicker:H_,dropzone:oT,input:gT,iframe:lT,imagepreview:dT,selectbox:CT,sizeinput:_T,slider:AT,listbox:yT,size:_T,textarea:IT,urlinput:qT,customeditor:$_,collection:R_,togglemenuitem:q_},cE=e=>{const t=(e=>P(aE(e),iE))(e),o=q(t,(e=>(e=>A.from(lE[e.type]))(e).fold((()=>[]),(t=>[Nr(e.name,t)]))));return vr(o)},dE=e=>({internalDialog:Tr(_r("dialog",nE,e)),dataValidator:cE(e),initialData:e.initialData??{}}),uE={open:(e,t)=>{const o=dE(t);return e(o.internalDialog,o.initialData,o.dataValidator)},openUrl:(e,t)=>e(Tr(_r("dialog",rE,t))),redial:e=>dE(e)},mE=vr([qO,i_]),gE=vr([S_("autocompleteitem"),h_,b_,y_,e_,i_,c_]);vr([qO,Lr("trigger"),ea("minChars",1),x_(1),ea("maxResults",10),Yr("matches"),t_,n_,ra("highlightOn",[],or)]);const pE=[b_,d_,c_,i_,r_,ta("context","mode:design")],hE=vr([qO,n_,g_].concat(pE)),fE=e=>_r("toolbarbutton",hE,e),bE=[h_].concat(pE),vE=vr(bE.concat([qO,n_,g_])),xE=e=>_r("ToggleButton",vE,e),yE=[sa("predicate",T),oa("scope","node",["node","editor"]),oa("position","selection",["node","selection","line"])],wE=pE.concat([S_("contextformbutton"),ta("align","end"),v_,n_,Fr("original",w)]),SE=bE.concat([S_("contextformbutton"),ta("align","end"),v_,n_,Fr("original",w)]),CE=pE.concat([S_("contextformbutton")]),kE=bE.concat([S_("contextformtogglebutton")]),OE=[m_,Wr("commands",Mr("type",{contextformbutton:wE,contextformtogglebutton:SE})),Gr("launch",Mr("type",{contextformbutton:CE,contextformtogglebutton:kE})),sa("onInput",b),sa("onSetup",b)],_E=[...yE,...OE,Vr("type",["contextform"]),sa("initValue",y("")),qr("placeholder")],TE=[...yE,...OE,Vr("type",["contextsliderform"]),sa("initValue",y(0)),sa("min",y(0)),sa("max",y(100))],EE=[...yE,...OE,Vr("type",["contextsizeinputform"]),sa("initValue",y({width:"",height:""}))],AE=Mr("type",{contextform:_E,contextsliderform:TE,contextsizeinputform:EE}),ME=pE.concat([S_("contexttoolbarbutton")]),DE=vr([S_("contexttoolbar"),Jr("launch",ME),Nr("items",yr([or,Sr([qr("name"),qr("label"),Wr("items",or)])]))].concat(yE)),BE=e=>({name:e.name.getOrUndefined(),label:e.label.getOrUndefined(),items:e.items}),FE=[qO,Lr("src"),qr("alt"),ra("classes",[],or)],IE=vr(FE),RE=[qO,KO,a_,ra("classes",["tox-collection__item-label"],or)],NE=vr(RE),zE=hr((()=>Cr("type",{cardimage:IE,cardtext:NE,cardcontainer:LE}))),LE=vr([qO,ta("direction","horizontal"),ta("align","left"),ta("valign","middle"),Wr("items",zE)]),VE=vr([qO,m_,Wr("items",zE),r_,w_].concat(G_)),HE=vr([qO,h_,c_,m_].concat(G_)),PE=[qO,Lr("fancytype"),w_],UE=[Qr("initData",{})].concat(PE),WE=[Yr("select"),aa("initData",{},[na("allowCustomColors",!0),ta("storageKey","default"),Kr("colors",Zs())])].concat(PE),$E=[Yr("select"),Pr("initData",[zr("columns"),ra("items",[],Zs())])].concat(PE),GE=Mr("fancytype",{inserttable:UE,colorswatch:WE,imageselect:$E}),jE=vr([qO,h_,ZO,m_,d_].concat(G_)),qE=vr([qO,h_,QO,YO,d_,e_].concat(G_)),XE=vr([qO,r_,w_,c_].concat(G_)),YE=vr([qO,o_,r_,c_].concat(G_)),KE=vr([qO,c_,h_,r_,n_].concat(G_)),JE=vr([c_,d_,sa("onShow",b),sa("onHide",b),r_]),QE=vr([qO,Nr("items",yr([Sr([XO,Wr("items",or)]),or]))].concat(pE)),ZE=vr([qO,d_,u_,c_,i_,p_,t_,r_,oa("presets","normal",["normal","color","listpreview"]),x_(1),n_,s_,ta("context","mode:design")]),eA=[i_,c_,qr("tooltip"),oa("buttonType","secondary",["primary","secondary"]),na("borderless",!1),Hr("onAction"),ta("context","mode:design")],tA={button:[...eA,KO,Vr("type",["button"])],togglebutton:[...eA,na("active",!1),Vr("type",["togglebutton"])]},oA=[Vr("type",["group"]),ra("buttons",[],Mr("type",tA))],nA=Mr("type",{...tA,group:oA}),sA=vr([ra("buttons",[],nA),Hr("onShow"),Hr("onHide")]),rA=(e,t,o)=>{const n=ms(e.element,"."+o);if(n.length>0){const e=G(n,(e=>{const o=e.dom.getBoundingClientRect().top,s=n[0].dom.getBoundingClientRect().top;return Math.abs(o-s)>t})).getOr(n.length);return A.some({numColumns:e,numRows:Math.ceil(n.length/e)})}return A.none()},aA=e=>((e,t)=>rd([ud(e,t)]))(Ne("unnamed-events"),e),iA=e=>rp.config({disabled:e,disableClass:"tox-collection__item--state-disabled"}),lA=e=>rp.config({disabled:e}),cA=e=>rp.config({disabled:e,disableClass:"tox-tbtn--disabled",useNative:!1}),dA=(e,t)=>{const o=e.getApi(t);return e=>{e(o)}},uA=(e,t)=>Jc((o=>{p(e.onBeforeSetup)&&e.onBeforeSetup(o),dA(e,o)((o=>{const n=e.onSetup(o);p(n)&&t.set(n)}))})),mA=(e,t)=>Qc((o=>dA(e,o)(t.get()))),gA=(e,t,o)=>Qc((n=>(o.set(Zh.getValue(n)),dA(e,n)(t.get())))),pA="silver.uistate",hA="setDisabled",fA="init",bA=["switchmode",fA],vA=(e,t)=>{const o=e.mainUi.outerContainer,n=[e.mainUi.mothership,...e.uiMotherships];t===hA&&V(n,(e=>{e.broadcastOn([Td()],{target:o.element})})),V(n,(e=>{e.broadcastOn([pA],t)}))},xA=(e,t)=>{e.on("init SwitchMode",(e=>{vA(t,e.type)})),e.on("DisabledStateChange",(o=>{if(!o.isDefaultPrevented()){const n=o.state?hA:fA;vA(t,n),o.state||e.nodeChanged()}})),e.on("NodeChange",(o=>{const n=e.ui.isEnabled()?o.type:hA;vA(t,n)})),PS(e)&&e.mode.set("readonly")},yA=e=>ab.config({channels:{[pA]:{onReceive:(t,o)=>{if(o===hA||"setEnabled"===o)return void rp.set(t,o===hA);const{contextType:n,shouldDisable:s}=e();("mode"!==n||I(bA,o))&&rp.set(t,s)}}}}),wA=(e,t)=>ed(((o,n)=>{dA(e,o)(e.onAction),e.triggersSubmenu||t!==dO.CLOSE_ON_EXECUTE||(o.getSystem().isConnected()&&Ic(o,Ha()),n.stop())})),SA={[Na()]:["disabling","alloy.base.behaviour","toggling","item-events"]},CA=Pe,kA=(e,t,o,n)=>{const s=ye(b);return{type:"item",dom:t.dom,components:CA(t.optComponents),data:e.data,eventOrder:SA,hasSubmenu:e.triggersSubmenu,itemBehaviours:rd([ud("item-events",[wA(e,o),uA(e,s),mA(e,s)]),iA((()=>!e.enabled||n.checkUiComponentContext(e.context).shouldDisable)),yA((()=>n.checkUiComponentContext(e.context))),ng.config({})].concat(e.itemBehaviours))}},OA=e=>({value:e.value,meta:{text:e.text.getOr(""),...e.meta}}),_A=(e,t)=>{const o=it("div");return os(o,"tox-image-selector-loading-spinner"),{dom:{tag:e.tag,attributes:e.attributes??{},classes:e.classes},components:[{dom:{tag:"div",classes:["tox-image-selector-image-wrapper"]},components:[{dom:{tag:"img",attributes:{src:t},classes:["tox-image-selector-image-img"]}}]},...e.checkMark.toArray()],behaviours:rd([...e.behaviours??[],ud("render-image-events",[Jc((e=>{var t;t=e.element,os(t,"tox-image-selector-loading-spinner-wrapper"),$o(t,o),Xn(e.element,"img").each((t=>{sn(t).catch((e=>{console.error(e)})).finally((()=>{(e=>{ss(e,"tox-image-selector-loading-spinner-wrapper"),en(o)})(e.element)}))}))}))])])}},TA=e=>{const t=zS.os.isMacOS()||zS.os.isiOS(),o=t?{alt:"\u2325",ctrl:"\u2303",shift:"\u21e7",meta:"\u2318",access:"\u2303\u2325"}:{meta:"Ctrl",access:"Shift+Alt"},n=e.split("+"),s=L(n,(e=>{const t=e.toLowerCase().trim();return be(o,t)?o[t]:e}));return t?s.join(""):s.join("+")},EA=(e,t,o=[fO])=>rO(e,{tag:"div",classes:o},t),AA=e=>({dom:{tag:"div",classes:[bO]},components:[Ag(Kk.translate(e))]}),MA=(e,t)=>({dom:{tag:"div",classes:t,innerHtml:e}}),DA=(e,t)=>({dom:{tag:"div",classes:[bO]},components:[{dom:{tag:e.tag,styles:e.styles},components:[Ag(Kk.translate(t))]}]}),BA=e=>({dom:{tag:"div",classes:["tox-collection__item-accessory"]},components:[Ag(TA(e))]}),FA=e=>EA("checkmark",e,["tox-collection__item-checkmark"]),IA=(e,t)=>{const o=e.map((e=>({attributes:{id:Ne("menu-item"),"aria-label":Kk.translate(e)}}))).getOr({});return{tag:"div",classes:[uO,mO].concat(t),...o}},RA=e=>({dom:{tag:"label"},components:[Ag(e)]}),NA=(e,t,o,n=A.none())=>"color"===e.presets?((e,t,o)=>{const n=e.value,s=e.iconContent.map((e=>((e,t,o)=>{const n=t();return tO(e,n).or(o).getOrThunk(Zk(n))})(e,t.icons,o))),r=e.ariaLabel.map((e=>({"aria-label":t.translate(e),"data-mce-name":e}))).getOr({});return{dom:(()=>{const e=gO,t=s.getOr(""),o={tag:"div",attributes:r,classes:[e]};return"custom"===n?{...o,tag:"button",classes:[...o.classes,"tox-swatches__picker-btn"],innerHtml:t}:"remove"===n?{...o,classes:[...o.classes,"tox-swatch--remove"],innerHtml:t}:g(n)?{...o,attributes:{...o.attributes,"data-mce-color":n},styles:{"background-color":n},innerHtml:t}:o})(),optComponents:[]}})(e,t,n):"img"===e.presets?(e=>{var t,o;return{dom:IA(e.ariaLabel,["tox-collection__item-image-selector"]),optComponents:[A.some((t=e.iconContent.getOrDie(),o={tag:"div",classes:["tox-collection__item-image"],checkMark:e.checkMark},_A(o,t))),e.labelContent.map(RA)]}})(e):((e,t,o,n)=>{const s={tag:"div",classes:[fO]},r=o?e.iconContent.map((e=>rO(e,s,t.icons,n))).orThunk((()=>A.some({dom:s}))):A.none(),a=e.checkMark,i=A.from(e.meta).fold((()=>AA),(e=>be(e,"style")?C(DA,e.style):AA)),l=e.htmlContent.fold((()=>e.textContent.map(i)),(e=>A.some(MA(e,[bO]))));return{dom:IA(e.ariaLabel,[]),optComponents:[r,l,e.shortcutContent.map(BA),a,e.caret,e.labelContent.map(RA)]}})(e,t,o,n),zA=(e,t,o)=>fe(e,"tooltipWorker").map((e=>[uv.config({lazySink:t.getSink,tooltipDom:{tag:"div",classes:["tox-tooltip-worker-container"]},tooltipComponents:[],anchor:e=>({type:"submenu",item:e,overrides:{maxHeightFunction:kc}}),mode:"follow-highlight",onShow:(t,o)=>{e((e=>{uv.setComponents(t,[Mg({element:ct(e)})])}))}})])).getOrThunk((()=>o.map((e=>[uv.config({...t.providers.tooltips.getConfig({tooltipText:e}),mode:"follow-highlight"})])).getOr([]))),LA=(e,t)=>{const o=(e=>RS.DOM.encode(e))(Kk.translate(e));if(t.length>0){const e=new RegExp((e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"))(t),"gi");return o.replace(e,(e=>`${e}`))}return o},VA=(e,t)=>L(e,(e=>{switch(e.type){case"cardcontainer":return((e,t)=>{const o="vertical"===e.direction?"tox-collection__item-container--column":wO,n="left"===e.align?"tox-collection__item-container--align-left":"tox-collection__item-container--align-right";return{dom:{tag:"div",classes:[yO,o,n,(()=>{switch(e.valign){case"top":return"tox-collection__item-container--valign-top";case"middle":return"tox-collection__item-container--valign-middle";case"bottom":return"tox-collection__item-container--valign-bottom"}})()]},components:t}})(e,VA(e.items,t));case"cardimage":return((e,t,o)=>({dom:{tag:"img",classes:t,attributes:{src:e,alt:o.getOr("")}}}))(e.src,e.classes,e.alt);case"cardtext":const o=e.name.exists((e=>I(t.cardText.highlightOn,e))),n=o?A.from(t.cardText.matchText).getOr(""):"";return MA(LA(e.text,n),e.classes)}})),HA=(e,t,o,n,s,r,a,i=!0)=>{const l=NA({presets:o,textContent:t?e.text:A.none(),htmlContent:A.none(),labelContent:e.label,ariaLabel:e.text,iconContent:e.icon,shortcutContent:t?e.shortcut:A.none(),checkMark:t?A.some(FA(a.icons)):A.none(),caret:A.none(),value:e.value},a,i),c=e.text.filter(y(!t)).map((e=>uv.config(a.tooltips.getConfig({tooltipText:a.translate(e)}))));return Le(kA({context:e.context,data:OA(e),enabled:e.enabled,getApi:e=>({setActive:t=>{Zb.set(e,t)},isActive:()=>Zb.isOn(e),isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t)}),onAction:t=>n(e.value),onSetup:e=>(e.setActive(s),b),triggersSubmenu:!1,itemBehaviours:[...c.toArray()]},l,r,a),{toggling:{toggleClass:hO,toggleOnExecute:!1,selected:e.active,exclusive:!0}})},PA=e=>({value:GA(e)}),UA=/^#?([a-f\d])([a-f\d])([a-f\d])$/i,WA=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i,$A=e=>UA.test(e)||WA.test(e),GA=e=>Ke(e,"#").toUpperCase(),jA=e=>{const t=e.toString(16);return(1===t.length?"0"+t:t).toUpperCase()},qA=e=>{const t=jA(e.red)+jA(e.green)+jA(e.blue);return PA(t)},XA=(e,t,o)=>({hue:e,saturation:t,value:o}),YA=e=>{let t=0,o=0,n=0;const s=e.red/255,r=e.green/255,a=e.blue/255,i=Math.min(s,Math.min(r,a)),l=Math.max(s,Math.max(r,a));return i===l?(n=i,XA(0,0,100*n)):(t=s===i?3:a===i?1:5,t=60*(t-(s===i?r-a:a===i?s-r:a-s)/(l-i)),o=(l-i)/l,n=l,XA(Math.round(t),Math.round(100*o),Math.round(100*n)))},KA=Math.min,JA=Math.max,QA=Math.round,ZA=/^\s*rgb\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*\)\s*$/i,eM=/^\s*rgba\s*\(\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*(\d+)\s*[,\s]\s*((?:\d?\.\d+|\d+)%?)\s*\)\s*$/i,tM=(e,t,o,n)=>({red:e,green:t,blue:o,alpha:n}),oM=e=>{const t=parseInt(e,10);return t.toString()===e&&t>=0&&t<=255},nM=e=>{let t,o,n;const s=(e.hue||0)%360;let r=e.saturation/100,a=e.value/100;if(r=JA(0,KA(r,1)),a=JA(0,KA(a,1)),0===r)return t=o=n=QA(255*a),tM(t,o,n,1);const i=s/60,l=a*r,c=l*(1-Math.abs(i%2-1)),d=a-l;switch(Math.floor(i)){case 0:t=l,o=c,n=0;break;case 1:t=c,o=l,n=0;break;case 2:t=0,o=l,n=c;break;case 3:t=0,o=c,n=l;break;case 4:t=c,o=0,n=l;break;case 5:t=l,o=0,n=c;break;default:t=o=n=0}return t=QA(255*(t+d)),o=QA(255*(o+d)),n=QA(255*(n+d)),tM(t,o,n,1)},sM=e=>{const t=(e=>{const t=(e=>{const t=e.value.replace(UA,((e,t,o,n)=>t+t+o+o+n+n));return{value:t}})(e),o=WA.exec(t.value);return null===o?["FFFFFF","FF","FF","FF"]:o})(e),o=parseInt(t[1],16),n=parseInt(t[2],16),s=parseInt(t[3],16);return tM(o,n,s,1)},rM=(e,t,o,n)=>{const s=parseInt(e,10),r=parseInt(t,10),a=parseInt(o,10),i=parseFloat(n);return tM(s,r,a,i)},aM=e=>{const t=ZA.exec(e);if(null!==t)return A.some(rM(t[1],t[2],t[3],"1"));const o=eM.exec(e);return null!==o?A.some(rM(o[1],o[2],o[3],o[4])):A.none()},iM=e=>`rgba(${e.red},${e.green},${e.blue},${e.alpha})`,lM=tM(255,0,0,1),cM=e=>qA(nM(e)),dM=(e,t)=>{e.dispatch("ResizeContent",t)},uM=(e,t)=>{e.dispatch("TextColorChange",t)},mM=(e,t)=>e.dispatch("ResolveName",{name:t.nodeName.toLowerCase(),target:t}),gM=e=>{e.dispatch("ContextToolbarClose")},pM=(e,t)=>()=>{e(),t()},hM=(e,t=E)=>bM(e,"NodeChange",(o=>{o.setEnabled(e.selection.isEditable()&&t())})),fM=(e,t)=>o=>{const n=hM(e)(o),s=((e,t)=>o=>{const n=qe(),s=()=>{o.setActive(e.formatter.match(t));const s=e.formatter.formatChanged(t,o.setActive);n.set(s)};return e.initialized?s():e.once("init",s),()=>{e.off("init",s),n.clear()}})(e,t)(o);return()=>{n(),s()}},bM=(e,t,o)=>n=>{const s=()=>o(n),r=()=>{o(n),e.on(t,s)};return e.initialized?r():e.once("init",r),()=>{e.off("init",r),e.off(t,s)}},vM=e=>t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand("mceToggleFormat",!1,t.format)}))},xM=(e,t)=>()=>e.execCommand(t);var yM=tinymce.util.Tools.resolve("tinymce.util.LocalStorage");const wM={},SM=e=>fe(wM,e).getOrThunk((()=>{const t=`tinymce-custom-colors-${e}`,o=yM.getItem(t);if(m(o)){const e=yM.getItem("tinymce-custom-colors");yM.setItem(t,g(e)?e:"[]")}const n=((e,t=10)=>{const o=yM.getItem(e),n=r(o)?JSON.parse(o):[],s=t-(a=n).length<0?a.slice(0,t):a;var a;const i=e=>{s.splice(e,1)};return{add:o=>{((e,t)=>{const o=F(e,t);return-1===o?A.none():A.some(o)})(s,o).each(i),s.unshift(o),s.length>t&&s.pop(),yM.setItem(e,JSON.stringify(s))},state:()=>s.slice(0)}})(t,10);return wM[e]=n,n})),CM=(e,t)=>{SM(e).add(t)},kM="forecolor",OM="hilitecolor",_M=e=>{const t=[];for(let o=0;ot=>t.options.get(e),EM="#000000",AM=(e,t)=>t===kM&&e.options.isSet("color_map_foreground")?TM("color_map_foreground")(e):t===OM&&e.options.isSet("color_map_background")?TM("color_map_background")(e):e.options.isSet("color_map_raw")?TM("color_map_raw")(e):TM("color_map")(e),MM=(e,t="default")=>Math.max(5,Math.ceil(Math.sqrt(AM(e,t).length))),DM=(e,t)=>{const o=TM("color_cols")(e),n=MM(e,t);return o===MM(e)?n:o},BM=(e,t="default")=>Math.round(t===kM?TM("color_cols_foreground")(e):t===OM?TM("color_cols_background")(e):TM("color_cols")(e)),FM=TM("custom_colors"),IM=TM("color_default_foreground"),RM=TM("color_default_background"),NM=(e,t)=>{const o=ct(e.selection.getStart()),n="hilitecolor"===t?bs(o,(e=>{if(no(e)){const t=hn(e,"background-color");return $e((e=>aM(e).exists((e=>0!==e.alpha)))(t),t)}return A.none()})).getOr("rgba(0, 0, 0, 0)"):hn(o,"color");return aM(n).map((e=>"#"+qA(e).value))},zM=e=>{const t="choiceitem",o={type:t,text:"Remove color",icon:"color-swatch-remove-color",value:"remove"};return e?[o,{type:t,text:"Custom color",icon:"color-picker",value:"custom"}]:[o]},LM=(e,t,o,n)=>{"custom"===o?qM(e)((o=>{o.each((o=>{CM(t,o),e.execCommand("mceApplyTextcolor",t,o),n(o)}))}),NM(e,t).getOr(EM)):"remove"===o?(n(""),e.execCommand("mceRemoveTextcolor",t)):(n(o),e.execCommand("mceApplyTextcolor",t,o))},VM=(e,t,o)=>e.concat((e=>L(SM(e).state(),(e=>({type:"choiceitem",text:e,icon:"checkmark",value:e}))))(t).concat(zM(o))),HM=(e,t,o)=>n=>{n(VM(e,t,o))},PM=(e,t,o)=>{const n="forecolor"===t?"tox-icon-text-color__color":"tox-icon-highlight-bg-color__color";e.setIconFill(n,o)},UM=(e,t)=>{e.setTooltip(t)},WM=(e,t)=>o=>{const n=NM(e,t);return He(n,o.toUpperCase())},$M=(e,t,o)=>{if(ot(o))return"forecolor"===t?"Text color":"Background color";const n="forecolor"===t?"Text color {0}":"Background color {0}",s=VM(AM(e,t),t,!1),r=$(s,(e=>e.value===o)).getOr({text:""}).text;return e.translate([n,e.translate(r)])},GM=(e,t,o,n)=>{e.ui.registry.addSplitButton(t,{tooltip:$M(e,o,n.get()),chevronTooltip:"forecolor"===t?"Text color menu":"Background color menu",presets:"color",icon:"forecolor"===t?"text-color":"highlight-bg-color",select:WM(e,o),columns:BM(e,o),fetch:HM(AM(e,o),o,FM(e)),onAction:t=>{LM(e,o,n.get(),b)},onItemAction:(s,r)=>{LM(e,o,r,(o=>{n.set(o),uM(e,{name:t,color:o})}))},onSetup:s=>{PM(s,t,n.get());const r=n=>{n.name===t&&(PM(s,n.name,n.color),UM(s,$M(e,o,n.color)))};return e.on("TextColorChange",r),pM(hM(e)(s),(()=>{e.off("TextColorChange",r)}))}})},jM=(e,t,o,n,s)=>{e.ui.registry.addNestedMenuItem(t,{text:n,icon:"forecolor"===t?"text-color":"highlight-bg-color",onSetup:n=>(UM(n,$M(e,o,s.get())),PM(n,t,s.get()),hM(e)(n)),getSubmenuItems:()=>[{type:"fancymenuitem",fancytype:"colorswatch",select:WM(e,o),initData:{storageKey:o},onAction:n=>{LM(e,o,n.value,(o=>{s.set(o),uM(e,{name:t,color:o})}))}}]})},qM=e=>(t,o)=>{let n=!1;const s={colorpicker:o};e.windowManager.open({title:"Color Picker",size:"normal",body:{type:"panel",items:[{type:"colorpicker",name:"colorpicker",label:"Color"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:s,onAction:(e,t)=>{"hex-valid"===t.name&&(n=t.value)},onSubmit:o=>{const s=o.getData().colorpicker;n?(t(A.from(s)),o.close()):e.windowManager.alert(e.translate(["Invalid hex color code: {0}",s]))},onClose:b,onCancel:()=>{t(A.none())}})},XM=(e,t,o,n,s,r,a,i)=>{const l=WO(t),c=YM(t,o,n,"color"!==s?"normal":"color",r,a,i);return jO(e,l,c,n,{menuType:s})},YM=(e,t,o,n,s,r,a)=>Pe(L(e,(i=>{return"choiceitem"===i.type?(l=i,_r("choicemenuitem",HE,l)).fold($O,(i=>A.some(HA(i,1===o,n,t,r(i.value),s,a,WO(e))))):"imageitem"===i.type?(e=>_r("imagemenuitem",jE,e))(i).fold($O,(e=>A.some(((e,t,o,n,s)=>{const r=NA({presets:"img",textContent:A.none(),htmlContent:A.none(),ariaLabel:e.tooltip,iconContent:A.some(e.url),labelContent:e.label,shortcutContent:A.none(),checkMark:A.some(FA(s.icons)),caret:A.none(),value:e.value},s,!0),a=e.tooltip.map((e=>uv.config(s.tooltips.getConfig({tooltipText:s.translate(e)}))));return Le(kA({context:e.context,data:OA(e),enabled:e.enabled,getApi:e=>({setActive:t=>{Zb.set(e,t)},isActive:()=>Zb.isOn(e),isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t)}),onAction:o=>{t(e.value),o.setActive(!0)},onSetup:e=>(e.setActive(o),b),triggersSubmenu:!1,itemBehaviours:[...a.toArray()]},r,n,s),{toggling:{toggleClass:hO,toggleOnExecute:!1,selected:e.active,exclusive:!0}})})(e,t,r(e.value),s,a)))):"resetimage"===i.type?(e=>_r("resetimageitem",qE,e))(i).fold($O,(i=>A.some(HA({...i,type:"choiceitem",text:i.tooltip,icon:A.some(i.icon),label:A.some(i.label)},1===o,n,t,r(i.value),s,a,WO(e))))):A.none();var l}))),KM=(e,t)=>{const o=OO(t);return 1===e?{mode:"menu",moveOnTab:!0}:"auto"===e?{mode:"grid",selector:"."+o.item,initSize:{numColumns:1,numRows:1}}:{mode:"matrix",rowSelector:"."+{color:"tox-swatches__row",imageselector:"tox-image-selector__row",listpreview:"tox-collection__group",normal:"tox-collection__group"}[t],previousSelector:e=>"color"===t?Xn(e.element,"[aria-checked=true]"):A.none()}},JM=Ne("cell-over"),QM=Ne("cell-execute"),ZM=(e,t,o)=>{const n=o=>Rc(o,QM,{row:e,col:t}),s=(e,t)=>{t.stop(),n(e)};return Fg({dom:{tag:"div",attributes:{role:"button","aria-label":o}},behaviours:rd([ud("insert-table-picker-cell",[Wc(va(),fd.focus),Wc(Na(),n),Wc(Oa(),s),Wc(La(),s)]),Zb.config({toggleClass:"tox-insert-table-picker__selected",toggleOnExecute:!1}),fd.config({onFocus:o=>Rc(o,JM,{row:e,col:t})})])})},eD=e=>q(e,(e=>L(e,Ig))),tD=(e,t)=>Ag(`${t}x${e}`),oD={inserttable:(e,t)=>{const o=(e=>(t,o)=>e.shared.providers.translate(["{0} columns, {1} rows",o,t]))(t),n=(e=>{const t=[];for(let o=0;o<10;o++){const n=[];for(let t=0;t<10;t++){const s=e(o+1,t+1);n.push(ZM(o,t,s))}t.push(n)}return t})(o),s=tD(0,0),r=pv({dom:{tag:"span",classes:["tox-insert-table-picker__label"]},components:[s],behaviours:rd([ng.config({})])});return{type:"widget",data:{value:Ne("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[ey.widget({dom:{tag:"div",classes:["tox-insert-table-picker"]},components:eD(n).concat(r.asSpec()),behaviours:rd([ud("insert-table-picker",[Jc((e=>{ng.set(r.get(e),[s])})),qc(JM,((e,t,o)=>{const{row:s,col:a}=o.event;((e,t,o)=>{for(let n=0;n<10;n++)for(let s=0;s<10;s++)Zb.set(e[n][s],n<=t&&s<=o)})(n,s,a),ng.set(r.get(e),[tD(s+1,a+1)])})),qc(QM,((t,o,n)=>{const{row:s,col:r}=n.event;Ic(t,Ha()),e.onAction({numRows:s+1,numColumns:r+1})}))]),Om.config({initSize:{numRows:10,numColumns:10},mode:"flatgrid",selector:'[role="button"]'})])})]}},colorswatch:(e,t)=>{const o=((e,t)=>{const o=e.initData.allowCustomColors&&t.colorinput.hasCustomColors();return e.initData.colors.fold((()=>VM(t.colorinput.getColors(e.initData.storageKey),e.initData.storageKey,o)),(e=>e.concat(zM(o))))})(e,t),n=t.colorinput.getColorCols(e.initData.storageKey),s="color",r=XM(Ne("menu-value"),o,(t=>{e.onAction({value:t})}),n,s,dO.CLOSE_ON_EXECUTE,e.select.getOr(T),t.shared.providers),a={...r,markers:OO(s),movement:KM(n,s),showMenuRole:!1};return{type:"widget",data:{value:Ne("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem"]},autofocus:!0,components:[ey.widget(Zv.sketch(a))]}},imageselect:(e,t)=>{const o="imageselector",n=e.initData.columns,s=XM(Ne("menu-value"),e.initData.items,(t=>{e.onAction({value:t})}),n,o,dO.CLOSE_ON_EXECUTE,e.select.getOr(T),t.shared.providers),r={...s,markers:OO(o),movement:KM(n,o),showMenuRole:!1};return{type:"widget",data:{value:Ne("widget-id")},dom:{tag:"div",classes:["tox-fancymenuitem","tox-collection--toolbar"]},autofocus:!0,components:[ey.widget(Zv.sketch(r))]}}},nD=e=>({type:"separator",dom:{tag:"div",classes:[mO,"tox-collection__group-heading"]},components:e.text.map(Ag).toArray()}),sD=(e,t,o)=>{FO(e).each((e=>{var n;((e,t)=>{Ko(t.element,"id").each((t=>qo(e.element,"aria-activedescendant",t)))})(e,o),(rs((n=t).element,NO)?A.some(n.element):Xn(n.element,"."+NO)).each((t=>{Ko(t,"id").each((t=>qo(e.element,"aria-controls",t)))}))})),qo(o.element,"aria-selected","true")},rD=(e,t,o)=>{qo(o.element,"aria-selected","false")},aD=e=>Gg.getExistingCoupled(e,"sandbox").bind(BO).map(IO).map((e=>e.fetchPattern)).getOr("");var iD;!function(e){e[e.ContentFocus=0]="ContentFocus",e[e.UiFocus=1]="UiFocus"}(iD||(iD={}));const lD=(e,t,o,n,s)=>{const r=o.shared.providers,a=e=>s?{...e,shortcut:A.none(),icon:e.text.isSome()?A.none():e.icon}:e;switch(e.type){case"menuitem":return(i=e,_r("menuitem",XE,i)).fold($O,(e=>A.some(((e,t,o,n=!0)=>{const s=NA({presets:"normal",iconContent:e.icon,textContent:e.text,htmlContent:A.none(),labelContent:A.none(),ariaLabel:e.text,caret:A.none(),checkMark:A.none(),shortcutContent:e.shortcut},o,n);return kA({context:e.context,data:OA(e),getApi:e=>({isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t)}),enabled:e.enabled,onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:[]},s,t,o)})(a(e),t,r,n))));case"nestedmenuitem":return(e=>_r("nestedmenuitem",YE,e))(e).fold($O,(e=>A.some(((e,t,o,n=!0,s=!1)=>{const r=s?(a=o.icons,EA("chevron-down",a,[vO])):(e=>EA("chevron-right",e,[vO]))(o.icons);var a;const i=NA({presets:"normal",iconContent:e.icon,textContent:e.text,htmlContent:A.none(),ariaLabel:e.text,labelContent:A.none(),caret:A.some(r),checkMark:A.none(),shortcutContent:e.shortcut},o,n);return kA({context:e.context,data:OA(e),getApi:e=>({isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t),setIconFill:(t,o)=>{Xn(e.element,`svg path[class="${t}"], rect[class="${t}"]`).each((e=>{qo(e,"fill",o)}))},setTooltip:t=>{const n=o.translate(t);qo(e.element,"aria-label",n)}}),enabled:e.enabled,onAction:b,onSetup:e.onSetup,triggersSubmenu:!0,itemBehaviours:[]},i,t,o)})(a(e),t,r,n,s))));case"togglemenuitem":return(e=>_r("togglemenuitem",KE,e))(e).fold($O,(e=>A.some(((e,t,o,n=!0)=>{const s=NA({iconContent:e.icon,textContent:e.text,htmlContent:A.none(),labelContent:A.none(),ariaLabel:e.text,checkMark:A.some(FA(o.icons)),caret:A.none(),shortcutContent:e.shortcut,presets:"normal",meta:e.meta},o,n);return Le(kA({context:e.context,data:OA(e),enabled:e.enabled,getApi:e=>({setActive:t=>{Zb.set(e,t)},isActive:()=>Zb.isOn(e),isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t)}),onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:[]},s,t,o),{toggling:{toggleClass:hO,toggleOnExecute:!1,selected:e.active},role:e.role.getOrUndefined()})})(a(e),t,r,n))));case"separator":return(e=>_r("separatormenuitem",mE,e))(e).fold($O,(e=>A.some(nD(e))));case"fancymenuitem":return(e=>_r("fancymenuitem",GE,e))(e).fold($O,(e=>((e,t)=>fe(oD,e.fancytype).map((o=>o(e,t))))(e,o)));default:return console.error("Unknown item in general menu",e),A.none()}var i},cD=(e,t,o,n,s,r,a)=>{const i=1===n,l=!i||WO(e);return Pe(L(e,(e=>{switch(e.type){case"separator":return(n=e,_r("Autocompleter.Separator",mE,n)).fold($O,(e=>A.some(nD(e))));case"cardmenuitem":return(e=>_r("cardmenuitem",VE,e))(e).fold($O,(e=>A.some(((e,t,o,n)=>{const s={dom:IA(e.label,[]),optComponents:[A.some({dom:{tag:"div",classes:[yO,wO]},components:VA(e.items,n)})]};return kA({context:"mode:design",data:OA({text:A.none(),...e}),enabled:e.enabled,getApi:e=>({isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>{rp.set(e,!t),V(ms(e.element,"*"),(o=>{e.getSystem().getByDom(o).each((e=>{e.hasConfigured(rp)&&rp.set(e,!t)}))}))}}),onAction:e.onAction,onSetup:e.onSetup,triggersSubmenu:!1,itemBehaviours:A.from(n.itemBehaviours).getOr([])},s,t,o.providers)})({...e,onAction:t=>{e.onAction(t),o(e.value,e.meta)}},s,r,{itemBehaviours:zA(e.meta,r,A.none()),cardText:{matchText:t,highlightOn:a}}))));default:return(e=>_r("Autocompleter.Item",gE,e))(e).fold($O,(e=>A.some(((e,t,o,n,s,r,a,i=!0)=>{const l=NA({presets:n,textContent:A.none(),htmlContent:o?e.text.map((e=>LA(e,t))):A.none(),ariaLabel:e.text,labelContent:A.none(),iconContent:e.icon,shortcutContent:A.none(),checkMark:A.none(),caret:A.none(),value:e.value},a.providers,i,e.icon),c=e.text.filter((e=>!o&&""!==e));return kA({context:"mode:design",data:OA(e),enabled:e.enabled,getApi:y({}),onAction:t=>s(e.value,e.meta),onSetup:y(b),triggersSubmenu:!1,itemBehaviours:zA(e,a,c)},l,r,a.providers)})(e,t,i,"normal",o,s,r,l))))}var n})))},dD=(e,t,o,n,s,r)=>{const a=WO(t),i=Pe(L(t,(e=>{const t=e=>lD(e,o,n,(e=>s?!be(e,"text"):a)(e),s);return"nestedmenuitem"===e.type&&e.getSubmenuItems().length<=0?t({...e,enabled:!1}):t(e)}))),l=(e=>"no-search"===e.searchMode?{menuType:"normal"}:{menuType:"searchable",searchMode:e})(r);return(s?GO:jO)(e,a,i,1,l)},uD=e=>ix.singleData(e.value,e),mD=e=>vs(ct(e.startContainer),e.startOffset,ct(e.endContainer),e.endOffset),gD=(e,t)=>{const o=Ne("autocompleter"),n=ye(!1),s=ye(!1),r=Xe(),a=Fg(Xx.sketch({dom:{tag:"div",classes:["tox-autocompleter"],attributes:{id:o}},components:[],fireDismissalEventInstead:{},inlineBehaviours:rd([ud("dismissAutocompleter",[Wc(Ya(),(()=>u())),Wc(oi(),((t,o)=>{Ko(o.event.target,"id").each((t=>qo(ct(e.getBody()),"aria-activedescendant",t)))}))])]),lazySink:t.getSink})),i=()=>Xx.isOpen(a),l=s.get,c=()=>{if(i()){Xx.hide(a),e.dom.remove(o,!1);const t=ct(e.getBody());Ko(t,"aria-owns").filter((e=>e===o)).each((()=>{Qo(t,"aria-owns"),Qo(t,"aria-activedescendant")}))}},d=()=>Xx.getContent(a).bind((e=>ee(e.components(),0))),u=()=>e.execCommand("mceAutocompleterClose"),m=s=>{const i=(o=>{const s=se(o,(e=>A.from(e.columns))).getOr(1);return q(o,(o=>{const a=o.items;return cD(a,o.matchText,((t,s)=>{const a={hide:()=>u(),reload:t=>{c(),e.execCommand("mceAutocompleterReload",!1,{fetchOptions:t})}};e.execCommand("mceAutocompleterRefreshActiveRange"),r.get().each((e=>{n.set(!0),o.onAction(a,e,t,s),n.set(!1)}))}),s,dO.BUBBLE_TO_SANDBOX,t,o.highlightOn)}))})(s);i.length>0?(((t,o)=>{const n=se(t,(e=>A.from(e.columns))).getOr(1);Xx.showMenuAt(a,{anchor:{type:"selection",getSelection:()=>r.get().map(mD),root:ct(e.getBody())}},((e,t,o,n)=>{const s=KM(t,n),r=OO(n);return{data:uD({...e,movement:s,menuBehaviours:aA("auto"!==t?[]:[Jc(((e,t)=>{rA(e,4,r.item).each((({numColumns:t,numRows:o})=>{Om.setGridSize(e,o,t)}))}))])}),menu:{markers:OO(n),fakeFocus:o===iD.ContentFocus}}})(jO("autocompleter-value",!0,o,n,{menuType:"normal"}),n,iD.ContentFocus,"normal")),d().each(Yd.highlightFirst)})(s,i),qo(ct(e.getBody()),"aria-owns",o),e.inline||g()):c()},g=()=>{e.dom.get(o)&&e.dom.remove(o,!1);const t=e.getDoc().documentElement,n=e.selection.getNode(),s=(e=>tn(e,!0))(a.element);gn(s,{border:"0",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0",position:"absolute",width:"1px",top:`${n.offsetTop}px`,left:`${n.offsetLeft}px`}),e.dom.add(t,s.dom),Xn(s,'[role="menu"]').each((e=>{yn(e,"position"),yn(e,"max-height")}))};e.on("AutocompleterStart",(({lookupData:e})=>{s.set(!0),n.set(!1),m(e)})),e.on("AutocompleterUpdate",(({lookupData:e})=>m(e))),e.on("AutocompleterUpdateActiveRange",(({range:e})=>r.set(e))),e.on("AutocompleterEnd",(()=>{c(),s.set(!1),n.set(!1),r.clear()}));((e,t)=>{const o=(e,t)=>{Rc(e,wa(),{raw:t})},n=()=>e.getMenu().bind(Yd.getHighlighted);t.on("keydown",(t=>{const s=t.which;e.isActive()&&(e.isMenuOpen()?13===s?(n().each(Nc),t.preventDefault()):40===s?(n().fold((()=>{e.getMenu().each(Yd.highlightFirst)}),(e=>{o(e,t)})),t.preventDefault(),t.stopImmediatePropagation()):37!==s&&38!==s&&39!==s||n().each((e=>{o(e,t),t.preventDefault(),t.stopImmediatePropagation()})):13!==s&&38!==s&&40!==s||e.cancelIfNecessary())})),t.on("NodeChange",(()=>{!e.isActive()||e.isProcessingAction()||t.queryCommandState("mceAutoCompleterInRange")||e.cancelIfNecessary()}))})({cancelIfNecessary:u,isMenuOpen:i,isActive:l,isProcessingAction:n.get,getMenu:d},e)};var pD=tinymce.util.Tools.resolve("tinymce.html.Entities");const hD=(e,t,o,n)=>{const s=fD(e,t,o,n);return Ux.sketch(s)},fD=(e,t,o,n)=>({dom:bD(o),components:e.toArray().concat([t]),fieldBehaviours:rd(n)}),bD=e=>({tag:"div",classes:["tox-form__group"].concat(e)}),vD=(e,t)=>Ux.parts.label({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e))]}),xD=Ne("form-component-change"),yD=Ne("form-component-input"),wD=Ne("form-close"),SD=Ne("form-cancel"),CD=Ne("form-action"),kD=Ne("form-submit"),OD=Ne("form-block"),_D=Ne("form-unblock"),TD=Ne("form-tabchange"),ED=Ne("form-resize"),AD=(e,t,o)=>{const n=e.label.map((e=>vD(e,t))),s=t.icons(),r=e=>(t,o)=>{Yn(o.event.target,"[data-collection-item-value]").each((n=>{e(t,o,n,Yo(n,"data-collection-item-value"))}))},a=r(((o,n,s,r)=>{n.stop(),t.checkUiComponentContext("mode:design").shouldDisable||t.isDisabled()||Rc(o,CD,{name:e.name,value:r})})),i=[Wc(va(),r(((e,t,o)=>{No(o,!0)}))),Wc(Oa(),a),Wc(La(),a),Wc(xa(),r(((e,t,o)=>{Xn(e.element,"."+xO).each((e=>{ss(e,xO)})),os(o,xO)}))),Wc(ya(),r((e=>{Xn(e.element,"."+xO).each((e=>{ss(e,xO),zo(e)}))}))),ed(r(((t,o,n,s)=>{Rc(t,CD,{name:e.name,value:s})})))],l=(e,t)=>L(ms(e.element,".tox-collection__item"),t),c=Ux.parts.field({dom:{tag:"div",classes:["tox-collection"].concat(1!==e.columns?["tox-collection--grid"]:["tox-collection--list"])},components:[],factory:{sketch:w},behaviours:rd([rp.config({disabled:()=>t.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{l(e,(e=>{os(e,"tox-collection__item--state-disabled"),qo(e,"aria-disabled",!0)}))},onEnabled:e=>{l(e,(e=>{ss(e,"tox-collection__item--state-disabled"),Qo(e,"aria-disabled")}))}}),yA((()=>t.checkUiComponentContext(e.context))),ng.config({}),uv.config({...t.tooltips.getConfig({tooltipText:"",onShow:e=>{Xn(e.element,"."+xO+"[data-mce-tooltip]").each((o=>{Ko(o,"data-mce-tooltip").each((o=>{uv.setComponents(e,t.tooltips.getComponents({tooltipText:o}))}))}))}}),mode:"children-keyboard-focus",anchor:e=>({type:"node",node:Xn(e.element,"."+xO).orThunk((()=>xt(".tox-collection__item"))),root:e.element,layouts:{onLtr:y([jl,Gl,Pl,Wl,Ul,$l]),onRtl:y([jl,Gl,Pl,Wl,Ul,$l])},bubble:wl(0,-2,{})})}),Zh.config({store:{mode:"memory",initialValue:o.getOr([])},onSetValue:(o,n)=>{((o,n)=>{const r=t.checkUiComponentContext("mode:design").shouldDisable||t.isDisabled()?" tox-collection__item--state-disabled":"",a=L(n,(t=>{const o=Kk.translate(t.text),n=1===e.columns?`
${o}
`:"",a=`
${(e=>s[e]??e)(t.icon)}
`,i={_:" "," - ":" ","-":" "},l=o.replace(/\_| \- |\-/g,(e=>i[e]));return`
${a}${n}
`})),i="auto"!==e.columns&&e.columns>1?z(a,e.columns):[a],l=L(i,(e=>`
${e.join("")}
`));nn(o.element,l.join(""))})(o,n),"auto"===e.columns&&rA(o,5,"tox-collection__item").each((({numRows:e,numColumns:t})=>{Om.setGridSize(o,e,t)})),Ic(o,ED)}}),Gb.config({}),Om.config((d=e.columns,1===d?{mode:"menu",moveOnTab:!1,selector:".tox-collection__item"}:"auto"===d?{mode:"flatgrid",selector:".tox-collection__item",initSize:{numColumns:1,numRows:1}}:{mode:"matrix",selectors:{row:".tox-collection__group",cell:`.${mO}`}})),ud("collection-events",i)]),eventOrder:{[Na()]:["disabling","alloy.base.behaviour","collection-events"],[xa()]:["collection-events","tooltipping"]}});var d;return hD(n,c,["tox-form__group--collection"],[])},MD=Ne("color-input-change"),DD=Ne("color-swatch-change"),BD=Ne("color-picker-cancel"),FD=()=>Pg.config({find:A.some}),ID=e=>Pg.config({find:t=>xo(t.element,e).bind((e=>t.getSystem().getByDom(e).toOptional()))}),RD=vr([Qr("preprocess",w),Qr("postprocess",w)]),ND=(e,t)=>{const o=Er("RepresentingConfigs.memento processors",RD,t);return Zh.config({store:{mode:"manual",getValue:t=>{const n=e.get(t),s=Zh.getValue(n);return o.postprocess(s)},setValue:(t,n)=>{const s=o.preprocess(n),r=e.get(t);Zh.setValue(r,s)}}})},zD=(e,t,o)=>Zh.config({store:{mode:"manual",...e.map((e=>({initialValue:e}))).getOr({}),getValue:t,setValue:o}}),LD=(e,t,o)=>zD(e,(e=>t(e.element)),((e,t)=>o(e.element,t))),VD=e=>Zh.config({store:{mode:"memory",initialValue:e}}),HD=Ne("rgb-hex-update"),PD=Ne("slider-update"),UD=Ne("palette-update"),WD=Ne("valid-input"),$D=Ne("invalid-input"),GD=Ne("validating-input"),jD="colorcustom.rgb.",qD={isEnabled:E,setEnabled:b,immediatelyShow:b,immediatelyHide:b},XD=(e,t,o,n,s,r)=>{const a=(e,t)=>{const o=t.get();e!==o.isEnabled()&&(o.setEnabled(e),e?o.immediatelyShow():o.immediatelyHide())},i=(o,n,s)=>ef.config({invalidClass:t("invalid"),notify:{onValidate:e=>{Rc(e,GD,{type:o})},onValid:e=>{a(!1,s),Rc(e,WD,{type:o,value:Zh.getValue(e)})},onInvalid:e=>{a(!0,s),Rc(e,$D,{type:o,value:Zh.getValue(e)})}},validator:{validate:t=>{const o=Zh.getValue(t),s=n(o)?Ae.value(!0):Ae.error(e("aria.input.invalid"));return _e(s)},validateOnLoad:!1}}),l=(o,n,a,l,c)=>{const d=ye(qD),u=e(jD+"range"),m=Ux.parts.label({dom:{tag:"label"},components:[Ag(a)]}),g=Ux.parts.field({data:c,factory:Zx,inputAttributes:{type:"text","aria-label":l,..."hex"===n?{"aria-live":"polite"}:{}},inputClasses:[t("textfield")],inputBehaviours:rd([i(n,o,d),Gb.config({}),uv.config({...s({tooltipText:"",onSetup:e=>{d.set({isEnabled:()=>uv.isEnabled(e),setEnabled:t=>uv.setEnabled(e,t),immediatelyShow:()=>uv.immediateOpenClose(e,!0),immediatelyHide:()=>uv.immediateOpenClose(e,!1)}),uv.setEnabled(e,!1)},onShow:(o,s)=>{uv.setComponents(o,[{dom:{tag:"p",classes:[t("rgb-warning-note")]},components:[Ag(e("hex"===n?"colorcustom.rgb.invalidHex":"colorcustom.rgb.invalid"))]}])}})})]),onSetValue:e=>{ef.isInvalid(e)&&ef.run(e).get(b)}}),p=Ne("aria-invalid"),h=pv(r("invalid",A.some(p),"warning")),f=[m,g,pv({dom:{tag:"div",classes:[t("invalid-icon")]},components:[h.asSpec()]}).asSpec()],v="hex"!==n?[Ux.parts["aria-descriptor"]({text:u})]:[],x=f.concat(v);return{dom:{tag:"div",attributes:{role:"presentation"},classes:[t("rgb-container")]},components:x}},c=(e,t)=>{const o=t.red,n=t.green,s=t.blue;Zh.setValue(e,{red:o,green:n,blue:s})},d=pv({dom:{tag:"div",classes:[t("rgba-preview")],styles:{"background-color":"white"},attributes:{role:"presentation"}}}),u=(e,t)=>{d.getOpt(e).each((e=>{mn(e.element,"background-color","#"+t.value)}))},m=ih({factory:()=>{const s={red:ye(A.some(255)),green:ye(A.some(255)),blue:ye(A.some(255)),hex:ye(A.some("ffffff"))},r=e=>s[e].get(),a=(e,t)=>{s[e].set(t)},i=e=>{const t=e.red,o=e.green,n=e.blue;a("red",A.some(t)),a("green",A.some(o)),a("blue",A.some(n))},m=(e,t)=>{const o=t.event;"hex"!==o.type?a(o.type,A.none()):n(e)},g=(e,t)=>{const n=t.event;(e=>"hex"===e.type)(n)?((e,t)=>{o(e);const n=PA(t);a("hex",A.some(n.value));const s=sM(n);c(e,s),i(s),Rc(e,HD,{hex:n}),u(e,n)})(e,n.value):((e,t,o)=>{const n=parseInt(o,10);a(t,A.some(n)),r("red").bind((e=>r("green").bind((t=>r("blue").map((o=>tM(e,t,o,1))))))).each((t=>{const o=((e,t)=>{const o=qA(t);return Ax.getField(e,"hex").each((t=>{fd.isFocused(t)||Zh.setValue(e,{hex:o.value})})),o})(e,t);Rc(e,HD,{hex:o}),u(e,o)}))})(e,n.type,n.value)},p=t=>({label:e(jD+t+".label"),description:e(jD+t+".description")}),h=p("red"),f=p("green"),b=p("blue"),v=p("hex");return Le(Ax.sketch((o=>({dom:{tag:"form",classes:[t("rgb-form")],attributes:{"aria-label":e("aria.color.picker")}},components:[o.field("red",Ux.sketch(l(oM,"red",h.label,h.description,255))),o.field("green",Ux.sketch(l(oM,"green",f.label,f.description,255))),o.field("blue",Ux.sketch(l(oM,"blue",b.label,b.description,255))),o.field("hex",Ux.sketch(l($A,"hex",v.label,v.description,"ffffff"))),d.asSpec()],formBehaviours:rd([ef.config({invalidClass:t("form-invalid")}),ud("rgb-form-events",[Wc(WD,g),Wc($D,m),Wc(GD,m)])])}))),{apis:{updateHex:(e,t)=>{Zh.setValue(e,{hex:t.value}),((e,t)=>{const o=sM(t);c(e,o),i(o)})(e,t),u(e,t)}}})},name:"RgbForm",configFields:[],apis:{updateHex:(e,t,o)=>{e.updateHex(t,o)}},extraApis:{}});return m},YD=(e,t,o,n)=>{const s=ih({name:"ColourPicker",configFields:[Rr("dom"),Qr("onValidHex",b),Qr("onInvalidHex",b)],factory:s=>{const r=XD(e,t,s.onValidHex,s.onInvalidHex,o,n),a=((e,t)=>{const o=Pw.parts.spectrum({dom:{tag:"canvas",attributes:{role:"presentation"},classes:[t("sv-palette-spectrum")]}}),n=Pw.parts.thumb({dom:{tag:"div",attributes:{role:"presentation"},classes:[t("sv-palette-thumb")],innerHtml:``}}),s=(e,t)=>{const{width:o,height:n}=e,s=e.getContext("2d");if(null===s)return;s.fillStyle=t,s.fillRect(0,0,o,n);const r=s.createLinearGradient(0,0,o,0);r.addColorStop(0,"rgba(255,255,255,1)"),r.addColorStop(1,"rgba(255,255,255,0)"),s.fillStyle=r,s.fillRect(0,0,o,n);const a=s.createLinearGradient(0,0,0,n);a.addColorStop(0,"rgba(0,0,0,0)"),a.addColorStop(1,"rgba(0,0,0,1)"),s.fillStyle=a,s.fillRect(0,0,o,n)},r=ih({factory:r=>{const a=y({x:0,y:0}),i=rd([Pg.config({find:A.some}),fd.config({})]);return Pw.sketch({dom:{tag:"div",attributes:{role:"slider","aria-valuetext":e(["Saturation {0}%, Brightness {1}%",0,0])},classes:[t("sv-palette")]},model:{mode:"xy",getInitialValue:a},rounded:!1,components:[o,n],onChange:(t,o,n)=>{h(n)||qo(t.element,"aria-valuetext",e(["Saturation {0}%, Brightness {1}%",Math.floor(n.x),Math.floor(100-n.y)])),Rc(t,UD,{value:n})},onInit:(e,t,o,n)=>{s(o.element.dom,iM(lM))},sliderBehaviours:i})},name:"SaturationBrightnessPalette",configFields:[],apis:{setHue:(e,t,o)=>{((e,t)=>{const o=e.components()[0].element.dom,n=XA(t,100,100),r=nM(n);s(o,iM(r))})(t,o)},setThumb:(t,o,n)=>{((t,o)=>{const n=YA(sM(o));Pw.setValue(t,{x:n.saturation,y:100-n.value}),qo(t.element,"aria-valuetext",e(["Saturation {0}%, Brightness {1}%",n.saturation,n.value]))})(o,n)}},extraApis:{}});return r})(e,t),i={paletteRgba:ye(lM),paletteHue:ye(0)},l=pv(((e,t)=>{const o=Pw.parts.spectrum({dom:{tag:"div",classes:[t("hue-slider-spectrum")],attributes:{role:"presentation"}}}),n=Pw.parts.thumb({dom:{tag:"div",classes:[t("hue-slider-thumb")],attributes:{role:"presentation"}}});return Pw.sketch({dom:{tag:"div",classes:[t("hue-slider")],attributes:{role:"slider","aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":120}},rounded:!1,model:{mode:"y",getInitialValue:y(0)},components:[o,n],sliderBehaviours:rd([fd.config({})]),onChange:(e,t,o)=>{qo(e.element,"aria-valuenow",Math.floor(360-3.6*o)),Rc(e,PD,{value:o})}})})(0,t)),c=pv(a.sketch({})),d=pv(r.sketch({})),u=(e,t,o)=>{c.getOpt(e).each((e=>{a.setHue(e,o)}))},m=(e,t)=>{d.getOpt(e).each((e=>{r.updateHex(e,t)}))},g=(e,t,o)=>{l.getOpt(e).each((e=>{Pw.setValue(e,(e=>100-e/360*100)(o))}))},p=(e,t)=>{c.getOpt(e).each((e=>{a.setThumb(e,t)}))},f=(e,t,o,n)=>{((e,t)=>{const o=sM(e);i.paletteRgba.set(o),i.paletteHue.set(t)})(t,o),V(n,(n=>{n(e,t,o)}))};return{uid:s.uid,dom:s.dom,components:[c.asSpec(),l.asSpec(),d.asSpec()],behaviours:rd([ud("colour-picker-events",[Wc(HD,(()=>{const e=[u,g,p];return(t,o)=>{const n=o.event.hex,s=(e=>YA(sM(e)))(n);f(t,n,s.hue,e)}})()),Wc(UD,(()=>{const e=[m];return(t,o)=>{const n=o.event.value,s=i.paletteHue.get(),r=XA(s,n.x,100-n.y),a=cM(r);f(t,a,s,e)}})()),Wc(PD,(()=>{const e=[u,m];return(t,o)=>{const n=(e=>(100-e)/100*360)(o.event.value),s=i.paletteRgba.get(),r=YA(s),a=XA(n,r.saturation,r.value),l=cM(a);f(t,l,n,e)}})())]),Pg.config({find:e=>d.getOpt(e)}),Om.config({mode:"acyclic"})])}}});return s},KD={"colorcustom.rgb.red.label":"R","colorcustom.rgb.red.description":"Red channel","colorcustom.rgb.green.label":"G","colorcustom.rgb.green.description":"Green channel","colorcustom.rgb.blue.label":"B","colorcustom.rgb.blue.description":"Blue channel","colorcustom.rgb.hex.label":"#","colorcustom.rgb.hex.description":"Hex color code","colorcustom.rgb.range":"Range 0 to 255","colorcustom.rgb.invalid":"Numbers only, 0 to 255","colorcustom.rgb.invalidHex":"Hexadecimal only, 000000 to FFFFFF","aria.color.picker":"Color Picker","aria.input.invalid":"Invalid input"};var JD=tinymce.util.Tools.resolve("tinymce.Resource");const QD=e=>be(e,"init");var ZD=tinymce.util.Tools.resolve("tinymce.util.Tools");const eB=Ne("browse.files.event"),tB=(e,t,o)=>{const n=(e,t)=>{t.stop()},s=e=>(t,o)=>{V(e,(e=>{e(t,o)}))},r=pv({dom:{tag:"input",attributes:{type:"file",accept:e.allowedFileTypes.getOr("image/*")},styles:{display:"none"}},behaviours:rd([ud("input-file-events",[Xc(Oa()),Xc(La())])])}),a=e.label.map((e=>vD(e,t))),i=Ux.parts.field({factory:Tv,dom:{tag:"button",styles:{position:"relative"},classes:["tox-button","tox-button--secondary"]},components:[Ag(t.translate(e.buttonLabel.getOr("Browse for an image"))),r.asSpec()],action:e=>{r.get(e).element.dom.click()},buttonBehaviours:rd([FD(),VD(o.getOr([])),Gb.config({}),lA((()=>t.checkUiComponentContext(e.context).shouldDisable)),yA((()=>t.checkUiComponentContext(e.context)))])}),l={dom:{tag:"div",classes:["tox-dropzone-container"]},behaviours:rd([rp.config({disabled:()=>t.checkUiComponentContext(e.context).shouldDisable}),yA((()=>t.checkUiComponentContext(e.context))),Zb.config({toggleClass:"dragenter",toggleOnExecute:!1}),ud("dropzone-events",[Wc("dragenter",s([n,Zb.toggle])),Wc("dragleave",s([n,Zb.toggle])),Wc("dragover",n),Wc("drop",s([n,(e,t)=>{if(!rp.isDisabled(e)){const o=t.event.raw;Rc(e,eB,{files:o.dataTransfer?.files})}}])),Wc(ka(),((e,t)=>{const o=t.event.raw.target;Rc(e,eB,{files:o.files})}))])]),components:[{dom:{tag:"div",classes:["tox-dropzone"],styles:{}},components:[{dom:{tag:"p"},components:[Ag(t.translate(e.dropAreaLabel.getOr("Drop an image here")))]},i]}]};return hD(a,l,["tox-form__group--stretched"],[ud("handle-files",[Wc(eB,((o,n)=>{Ux.getField(o).each((o=>{var s,r;s=o,(r=n.event.files)&&(Zh.setValue(s,((e,t,o)=>{const n=ZD.explode(t.getOption("images_file_types"));return P(ne(e),(e=>o.fold((()=>R(n,(t=>Ze(e.name.toLowerCase(),`.${t.toLowerCase()}`)))),(t=>R(t,(t=>Ze(e.name.toLowerCase(),`.${t.toLowerCase()}`)))))))})(r,t,e.allowedFileExtensions)),Rc(s,xD,{name:e.name}))}))}))])])},oB=Ne("alloy-fake-before-tabstop"),nB=Ne("alloy-fake-after-tabstop"),sB=e=>({dom:{tag:"div",styles:{width:"1px",height:"1px",outline:"none"},attributes:{tabindex:"0"},classes:e},behaviours:rd([fd.config({ignore:!0}),Gb.config({})])}),rB=(e,t)=>({dom:{tag:"div",classes:["tox-navobj",...e.getOr([])]},components:[sB([oB]),t,sB([nB])],behaviours:rd([ID(1)])}),aB=(e,t)=>{Rc(e,wa(),{raw:{which:9,shiftKey:t}})},iB=(e,t)=>{const o=t.element;rs(o,oB)?aB(e,!0):rs(o,nB)&&aB(e,!1)},lB=e=>ps(e,["."+oB,"."+nB].join(","),T),cB=Ne("update-dialog"),dB=Ne("update-title"),uB=Ne("update-body"),mB=Ne("update-footer"),gB=Ne("body-send-message"),pB=Ne("dialog-focus-shifted"),hB=Jt().browser,fB=hB.isSafari(),bB=hB.isFirefox(),vB=fB||bB,xB=hB.isChromium(),yB=({scrollTop:e,scrollHeight:t,clientHeight:o})=>Math.ceil(e)+o>=t,wB=(e,t)=>e.scrollTo(0,"bottom"===t?99999999:t),SB=(e,t,o)=>{const n=e.dom;A.from(n.contentDocument).fold(o,(e=>{let o=0;const s=((e,t)=>{const o=e.body;return A.from(!/^1))?o:e.documentElement)})(e,t).map((e=>(o=e.scrollTop,e))).forall(yB),r=()=>{const e=n.contentWindow;g(e)&&(s?wB(e,"bottom"):!s&&vB&&0!==o&&wB(e,o))};fB&&n.addEventListener("load",r,{once:!0}),e.open(),e.write(t),e.close(),fB||r()}))},CB=$e(vB,fB?500:200).map((e=>((e,t)=>{let o=null,n=null;return{cancel:()=>{c(o)||(clearTimeout(o),o=null,n=null)},throttle:(...s)=>{n=s,c(o)&&(o=setTimeout((()=>{const t=n;o=null,n=null,e.apply(null,t)}),t))}}})(SB,e))),kB=Ne("toolbar.button.execute"),OB=Ne("common-button-display-events"),_B={[Na()]:["disabling","alloy.base.behaviour","toggling","toolbar-button-events","tooltipping"],[qa()]:["toolbar-button-events",OB],[Xa()]:["toolbar-button-events","dropdown-events","tooltipping"],[pa()]:["focusing","alloy.base.behaviour",OB]},TB=e=>mn(e.element,"width",hn(e.element,"width")),EB=(e,t,o)=>rO(e,{tag:"span",classes:["tox-icon","tox-tbtn__icon-wrap"],behaviours:o},t),AB=(e,t)=>EB(e,t,[]),MB=(e,t)=>EB(e,t,[ng.config({})]),DB=(e,t,o)=>({dom:{tag:"span",classes:[`${t}__select-label`]},components:[Ag(o.translate(e))],behaviours:rd([ng.config({})])}),BB=Ne("update-menu-text"),FB=Ne("update-menu-icon"),IB=Ne("update-tooltip-text"),RB=(e,t,o,n)=>{const s=ye(b),r=ye(e.tooltip),a=e.text.map((e=>pv(DB(e,t,o.providers)))),i=e.icon.map((e=>pv(MB(e,o.providers.icons)))),l=(e,t)=>{const o=Zh.getValue(e);return fd.focus(o),Rc(o,"keydown",{raw:t.event.raw}),kx.close(o),A.some(!0)},c=e.role.fold((()=>({})),(e=>({role:e}))),d=A.from(e.listRole).map((e=>({listRole:e}))).getOr({}),u=e.ariaLabel.fold((()=>({})),(e=>({"aria-label":o.providers.translate(e)}))),m=rO("chevron-down",{tag:"div",classes:[`${t}__select-chevron`]},o.providers.icons),p=Ne("common-button-display-events"),h="dropdown-events",f=pv(kx.sketch({...e.uid?{uid:e.uid}:{},...c,...d,dom:{tag:"button",classes:[t,`${t}--select`].concat(L(e.classes,(e=>`${t}--${e}`))),attributes:{...u,...g(n)?{"data-mce-name":n}:{}}},components:CA([i.map((e=>e.asSpec())),a.map((e=>e.asSpec())),A.some(m)]),matchWidth:!0,useMinWidth:!0,onOpen:(t,o,n)=>{e.searchable&&(e=>{FO(e).each((e=>fd.focus(e)))})(n)},dropdownBehaviours:rd([...e.dropdownBehaviours,lA((()=>e.disabled||o.providers.checkUiComponentContext(e.context).shouldDisable)),yA((()=>o.providers.checkUiComponentContext(e.context))),mv.config({}),ng.config({}),...e.tooltip.map((t=>uv.config(o.providers.tooltips.getConfig({tooltipText:o.providers.translate(t),onShow:t=>{if(Ue(r.get(),e.tooltip,((e,t)=>t!==e)).getOr(!1)){const e=o.providers.translate(r.get().getOr(""));uv.setComponents(t,o.providers.tooltips.getComponents({tooltipText:e}))}}})))).toArray(),ud(h,[uA(e,s),mA(e,s)]),ud(p,[Jc(((t,o)=>{"listbox"!==e.listRole&&TB(t)}))]),ud("update-dropdown-width-variable",[Wc(ja(),((e,t)=>kx.close(e)))]),ud("menubutton-update-display-text",[Wc(BB,((e,t)=>{a.bind((t=>t.getOpt(e))).each((e=>{ng.set(e,[Ag(o.providers.translate(t.event.text))])}))})),Wc(FB,((e,t)=>{i.bind((t=>t.getOpt(e))).each((e=>{ng.set(e,[MB(t.event.icon,o.providers.icons)])}))})),Wc(IB,((e,t)=>{const n=o.providers.translate(t.event.text);qo(e.element,"aria-label",n),r.set(A.some(t.event.text))}))])]),eventOrder:Le(_B,{[pa()]:["focusing","alloy.base.behaviour","item-type-events","normal-dropdown-events"],[qa()]:["toolbar-button-events",uv.name(),h,p]}),sandboxBehaviours:rd([Om.config({mode:"special",onLeft:l,onRight:l}),ud("dropdown-sandbox-events",[Wc(AO,((e,t)=>{(e=>{const t=Zh.getValue(e),o=BO(e).map(IO);kx.refetch(t).get((()=>{const e=Gg.getCoupled(t,"sandbox");o.each((t=>BO(e).each((e=>((e,t)=>{Zh.setValue(e,t.fetchPattern),e.element.dom.selectionStart=t.selectionStart,e.element.dom.selectionEnd=t.selectionEnd})(e,t)))))}))})(e),t.stop()})),Wc(MO,((e,t)=>{((e,t)=>{(e=>wb.getState(e).bind(Yd.getHighlighted).bind(Yd.getHighlighted))(e).each((o=>{((e,t,o,n)=>{const s={...n,target:t};e.getSystem().triggerEvent(o,t,s)})(e,o.element,t.event.eventType,t.event.interactionEvent)}))})(e,t),t.stop()}))])]),lazySink:o.getSink,toggleClass:`${t}--active`,parts:{menu:{...EO(0,e.columns,e.presets),fakeFocus:e.searchable,..."listbox"===e.listRole?{}:{onHighlightItem:sD,onCollapseMenu:(e,t,o)=>{Yd.getHighlighted(o).each((t=>{sD(e,o,t)}))},onDehighlightItem:rD}}},getAnchorOverrides:()=>({maxHeightFunction:(e,t)=>{Cc()(e,t-10)}}),fetch:t=>Oe(C(e.fetch,t))}));return f.asSpec()},NB=e=>"separator"===e.type,zB={type:"separator"},LB=(e,t)=>{const o=((e,t)=>{const o=W(e,((e,o)=>(e=>r(e))(o)?""===o?e:"|"===o?e.length>0&&!NB(e[e.length-1])?e.concat([zB]):e:be(t,o.toLowerCase())?e.concat([t[o.toLowerCase()]]):e:e.concat([o])),[]);return o.length>0&&NB(o[o.length-1])&&o.pop(),o})(r(e)?e.split(" "):e,t);return U(o,((e,o)=>{if((e=>be(e,"getSubmenuItems"))(o)){const n=(e=>{const t=fe(e,"value").getOrThunk((()=>Ne("generated-menu-item")));return Le({value:t},e)})(o),s=((e,t)=>{const o=e.getSubmenuItems(),n=LB(o,t);return{item:e,menus:Le(n.menus,{[e.value]:n.items}),expansions:Le(n.expansions,{[e.value]:e.value})}})(n,t);return{menus:Le(e.menus,s.menus),items:[s.item,...e.items],expansions:Le(e.expansions,s.expansions)}}return{...e,items:[o,...e.items]}}),{menus:{},expansions:{},items:[]})},VB=(e,t,o,n)=>{const s=Ne("primary-menu"),r=LB(e,o.shared.providers.menuItems());if(0===r.items.length)return A.none();const a=(e=>e.search.fold((()=>({searchMode:"no-search"})),(e=>({searchMode:"search-with-field",placeholder:e.placeholder}))))(n),i=dD(s,r.items,t,o,n.isHorizontalMenu,a),l=(e=>e.search.fold((()=>({searchMode:"no-search"})),(e=>({searchMode:"search-with-results"}))))(n),c=le(r.menus,((e,n)=>dD(n,e,t,o,!1,l))),d=Le(c,ia(s,i));return A.from(ix.tieredData(s,d,r.expansions))},HB=e=>!be(e,"items"),PB="data-value",UB=(e,t,o,n,s)=>L(o,(o=>HB(o)?{type:"togglemenuitem",...s?{}:{role:"option"},text:o.text,value:o.value,active:o.value===n,onAction:()=>{Zh.setValue(e,o.value),Rc(e,xD,{name:t}),fd.focus(e)}}:{type:"nestedmenuitem",text:o.text,getSubmenuItems:()=>UB(e,t,o.items,n,s)})),WB=(e,t)=>se(e,(e=>HB(e)?$e(e.value===t,e):WB(e.items,t))),$B=e=>{const t={"":0,px:0,pt:1,mm:1,pc:2,ex:2,em:2,ch:2,rem:2,cm:3,in:4,"%":4};let o=e.value.toFixed((n=e.unit)in t?t[n]:1);var n;return-1!==o.indexOf(".")&&(o=o.replace(/\.?0*$/,"")),o+e.unit},GB=e=>{const t=/^\s*(\d+(?:\.\d+)?)\s*(|cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|%)\s*$/.exec(e);if(null!==t){const e=parseFloat(t[1]),o=t[2];return Ae.value({value:e,unit:o})}return Ae.error(e)},jB=(e,t)=>{const o={"":96,px:96,pt:72,cm:2.54,pc:12,mm:25.4,in:1},n=e=>be(o,e);return e.unit===t?A.some(e.value):n(e.unit)&&n(t)?o[e.unit]===o[t]?A.some(e.value):A.some(e.value/o[e.unit]*o[t]):A.none()},qB=e=>A.none(),XB=(e,t)=>{const o=GB(e).toOptional(),n=GB(t).toOptional();return Ue(o,n,((e,t)=>jB(e,t.unit).map((e=>t.value/e)).map((e=>{return o=e,n=t.unit,e=>jB(e,n).map((e=>({value:e*o,unit:n})));var o,n})).getOr(qB))).getOr(qB)},YB=(e,t)=>{const o=e.label.map((e=>vD(e,t))),n=[rp.config({disabled:()=>e.disabled||t.checkUiComponentContext(e.context).shouldDisable}),yA((()=>t.checkUiComponentContext(e.context))),Om.config({mode:"execution",useEnter:!0!==e.multiline,useControlEnter:!0===e.multiline,execute:e=>(Ic(e,kD),A.some(!0))}),ud("textfield-change",[Wc(Ca(),((t,o)=>{Rc(t,xD,{name:e.name})})),Wc(Ia(),((t,o)=>{Rc(t,xD,{name:e.name})}))]),Gb.config({})],s=e.validation.map((e=>ef.config({getRoot:e=>po(e.element),invalidClass:"tox-invalid",validator:{validate:t=>{const o=Zh.getValue(t),n=e.validator(o);return _e(!0===n?Ae.value(o):Ae.error(n))},validateOnLoad:e.validateOnLoad}}))).toArray(),r=e.placeholder.fold(y({}),(e=>({placeholder:t.translate(e)}))),a=e.inputMode.fold(y({}),(e=>({inputmode:e}))),i={...e.spellcheck.fold(y({}),(e=>({spellcheck:e}))),...r,...a,"data-mce-name":e.name},l=Ux.parts.field({tag:!0===e.multiline?"textarea":"input",...e.data.map((e=>({data:e}))).getOr({}),inputAttributes:i,inputClasses:[e.classname],inputBehaviours:rd(j([n,s])),selectOnFocus:!1,factory:Zx}),c=e.multiline?{dom:{tag:"div",classes:["tox-textarea-wrap"]},components:[l]}:l,d=(e.flex?["tox-form__group--stretched"]:[]).concat(e.maximized?["tox-form-group--maximize"]:[]),u=[rp.config({disabled:()=>e.disabled||t.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{Ux.getField(e).each(rp.disable)},onEnabled:e=>{Ux.getField(e).each(rp.enable)}}),yA((()=>t.checkUiComponentContext(e.context)))];return hD(o,c,d,u)},KB=e=>({isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t),setActive:t=>{const o=e.element;t?(os(o,"tox-tbtn--enabled"),qo(o,"aria-pressed",!0)):(ss(o,"tox-tbtn--enabled"),Qo(o,"aria-pressed"))},isActive:()=>rs(e.element,"tox-tbtn--enabled"),setTooltip:t=>{Rc(e,IB,{text:t})},setText:t=>{Rc(e,BB,{text:t})},setIcon:t=>Rc(e,FB,{icon:t})}),JB=(e,t,o,n,s=!0,r)=>{const a="bordered"===e.buttonType?["bordered"]:[];return RB({text:e.text,icon:e.icon,tooltip:e.tooltip,ariaLabel:e.tooltip,searchable:e.search.isSome(),role:n,fetch:(t,n)=>{const s={pattern:e.search.isSome()?aD(t):""};e.fetch((t=>{n(VB(t,dO.CLOSE_ON_EXECUTE,o,{isHorizontalMenu:!1,search:e.search}))}),s,KB(t))},onSetup:e.onSetup,getApi:e=>KB(e),columns:1,presets:"normal",classes:a,dropdownBehaviours:[...s?[Gb.config({})]:[]],context:e.context},t,o.shared,r)},QB=(e,t,o)=>{const n=e=>n=>{const s=!n.isActive();n.setActive(s),e.storage.set(s),o.shared.getSink().each((o=>{t().getOpt(o).each((t=>{No(t.element),Rc(t,CD,{name:e.name,value:e.storage.get()})}))}))},s=e=>t=>{t.setActive(e.storage.get())};return t=>{t(L(e,(e=>{const t=e.text.fold((()=>({})),(e=>({text:e})));return{type:e.type,active:!1,...t,context:e.context,onAction:n(e),onSetup:s(e)}})))}},ZB=e=>({dom:{tag:"span",classes:["tox-tree__label"],attributes:{"aria-label":e}},components:[Ag(e)]}),eF=(e,t,o)=>{e.customStateIcon.each((n=>t.push(nF(n,o.shared.providers.icons,e.customStateIconTooltip.fold((()=>[]),(e=>[uv.config(o.shared.providers.tooltips.getConfig({tooltipText:e}))])),["tox-icon-custom-state"]))))},tF=Ne("leaf-label-event-id"),oF=({leaf:e,onLeafAction:t,visible:o,treeId:n,selectedId:s,backstage:r})=>{const a=e.menu.map((e=>JB(e,"tox-mbtn",r,A.none(),o))),i=[ZB(e.title)];return eF(e,i,r),a.each((e=>i.push(e))),Tv.sketch({dom:{tag:"div",classes:["tox-tree--leaf__label","tox-trbtn"].concat(o?["tox-tree--leaf__label--visible"]:[])},components:i,role:"treeitem",action:o=>{t(e.id),o.getSystem().broadcastOn([`update-active-item-${n}`],{value:e.id})},eventOrder:{[wa()]:[tF,"keying"]},buttonBehaviours:rd([...o?[Gb.config({})]:[],Zb.config({toggleClass:"tox-trbtn--enabled",toggleOnExecute:!1,aria:{mode:"selected"}}),ab.config({channels:{[`update-active-item-${n}`]:{onReceive:(t,o)=>{(o.value===e.id?Zb.on:Zb.off)(t)}}}}),ud(tF,[Jc(((t,o)=>{s.each((o=>{(o===e.id?Zb.on:Zb.off)(t)}))})),Wc(wa(),((e,t)=>{const o="ArrowLeft"===t.event.raw.code,n="ArrowRight"===t.event.raw.code;o?(Gn(e.element,".tox-tree--directory").each((t=>{e.getSystem().getByDom(t).each((e=>{qn(t,".tox-tree--directory__label").each((t=>{e.getSystem().getByDom(t).each(fd.focus)}))}))})),t.stop()):n&&t.stop()}))])])})},nF=(e,t,o,n,s)=>rO(e,{tag:"span",classes:["tox-tree__icon-wrap","tox-icon"].concat(n||[]),behaviours:o,attributes:s},t),sF=Ne("directory-label-event-id"),rF=({directory:e,visible:t,noChildren:o,backstage:n})=>{const s=e.menu.map((e=>JB(e,"tox-mbtn",n,A.none()))),r=[{dom:{tag:"div",classes:["tox-chevron"]},components:[(a=n.shared.providers.icons,nF("chevron-right",a,[]))]},ZB(e.title)];var a;eF(e,r,n),s.each((e=>{r.push(e)}));const i=t=>{Gn(t.element,".tox-tree--directory").each((o=>{t.getSystem().getByDom(o).each((o=>{const n=!Zb.isOn(o);Zb.toggle(o),Rc(t,"expand-tree-node",{expanded:n,node:e.id})}))}))};return Tv.sketch({dom:{tag:"div",classes:["tox-tree--directory__label","tox-trbtn"].concat(t?["tox-tree--directory__label--visible"]:[])},components:r,action:i,eventOrder:{[wa()]:[sF,"keying"]},buttonBehaviours:rd([...t?[Gb.config({})]:[],ud(sF,[Wc(wa(),((e,t)=>{const n="ArrowRight"===t.event.raw.code,s="ArrowLeft"===t.event.raw.code;n&&o&&t.stop(),(n||s)&&Gn(e.element,".tox-tree--directory").each((o=>{e.getSystem().getByDom(o).each((o=>{!Zb.isOn(o)&&n||Zb.isOn(o)&&s?(i(e),t.stop()):s&&!Zb.isOn(o)&&(Gn(o.element,".tox-tree--directory").each((e=>{qn(e,".tox-tree--directory__label").each((e=>{o.getSystem().getByDom(e).each(fd.focus)}))})),t.stop())}))}))}))])])})},aF=({children:e,onLeafAction:t,visible:o,treeId:n,expandedIds:s,selectedId:r,backstage:a})=>({dom:{tag:"div",classes:["tox-tree--directory__children"]},components:e.map((e=>"leaf"===e.type?oF({leaf:e,selectedId:r,onLeafAction:t,visible:o,treeId:n,backstage:a}):lF({directory:e,expandedIds:s,selectedId:r,onLeafAction:t,labelTabstopping:o,treeId:n,backstage:a}))),behaviours:rd([zb.config({dimension:{property:"height"},closedClass:"tox-tree--directory__children--closed",openClass:"tox-tree--directory__children--open",growingClass:"tox-tree--directory__children--growing",shrinkingClass:"tox-tree--directory__children--shrinking",expanded:o}),ng.config({})])}),iF=Ne("directory-event-id"),lF=({directory:e,onLeafAction:t,labelTabstopping:o,treeId:n,backstage:s,expandedIds:r,selectedId:a})=>{const{children:i}=e,l=ye(r),c=r.includes(e.id);return{dom:{tag:"div",classes:["tox-tree--directory"],attributes:{role:"treeitem"}},components:[rF({directory:e,visible:o,noChildren:0===e.children.length,backstage:s}),aF({children:i,expandedIds:r,selectedId:a,onLeafAction:t,visible:c,treeId:n,backstage:s})],behaviours:rd([ud(iF,[Jc(((e,t)=>{Zb.set(e,c)})),Wc("expand-tree-node",((e,t)=>{const{expanded:o,node:n}=t.event;l.set(o?[...l.get(),n]:l.get().filter((e=>e!==n)))}))]),Zb.config({...e.children.length>0?{aria:{mode:"expanded"}}:{},toggleClass:"tox-tree--directory--expanded",onToggled:(e,o)=>{const r=e.components()[1],c=(d=o,i.map((e=>"leaf"===e.type?oF({leaf:e,selectedId:a,onLeafAction:t,visible:d,treeId:n,backstage:s}):lF({directory:e,expandedIds:l.get(),selectedId:a,onLeafAction:t,labelTabstopping:d,treeId:n,backstage:s}))));var d;o?zb.grow(r):zb.shrink(r),ng.set(r,c)}})])}},cF=Ne("tree-event-id"),dF=(e,t,o=[],n,s,r,a)=>{const i=t.fold((()=>({})),(e=>({action:e}))),l={buttonBehaviours:rd([iA((()=>!e.enabled||a.checkUiComponentContext(e.context).shouldDisable)),yA((()=>a.checkUiComponentContext(e.context))),Gb.config({}),...r.map((e=>uv.config(a.tooltips.getConfig({tooltipText:a.translate(e)})))).toArray(),ud("button press",[Uc("click")])].concat(o)),eventOrder:{click:["button press","alloy.base.behaviour"],mousedown:["button press","alloy.base.behaviour"]},...i},c=Le(l,{dom:n});return Le(c,{components:s})},uF=(e,t,o,n=[],s)=>{const r={tag:"button",classes:["tox-tbtn"],attributes:{...e.tooltip.map((e=>({"aria-label":o.translate(e)}))).getOr({}),"data-mce-name":s}},a=e.icon.map((e=>AB(e,o.icons))),i=CA([a]);return dF(e,t,n,r,i,e.tooltip,o)},mF=e=>{switch(e){case"primary":return["tox-button"];case"toolbar":return["tox-tbtn"];default:return["tox-button","tox-button--secondary"]}},gF=(e,t,o,n=[],s=[])=>{const r=o.translate(e.text),a=e.icon.map((e=>AB(e,o.icons))),i=[a.getOrThunk((()=>Ag(r)))],l=e.buttonType.getOr(e.primary||e.borderless?"primary":"secondary"),c={tag:"button",classes:[...mF(l),...a.isSome()?["tox-button--icon"]:[],...e.borderless?["tox-button--naked"]:[],...s],attributes:{"aria-label":r,"data-mce-name":e.text}},d=e.icon.map(y(r));return dF(e,t,n,c,i,d,o)},pF=(e,t,o,n=[],s=[])=>{const r=gF(e,A.some(t),o,n,s);return Tv.sketch(r)},hF=(e,t)=>o=>{"custom"===t?Rc(o,CD,{name:e,value:{}}):"submit"===t?Ic(o,kD):"cancel"===t?Ic(o,SD):console.error("Unknown button type: ",t)},fF=(e,t,o)=>{if(((e,t)=>"menu"===t)(0,t)){const t=()=>r,n=e,s={...e,buttonType:"default",type:"menubutton",search:A.none(),onSetup:t=>(t.setEnabled(e.enabled),b),fetch:QB(n.items,t,o)},r=pv(JB(s,"tox-tbtn",o,A.none(),!0,e.text.or(e.tooltip).getOrUndefined()));return r.asSpec()}if(((e,t)=>"custom"===t||"cancel"===t||"submit"===t)(0,t)){const n=hF(e.name,t),s={...e,context:"cancel"===t?"any":e.context,borderless:!1};return pF(s,n,o.shared.providers,[])}if(((e,t)=>"togglebutton"===t)(0,t))return((e,t,o)=>{const n=e.icon.map((e=>MB(e,t.icons))).map(pv),s=e.buttonType.getOr(e.primary?"primary":"secondary"),r={...e,name:e.name??"",primary:"primary"===s,tooltip:e.tooltip,enabled:e.enabled??!1,borderless:!1},a=r.tooltip.or(e.text).map((e=>({"aria-label":t.translate(e)}))).getOr({}),i=mF(s??"secondary"),l=e.icon.isSome()&&e.text.isSome(),c={tag:"button",classes:[...i.concat(e.icon.isSome()?["tox-button--icon"]:[]),...e.active?["tox-button--enabled"]:[],...l?["tox-button--icon-and-text"]:[]],attributes:{...a,...g(o)?{"data-mce-name":o}:{}}},d=t.translate(e.text.getOr("")),u=Ag(d),m=[...CA([n.map((e=>e.asSpec()))]),...e.text.isSome()?[u]:[]],p=dF(r,A.some((o=>{Rc(o,CD,{name:e.name,value:{setIcon:e=>{n.map((n=>n.getOpt(o).each((o=>{ng.set(o,[MB(e,t.icons)])}))))}}})})),[],c,m,e.tooltip,t);return Tv.sketch(p)})(e,o.shared.providers,e.text.or(e.tooltip).getOrUndefined());throw console.error("Unknown footer button type: ",t),new Error("Unknown footer button type")},bF={type:"separator"},vF=e=>({type:"menuitem",value:e.url,text:e.title,meta:{attach:e.attach},onAction:b}),xF=(e,t)=>({type:"menuitem",value:t,text:e,meta:{attach:void 0},onAction:b}),yF=(e,t)=>(e=>L(e,vF))(((e,t)=>P(t,(t=>t.type===e)))(e,t)),wF=e=>yF("header",e.targets),SF=e=>yF("anchor",e.targets),CF=e=>A.from(e.anchorTop).map((e=>xF("",e))).toArray(),kF=e=>A.from(e.anchorBottom).map((e=>xF("",e))).toArray(),OF=(e,t)=>{const o=e.toLowerCase();return P(t,(e=>{const t=void 0!==e.meta&&void 0!==e.meta.text?e.meta.text:e.text,n=e.value??"";return Je(t.toLowerCase(),o)||Je(n.toLowerCase(),o)}))},_F=Ne("aria-invalid"),TF=e=>(t,o,n,s,r)=>fe(o,"name").fold((()=>e(o,s,A.none(),r)),(a=>t.field(a,e(o,s,fe(n,a),r)))),EF={bar:TF(((e,t)=>((e,t)=>({dom:{tag:"div",classes:["tox-bar","tox-form__controls-h-stack"]},components:L(e.items,t.interpreter)}))(e,t.shared))),collection:TF(((e,t,o)=>AD(e,t.shared.providers,o))),alertbanner:TF(((e,t)=>((e,t)=>{const o=oO(e.icon,t.icons);return ch.sketch({dom:{tag:"div",attributes:{role:"alert"},classes:["tox-notification","tox-notification--in",`tox-notification--${e.level}`]},components:[{dom:{tag:"div",classes:["tox-notification__icon"],innerHtml:e.url?void 0:o},components:e.url?[Tv.sketch({dom:{tag:"button",classes:["tox-button","tox-button--naked","tox-button--icon"],innerHtml:o,attributes:{title:t.translate(e.iconTooltip)}},action:t=>Rc(t,CD,{name:"alert-banner",value:e.url}),buttonBehaviours:rd([nO()])})]:void 0},{dom:{tag:"div",classes:["tox-notification__body"],innerHtml:t.translate(e.text)}}]})})(e,t.shared.providers))),input:TF(((e,t,o)=>((e,t,o)=>YB({name:e.name,multiline:!1,label:e.label,inputMode:e.inputMode,placeholder:e.placeholder,flex:!1,disabled:!e.enabled,classname:"tox-textfield",validation:A.none(),maximized:e.maximized,data:o,context:e.context,spellcheck:A.none()},t))(e,t.shared.providers,o))),textarea:TF(((e,t,o)=>((e,t,o)=>YB({name:e.name,multiline:!0,label:e.label,inputMode:A.none(),placeholder:e.placeholder,flex:!0,disabled:!e.enabled,classname:"tox-textarea",validation:A.none(),maximized:e.maximized,data:o,context:e.context,spellcheck:e.spellcheck},t))(e,t.shared.providers,o))),label:TF(((e,t,o,n)=>((e,t,o)=>{const n="tox-label",s="center"===e.align?[`${n}--center`]:[],r="end"===e.align?[`${n}--end`]:[],a=pv({dom:{tag:"label",classes:[n,...s,...r]},components:[Ag(t.providers.translate(e.label))]}),i=L(e.items,t.interpreter);return{dom:{tag:"div",classes:["tox-form__group"]},components:[a.asSpec(),...i],behaviours:rd([FD(),ng.config({}),(l=A.none(),LD(l,on,nn)),Om.config({mode:"acyclic"}),ud("label",[Jc((t=>{e.for.each((e=>{o(e).each((e=>{a.getOpt(t).each((t=>{const o=Yo(e.element,"id")??Ne("form-field");qo(e.element,"id",o),qo(t.element,"for",o)}))}))}))}))])])};var l})(e,t.shared,n))),iframe:(EI=(e,t,o)=>((e,t,o)=>{const n="tox-dialog__iframe",s=e.transparent?[]:[`${n}--opaque`],r=e.border?["tox-navobj-bordered"]:[],a={...e.label.map((e=>({title:e}))).getOr({}),...o.map((e=>({srcdoc:e}))).getOr({}),...e.sandboxed?{sandbox:"allow-scripts allow-same-origin"}:{}},i=((e,t)=>{const o=ye(e.getOr(""));return{getValue:e=>o.get(),setValue:(e,n)=>{if(o.get()!==n){const o=e.element,s=()=>qo(o,"srcdoc",n);t?CB.fold(y(SB),(e=>e.throttle))(o,n,s):s()}o.set(n)}}})(o,e.streamContent),l=e.label.map((e=>vD(e,t))),c=Ux.parts.field({factory:{sketch:e=>rB(A.from(r),{uid:e.uid,dom:{tag:"iframe",attributes:a,classes:[n,...s]},behaviours:rd([Gb.config({}),fd.config({}),zD(o,i.getValue,i.setValue),ab.config({channels:{[pB]:{onReceive:(e,t)=>{t.newFocus.each((t=>{po(e.element).each((o=>{(yt(e.element,t)?os:ss)(o,"tox-navobj-bordered-focus")}))}))}}}})])})}});return hD(l,c,["tox-form__group--stretched"],[])})(e,t.shared.providers,o),(e,t,o,n,s)=>{const r=Le(t,{source:"dynamic"});return TF(EI)(e,r,o,n,s)}),button:TF(((e,t)=>((e,t)=>{const o=hF(e.name,"custom");return n=A.none(),s=Ux.parts.field({factory:Tv,...gF(e,A.some(o),t,[VD(""),FD()])}),hD(n,s,[],[]);var n,s})(e,t.shared.providers))),checkbox:TF(((e,t,o)=>((e,t,o)=>{const n=e=>(e.element.dom.click(),A.some(!0)),s=Ux.parts.field({factory:{sketch:w},dom:{tag:"input",classes:["tox-checkbox__input"],attributes:{type:"checkbox"}},behaviours:rd([FD(),rp.config({disabled:()=>!e.enabled||t.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{po(e.element).each((e=>os(e,"tox-checkbox--disabled")))},onEnabled:e=>{po(e.element).each((e=>ss(e,"tox-checkbox--disabled")))}}),Gb.config({}),fd.config({}),LD(o,Jn,Kn),Om.config({mode:"special",onEnter:n,onSpace:n,stopSpaceKeyup:!0}),ud("checkbox-events",[Wc(ka(),((t,o)=>{Rc(t,xD,{name:e.name})}))])])}),r=Ux.parts.label({dom:{tag:"span",classes:["tox-checkbox__label"]},components:[Ag(t.translate(e.label))],behaviours:rd([mv.config({})])}),a=e=>rO("checked"===e?"selected":"unselected",{tag:"span",classes:["tox-icon","tox-checkbox-icon__"+e]},t.icons),i=pv({dom:{tag:"div",classes:["tox-checkbox__icons"]},components:[a("checked"),a("unchecked")]});return Ux.sketch({dom:{tag:"label",classes:["tox-checkbox"]},components:[s,i.asSpec(),r],fieldBehaviours:rd([rp.config({disabled:()=>!e.enabled||t.checkUiComponentContext(e.context).shouldDisable}),yA((()=>t.checkUiComponentContext(e.context)))])})})(e,t.shared.providers,o))),colorinput:TF(((e,t,o)=>((e,t,o,n)=>{const s=Ux.parts.field({factory:Zx,inputClasses:["tox-textfield"],data:n,onSetValue:e=>ef.run(e).get(b),inputBehaviours:rd([rp.config({disabled:()=>t.providers.isDisabled()||t.providers.checkUiComponentContext(e.context).shouldDisable}),yA((()=>t.providers.checkUiComponentContext(e.context))),Gb.config({}),ef.config({invalidClass:"tox-textbox-field-invalid",getRoot:e=>po(e.element),notify:{onValid:e=>{const t=Zh.getValue(e);Rc(e,MD,{color:t})}},validator:{validateOnLoad:!1,validate:e=>{const t=Zh.getValue(e);if(0===t.length)return _e(Ae.value(!0));{const e=it("span");mn(e,"background-color",t);const o=bn(e,"background-color").fold((()=>Ae.error("blah")),(e=>Ae.value(t)));return _e(o)}}}})]),selectOnFocus:!1}),r=e.label.map((e=>vD(e,t.providers))),a=(e,t)=>{Rc(e,DD,{value:t})},i=pv(((e,t)=>kx.sketch({dom:e.dom,components:e.components,toggleClass:"mce-active",dropdownBehaviours:rd([lA((()=>t.providers.isDisabled()||t.providers.checkUiComponentContext(e.context).shouldDisable)),yA((()=>t.providers.checkUiComponentContext(e.context))),mv.config({}),Gb.config({})]),layouts:e.layouts,sandboxClasses:["tox-dialog__popups"],lazySink:t.getSink,fetch:o=>Oe((t=>e.fetch(t))).map((n=>A.from(uD(Le(XM(Ne("menu-value"),n,(t=>{e.onItemAction(o,t)}),e.columns,e.presets,dO.CLOSE_ON_EXECUTE,T,t.providers),{movement:KM(e.columns,e.presets)}))))),parts:{menu:EO(0,0,e.presets)}}))({dom:{tag:"span",attributes:{"aria-label":t.providers.translate("Color swatch")}},layouts:{onRtl:()=>[Ul,Pl,jl],onLtr:()=>[Pl,Ul,jl]},components:[],fetch:HM(o.getColors(e.storageKey),e.storageKey,o.hasCustomColors()),columns:o.getColorCols(e.storageKey),presets:"color",onItemAction:(t,n)=>{i.getOpt(t).each((t=>{"custom"===n?o.colorPicker((o=>{o.fold((()=>Ic(t,BD)),(o=>{a(t,o),CM(e.storageKey,o)}))}),"#ffffff"):a(t,"remove"===n?"":n)}))},context:e.context},t));return Ux.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:r.toArray().concat([{dom:{tag:"div",classes:["tox-color-input"]},components:[s,i.asSpec()]}]),fieldBehaviours:rd([ud("form-field-events",[Wc(MD,((t,o)=>{i.getOpt(t).each((e=>{mn(e.element,"background-color",o.event.color)})),Rc(t,xD,{name:e.name})})),Wc(DD,((e,t)=>{Ux.getField(e).each((o=>{Zh.setValue(o,t.event.value),Pg.getCurrent(e).each(fd.focus)}))})),Wc(BD,((e,t)=>{Ux.getField(e).each((t=>{Pg.getCurrent(e).each(fd.focus)}))}))])])})})(e,t.shared,t.colorinput,o))),colorpicker:TF(((e,t,o)=>((e,t,o)=>{const n=e=>"tox-"+e,s=YD((e=>t=>r(t)?e.translate(KD[t]):e.translate(t))(t),n,t.tooltips.getConfig,((e,o,n=e,s=e)=>rO(n,{tag:"div",classes:["tox-icon","tox-control-wrap__status-icon-"+e],attributes:{title:t.translate(s),"aria-live":"polite",...o.fold((()=>({})),(e=>({id:e})))}},t.icons))),a=pv(s.sketch({dom:{tag:"div",classes:[n("color-picker-container")],attributes:{role:"presentation"}},onValidHex:e=>{Rc(e,CD,{name:"hex-valid",value:!0})},onInvalidHex:e=>{Rc(e,CD,{name:"hex-valid",value:!1})}}));return{dom:{tag:"div"},components:[a.asSpec()],behaviours:rd([zD(o,(e=>{const t=a.get(e);return Pg.getCurrent(t).bind((e=>Zh.getValue(e).hex)).map((e=>"#"+Ke(e,"#"))).getOr("")}),((e,t)=>{const o=A.from(/^#([a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?)/.exec(t)).bind((e=>ee(e,1))),n=a.get(e);Pg.getCurrent(n).fold((()=>{console.log("Can not find form")}),(e=>{Zh.setValue(e,{hex:o.getOr("")}),Ax.getField(e,"hex").each((e=>{Ic(e,Ca())}))}))})),FD()])}})(0,t.shared.providers,o))),dropzone:TF(((e,t,o)=>tB(e,t.shared.providers,o))),grid:TF(((e,t)=>((e,t)=>({dom:{tag:"div",classes:["tox-form__grid",`tox-form__grid--${e.columns}col`]},components:L(e.items,t.interpreter)}))(e,t.shared))),listbox:TF(((e,t,o)=>((e,t,o)=>{const n=R(e.items,(e=>!HB(e))),s=t.shared.providers,r=o.bind((t=>WB(e.items,t))).orThunk((()=>te(e.items).filter(HB))),a=e.label.map((e=>vD(e,s))),i=Ux.parts.field({dom:{},factory:{sketch:o=>RB({context:e.context,uid:o.uid,text:r.map((e=>e.text)),icon:A.none(),tooltip:A.none(),role:$e(!n,"combobox"),...n?{}:{listRole:"listbox"},ariaLabel:e.label,fetch:(o,s)=>{const r=UB(o,e.name,e.items,Zh.getValue(o),n);s(VB(r,dO.CLOSE_ON_EXECUTE,t,{isHorizontalMenu:!1,search:A.none()}))},onSetup:y(b),getApi:y({}),columns:1,presets:"normal",classes:[],dropdownBehaviours:[Gb.config({}),zD(r.map((e=>e.value)),(e=>Yo(e.element,PB)),((t,o)=>{WB(e.items,o).each((e=>{qo(t.element,PB,e.value),Rc(t,BB,{text:e.text})}))}))]},"tox-listbox",t.shared)}}),l={dom:{tag:"div",classes:["tox-listboxfield"]},components:[i]};return Ux.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:j([a.toArray(),[l]]),fieldBehaviours:rd([rp.config({disabled:()=>!e.enabled||s.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{Ux.getField(e).each(rp.disable)},onEnabled:e=>{Ux.getField(e).each(rp.enable)}})])})})(e,t,o))),selectbox:TF(((e,t,o)=>((e,t,o)=>{const n=L(e.items,(e=>({text:t.translate(e.text),value:e.value}))),s=e.label.map((e=>vD(e,t))),r=Ux.parts.field({dom:{},...o.map((e=>({data:e}))).getOr({}),selectAttributes:{size:e.size},options:n,factory:qx,selectBehaviours:rd([rp.config({disabled:()=>!e.enabled||t.checkUiComponentContext(e.context).shouldDisable}),Gb.config({}),ud("selectbox-change",[Wc(ka(),((t,o)=>{Rc(t,xD,{name:e.name})}))])])}),a=e.size>1?A.none():A.some(rO("chevron-down",{tag:"div",classes:["tox-selectfield__icon-js"]},t.icons)),i={dom:{tag:"div",classes:["tox-selectfield"]},components:j([[r],a.toArray()])};return Ux.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:j([s.toArray(),[i]]),fieldBehaviours:rd([rp.config({disabled:()=>!e.enabled||t.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{Ux.getField(e).each(rp.disable)},onEnabled:e=>{Ux.getField(e).each(rp.enable)}}),yA((()=>t.checkUiComponentContext(e.context)))])})})(e,t.shared.providers,o))),sizeinput:TF(((e,t)=>((e,t)=>{let o=qB;const n=Ne("ratio-event"),s=e=>rO(e,{tag:"span",classes:["tox-icon","tox-lock-icon__"+e]},t.icons),r=()=>!e.enabled||t.checkUiComponentContext(e.context).shouldDisable,a=yA((()=>t.checkUiComponentContext(e.context))),i=e.label.getOr("Constrain proportions"),l=t.translate(i),c=jx.parts.lock({dom:{tag:"button",classes:["tox-lock","tox-button","tox-button--naked","tox-button--icon"],attributes:{"aria-label":l,"data-mce-name":i}},components:[s("lock"),s("unlock")],buttonBehaviours:rd([rp.config({disabled:r}),a,Gb.config({}),uv.config(t.tooltips.getConfig({tooltipText:l}))])}),d=e=>({dom:{tag:"div",classes:["tox-form__group"]},components:e}),u=t=>Ux.parts.field({factory:Zx,inputClasses:["tox-textfield"],inputBehaviours:rd([rp.config({disabled:r}),a,Gb.config({}),ud("size-input-events",[Wc(xa(),((e,o)=>{Rc(e,n,{isField1:t})})),Wc(ka(),((t,o)=>{Rc(t,xD,{name:e.name})}))])]),selectOnFocus:!1}),m=e=>({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e))]}),g=jx.parts.field1(d([Ux.parts.label(m("Width")),u(!0)])),p=jx.parts.field2(d([Ux.parts.label(m("Height")),u(!1)]));return jx.sketch({dom:{tag:"div",classes:["tox-form__group"]},components:[{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:[g,p,d([m("\xa0"),c])]}],field1Name:"width",field2Name:"height",locked:!0,markers:{lockClass:"tox-locked"},onLockedChange:(e,t,n)=>{GB(Zh.getValue(e)).each((e=>{o(e).each((e=>{Zh.setValue(t,$B(e))}))}))},coupledFieldBehaviours:rd([rp.config({disabled:r,onDisabled:e=>{jx.getField1(e).bind(Ux.getField).each(rp.disable),jx.getField2(e).bind(Ux.getField).each(rp.disable),jx.getLock(e).each(rp.disable)},onEnabled:e=>{jx.getField1(e).bind(Ux.getField).each(rp.enable),jx.getField2(e).bind(Ux.getField).each(rp.enable),jx.getLock(e).each(rp.enable)}}),yA((()=>t.checkUiComponentContext("mode:design"))),ud("size-input-events2",[Wc(n,((e,t)=>{const n=t.event.isField1,s=n?jx.getField1(e):jx.getField2(e),r=n?jx.getField2(e):jx.getField1(e),a=s.map(Zh.getValue).getOr(""),i=r.map(Zh.getValue).getOr("");o=XB(a,i)}))])])})})(e,t.shared.providers))),slider:TF(((e,t,o)=>((e,t,o)=>{const n=Pw.parts.label({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e.label))]}),s=Pw.parts.spectrum({dom:{tag:"div",classes:["tox-slider__rail"],attributes:{role:"presentation"}}}),r=Pw.parts.thumb({dom:{tag:"div",classes:["tox-slider__handle"],attributes:{role:"presentation"}}});return Pw.sketch({dom:{tag:"div",classes:["tox-slider"],attributes:{role:"presentation"}},model:{mode:"x",minX:e.min,maxX:e.max,getInitialValue:y(o.getOrThunk((()=>(Math.abs(e.max)-Math.abs(e.min))/2)))},components:[n,s,r],sliderBehaviours:rd([FD(),fd.config({})]),onChoose:(t,o,n)=>{Rc(t,xD,{name:e.name,value:n})},onChange:(t,o,n)=>{Rc(t,xD,{name:e.name,value:n})}})})(e,t.shared.providers,o))),urlinput:TF(((e,t,o)=>((e,t,o,n)=>{const s=t.shared.providers,r=t=>{const n=Zh.getValue(t);o.addToHistory(n.value,e.filetype)},a={...n.map((e=>({initialData:e}))).getOr({}),dismissOnBlur:!0,inputClasses:["tox-textfield"],sandboxClasses:["tox-dialog__popups"],inputAttributes:{type:"url"},minChars:0,responseTime:0,fetch:n=>{const s=((e,t,o)=>{const n=Zh.getValue(t),s=n?.meta?.text??n.value;return o.getLinkInformation().fold((()=>[]),(t=>{const n=OF(s,(e=>L(e,(e=>xF(e,e))))(o.getHistory(e)));return"file"===e?(r=[n,OF(s,wF(t)),OF(s,j([CF(t),SF(t),kF(t)]))],W(r,((e,t)=>0===e.length||0===t.length?e.concat(t):e.concat(bF,t)),[])):n;var r}))})(e.filetype,n,o),r=VB(s,dO.BUBBLE_TO_SANDBOX,t,{isHorizontalMenu:!1,search:A.none()});return _e(r)},getHotspot:e=>g.getOpt(e),onSetValue:(e,t)=>{e.hasConfigured(ef)&&ef.run(e).get(b)},typeaheadBehaviours:rd([...o.getValidationHandler().map((t=>ef.config({getRoot:e=>po(e.element),invalidClass:"tox-control-wrap--status-invalid",notify:{onInvalid:(e,t)=>{c.getOpt(e).each((e=>{qo(e.element,"title",s.translate(t))}))}},validator:{validate:o=>{const n=Zh.getValue(o);return De((s=>{t({type:e.filetype,url:n.value},(e=>{if("invalid"===e.status){qo(o.element,"aria-errormessage",_F);const t=Ae.error(e.message);s(t)}else{Qo(o.element,"aria-errormessage");const t=Ae.value(e.message);s(t)}}))}))},validateOnLoad:!1}}))).toArray(),rp.config({disabled:()=>!e.enabled||s.checkUiComponentContext(e.context).shouldDisable}),Gb.config({}),ud("urlinput-events",[Wc(Ca(),(t=>{const o=cs(t.element),n=o.trim();n!==o&&ds(t.element,n),"file"===e.filetype&&Rc(t,xD,{name:e.name})})),Wc(ka(),(t=>{Rc(t,xD,{name:e.name}),r(t)})),Wc(Ia(),(t=>{Rc(t,xD,{name:e.name}),r(t)}))])]),eventOrder:{[Ca()]:["streaming","urlinput-events","invalidating"]},model:{getDisplayText:e=>e.value,selectsOver:!1,populateFromBrowse:!1},markers:{openClass:"tox-textfield--popup-open"},lazySink:t.shared.getSink,parts:{menu:EO(0,0,"normal")},onExecute:(e,t,o)=>{Rc(t,kD,{})},onItemExecute:(t,o,n,s)=>{r(t),Rc(t,xD,{name:e.name})}},i=Ux.parts.field({...a,factory:MS}),l=e.label.map((e=>vD(e,s))),c=pv(((e,t,o=e,n=e)=>rO(o,{tag:"div",classes:["tox-icon","tox-control-wrap__status-icon-"+e],attributes:{title:s.translate(n),"aria-live":"polite",...t.fold((()=>({})),(e=>({id:e})))}},s.icons))("invalid",A.some(_F),"warning")),d=pv({dom:{tag:"div",classes:["tox-control-wrap__status-icon-wrap"]},components:[c.asSpec()]}),u=o.getUrlPicker(e.filetype),m=Ne("browser.url.event"),g=pv({dom:{tag:"div",classes:["tox-control-wrap"]},components:[i,d.asSpec()],behaviours:rd([rp.config({disabled:()=>!e.enabled||s.checkUiComponentContext(e.context).shouldDisable})])}),p=pv(pF({context:e.context,name:e.name,icon:A.some("browse"),text:e.picker_text.or(e.label).getOr(""),enabled:e.enabled,primary:!1,buttonType:A.none(),borderless:!0},(e=>Ic(e,m)),s,[],["tox-browse-url"]));return Ux.sketch({dom:bD([]),components:l.toArray().concat([{dom:{tag:"div",classes:["tox-form__controls-h-stack"]},components:j([[g.asSpec()],u.map((()=>p.asSpec())).toArray()])}]),fieldBehaviours:rd([rp.config({disabled:()=>!e.enabled||s.checkUiComponentContext(e.context).shouldDisable,onDisabled:e=>{Ux.getField(e).each(rp.disable),p.getOpt(e).each(rp.disable)},onEnabled:e=>{Ux.getField(e).each(rp.enable),p.getOpt(e).each(rp.enable)}}),yA((()=>s.checkUiComponentContext(e.context))),ud("url-input-events",[Wc(m,(t=>{Pg.getCurrent(t).each((o=>{const n=Zh.getValue(o),s={fieldname:e.name,...n};u.each((n=>{n(s).get((n=>{Zh.setValue(o,n),Rc(t,xD,{name:e.name})}))}))}))}))])])})})(e,t,t.urlinput,o))),customeditor:TF((e=>{const t=Xe(),o=pv({dom:{tag:e.tag}}),n=Xe(),s=!QD(e)&&e.onFocus.isSome()?[fd.config({onFocus:t=>{e.onFocus.each((e=>{e(t.element.dom)}))}}),Gb.config({})]:[];return{dom:{tag:"div",classes:["tox-custom-editor"]},behaviours:rd([ud("custom-editor-events",[Jc((s=>{o.getOpt(s).each((o=>{(QD(e)?e.init(o.element.dom):JD.load(e.scriptId,e.scriptUrl).then((t=>t(o.element.dom,e.settings)))).then((e=>{n.on((t=>{e.setValue(t)})),n.clear(),t.set(e)}))}))}))]),zD(A.none(),(()=>t.get().fold((()=>n.get().getOr("")),(e=>e.getValue()))),((e,o)=>{t.get().fold((()=>n.set(o)),(e=>e.setValue(o)))})),FD()].concat(s)),components:[o.asSpec()]}})),htmlpanel:TF(((e,t)=>((e,t)=>{const o=["tox-form__group",...e.stretched?["tox-form__group--stretched"]:[]],n=ud("htmlpanel",[Jc((t=>{e.onInit(t.element.dom)}))]);return"presentation"===e.presets?ch.sketch({dom:{tag:"div",classes:o,innerHtml:e.html},containerBehaviours:rd([uv.config({...t.tooltips.getConfig({tooltipText:"",onShow:e=>{Xn(e.element,"[data-mce-tooltip]:hover").orThunk((()=>Ho(e.element))).each((o=>{Ko(o,"data-mce-tooltip").each((o=>{uv.setComponents(e,t.tooltips.getComponents({tooltipText:o}))}))}))}}),mode:"children-normal",anchor:e=>({type:"node",node:Xn(e.element,"[data-mce-tooltip]:hover").orThunk((()=>Ho(e.element).filter((e=>Ko(e,"data-mce-tooltip").isSome())))),root:e.element,layouts:{onLtr:y([jl,Gl,Pl,Wl,Ul,$l]),onRtl:y([jl,Gl,Pl,Wl,Ul,$l])},bubble:wl(0,-2,{})})}),n])}):ch.sketch({dom:{tag:"div",classes:o,innerHtml:e.html,attributes:{role:"document"}},containerBehaviours:rd([Gb.config({}),fd.config({}),n])})})(e,t.shared.providers))),imagepreview:TF(((e,t,o)=>((e,t)=>{const o=ye(t.getOr({url:""})),n=pv({dom:{tag:"img",classes:["tox-imagepreview__image"],attributes:t.map((e=>({src:e.url}))).getOr({})}}),s=pv({dom:{tag:"div",classes:["tox-imagepreview__container"],attributes:{role:"presentation"}},components:[n.asSpec()]}),r={};e.height.each((e=>r.height=e));const a=t.map((e=>({url:e.url,zoom:A.from(e.zoom),cachedWidth:A.from(e.cachedWidth),cachedHeight:A.from(e.cachedHeight)})));return{dom:{tag:"div",classes:["tox-imagepreview"],styles:r,attributes:{role:"presentation"}},components:[s.asSpec()],behaviours:rd([FD(),zD(a,(()=>o.get()),((e,t)=>{const r={url:t.url};t.zoom.each((e=>r.zoom=e)),t.cachedWidth.each((e=>r.cachedWidth=e)),t.cachedHeight.each((e=>r.cachedHeight=e)),o.set(r);const a=()=>{const{cachedWidth:t,cachedHeight:o,zoom:n}=r;if(!u(t)&&!u(o)){if(u(n)){const n=((e,t,o)=>{const n=En(e),s=kn(e);return Math.min(n/t,s/o,1)})(e.element,t,o);r.zoom=n}const a=((e,t,o,n,s)=>{const r=o*s,a=n*s,i=Math.max(0,e/2-r/2),l=Math.max(0,t/2-a/2);return{left:i.toString()+"px",top:l.toString()+"px",width:r.toString()+"px",height:a.toString()+"px"}})(En(e.element),kn(e.element),t,o,r.zoom);s.getOpt(e).each((e=>{gn(e.element,a)}))}};n.getOpt(e).each((o=>{const n=o.element;t.url!==Yo(n,"src")&&(qo(n,"src",t.url),ss(e.element,"tox-imagepreview__loaded")),a(),sn(n).then((t=>{e.getSystem().isConnected()&&(os(e.element,"tox-imagepreview__loaded"),r.cachedWidth=t.dom.naturalWidth,r.cachedHeight=t.dom.naturalHeight,a())}))}))}))])}})(e,o))),table:TF(((e,t)=>((e,t)=>{const o=e=>({dom:{tag:"td",innerHtml:t.translate(e)}});return{dom:{tag:"table",classes:["tox-dialog__table"]},components:[(s=e.header,{dom:{tag:"thead"},components:[{dom:{tag:"tr"},components:L(s,(e=>({dom:{tag:"th",innerHtml:t.translate(e)}})))}]}),(n=e.cells,{dom:{tag:"tbody"},components:L(n,(e=>({dom:{tag:"tr"},components:L(e,o)})))})],behaviours:rd([Gb.config({}),fd.config({})])};var n,s})(e,t.shared.providers))),tree:TF(((e,t)=>((e,t)=>{const o=e.onLeafAction.getOr(b),n=e.onToggleExpand.getOr(b),s=e.defaultExpandedIds,r=ye(s),a=ye(e.defaultSelectedId),i=Ne("tree-id"),l=(n,s)=>e.items.map((e=>"leaf"===e.type?oF({leaf:e,selectedId:n,onLeafAction:o,visible:!0,treeId:i,backstage:t}):lF({directory:e,selectedId:n,onLeafAction:o,expandedIds:s,labelTabstopping:!0,treeId:i,backstage:t})));return{dom:{tag:"div",classes:["tox-tree"],attributes:{role:"tree"}},components:l(a.get(),r.get()),behaviours:rd([Om.config({mode:"flow",selector:".tox-tree--leaf__label--visible, .tox-tree--directory__label--visible",cycles:!1}),ud(cF,[Wc("expand-tree-node",((e,t)=>{const{expanded:o,node:s}=t.event;r.set(o?[...r.get(),s]:r.get().filter((e=>e!==s))),n(r.get(),{expanded:o,node:s})}))]),ab.config({channels:{[`update-active-item-${i}`]:{onReceive:(e,t)=>{a.set(A.some(t.value)),ng.set(e,l(A.some(t.value),r.get()))}}}}),ng.config({})])}})(e,t))),panel:TF(((e,t)=>((e,t)=>({dom:{tag:"div",classes:e.classes},components:L(e.items,t.shared.interpreter)}))(e,t)))},AF={field:(e,t)=>t,record:y([])},MF=(e,t,o,n,s)=>{const r=Le(n,{shared:{interpreter:t=>DF(e,t,o,r,s)}});return DF(e,t,o,r,s)},DF=(e,t,o,n,s)=>fe(EF,t.type).fold((()=>(console.error(`Unknown factory type "${t.type}", defaulting to container: `,t),t)),(r=>r(e,t,o,n,s))),BF=(e,t,o,n)=>DF(AF,e,t,o,n),FF={valignCentre:[],alignCentre:[],alignLeft:[],alignRight:[],right:[],left:[],bottom:[],top:[]},IF=(e,t,o)=>{const n={maxHeightFunction:kc()};return()=>o()?{type:"node",root:Oo(ko(e())),node:A.from(e()),bubble:wl(12,12,FF),layouts:{onRtl:()=>[gc],onLtr:()=>[mc]},overrides:n}:{type:"hotspot",hotspot:t(),bubble:wl(-12,12,FF),layouts:{onRtl:()=>[Pl,Ul,jl],onLtr:()=>[Ul,Pl,jl]},overrides:n}},RF=(e,t,o,n)=>{const s={maxHeightFunction:kc()};return()=>n()?{type:"node",root:Oo(ko(t())),node:A.from(t()),bubble:wl(12,12,FF),layouts:{onRtl:()=>[pc],onLtr:()=>[pc]},overrides:s}:e?{type:"node",root:Oo(ko(t())),node:A.from(t()),bubble:wl(0,-On(t()),FF),layouts:{onRtl:()=>[Gl],onLtr:()=>[Gl]},overrides:s}:{type:"hotspot",hotspot:o(),bubble:wl(0,0,FF),layouts:{onRtl:()=>[Gl],onLtr:()=>[Gl]},overrides:s}},NF=(e,t,o)=>()=>o()?{type:"node",root:Oo(ko(e())),node:A.from(e()),layouts:{onRtl:()=>[pc],onLtr:()=>[pc]}}:{type:"hotspot",hotspot:t(),layouts:{onRtl:()=>[jl],onLtr:()=>[jl]}},zF=(e,t)=>()=>({type:"selection",root:t(),getSelection:()=>{const t=e.selection.getRng(),o=e.model.table.getSelectedCells();if(o.length>1){const e=o[0],t=o[o.length-1],n={firstCell:ct(e),lastCell:ct(t)};return A.some(n)}return A.some(Ss.range(ct(t.startContainer),t.startOffset,ct(t.endContainer),t.endOffset))}}),LF=e=>t=>({type:"node",root:e(),node:t}),VF=(e,t,o,n)=>{const s=NC(e),r=()=>ct(e.getBody()),a=()=>ct(e.getContentAreaContainer()),i=()=>s||!n();return{inlineDialog:IF(a,t,i),inlineBottomDialog:RF(e.inline,a,o,i),banner:NF(a,t,i),cursor:zF(e,r),node:LF(r)}},HF=e=>(t,o)=>{qM(e)(t,o)},PF=e=>()=>FM(e),UF=e=>t=>AM(e,t),WF=e=>t=>BM(e,t),$F=e=>()=>fC(e),GF=e=>ve(e,"items"),jF=e=>ve(e,"format"),qF=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",format:"bold"},{title:"Italic",format:"italic"},{title:"Underline",format:"underline"},{title:"Strikethrough",format:"strikethrough"},{title:"Superscript",format:"superscript"},{title:"Subscript",format:"subscript"},{title:"Code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Align",items:[{title:"Left",format:"alignleft"},{title:"Center",format:"aligncenter"},{title:"Right",format:"alignright"},{title:"Justify",format:"alignjustify"}]}],XF=e=>W(e,((e,t)=>{if(be(t,"items")){const o=XF(t.items);return{customFormats:e.customFormats.concat(o.customFormats),formats:e.formats.concat([{title:t.title,items:o.formats}])}}if(be(t,"inline")||(e=>be(e,"block"))(t)||(e=>be(e,"selector"))(t)){const o=`custom-${r(t.name)?t.name:t.title.toLowerCase()}`;return{customFormats:e.customFormats.concat([{name:o,format:t}]),formats:e.formats.concat([{title:t.title,format:o,icon:t.icon}])}}return{...e,formats:e.formats.concat(t)}}),{customFormats:[],formats:[]}),YF=e=>YS(e).map((t=>{const o=((e,t)=>{const o=XF(t),n=t=>{V(t,(t=>{e.formatter.has(t.name)||e.formatter.register(t.name,t.format)}))};return e.formatter?n(o.customFormats):e.on("init",(()=>{n(o.customFormats)})),o.formats})(e,t);return KS(e)?qF.concat(o):o})).getOr(qF),KF=(e,t,o)=>({...e,type:"formatter",isSelected:t(e.format),getStylePreview:o(e.format)}),JF=(e,t,o,n)=>{const s=t=>L(t,(t=>GF(t)?(e=>{const t=s(e.items);return{...e,type:"submenu",getStyleItems:y(t)}})(t):jF(t)?(e=>KF(e,o,n))(t):(e=>{const t=re(e);return 1===t.length&&I(t,"title")})(t)?{...t,type:"separator"}:(t=>{const s=r(t.name)?t.name:Ne(t.title),a=`custom-${s}`,i={...t,type:"formatter",format:a,isSelected:o(a),getStylePreview:n(a)};return e.formatter.register(s,i),i})(t)));return s(t)},QF=e=>{let t=0;const o=e=>[{dom:{tag:"div",classes:["tox-tooltip__body"]},components:[Ag(e.tooltipText)]}];return{getConfig:n=>({delayForShow:()=>t>0?60:300,delayForHide:y(300),exclusive:!0,lazySink:e,tooltipDom:{tag:"div",classes:["tox-tooltip","tox-tooltip--up"]},tooltipComponents:o(n),onShow:(e,o)=>{t++,n.onShow&&n.onShow(e,o)},onHide:(e,o)=>{t--,n.onHide&&n.onHide(e,o)},onSetup:n.onSetup}),getComponents:o}},ZF=ZD.trim,eI=e=>t=>{if((e=>g(e)&&1===e.nodeType)(t)){if(t.contentEditable===e)return!0;if(t.getAttribute("data-mce-contenteditable")===e)return!0}return!1},tI=eI("true"),oI=eI("false"),nI=(e,t,o,n,s)=>({type:e,title:t,url:o,level:n,attach:s}),sI=e=>e.innerText||e.textContent,rI=e=>(e=>e&&"A"===e.nodeName&&void 0!==(e.id||e.name))(e)&&iI(e),aI=e=>e&&/^(H[1-6])$/.test(e.nodeName),iI=e=>(e=>{let t=e;for(;t=t.parentNode;){const e=t.contentEditable;if(e&&"inherit"!==e)return tI(t)}return!1})(e)&&!oI(e),lI=e=>aI(e)&&iI(e),cI=e=>{const t=(e=>e.id?e.id:Ne("h"))(e);return nI("header",sI(e)??"","#"+t,(e=>aI(e)?parseInt(e.nodeName.substr(1),10):0)(e),(()=>{e.id=t}))},dI=e=>{const t=e.id||e.name,o=sI(e);return nI("anchor",o||"#"+t,"#"+t,0,b)},uI=e=>ZF(e.title).length>0,mI=e=>{const t=(e=>{const t=L(ms(ct(e),"h1,h2,h3,h4,h5,h6,a:not([href])"),(e=>e.dom));return t})(e);return P((e=>L(P(e,lI),cI))(t).concat((e=>L(P(e,rI),dI))(t)),uI)},gI="tinymce-url-history",pI=e=>r(e)&&/^https?/.test(e),hI=e=>a(e)&&pe(e,(e=>{return!(l(t=e)&&t.length<=5&&X(t,pI));var t})).isNone(),fI=()=>{const e=yM.getItem(gI);if(null===e)return{};let t;try{t=JSON.parse(e)}catch(e){if(e instanceof SyntaxError)return console.log("Local storage "+gI+" was not valid JSON",e),{};throw e}return hI(t)?t:(console.log("Local storage "+gI+" was not valid format",t),{})},bI=e=>{const t=fI();return fe(t,e).getOr([])},vI=(e,t)=>{if(!pI(e))return;const o=fI(),n=fe(o,t).getOr([]),s=P(n,(t=>t!==e));o[t]=[e].concat(s).slice(0,5),(e=>{if(!hI(e))throw new Error("Bad format for history:\n"+JSON.stringify(e));yM.setItem(gI,JSON.stringify(e))})(o)},xI=e=>!!e,yI=e=>le(ZD.makeMap(e,/[, ]/),xI),wI=e=>A.from(cC(e)),SI=e=>A.from(e).filter(r).getOrUndefined(),CI=e=>({getHistory:bI,addToHistory:vI,getLinkInformation:()=>(e=>gC(e)?A.some({targets:mI(e.getBody()),anchorTop:SI(pC(e)),anchorBottom:SI(hC(e))}):A.none())(e),getValidationHandler:()=>(e=>A.from(dC(e)))(e),getUrlPicker:t=>((e,t)=>((e,t)=>{const o=(e=>{const t=A.from(mC(e)).filter(xI).map(yI);return wI(e).fold(T,(e=>t.fold(E,(e=>re(e).length>0&&e))))})(e);return d(o)?o?wI(e):A.none():o[t]?wI(e):A.none()})(e,t).map((o=>n=>Oe((s=>{const i={filetype:t,fieldname:n.fieldname,...A.from(n.meta).getOr({})};o.call(e,((e,t)=>{if(!r(e))throw new Error("Expected value to be string");if(void 0!==t&&!a(t))throw new Error("Expected meta to be a object");s({value:e,meta:t})}),n.value,i)})))))(e,t)}),kI={skipFocus:"ToggleToolbarDrawer skipFocus is deprecated see migration guide: https://www.tiny.cloud/docs/tinymce/latest/migration-from-7x/"},OI=b,_I=T,TI=y([]);var EI,AI=Object.freeze({__proto__:null,setup:OI,isDocked:_I,getBehaviours:TI});const MI=y(Ne("toolbar-height-change")),DI={fadeInClass:"tox-editor-dock-fadein",fadeOutClass:"tox-editor-dock-fadeout",transitionClass:"tox-editor-dock-transition"},BI="tox-tinymce--toolbar-sticky-on",FI="tox-tinymce--toolbar-sticky-off",II=(e,t)=>I(Bp.getModes(e),t),RI=e=>{const t=e.element;po(t).each((o=>{const n="padding-"+Bp.getModes(e)[0];if(Bp.isDocked(e)){const e=En(o);mn(t,"width",e+"px"),mn(o,n,(e=>On(e)+(parseInt(hn(e,"margin-top"),10)||0)+(parseInt(hn(e,"margin-bottom"),10)||0))(t)+"px")}else yn(t,"width"),yn(o,n)}))},NI=(e,t)=>{t?(ss(e,DI.fadeOutClass),as(e,[DI.transitionClass,DI.fadeInClass])):(ss(e,DI.fadeInClass),as(e,[DI.fadeOutClass,DI.transitionClass]))},zI=(e,t)=>{const o=ct(e.getContainer());t?(os(o,BI),ss(o,FI)):(os(o,FI),ss(o,BI))},LI=(e,t)=>{const o=Xe(),n=t.getSink,s=e=>{n().each((t=>e(t.element)))},r=t=>{e.inline||RI(t),zI(e,Bp.isDocked(t)),t.getSystem().broadcastOn([Ed()],{}),n().each((e=>e.getSystem().broadcastOn([Ed()],{})))},a=e.inline?[]:[ab.config({channels:{[MI()]:{onReceive:RI}}})];return[fd.config({}),Bp.config({contextual:{lazyContext:t=>{const o=On(t.element),n=e.inline?e.getContentAreaContainer():e.getContainer();return A.from(n).map((n=>{const s=Rs(ct(n));return qC(e,t.element).fold((()=>{const e=s.height-o,n=s.y+(II(t,"top")?0:o);return Is(s.x,n,s.width,e)}),(e=>{const n=zs(s,XC(e)),r=II(t,"top")?n.y:n.y+o;return Is(n.x,r,n.width,n.height-o)}))}))},onShow:()=>{s((e=>NI(e,!0)))},onShown:e=>{s((e=>is(e,[DI.transitionClass,DI.fadeInClass]))),o.get().each((t=>{((e,t)=>{const o=lo(t);Vo(o).filter((e=>!yt(t,e))).filter((t=>yt(t,ct(o.dom.body))||wt(e,t))).each((()=>No(t)))})(e.element,t),o.clear()}))},onHide:e=>{((e,t)=>Ho(e).orThunk((()=>t().toOptional().bind((e=>Ho(e.element))))))(e.element,n).fold(o.clear,o.set),s((e=>NI(e,!1)))},onHidden:()=>{s((e=>is(e,[DI.transitionClass])))},...DI},lazyViewport:t=>qC(e,t.element).fold((()=>{const o=Ls(),n=aC(e),s=o.y+(II(t,"top")&&!jC(e)?n:0),r=o.height-(II(t,"bottom")?n:0);return{bounds:Is(o.x,s,o.width,r),optScrollEnv:A.none()}}),(e=>({bounds:XC(e),optScrollEnv:A.some({currentScrollTop:e.element.dom.scrollTop,scrollElmTop:Fn(e.element).top})}))),modes:[t.header.getDockingMode()],onDocked:r,onUndocked:r}),...a]};var VI=Object.freeze({__proto__:null,setup:(e,t,o)=>{e.inline||(t.header.isPositionedAtTop()||e.on("ResizeEditor",(()=>{o().each(Bp.reset)})),e.on("ResizeWindow ResizeEditor",(()=>{o().each(RI)})),e.on("SkinLoaded",(()=>{o().each((e=>{Bp.isDocked(e)?Bp.reset(e):Bp.refresh(e)}))})),e.on("FullscreenStateChanged",(()=>{o().each(Bp.reset)}))),e.on("AfterScrollIntoView",(e=>{o().each((t=>{Bp.refresh(t);const o=t.element;_n(o)&&((e,t)=>{const o=lo(t),n=mo(t).dom.innerHeight,s=Rn(o),r=ct(e.elm),a=Ns(r),i=kn(r),l=a.y,c=l+i,d=Fn(t),u=kn(t),m=d.top,g=m+u,p=Math.abs(m-s.top)<2,h=Math.abs(g-(s.top+n))<2;if(p&&lm){const e=l-n+i+u;Nn(s.left,e,o)}})(e,o)}))})),e.on("PostRender",(()=>{zI(e,!1)}))},isDocked:e=>e().map(Bp.isDocked).getOr(!1),getBehaviours:LI}),HI=ih({factory:(e,t)=>{const o={focus:Om.focusIn,setMenus:(e,o)=>{const n=L(o,(e=>{const o={type:"menubutton",text:e.text,fetch:t=>{t(e.getItems())},context:"any"},n=zT(o).mapError((e=>Ar(e))).getOrDie();return JB(n,"tox-mbtn",t.backstage,A.some("menuitem"))}));ng.set(e,n)}};return{uid:e.uid,dom:e.dom,components:[],behaviours:rd([ng.config({}),ud("menubar-events",[Jc((t=>{e.onSetup(t)})),Wc(va(),((e,t)=>{Xn(e.element,".tox-mbtn--active").each((o=>{Yn(t.event.target,".tox-mbtn").each((t=>{yt(o,t)||e.getSystem().getByDom(o).each((o=>{e.getSystem().getByDom(t).each((e=>{kx.expand(e),kx.close(o),fd.focus(e)}))}))}))}))})),Wc(Ja(),((e,t)=>{t.event.prevFocus.bind((t=>e.getSystem().getByDom(t).toOptional())).each((o=>{t.event.newFocus.bind((t=>e.getSystem().getByDom(t).toOptional())).each((e=>{kx.isOpen(o)&&(kx.expand(e),kx.close(o))}))}))}))]),Om.config({mode:"flow",selector:".tox-mbtn",onEscape:t=>(e.onEscape(t),A.some(!0))}),Gb.config({})]),apis:o,domModification:{attributes:{role:"menubar"}}}},name:"silver.Menubar",configFields:[Rr("dom"),Rr("uid"),Rr("onEscape"),Rr("backstage"),Qr("onSetup",b)],apis:{focus:(e,t)=>{e.focus(t)},setMenus:(e,t,o)=>{e.setMenus(t,o)}}});const PI=e=>({element:()=>e.element.dom}),UI=(e,t)=>{const o=L(re(t),(e=>{const o=t[e],n=Tr((e=>_r("sidebar",JE,e))(o));return{name:e,getApi:PI,onSetup:n.onSetup,onShow:n.onShow,onHide:n.onHide}}));return L(o,(t=>{const n=ye(b);return e.slot(t.name,{dom:{tag:"div",classes:["tox-sidebar__pane"]},behaviours:aA([uA(t,n),mA(t,n),Wc(Qa(),((e,t)=>{const n=t.event,s=$(o,(e=>e.name===n.name));s.each((t=>{(n.visible?t.onShow:t.onHide)(t.getApi(e))}))}))])})}))},WI=e=>qw.sketch((t=>({dom:{tag:"div",classes:["tox-sidebar__pane-container"]},components:UI(t,e),slotBehaviours:aA([Jc((e=>qw.hideAllSlots(e)))])}))),$I=(e,t)=>{qo(e,"role",t)},GI=e=>Pg.getCurrent(e).bind((e=>zb.isGrowing(e)||zb.hasGrown(e)?Pg.getCurrent(e).bind((e=>$(qw.getSlotNames(e),(t=>qw.isShowing(e,t))))):A.none())),jI=Ne("FixSizeEvent"),qI=Ne("AutoSizeEvent"),XI=e=>Pg.getCurrent(e).each((e=>No(e.element,!0))),YI=(e,t,o)=>{const n=ye(!1),s=Xe(),r=o=>{var s;n.get()&&(!(e=>"focusin"===e.type)(s=o)||!(s.composed?te(s.composedPath()):A.from(s.target)).map(ct).filter(no).exists((e=>rs(e,"mce-pastebin"))))&&(o.preventDefault(),XI(t()),e.editorManager.setActive(e))};e.inline||e.on("PreInit",(()=>{e.dom.bind(e.getWin(),"focusin",r),e.on("BeforeExecCommand",(e=>{"mcefocus"===e.command.toLowerCase()&&!0!==e.value&&r(e)}))}));const a=s=>{s!==n.get()&&(n.set(s),((e,t,o,n)=>{const s=t.element;if(((e,t)=>{const o="tabindex",n=`data-mce-${o}`;A.from(e.iframeElement).map(ct).each((e=>{t?(Ko(e,o).each((t=>qo(e,n,t))),qo(e,o,-1)):(Qo(e,o),Ko(e,n).each((t=>{qo(e,o,t),Qo(e,n)})))}))})(e,o),o)Lg.block(t,(e=>(t,o)=>({dom:{tag:"div",attributes:{"aria-label":e.translate("Loading..."),tabindex:"0"},classes:["tox-throbber__busy-spinner"]},components:[{dom:gv('
')}]}))(n)),yn(s,"display"),Qo(s,"aria-hidden"),e.hasFocus()&&XI(t);else{const o=Pg.getCurrent(t).exists((e=>Lo(e.element)));Lg.unblock(t),mn(s,"display","none"),qo(s,"aria-hidden","true"),o&&e.focus()}})(e,t(),s,o.providers),((e,t)=>{e.dispatch("AfterProgressState",{state:t})})(e,s))};e.on("ProgressState",(t=>{if(s.on(clearTimeout),h(t.time)){const o=IS.setEditorTimeout(e,(()=>a(t.state)),t.time);s.set(o)}else a(t.state),s.clear()}))},KI=e=>{const t=e.label.isNone()?e.title.fold((()=>({})),(e=>({attributes:{"aria-label":e}}))):e.label.fold((()=>({})),(e=>({attributes:{"aria-label":e}})));return{dom:{tag:"div",classes:["tox-toolbar__group"].concat(e.label.isSome()?["tox-toolbar__group_with_label"]:[]),...t},components:[...e.label.map((e=>({dom:{tag:"span",classes:["tox-label","tox-label--context-toolbar"]},components:[Ag(e)]}))).toArray(),sS.parts.items({})],items:e.items,markers:{itemSelector:".tox-tbtn:not([disabled]), .tox-toolbar-nav-item:not([disabled]), .tox-number-input:not([disabled])"},tgroupBehaviours:rd([Gb.config({}),fd.config({ignore:!0})])}},JI=e=>sS.sketch(KI(e)),QI=(e,t)=>{const o=Jc((t=>{const o=L(e.initGroups,JI);Bx.setGroups(t,o)}));return rd([cA((()=>e.providers.checkUiComponentContext("any").shouldDisable)),yA((()=>e.providers.checkUiComponentContext("any"))),Om.config({mode:t,onEscape:e.onEscape,visibilitySelector:".tox-toolbar__overflow",selector:".tox-toolbar__group"}),ud("toolbar-events",[o])])},ZI=e=>{const t=e.cyclicKeying?"cyclic":"acyclic";return{uid:e.uid,dom:{tag:"div",classes:["tox-toolbar-overlord"]},parts:{"overflow-group":KI({title:A.none(),label:A.none(),items:[]}),"overflow-button":uF({context:"any",name:"more",icon:A.some("more-drawer"),enabled:!0,tooltip:A.some("Reveal or hide additional toolbar items"),primary:!1,buttonType:A.none(),borderless:!1},A.none(),e.providers,[],"overflow-button")},splitToolbarBehaviours:QI(e,t)}},eR=e=>{const t=ZI(e),o=iS.parts.primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}});return iS.sketch({...t,lazySink:e.getSink,getOverflowBounds:()=>{const t=e.moreDrawerData.lazyHeader().element,o=Ns(t),n=uo(t),s=Ns(n),r=Math.max(n.dom.scrollHeight,s.height);return Is(o.x+4,s.y,o.width-8,r)},parts:{...t.parts,overflow:{dom:{tag:"div",classes:["tox-toolbar__overflow"],attributes:e.attributes}}},components:[o],markers:{overflowToggledClass:"tox-tbtn--enabled"},onOpened:t=>e.onToggled(t,!0),onClosed:t=>e.onToggled(t,!1)})},tR=e=>{const t=mS.parts.primary({dom:{tag:"div",classes:["tox-toolbar__primary"]}}),o=mS.parts.overflow({dom:{tag:"div",classes:["tox-toolbar__overflow"]}}),n=ZI(e);return mS.sketch({...n,components:[t,o],markers:{openClass:"tox-toolbar__overflow--open",closedClass:"tox-toolbar__overflow--closed",growingClass:"tox-toolbar__overflow--growing",shrinkingClass:"tox-toolbar__overflow--shrinking",overflowToggledClass:"tox-tbtn--enabled"},onOpened:t=>{t.getSystem().broadcastOn([MI()],{type:"opened"}),e.onToggled(t,!0)},onClosed:t=>{t.getSystem().broadcastOn([MI()],{type:"closed"}),e.onToggled(t,!1)}})},oR=e=>{const t=e.cyclicKeying?"cyclic":"acyclic";return Bx.sketch({uid:e.uid,dom:{tag:"div",classes:["tox-toolbar"].concat(e.type===DS.scrolling?["tox-toolbar--scrolling"]:[])},components:[Bx.parts.groups({})],toolbarBehaviours:QI(e,t)})},nR=(e,t)=>((e,t)=>{const o="togglebutton"===e.type,n=e.icon.map((e=>MB(e,t.icons))).map(pv),s={...e,name:o?e.text.getOr(e.icon.getOr("")):e.text??e.icon.getOr(""),primary:"primary"===e.buttonType,buttonType:A.from(e.buttonType),tooltip:e.tooltip,icon:e.icon,enabled:!0,borderless:e.borderless},r=mF(e.buttonType??"secondary"),a=o?e.text.map(t.translate):A.some(t.translate(e.text)),i=a.map(Ag),l=s.tooltip.or(a).map((e=>({"aria-label":t.translate(e)}))).getOr({}),c=n.map((e=>e.asSpec())),d=CA([c,i]),u=e.icon.isSome()&&i.isSome(),m={tag:"button",classes:r.concat(...e.icon.isSome()&&!u?["tox-button--icon"]:[]).concat(...u?["tox-button--icon-and-text"]:[]).concat(...e.borderless?["tox-button--naked"]:[]).concat(..."togglebutton"===e.type&&e.active?["tox-button--enabled"]:[]),attributes:l},g=dF(s,A.some((s=>{const r=e=>{n.map((o=>o.getOpt(s).each((o=>{ng.set(o,[MB(e,t.icons)])}))))};return o?e.onAction({setIcon:r,setActive:e=>{const t=s.element;e?(os(t,"tox-button--enabled"),qo(t,"aria-pressed",!0)):(ss(t,"tox-button--enabled"),Qo(t,"aria-pressed"))},isActive:()=>rs(s.element,"tox-button--enabled"),focus:()=>No(s.element)}):"button"===e.type?e.onAction({setIcon:r}):void 0})),[],m,d,e.tooltip,t);return Tv.sketch(g)})(e,t),sR=Jt().deviceType,rR=sR.isPhone(),aR=sR.isTablet();var iR=lh({name:"silver.View",configFields:[Rr("viewConfig")],partFields:[Zi({factory:{sketch:e=>{let t=!1;const o=L(e.buttons,(o=>"group"===o.type?(t=!0,((e,t)=>({dom:{tag:"div",classes:["tox-view__toolbar__group"]},components:L(e.buttons,(e=>nR(e,t)))}))(o,e.providers)):nR(o,e.providers)));return{uid:e.uid,dom:{tag:"div",classes:[t?"tox-view__toolbar":"tox-view__header",...rR||aR?["tox-view--mobile","tox-view--scrolling"]:[]]},behaviours:rd([fd.config({}),Om.config({mode:"flow",selector:"button, .tox-button",focusInside:Ei.OnEnterOrSpaceMode})]),components:t?o:[ch.sketch({dom:{tag:"div",classes:["tox-view__header-start"]},components:[]}),ch.sketch({dom:{tag:"div",classes:["tox-view__header-end"]},components:o})]}}},schema:[Rr("buttons"),Rr("providers")],name:"header"}),Zi({factory:{sketch:e=>({uid:e.uid,behaviours:rd([fd.config({}),Gb.config({})]),dom:{tag:"div",classes:["tox-view__pane"]}})},schema:[],name:"pane"})],factory:(e,t,o,n)=>{const s={getPane:t=>hv.getPart(t,e,"pane"),getOnShow:t=>e.viewConfig.onShow,getOnHide:t=>e.viewConfig.onHide};return{uid:e.uid,dom:e.dom,components:t,behaviours:rd([fd.config({}),Om.config({mode:"cyclic",focusInside:Ei.OnEnterOrSpaceMode})]),apis:s}},apis:{getPane:(e,t)=>e.getPane(t),getOnShow:(e,t)=>e.getOnShow(t),getOnHide:(e,t)=>e.getOnHide(t)}});const lR=(e,t,o)=>ge(t,((t,n)=>{const s=Tr(_r("view",sA,t));return e.slot(n,iR.sketch({dom:{tag:"div",classes:["tox-view"]},viewConfig:s,components:[...s.buttons.length>0?[iR.parts.header({buttons:s.buttons,providers:o})]:[],iR.parts.pane({})]}))})),cR=(e,t)=>qw.sketch((o=>({dom:{tag:"div",classes:["tox-view-wrap__slot-container"]},components:lR(o,e,t),slotBehaviours:aA([Jc((e=>qw.hideAllSlots(e)))])}))),dR=e=>$(qw.getSlotNames(e),(t=>qw.isShowing(e,t))),uR=(e,t,o)=>{qw.getSlot(e,t).each((e=>{iR.getPane(e).each((t=>{var n;o(e)((n=t.element.dom,{getContainer:y(n)}))}))}))};var mR=ih({factory:(e,t)=>{const o={setViews:(e,o)=>{ng.set(e,[cR(o,t.backstage.shared.providers)])},whichView:e=>Pg.getCurrent(e).bind(dR),toggleView:(e,t,o,n)=>Pg.getCurrent(e).exists((s=>{const r=dR(s),a=r.exists((e=>n===e)),i=qw.getSlot(s,n).isSome();return i&&(qw.hideAllSlots(s),a?((e=>{const t=e.element;mn(t,"display","none"),qo(t,"aria-hidden","true")})(e),t()):(o(),(e=>{const t=e.element;yn(t,"display"),Qo(t,"aria-hidden")})(e),qw.showSlot(s,n),((e,t)=>{uR(e,t,iR.getOnShow)})(s,n)),r.each((e=>((e,t)=>uR(e,t,iR.getOnHide))(s,e)))),i}))};return{uid:e.uid,dom:{tag:"div",classes:["tox-view-wrap"],attributes:{"aria-hidden":"true"},styles:{display:"none"}},components:[],behaviours:rd([ng.config({}),Pg.config({find:e=>{const t=ng.contents(e);return te(t)}})]),apis:o}},name:"silver.ViewWrapper",configFields:[Rr("backstage")],apis:{setViews:(e,t,o)=>e.setViews(t,o),toggleView:(e,t,o,n,s)=>e.toggleView(t,o,n,s),whichView:(e,t)=>e.whichView(t)}});const gR=fv.optional({factory:HI,name:"menubar",schema:[Rr("backstage")]}),pR=fv.optional({factory:{sketch:e=>Dv.sketch({uid:e.uid,dom:e.dom,listBehaviours:rd([Om.config({mode:"acyclic",selector:".tox-toolbar"})]),makeItem:()=>oR({type:e.type,uid:Ne("multiple-toolbar-item"),cyclicKeying:!1,initGroups:[],providers:e.providers,onEscape:()=>(e.onEscape(),A.some(!0))}),setupItem:(e,t,o,n)=>{Bx.setGroups(t,o)},shell:!0})},name:"multiple-toolbar",schema:[Rr("dom"),Rr("onEscape")]}),hR=fv.optional({factory:{sketch:e=>{const t=(e=>e.type===DS.sliding?tR:e.type===DS.floating?eR:oR)(e);return t({type:e.type,uid:e.uid,onEscape:()=>(e.onEscape(),A.some(!0)),onToggled:(t,o)=>e.onToolbarToggled(o),cyclicKeying:!1,initGroups:[],getSink:e.getSink,providers:e.providers,moreDrawerData:{lazyToolbar:e.lazyToolbar,lazyMoreButton:e.lazyMoreButton,lazyHeader:e.lazyHeader},attributes:e.attributes})}},name:"toolbar",schema:[Rr("dom"),Rr("onEscape"),Rr("getSink")]}),fR=fv.optional({factory:{sketch:e=>{const t=e.editor,o=e.sticky?LI:TI;return{uid:e.uid,dom:e.dom,components:e.components,behaviours:rd(o(t,e.sharedBackstage))}}},name:"header",schema:[Rr("dom")]}),bR=fv.optional({factory:{sketch:e=>{const t=e.promotionLink?[{dom:{tag:"a",attributes:{href:"https://www.tiny.cloud/tinymce-upgrade-to-cloud/?utm_campaign=self_hosted_upgrade_promo&utm_source=tiny&utm_medium=referral",rel:"noopener",target:"_blank","aria-hidden":"true"},classes:["tox-promotion-link"],innerHtml:"\u{1f49d} Get all features"}}]:[];return{uid:e.uid,dom:e.dom,components:t}}},name:"promotion",schema:[Rr("dom"),Rr("promotionLink")]}),vR=fv.optional({name:"socket",schema:[Rr("dom")]}),xR=fv.optional({factory:{sketch:e=>({uid:e.uid,dom:{tag:"div",classes:["tox-sidebar"],attributes:{role:"presentation"}},components:[{dom:{tag:"div",classes:["tox-sidebar__slider"]},components:[],behaviours:rd([Gb.config({}),fd.config({}),zb.config({dimension:{property:"width"},closedClass:"tox-sidebar--sliding-closed",openClass:"tox-sidebar--sliding-open",shrinkingClass:"tox-sidebar--sliding-shrinking",growingClass:"tox-sidebar--sliding-growing",onShrunk:e=>{Pg.getCurrent(e).each(qw.hideAllSlots),Ic(e,qI)},onGrown:e=>{Ic(e,qI)},onStartGrow:e=>{Rc(e,jI,{width:bn(e.element,"width").getOr("")})},onStartShrink:e=>{Rc(e,jI,{width:En(e.element)+"px"})}}),ng.config({}),Pg.config({find:e=>{const t=ng.contents(e);return te(t)}})])}],behaviours:rd([ID(0),ud("sidebar-sliding-events",[Wc(jI,((e,t)=>{mn(e.element,"width",t.event.width)})),Wc(qI,((e,t)=>{yn(e.element,"width")}))])])})},name:"sidebar",schema:[Rr("dom")]}),yR=fv.optional({factory:{sketch:e=>({uid:e.uid,dom:{tag:"div",attributes:{"aria-hidden":"true"},classes:["tox-throbber"],styles:{display:"none"}},behaviours:rd([ng.config({}),Lg.config({focus:!1}),Pg.config({find:e=>te(e.components())})]),components:[]})},name:"throbber",schema:[Rr("dom")]}),wR=fv.optional({factory:mR,name:"viewWrapper",schema:[Rr("backstage")]}),SR=fv.optional({factory:{sketch:e=>({uid:e.uid,dom:{tag:"div",classes:["tox-editor-container"]},components:e.components})},name:"editorContainer",schema:[]});var CR=lh({name:"OuterContainer",factory:(e,t,o)=>{let n=!1;const s=e=>{jn(e,".tox-statusbar").each((e=>{"none"===hn(e,"display")&&"true"===Yo(e,"aria-hidden")?(yn(e,"display"),Qo(e,"aria-hidden")):(mn(e,"display","none"),qo(e,"aria-hidden","true"))}))},a={getSocket:t=>hv.getPart(t,e,"socket"),setSidebar:(t,o,n)=>{hv.getPart(t,e,"sidebar").each((e=>((e,t,o)=>{Pg.getCurrent(e).each((n=>{ng.set(n,[WI(t)]);const s=o?.toLowerCase();r(s)&&be(t,s)&&Pg.getCurrent(n).each((t=>{qw.showSlot(t,s),zb.immediateGrow(n),yn(n.element,"width"),$I(e.element,"region")}))}))})(e,o,n)))},toggleSidebar:(t,o)=>{hv.getPart(t,e,"sidebar").each((e=>((e,t)=>{Pg.getCurrent(e).each((o=>{Pg.getCurrent(o).each((n=>{zb.hasGrown(o)?qw.isShowing(n,t)?(zb.shrink(o),$I(e.element,"presentation")):(qw.hideAllSlots(n),qw.showSlot(n,t),$I(e.element,"region")):(qw.hideAllSlots(n),qw.showSlot(n,t),zb.grow(o),$I(e.element,"region"))}))}))})(e,o)))},whichSidebar:t=>hv.getPart(t,e,"sidebar").bind(GI).getOrNull(),getHeader:t=>hv.getPart(t,e,"header"),getToolbar:t=>hv.getPart(t,e,"toolbar"),setToolbar:(t,o)=>{hv.getPart(t,e,"toolbar").each((e=>{const t=L(o,JI);e.getApis().setGroups(e,t)}))},setToolbars:(t,o)=>{hv.getPart(t,e,"multiple-toolbar").each((e=>{const t=L(o,(e=>L(e,JI)));Dv.setItems(e,t)}))},refreshToolbar:t=>{hv.getPart(t,e,"toolbar").each((e=>e.getApis().refresh(e)))},toggleToolbarDrawer:t=>{hv.getPart(t,e,"toolbar").each((e=>{We(e.getApis().toggle,(t=>t(e)))}))},toggleToolbarDrawerWithoutFocusing:t=>{hv.getPart(t,e,"toolbar").each((e=>{We(e.getApis().toggleWithoutFocusing,(t=>t(e)))}))},isToolbarDrawerToggled:t=>hv.getPart(t,e,"toolbar").bind((e=>A.from(e.getApis().isOpen).map((t=>t(e))))).getOr(!1),getThrobber:t=>hv.getPart(t,e,"throbber"),focusToolbar:t=>{hv.getPart(t,e,"toolbar").orThunk((()=>hv.getPart(t,e,"multiple-toolbar"))).each((e=>{Om.focusIn(e)}))},setMenubar:(t,o)=>{hv.getPart(t,e,"menubar").each((e=>{HI.setMenus(e,o)}))},focusMenubar:t=>{hv.getPart(t,e,"menubar").each((e=>{HI.focus(e)}))},setViews:(t,o)=>{hv.getPart(t,e,"viewWrapper").each((e=>{mR.setViews(e,o)}))},toggleView:(t,o)=>hv.getPart(t,e,"viewWrapper").exists((e=>mR.toggleView(e,(()=>a.showMainView(t)),(()=>a.hideMainView(t)),o))),whichView:t=>hv.getPart(t,e,"viewWrapper").bind(mR.whichView).getOrNull(),hideMainView:t=>{n=a.isToolbarDrawerToggled(t),n&&a.toggleToolbarDrawer(t),hv.getPart(t,e,"editorContainer").each((e=>{const t=e.element;s(t),mn(t,"display","none"),qo(t,"aria-hidden","true")}))},showMainView:t=>{n&&a.toggleToolbarDrawer(t),hv.getPart(t,e,"editorContainer").each((e=>{const t=e.element;s(t),yn(t,"display"),Qo(t,"aria-hidden")}))}};return{uid:e.uid,dom:e.dom,components:t,apis:a,behaviours:e.behaviours}},configFields:[Rr("dom"),Rr("behaviours")],partFields:[fR,gR,hR,pR,vR,xR,bR,yR,wR,SR],apis:{getSocket:(e,t)=>e.getSocket(t),setSidebar:(e,t,o,n)=>{e.setSidebar(t,o,n)},toggleSidebar:(e,t,o)=>{e.toggleSidebar(t,o)},whichSidebar:(e,t)=>e.whichSidebar(t),getHeader:(e,t)=>e.getHeader(t),getToolbar:(e,t)=>e.getToolbar(t),setToolbar:(e,t,o)=>{e.setToolbar(t,o)},setToolbars:(e,t,o)=>{e.setToolbars(t,o)},refreshToolbar:(e,t)=>e.refreshToolbar(t),toggleToolbarDrawer:(e,t)=>{e.toggleToolbarDrawer(t)},toggleToolbarDrawerWithoutFocusing:(e,t)=>{e.toggleToolbarDrawerWithoutFocusing(t)},isToolbarDrawerToggled:(e,t)=>e.isToolbarDrawerToggled(t),getThrobber:(e,t)=>e.getThrobber(t),setMenubar:(e,t,o)=>{e.setMenubar(t,o)},focusMenubar:(e,t)=>{e.focusMenubar(t)},focusToolbar:(e,t)=>{e.focusToolbar(t)},setViews:(e,t,o)=>{e.setViews(t,o)},toggleView:(e,t,o)=>e.toggleView(t,o),whichView:(e,t)=>e.whichView(t)}});const kR={file:{title:"File",items:"newdocument restoredraft | preview | importword exportpdf exportword | export print | deleteallconversations"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall | searchreplace"},view:{title:"View",items:"code suggestededits revisionhistory | visualaid visualchars visualblocks | spellchecker | preview fullscreen | showcomments"},insert:{title:"Insert",items:"image video link media addcomment pageembed inserttemplate codesample inserttable accordion math | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents footnotes | mergetags | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | styles blocks fontfamily fontsize align lineheight | forecolor backcolor | language | removeformat"},tools:{title:"Tools",items:"aidialog aishortcuts | spellchecker spellcheckerlanguage | autocorrect capitalization | a11ycheck code typography wordcount addtemplate"},table:{title:"Table",items:"inserttable | cell row column | advtablesort | tableprops deletetable"},help:{title:"Help",items:"help"}},OR=e=>e.split(" "),_R=(e,t)=>{const o={...kR,...t.menus},n=re(t.menus).length>0,s=void 0===t.menubar||!0===t.menubar?OR("file edit view insert format tools table help"):OR(!1===t.menubar?"":t.menubar),a=P(s,(e=>{const o=be(kR,e);return n?o||fe(t.menus,e).exists((e=>be(e,"items"))):o})),i=L(a,(n=>{const s=o[n];return((e,t,o)=>{const n=ZS(o).split(/[ ,]/);return{text:e.title,getItems:()=>q(e.items,(e=>{const o=e.toLowerCase();return 0===o.trim().length||R(n,(e=>e===o))?[]:"separator"===o||"|"===o?[{type:"separator"}]:t.menuItems[o]?[t.menuItems[o]]:[]}))}})({title:s.title,items:OR(s.items)},t,e)}));return P(i,(e=>e.getItems().length>0&&R(e.getItems(),(e=>r(e)||"separator"!==e.type))))},TR=(e,t,o)=>(e.on("remove",(()=>o.unload(t))),o.load(t)),ER=(e,t,o,n)=>(e.on("remove",(()=>n.unloadRawCss(t))),n.loadRawCss(t,o)),AR=e=>A.from(tinymce.Resource.get(e)).filter(r),MR=(e,t,o="")=>{const n=(e=>{const t=_C(e);return t?A.from(t):A.none()})(e).map((e=>((e,t)=>"ui/"+e+"/"+t)(e,`${t}.css`))),s=n.bind(AR);return Ue(n,s,((e,t)=>({_kind:"load-raw",key:e,css:t}))).getOrThunk((()=>{const n=e.editorManager.suffix;return{_kind:"load-stylesheet",url:o+`/${t}${n}.css`}}))},DR=(e,t)=>{const o=e.ui.styleSheetLoader,n=MR(e,"skin",t);switch(n._kind){case"load-raw":const{key:t,css:s}=n;return ER(e,t,s,o),Promise.resolve();case"load-stylesheet":const{url:r}=n;return TR(e,r,o);default:return Promise.resolve()}},BR=(e,t)=>{var o;if(o=ct(e.getElement()),!_o(o).isSome())return Promise.resolve();{const o=RS.DOM.styleSheetLoader,n=MR(e,"skin.shadowdom",t);switch(n._kind){case"load-raw":const{key:t,css:s}=n;return ER(e,t,s,o),Promise.resolve();case"load-stylesheet":const{url:r}=n;return TR(e,r,o);default:return Promise.resolve()}}},FR=(e,t)=>(async(e,t)=>{const o=AC(t);if(await((e,t,o)=>{const n=MR(e,t?"content.inline":"content",o);switch(n._kind){case"load-raw":const{key:s,css:r}=n;return t?ER(e,s,r,e.ui.styleSheetLoader):e.on("PostRender",(()=>{ER(e,s,r,e.dom.styleSheetLoader)})),Promise.resolve();case"load-stylesheet":const{url:a}=n;return o&&e.contentCSS.push(a),Promise.resolve();default:return Promise.resolve()}})(t,e,o),!TC(t)&&r(o))return Promise.all([DR(t,o),BR(t,o)]).then()})(e,t).then((e=>{const t=()=>{e._skinLoaded=!0,(e=>{e.dispatch("SkinLoaded")})(e)};return()=>{e.initialized?t():e.on("init",t)}})(t),(e=>()=>((e,t)=>{e.dispatch("SkinLoadError",t)})(e,{message:"Skin could not be loaded"}))(t)),IR=C(FR,!1),RR=C(FR,!0),NR=e=>({isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t),setText:t=>Rc(e,BB,{text:t}),setIcon:t=>Rc(e,FB,{icon:t})}),zR=e=>({setActive:t=>{Zb.set(e,t)},isActive:()=>Zb.isOn(e),isEnabled:()=>!rp.isDisabled(e),setEnabled:t=>rp.set(e,!t),setText:t=>Rc(e,BB,{text:t}),setIcon:t=>Rc(e,FB,{icon:t})}),LR=(e,t)=>e.map((e=>({"aria-label":t.translate(e)}))).getOr({}),VR=Ne("focus-button"),HR=(e,t,o,n,s,r,a)=>{const i=t.map((e=>pv(DB(e,"tox-tbtn",s)))),l=e.map((e=>pv(MB(e,s.icons))));return{dom:{tag:"button",classes:["tox-tbtn"].concat(t.isSome()?["tox-tbtn--select"]:[]),attributes:{...LR(o,s),...g(a)?{"data-mce-name":a}:{}}},components:CA([l.map((e=>e.asSpec())),i.map((e=>e.asSpec()))]),eventOrder:{[pa()]:["focusing","alloy.base.behaviour",OB],[qa()]:[OB,"toolbar-group-button-events"],[Xa()]:[OB,"toolbar-group-button-events","tooltipping"]},buttonBehaviours:rd([cA((()=>s.checkUiComponentContext(r).shouldDisable)),yA((()=>s.checkUiComponentContext(r))),ud(OB,[Jc(((e,t)=>TB(e))),Wc(BB,((e,t)=>{i.bind((t=>t.getOpt(e))).each((e=>{ng.set(e,[Ag(s.translate(t.event.text))])}))})),Wc(FB,((e,t)=>{l.bind((t=>t.getOpt(e))).each((e=>{ng.set(e,[MB(t.event.icon,s.icons)])}))})),Wc(pa(),((e,t)=>{t.event.prevent(),Ic(e,VR)}))])].concat(n.getOr([])))}},PR=(e,t,o,n)=>{const s=ye(b),r=HR(e.icon,e.text,e.tooltip,A.none(),o,e.context,n);return Tv.sketch({dom:r.dom,components:r.components,eventOrder:_B,buttonBehaviours:{...rd([ud("toolbar-button-events",[(a={onAction:e.onAction,getApi:t.getApi},ed(((e,t)=>{dA(a,e)((t=>{Rc(e,kB,{buttonApi:t}),a.onAction(t)}))}))),uA(t,s),mA(t,s)]),...e.tooltip.map((t=>uv.config(o.tooltips.getConfig({tooltipText:o.translate(t)+e.shortcut.map((e=>` (${TA(e)})`)).getOr("")})))).toArray(),cA((()=>!e.enabled||o.checkUiComponentContext(e.context).shouldDisable)),yA((()=>o.checkUiComponentContext(e.context)))].concat(t.toolbarButtonBehaviours)),[OB]:r.buttonBehaviours?.[OB]}});var a},UR=(e,t,o,n)=>PR(e,{toolbarButtonBehaviours:o.length>0?[ud("toolbarButtonWith",o)]:[],getApi:NR,onSetup:e.onSetup},t,n),WR=(e,t,o,n)=>PR(e,{toolbarButtonBehaviours:[ng.config({}),Zb.config({toggleClass:"tox-tbtn--enabled",aria:{mode:"pressed"},toggleOnExecute:!1})].concat(o.length>0?[ud("toolbarToggleButtonWith",o)]:[]),getApi:zR,onSetup:e.onSetup},t,n),$R=(e,t,o)=>n=>Oe((e=>t.fetch(e))).map((s=>A.from(uD(Le(XM(Ne("menu-value"),s,(o=>{t.onItemAction(e(n),o)}),t.columns,t.presets,dO.CLOSE_ON_EXECUTE,t.select.getOr(T),o),{movement:KM(t.columns,t.presets),menuBehaviours:aA("auto"!==t.columns?[]:[Jc(((e,o)=>{rA(e,4,SO(t.presets)).each((({numRows:t,numColumns:o})=>{Om.setGridSize(e,t,o)}))}))])}))))),GR=e=>{Xx.getContent(e).each((e=>{Xn(e.element,".tox-toolbar-slider__input,.tox-toolbar-textfield").fold((()=>Om.focusIn(e)),No)}))},jR=Ne("forward-slide"),qR=Ne("backward-slide"),XR=Ne("change-slide-event"),YR="tox-pop--resizing",KR=(e,t,o)=>ot(o)?e.translate(t):e.translate([t,e.translate(o)]),JR=(e,t)=>{const o=(o,s,r,a)=>{const i=e.shared.providers.translate(o.title);if("separator"===o.type)return A.some({type:"separator",text:i});if("submenu"===o.type){const e=q(o.getStyleItems(),(e=>n(e,s,a)));return 0===s&&e.length<=0?A.none():A.some({type:"nestedmenuitem",text:i,enabled:e.length>0,getSubmenuItems:()=>q(o.getStyleItems(),(e=>n(e,s,a)))})}return A.some({type:"togglemenuitem",text:i,icon:o.icon,active:o.isSelected(a),enabled:!r,onAction:t.onAction(o),...o.getStylePreview().fold((()=>({})),(e=>({meta:{style:e}})))})},n=(e,n,s)=>{const r="formatter"===e.type&&t.isInvalid(e);return 0===n?r?[]:o(e,n,!1,s).toArray():o(e,n,r,s).toArray()},s=e=>{const o=t.getCurrentValue(),s=t.shouldHide?0:1;return q(e,(e=>n(e,s,o)))};return{validateItems:s,getFetch:(e,t)=>(o,n)=>{const r=t(),a=s(r);n(VB(a,dO.CLOSE_ON_EXECUTE,e,{isHorizontalMenu:!1,search:A.none()}))}}},QR=(e,t)=>{const o=t.dataset,n="basic"===o.type?()=>L(o.data,(e=>KF(e,t.isSelectedFor,t.getPreviewFor))):o.getData;return{items:JR(e,t),getStyleItems:n}},ZR=(e,t,o,n,s,r)=>{const{items:a,getStyleItems:i}=QR(t,o),l=ye(o.tooltip);return RB({context:"mode:design",text:o.icon.isSome()?A.none():o.text,icon:o.icon,ariaLabel:A.some(o.tooltip),tooltip:A.none(),role:A.none(),fetch:a.getFetch(t,i),onSetup:t=>{const r=o=>t.setTooltip(KR(e,n(o.value),o.value));return e.on(s,r),pM(bM(e,"NodeChange",(t=>{const n=t.getComponent();o.updateText(n),rp.set(t.getComponent(),!e.selection.isEditable()||0===i().length)}))(t),(()=>e.off(s,r)))},getApi:e=>({getComponent:y(e),setTooltip:o=>{const n=t.shared.providers.translate(o);qo(e.element,"aria-label",n),l.set(o)}}),columns:1,presets:"normal",classes:o.icon.isSome()?[]:["bespoke"],dropdownBehaviours:[uv.config({...t.shared.providers.tooltips.getConfig({tooltipText:t.shared.providers.translate(o.tooltip),onShow:e=>{if(o.tooltip!==l.get()){const o=t.shared.providers.translate(l.get());uv.setComponents(e,t.shared.providers.tooltips.getComponents({tooltipText:o}))}}})})]},"tox-tbtn",t.shared,r)};var eN;!function(e){e[e.SemiColon=0]="SemiColon",e[e.Space=1]="Space"}(eN||(eN={}));const tN=(e,t,o)=>{const n=(s=((e,t)=>t===eN.SemiColon?e.replace(/;$/,"").split(";"):e.split(" "))(e.options.get(t),o),L(s,(e=>{let t=e,o=e;const n=e.split("=");return n.length>1&&(t=n[0],o=n[1]),{title:t,format:o}})));var s;return{type:"basic",data:n}},oN=y("Alignment {0}"),nN="left",sN=[{title:"Left",icon:"align-left",format:"alignleft",command:"JustifyLeft"},{title:"Center",icon:"align-center",format:"aligncenter",command:"JustifyCenter"},{title:"Right",icon:"align-right",format:"alignright",command:"JustifyRight"},{title:"Justify",icon:"align-justify",format:"alignjustify",command:"JustifyFull"}],rN=e=>{const t={type:"basic",data:sN};return{tooltip:KR(e,oN(),nN),text:A.none(),icon:A.some("align-left"),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:A.none,getPreviewFor:e=>A.none,onAction:t=>()=>$(sN,(e=>e.format===t.format)).each((t=>e.execCommand(t.command))),updateText:t=>{const o=$(sN,(t=>e.formatter.match(t.format))).fold(y(nN),(e=>e.title.toLowerCase()));Rc(t,FB,{icon:`align-${o}`}),((e,t)=>{e.dispatch("AlignTextUpdate",t)})(e,{value:o})},dataset:t,shouldHide:!1,isInvalid:t=>!e.formatter.canApply(t.format)}},aN=(e,t)=>{const o=t(),n=L(o,(e=>e.format));return A.from(e.formatter.closest(n)).bind((e=>$(o,(t=>t.format===e))))},iN=y("Block {0}"),lN="Paragraph",cN=e=>{const t=tN(e,"block_formats",eN.SemiColon);return{tooltip:KR(e,iN(),lN),text:A.some(lN),icon:A.none(),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:A.none,getPreviewFor:t=>()=>{const o=e.formatter.get(t);return o?A.some({tag:o.length>0&&(o[0].inline||o[0].block)||"div",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):A.none()},onAction:vM(e),updateText:o=>{const n=aN(e,(()=>t.data)).fold(y(lN),(e=>e.title));Rc(o,BB,{text:n}),((e,t)=>{e.dispatch("BlocksTextUpdate",t)})(e,{value:n})},dataset:t,shouldHide:!1,isInvalid:t=>!e.formatter.canApply(t.format)}},dN=y("Font {0}"),uN="System Font",mN=["-apple-system","Segoe UI","Roboto","Helvetica Neue","sans-serif"],gN=e=>{const t=e.split(/\s*,\s*/);return L(t,(e=>e.replace(/^['"]+|['"]+$/g,"")))},pN=(e,t)=>t.length>0&&X(t,(t=>e.indexOf(t.toLowerCase())>-1)),hN=e=>{const t=()=>{const t=e=>e?gN(e)[0]:"",n=e.queryCommandValue("FontName"),s=o.data,r=n?n.toLowerCase():"",a=OC(e),i=$(s,(e=>{const o=e.format;return o.toLowerCase()===r||t(o).toLowerCase()===t(r).toLowerCase()})).orThunk((()=>$e(((e,t)=>{if(0===e.indexOf("-apple-system")||t.length>0){const o=gN(e.toLowerCase());return pN(o,mN)||pN(o,t)}return!1})(r,a),{title:uN,format:r})));return{matchOpt:i,font:n}},o=tN(e,"font_family_formats",eN.SemiColon);return{tooltip:KR(e,dN(),uN),text:A.some(uN),icon:A.none(),isSelectedFor:e=>t=>t.exists((t=>t.format===e)),getCurrentValue:()=>{const{matchOpt:e}=t();return e},getPreviewFor:e=>()=>A.some({tag:"div",styles:-1===e.indexOf("dings")?{"font-family":e}:{}}),onAction:t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand("FontName",!1,t.format)}))},updateText:o=>{const{matchOpt:n,font:s}=t(),r=n.fold(y(s),(e=>e.title));Rc(o,BB,{text:r}),((e,t)=>{e.dispatch("FontFamilyTextUpdate",t)})(e,{value:r})},dataset:o,shouldHide:!1,isInvalid:T}};var fN=tinymce.util.Tools.resolve("tinymce.util.VK");const bN=y("Font size {0}"),vN="12pt",xN={"8pt":"1","10pt":"2","12pt":"3","14pt":"4","18pt":"5","24pt":"6","36pt":"7"},yN={"xx-small":"7pt","x-small":"8pt",small:"10pt",medium:"12pt",large:"14pt","x-large":"18pt","xx-large":"24pt"},wN=(e,t)=>/[0-9.]+px$/.test(e)?((e,t)=>{const o=Math.pow(10,t);return Math.round(e*o)/o})(72*parseInt(e,10)/96,t||0)+"pt":fe(yN,e).getOr(e),SN=e=>fe(xN,e).getOr(""),CN=e=>{const t=()=>{let t=A.none();const o=n.data,s=e.queryCommandValue("FontSize");if(s)for(let e=3;t.isNone()&&e>=0;e--){const n=wN(s,e),r=SN(n);t=$(o,(e=>e.format===s||e.format===n||e.format===r))}return{matchOpt:t,size:s}},o=y(A.none),n=tN(e,"font_size_formats",eN.Space);return{tooltip:KR(e,bN(),vN),text:A.some(vN),icon:A.none(),isSelectedFor:e=>t=>t.exists((t=>t.format===e)),getPreviewFor:o,getCurrentValue:()=>{const{matchOpt:e}=t();return e},onAction:t=>()=>{e.undoManager.transact((()=>{e.focus(),e.execCommand("FontSize",!1,t.format)}))},updateText:o=>{const{matchOpt:n,size:s}=t(),r=n.fold(y(s),(e=>e.title));Rc(o,BB,{text:r}),((e,t)=>{e.dispatch("FontSizeTextUpdate",t)})(e,{value:r})},dataset:n,shouldHide:!1,isInvalid:T}},kN=e=>ot(e)?"Formats":"Format {0}",ON=(e,t)=>{const o="Formats";return{tooltip:KR(e,kN(""),""),text:A.some(o),icon:A.none(),isSelectedFor:t=>()=>e.formatter.match(t),getCurrentValue:A.none,getPreviewFor:t=>()=>{const o=e.formatter.get(t);return void 0!==o?A.some({tag:o.length>0&&(o[0].inline||o[0].block)||"div",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):A.none()},onAction:vM(e),updateText:t=>{const n=e=>GF(e)?q(e.items,n):jF(e)?[{title:e.title,format:e.format}]:[],s=q(YF(e),n),r=aN(e,y(s)).fold(y({title:o,tooltipLabel:""}),(e=>({title:e.title,tooltipLabel:e.title})));Rc(t,BB,{text:r.title}),((e,t)=>{e.dispatch("StylesTextUpdate",t)})(e,{value:r.tooltipLabel})},shouldHide:JS(e),isInvalid:t=>!e.formatter.canApply(t.format),dataset:t}},_N=[{name:"history",items:["undo","redo"]},{name:"ai",items:["aidialog","aishortcuts"]},{name:"styles",items:["styles"]},{name:"formatting",items:["bold","italic"]},{name:"alignment",items:["alignleft","aligncenter","alignright","alignjustify"]},{name:"indentation",items:["outdent","indent"]},{name:"permanent pen",items:["permanentpen"]},{name:"comments",items:["addcomment"]}],TN=(e,t)=>(o,n,s,r)=>{const a=e(o).mapError((e=>Ar(e))).getOrDie();return t(a,n,s,r)},EN={button:TN(fE,((e,t,o,n)=>((e,t,o)=>UR(e,t,[],o))(e,t.shared.providers,n))),togglebutton:TN(xE,((e,t,o,n)=>((e,t,o)=>WR(e,t,[],o))(e,t.shared.providers,n))),menubutton:TN(zT,((e,t,o,n)=>JB(e,"tox-tbtn",t,A.none(),!1,n))),splitbutton:TN((e=>_r("SplitButton",ZE,e)),((e,t,o,n)=>((e,t,o)=>{const n=ye(b),s=ye(e.tooltip.getOr("")),r=((e,t,o)=>n=>{const s=n.getSystem(),r=n.element,a=()=>{const e=rs(r,"tox-split-button__chevron");return{mainOpt:e?fo(r).bind((e=>s.getByDom(e).toOptional())):A.some(n),chevronOpt:e?A.some(n):bo(r).bind((e=>s.getByDom(e).toOptional().filter((e=>rs(e.element,"tox-split-button__chevron")))))}},i=e=>{const{mainOpt:t,chevronOpt:o}=a();t.each(e),o.each(e)};return{isEnabled:()=>{const{mainOpt:e}=a();return e.exists((e=>!rp.isDisabled(e)))},setEnabled:e=>i((t=>rp.set(t,!e))),setText:e=>{const{mainOpt:t}=a();t.each((t=>Rc(t,BB,{text:e})))},setIcon:e=>{const{mainOpt:t}=a();t.each((t=>Rc(t,FB,{icon:e})))},setIconFill:(e,t)=>i((o=>{Xn(o.element,`svg path[class="${e}"], rect[class="${e}"]`).each((e=>{qo(e,"fill",t)}))})),isActive:()=>{const{mainOpt:e}=a();return e.exists((e=>Zb.isOn(e)))},setActive:e=>{const{mainOpt:t}=a();t.each((t=>Zb.set(t,e)))},setTooltip:n=>{e.set(n);const{mainOpt:s,chevronOpt:r}=a();s.each((e=>qo(e.element,"aria-label",t.providers.translate(n))));const i=o.chevronTooltip.map((e=>t.providers.translate(e))).getOr(t.providers.translate(n));r.each((e=>qo(e.element,"aria-label",i)))}}})(s,t,e),a=Ne("tox-split-menu"),i=ye(!1),l=()=>e.tooltip.map((e=>t.providers.translate(e))).getOr(t.providers.translate("Text color")),c=()=>e.chevronTooltip.map((e=>t.providers.translate(e))).getOrThunk((()=>{const e=l();return t.providers.translate(["{0} menu",e])})),d=(e,t)=>{i.set(e),qo(t.element,"aria-expanded",String(e))},u=kx.sketch({dom:{tag:"button",classes:["tox-tbtn","tox-split-button__chevron"],innerHtml:oO("chevron-down",t.providers.icons),attributes:{"aria-label":c(),...g(o)?{"data-mce-name":o+"-chevron"}:{},"aria-haspopup":"menu","aria-expanded":String(i.get()),"aria-controls":a}},components:[],toggleClass:"tox-tbtn--enabled",dropdownBehaviours:rd([ud("split-dropdown-events",[Jc(((e,t)=>TB(e))),uA({getApi:r,onSetup:e.onSetup},n),Wc("alloy-dropdown-open",(e=>d(!0,e))),Wc("alloy-dropdown-close",(e=>d(!1,e)))]),cA((()=>t.providers.checkUiComponentContext(e.context).shouldDisable)),yA((()=>t.providers.checkUiComponentContext(e.context))),mv.config({}),uv.config(t.providers.tooltips.getConfig({tooltipText:c(),onShow:o=>{if(s.get()!==e.tooltip.getOr("")){const n=e.chevronTooltip.map((e=>t.providers.translate(e))).getOr(`${t.providers.translate(s.get())} menu`);uv.setComponents(o,t.providers.tooltips.getComponents({tooltipText:n}))}}}))]),lazySink:t.getSink,fetch:$R(r,e,t.providers),getHotspot:e=>fo(e.element).bind((t=>e.getSystem().getByDom(t).toOptional())),onOpen:(e,t,o)=>{Yd.highlightBy(o,(e=>rs(e.element,"tox-collection__item--active"))),Yd.getHighlighted(o).each(Om.focusIn)},parts:{menu:{...EO(0,e.columns,e.presets),dom:{...EO(0,e.columns,e.presets).dom,tag:"div",attributes:{id:a}}}}}),m=HR(e.icon,e.text,A.none(),A.some([Zb.config({toggleClass:"tox-tbtn--enabled",aria:"color"===e.presets?{mode:"none"}:{mode:"pressed"},toggleOnExecute:!1}),...e.tooltip.isSome()?[uv.config(t.providers.tooltips.getConfig({tooltipText:t.providers.translate(e.tooltip.getOr("")),onShow:o=>{if(s.get()!==e.tooltip.getOr("")){const e=t.providers.translate(s.get());uv.setComponents(o,t.providers.tooltips.getComponents({tooltipText:e}))}}}))]:[]]),t.providers,e.context,o),p=Tv.sketch({dom:{...m.dom,classes:["tox-tbtn","tox-split-button__main"].concat(e.text.isSome()?["tox-tbtn--select"]:[]),attributes:{"aria-label":l(),...g(o)?{"data-mce-name":o}:{}}},components:m.components,eventOrder:m.eventOrder,buttonBehaviours:m.buttonBehaviours,action:t=>{if(e.onAction){const o=r(t);o.isEnabled()&&e.onAction(o)}}});return[p,u]})(e,t.shared,n))),grouptoolbarbutton:TN((e=>_r("GroupToolbarButton",QE,e)),((e,t,o,n)=>{const s=o.ui.registry.getAll().buttons,r={[Tc]:t.shared.header.isPositionedAtTop()?_c.TopToBottom:_c.BottomToTop};if(eC(o)===DS.floating)return((e,t,o,n,s)=>{const r=t.shared,a=ye(b),i={toolbarButtonBehaviours:[],getApi:NR,onSetup:e.onSetup},l=[ud("toolbar-group-button-events",[uA(i,a),mA(i,a)]),...e.tooltip.map((e=>uv.config(t.shared.providers.tooltips.getConfig({tooltipText:t.shared.providers.translate(e)})))).toArray()];return Vx.sketch({lazySink:r.getSink,fetch:()=>Oe((t=>{t(L(o(e.items),JI))})),markers:{toggledClass:"tox-tbtn--enabled"},parts:{button:HR(e.icon,e.text,e.tooltip,A.some(l),r.providers,e.context,s),toolbar:{dom:{tag:"div",classes:["tox-toolbar__overflow"],attributes:n}}}})})(e,t,(e=>MN(o,{buttons:s,toolbar:e,allowToolbarGroups:!1},t,A.none())),r,n);throw new Error("Toolbar groups are only supported when using floating toolbar mode")}))},AN={styles:(e,t)=>{const o={type:"advanced",...t.styles};return ZR(e,t,ON(e,o),kN,"StylesTextUpdate","styles")},fontsize:(e,t)=>ZR(e,t,CN(e),bN,"FontSizeTextUpdate","fontsize"),fontsizeinput:(e,t)=>((e,t,o,n)=>{let s=A.none();const r=bM(e,"NodeChange SwitchMode DisabledStateChange",(t=>{const n=t.getComponent();s=A.some(n),o.updateInputValue(n),rp.set(n,!e.selection.isEditable()||US(e))})),a=e=>({getComponent:y(e)}),i=ye(b),l=Ne("custom-number-input-events"),c=(e,t,n)=>{const r=s.map((e=>Zh.getValue(e))).getOr(""),a=o.getNewValue(r,e),i=r.length-`${a}`.length,l=s.map((e=>e.element.dom.selectionStart-i)),c=s.map((e=>e.element.dom.selectionEnd-i));o.onAction(a,n),s.each((e=>{Zh.setValue(e,a),t&&(l.each((t=>e.element.dom.selectionStart=t)),c.each((t=>e.element.dom.selectionEnd=t)))}))},d=(e,t)=>c(((e,t)=>e-t),e,t),u=(e,t)=>c(((e,t)=>e+t),e,t),m=e=>po(e.element).fold(A.none,(e=>(No(e),A.some(!0)))),p=e=>Lo(e.element)?(yo(e.element).each((e=>No(e))),A.some(!0)):A.none(),h=(o,n,s,r)=>{const i=ye(b),l=t.shared.providers.translate(s),c=Ne("altExecuting"),d=bM(e,"NodeChange SwitchMode DisabledStateChange",(t=>{rp.set(t.getComponent(),!e.selection.isEditable()||US(e))})),u=e=>{rp.isDisabled(e)||o(!0)};return Tv.sketch({dom:{tag:"button",attributes:{"aria-label":l,"data-mce-name":n},classes:r.concat(n)},components:[AB(n,t.shared.providers.icons)],buttonBehaviours:rd([rp.config({}),uv.config(t.shared.providers.tooltips.getConfig({tooltipText:l})),ud(c,[uA({onSetup:d,getApi:a},i),mA({getApi:a},i),Wc(wa(),((e,t)=>{t.event.raw.keyCode!==fN.SPACEBAR&&t.event.raw.keyCode!==fN.ENTER||rp.isDisabled(e)||o(!1)})),Wc(Oa(),u),Wc(ma(),u)])]),eventOrder:{[wa()]:[c,"keying"],[Oa()]:[c,"alloy.base.behaviour"],[ma()]:[c,"alloy.base.behaviour"],[qa()]:["alloy.base.behaviour",c,"tooltipping"],[Xa()]:[c,"tooltipping"]}})},f=pv(h((e=>d(!1,e)),"minus","Decrease font size",[])),v=pv(h((e=>u(!1,e)),"plus","Increase font size",[])),x=pv({dom:{tag:"div",classes:["tox-input-wrapper"]},components:[Zx.sketch({inputBehaviours:rd([rp.config({}),ud(l,[uA({onSetup:r,getApi:a},i),mA({getApi:a},i)]),ud("input-update-display-text",[Wc(BB,((e,t)=>{Zh.setValue(e,t.event.text)})),Wc(ya(),(e=>{o.onAction(Zh.getValue(e))})),Wc(ka(),(e=>{o.onAction(Zh.getValue(e))}))]),Om.config({mode:"special",onEnter:e=>(c(w,!0,!0),A.some(!0)),onEscape:m,onUp:e=>(u(!0,!1),A.some(!0)),onDown:e=>(d(!0,!1),A.some(!0)),onLeft:(e,t)=>(t.cut(),A.none()),onRight:(e,t)=>(t.cut(),A.none())})])})],behaviours:rd([fd.config({}),Om.config({mode:"special",onEnter:p,onSpace:p,onEscape:m}),ud("input-wrapper-events",[Wc(va(),(e=>{V([f,v],(t=>{const o=ct(t.get(e).element.dom);Lo(o)&&zo(o)}))}))])])});return{dom:{tag:"div",classes:["tox-number-input"],attributes:{...g(n)?{"data-mce-name":n}:{}}},components:[f.asSpec(),x.asSpec(),v.asSpec()],behaviours:rd([fd.config({}),Om.config({mode:"flow",focusInside:Ei.OnEnterOrSpaceMode,cycles:!1,selector:"button, .tox-input-wrapper",onEscape:e=>Lo(e.element)?A.none():(No(e.element),A.some(!0))})])}})(e,t,(e=>{const t=()=>e.queryCommandValue("FontSize");return{updateInputValue:e=>Rc(e,BB,{text:t()}),onAction:(t,o)=>e.execCommand("FontSize",!1,t,{skip_focus:!o}),getNewValue:(o,n)=>{Es(o,["unsupportedLength","empty"]);const s=t(),r=Es(o,["unsupportedLength","empty"]).or(Es(s,["unsupportedLength","empty"])),a=r.map((e=>e.value)).getOr(16),i=uC(e),l=r.map((e=>e.unit)).filter((e=>""!==e)).getOr(i),c=n(a,(e=>({em:{step:.1},cm:{step:.1},in:{step:.1},pc:{step:.1},ch:{step:.1},rem:{step:.1}}[e]??{step:1}))(l).step),d=`${(e=>e>=0)(c)?c:a}${l}`;return d!==s&&((e,t)=>{e.dispatch("FontSizeInputTextUpdate",t)})(e,{value:d}),d}}})(e),"fontsizeinput"),fontfamily:(e,t)=>ZR(e,t,hN(e),dN,"FontFamilyTextUpdate","fontfamily"),blocks:(e,t)=>ZR(e,t,cN(e),iN,"BlocksTextUpdate","blocks"),align:(e,t)=>ZR(e,t,rN(e),oN,"AlignTextUpdate","align"),navigateback:(e,t)=>{const o=Tr(fE({type:"button",icon:"chevron-left",tooltip:"Back",onAction:b}));return UR(o,t.shared.providers,[Wc(kB,(e=>{Ic(e,qR)}))])}},MN=(e,t,o,n)=>{const s=(e=>{const t=e.toolbar,o=e.buttons;return!1===t?[]:void 0===t||!0===t?(e=>{const t=L(_N,(t=>{const o=P(t.items,(t=>be(e,t)||be(AN,t)));return{name:t.name,items:o}}));return P(t,(e=>e.items.length>0))})(o):r(t)?(e=>{const t=e.split("|");return L(t,(e=>({items:e.trim().split(" ")})))})(t):(e=>f(e,(e=>(be(e,"name")||be(e,"label"))&&be(e,"items"))))(t)?t:(console.error("Toolbar type should be string, string[], boolean or ToolbarGroup[]"),[])})(t),a=L(s,(s=>{const r=q(s.items,(s=>0===s.trim().length?[]:((e,t,o,n,s,r)=>fe(t,o.toLowerCase()).orThunk((()=>r.bind((e=>se(e,(e=>fe(t,e+o.toLowerCase()))))))).fold((()=>fe(AN,o.toLowerCase()).map((t=>t(e,s)))),(t=>"grouptoolbarbutton"!==t.type||n?((e,t,o,n)=>fe(EN,e.type).fold((()=>(console.error("skipping button defined by",e),A.none())),(s=>A.some(s(e,t,o,n)))))(t,s,e,o.toLowerCase()):(console.warn(`Ignoring the '${o}' toolbar button. Group toolbar buttons are only supported when using floating toolbar mode and cannot be nested.`),A.none()))))(e,t.buttons,s,t.allowToolbarGroups,o,n).map((e=>Array.isArray(e)?e:[e])).getOr([])));return{title:A.from(e.translate(s.name)),label:$e(void 0!==s.label,e.translate(s.label)),items:r}}));return P(a,(e=>e.items.length>0))},DN=(e,t,o,n)=>{const s=t.mainUi.outerContainer,a=o.toolbar,i=o.buttons;if(f(a,r)){const t=a.map((t=>{const s={toolbar:t,buttons:i,allowToolbarGroups:o.allowToolbarGroups};return MN(e,s,n,A.none())}));CR.setToolbars(s,t)}else CR.setToolbar(s,MN(e,o,n,A.none()))},BN=Jt(),FN=BN.os.isiOS()&&BN.os.version.major<=12;var IN=Object.freeze({__proto__:null,render:(e,t,o,n,s)=>{const{mainUi:r,uiMotherships:a}=t,i=ye(0),l=r.outerContainer;IR(e);const d=ct(s.targetNode),u=Oo(ko(d));Um(d,r.mothership),((e,t,o)=>{HC(e)&&Um(o.mainUi.mothership.element,o.popupUi.mothership),Pm(t,o.dialogUi.mothership)})(e,u,t),e.on("PostRender",(()=>{CR.setSidebar(l,o.sidebar,SC(e)),CR.setViews(l,o.views)})),e.on("SkinLoaded",(()=>{DN(e,t,o,n),i.set(e.getWin().innerWidth),CR.setMenubar(l,_R(e,o)),((e,t)=>{const{uiMotherships:o}=t,n=e.dom;let s=e.getWin();const r=e.getDoc().documentElement,a=ye(Dn(s.innerWidth,s.innerHeight)),i=ye(Dn(r.offsetWidth,r.offsetHeight)),l=()=>{const t=a.get();t.left===s.innerWidth&&t.top===s.innerHeight||(a.set(Dn(s.innerWidth,s.innerHeight)),dM(e))},c=()=>{const t=e.getDoc().documentElement,o=i.get();o.left===t.offsetWidth&&o.top===t.offsetHeight||(i.set(Dn(t.offsetWidth,t.offsetHeight)),dM(e))},d=t=>{((e,t)=>{e.dispatch("ScrollContent",t)})(e,t)};n.bind(s,"resize",l),n.bind(s,"scroll",d);const u=Fo(ct(e.getBody()),"load",c);e.on("hide",(()=>{V(o,(e=>{mn(e.element,"display","none")}))})),e.on("show",(()=>{V(o,(e=>{yn(e.element,"display")}))})),e.on("NodeChange",c),e.on("remove",(()=>{u.unbind(),n.unbind(s,"resize",l),n.unbind(s,"scroll",d),s=null}))})(e,t)}));const m=CR.getSocket(l).getOrDie("Could not find expected socket element");if(FN){gn(m.element,{overflow:"scroll","-webkit-overflow-scrolling":"touch"});const t=(e=>{let t=null;return{cancel:()=>{c(t)||(clearTimeout(t),t=null)},throttle:(...o)=>{c(t)&&(t=setTimeout((()=>{t=null,e.apply(null,o)}),20))}}})((()=>{e.dispatch("ScrollContent")})),o=Bo(m.element,"scroll",t.throttle);e.on("remove",o.unbind)}xA(e,t),e.addCommand("ToggleSidebar",((t,o)=>{CR.toggleSidebar(l,o),(e=>{e.dispatch("ToggleSidebar")})(e)})),e.addQueryValueHandler("ToggleSidebar",(()=>CR.whichSidebar(l)??"")),e.addCommand("ToggleView",((t,o)=>{if(CR.toggleView(l,o)){const t=l.element;r.mothership.broadcastOn([Td()],{target:t}),V(a,(e=>{e.broadcastOn([Td()],{target:t})})),c(CR.whichView(l))&&(e.focus(),e.nodeChanged(),CR.refreshToolbar(l)),(e=>{e.dispatch("ToggleView")})(e)}})),e.addQueryValueHandler("ToggleView",(()=>CR.whichView(l)??""));const g=eC(e);g!==DS.sliding&&g!==DS.floating||e.on("ResizeWindow ResizeEditor ResizeContent",(()=>{const o=e.getWin().innerWidth;o!==i.get()&&(CR.refreshToolbar(t.mainUi.outerContainer),i.set(o))}));const p={setEnabled:e=>{vA(t,e?"setEnabled":"setDisabled")},isEnabled:()=>!rp.isDisabled(l)};return{iframeContainer:m.element.dom,editorContainer:l.element.dom,api:p}}});const RN=e=>h(e)?e+"px":e,NN=(e,t,o)=>{const n=t.filter((t=>ee>t));return n.or(s).getOr(e)},zN=e=>{const t=$S(e),o=GS(e),n=qS(e);return(s=t,/^[0-9\.]+(|px)$/i.test(""+s)?A.some(parseInt(""+s,10)):A.none()).map((e=>NN(e,o,n)));var s},{ToolbarLocation:LN,ToolbarMode:VN}=UC,HN=(e,t,o,n,s)=>{const{mainUi:r,uiMotherships:a}=o,i=RS.DOM,l=NC(e),c=VC(e),d=qS(e).or(zN(e)),u=n.shared.header,m=u.isPositionedAtTop,g=eC(e),p=g===VN.sliding||g===VN.floating,h=ye(!1),f=()=>h.get()&&!e.removed,b=e=>p?e.fold(y(0),(e=>e.components().length>1?kn(e.components()[1].element):0)):0,v=()=>{V(a,(e=>{e.broadcastOn([Ed()],{})}))},x=o=>{if(!f())return;l||s.on((e=>{const o=d.getOrThunk((()=>Ms().width-In(t).left-10));mn(e.element,"max-width",o+"px")}));const n=Rn(),a=!(l||l||!(Fn(r.outerContainer.element).left+An(r.outerContainer.element)>=window.innerWidth-40||bn(r.outerContainer.element,"width").isSome())||(mn(r.outerContainer.element,"position","absolute"),mn(r.outerContainer.element,"left","0px"),yn(r.outerContainer.element,"width"),0));if(p&&CR.refreshToolbar(r.outerContainer),!l){const o=Rn(),i=$e(n.left!==o.left,n);((o,n)=>{s.on((s=>{const a=CR.getToolbar(r.outerContainer),i=b(a),l=Rs(t),c=((e,t)=>HC(e)?Hs(t):A.none())(e,r.outerContainer.element),d=c.fold((()=>l.x),(e=>{const t=Rs(e);return yt(e,ln())?l.x:l.x-t.x})),u=$e(o,Math.ceil(r.outerContainer.element.dom.getBoundingClientRect().width)).filter((e=>e>150)).map((e=>{const t=n.getOr(Rn()),o=window.innerWidth-(d-t.left),s=Math.max(Math.min(e,o),150);return om()?Math.max(l.y-kn(s.element)+i,0):l.bottom),(e=>{const t=Rs(e),o=e.dom.scrollTop??0,n=yt(e,ln())?Math.max(l.y-kn(s.element)+i,0):l.y-t.y+o-kn(s.element)+i;return m()?n:l.bottom}))+"px"};gn(r.outerContainer.element,{...g,...u})}))})(a,i),i.each((e=>{Nn(e.left,o.top)}))}c&&s.on(o),v()},w=()=>!(l||!c||!f())&&s.get().exists((o=>{const n=u.getDockingMode(),a=(o=>{switch(oC(e)){case LN.auto:const e=CR.getToolbar(r.outerContainer),n=b(e),s=kn(o.element)-n,a=Rs(t);if(a.y>s)return"top";{const e=uo(t),o=Math.max(e.dom.scrollHeight,kn(e));return a.bottom{Bp.setModes(e,[i]),u.setDockingMode(i);const t=m()?_c.TopToBottom:_c.BottomToTop;qo(e.element,Tc,t)})),!0);var i}));return{isVisible:f,isPositionedAtTop:m,show:()=>{h.set(!0),mn(r.outerContainer.element,"display","flex"),i.addClass(e.getBody(),"mce-edit-focus"),V(a,(e=>{yn(e.element,"display")})),w(),HC(e)?x((e=>Bp.isDocked(e)?Bp.reset(e):Bp.refresh(e))):x(Bp.refresh)},hide:()=>{h.set(!1),mn(r.outerContainer.element,"display","none"),i.removeClass(e.getBody(),"mce-edit-focus"),V(a,(e=>{mn(e.element,"display","none")}))},update:x,updateMode:()=>{w()&&x(Bp.reset)},repositionPopups:v}},PN=(e,t)=>{const o=Rs(e);return{pos:t?o.y:o.bottom,bounds:o}};var UN=Object.freeze({__proto__:null,render:(e,t,o,n,s)=>{const{mainUi:r}=t,a=Xe(),i=ct(s.targetNode),l=HN(e,i,t,n,a),c=rC(e);RR(e);const d=()=>{if(a.isSet())return void l.show();a.set(CR.getHeader(r.outerContainer).getOrDie());const s=zC(e);HC(e)?(Um(i,r.mothership),Um(i,t.popupUi.mothership)):Pm(s,r.mothership),Pm(s,t.dialogUi.mothership);const d=()=>{DN(e,t,o,n),CR.setMenubar(r.outerContainer,_R(e,o)),l.show(),((e,t,o,n)=>{const s=ye(PN(t,o.isPositionedAtTop())),r=n=>{const{pos:r,bounds:a}=PN(t,o.isPositionedAtTop()),{pos:i,bounds:l}=s.get(),c=a.height!==l.height||a.width!==l.width;s.set({pos:r,bounds:a}),c&&dM(e,n),o.isVisible()&&(i!==r?o.update(Bp.reset):c&&(o.updateMode(),o.repositionPopups()))};n||(e.on("activate",o.show),e.on("deactivate",o.hide)),e.on("SkinLoaded ResizeWindow",(()=>o.update(Bp.reset))),e.on("NodeChange keydown",(e=>{requestAnimationFrame((()=>r(e)))}));let a=0;const i=nt((()=>o.update(Bp.refresh)),33);e.on("ScrollWindow",(()=>{const e=Rn().left;e!==a&&(a=e,i.throttle()),o.updateMode()})),HC(e)&&e.on("ElementScroll",(e=>{o.update(Bp.refresh)}));const l=qe();l.set(Fo(ct(e.getBody()),"load",(e=>r(e.raw)))),e.on("remove",(()=>{l.clear()}))})(e,i,l,c),e.nodeChanged()};c?e.once("SkinLoaded",d):d()};e.on("show",d),e.on("hide",l.hide),c||(e.on("focus",d),e.on("blur",l.hide)),e.on("init",(()=>{(e.hasFocus()||c)&&d()})),xA(e,t);const u={show:d,hide:l.hide,setEnabled:e=>{vA(t,e?"setEnabled":"setDisabled")},isEnabled:()=>!rp.isDisabled(r.outerContainer)};return{editorContainer:r.outerContainer.element.dom,api:u}}});const WN="contexttoolbar-hide",$N=(e,t,o)=>({setInputEnabled:t=>{!t&&o&&No(o),rp.set(e,!t)},isInputEnabled:()=>!rp.isDisabled(e),hide:()=>{Ic(e,Ha())},back:()=>{Ic(e,qR)},getValue:()=>t.get().getOrThunk((()=>Zh.getValue(e))),setValue:o=>{e.getSystem().isConnected()?Zh.setValue(e,o):t.set(o)}}),GN=(e,t,o)=>{const n=go(e.element).bind((t=>e.getSystem().getByDom(t).toOptional()));return $N(n.getOr(e),t,o)},jN=(e,t,o)=>Wc(kB,((n,s)=>{const r=e.get(n),a=$N(r,o,n.element);t.onAction(a,s.event.buttonApi)})),qN=(e,t,o,n)=>{const s=L(t,(t=>pv(((e,t,o,n)=>(e=>"contextformtogglebutton"===e.type)(t)?((e,t,o,n)=>{const{primary:s,...r}=t.original,a=Tr(xE({...r,type:"togglebutton",onAction:b}));return WR(a,o,[jN(e,t,n)])})(e,t,o,n):((e,t,o,n)=>{const{primary:s,...r}=t.original,a=Tr(fE({...r,type:"button",onAction:b}));return UR(a,o,[jN(e,t,n)])})(e,t,o,n))(e,t,o,n))));return{asSpecs:()=>L(s,(e=>e.asSpec())),findPrimary:e=>se(t,((t,o)=>t.primary?A.from(s[o]).bind((t=>t.getOpt(e))).filter(k(rp.isDisabled)):A.none()))}},XN=(e,t,o,n)=>{const{width:s,height:r}=e.initValue();let a=qB;const i=Ne("ratio-event"),l=e=>$N(e,n),c=e=>rO(e,{tag:"span",classes:["tox-icon","tox-lock-icon__"+e]},t.icons),d=()=>!1,u=e.label.getOr("Constrain proportions"),m=t.translate(u),g=jx.parts.lock({dom:{tag:"button",classes:["tox-lock","tox-lock-context-form-size-input","tox-button","tox-button--naked","tox-button--icon"],attributes:{"aria-label":m,"data-mce-name":u}},components:[c("lock"),c("unlock")],buttonBehaviours:rd([rp.config({disabled:d}),Gb.config({}),uv.config(t.tooltips.getConfig({tooltipText:m}))])}),p=e=>({dom:{tag:"div",classes:["tox-context-form__group"]},components:e}),h=e=>Gn(e.element,"div.tox-focusable-wrapper").fold(A.none,(e=>(No(e),A.some(!0)))),f=e=>Ux.parts.field({factory:Zx,inputClasses:["tox-textfield","tox-toolbar-textfield","tox-textfield-size"],data:e?s:r,inputBehaviours:rd([rp.config({disabled:d}),Gb.config({}),ud("size-input-toolbar-events",[Wc(xa(),((t,o)=>{Rc(t,i,{isField1:e})}))]),Om.config({mode:"special",onEnter:o,onEscape:h})]),selectOnFocus:!1}),v=e=>({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e))]}),x=e=>({dom:{tag:"div",classes:["tox-focusable-wrapper","tox-toolbar-nav-item"]},components:[e],behaviours:rd([Gb.config({}),fd.config({}),Om.config({mode:"special",onEnter:e=>Xn(e.element,"input").fold(A.none,(e=>(No(e),A.some(!0))))})])}),y=x(jx.parts.field1(p([Ux.parts.label(v("Width:")),f(!0)]))),w=x(jx.parts.field2(p([Ux.parts.label(v("Height:")),f(!1)]))),S=ye(b),C=[uA({onBeforeSetup:e=>Xn(e.element,"input").each(No),onSetup:e.onSetup,getApi:l},S),gA({getApi:l},S,n)];return jx.sketch({dom:{tag:"div",classes:["tox-context-form__group"]},components:[y,p([g]),w],field1Name:"width",field2Name:"height",locked:!0,markers:{lockClass:"tox-locked"},onLockedChange:(e,t,o)=>{GB(Zh.getValue(e)).each((e=>{a(e).each((e=>{Zh.setValue(t,$B(e))}))}))},onInput:e=>Ic(e,yD),coupledFieldBehaviours:rd([fd.config({}),Om.config({mode:"flow",focusInside:Ei.OnEnterOrSpaceMode,cycles:!1,selector:"button, .tox-focusable-wrapper"}),rp.config({disabled:d,onDisabled:e=>{jx.getField1(e).bind(Ux.getField).each(rp.disable),jx.getField2(e).bind(Ux.getField).each(rp.disable),jx.getLock(e).each(rp.disable)},onEnabled:e=>{jx.getField1(e).bind(Ux.getField).each(rp.enable),jx.getField2(e).bind(Ux.getField).each(rp.enable),jx.getLock(e).each(rp.enable)}}),yA((()=>t.checkUiComponentContext("mode:design"))),ud("size-input-toolbar-events2",[Wc(i,((e,t)=>{const o=t.event.isField1,n=o?jx.getField1(e):jx.getField2(e),s=o?jx.getField2(e):jx.getField1(e),r=n.map(Zh.getValue).getOr(""),i=s.map(Zh.getValue).getOr("");a=XB(r,i)})),Wc(yD,(t=>e.onInput(l(t)))),...C])])})},YN=(e,t,o)=>Ux.sketch({dom:{tag:"div",classes:["tox-context-form__group"]},components:[...e.toArray(),t],fieldBehaviours:rd([rp.config({disabled:()=>o.checkUiComponentContext("mode:design").shouldDisable,onDisabled:e=>{(e=>{Ho(e.element).each((e=>{Gn(e,'[tabindex="-1"]').each((e=>{No(e)}))}))})(e),Ux.getField(e).each(rp.disable)},onEnabled:e=>{Ux.getField(e).each(rp.enable)}})])}),KN=(e,t,o,n)=>{const s=ye(b),r=e=>GN(e,n),a=e.label.map((e=>Ux.parts.label({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e))]}))),i=Ux.parts.field({factory:Zx,type:"range",inputClasses:["tox-toolbar-slider__input","tox-toolbar-nav-item"],inputAttributes:{min:String(e.min()),max:String(e.max())},data:e.initValue().toString(),fromInputValue:t=>(e=>{const t=parseFloat(e);return isNaN(t)?A.none():A.some(t)})(t).getOr(e.min()),toInputValue:e=>String(e),inputBehaviours:rd([rp.config({disabled:()=>t.checkUiComponentContext("mode:design").shouldDisable}),yA((()=>t.checkUiComponentContext("mode:design"))),Om.config({mode:"special",onEnter:o,onLeft:(e,t)=>(t.cut(),A.none()),onRight:(e,t)=>(t.cut(),A.none())}),ud("slider-events",[uA({onSetup:e.onSetup,getApi:r,onBeforeSetup:Om.focusIn},s),gA({getApi:r},s,n),Wc(Ca(),(t=>{e.onInput(r(t))}))])])});return YN(a,i,t)},JN=(e,t,o,n)=>{const s=ye(b),r=e=>GN(e,n),a=e.label.map((e=>Ux.parts.label({dom:{tag:"label",classes:["tox-label"]},components:[Ag(t.translate(e))]}))),i={...e.placeholder.map((e=>({placeholder:t.translate(e)}))).getOr({})},l=Ux.parts.field({factory:Zx,inputClasses:["tox-toolbar-textfield","tox-toolbar-nav-item"],inputAttributes:i,data:e.initValue(),selectOnFocus:!0,inputBehaviours:rd([rp.config({disabled:()=>t.checkUiComponentContext("mode:design").shouldDisable}),yA((()=>t.checkUiComponentContext("mode:design"))),Om.config({mode:"special",onEnter:o,onLeft:(e,t)=>(t.cut(),A.none()),onRight:(e,t)=>(t.cut(),A.none())}),ud("input-events",[uA({onSetup:e.onSetup,getApi:e=>Gn(e.element,".tox-toolbar").bind((e=>Xn(e,"button:enabled"))).fold((()=>GN(e,n)),(t=>GN(e,n,t))),onBeforeSetup:Om.focusIn},s),gA({getApi:r},s,n),Wc(Ca(),(t=>{e.onInput(r(t))}))])])});return YN(a,l,t)},QN=(e,t,o)=>{const n=Xe(),s=pv(e(o,(e=>a.findPrimary(e).orThunk((()=>i.findPrimary(e))).map((e=>(Nc(e),!0)))),n)),r=H(t.commands,(e=>"start"===e.align)),a=qN(s,r.pass,o,n),i=qN(s,r.fail,o,n);return P([{title:A.none(),label:A.none(),items:a.asSpecs()},{title:A.none(),label:A.none(),items:[s.asSpec()]},{title:A.none(),label:A.none(),items:i.asSpecs()}],(e=>e.items.length>0))},ZN=(e,t)=>{switch(e.type){case"contextform":return QN(C(JN,e),e,t);case"contextsliderform":return QN(C(KN,e),e,t);case"contextsizeinputform":return QN(C(XN,e),e,t)}},ez=(e,t,o)=>t.bottom-e.y>=o&&e.bottom-t.y>=o,tz=e=>{const t=(e=>{const t=e.getBoundingClientRect();if(t.height<=0&&t.width<=0){const o=So(ct(e.startContainer),e.startOffset).element;return(so(o)?go(o):A.some(o)).filter(no).map((e=>e.dom.getBoundingClientRect())).getOr(t)}return t})(e.selection.getRng());if(e.inline){const e=Rn();return Is(e.left+t.left,e.top+t.top,t.width,t.height)}{const o=Ns(ct(e.getBody()));return Is(o.x+t.left,o.y+t.top,t.width,t.height)}},oz=(e,t,o,n=0)=>{const s=Ms(window),r=Rs(ct(e.getContentAreaContainer())),a=EC(e)||DC(e)||FC(e),{x:i,width:l}=((e,t,o)=>{const n=Math.max(e.x+o,t.x);return{x:n,width:Math.min(e.right-o,t.right)-n}})(r,s,n);if(e.inline&&!a)return Is(i,s.y,l,s.height);{const a=t.header.isPositionedAtTop(),{y:c,bottom:d}=((e,t,o,n,s,r)=>{const a=ct(e.getContainer()),i=Xn(a,".tox-editor-header").getOr(a),l=Rs(i),c=l.y>=t.bottom,d=n&&!c;if(e.inline&&d)return{y:Math.max(l.bottom+r,o.y),bottom:o.bottom};if(e.inline&&!d)return{y:o.y,bottom:Math.min(l.y-r,o.bottom)};const u="line"===s?Rs(a):t;return d?{y:Math.max(l.bottom+r,o.y),bottom:Math.min(u.bottom-r,o.bottom)}:{y:Math.max(u.y+r,o.y),bottom:Math.min(l.y-r,o.bottom)}})(e,r,s,a,o,n);return Is(i,c,l,d-c)}},nz={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"],inset:["tox-pop--inset"]},sz={maxHeightFunction:kc(),maxWidthFunction:Oc()},rz=e=>"node"===e,az=(e,t,o,n,s)=>{const r=tz(e),a=n.lastElement().exists((e=>yt(o,e)));return((e,t)=>{const o=e.selection.getRng(),n=So(ct(o.startContainer),o.startOffset);return o.startContainer===o.endContainer&&o.startOffset===o.endOffset-1&&yt(n.element,t)})(e,o)?a?xc:pc:a?((e,o)=>{const s=bn(e,"position");mn(e,"position",o);const a=ez(r,Rs(t),-20)&&!n.isReposition()?wc:xc;return s.each((t=>mn(e,"position",t))),a})(t,n.getMode()):("fixed"===n.getMode()?s.y+Rn().top:s.y)+(kn(t)+12)<=r.y?pc:hc},iz=(e,t,o,n)=>{const s=t=>(n,s,r,a,i)=>({...az(e,a,t,o,i)({...n,y:i.y,height:i.height},s,r,a,i),alwaysFit:!0}),r=e=>rz(n)?[s(e)]:[];return t?{onLtr:e=>[jl,Pl,Ul,Wl,$l,Gl].concat(r(e)),onRtl:e=>[jl,Ul,Pl,$l,Wl,Gl].concat(r(e))}:{onLtr:e=>[Gl,jl,Wl,Pl,$l,Ul].concat(r(e)),onRtl:e=>[Gl,jl,$l,Ul,Wl,Pl].concat(r(e))}},lz=(e,t)=>{const o=P(t,(t=>t.predicate(e.dom))),{pass:n,fail:s}=H(o,(e=>"contexttoolbar"===e.type));return{contextToolbars:n,contextForms:s}},cz=(e,t)=>{const o={},n=[],s=[],r={},a={},i=re(e);return V(i,(i=>{const l=e[i];"contextform"===l.type||"contextsliderform"===l.type||"contextsizeinputform"===l.type?((e,i)=>{const l=Tr(_r("ContextForm",AE,i));o[e]=l,l.launch.map((o=>{r["form:"+e]={...i.launch,type:"contextformtogglebutton"===o.type?"togglebutton":"button",onAction:()=>{t(l)}}})),"editor"===l.scope?s.push(l):n.push(l),a[e]=l})(i,l):"contexttoolbar"===l.type&&((e,o)=>{var i;(i=o,_r("ContextToolbar",DE,i)).each((i=>{i.launch.isSome()&&(r["toolbar:"+e]={...o.launch,type:"button",onAction:()=>{t(i)}}),"editor"===o.scope?s.push(i):n.push(i),a[e]=i}))})(i,l)})),{forms:o,inNodeScope:n,inEditorScope:s,lookupTable:a,formNavigators:r}},dz="tox-pop--transition",uz=(e,t,o,n)=>{const s=n.backstage,a=s.shared,i=Jt().deviceType.isTouch,l=Xe(),c=Xe(),d=Xe(),u=(e=>{const t=ye([]),o=Xx.sketch({dom:{tag:"div",classes:["tox-pop"]},fireDismissalEventInstead:{event:"doNotDismissYet"},onShow:e=>{t.set([]),Xx.getContent(e).each((e=>{yn(e.element,"visibility")})),ss(e.element,YR),yn(e.element,"width")},onHide:()=>{t.set([]),e.onHide()},inlineBehaviours:rd([ud("context-toolbar-events",[Kc(Ta(),((e,t)=>{"width"===t.event.raw.propertyName&&(ss(e.element,YR),yn(e.element,"width"))})),Wc(XR,((t,o)=>{const n=t.element;yn(n,"width");const s=En(n),r=Ho(t.element).isSome();yn(n,"left"),yn(n,"right"),yn(n,"max-width"),Xx.setContent(t,o.event.contents),os(n,YR);const a=En(n);mn(n,"transition","none"),Xx.reposition(t),yn(n,"transition"),mn(n,"width",s+"px"),o.event.focus.fold((()=>{r&&GR(t)}),(o=>{Vo(ko(t.element)).fold((()=>No(o)),(t=>{yt(t,o)||e.focusElement(o)}))})),setTimeout((()=>{mn(t.element,"width",a+"px")}),0)})),Wc(jR,((e,o)=>{Xx.getContent(e).each((o=>{t.set(t.get().concat([{bar:o,focus:Vo(ko(e.element))}]))})),Rc(e,XR,{contents:o.event.forwardContents,focus:A.none()})})),Wc(qR,((o,n)=>{e.onBack(),oe(t.get()).each((e=>{t.set(t.get().slice(0,t.get().length-1)),Rc(o,XR,{contents:Ig(e.bar),focus:e.focus})}))}))]),Om.config({mode:"special",onEscape:o=>oe(t.get()).fold((()=>e.onEscape()),(e=>(Ic(o,qR),A.some(!0))))})]),lazySink:()=>Ae.value(e.sink)});return{sketch:o,inSubtoolbar:()=>t.get().length>0}})({sink:o,onEscape:()=>(e.focus(),gM(e),A.some(!0)),onHide:()=>{gM(e)},onBack:()=>{(e=>{e.dispatch("ContextFormSlideBack")})(e)},focusElement:t=>{e.getBody().contains(t.dom)?e.focus():No(t)}}),m=Fg(u.sketch),g=()=>{const t=d.get().getOr("node"),o=rz(t)?1:0;return oz(e,a,t,o)},p=()=>!(e.removed||i()&&s.isContextMenuOpen()),h=()=>{if(p()){const t=g(),o=He(d.get(),"node")?((e,t)=>t.filter((e=>an(e)&&oo(e))).map(Ns).getOrThunk((()=>tz(e))))(e,l.get()):tz(e);return t.height<=0||!ez(o,t,.01)}return!0},f=()=>{l.clear(),c.clear(),d.clear(),Xx.hide(m)},v=()=>{if(Xx.isOpen(m)){const e=m.element;yn(e,"display"),h()?mn(e,"display","none"):(c.set(0),Xx.reposition(m))}},x=t=>({dom:{tag:"div",classes:["tox-pop__dialog"]},components:[t],behaviours:rd([Om.config({mode:"acyclic"}),ud("pop-dialog-wrap-events",[Jc((t=>{e.shortcuts.add("ctrl+F9","focus statusbar",(()=>Om.focusIn(t)))})),Qc((t=>{e.shortcuts.remove("ctrl+F9")}))])])}),y=e=>{const t=S([e]);Rc(m,jR,{forwardContents:x(t)})},w=st((()=>cz(t,y))),S=t=>{const{buttons:o}=e.ui.registry.getAll(),s={...o,...w().formNavigators},i=eC(e)===DS.scrolling?DS.scrolling:DS.default,l=j(L(t,(t=>{return"contexttoolbar"===t.type?((t,o)=>MN(e,{buttons:t,toolbar:o.items,allowToolbarGroups:!1},n.backstage,A.some(["form:","toolbar:"])))(s,(o=t,{...o,launch:o.launch.getOrUndefined(),items:r(o.items)?o.items:L(o.items,BE)})):((e,t)=>ZN(e,t))(t,a.providers);var o})));return oR({type:i,uid:Ne("context-toolbar"),initGroups:l,onEscape:A.none,cyclicKeying:!0,providers:a.providers})},C=(t,n)=>{if(O.cancel(),!p())return;const s=S(t),r=t[0].position,u=((t,n)=>{const s="node"===t?a.anchors.node(n):a.anchors.cursor(),r=((e,t,o,n)=>"line"===t?{bubble:wl(12,0,nz),layouts:{onLtr:()=>[ql],onRtl:()=>[Xl]},overrides:sz}:{bubble:wl(0,12,nz,1/12),layouts:iz(e,o,n,t),overrides:sz})(e,t,i(),{lastElement:l.get,isReposition:()=>He(c.get(),0),getMode:()=>nb.getMode(o)});return Le(s,r)})(r,n);d.set(r),c.set(1);const f=m.element;yn(f,"display"),(e=>He(Ue(e,l.get(),yt),!0))(n)||(ss(f,dz),nb.reset(o,m)),Xx.showWithinBounds(m,x(s),{anchor:u,transition:{classes:[dz],mode:"placement"}},(()=>A.some(g()))),n.fold(l.clear,l.set),h()&&mn(f,"display","none")};let k=!1;const O=nt((()=>{!e.hasFocus()||e.removed||k||(rs(m.element,dz)?O.throttle():((e,t)=>{const o=ct(t.getBody()),n=e=>yt(e,o),s=ct(t.selection.getNode());return(e=>!n(e)&&!wt(o,e))(s)?A.none():((e,t,o)=>{const n=lz(e,t);if(n.contextForms.length>0)return A.some({elem:e,toolbars:[n.contextForms[0]]});{const t=lz(e,o);if(t.contextForms.length>0)return A.some({elem:e,toolbars:[t.contextForms[0]]});if(n.contextToolbars.length>0||t.contextToolbars.length>0){const o=(e=>{if(e.length<=1)return e;{const t=t=>R(e,(e=>e.position===t)),o=t=>P(e,(e=>e.position===t)),n=t("selection"),s=t("node");if(n||s){if(s&&n){const e=o("node"),t=L(o("selection"),(e=>({...e,position:"node"})));return e.concat(t)}return o(n?"selection":"node")}return o("line")}})(n.contextToolbars.concat(t.contextToolbars));return A.some({elem:e,toolbars:o})}return A.none()}})(s,e.inNodeScope,e.inEditorScope).orThunk((()=>((e,t,o)=>e(t)?A.none():fs(t,(e=>{if(no(e)){const{contextToolbars:t,contextForms:n}=lz(e,o.inNodeScope),s=n.length>0?n:(e=>{if(e.length<=1)return e;{const t=t=>$(e,(e=>e.position===t));return t("selection").orThunk((()=>t("node"))).orThunk((()=>t("line"))).map((e=>e.position)).fold((()=>[]),(t=>P(e,(e=>e.position===t))))}})(t);return s.length>0?A.some({elem:e,toolbars:s}):A.none()}return A.none()}),e))(n,s,e)))})(w(),e).fold(f,(e=>{C(e.toolbars,A.some(e.elem))})))}),17);e.on("init",(()=>{e.on("remove",f),e.on("ScrollContent ScrollWindow ObjectResized ResizeEditor longpress",v),e.on("click focus SetContent",O.throttle),e.on("keyup",(e=>{var t;((t=e.keyCode)!==fN.ENTER&&t!==fN.SPACEBAR||!u.inSubtoolbar())&&O.throttle()})),e.on(WN,f),e.on("contexttoolbar-show",(t=>{const o=w();fe(o.lookupTable,t.toolbarKey).each((o=>{C([o],$e(t.target!==e,t.target)),GR(m)}))})),e.on("focusout",(t=>{IS.setEditorTimeout(e,(()=>{Ho(o.element).isNone()&&Ho(m.element).isNone()&&!e.hasFocus()&&f()}),0)})),e.on("SwitchMode",(()=>{e.mode.isReadOnly()&&f()})),e.on("DisabledStateChange",(e=>{e.state&&f()})),e.on("ExecCommand",(({command:e})=>{"toggleview"===e.toLowerCase()&&f()})),e.on("AfterProgressState",(t=>{t.state?f():e.hasFocus()&&O.throttle()})),e.on("dragstart",(()=>{k=!0})),e.on("dragend drop",(()=>{k=!1})),e.on("NodeChange",(e=>{u.inSubtoolbar()?(mn(m.element,"transition","none"),v(),yn(m.element,"transition")):Ho(m.element).fold(O.throttle,b)}))}))},mz=(e,t)=>{const o=()=>{const o=t.getOptions(e),n=t.getCurrent(e).map(t.hash),s=Xe();return L(o,(o=>({type:"togglemenuitem",text:t.display(o),onSetup:r=>{const a=e=>{e&&(s.on((e=>e.setActive(!1))),s.set(r)),r.setActive(e)};a(He(n,t.hash(o)));const i=t.watcher(e,o,a);return()=>{s.clear(),i()}},onAction:()=>t.setCurrent(e,o)})))};e.ui.registry.addMenuButton(t.name,{tooltip:t.text,icon:t.icon,fetch:e=>e(o()),onSetup:t.onToolbarSetup}),e.ui.registry.addNestedMenuItem(t.name,{type:"nestedmenuitem",text:t.text,getSubmenuItems:o,onSetup:t.onMenuSetup})},gz=e=>{mz(e,(e=>({name:"lineheight",text:"Line height",icon:"line-height",getOptions:MC,hash:e=>(e=>Es(e,["fixed","relative","empty"]).map((({value:e,unit:t})=>e+t)))(e).getOr(e),display:w,watcher:(e,t,o)=>e.formatter.formatChanged("lineheight",o,!1,{value:t}).unbind,getCurrent:e=>A.from(e.queryCommandValue("LineHeight")),setCurrent:(e,t)=>e.execCommand("LineHeight",!1,t),onToolbarSetup:hM(e),onMenuSetup:hM(e)}))(e)),(e=>A.from(QS(e)).map((t=>({name:"language",text:"Language",icon:"language",getOptions:y(t),hash:e=>u(e.customCode)?e.code:`${e.code}/${e.customCode}`,display:e=>e.title,watcher:(e,t,o)=>e.formatter.formatChanged("lang",o,!1,{value:t.code,customValue:t.customCode??null}).unbind,getCurrent:e=>{const t=ct(e.selection.getNode());return bs(t,(e=>A.some(e).filter(no).bind((e=>Ko(e,"lang").map((t=>({code:t,customCode:Ko(e,"data-mce-lang").getOrUndefined(),title:""})))))))},setCurrent:(e,t)=>e.execCommand("Lang",!1,t),onToolbarSetup:t=>{const o=qe();return t.setActive(e.formatter.match("lang",{},void 0,!0)),o.set(e.formatter.formatChanged("lang",t.setActive,!0)),pM(o.clear,hM(e)(t))},onMenuSetup:hM(e)}))))(e).each((t=>mz(e,t)))},pz=e=>bM(e,"NodeChange",(t=>{t.setEnabled(e.queryCommandState("outdent")&&e.selection.isEditable())})),hz=(e,t)=>o=>{o.setActive(t.get());const n=e=>{t.set(e.state),o.setActive(e.state)};return e.on("PastePlainTextToggle",n),pM((()=>e.off("PastePlainTextToggle",n)),hM(e)(o))},fz=(e,t)=>()=>{e.execCommand("mceToggleFormat",!1,t)},bz=e=>{(e=>{(e=>{ZD.each([{name:"bold",text:"Bold",icon:"bold",shortcut:"Meta+B"},{name:"italic",text:"Italic",icon:"italic",shortcut:"Meta+I"},{name:"underline",text:"Underline",icon:"underline",shortcut:"Meta+U"},{name:"strikethrough",text:"Strikethrough",icon:"strike-through"},{name:"subscript",text:"Subscript",icon:"subscript"},{name:"superscript",text:"Superscript",icon:"superscript"}],((t,o)=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onSetup:fM(e,t.name),onAction:fz(e,t.name),shortcut:t.shortcut})}));for(let t=1;t<=6;t++){const o="h"+t,n=`Access+${t}`;e.ui.registry.addToggleButton(o,{text:o.toUpperCase(),tooltip:"Heading "+t,onSetup:fM(e,o),onAction:fz(e,o),shortcut:n})}})(e),(e=>{ZD.each([{name:"copy",text:"Copy",action:"Copy",icon:"copy",context:"any"},{name:"help",text:"Help",action:"mceHelp",icon:"help",shortcut:"Alt+0",context:"any"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all",shortcut:"Meta+A",context:"any"},{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document"},{name:"print",text:"Print",action:"mcePrint",icon:"print",shortcut:"Meta+P",context:"any"}],(t=>{e.ui.registry.addButton(t.name,{tooltip:t.text,icon:t.icon,onAction:xM(e,t.action),shortcut:t.shortcut,context:t.context})})),ZD.each([{name:"cut",text:"Cut",action:"Cut",icon:"cut"},{name:"paste",text:"Paste",action:"Paste",icon:"paste"},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting"},{name:"remove",text:"Remove",action:"Delete",icon:"remove"},{name:"hr",text:"Horizontal line",action:"InsertHorizontalRule",icon:"horizontal-rule"}],(t=>{e.ui.registry.addButton(t.name,{tooltip:t.text,icon:t.icon,onSetup:hM(e),onAction:xM(e,t.action)})}))})(e),(e=>{ZD.each([{name:"blockquote",text:"Blockquote",action:"mceBlockQuote",icon:"quote"}],(t=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:xM(e,t.action),onSetup:fM(e,t.name)})}))})(e)})(e),(e=>{ZD.each([{name:"newdocument",text:"New document",action:"mceNewDocument",icon:"new-document"},{name:"copy",text:"Copy",action:"Copy",icon:"copy",shortcut:"Meta+C",context:"any"},{name:"selectall",text:"Select all",action:"SelectAll",icon:"select-all",shortcut:"Meta+A",context:"any"},{name:"print",text:"Print...",action:"mcePrint",icon:"print",shortcut:"Meta+P",context:"any"}],(t=>{e.ui.registry.addMenuItem(t.name,{text:t.text,icon:t.icon,shortcut:t.shortcut,onAction:xM(e,t.action),context:t.context})})),ZD.each([{name:"bold",text:"Bold",action:"Bold",icon:"bold",shortcut:"Meta+B"},{name:"italic",text:"Italic",action:"Italic",icon:"italic",shortcut:"Meta+I"},{name:"underline",text:"Underline",action:"Underline",icon:"underline",shortcut:"Meta+U"},{name:"strikethrough",text:"Strikethrough",action:"Strikethrough",icon:"strike-through"},{name:"subscript",text:"Subscript",action:"Subscript",icon:"subscript"},{name:"superscript",text:"Superscript",action:"Superscript",icon:"superscript"},{name:"removeformat",text:"Clear formatting",action:"RemoveFormat",icon:"remove-formatting"},{name:"cut",text:"Cut",action:"Cut",icon:"cut",shortcut:"Meta+X"},{name:"paste",text:"Paste",action:"Paste",icon:"paste",shortcut:"Meta+V"},{name:"hr",text:"Horizontal line",action:"InsertHorizontalRule",icon:"horizontal-rule"}],(t=>{e.ui.registry.addMenuItem(t.name,{text:t.text,icon:t.icon,shortcut:t.shortcut,onSetup:hM(e),onAction:xM(e,t.action)})})),e.ui.registry.addMenuItem("codeformat",{text:"Code",icon:"sourcecode",onSetup:hM(e),onAction:fz(e,"code")})})(e)},vz=(e,t)=>bM(e,"Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",(o=>{o.setEnabled(!e.mode.isReadOnly()&&e.undoManager[t]())})),xz=e=>bM(e,"VisualAid",(t=>{t.setActive(e.hasVisual)})),yz=(e,t)=>{(e=>{V([{name:"alignleft",text:"Align left",cmd:"JustifyLeft",icon:"align-left"},{name:"aligncenter",text:"Align center",cmd:"JustifyCenter",icon:"align-center"},{name:"alignright",text:"Align right",cmd:"JustifyRight",icon:"align-right"},{name:"alignjustify",text:"Justify",cmd:"JustifyFull",icon:"align-justify"}],(t=>{e.ui.registry.addToggleButton(t.name,{tooltip:t.text,icon:t.icon,onAction:xM(e,t.cmd),onSetup:fM(e,t.name)})})),e.ui.registry.addButton("alignnone",{tooltip:"No alignment",icon:"align-none",onSetup:hM(e),onAction:xM(e,"JustifyNone")})})(e),bz(e),((e,t)=>{((e,t)=>{const o=QR(t,rN(e));e.ui.registry.addNestedMenuItem("align",{text:t.shared.providers.translate("Align"),onSetup:hM(e),getSubmenuItems:()=>o.items.validateItems(o.getStyleItems())})})(e,t),((e,t)=>{const o=QR(t,hN(e));e.ui.registry.addNestedMenuItem("fontfamily",{text:t.shared.providers.translate("Fonts"),onSetup:hM(e),getSubmenuItems:()=>o.items.validateItems(o.getStyleItems())})})(e,t),((e,t)=>{const o={type:"advanced",...t.styles},n=QR(t,ON(e,o));e.ui.registry.addNestedMenuItem("styles",{text:"Formats",onSetup:hM(e,(()=>n.getStyleItems().length>0)),getSubmenuItems:()=>n.items.validateItems(n.getStyleItems())})})(e,t),((e,t)=>{const o=QR(t,cN(e));e.ui.registry.addNestedMenuItem("blocks",{text:"Blocks",onSetup:hM(e),getSubmenuItems:()=>o.items.validateItems(o.getStyleItems())})})(e,t),((e,t)=>{const o=QR(t,CN(e));e.ui.registry.addNestedMenuItem("fontsize",{text:"Font sizes",onSetup:hM(e),getSubmenuItems:()=>o.items.validateItems(o.getStyleItems())})})(e,t)})(e,t),(e=>{(e=>{e.ui.registry.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onSetup:vz(e,"hasUndo"),onAction:xM(e,"undo")}),e.ui.registry.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onSetup:vz(e,"hasRedo"),onAction:xM(e,"redo")})})(e),(e=>{e.ui.registry.addButton("undo",{tooltip:"Undo",icon:"undo",enabled:!1,onSetup:vz(e,"hasUndo"),onAction:xM(e,"undo"),shortcut:"Meta+Z"}),e.ui.registry.addButton("redo",{tooltip:"Redo",icon:"redo",enabled:!1,onSetup:vz(e,"hasRedo"),onAction:xM(e,"redo"),shortcut:"Meta+Y"})})(e)})(e),(e=>{(e=>{e.addCommand("mceApplyTextcolor",((t,o)=>{((e,t,o)=>{e.undoManager.transact((()=>{e.focus(),e.formatter.apply(t,{value:o}),e.nodeChanged()}))})(e,t,o)})),e.addCommand("mceRemoveTextcolor",(t=>{((e,t)=>{e.undoManager.transact((()=>{e.focus(),e.formatter.remove(t,{value:null},void 0,!0),e.nodeChanged()}))})(e,t)}))})(e);const t=IM(e),o=RM(e),n=ye(t),s=ye(o);GM(e,"forecolor","forecolor",n),GM(e,"backcolor","hilitecolor",s),jM(e,"forecolor","forecolor","Text color",n),jM(e,"backcolor","hilitecolor","Background color",s)})(e),(e=>{(e=>{e.ui.registry.addButton("visualaid",{tooltip:"Visual aids",text:"Visual aids",onAction:xM(e,"mceToggleVisualAid"),context:"any"})})(e),(e=>{e.ui.registry.addToggleMenuItem("visualaid",{text:"Visual aids",onSetup:xz(e),onAction:xM(e,"mceToggleVisualAid"),context:"any"})})(e)})(e),(e=>{(e=>{e.ui.registry.addButton("outdent",{tooltip:"Decrease indent",icon:"outdent",onSetup:pz(e),onAction:xM(e,"outdent")}),e.ui.registry.addButton("indent",{tooltip:"Increase indent",icon:"indent",onSetup:hM(e,(()=>e.queryCommandState("indent"))),onAction:xM(e,"indent")})})(e)})(e),gz(e),(e=>{const t=ye(wC(e)),o=()=>e.execCommand("mceTogglePlainTextPaste");e.ui.registry.addToggleButton("pastetext",{active:!1,icon:"paste-text",tooltip:"Paste as text",onAction:o,onSetup:hz(e,t)}),e.ui.registry.addToggleMenuItem("pastetext",{text:"Paste as text",icon:"paste-text",onAction:o,onSetup:hz(e,t)})})(e),(e=>{e.ui.registry.addContext("editable",(()=>e.selection.isEditable())),e.ui.registry.addContext("mode",(t=>e.mode.get()===t)),e.ui.registry.addContext("any",E),e.ui.registry.addContext("formatting",(t=>e.formatter.canApply(t))),e.ui.registry.addContext("insert",(t=>e.schema.isValidChild(e.selection.getNode().tagName,t)))})(e)},wz=e=>r(e)?e.split(/[ ,]/):e,Sz=e=>t=>t.options.get(e),Cz=Sz("contextmenu_never_use_native"),kz=Sz("contextmenu_avoid_overlap"),Oz=e=>{const t=e.ui.registry.getAll().contextMenus,o=e.options.get("contextmenu");return e.options.isSet("contextmenu")?o:P(o,(e=>be(t,e)))},_z=(e,t)=>({type:"makeshift",x:e,y:t}),Tz=e=>"longpress"===e.type||0===e.type.indexOf("touch"),Ez=(e,t)=>"contextmenu"===t.type||"longpress"===t.type?e.inline?(e=>{if(Tz(e)){const t=e.touches[0];return _z(t.pageX,t.pageY)}return _z(e.pageX,e.pageY)})(t):((e,t)=>{const o=RS.DOM.getPos(e);return((e,t,o)=>_z(e.x+t,e.y+o))(t,o.x,o.y)})(e.getContentAreaContainer(),(e=>{if(Tz(e)){const t=e.touches[0];return _z(t.clientX,t.clientY)}return _z(e.clientX,e.clientY)})(t)):Az(e),Az=e=>({type:"selection",root:ct(e.selection.getNode())}),Mz=(e,t,o)=>{switch(o){case"node":return(e=>({type:"node",node:A.some(ct(e.selection.getNode())),root:ct(e.getBody())}))(e);case"point":return Ez(e,t);case"selection":return Az(e)}},Dz=(e,t,o,n,s,r)=>{const a=o(),i=Mz(e,t,r);VB(a,dO.CLOSE_ON_EXECUTE,n,{isHorizontalMenu:!1,search:A.none()}).map((e=>{t.preventDefault(),Xx.showMenuAt(s,{anchor:i},{menu:{markers:OO("normal")},data:e})}))},Bz={onLtr:()=>[jl,Pl,Ul,Wl,$l,Gl,pc,hc,gc,uc,mc,dc],onRtl:()=>[jl,Ul,Pl,$l,Wl,Gl,pc,hc,mc,dc,gc,uc]},Fz={valignCentre:[],alignCentre:[],alignLeft:["tox-pop--align-left"],alignRight:["tox-pop--align-right"],right:["tox-pop--right"],left:["tox-pop--left"],bottom:["tox-pop--bottom"],top:["tox-pop--top"]},Iz=(e,t,o,n,s,r)=>{const a=Jt(),i=a.os.isiOS(),l=a.os.isMacOS(),c=a.os.isAndroid(),d=a.deviceType.isTouch(),u=()=>{const a=o();((e,t,o,n,s,r,a)=>{const i=((e,t,o)=>{const n=Mz(e,t,o);return{bubble:wl(0,"point"===o?12:0,Fz),layouts:Bz,overrides:{maxWidthFunction:Oc(),maxHeightFunction:kc()},...n}})(e,t,r);VB(o,dO.CLOSE_ON_EXECUTE,n,{isHorizontalMenu:!0,search:A.none()}).map((o=>{t.preventDefault();const l=a?Ac.HighlightMenuAndItem:Ac.HighlightNone;Xx.showMenuWithinBounds(s,{anchor:i},{menu:{markers:OO("normal"),highlightOnOpen:l},data:o,type:"horizontal"},(()=>A.some(oz(e,n.shared,"node"===r?"node":"selection")))),e.dispatch(WN)}))})(e,t,a,n,s,r,!(c||i||l&&d))};if((l||i)&&"node"!==r){const o=()=>{(e=>{const t=e.selection.getRng(),o=()=>{IS.setEditorTimeout(e,(()=>{e.selection.setRng(t)}),10),r()};e.once("touchend",o);const n=e=>{e.preventDefault(),e.stopImmediatePropagation()};e.on("mousedown",n,!0);const s=()=>r();e.once("longpresscancel",s);const r=()=>{e.off("touchend",o),e.off("longpresscancel",s),e.off("mousedown",n)}})(e),u()};((e,t)=>{const o=e.selection;if(o.isCollapsed()||t.touches.length<1)return!1;{const n=t.touches[0],s=o.getRng();return Os(e.getWin(),Ss.domRange(s)).exists((e=>e.left<=n.clientX&&e.right>=n.clientX&&e.top<=n.clientY&&e.bottom>=n.clientY))}})(e,t)?o():(e.once("selectionchange",o),e.once("touchend",(()=>e.off("selectionchange",o))))}else u()},Rz=e=>r(e)?"|"===e:"separator"===e.type,Nz={type:"separator"},zz=e=>{const t=e=>({text:e.text,icon:e.icon,enabled:e.enabled,shortcut:e.shortcut});if(r(e))return e;switch(e.type){case"separator":return Nz;case"submenu":return{type:"nestedmenuitem",...t(e),getSubmenuItems:()=>{const t=e.getSubmenuItems();return r(t)?t:L(t,zz)}};default:const o=e;return{type:"menuitem",...t(o),onAction:v(o.onAction)}}},Lz=(e,t)=>{if(0===t.length)return e;const o=oe(e).filter((e=>!Rz(e))).fold((()=>[]),(e=>[Nz]));return e.concat(o).concat(t).concat([Nz])},Vz=(e,t)=>!(e=>"longpress"===e.type||be(e,"touches"))(t)&&(2!==t.button||t.target===e.getBody()&&""===t.pointerType),Hz=(e,t)=>Vz(e,t)?e.selection.getStart(!0):t.target,Pz=(e,t,o)=>{const n=Jt().deviceType.isTouch,s=Fg(Xx.sketch({dom:{tag:"div"},lazySink:t,onEscape:()=>e.focus(),onShow:()=>o.setContextMenuState(!0),onHide:()=>o.setContextMenuState(!1),fireDismissalEventInstead:{},inlineBehaviours:rd([ud("dismissContextMenu",[Wc(Ya(),((t,o)=>{wb.close(t),e.focus()}))])])})),a=()=>Xx.hide(s),i=t=>{if(Cz(e)&&t.preventDefault(),((e,t)=>t.ctrlKey&&!Cz(e))(e,t)||(e=>0===Oz(e).length)(e))return;const a=((e,t)=>{const o=kz(e),n=Vz(e,t)?"selection":"point";if(tt(o)){const s=Hz(e,t);return ps(ct(s),o)?"node":n}return n})(e,t);(n()?Iz:Dz)(e,t,(()=>{const o=Hz(e,t),n=e.ui.registry.getAll(),s=Oz(e);return((e,t,o)=>{const n=W(t,((t,n)=>fe(e,n.toLowerCase()).map((e=>{const n=e.update(o);if(r(n)&&tt(et(n)))return Lz(t,n.split(" "));if(l(n)&&n.length>0){const e=L(n,zz);return Lz(t,e)}return t})).getOrThunk((()=>t.concat([n])))),[]);return n.length>0&&Rz(n[n.length-1])&&n.pop(),n})(n.contextMenus,s,o)}),o,s,a)};e.on("init",(()=>{const t="ResizeEditor ScrollContent ScrollWindow longpresscancel"+(n()?"":" ResizeWindow");e.on(t,a),e.on("longpress contextmenu",i)}))},Uz=(e,t,o,n,s,r)=>e.fold((()=>Dh.snap({sensor:Wp(o-20,n-20),range:Dn(s,r),output:Wp(A.some(o),A.some(n)),extra:{td:t}})),(e=>{const s=o-20,r=n-20,a=e.element.dom.getBoundingClientRect();return Dh.snap({sensor:Wp(s,r),range:Dn(40,40),output:Wp(A.some(o-a.width/2),A.some(n-a.height/2)),extra:{td:t}})})),Wz=(e,t,o)=>({getSnapPoints:e,leftAttr:"data-drag-left",topAttr:"data-drag-top",onSensor:(e,n)=>{const s=n.td;((e,t)=>e.exists((e=>yt(e,t))))(t.get(),s)||(t.set(s),o(s))},mustSnap:!0}),$z=e=>pv(Tv.sketch({dom:{tag:"div",classes:["tox-selector"]},buttonBehaviours:rd([Dh.config({mode:"mouseOrTouch",blockerClass:"blocker",snaps:e}),mv.config({})]),eventOrder:{mousedown:["dragging","alloy.base.behaviour"],touchstart:["dragging","alloy.base.behaviour"]}})),Gz=(e,t)=>{const o=ye([]),n=ye([]),s=ye(!1),r=Xe(),a=Xe(),i=e=>{const o=Ns(e);return Uz(u.getOpt(t),e,o.x,o.y,o.width,o.height)},l=e=>{const o=Ns(e);return Uz(m.getOpt(t),e,o.right,o.bottom,o.width,o.height)},c=Wz((()=>L(o.get(),(e=>i(e)))),r,(t=>{a.get().each((o=>{e.dispatch("TableSelectorChange",{start:t,finish:o})}))})),d=Wz((()=>L(n.get(),(e=>l(e)))),a,(t=>{r.get().each((o=>{e.dispatch("TableSelectorChange",{start:o,finish:t})}))})),u=$z(c),m=$z(d),g=Fg(u.asSpec()),p=Fg(m.asSpec()),h=(t,o,n,s)=>{const r=n(o);Dh.snapTo(t,r),((t,o)=>{const n=o.dom.getBoundingClientRect();yn(t.element,"display");const r=mo(ct(e.getBody())).dom.innerHeight,a=n[s]<0,i=((e,t)=>e[s]>t)(n,r);(a||i)&&mn(t.element,"display","none")})(t,o)},f=e=>h(g,e,i,"top"),b=e=>h(p,e,l,"bottom");if(Jt().deviceType.isTouch()){const i=e=>L(e,ct);e.on("TableSelectionChange",(e=>{s.get()||(Nm(t,g),Nm(t,p),s.set(!0));const l=ct(e.start),c=ct(e.finish);r.set(l),a.set(c),A.from(e.otherCells).each((e=>{o.set(i(e.upOrLeftCells)),n.set(i(e.downOrRightCells)),f(l),b(c)}))})),e.on("ResizeEditor ResizeWindow ScrollContent",(()=>{r.get().each(f),a.get().each(b)})),e.on("TableSelectionClear",(()=>{s.get()&&(Vm(g),Vm(p),s.set(!1)),r.clear(),a.clear()}))}},jz=(e,t,o)=>{const n=t.delimiter??"\u203a";return{dom:{tag:"div",classes:["tox-statusbar__path"],attributes:{role:"navigation"}},behaviours:rd([Om.config({mode:"flow",selector:"div[role=button]"}),rp.config({disabled:o.isDisabled}),yA((()=>o.checkUiComponentContext("any"))),Gb.config({}),ng.config({}),ud("elementPathEvents",[Jc(((t,s)=>{e.shortcuts.add("alt+F11","focus statusbar elementpath",(()=>Om.focusIn(t))),e.on("NodeChange",(s=>{const r=(t=>{const o=[];let n=t.length;for(;n-- >0;){const r=t[n];if(1===r.nodeType&&"BR"!==(s=r).nodeName&&!s.getAttribute("data-mce-bogus")&&"bookmark"!==s.getAttribute("data-mce-type")){const t=mM(e,r);if(t.isDefaultPrevented()||o.push({name:t.name,element:r}),t.isPropagationStopped())break}}var s;return o})(s.parents),a=r.length>0?W(r,((t,s,r)=>{const a=((t,n,s)=>Tv.sketch({dom:{tag:"div",classes:["tox-statusbar__path-item"],attributes:{"data-index":s}},components:[Ag(t)],action:t=>{e.focus(),e.selection.select(n),e.nodeChanged()},buttonBehaviours:rd([uv.config({...o.tooltips.getConfig({tooltipText:o.translate(["Select the {0} element",n.nodeName.toLowerCase()]),onShow:(e,t)=>{((e,t)=>{const o=A.from(Yo(e,"id")).getOrThunk((()=>{const e=Ne("aria");return qo(t,"id",e),e}));qo(e,"aria-describedby",o)})(e.element,t.element)},onHide:e=>{var t;t=e.element,Qo(t,"aria-describedby")}})}),lA(o.isDisabled),yA((()=>o.checkUiComponentContext("any")))])}))(s.name,s.element,r);return 0===r?t.concat([a]):t.concat([{dom:{tag:"div",classes:["tox-statusbar__path-divider"],attributes:{"aria-hidden":!0}},components:[Ag(` ${n} `)]},a])}),[]):[];ng.set(t,a)}))}))])]),components:[]}};var qz;!function(e){e[e.None=0]="None",e[e.Both=1]="Both",e[e.Vertical=2]="Vertical"}(qz||(qz={}));const Xz=e=>{const t=ct(e.getContainer());return{height:kn(t),width:En(t)}},Yz=(e,t,o)=>{const n=ct(e.getContainer()),s=((e,t,o,n)=>{const s=NN(n.height+t.top,jS(e),XS(e));return o===qz.Both?{height:s,width:NN(n.width+t.left,GS(e),qS(e))}:{height:s}})(e,t,o,Xz(e));return ie(s,((e,t)=>{h(e)&&mn(n,t,RN(e))})),(e=>{e.dispatch("ResizeEditor")})(e),s},Kz=(e,t,o)=>{qo(e.element,"aria-valuetext",((e,t)=>t===qz.Both?Kk.translate(["Editor's height: {0} pixels, Editor's width: {1} pixels",e.height,e.width]):Kk.translate(["Editor's height: {0} pixels",e.height]))(t,o))},Jz=(e,t,o,n,s)=>{const r=Dn(20*n,20*s),a=Yz(e,r,o);return Kz(t,a,o),A.some(!0)},Qz=(e,t)=>{const o=()=>{const o=[],n=kC(e),s=vC(e),r=xC(e)||e.hasPlugin("wordcount");return s&&o.push(jz(e,{},t)),n&&o.push((()=>{const e=TA("Alt+0");return{dom:{tag:"div",classes:["tox-statusbar__help-text"]},components:[Ag(Kk.translate(["Press {0} for help",e]))]}})()),r&&o.push((()=>{const o=[];return e.hasPlugin("wordcount")&&o.push(((e,t)=>{const o=(e,o,n)=>ng.set(e,[Ag(t.translate(["{0} "+n,o[n]]))]);return Tv.sketch({dom:{tag:"button",classes:["tox-statusbar__wordcount"]},components:[],buttonBehaviours:rd([lA(t.isDisabled),yA((()=>t.checkUiComponentContext("any"))),Gb.config({}),ng.config({}),Zh.config({store:{mode:"memory",initialValue:{mode:"words",count:{words:0,characters:0}}}}),ud("wordcount-events",[ed((e=>{const t=Zh.getValue(e),n="words"===t.mode?"characters":"words";Zh.setValue(e,{mode:n,count:t.count}),o(e,t.count,n)})),Jc((t=>{e.on("wordCountUpdate",(e=>{const{mode:n}=Zh.getValue(t);Zh.setValue(t,{mode:n,count:e.wordCount}),o(t,e.wordCount,n)}))}))])]),eventOrder:{[Na()]:["disabling","alloy.base.behaviour","wordcount-events"]}})})(e,t)),xC(e)&&o.push({dom:{tag:"span",classes:["tox-statusbar__branding"]},components:[{dom:{tag:"a",attributes:{href:"https://www.tiny.cloud/powered-by-tiny?utm_campaign=poweredby&utm_source=tiny&utm_medium=referral&utm_content=v7",rel:"noopener",target:"_blank","aria-label":e.translate(["Build with {0}","TinyMCE"])},innerHtml:e.translate(["Build with {0}",'\n'.trim()])},behaviours:rd([fd.config({})])}]}),{dom:{tag:"div",classes:["tox-statusbar__right-container"]},components:o}})()),o.length>0?[{dom:{tag:"div",classes:["tox-statusbar__text-container",...(()=>{const e="tox-statusbar__text-container--flex-start",t="tox-statusbar__text-container--flex-end";if(n){const o="tox-statusbar__text-container-3-cols";return r||s?r&&!s?[o,t]:[o,e]:[o,"tox-statusbar__text-container--space-around"]}return[r&&!s?t:e]})()]},components:o}]:[]};return{dom:{tag:"div",classes:["tox-statusbar"]},components:(()=>{const n=o(),s=((e,t)=>{const o=(e=>{const t=yC(e);return!1===t?qz.None:"both"===t?qz.Both:qz.Vertical})(e);if(o===qz.None)return A.none();const n=o===qz.Both?Kk.translate("Press the arrow keys to resize the editor."):Kk.translate("Press the Up and Down arrow keys to resize the editor."),s=o===qz.Both?"tox-statusbar__resize-cursor-both":"tox-statusbar__resize-cursor-default";return A.some(rO("resize-handle",{tag:"div",classes:["tox-statusbar__resize-handle",s],attributes:{"aria-label":t.translate(n),"data-mce-name":"resize-handle",role:"separator"},behaviours:[Dh.config({mode:"mouse",repositionTarget:!1,onDrag:(t,n,s)=>{const r=Yz(e,s,o);Kz(t,r,o)},blockerClass:"tox-blocker"}),Om.config({mode:"special",onLeft:t=>Jz(e,t,o,-1,0),onRight:t=>Jz(e,t,o,1,0),onUp:t=>Jz(e,t,o,0,-1),onDown:t=>Jz(e,t,o,0,1)}),Gb.config({}),fd.config({}),uv.config(t.tooltips.getConfig({tooltipText:t.translate("Resize")})),ud("set-aria-valuetext",[Jc((t=>{const n=()=>{Kz(t,Xz(e),o)};e._skinLoaded?n():e.once("SkinLoaded",n)}))])],eventOrder:{[qa()]:["add-focusable","set-aria-valuetext"]}},t.icons))})(e,t);return n.concat(s.toArray())})()}},Zz=(e,t)=>t.get().getOrDie(`UI for ${e} has not been rendered`),eL=(e,t)=>{const o=e.inline,n=o?UN:IN,s=VC(e)?VI:AI,r=(()=>{const e=Xe(),t=Xe(),o=Xe();return{dialogUi:e,popupUi:t,mainUi:o,getUiMotherships:()=>{const o=e.get().map((e=>e.mothership)),n=t.get().map((e=>e.mothership));return o.fold((()=>n.toArray()),(e=>n.fold((()=>[e]),(t=>yt(e.element,t.element)?[e]:[e,t]))))},lazyGetInOuterOrDie:(e,t)=>()=>o.get().bind((e=>t(e.outerContainer))).getOrDie(`Could not find ${e} element in OuterContainer`)}})(),a=Xe(),i=Xe(),l=Xe(),c=Jt().deviceType.isTouch()?["tox-platform-touch"]:[],d=IC(e),u=eC(e),m=pv({dom:{tag:"div",classes:["tox-anchorbar"]}}),g=pv({dom:{tag:"div",classes:["tox-bottom-anchorbar"]}}),p=()=>r.mainUi.get().map((e=>e.outerContainer)).bind(CR.getHeader),h=r.lazyGetInOuterOrDie("anchor bar",m.getOpt),f=r.lazyGetInOuterOrDie("bottom anchor bar",g.getOpt),b=r.lazyGetInOuterOrDie("toolbar",CR.getToolbar),v=r.lazyGetInOuterOrDie("throbber",CR.getThrobber),x=((e,t,o,n)=>{const s=ye(!1),r=(e=>{const t=ye(IC(e)?"bottom":"top");return{isPositionedAtTop:()=>"top"===t.get(),getDockingMode:t.get,setDockingMode:t.set}})(t),a={icons:()=>t.ui.registry.getAll().icons,menuItems:()=>t.ui.registry.getAll().menuItems,translate:Kk.translate,isDisabled:()=>!t.ui.isEnabled(),getOption:t.options.get,tooltips:QF(e.dialog),checkUiComponentContext:e=>{if(US(t))return{contextType:"disabled",shouldDisable:!0};const[o,n=""]=e.split(":"),s=t.ui.registry.getAll().contexts;return{contextType:o,shouldDisable:!fe(s,o).fold((()=>fe(s,"mode").map((e=>e("design"))).getOr(!1)),(e=>"!"===n.charAt(0)?!e(n.slice(1)):e(n)))}}},i=CI(t),l=(e=>{const t=t=>()=>e.formatter.match(t),o=t=>()=>{const o=e.formatter.get(t);return void 0!==o?A.some({tag:o.length>0&&(o[0].inline||o[0].block)||"div",styles:e.dom.parseStyle(e.formatter.getCssText(t))}):A.none()},n=ye([]),s=ye([]),r=ye(!1);return e.on("PreInit",(s=>{const r=YF(e),a=JF(e,r,t,o);n.set(a)})),e.on("addStyleModifications",(n=>{const a=JF(e,n.items,t,o);s.set(a),r.set(n.replace)})),{getData:()=>{const e=r.get()?[]:n.get(),t=s.get();return e.concat(t)}}})(t),c=(e=>({colorPicker:HF(e),hasCustomColors:PF(e),getColors:UF(e),getColorCols:WF(e)}))(t),d=(e=>({isDraggableModal:$F(e)}))(t),u={shared:{providers:a,anchors:VF(t,o,n,r.isPositionedAtTop),header:r},urlinput:i,styles:l,colorinput:c,dialog:d,isContextMenuOpen:()=>s.get(),setContextMenuState:e=>s.set(e)},m=e=>A.none(),g={...u,shared:{...u.shared,interpreter:e=>BF(e,{},g,m),getSink:e.popup}},p={...u,shared:{...u.shared,interpreter:e=>BF(e,{},p,m),getSink:e.dialog}};return{popup:g,dialog:p}})({popup:()=>Ae.fromOption(r.popupUi.get().map((e=>e.sink)),"(popup) UI has not been rendered"),dialog:()=>Ae.fromOption(r.dialogUi.get().map((e=>e.sink)),"UI has not been rendered")},e,h,f),y=()=>{const t=(()=>{const t={attributes:{[Tc]:d?_c.BottomToTop:_c.TopToBottom}},o=CR.parts.menubar({dom:{tag:"div",classes:["tox-menubar"]},backstage:x.popup,onEscape:()=>{e.focus()}}),n=CR.parts.toolbar({dom:{tag:"div",classes:["tox-toolbar"]},getSink:x.popup.shared.getSink,providers:x.popup.shared.providers,onEscape:()=>{e.focus()},onToolbarToggled:t=>{((e,t)=>{e.dispatch("ToggleToolbarDrawer",{state:t})})(e,t)},type:u,lazyToolbar:b,lazyHeader:()=>p().getOrDie("Could not find header element"),...t}),s=CR.parts["multiple-toolbar"]({dom:{tag:"div",classes:["tox-toolbar-overlord"]},providers:x.popup.shared.providers,onEscape:()=>{e.focus()},type:u}),r=FC(e),a=DC(e),i=EC(e),l=CC(e),c=r||a||i,g=[(h=l,CR.parts.promotion({dom:{tag:"div",classes:["tox-promotion"]},promotionLink:h})),o];var h;return CR.parts.header({dom:{tag:"div",classes:["tox-editor-header"].concat(c?[]:["tox-editor-header--empty"]),...t},components:j([i?g:[],r?[s]:a?[n]:[],NC(e)?[]:[m.asSpec()]]),sticky:VC(e),editor:e,sharedBackstage:x.popup.shared})})(),n={dom:{tag:"div",classes:["tox-sidebar-wrap"]},components:[CR.parts.socket({dom:{tag:"div",classes:["tox-edit-area"]}}),CR.parts.sidebar({dom:{tag:"div",classes:["tox-sidebar"]}})]},s=CR.parts.throbber({dom:{tag:"div",classes:["tox-throbber"]},backstage:x.popup}),r=CR.parts.viewWrapper({backstage:x.popup}),i=bC(e)&&!o?A.some(Qz(e,x.popup.shared.providers)):A.none(),l=j([d?[]:[t],o?[]:[n],d?[t]:[]]),h=CR.parts.editorContainer({components:j([l,o?[]:[g.asSpec()]])}),f=LC(e),v={role:"application",...Kk.isRtl()?{dir:"rtl"}:{},...f?{"aria-hidden":"true"}:{}},y=Fg(CR.sketch({dom:{tag:"div",classes:["tox","tox-tinymce"].concat(o?["tox-tinymce-inline"]:[]).concat(d?["tox-tinymce--toolbar-bottom"]:[]).concat(c),styles:{visibility:"hidden",...f?{opacity:"0",border:"0"}:{}},attributes:v},components:[h,...o?[]:[r,...i.toArray()],s],behaviours:rd([yA((()=>x.popup.shared.providers.checkUiComponentContext("any"))),rp.config({disableClass:"tox-tinymce--disabled"}),Om.config({mode:"cyclic",selector:".tox-menubar, .tox-toolbar, .tox-toolbar__primary, .tox-toolbar__overflow--open, .tox-sidebar__overflow--open, .tox-statusbar__path, .tox-statusbar__wordcount, .tox-statusbar__branding a, .tox-statusbar__resize-handle"})])})),w=kv(y);return a.set(w),{mothership:w,outerContainer:y}},w=t=>{const o=RN((e=>(e=>{const t=((e,t)=>{if("number"==typeof t)return A.from(t);const o=/^([0-9.]+)(pt|em|px)$/.exec(t.trim());if(o){const t=o[2],n=Number.parseFloat(o[1]);if(Number.isNaN(n)||n<0)return A.none();if("em"===t)return A.from(n*Number.parseFloat(window.getComputedStyle(e.dom).fontSize));if("pt"===t)return A.from(.75*n);if("px"===t)return A.from(n)}return A.none()})(ct(e.targetElm),WS(e)),o=jS(e),n=XS(e);return t.map((e=>NN(e,o,n)))})(e).getOr(WS(e)))(e)),n=RN((e=>zN(e).getOr($S(e)))(e));return e.inline||(xn("div","width",n)&&mn(t.element,"width",n),xn("div","height",o)?mn(t.element,"height",o):mn(t.element,"height","400px")),o},S=t=>{const{mainUi:o,popupUi:r,uiMotherships:a}=t;le(tC(e),((t,o)=>{e.ui.registry.addGroupToolbarButton(o,t)}));const{buttons:i,menuItems:l,contextToolbars:c,sidebars:d,views:m}=e.ui.registry.getAll(),g=BC(e),h={menuItems:l,menus:PC(e),menubar:iC(e),toolbar:g.getOrThunk((()=>lC(e))),allowToolbarGroups:u===DS.floating,buttons:i,sidebar:d,views:m};var f;f=o.outerContainer,e.addShortcut("alt+F9","focus menubar",(()=>{CR.focusMenubar(f)})),e.addShortcut("alt+F10","focus toolbar",(()=>{CR.focusToolbar(f)})),e.addCommand("ToggleToolbarDrawer",((e,t,o)=>{t?.skipFocus?(console.warn(kI.skipFocus,(new Error).stack),CR.toggleToolbarDrawerWithoutFocusing(f)):o?.skip_focus?CR.toggleToolbarDrawerWithoutFocusing(f):CR.toggleToolbarDrawer(f)})),e.addQueryStateHandler("ToggleToolbarDrawer",(()=>CR.isToolbarDrawerToggled(f))),e.on("blur",(()=>{eC(e)===DS.floating&&CR.isToolbarDrawerToggled(f)&&CR.toggleToolbarDrawerWithoutFocusing(f)})),((e,t,o)=>{const n=(e,n)=>{V([t,...o],(t=>{t.broadcastEvent(e,n)}))},s=(e,n)=>{V([t,...o],(t=>{t.broadcastOn([e],n)}))},r=e=>s(Td(),{target:e.target}),a=e=>{s(_d(),{closedTooltip:()=>{e.preventDefault()}})},i=Ro(),l=Bo(i,"touchstart",r),c=Bo(i,"touchmove",(e=>n(Wa(),e))),d=Bo(i,"touchend",(e=>n($a(),e))),u=Bo(i,"mousedown",r),m=Bo(i,"mouseup",(e=>{0===e.raw.button&&s(Ad(),{target:e.target})})),g=e=>s(Td(),{target:ct(e.target)}),p=e=>{0===e.button&&s(Ad(),{target:ct(e.target)})},h=()=>{V(e.editorManager.get(),(t=>{e!==t&&t.dispatch("DismissPopups",{relatedTarget:e})}))},f=e=>n(Ga(),Io(e)),b=e=>{s(Ed(),{}),n(ja(),Io(e))},v=ko(ct(e.getElement())),x=Fo(v,"scroll",(o=>{requestAnimationFrame((()=>{if(null!=e.getContainer()){const s=qC(e,t.element).map((e=>[e.element,...e.others])).getOr([]);R(s,(e=>yt(e,o.target)))&&(e.dispatch("ElementScroll",{target:o.target.dom}),n(Za(),o))}}))})),y=()=>s(Ed(),{}),w=t=>{t.state&&s(Td(),{target:ct(e.getContainer())})},S=e=>{s(Td(),{target:ct(e.relatedTarget.getContainer())})},C=t=>e.dispatch("focusin",t),k=t=>e.dispatch("focusout",t);e.on("PostRender",(()=>{e.on("click",g),e.on("tap",g),e.on("mouseup",p),e.on("mousedown",h),e.on("ScrollWindow",f),e.on("ResizeWindow",b),e.on("ResizeEditor",y),e.on("AfterProgressState",w),e.on("DismissPopups",S),e.on("CloseActiveTooltips",a),V([t,...o],(e=>{e.element.dom.addEventListener("focusin",C),e.element.dom.addEventListener("focusout",k)}))})),e.on("remove",(()=>{e.off("click",g),e.off("tap",g),e.off("mouseup",p),e.off("mousedown",h),e.off("ScrollWindow",f),e.off("ResizeWindow",b),e.off("ResizeEditor",y),e.off("AfterProgressState",w),e.off("DismissPopups",S),e.off("CloseActiveTooltips",a),V([t,...o],(e=>{e.element.dom.removeEventListener("focusin",C),e.element.dom.removeEventListener("focusout",k)})),u.unbind(),l.unbind(),c.unbind(),d.unbind(),m.unbind(),x.unbind()})),e.on("detach",(()=>{V([t,...o],$m),V([t,...o],(e=>e.destroy()))}))})(e,o.mothership,a),s.setup(e,x.popup.shared,p),yz(e,x.popup),Pz(e,x.popup.shared.getSink,x.popup),(e=>{const{sidebars:t}=e.ui.registry.getAll();V(re(t),(o=>{const n=t[o],s=()=>He(A.from(e.queryCommandValue("ToggleSidebar")),o);e.ui.registry.addToggleButton(o,{icon:n.icon,tooltip:n.tooltip,onAction:t=>{e.execCommand("ToggleSidebar",!1,o),t.setActive(s())},onSetup:t=>{t.setActive(s());const o=()=>t.setActive(s());return e.on("ToggleSidebar",o),()=>{e.off("ToggleSidebar",o)}},context:"any"})}))})(e),YI(e,v,x.popup.shared),uz(e,c,r.sink,{backstage:x.popup}),Gz(e,r.sink);const b={targetNode:e.getElement(),height:w(o.outerContainer)};return n.render(e,t,h,x.popup,b)};return{popups:{backstage:x.popup,getMothership:()=>Zz("popups",l)},dialogs:{backstage:x.dialog,getMothership:()=>Zz("dialogs",i)},renderUI:()=>{const o=y(),n=(()=>{const t=zC(e),o=yt(ln(),t)&&"grid"===hn(t,"display"),n={dom:{tag:"div",classes:["tox","tox-silver-sink","tox-tinymce-aux"].concat(c),attributes:{...Kk.isRtl()?{dir:"rtl"}:{}}},behaviours:rd([nb.config({useFixed:()=>s.isDocked(p)})])},r={dom:{styles:{width:document.body.clientWidth+"px"}},events:Hc([Wc(ja(),(e=>{mn(e.element,"width",document.body.clientWidth+"px")}))])},a=Fg(Le(n,o?r:{})),l=kv(a);return i.set(l),{sink:a,mothership:l}})(),a=HC(e)?(()=>{const e={dom:{tag:"div",classes:["tox","tox-silver-sink","tox-silver-popup-sink","tox-tinymce-aux"].concat(c),attributes:{...Kk.isRtl()?{dir:"rtl"}:{}}},behaviours:rd([nb.config({useFixed:()=>s.isDocked(p),getBounds:()=>t.getPopupSinkBounds()})])},o=Fg(e),n=kv(o);return l.set(n),{sink:o,mothership:n}})():(e=>(l.set(e.mothership),e))(n);r.dialogUi.set(n),r.popupUi.set(a),r.mainUi.set(o);const d={popupUi:a,dialogUi:n,mainUi:o,uiMotherships:r.getUiMotherships()};return S(d)}}},tL=e=>{const t=[],o={};return ie(e,((e,n)=>{e.fold((()=>{t.push(n)}),(e=>{o[n]=e}))})),t.length>0?Ae.error(t):Ae.value(o)},oL=(e,t,o,n)=>{const s=pv(Ax.sketch((s=>({dom:{tag:"div",classes:["tox-form"].concat(e.classes)},components:L(e.items,(e=>MF(s,e,t,o,n)))}))));return{dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[s.asSpec()]}],behaviours:rd([Om.config({mode:"acyclic",useTabstopAt:k(lB)}),(r=s,Pg.config({find:r.getOpt})),ND(s,{postprocess:e=>tL(e).fold((e=>(console.error(e),{})),w)}),ud("dialog-body-panel",[Wc(xa(),((e,t)=>{e.getSystem().broadcastOn([pB],{newFocus:A.some(t.event.target)})}))])])};var r},nL=(e,t)=>{mn(e,"height",t+"px"),mn(e,"flex-basis",t+"px")},sL=(e,t,o)=>{Gn(e,'[role="dialog"]').each((e=>{Xn(e,'[role="tablist"]').each((n=>{o.get().map((o=>(mn(t,"height","0"),mn(t,"flex-basis","0"),Math.min(o,((e,t,o)=>{const n=uo(e).dom,s=Gn(e,".tox-dialog-wrap").getOr(e);let r;r="fixed"===hn(s,"position")?Math.max(n.clientHeight,window.innerHeight):Math.max(n.offsetHeight,n.scrollHeight);const a=kn(t),i=t.dom.offsetLeft>=o.dom.offsetLeft+En(o)?Math.max(kn(o),a):a,l=parseInt(hn(e,"margin-top"),10)||0,c=parseInt(hn(e,"margin-bottom"),10)||0;return r-(kn(e)+l+c-i)})(e,t,n))))).each((e=>{nL(t,e)}))}))}))},rL=e=>Xn(e,'[role="tabpanel"]'),aL="send-data-to-section",iL="send-data-to-view",lL=(e,t,o,n)=>{const s=ye({}),r=e=>{const t=Zh.getValue(e),o=tL(t).getOr({}),n=s.get(),r=Le(n,o);s.set(r)},a=e=>{const t=s.get();Zh.setValue(e,t)},i=ye(null),l=L(e.tabs,(e=>({value:e.name,dom:{tag:"div",classes:["tox-dialog__body-nav-item"]},components:[Ag(o.shared.providers.translate(e.title))],view:()=>[Ax.sketch((s=>({dom:{tag:"div",classes:["tox-form"]},components:L(e.items,(e=>MF(s,e,t,o,n))),formBehaviours:rd([Om.config({mode:"acyclic",useTabstopAt:k(lB)}),ud("TabView.form.events",[Jc(a),Qc(r)]),ab.config({channels:la([{key:aL,value:{onReceive:r}},{key:iL,value:{onReceive:a}}])})])})))]}))),c=(e=>{const t=Xe(),o=[Jc((o=>{const n=o.element;rL(n).each((s=>{mn(s,"visibility","hidden"),o.getSystem().getByDom(s).toOptional().each((o=>{const n=((e,t,o)=>L(e,((n,s)=>{ng.set(o,e[s].view());const r=t.dom.getBoundingClientRect();return ng.set(o,[]),r.height})))(e,s,o),r=(e=>te(Z(e,((e,t)=>e>t?-1:e{te(e).each((e=>CS.showTab(t,e.value)))})(e,o),requestAnimationFrame((()=>{sL(n,s,t)}))}))})),Wc(ja(),(e=>{const o=e.element;rL(o).each((e=>{sL(o,e,t)}))})),Wc(ED,((e,o)=>{const n=e.element;rL(n).each((e=>{const o=Vo(ko(e));mn(e,"visibility","hidden");const s=bn(e,"height").map((e=>parseInt(e,10)));yn(e,"height"),yn(e,"flex-basis");const r=e.dom.getBoundingClientRect().height;s.forall((e=>r>e))?(t.set(r),sL(n,e,t)):s.each((t=>{nL(e,t)})),yn(e,"visibility"),o.each(No)}))}))];return{extraEvents:o,selectFirst:!1}})(l);return CS.sketch({dom:{tag:"div",classes:["tox-dialog__body"]},onChangeTab:(e,t,o)=>{const n=Zh.getValue(t);Rc(e,TD,{name:n,oldName:i.get()}),i.set(n)},tabs:l,components:[CS.parts.tabbar({dom:{tag:"div",classes:["tox-dialog__body-nav"]},components:[bS.parts.tabs({})],markers:{tabClass:"tox-tab",selectedClass:"tox-dialog__body-nav-item--active"},tabbarBehaviours:rd([Gb.config({})])}),CS.parts.tabview({dom:{tag:"div",classes:["tox-dialog__body-content"]}})],selectFirst:c.selectFirst,tabSectionBehaviours:rd([ud("tabpanel",c.extraEvents),Om.config({mode:"acyclic"}),Pg.config({find:e=>te(CS.getViewItems(e))}),zD(A.none(),(e=>(e.getSystem().broadcastOn([aL],{}),s.get())),((e,t)=>{s.set(t),e.getSystem().broadcastOn([iL],{})}))])})},cL=(e,t,o,n,s,r)=>({dom:{tag:"div",classes:["tox-dialog__content-js"],attributes:{...o.map((e=>({id:e}))).getOr({}),...s?{"aria-live":"polite"}:{}}},components:[],behaviours:rd([ID(0),db.config({channel:`${uB}-${t}`,updateState:(e,t)=>A.some({isTabPanel:()=>"tabpanel"===t.body.type}),renderComponents:e=>{const t=e.body;return"tabpanel"===t.type?[lL(t,e.initialData,n,r)]:[oL(t,e.initialData,n,r)]},initialData:e})])}),dL=zS.deviceType.isTouch(),uL=(e,t)=>({dom:{tag:"div",styles:{display:"none"},classes:["tox-dialog__header"]},components:[e,t]}),mL=(e,t)=>sy.parts.close(Tv.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":t.translate("Close")}},action:e,buttonBehaviours:rd([Gb.config({})])})),gL=()=>sy.parts.title({dom:{tag:"div",classes:["tox-dialog__title"],innerHtml:"",styles:{display:"none"}}}),pL=(e,t)=>sy.parts.body({dom:{tag:"div",classes:["tox-dialog__body"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-content"]},components:[{dom:gv(`

${Yk(t.translate(e))}

`)}]}]}),hL=e=>sy.parts.footer({dom:{tag:"div",classes:["tox-dialog__footer"]},components:e}),fL=(e,t)=>[ch.sketch({dom:{tag:"div",classes:["tox-dialog__footer-start"]},components:e}),ch.sketch({dom:{tag:"div",classes:["tox-dialog__footer-end"]},components:t})],bL=e=>{const t="tox-dialog",o=t+"-wrap",n=o+"__backdrop",s=t+"__disable-scroll";return sy.sketch({lazySink:e.lazySink,onEscape:t=>(e.onEscape(t),A.some(!0)),useTabstopAt:e=>!lB(e),firstTabstop:e.firstTabstop,dom:{tag:"div",classes:[t].concat(e.extraClasses),styles:{position:"relative",...e.extraStyles}},components:[e.header,e.body,...e.footer.toArray()],parts:{blocker:{dom:gv(`
`),components:[{dom:{tag:"div",classes:dL?[n,n+"--opaque"]:[n]}}]}},dragBlockClass:o,modalBehaviours:rd([fd.config({}),ud("dialog-events",e.dialogEvents.concat([Kc(xa(),((e,t)=>{Lg.isBlocked(e)||Om.focusIn(e)})),Wc(Ja(),((e,t)=>{e.getSystem().broadcastOn([pB],{newFocus:t.event.newFocus})}))])),ud("scroll-lock",[Jc((()=>{os(ln(),s)})),Qc((()=>{ss(ln(),s)}))]),...e.extraBehaviours]),eventOrder:{[Na()]:["dialog-events"],[qa()]:["scroll-lock","dialog-events","alloy.base.behaviour"],[Xa()]:["alloy.base.behaviour","dialog-events","scroll-lock"],...e.eventOrder}})},vL=e=>Tv.sketch({dom:{tag:"button",classes:["tox-button","tox-button--icon","tox-button--naked"],attributes:{type:"button","aria-label":e.translate("Close"),"data-mce-name":"close"}},buttonBehaviours:rd([Gb.config({}),uv.config(e.tooltips.getConfig({tooltipText:e.translate("Close")}))]),components:[rO("close",{tag:"span",classes:["tox-icon"]},e.icons)],action:e=>{Ic(e,SD)}}),xL=(e,t,o,n)=>({dom:{tag:"h1",classes:["tox-dialog__title"],attributes:{...o.map((e=>({id:e}))).getOr({})}},components:[],behaviours:rd([db.config({channel:`${dB}-${t}`,initialData:e,renderComponents:e=>[Ag(n.translate(e.title))]})])}),yL=()=>({dom:gv('
')}),wL=(e,t,o)=>((e,t,o)=>{const n=sy.parts.title(xL(e,t,A.none(),o)),s=sy.parts.draghandle(yL()),r=sy.parts.close(vL(o)),a=[n].concat(e.draggable?[s]:[]).concat([r]);return ch.sketch({dom:gv('
'),components:a})})({title:o.shared.providers.translate(e),draggable:o.dialog.isDraggableModal()},t,o.shared.providers),SL=(e,t,o,n)=>({dom:{tag:"div",classes:["tox-dialog__busy-spinner"],attributes:{"aria-label":o.translate(e)},styles:{left:"0px",right:"0px",bottom:"0px",top:`${n.getOr(0)}px`,position:"absolute"}},behaviours:t,components:[{dom:gv('
')}]}),CL=(e,t,o)=>({onClose:()=>o.closeWindow(),onBlock:o=>{const n=Xn(e().element,".tox-dialog__header").map((e=>kn(e)));sy.setBusy(e(),((e,s)=>SL(o.message,s,t,n)))},onUnblock:()=>{sy.setIdle(e())}}),kL="tox-dialog--fullscreen",OL="tox-dialog--width-lg",_L="tox-dialog--width-md",TL=e=>{switch(e){case"large":return A.some(OL);case"medium":return A.some(_L);default:return A.none()}},EL=(e,t)=>{const o=ct(t.element.dom);rs(o,kL)||(is(o,[OL,_L]),TL(e).each((e=>os(o,e))))},AL=(e,t)=>{const o=ct(e.element.dom),n=ls(o),s=$(n,(e=>e===OL||e===_L)).or(TL(t));((e,t)=>{V(t,(t=>{((e,t)=>{const o=Qn(e)?e.dom.classList.toggle(t):((e,t)=>I(Zn(e),t)?ts(e,t):es(e,t))(e,t);ns(e)})(e,t)}))})(o,[kL,...s.toArray()])},ML=(e,t,o)=>Fg(bL({...e,firstTabstop:1,lazySink:o.shared.getSink,extraBehaviours:[VD({}),...e.extraBehaviours],onEscape:e=>{Ic(e,SD)},dialogEvents:t,eventOrder:{[Ra()]:[db.name(),ab.name()],[qa()]:["scroll-lock",db.name(),"messages","dialog-events","alloy.base.behaviour"],[Xa()]:["alloy.base.behaviour","dialog-events","messages",db.name(),"scroll-lock"]}})),DL=(e,t={})=>L(e,(e=>"menu"===e.type?(e=>{const o=L(e.items,(e=>{const o=fe(t,e.name).getOr(ye(!1));return{...e,storage:o}}));return{...e,items:o}})(e):e)),BL=e=>W(e,((e,t)=>"menu"===t.type?W(t.items,((e,t)=>(e[t.name]=t.storage,e)),e):e),{}),FL=(e,t)=>[qc(xa(),iB),e(wD,((e,o,n,s)=>{Lo(s.element)&&Vo(ko(s.element)).each(zo),t.onClose(),o.onClose()})),e(SD,((e,t,o,n)=>{t.onCancel(e),Ic(n,wD)})),Wc(_D,((e,o)=>t.onUnblock())),Wc(OD,((e,o)=>t.onBlock(o.event)))],IL=(e,t,o)=>{const n=(t,o)=>Wc(t,((t,n)=>{s(t,((s,r)=>{o(e(),s,n.event,t)}))})),s=(e,t)=>{db.getState(e).get().each((o=>{t(o.internalDialog,e)}))};return[...FL(n,t),n(kD,((e,t)=>t.onSubmit(e))),n(xD,((e,t,o)=>{t.onChange(e,{name:o.name})})),n(CD,((e,t,n,s)=>{const r=()=>s.getSystem().isConnected()?Om.focusIn(s):void 0,a=e=>Jo(e,"disabled")||Ko(e,"aria-disabled").exists((e=>"true"===e)),i=ko(s.element),l=Vo(i);t.onAction(e,{name:n.name,value:n.value}),Vo(i).fold(r,(e=>{a(e)||l.exists((t=>wt(e,t)&&a(t)))?r():o().toOptional().filter((t=>!wt(t.element,e))).each(r)}))})),n(TD,((e,t,o)=>{t.onTabChange(e,{newTabName:o.name,oldTabName:o.oldName})})),Qc((t=>{const o=e();Zh.setValue(t,o.getData())}))]},RL=(e,t)=>{const o=t.map((e=>e.footerButtons)).getOr([]),n=H(o,(e=>"start"===e.align)),s=(e,t)=>ch.sketch({dom:{tag:"div",classes:[`tox-dialog__footer-${e}`]},components:L(t,(e=>e.memento.asSpec()))});return[s("start",n.pass),s("end",n.fail)]},NL=(e,t,o)=>({dom:gv(''),components:[],behaviours:rd([db.config({channel:`${mB}-${t}`,initialData:e,updateState:(e,t)=>{const n=L(t.buttons,(e=>{const t=pv(((e,t)=>fF(e,e.type,t))(e,o));return{name:e.name,align:e.align,memento:t}}));return A.some({lookupByName:t=>((e,t,o)=>$(t,(e=>e.name===o)).bind((t=>t.memento.getOpt(e))))(e,n,t),footerButtons:n})},renderComponents:RL})])}),zL=(e,t,o)=>sy.parts.footer(NL(e,t,o)),LL=(e,t)=>{if(e.getRoot().getSystem().isConnected()){const o=Pg.getCurrent(e.getFormWrapper()).getOr(e.getFormWrapper());return Ax.getField(o,t).orThunk((()=>{const o=e.getFooter().bind((e=>db.getState(e).get()));return o.bind((e=>e.lookupByName(t)))}))}return A.none()},VL=(e,t,o)=>{const n=t=>{const o=e.getRoot();o.getSystem().isConnected()&&t(o)},s={getData:()=>{const t=e.getRoot(),n=t.getSystem().isConnected()?e.getFormWrapper():t;return{...Zh.getValue(n),...le(o,(e=>e.get()))}},setData:t=>{n((n=>{const r=s.getData(),a=Le(r,t),i=((e,t)=>{const o=e.getRoot();return db.getState(o).get().map((e=>Tr(_r("data",e.dataValidator,t)))).getOr(t)})(e,a),l=e.getFormWrapper();Zh.setValue(l,i),ie(o,((e,t)=>{be(a,t)&&e.set(a[t])}))}))},setEnabled:(t,o)=>{LL(e,t).each(o?rp.enable:rp.disable)},focus:t=>{LL(e,t).each(fd.focus)},block:e=>{if(!r(e))throw new Error("The dialogInstanceAPI.block function should be passed a blocking message of type string as an argument");n((t=>{Rc(t,OD,{message:e})}))},unblock:()=>{n((e=>{Ic(e,_D)}))},showTab:t=>{n((o=>{const n=e.getBody();db.getState(n).get().exists((e=>e.isTabPanel()))&&Pg.getCurrent(n).each((e=>{CS.showTab(e,t)}))}))},redial:r=>{n((n=>{const a=e.getId(),i=t(r),l=DL(i.internalDialog.buttons,o);n.getSystem().broadcastOn([`${cB}-${a}`],i),n.getSystem().broadcastOn([`${dB}-${a}`],i.internalDialog),n.getSystem().broadcastOn([`${uB}-${a}`],i.internalDialog),n.getSystem().broadcastOn([`${mB}-${a}`],{...i.internalDialog,buttons:l}),s.setData(i.initialData)}))},close:()=>{n((e=>{Ic(e,wD)}))},toggleFullscreen:e.toggleFullscreen};return s},HL=(e,t,o,n=!1,s)=>{const r=Ne("dialog"),a=Ne("dialog-label"),i=Ne("dialog-content"),l=e.internalDialog,c=ye(l.size),d=TL(c.get()).toArray(),u=pv(((e,t,o,n)=>ch.sketch({dom:gv('
'),components:[xL(e,t,A.some(o),n),yL(),vL(n)],containerBehaviours:rd([Dh.config({mode:"mouse",blockerClass:"blocker",getTarget:e=>Yn(e,'[role="dialog"]').getOrDie(),snaps:{getSnapPoints:()=>[],leftAttr:"data-drag-left",topAttr:"data-drag-top"},onDrag:(e,t)=>{e.getSystem().broadcastOn([Ed()],{target:t})}})])}))({title:l.title,draggable:!0},r,a,o.shared.providers)),m=pv(((e,t,o,n,s,r)=>cL(e,t,A.some(o),n,s,r))({body:l.body,initialData:l.initialData},r,i,o,n,(e=>LL(x,e)))),g=DL(l.buttons),p=BL(g),h=$e(0!==g.length,pv(((e,t,o)=>NL(e,t,o))({buttons:g},r,o))),f=IL((()=>w),{onBlock:e=>{Lg.block(v,((t,n)=>{const s=u.getOpt(v).map((e=>kn(e.element)));return SL(e.message,n,o.shared.providers,s)}))},onUnblock:()=>{Lg.unblock(v)},onClose:()=>t.closeWindow()},o.shared.getSink),b=Jt().os,v=Fg({dom:{tag:"div",classes:["tox-dialog","tox-dialog-inline",...d],attributes:{role:"dialog",...b.isMacOS()?{"aria-label":l.title}:{"aria-labelledby":a}}},eventOrder:{[Ra()]:[db.name(),ab.name()],[Na()]:["execute-on-form"],[qa()]:["reflecting","execute-on-form"]},behaviours:rd([Om.config({mode:"cyclic",onEscape:e=>(Ic(e,wD),A.some(!0)),useTabstopAt:e=>!lB(e)&&("button"!==eo(e)||"disabled"!==Yo(e,"disabled")),firstTabstop:1}),db.config({channel:`${cB}-${r}`,updateState:(e,t)=>(c.set(t.internalDialog.size),EL(t.internalDialog.size,e),s(),A.some(t)),initialData:e}),fd.config({}),ud("execute-on-form",f.concat([Kc(xa(),((e,t)=>{Om.focusIn(e)})),Wc(Ja(),((e,t)=>{e.getSystem().broadcastOn([pB],{newFocus:t.event.newFocus})}))])),Lg.config({getRoot:()=>A.some(v)}),ng.config({}),VD({})]),components:[u.asSpec(),m.asSpec(),...h.map((e=>e.asSpec())).toArray()]}),x={getId:y(r),getRoot:y(v),getFooter:()=>h.map((e=>e.get(v))),getBody:()=>m.get(v),getFormWrapper:()=>{const e=m.get(v);return Pg.getCurrent(e).getOr(e)},toggleFullscreen:()=>{AL(v,c.get())}},w=VL(x,t.redial,p);return{dialog:v,instanceApi:w}};var PL=tinymce.util.Tools.resolve("tinymce.util.URI");const UL=["insertContent","setContent","execCommand","close","block","unblock"],WL=e=>a(e)&&-1!==UL.indexOf(e.mceAction),$L=(e,t,o,n)=>{const s=Ne("dialog"),i=wL(e.title,s,n),l=(e=>{const t={dom:{tag:"div",classes:["tox-dialog__content-js"]},components:[{dom:{tag:"div",classes:["tox-dialog__body-iframe"]},components:[rB(A.none(),{dom:{tag:"iframe",attributes:{src:e.url}},behaviours:rd([Gb.config({}),fd.config({})])})]}],behaviours:rd([Om.config({mode:"acyclic",useTabstopAt:k(lB)})])};return sy.parts.body(t)})(e),c=e.buttons.bind((e=>0===e.length?A.none():A.some(zL({buttons:e},s,n)))),u=((e,t)=>{const o=(e,t)=>Wc(e,((e,o)=>{n(e,((n,s)=>{t(y,n,o.event,e)}))})),n=(e,t)=>{db.getState(e).get().each((o=>{t(o,e)}))};return[...FL(o,t),o(CD,((e,t,o)=>{t.onAction(e,{name:o.name})}))]})(0,CL((()=>x),n.shared.providers,t)),m={...e.height.fold((()=>({})),(e=>({height:e+"px","max-height":e+"px"}))),...e.width.fold((()=>({})),(e=>({width:e+"px","max-width":e+"px"})))},p=e.width.isNone()&&e.height.isNone()?["tox-dialog--width-lg"]:[],h=new PL(e.url,{base_uri:new PL(window.location.href)}),f=`${h.protocol}://${h.host}${h.port?":"+h.port:""}`,b=qe(),v=[db.config({channel:`${cB}-${s}`,updateState:(e,t)=>A.some(t),initialData:e}),ud("messages",[Jc((()=>{const t=Bo(ct(window),"message",(t=>{if(h.isSameOrigin(new PL(t.raw.origin))){const n=t.raw.data;WL(n)?((e,t,o)=>{switch(o.mceAction){case"insertContent":e.insertContent(o.content);break;case"setContent":e.setContent(o.content);break;case"execCommand":const n=!!d(o.ui)&&o.ui;e.execCommand(o.cmd,n,o.value);break;case"close":t.close();break;case"block":t.block(o.message);break;case"unblock":t.unblock()}})(o,y,n):(e=>!WL(e)&&a(e)&&be(e,"mceAction"))(n)&&e.onMessage(y,n)}}));b.set(t)})),Qc(b.clear)]),ab.config({channels:{[gB]:{onReceive:(e,t)=>{Xn(e.element,"iframe").each((e=>{const o=e.dom.contentWindow;g(o)&&o.postMessage(t,f)}))}}}})],x=ML({id:s,header:i,body:l,footer:c,extraClasses:p,extraBehaviours:v,extraStyles:m},u,n),y=(e=>{const t=t=>{e.getSystem().isConnected()&&t(e)};return{block:e=>{if(!r(e))throw new Error("The urlDialogInstanceAPI.block function should be passed a blocking message of type string as an argument");t((t=>{Rc(t,OD,{message:e})}))},unblock:()=>{t((e=>{Ic(e,_D)}))},close:()=>{t((e=>{Ic(e,wD)}))},sendMessage:e=>{t((t=>{t.getSystem().broadcastOn([gB],e)}))}}})(x);return{dialog:x,instanceApi:y}},GL=(e,t)=>Tr(_r("data",t,e)),jL=e=>ps(e,".tox-alert-dialog")||ps(e,".tox-confirm-dialog"),qL=(e,t,o,n)=>t&&o?[]:[Bp.config({contextual:{lazyContext:()=>A.some(Rs(ct(e.getContentAreaContainer()))),fadeInClass:"tox-dialog-dock-fadein",fadeOutClass:"tox-dialog-dock-fadeout",transitionClass:"tox-dialog-dock-transition",onHide:n},modes:["top"],lazyViewport:t=>qC(e,t.element).map((e=>({bounds:XC(e),optScrollEnv:A.some({currentScrollTop:e.element.dom.scrollTop,scrollElmTop:Fn(e.element).top})}))).getOrThunk((()=>({bounds:Ls(),optScrollEnv:A.none()})))})],XL=e=>{const t=e.editor,o=VC(t),n=(e=>{const t=e.shared;return{open:(o,n)=>{const s=()=>{sy.hide(l),n()},r=pv(fF({context:"any",name:"close-alert",text:"OK",primary:!0,buttonType:A.some("primary"),align:"end",enabled:!0,icon:A.none()},"cancel",e)),a=gL(),i=mL(s,t.providers),l=Fg(bL({lazySink:()=>t.getSink(),header:uL(a,i),body:pL(o,t.providers),footer:A.some(hL(fL([],[r.asSpec()]))),onEscape:s,extraClasses:["tox-alert-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[Wc(SD,s)],eventOrder:{}}));sy.show(l);const c=r.get(l);fd.focus(c)}}})(e.backstages.dialog),s=(e=>{const t=e.shared;return{open:(o,n)=>{const s=e=>{sy.hide(c),n(e)},r=pv(fF({context:"any",name:"yes",text:"Yes",primary:!0,buttonType:A.some("primary"),align:"end",enabled:!0,icon:A.none()},"submit",e)),a=fF({context:"any",name:"no",text:"No",primary:!1,buttonType:A.some("secondary"),align:"end",enabled:!0,icon:A.none()},"cancel",e),i=gL(),l=mL((()=>s(!1)),t.providers),c=Fg(bL({lazySink:()=>t.getSink(),header:uL(i,l),body:pL(o,t.providers),footer:A.some(hL(fL([],[a,r.asSpec()]))),onEscape:()=>s(!1),extraClasses:["tox-confirm-dialog"],extraBehaviours:[],extraStyles:{},dialogEvents:[Wc(SD,(()=>s(!1))),Wc(kD,(()=>s(!0)))],eventOrder:{}}));sy.show(c);const d=r.get(c);fd.focus(d)}}})(e.backstages.dialog),r=(t,o)=>uE.open(((t,n,s)=>{const r=n,a=((e,t,o)=>{const n=Ne("dialog"),s=e.internalDialog,r=wL(s.title,n,o),a=ye(s.size),i=TL(a.get()).toArray(),l=((e,t,o,n)=>{const s=cL(e,t,A.none(),o,!1,n);return sy.parts.body(s)})({body:s.body,initialData:s.initialData},n,o,(e=>LL(h,e))),c=DL(s.buttons),d=BL(c),u=$e(0!==c.length,zL({buttons:c},n,o)),m=IL((()=>f),CL((()=>p),o.shared.providers,t),o.shared.getSink),g={id:n,header:r,body:l,footer:u,extraClasses:i,extraBehaviours:[db.config({channel:`${cB}-${n}`,updateState:(e,t)=>(a.set(t.internalDialog.size),EL(t.internalDialog.size,e),A.some(t)),initialData:e})],extraStyles:{}},p=ML(g,m,o),h={getId:y(n),getRoot:y(p),getBody:()=>sy.getBody(p),getFooter:()=>sy.getFooter(p),getFormWrapper:()=>{const e=sy.getBody(p);return Pg.getCurrent(e).getOr(e)},toggleFullscreen:()=>{AL(p,a.get())}},f=VL(h,t.redial,d);return{dialog:p,instanceApi:f}})({dataValidator:s,initialData:r,internalDialog:t},{redial:uE.redial,closeWindow:()=>{sy.hide(a.dialog),o(a.instanceApi)}},e.backstages.dialog);return sy.show(a.dialog),a.instanceApi.setData(r),a.instanceApi}),t),a=(n,s,r,a)=>uE.open(((n,i,l)=>{const c=GL(i,l),d=Xe(),u=e.backstages.popup.shared.header.isPositionedAtTop(),m=()=>d.on((e=>{Xx.reposition(e),o&&u||Bp.refresh(e)})),g=HL({dataValidator:l,initialData:c,internalDialog:n},{redial:uE.redial,closeWindow:()=>{d.on(Xx.hide),t.off("ResizeEditor",m),t.off("ScrollWindow",p),d.clear(),r(g.instanceApi)}},e.backstages.popup,a.ariaAttrs,m),p=()=>g.dialog.getSystem().broadcastOn([Ed()],{target:g.dialog.element}),h=Fg(Xx.sketch({lazySink:e.backstages.popup.shared.getSink,dom:{tag:"div",classes:[]},fireDismissalEventInstead:a.persistent?{event:"doNotDismissYet"}:{},...u?{}:{fireRepositionEventInstead:{}},inlineBehaviours:rd([ud("window-manager-inline-events",[Wc(Ya(),((e,t)=>{Ic(g.dialog,SD)}))]),...qL(t,o,u,(()=>g.dialog.getSystem().broadcastOn([Td()],{target:g.dialog.element})))]),isExtraPart:(e,t)=>jL(t)}));return d.set(h),Xx.showWithinBounds(h,Ig(g.dialog),{anchor:s},(()=>{const e=t.inline?ln():ct(t.getContainer()),o=Rs(e);return A.some(o)})),o&&u||(Bp.refresh(h),t.on("ResizeEditor",m)),t.on("ScrollWindow",p),g.instanceApi.setData(c),Om.focusIn(g.dialog),g.instanceApi}),n),i=(o,n,s,r)=>uE.open(((o,a,i)=>{const l=GL(a,i),c=Xe(),d=e.backstages.popup.shared.header.isPositionedAtTop(),u=()=>c.on((e=>{Xx.reposition(e),Bp.refresh(e)})),m=HL({dataValidator:i,initialData:l,internalDialog:o},{redial:uE.redial,closeWindow:()=>{c.on(Xx.hide),t.off("ResizeEditor ScrollWindow ElementScroll",u),c.clear(),s(m.instanceApi)}},e.backstages.popup,r.ariaAttrs,u),g=Fg(Xx.sketch({lazySink:e.backstages.popup.shared.getSink,dom:{tag:"div",classes:[]},fireDismissalEventInstead:r.persistent?{event:"doNotDismissYet"}:{},...d?{}:{fireRepositionEventInstead:{}},inlineBehaviours:rd([ud("window-manager-inline-events",[Wc(Ya(),((e,t)=>{Ic(m.dialog,SD)}))]),Bp.config({contextual:{lazyContext:()=>A.some(Rs(ct(t.getContentAreaContainer()))),fadeInClass:"tox-dialog-dock-fadein",fadeOutClass:"tox-dialog-dock-fadeout",transitionClass:"tox-dialog-dock-transition"},modes:["top","bottom"],lazyViewport:e=>qC(t,e.element).map((e=>({bounds:XC(e),optScrollEnv:A.some({currentScrollTop:e.element.dom.scrollTop,scrollElmTop:Fn(e.element).top})}))).getOrThunk((()=>({bounds:Ls(),optScrollEnv:A.none()})))})]),isExtraPart:(e,t)=>jL(t)}));return c.set(g),Xx.showWithinBounds(g,Ig(m.dialog),{anchor:n},(()=>e.backstages.popup.shared.getSink().toOptional().bind((e=>{const o=qC(t,e.element).map((e=>XC(e))).getOr(Ls()),n=Rs(ct(t.getContentAreaContainer())),s=zs(n,o);return A.some(Is(s.x,s.y,s.width,s.height-15))})))),Bp.refresh(g),t.on("ResizeEditor ScrollWindow ElementScroll ResizeWindow",u),m.instanceApi.setData(l),Om.focusIn(m.dialog),m.instanceApi}),o);return{open:(t,o,n)=>{if(!u(o)){if("toolbar"===o.inline)return a(t,e.backstages.popup.shared.anchors.inlineDialog(),n,o);if("bottom"===o.inline)return i(t,e.backstages.popup.shared.anchors.inlineBottomDialog(),n,o);if("cursor"===o.inline)return a(t,e.backstages.popup.shared.anchors.cursor(),n,o)}return r(t,n)},openUrl:(o,n)=>((o,n)=>uE.openUrl((o=>{const s=$L(o,{closeWindow:()=>{sy.hide(s.dialog),n(s.instanceApi)}},t,e.backstages.dialog);return sy.show(s.dialog),s.instanceApi}),o))(o,n),alert:(e,t)=>{n.open(e,t)},close:e=>{e.close()},confirm:(e,t)=>{s.open(e,t)}}},YL=e=>{HS(e),(e=>{const t=e.options.register,o=e=>{return f(e,r)?{value:(t=e,_M(t.map(((e,t)=>t%2==0?"#"+(e=>{return(t=e,$A(t)?A.some({value:GA(t)}):A.none()).orThunk((()=>aM(e).map(qA))).getOrThunk((()=>{const t=document.createElement("canvas");t.height=1,t.width=1;const o=t.getContext("2d");o.clearRect(0,0,t.width,t.height),o.fillStyle="#FFFFFF",o.fillStyle=e,o.fillRect(0,0,1,1);const n=o.getImageData(0,0,1,1).data,s=n[0],r=n[1],a=n[2],i=n[3];return qA(tM(s,r,a,i))}));var t})(e).value:e)))),valid:!0}:{valid:!1,message:"Must be an array of strings."};var t},n=e=>h(e)&&e>0?{value:e,valid:!0}:{valid:!1,message:"Must be a positive number."};t("color_map",{processor:o,default:["#BFEDD2","Light Green","#FBEEB8","Light Yellow","#F8CAC6","Light Red","#ECCAFA","Light Purple","#C2E0F4","Light Blue","#2DC26B","Green","#F1C40F","Yellow","#E03E2D","Red","#B96AD9","Purple","#3598DB","Blue","#169179","Dark Turquoise","#E67E23","Orange","#BA372A","Dark Red","#843FA1","Dark Purple","#236FA1","Dark Blue","#ECF0F1","Light Gray","#CED4D9","Medium Gray","#95A5A6","Gray","#7E8C8D","Dark Gray","#34495E","Navy Blue","#000000","Black","#ffffff","White"]}),t("color_map_raw",{processor:e=>f(e,r)?{value:_M(e),valid:!0}:{valid:!1,message:"Must be an array of strings."}}),t("color_map_background",{processor:o}),t("color_map_foreground",{processor:o}),t("color_cols",{processor:n,default:MM(e)}),t("color_cols_foreground",{processor:n,default:DM(e,kM)}),t("color_cols_background",{processor:n,default:DM(e,OM)}),t("custom_colors",{processor:"boolean",default:!0}),t("color_default_foreground",{processor:"string",default:EM}),t("color_default_background",{processor:"string",default:EM})})(e),(e=>{const t=e.options.register;t("contextmenu_avoid_overlap",{processor:"string",default:""}),t("contextmenu_never_use_native",{processor:"boolean",default:!1}),t("contextmenu",{processor:e=>!1===e?{value:[],valid:!0}:r(e)||f(e,r)?{value:wz(e),valid:!0}:{valid:!1,message:"Must be false or a string."},default:"link linkchecker image editimage table spellchecker configurepermanentpen"})})(e)};FS.add("silver",(e=>{YL(e);let t=()=>Ls();const{dialogs:o,popups:n,renderUI:s}=eL(e,{getPopupSinkBounds:()=>t()});gD(e,n.backstage.shared);const r=XL({editor:e,backstages:{popup:n.backstage,dialog:o.backstage}}),a=Xe();return{renderUI:()=>{const o=s();return qC(e,n.getMothership().element).each((e=>{t=()=>XC(e)})),o},getWindowManagerImpl:y(r),getNotificationManagerImpl:()=>lO(e,{backstage:n.backstage},n.getMothership(),a),getPromotionElement:()=>Xn(ct(e.getContainer()),".tox-promotion").map((e=>e.dom)).getOrNull()}}))}(); \ No newline at end of file diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scripts/copy-tinymce.js b/scripts/copy-tinymce.js new file mode 100644 index 0000000..20e7ae4 --- /dev/null +++ b/scripts/copy-tinymce.js @@ -0,0 +1,41 @@ +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const srcDir = path.resolve(__dirname, '../node_modules/tinymce'); +const destDir = path.resolve(__dirname, '../public/tinymce'); + +function copyDir(src, dest) { + fs.mkdirSync(dest, { recursive: true }); + const entries = fs.readdirSync(src, { withFileTypes: true }); + + for (const entry of entries) { + const srcPath = path.join(src, entry.name); + const destPath = path.join(dest, entry.name); + + if (entry.isDirectory()) { + copyDir(srcPath, destPath); + } else { + fs.copyFileSync(srcPath, destPath); + } + } +} + +console.log('Copying TinyMCE assets...'); +try { + // Copy skins + copyDir(path.join(srcDir, 'skins'), path.join(destDir, 'skins')); + // Copy icons (optional if imported, but good for safety) + copyDir(path.join(srcDir, 'icons'), path.join(destDir, 'icons')); + // Copy models (optional) + copyDir(path.join(srcDir, 'models'), path.join(destDir, 'models')); + // Copy themes (optional) + copyDir(path.join(srcDir, 'themes'), path.join(destDir, 'themes')); + + console.log('TinyMCE assets copied successfully.'); +} catch (e) { + console.error('Error copying TinyMCE assets:', e); +} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..fd8aa2f --- /dev/null +++ b/src/App.css @@ -0,0 +1,372 @@ +.app-container { + display: flex; + flex-direction: column; + height: 100vh; + padding: 20px; + box-sizing: border-box; + background-color: #f5f5f5; + font-family: 'Noto Sans KR', sans-serif; + /* Application default font */ +} + +/* Register Custom Font */ +@font-face { + font-family: 'Noto Sans KR'; + src: url('../fonts/NotoSansKR-Regular.otf') format('opentype'); + font-weight: normal; + font-style: normal; +} + +.toolbar { + display: flex; + gap: 15px; + padding: 8px 12px; + background-color: white; + border-radius: 8px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + align-items: stretch; + flex-wrap: wrap; + border-bottom: 2px solid #f0f0f0; +} + +.toolbar-group { + display: flex; + align-items: center; + gap: 8px; + padding-right: 15px; + border-right: 1px solid #eee; + position: relative; +} + +.toolbar-group:last-child { + border-right: none; +} + +.group-label { + font-size: 11px; + color: #888; + position: absolute; + top: -6px; + left: 0; + font-weight: bold; + display: none; + /* Minimalist: hide label or simple layout */ +} + +/* Optional: Label on top logic if we want, but row is better */ + +.toolbar label { + font-weight: 500; + color: #444; + font-size: 13px; + display: flex; + align-items: center; +} + +.compact-input, +.compact-select { + margin-left: 5px; + padding: 4px 6px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 13px; + max-width: 80px; +} + +.compact-select { + max-width: 120px; +} + +.color-input { + width: 24px; + height: 24px; + padding: 0; + border: none; + background: none; + margin-left: 5px; + cursor: pointer; +} + +.checkbox-label { + cursor: pointer; + user-select: none; +} + +.checkbox-label input { + margin-right: 5px; +} + +.toolbar-actions { + margin-left: auto; + display: flex; + gap: 8px; +} + +.primary-btn { + background-color: #4CAF50; + color: white; + border: none; + padding: 6px 14px; + border-radius: 4px; + cursor: pointer; + font-weight: bold; + font-size: 13px; + transition: background-color 0.2s; +} + +.primary-btn:hover { + background-color: #45a049; +} + +.primary-btn:disabled { + background-color: #ccc; + cursor: not-allowed; +} + +.secondary-btn { + background-color: #646cff; + /* Violete */ + color: white; + border: none; + padding: 6px 14px; + border-radius: 4px; + cursor: pointer; + font-weight: bold; + font-size: 13px; + transition: background-color 0.2s; +} + +.secondary-btn:hover { + background-color: #535bf2; +} + +/* Status Bar */ +.status-bar { + background-color: #222; + color: #eee; + padding: 4px 15px; + font-size: 12px; + display: flex; + gap: 20px; + margin-top: auto; + /* Push to bottom if container is flex col */ + align-items: center; +} + +.status-item { + font-family: monospace; +} + +.editor-wrapper-outer { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + background-color: white; + border-radius: 8px; + border-radius: 8px 8px 0 0; + /* Rounded top only */ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + margin-bottom: 0px; + /* Connect to status bar if needed, or keeping it separate */ +} + +.editor-container { + height: 100%; + width: 100%; + display: flex; + flex-direction: column; +} + +/* Ensure TinyMCE fills the container */ +.tox-tinymce { + flex: 1; + width: 100% !important; + border: none !important; +} + +.hint { + margin-top: 10px; + text-align: center; + color: #666; + font-size: 0.9em; +} + +/* Preview Modal Styles */ +.preview-modal-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.8); + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; +} + +.preview-modal-content { + background: white; + width: 90%; + height: 90%; + display: flex; + flex-direction: column; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.5); + border-radius: 8px; + overflow: hidden; +} + +.preview-header { + padding: 15px 20px; + border-bottom: 1px solid #ddd; + display: flex; + justify-content: space-between; + align-items: center; + background-color: #f9f9f9; +} + +.preview-header h3 { + margin: 0; + font-size: 16px; + color: #333; +} + +.preview-body { + flex: 1; + overflow: auto; + /* Allow native scroll */ + background-color: #e5e5e5; + display: flex; + justify-content: center; + /* Center horizontally if width < 100% */ + align-items: flex-start; + /* Start from top to allow scrolling down properly */ + padding: 20px; +} + +.preview-scroll-container { + display: flex; + justify-content: center; + width: 100%; +} + +.preview-body img { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); + display: block; +} + +.save-btn { + background-color: #007bff; + color: white; + padding: 8px 16px; + border: none; + border-radius: 4px; + cursor: pointer; + margin-right: 10px; + font-weight: bold; +} + +.save-btn:hover { + background-color: #0056b3; +} + +.close-btn { + background-color: #6c757d; + color: white; + padding: 6px 12px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +.format-btn { + background-color: #2196F3; + color: white; + padding: 6px 12px; + border: none; + border-radius: 4px; + cursor: pointer; + font-weight: bold; + font-size: 13px; + margin-right: 5px; + transition: background-color 0.2s; +} + +.format-btn:hover { + background-color: #1976D2; +} + +.format-btn.html { + background-color: #ff9800; +} + +.format-btn.html:hover { + background-color: #f57c00; +} + +.preview-title-group { + display: flex; + align-items: center; +} + +.export-actions-group { + display: flex; + align-items: center; + gap: 5px; +} + +.close-btn:hover { + background-color: #5a6268; +} + +/* Loading Overlay Styles */ +.loading-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); + display: flex; + justify-content: center; + align-items: center; + z-index: 20000; + /* Higher than everything */ +} + +.loading-content { + background: white; + padding: 30px 50px; + border-radius: 8px; + display: flex; + flex-direction: column; + align-items: center; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3); +} + +.loading-spinner { + border: 5px solid #f3f3f3; + border-top: 5px solid #007bff; + border-radius: 50%; + width: 40px; + height: 40px; + animation: spin 1s linear infinite; + margin-bottom: 15px; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.loading-content p { + margin: 0; + font-weight: bold; + color: #333; +} \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..15ba175 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,661 @@ +import { useState, useRef, useEffect } from 'react'; +import { Editor } from '@tinymce/tinymce-react'; +import * as htmlToImage from 'html-to-image'; +import { jsPDF } from 'jspdf'; +import './App.css'; + +// Import TinyMCE +import 'tinymce/tinymce'; +import 'tinymce/models/dom/model'; +import 'tinymce/themes/silver'; +import 'tinymce/icons/default'; + +// Import Plugins +import 'tinymce/plugins/advlist'; +import 'tinymce/plugins/autolink'; +import 'tinymce/plugins/lists'; +import 'tinymce/plugins/link'; +import 'tinymce/plugins/image'; +import 'tinymce/plugins/charmap'; +import 'tinymce/plugins/preview'; +import 'tinymce/plugins/anchor'; +import 'tinymce/plugins/searchreplace'; +import 'tinymce/plugins/visualblocks'; +import 'tinymce/plugins/code'; +import 'tinymce/plugins/fullscreen'; +import 'tinymce/plugins/insertdatetime'; +import 'tinymce/plugins/media'; +import 'tinymce/plugins/table'; +import 'tinymce/plugins/help'; +import 'tinymce/plugins/wordcount'; + +function App() { + const [content, setContent] = useState(''); + const [width, setWidth] = useState(1100); // Print/Container Width + const [contentWidth, setContentWidth] = useState(800); // Inner Content Width + const [padding, setPadding] = useState(40); // New Padding State + const [format, setFormat] = useState('png'); + const [backgroundColor, setBackgroundColor] = useState('#ffffff'); + const [fontFamily, setFontFamily] = useState('Batang'); // New Font State default: Batang + const [previewUrl, setPreviewUrl] = useState(null); + const [zoom, setZoom] = useState(1); + const [isGenerating, setIsGenerating] = useState(false); + const [isOptimized, setIsOptimized] = useState(true); // Default True + const [lineHeight, setLineHeight] = useState(160); // Default 160% + const [isFitToWidth, setIsFitToWidth] = useState(false); // Fit content to width + const [editorKey, setEditorKey] = useState(0); + const [windowSize, setWindowSize] = useState({ width: window.innerWidth, height: window.innerHeight }); + const [editorSize, setEditorSize] = useState({ width: 0, height: 0 }); + const editorRef = useRef(null); + + // Resize Listener + useState(() => { + const handleResize = () => { + setWindowSize({ width: window.innerWidth, height: window.innerHeight }); + const container = document.querySelector('.editor-container'); + if (container) { + setEditorSize({ width: container.clientWidth, height: container.clientHeight }); + } + }; + window.addEventListener('resize', handleResize); + // Initial check + setTimeout(handleResize, 500); + + return () => window.removeEventListener('resize', handleResize); + }, []); + + // Editor Resize Observer (for more accurate updates) + useState(() => { + const observer = new ResizeObserver(entries => { + for (let entry of entries) { + setEditorSize({ width: entry.contentRect.width, height: entry.contentRect.height }); + } + }); + const container = document.querySelector('.editor-container'); + if (container) observer.observe(container); + return () => observer.disconnect(); + }, []); + + // Settings Initialization & Sync + useEffect(() => { + async function initSettings() { + if (window.electronAPI) { + const saved = await window.electronAPI.getSettings(); + if (saved.appSettings) { + const s = saved.appSettings; + if (s.width) setWidth(s.width); + if (s.contentWidth) setContentWidth(s.contentWidth); + if (s.padding) setPadding(s.padding); + if (s.backgroundColor) setBackgroundColor(s.backgroundColor); + if (s.fontFamily) setFontFamily(s.fontFamily); + if (s.lineHeight) setLineHeight(s.lineHeight); + if (s.isOptimized !== undefined) setIsOptimized(s.isOptimized); + if (s.isFitToWidth !== undefined) setIsFitToWidth(s.isFitToWidth); + } + } + } + initSettings(); + }, []); + + // Persist Settings on Change + useEffect(() => { + if (window.electronAPI) { + const settings = { + width, + contentWidth, + padding, + backgroundColor, + fontFamily, + lineHeight, + isOptimized, + isFitToWidth + }; + // Simple debounce to avoid too many writes + const timeout = setTimeout(() => { + window.electronAPI.updateSettings({ appSettings: settings }); + }, 500); + return () => clearTimeout(timeout); + } + }, [width, contentWidth, padding, backgroundColor, fontFamily, lineHeight, isOptimized, isFitToWidth]); + + const fontOptions = [ + { value: 'Noto Sans KR', label: 'Noto Sans KR (Default)' }, + { value: 'Malgun Gothic', label: 'Malgun Gothic (맑은 고딕)' }, + { value: 'Dotum', label: 'Dotum (돋움)' }, + { value: 'Gulim', label: 'Gulim (굴림)' }, + { value: 'Batang', label: 'Batang (바탕)' }, + { value: 'Arial', label: 'Arial' }, + ]; + + const handleImportHTML = async () => { + if (window.electronAPI) { + const result = await window.electronAPI.openFile(); + if (result.success) { + // Simple extraction of body content if full HTML is provided + let newContent = result.content; + const bodyMatch = newContent.match(/]*>([\s\S]*)<\/body>/i); + if (bodyMatch && bodyMatch[1]) { + newContent = bodyMatch[1]; + } + setContent(newContent); + setEditorKey(prev => prev + 1); // Force Editor Re-mount + alert('파일을 불러왔습니다.'); + } else if (result.message !== 'Cancelled') { + alert(`오류: ${result.message}`); + } + } else { + alert('Electron 환경이 아닙니다.'); + } + }; + + + + const handleEditorChange = (newValue, editor) => { + setContent(newValue); + }; + + const generateImage = async (overrideFormat = null) => { + if (!content) { + alert('내용을 먼저 입력해주세요.'); + return null; + } + + const currentFormat = overrideFormat || format; + setIsGenerating(true); + + try { + // Revert: PixelRatio is controlled by Optimization (1 or 2) + // Scale is now "Browser Zoom" handled via CSS + const options = { + width: parseInt(width), + pixelRatio: isOptimized ? 1 : 2 + }; + + const tempContainer = document.createElement('div'); + tempContainer.style.position = 'fixed'; + tempContainer.style.top = '0'; + tempContainer.style.left = '0'; + + // Ensure width includes padding if we want 'width' to be the final image width + // But html-to-image takes the element size. + // styling width matches user input. + tempContainer.style.width = `${width}px`; + tempContainer.style.backgroundColor = backgroundColor; + tempContainer.style.zIndex = '-9999'; + tempContainer.style.visibility = 'visible'; + + tempContainer.style.visibility = 'visible'; + + // Dynamic Font Family + const fontStack = `'${fontFamily}', 'Malgun Gothic', 'Dotum', Helvetica, Arial, sans-serif`; + + tempContainer.style.fontFamily = fontStack; + tempContainer.style.fontSize = '14px'; + tempContainer.style.lineHeight = `${lineHeight / 100}`; + + // FIX: Truncation Issues & User Defined Padding + tempContainer.style.paddingTop = `${padding}px`; + tempContainer.style.paddingBottom = `${padding}px`; + tempContainer.style.paddingLeft = `${padding}px`; + tempContainer.style.paddingRight = `${parseInt(padding) + 30}px`; // Extra padding on right as requested + tempContainer.style.boxSizing = 'border-box'; + tempContainer.style.color = '#333'; + + // Inject Global Styles + const styleBlock = document.createElement('style'); + styleBlock.innerHTML = ` + @font-face { + font-family: 'Noto Sans KR'; + src: url('fonts/NotoSansKR-Regular.otf') format('opentype'); + } + * { + font-family: ${fontStack} !important; + box-sizing: border-box !important; /* Critical for layout safety */ + } + body, p, span, div, td, th, li { + color: #000 !important; + background-color: transparent !important; + overflow-wrap: break-word; /* Prevent right-side overflow */ + word-break: break-all; /* Break long words if necessary */ + } + span[style*="color: white"], span[style*="color: #ffffff"], span[style*="color: #FFF"] { + color: #000 !important; + } + /* Table Fixes */ + table { + width: 95% !important; /* Conservative width as requested */ + max-width: 95% !important; /* Never exceed container */ + margin: 0 auto !important; /* Center tables, safe because of max-width */ + table-layout: fixed; /* Helps calculation */ + } + td, th { + border-color: #000 !important; + overflow-wrap: break-word; /* Ensure cell content doesn't overflow */ + } + img { + max-width: 100% !important; + height: auto !important; + } + `; + tempContainer.appendChild(styleBlock); + + const contentWrapper = document.createElement('div'); + contentWrapper.className = 'export-content-wrapper'; + contentWrapper.style.width = `${contentWidth}px`; // Use explicit Content Width + contentWrapper.style.maxWidth = '100%'; + contentWrapper.style.margin = '0 auto'; // Center it + contentWrapper.style.height = 'auto'; + + // Auto-Fit Logic: Scale content to fill container Width + if (isFitToWidth) { + const horizontalPadding = parseInt(padding) * 2 + 30; + const availableWidth = Math.max(0, parseInt(width) - horizontalPadding); + const scale = availableWidth / contentWidth; + contentWrapper.style.zoom = scale; + } + + contentWrapper.innerHTML = content; + + tempContainer.appendChild(contentWrapper); + document.body.appendChild(tempContainer); + + await new Promise(resolve => setTimeout(resolve, 500)); + + const contentHeight = tempContainer.scrollHeight; + tempContainer.style.height = `${contentHeight}px`; + + const captureOptions = { + ...options, + height: contentHeight, + backgroundColor: backgroundColor, + style: { + height: `${contentHeight}px`, + overflow: 'visible', + backgroundColor: backgroundColor + } + }; + + const captureTarget = tempContainer; + let dataUrl; + + if (currentFormat === 'pdf') { + const imgData = await htmlToImage.toPng(captureTarget, captureOptions); + const pdf = new jsPDF({ + orientation: width > contentHeight ? 'landscape' : 'portrait', + unit: 'px', + format: [width, contentHeight] + }); + pdf.addImage(imgData, 'PNG', 0, 0, width, contentHeight); + dataUrl = pdf.output('datauristring'); + } else if (currentFormat === 'html') { + // HTML Export Logic with Data URI Images + + // 1. Convert all images in tempContainer to Data URIs + const images = tempContainer.getElementsByTagName('img'); + for (let img of images) { + try { + // If it's already a data URL, skip + if (img.src.startsWith('data:')) continue; + + if (isOptimized) { + // Optimization: Draw to canvas and compress + const canvas = document.createElement('canvas'); + canvas.width = img.naturalWidth; + canvas.height = img.naturalHeight; + const ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + // Use JPEG quality 0.8 for good balance + img.src = canvas.toDataURL('image/jpeg', 0.8); + } else { + // Original: Fetch blob and convert preserving original + const response = await fetch(img.src); + const blob = await response.blob(); + await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => { + img.src = reader.result; + resolve(); + }; + reader.onerror = reject; + reader.readAsDataURL(blob); + }); + } + } catch (e) { + console.warn('Failed to convert image to Data URI:', img.src, e); + } + // Ensure styles are inline for safety + img.style.maxWidth = '100%'; + img.style.height = 'auto'; + } + + // 2. Wrap in proper HTML structure + const fullHtml = ` + + + + + + + +
+${contentWrapper.innerHTML} +
+ +`; + // 3. Convert string to Base64 Data URL + dataUrl = `data:text/html;base64,${btoa(unescape(encodeURIComponent(fullHtml)))}`; + + } else { + switch (currentFormat) { + case 'jpeg': + dataUrl = await htmlToImage.toJpeg(captureTarget, { ...captureOptions, backgroundColor: backgroundColor }); + break; + case 'webp': + dataUrl = await htmlToImage.toPng(captureTarget, captureOptions); // html-to-image doesn't have toWebp natively in all versions, sticking to Png for now or using Canvas if needed. + // Actually, let's just use Png as fallback as before. + break; + case 'png': + default: + dataUrl = await htmlToImage.toPng(captureTarget, captureOptions); + break; + } + } + + document.body.removeChild(tempContainer); + return dataUrl; + + } catch (error) { + console.error('Generation failed:', error); + alert('생성에 실패했습니다. 콘솔을 확인해주세요.'); + return null; + } finally { + setIsGenerating(false); + } + }; + + const handlePreview = async () => { + setZoom(1); + // Always use PNG for the preview display itself + const url = await generateImage(); + if (url) { + setPreviewUrl(url); + } + }; + + const handleSaveFormat = async (targetFormat) => { + setIsGenerating(true); + try { + // We temporarily pass the target format to generateImage + // Since generateImage uses the 'format' state, we could either update state or modify the function. + // Let's modify generateImage slightly to accept an optional format override. + const url = await generateImage(targetFormat); + if (url) { + if (window.electronAPI) { + const result = await window.electronAPI.saveImage(url, targetFormat); + if (result.success) { + alert(`저장되었습니다: ${result.filePath}`); + } else if (result.message !== 'Cancelled') { + alert(`오류: ${result.message}`); + } + } else { + alert('Electron API를 찾을 수 없습니다.'); + } + } + } finally { + setIsGenerating(false); + } + }; + + const handleClosePreview = () => { + setPreviewUrl(null); + setZoom(1); + }; + + const handleWheel = (e) => { + // Only Zoom if CTRL is pressed + if (e.ctrlKey) { + e.preventDefault(); + const delta = e.deltaY * -0.001; + setZoom(prev => Math.min(Math.max(0.1, prev + delta), 5)); + } + // Otherwise Native Scroll happens automatically due to overflow: auto in CSS + }; + + const handleSaveFromPreview = async () => { + if (!previewUrl) return; + + if (window.electronAPI) { + const result = await window.electronAPI.saveImage(previewUrl, format); + if (result.success) { + alert(`저장되었습니다: ${result.filePath}`); + } else if (result.message !== 'Cancelled') { + alert(`오류: ${result.message}`); + } + } else { + console.log('Exported Data URL (truncated):', previewUrl.slice(0, 50) + '...'); + alert('Electron API를 찾을 수 없습니다. 콘솔에서 Data URL을 확인하세요.'); + } + }; + + return ( +
+
+
+ 레이아웃 + + + + +
+ +
+ 스타일 + + +
+ +
+ 저장 옵션 + +
+ +
+ + +
+
+ +
+
+ editorRef.current = editor} + initialValue={content} // Use initialValue instead of value for IME + onEditorChange={handleEditorChange} + init={{ + height: '100%', + width: '100%', + menubar: true, + plugins: [ + 'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', + 'preview', 'anchor', 'searchreplace', 'visualblocks', 'code', + 'fullscreen', 'insertdatetime', 'media', 'table', 'help', 'wordcount' + ], + toolbar: 'undo redo | blocks | ' + + 'fontfamily fontsize | ' + + 'bold italic forecolor | alignleft aligncenter ' + + 'alignright alignjustify | bullist numlist outdent indent | ' + + 'removeformat | table | image | help', + content_style: ` + @font-face { + font-family: 'Noto Sans KR'; + src: url('fonts/NotoSansKR-Regular.otf') format('opentype'); + } + /* Force text color to avoid 'White on White' from Word paste */ + body { + font-family: '${fontFamily}', 'Noto Sans KR', 'Malgun Gothic', 'Dotum', Helvetica, Arial, sans-serif; + font-size: 14px; + color: #333 !important; + background-color: #fff !important; + } + /* Ensure spans from Word don't hide text if they are white */ + span[style*="color: white"], span[style*="color: #ffffff"], span[style*="color: #FFF"] { + color: #333 !important; + background-color: #eee; /* Highlight originally white text slightly */ + } + `, + font_formats: 'Noto Sans KR=Noto Sans KR;Malgun Gothic=Malgun Gothic;Dotum=Dotum;Gulim=Gulim;Batang=Batang;Arial=arial,helvetica,sans-serif;', + branding: false, + promotion: false, + license_key: 'gpl', + skin_url: 'tinymce/skins/ui/oxide', + }} + /> +
+
+ +

+ 저장하기 전에 "미리보기 및 내보내기"를 클릭하여 이미지를 확인하세요. +

+ + {/* Loading Overlay */} + {isGenerating && ( +
+
+
+

이미지 생성 중...

+
+
+ )} + + {/* Preview Modal */} + {previewUrl && ( +
+
+
+
+

이미지 미리보기

+ +
+
+ + + + + + +
+
+
+
+ Preview +
+
+
+
+ )} + {/* Status Bar */} +
+
Window: {windowSize.width} x {windowSize.height}
+
Editor: {Math.round(editorSize.width)} x {Math.round(editorSize.height)}
+
Zoom: {Math.round(zoom * 100)}%
+
+
+ ); +} + +export default App; diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..e96bbf5 --- /dev/null +++ b/src/index.css @@ -0,0 +1,77 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light; + color: #213547; + background-color: #ffffff; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} + +a:hover { + color: #535bf2; +} + +body { + margin: 0; + min-width: 320px; + min-height: 100vh; + width: 100%; +} + +#root { + width: 100%; + height: 100%; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} + +button:hover { + border-color: #646cff; +} + +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + + a:hover { + color: #747bff; + } + + button { + background-color: #f9f9f9; + } +} \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..9d3b33b --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,11 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' + +import App from './App.jsx' + +createRoot(document.getElementById('root')).render( + + + , +) diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..d8e8e30 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + base: './', // Ensure relative paths for Electron +})