diff --git a/.env.example b/.env.example index 172aa19..18b2fb4 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ PULSE_SIGNAGE_IMAGE=git.lzstealth.com/lzstealth/pulse-signage:latest -PULSE_SIGNAGE_SHARED_SECRET=9f4c2d8b7a1e4c0f8b2d6a9e1c7f3b5d4a8e6c1f0b9d7a3c5e2f1a6b8d4c0e7 +PULSE_SIGNAGE_SHARED_SECRET= DB_HOST=mysql DB_PORT=3306 @@ -8,11 +8,10 @@ DB_USER=pulse-signage DB_PASSWORD=signage_password MYSQL_ROOT_PASSWORD=root_password -PLAYER_INTERNAL_BASE_URL=http://player:8081 PLAYER_PUBLIC_BASE_URL=http://localhost:8081 +PLAYER_INTERNAL_BASE_URL=http://player:8081 SESSION_MAX_AGE_DAYS=14 -DASHBOARD_REFRESH_INTERVAL_MS=2000 DEFAULT_ADMIN_USERNAME=admin DEFAULT_ADMIN_NAME=Admin DEFAULT_ADMIN_PASSWORD=admin diff --git a/.gitea/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml similarity index 100% rename from .gitea/ISSUE_TEMPLATE/bug_report.yml rename to .github/ISSUE_TEMPLATE/bug_report.yml diff --git a/.gitea/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from .gitea/ISSUE_TEMPLATE/config.yml rename to .github/ISSUE_TEMPLATE/config.yml diff --git a/.gitea/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml similarity index 100% rename from .gitea/ISSUE_TEMPLATE/feature_request.yml rename to .github/ISSUE_TEMPLATE/feature_request.yml diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..387e36a --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,14 @@ +# Repository Instructions + +## Versioning and releases + +- Treat `package.json` as the source of truth for the application version. +- When the app version changes, update `CHANGELOG.md` in the same change. +- Keep database migration versions aligned with the release they actually belong to. +- If only part of a migration batch belongs to a newer release, split that batch into a separate migration entry instead of relabeling the earlier release. +- Do not bump migration versions just because the app version changed. + +## Before finishing a versioned change + +- Confirm the package version, changelog entry, and migration tags are consistent. +- If a release note mentions a feature or fix, make sure the matching code path or migration block is tagged to the same release. \ No newline at end of file diff --git a/.gitea/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml similarity index 100% rename from .gitea/workflows/docker-publish.yml rename to .github/workflows/docker-publish.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c9f62c..3e2a385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,66 @@ All notable changes to this project will be documented in this file. +## 2.2.0 - 2026-08-01 + +### Added + +- Announcement management is now wired for the admin UI and player overlay, with color, template, and expiry controls. +- Time / Date regions now render live in the editor and player. + +### Changed + +- Announcement lists now default-sort by Description and show the affected screens for each announcement. +- Role add and edit pages now include a Cancel action alongside the save buttons. +- Announcement publishing now only targets explicitly assigned screens; unassigned announcements no longer publish globally. + +### Fixed + +- Announcement screen labels now correctly distinguish No Screens, partial assignments, and All Screens. +- Role duplicate-name validation on edit now checks the correct RBAC table. + +## 2.1.1 - 2026-08-01 + +### Added + +- API source latest-response viewing now supports collapsing and expanding all JSON sections from the edit page. +- Placeholder transforms now support basic string helpers like `.upper()`, `.title()`, and `.lower()`. + +### Changed + +- The API source add page now matches the edit page’s section titles and layout more closely. +- API source placeholder suggestions now stay leaf-only, so container paths and arrays are no longer suggested as placeholders. +- Slide editor and player placeholder resolution now share the same parsing and transform logic. +- API source and RSS editor helper text now shows the new placeholder transform syntax. +- API sources, RSS feeds, slides, users, and roles now render their delete actions in a disabled outlined-danger state when deletion is blocked, matching the rest of the admin tables. +- The users edit page no longer wraps all sections in one outer card, so the profile, password, and roles cards render as separate sections. + +### Fixed + +- API source item-path overrides continue to treat the final path as an array source, while nested object fields remain available for placeholders. +- The API source latest-response panel now opens as a tree view by default instead of a flat JSON blob. + +## 2.1.0 - 2026-07-30 + +### Added + +- Screen and dashboard player links now render the full player URL instead of only the player base host. + +### Changed + +- The player registry now uses a singleton `d_players` row and `d_screens.player_id` points at that shared player record. +- Player startup is now responsible for creating the shared player record, while onboarding and state polling no longer create extra player rows. +- The screen/player binding path was simplified so opening a screen binds it to the shared player record without trying to re-register the player. +- Added notes near the singleton-player code paths to make the future multi-player migration work easier to revisit. +- Managed fonts now have dedicated editor/player sync handling, including a scheduled font sweep, sorted font-family lists, the TinyMCE fullscreen button, and shared font stylesheet loading in the WYSIWYG editor. +- Text and RSS region types now own their own default style and fallback behavior instead of relying on shared slide helper fallbacks. +- Image and video region handling was also pushed further into modular per-type modules, keeping their editor, preview, and player logic closer to the region itself instead of the shared slide helper layer. + +### Fixed + +- Removed several onboarding and runtime code paths that were still inserting or refreshing `d_players` rows during normal player playback. +- Fixed the screen-binding flow so it no longer writes a device UUID into `d_screens.player_id`, which avoided foreign key errors under the shared-player model. + ## 2.0.0 - 2026-07-28 ### Breaking Changes diff --git a/README.md b/README.md index 1029083..efba43c 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,6 @@ The app reads its settings from environment variables. The list below matches th ### Web App - `SESSION_MAX_AGE_DAYS` - admin session lifetime in days, default `14` -- `DASHBOARD_REFRESH_INTERVAL_MS` - dashboard refresh interval in milliseconds, default `2000` - `DEFAULT_ADMIN_USERNAME` - username used for the initial admin account, default `admin` - `DEFAULT_ADMIN_NAME` - display name used for the initial admin account, default `Admin` - `DEFAULT_ADMIN_PASSWORD` - password used for the initial admin account, default `admin` diff --git a/docker-compose.yml b/docker-compose.yml index 50ad355..e4146d6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,8 +11,6 @@ services: DB_NAME: ${DB_NAME:-signage} DB_USER: ${DB_USER:-signage_user} DB_PASSWORD: ${DB_PASSWORD:-signage_password} - PLAYER_INTERNAL_BASE_URL: ${PLAYER_INTERNAL_BASE_URL:-http://player:3001} - PLAYER_PUBLIC_BASE_URL: ${PLAYER_PUBLIC_BASE_URL:-http://localhost:3001} PULSE_SIGNAGE_SHARED_SECRET: ${PULSE_SIGNAGE_SHARED_SECRET:-} SESSION_MAX_AGE_DAYS: ${SESSION_MAX_AGE_DAYS:-14} DASHBOARD_REFRESH_INTERVAL_MS: ${DASHBOARD_REFRESH_INTERVAL_MS:-2000} diff --git a/docs/schema.md b/docs/schema.md index 30e644c..cd7ec33 100644 --- a/docs/schema.md +++ b/docs/schema.md @@ -47,7 +47,7 @@ Primary keys are `id` unless noted otherwise. Timestamps are stored as `created_ ### `a_sessions` -- `session_hash`, `user_id`, `expires_at`, `created_at`, `created_by`, `modified_at`, `modified_by` +- `session_hash`, `user_id`, `expires_at`, `created_at`, `created_by`, `last_used_at`, `modified_by` - `session_hash` is the primary key. - Foreign key: - `user_id` -> `a_users.id` @@ -94,6 +94,17 @@ Primary keys are `id` unless noted otherwise. Timestamps are stored as `created_ - Foreign keys: - `playlist_id` -> `c_playlists.id` with `ON DELETE CASCADE` - `slide_id` -> `c_slides.id` with `ON DELETE CASCADE` + +## Devices + +- `d_players` - player registry and connection metadata. +- `d_screens` - screen records and playlist/player assignment. +- `d_onboarding_devices` - device-to-screen bindings and onboarded client names. + +### `d_players` + +- `device_id`, `public_base_url`, `internal_base_url`, `last_seen_at`, `created_at`, `modified_at` +- `device_id` is the primary key. ### `d_screens` @@ -101,11 +112,9 @@ Primary keys are `id` unless noted otherwise. Timestamps are stored as `created_ - `slug` is unique. - Foreign keys: - `playlist_id` -> `c_playlists.id` with `ON DELETE SET NULL` - - `player_id` -> `d_players.id` with `ON DELETE SET NULL` + - `player_id` -> `d_players.id` with `ON DELETE RESTRICT` -## Onboarding - -- `d_onboarding_devices` - device-to-screen bindings and onboarded client names. +- `player_id` is required and defaults to `'1'` for the current singleton-player model. ### `d_onboarding_devices` @@ -114,6 +123,10 @@ Primary keys are `id` unless noted otherwise. Timestamps are stored as `created_ - Foreign key: - `screen_id` -> `d_screens.id` with `ON DELETE SET NULL` +## Onboarding + +- The onboarding flow uses `d_onboarding_devices` to bind a device to a screen and persist the client name. + ## Integrations - `i_rss_feeds` - RSS feed definitions and refresh cadence. @@ -134,7 +147,7 @@ Primary keys are `id` unless noted otherwise. Timestamps are stored as `created_ ### `i_api_sources` -- `id`, `name`, `api_url`, `update_interval_value`, `update_interval_unit`, `last_pulled_at`, `last_pull_error`, `last_response_status`, `last_response_content_type`, `last_response_json`, `created_at`, `created_by`, `modified_at`, `modified_by` +- `id`, `name`, `api_url`, `auth_method`, `auth_username`, `auth_password`, `auth_bearer_token`, `auth_header_name`, `auth_header_value`, `items_path`, `update_interval_value`, `update_interval_unit`, `last_pulled_at`, `last_pull_error`, `last_response_status`, `last_response_content_type`, `last_response_json`, `created_at`, `created_by`, `modified_at`, `modified_by` ## Operations diff --git a/docs/websocket.md b/docs/websocket.md index 4d0bb07..682f484 100644 --- a/docs/websocket.md +++ b/docs/websocket.md @@ -24,6 +24,13 @@ This is the server-to-dashboard snapshot stream for live player connection state Access: internal-only. The web backend subscribes with signed request headers; browsers should not connect directly. +### `GET /ws/screens/{slug}/announcements` +Player announcement channel. + +This is the server-to-player push channel used to wake the player when an announcement changes. The browser player reconnects automatically and refreshes its announcement state when it receives an `announcement-refresh` message. + +Access: the player page must include a valid `auth` query parameter signed with the shared secret. + ## Player Control Channel ### Messages from player to server @@ -113,6 +120,26 @@ Moves to the next slide. Updates the client name associated with the player session and onboarding record. The command payload should include `clientName` and may include `deviceId` when the caller is updating a specific onboarding binding. +## Announcement Channel + +### Messages from server to player + +The server sends a lightweight refresh notification. + +#### `announcement-refresh` + +Example payload: + +```json +{ + "type": "announcement-refresh", + "slug": "demo", + "sentAt": "2026-08-01T12:00:00.000Z" +} +``` + +When the player receives this message, it refetches the current announcement state over HTTP. + ## Snapshot Channel ### Messages from server to client diff --git a/package-lock.json b/package-lock.json index e17e279..dc59762 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "pulse-signage", - "version": "2.0.0", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index b19c4f2..921e9ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pulse-signage", - "version": "2.0.0", + "version": "2.2.0", "private": false, "description": "Pulse Signage application with MySQL and media storage", "repository": { diff --git a/src/auth.js b/src/auth.js index 1b53a10..882689a 100644 --- a/src/auth.js +++ b/src/auth.js @@ -1,3 +1,5 @@ +// Password hashing and session token helpers. + const crypto = require('crypto'); const PASSWORD_ITERATIONS = Number(process.env.PASSWORD_HASH_ITERATIONS || 310000); diff --git a/src/common.js b/src/common.js index 9c2af50..f53fd6d 100644 --- a/src/common.js +++ b/src/common.js @@ -1,20 +1,32 @@ -const dbCommon = require('./db/common'); -const db = require('./db'); -const dbBootstrap = require('./db/bootstrap'); -const data = require('./data'); -const player = require('./player/render'); +// Module-resolution shims for the app's `#root` and `#src` aliases. -function getSearchQuery(req) { - return String(req && req.query && req.query.search || '').trim(); -} +const Module = require('module'); +const path = require('path'); -function getSortQuery(req) { - return String(req && req.query && req.query.sort || '').trim(); -} +const rootDir = path.resolve(__dirname, '..'); +const srcDir = __dirname; +const resolveFilename = Module._resolveFilename; -function getSortDirectionQuery(req) { - return String(req && req.query && req.query.direction || '').trim().toLowerCase() === 'desc' ? 'desc' : 'asc'; -} +Module._resolveFilename = function (request, parent, isMain, options) { + if (request === '#root') { + request = rootDir; + } else if (request.startsWith('#root/')) { + request = path.join(rootDir, request.slice('#root/'.length)); + } else if (request === '#src') { + request = srcDir; + } else if (request.startsWith('#src/')) { + request = path.join(srcDir, request.slice('#src/'.length)); + } + + return resolveFilename.call(this, request, parent, isMain, options); +}; + +const dbCommon = require('#src/db/common'); +const db = require('#src/db'); +const dbBootstrap = require('#src/db/bootstrap'); +const data = require('#src/data'); +const player = require('#src/player/render'); +const listQuery = require('#src/web/lib/list-query'); module.exports = { createPool: dbCommon.createPool, @@ -30,9 +42,22 @@ module.exports = { fetchTemplatesPage: data.fetchTemplatesPage, fetchCanvasSizesPage: data.fetchCanvasSizesPage, fetchScreensPage: data.fetchScreensPage, - getSearchQuery: getSearchQuery, - getSortQuery: getSortQuery, - getSortDirectionQuery: getSortDirectionQuery, + ANNOUNCEMENT_TYPES: data.ANNOUNCEMENT_TYPES, + ANNOUNCEMENT_COLORS: data.ANNOUNCEMENT_COLORS, + ANNOUNCEMENT_ICONS: data.ANNOUNCEMENT_ICONS, + ANNOUNCEMENT_ICON_OPTIONS: data.ANNOUNCEMENT_ICON_OPTIONS, + ANNOUNCEMENT_ICON_LABELS: data.ANNOUNCEMENT_ICON_LABELS, + DEFAULT_ANNOUNCEMENT_ICON: data.DEFAULT_ANNOUNCEMENT_ICON, + normalizeAnnouncementType: data.normalizeAnnouncementType, + normalizeAnnouncementColor: data.normalizeAnnouncementColor, + normalizeAnnouncementIcon: data.normalizeAnnouncementIcon, + fetchAnnouncementsPage: data.fetchAnnouncementsPage, + fetchAnnouncementById: data.fetchAnnouncementById, + fetchActiveAnnouncement: data.fetchActiveAnnouncement, + buildAnnouncementPayload: data.buildAnnouncementPayload, + getSearchQuery: listQuery.getSearchQuery, + getSortQuery: listQuery.getSortQuery, + getSortDirectionQuery: listQuery.getSortDirectionQuery, fetchPlaylistById: data.fetchPlaylistById, fetchApiSourcesData: data.fetchApiSourcesData, fetchApiSourcesPage: data.fetchApiSourcesPage, @@ -49,6 +74,8 @@ module.exports = { replaceRssFeedItems: data.replaceRssFeedItems, fetchScreenById: data.fetchScreenById, fetchScreenEditData: data.fetchScreenEditData, + fetchScreenPlayerUrls: data.fetchScreenPlayerUrls, + fetchScreenPlayerRecord: data.fetchScreenPlayerRecord, fetchTemplateById: data.fetchTemplateById, fetchSlideById: data.fetchSlideById, fetchTemplatesData: data.fetchTemplatesData, diff --git a/src/data/admin.js b/src/data/admin.js index 422e10e..83ea93d 100644 --- a/src/data/admin.js +++ b/src/data/admin.js @@ -1,3 +1,5 @@ +// Admin data aggregation helpers for dashboards, playlists, slides, templates, and screens. + const { fetchPagedRows } = require('./utils'); async function fetchAdminData(pool) { @@ -10,7 +12,7 @@ async function fetchAdminData(pool) { LEFT JOIN c_canvas_sizes cs ON cs.id = st.canvas_size_id ORDER BY st.id DESC `); - const [templateRegions] = await pool.query('SELECT id, template_id, region_key, region_type, label, font_family, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions ORDER BY template_id ASC, z_index ASC, id ASC'); + const [templateRegions] = await pool.query('SELECT id, template_id, region_key, region_type, label, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions ORDER BY template_id ASC, z_index ASC, id ASC'); const [slides] = await pool.query(` SELECT s.id, s.title, s.template_id, s.content_json, s.thumbnail_path, s.created_at, s.modified_at, s.created_by, s.modified_by, st.name AS template_name, cs.width AS canvas_width, cs.height AS canvas_height, (SELECT COUNT(DISTINCT ps.playlist_id) FROM c_playlist_slides ps WHERE ps.slide_id = s.id) AS playlist_count @@ -39,7 +41,8 @@ async function fetchAdminData(pool) { async function fetchPlaylistsPage(pool, page, pageSize, searchTerm, sortKey, sortDirection) { const paged = await fetchPagedRows(pool, { selectSql: `SELECT p.id, p.name, p.fade_between_slides, p.skip_unavailable_rtmp, p.created_at, p.modified_at, p.created_by, p.modified_by, - (SELECT COUNT(*) FROM c_playlist_slides ps WHERE ps.playlist_id = p.id) AS slide_count + (SELECT COUNT(*) FROM c_playlist_slides ps WHERE ps.playlist_id = p.id) AS slide_count, + (SELECT COUNT(*) FROM d_screens s WHERE s.playlist_id = p.id) AS screen_count FROM c_playlists p ORDER BY p.id DESC`, countSql: 'SELECT COUNT(*) AS count FROM c_playlists', diff --git a/src/data/announcement-icons.js b/src/data/announcement-icons.js new file mode 100644 index 0000000..0801d1d --- /dev/null +++ b/src/data/announcement-icons.js @@ -0,0 +1,74 @@ +const ANNOUNCEMENT_ICON_OPTIONS = [ + { value: 'megaphone-fill', label: 'Megaphone' }, + { value: 'megaphone', label: 'Megaphone outline' }, + { value: 'bell-fill', label: 'Bell' }, + { value: 'bell', label: 'Bell outline' }, + { value: 'exclamation-triangle-fill', label: 'Warning' }, + { value: 'exclamation-triangle', label: 'Warning outline' }, + { value: 'info-circle-fill', label: 'Info' }, + { value: 'info-circle', label: 'Info outline' }, + { value: 'check-circle-fill', label: 'Success' }, + { value: 'check-circle', label: 'Success outline' }, + { value: 'lightbulb-fill', label: 'Idea' }, + { value: 'lightbulb', label: 'Idea outline' }, + { value: 'calendar-event-fill', label: 'Calendar' }, + { value: 'calendar-event', label: 'Calendar outline' }, + { value: 'clock-fill', label: 'Clock' }, + { value: 'clock', label: 'Clock outline' }, + { value: 'wifi-off', label: 'Wi-Fi Offline' }, + { value: 'wifi', label: 'Wi-Fi' }, + { value: 'hdd-network', label: 'Network' }, + { value: 'hdd-network-fill', label: 'Network fill' }, + { value: 'speaker-fill', label: 'Speaker' }, + { value: 'speaker', label: 'Speaker outline' }, + { value: 'shield-fill', label: 'Shield' }, + { value: 'shield', label: 'Shield outline' }, + { value: 'collection-play-fill', label: 'Playlist' }, + { value: 'collection-play', label: 'Playlist outline' }, + { value: 'broadcast', label: 'Broadcast' }, + { value: 'broadcast-pin', label: 'Broadcast pin' }, + { value: 'plug-fill', label: 'Plug' }, + { value: 'plug', label: 'Plug outline' }, + { value: 'lightning-charge-fill', label: 'Urgent' }, + { value: 'lightning-charge', label: 'Urgent outline' }, + { value: 'car-front-fill', label: 'Car Front' }, + { value: 'car-front', label: 'Car Front outline' }, + { value: 'lamp-fill', label: 'Lamp' }, + { value: 'lamp', label: 'Lamp outline' }, + { value: 'envelope-fill', label: 'Message' }, + { value: 'envelope', label: 'Message outline' }, + { value: 'people-fill', label: 'Audience' }, + { value: 'people', label: 'Audience outline' }, + { value: 'browser-chrome', label: 'Browser Chrome' }, + { value: 'browser-edge', label: 'Browser Edge' }, + { value: 'browser-firefox', label: 'Browser Firefox' }, + { value: 'browser-safari', label: 'Browser Safari' }, + { value: 'cone', label: 'Cone' }, + { value: 'cone-striped', label: 'Cone striped' }, + { value: 'cup-straw', label: 'Cup straw' }, + { value: 'fire', label: 'Fire' } +]; + +const ANNOUNCEMENT_ICON_KEYS = ANNOUNCEMENT_ICON_OPTIONS.map(function (option) { + return option.value; +}); + +const ANNOUNCEMENT_ICON_LABELS = ANNOUNCEMENT_ICON_OPTIONS.reduce(function (labels, option) { + labels[option.value] = option.label; + return labels; +}, Object.create(null)); + +const DEFAULT_ANNOUNCEMENT_ICON = 'megaphone-fill'; + +function normalizeAnnouncementIcon(value) { + const normalized = String(value || '').trim().toLowerCase(); + return ANNOUNCEMENT_ICON_KEYS.includes(normalized) ? normalized : DEFAULT_ANNOUNCEMENT_ICON; +} + +module.exports = { + ANNOUNCEMENT_ICON_OPTIONS, + ANNOUNCEMENT_ICON_KEYS, + ANNOUNCEMENT_ICON_LABELS, + DEFAULT_ANNOUNCEMENT_ICON, + normalizeAnnouncementIcon +}; \ No newline at end of file diff --git a/src/data/announcements.js b/src/data/announcements.js new file mode 100644 index 0000000..786b362 --- /dev/null +++ b/src/data/announcements.js @@ -0,0 +1,189 @@ +// Announcement data access helpers. + +const { fetchPagedRows } = require('./utils'); +const { + ANNOUNCEMENT_ICON_KEYS, + DEFAULT_ANNOUNCEMENT_ICON, + normalizeAnnouncementIcon: normalizeAnnouncementIconFromConfig +} = require('./announcement-icons'); + +const ANNOUNCEMENT_TYPES = ['lower-third', 'fullscreen', 'top-banner']; +const ANNOUNCEMENT_COLORS = ['primary', 'secondary', 'success', 'info', 'warning', 'danger', 'dark', 'light']; + +function normalizeAnnouncementType(value) { + const normalized = String(value || '').trim().toLowerCase(); + if (normalized === 'center-card') { + return 'fullscreen'; + } + return ANNOUNCEMENT_TYPES.includes(normalized) ? normalized : 'lower-third'; +} + +function normalizeAnnouncementColor(value) { + const normalized = String(value || '').trim().toLowerCase(); + return ANNOUNCEMENT_COLORS.includes(normalized) ? normalized : 'primary'; +} + +function normalizeAnnouncementMessage(value) { + return String(value || '').replace(/\r\n/g, '\n').trim(); +} + +function normalizeAnnouncementShortLabel(value) { + return String(value || '').replace(/\r\n/g, ' ').trim(); +} + +function normalizeAnnouncementDurationSeconds(value) { + const seconds = Math.max(0, Math.round(Number(value) || 0)); + return seconds > 0 ? seconds : null; +} + +function normalizeAnnouncementScreenIds(value) { + if (Array.isArray(value)) { + return value.map(function (screenId) { + return Number(screenId) || 0; + }).filter(function (screenId) { + return screenId > 0; + }); + } + + return String(value || '') + .split(',') + .map(function (screenId) { + return Number(screenId) || 0; + }) + .filter(function (screenId) { + return screenId > 0; + }); +} + +function buildAnnouncementPayload(input) { + const message = normalizeAnnouncementMessage(input && input.message); + const shortLabel = normalizeAnnouncementShortLabel(input && input.short_label); + const announcementType = normalizeAnnouncementType(input && input.announcement_type); + const colorKey = normalizeAnnouncementColor(input && input.color_key); + const iconKey = normalizeAnnouncementIconFromConfig(input && input.icon_key); + const durationSeconds = normalizeAnnouncementDurationSeconds(input && input.duration_seconds); + + return { + message, + shortLabel, + announcementType, + colorKey, + iconKey, + durationSeconds, + expiresAt: durationSeconds ? new Date(Date.now() + (durationSeconds * 1000)) : null + }; +} + +function normalizeAnnouncementRow(row) { + if (!row) { + return null; + } + + return { + id: Number(row.id) || null, + message: normalizeAnnouncementMessage(row.message), + short_label: normalizeAnnouncementShortLabel(row.short_label), + announcement_type: normalizeAnnouncementType(row.announcement_type), + color_key: normalizeAnnouncementColor(row.color_key), + icon_key: normalizeAnnouncementIconFromConfig(row.icon_key), + duration_seconds: row.duration_seconds === null || row.duration_seconds === undefined + ? null + : Math.max(0, Math.round(Number(row.duration_seconds) || 0)), + expires_at: row.expires_at || null, + screen_target_count: row.screen_target_count === null || row.screen_target_count === undefined + ? null + : Math.max(0, Math.round(Number(row.screen_target_count) || 0)), + total_screen_count: row.total_screen_count === null || row.total_screen_count === undefined + ? null + : Math.max(0, Math.round(Number(row.total_screen_count) || 0)), + screen_targets_label: String(row.screen_targets_label || '').trim(), + screen_ids: normalizeAnnouncementScreenIds(row.screen_ids), + created_at: row.created_at || null, + modified_at: row.modified_at || null, + created_by: row.created_by || null, + modified_by: row.modified_by || null + }; +} + +async function fetchAnnouncementById(pool, id) { + const [rows] = await pool.query(` + SELECT a.id, a.message, a.short_label, a.announcement_type, a.color_key, a.icon_key, a.duration_seconds, a.expires_at, a.created_at, a.modified_at, a.created_by, a.modified_by, + GROUP_CONCAT(DISTINCT aas.screen_id ORDER BY aas.screen_id SEPARATOR ',') AS screen_ids + FROM d_announcements a + LEFT JOIN d_announcement_screens aas ON aas.announcement_id = a.id + WHERE a.id = ? + GROUP BY a.id + `, [id]); + return normalizeAnnouncementRow(rows[0] || null); +} + +async function fetchAnnouncementsPage(pool, page, pageSize, searchTerm, sortKey, sortDirection) { + const paged = await fetchPagedRows(pool, { + selectSql: `SELECT a.id, a.message, a.short_label, a.announcement_type, a.color_key, a.icon_key, a.duration_seconds, a.expires_at, a.created_at, a.modified_at, a.created_by, a.modified_by, + COUNT(DISTINCT aas.screen_id) AS screen_target_count, + (SELECT COUNT(*) FROM d_screens) AS total_screen_count, + COALESCE( + GROUP_CONCAT(DISTINCT COALESCE(NULLIF(TRIM(s.name), ''), s.slug) ORDER BY COALESCE(NULLIF(TRIM(s.name), ''), s.slug) SEPARATOR ', '), + '' + ) AS screen_targets_label + FROM d_announcements a + LEFT JOIN d_announcement_screens aas ON aas.announcement_id = a.id + LEFT JOIN d_screens s ON s.id = aas.screen_id + GROUP BY a.id`, + countSql: 'SELECT COUNT(*) AS count FROM d_announcements', + searchColumns: ['message', 'short_label', 'announcement_type', 'color_key'], + searchTerm: searchTerm, + sortColumns: { + description: 'short_label', + message: 'message', + type: 'announcement_type', + color: 'color_key', + status: 'expires_at', + expires: 'expires_at', + created: 'created_at', + modified: 'modified_at' + }, + sortKey: sortKey, + sortDirection: sortDirection, + page: page, + pageSize: pageSize + }); + + return Object.assign({ announcements: (paged.rows || []).map(normalizeAnnouncementRow) }, paged); +} + +async function fetchActiveAnnouncement(pool, screenSlug) { + const [rows] = await pool.query(` + SELECT a.id, a.message, a.short_label, a.announcement_type, a.color_key, a.icon_key, a.duration_seconds, a.expires_at, a.created_at, a.modified_at, a.created_by, a.modified_by, + GROUP_CONCAT(DISTINCT aas.screen_id ORDER BY aas.screen_id SEPARATOR ',') AS screen_ids + FROM d_announcements a + LEFT JOIN d_announcement_screens aas ON aas.announcement_id = a.id + WHERE (a.expires_at IS NULL OR a.expires_at > CURRENT_TIMESTAMP) + AND EXISTS ( + SELECT 1 + FROM d_announcement_screens restriction + JOIN d_screens screen ON screen.id = restriction.screen_id + WHERE restriction.announcement_id = a.id + AND screen.slug = ? + ) + GROUP BY a.id + ORDER BY a.modified_at DESC, a.created_at DESC, a.id DESC + LIMIT 1 + `, [screenSlug]); + return normalizeAnnouncementRow(rows[0] || null); +} + +module.exports = { + ANNOUNCEMENT_TYPES, + ANNOUNCEMENT_COLORS, + ANNOUNCEMENT_ICONS: ANNOUNCEMENT_ICON_KEYS, + DEFAULT_ANNOUNCEMENT_ICON, + normalizeAnnouncementType, + normalizeAnnouncementColor, + normalizeAnnouncementIcon: normalizeAnnouncementIconFromConfig, + normalizeAnnouncementShortLabel, + buildAnnouncementPayload, + fetchAnnouncementById, + fetchAnnouncementsPage, + fetchActiveAnnouncement +}; \ No newline at end of file diff --git a/src/data/api-sources.js b/src/data/api-sources.js index 747a9fe..1c05237 100644 --- a/src/data/api-sources.js +++ b/src/data/api-sources.js @@ -1,3 +1,5 @@ +// API source data access, pagination, and remote fetch helpers. + const http = require('http'); const https = require('https'); const { fetchPagedRows } = require('./utils'); @@ -7,9 +9,44 @@ function normalizeUpdateIntervalUnit(value) { return unit === 'seconds' ? 'seconds' : 'minutes'; } +function normalizeAuthMethod(value) { + const method = String(value || '').trim().toLowerCase(); + return ['basic', 'bearer', 'api_key_header'].includes(method) ? method : 'none'; +} + +function getItemsPath(source) { + return String(source && (source.items_path || source.itemsPath) || '').trim(); +} + +function buildAuthHeaders(source) { + const method = normalizeAuthMethod(source && (source.auth_method || source.authMethod)); + const headers = {}; + + if (method === 'basic') { + const username = String(source && (source.auth_username || source.authUsername) || '').trim(); + const password = String(source && (source.auth_password || source.authPassword) || ''); + if (username || password) { + headers.Authorization = 'Basic ' + Buffer.from(username + ':' + password, 'utf8').toString('base64'); + } + } else if (method === 'bearer') { + const token = String(source && (source.auth_bearer_token || source.authBearerToken) || '').trim(); + if (token) { + headers.Authorization = 'Bearer ' + token; + } + } else if (method === 'api_key_header') { + const headerName = String(source && (source.auth_header_name || source.authHeaderName) || 'X-API-Key').trim() || 'X-API-Key'; + const headerValue = String(source && (source.auth_header_value || source.authHeaderValue) || '').trim(); + if (headerValue) { + headers[headerName] = headerValue; + } + } + + return headers; +} + async function fetchApiSourcesData(pool) { const [apiSources] = await pool.query( - 'SELECT id, name, api_url, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources ORDER BY modified_at DESC, id DESC' + 'SELECT id, name, api_url, auth_method, auth_username, auth_password, auth_bearer_token, auth_header_name, auth_header_value, items_path, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources ORDER BY modified_at DESC, id DESC' ); return { apiSources: apiSources }; @@ -17,7 +54,7 @@ async function fetchApiSourcesData(pool) { async function fetchApiSourcesPage(pool, page, pageSize, searchTerm, sortKey, sortDirection) { const paged = await fetchPagedRows(pool, { - selectSql: 'SELECT id, name, api_url, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources ORDER BY modified_at DESC, id DESC', + selectSql: 'SELECT id, name, api_url, auth_method, auth_username, auth_password, auth_bearer_token, auth_header_name, auth_header_value, items_path, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources ORDER BY modified_at DESC, id DESC', countSql: 'SELECT COUNT(*) AS count FROM i_api_sources', searchColumns: ['name', 'api_url', 'last_pull_error'], searchTerm: searchTerm, @@ -41,20 +78,21 @@ async function fetchApiSourcesPage(pool, page, pageSize, searchTerm, sortKey, so async function fetchApiSourceById(pool, id) { const [rows] = await pool.query( - 'SELECT id, name, api_url, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources WHERE id = ?', + 'SELECT id, name, api_url, auth_method, auth_username, auth_password, auth_bearer_token, auth_header_name, auth_header_value, items_path, update_interval_value, update_interval_unit, last_pulled_at, last_pull_error, last_response_status, last_response_content_type, last_response_json, created_at, modified_at, created_by, modified_by FROM i_api_sources WHERE id = ?', [id] ); return rows[0] || null; } -async function loadUrlText(urlValue) { +async function loadUrlText(urlValue, requestOptions) { + const extraHeaders = requestOptions && requestOptions.headers ? requestOptions.headers : {}; if (typeof fetch === 'function') { const response = await fetch(urlValue, { - headers: { + headers: Object.assign({ Accept: 'application/json, text/plain;q=0.9, */*;q=0.8', 'User-Agent': 'Pulse Signage API Reader' - } + }, extraHeaders) }); return { @@ -68,12 +106,13 @@ async function loadUrlText(urlValue) { return await new Promise(function (resolve, reject) { const url = new URL(urlValue); const transport = url.protocol === 'https:' ? https : http; - const request = transport.get(url, { - headers: { - Accept: 'application/json, text/plain;q=0.9, */*;q=0.8', - 'User-Agent': 'Pulse Signage API Reader' - } - }, function (response) { + const requestHeaders = Object.assign({ + Accept: 'application/json, text/plain;q=0.9, */*;q=0.8', + 'User-Agent': 'Pulse Signage API Reader' + }, extraHeaders); + const request = transport.get(url, Object.assign({}, requestOptions || {}, { + headers: requestHeaders + }), function (response) { response.setEncoding('utf8'); let body = ''; response.on('data', function (chunk) { @@ -94,8 +133,11 @@ async function loadUrlText(urlValue) { }); } -async function fetchApiSourceResponse(apiUrl) { - const response = await loadUrlText(apiUrl); +async function fetchApiSourceResponse(apiSource) { + const source = apiSource && typeof apiSource === 'object' ? apiSource : { api_url: apiSource }; + const response = await loadUrlText(source.api_url, { + headers: buildAuthHeaders(source) + }); if (!response.ok) { throw new Error(`Unable to load API response (${response.statusCode}).`); } @@ -121,8 +163,23 @@ async function fetchApiSourceResponse(apiUrl) { function buildApiSourcePayload(req, existingApiSource) { const fallback = existingApiSource || {}; + const body = req && req.body ? req.body : {}; + function readBodyValue(fieldName, fallbackValue) { + if (Object.prototype.hasOwnProperty.call(body, fieldName)) { + return body[fieldName]; + } + return fallbackValue; + } + const name = String(req.body.name || fallback.name || '').trim(); const apiUrl = String(req.body.api_url || req.body.apiUrl || fallback.api_url || '').trim(); + const authMethod = normalizeAuthMethod(readBodyValue('auth_method', readBodyValue('authMethod', fallback.auth_method || 'none'))); + const authUsername = String(readBodyValue('auth_username', readBodyValue('authUsername', fallback.auth_username || '')) || '').trim(); + const authPassword = String(readBodyValue('auth_password', readBodyValue('authPassword', fallback.auth_password || '')) || ''); + const authBearerToken = String(readBodyValue('auth_bearer_token', readBodyValue('authBearerToken', fallback.auth_bearer_token || '')) || '').trim(); + const authHeaderName = String(readBodyValue('auth_header_name', readBodyValue('authHeaderName', fallback.auth_header_name || 'X-API-Key')) || 'X-API-Key').trim() || 'X-API-Key'; + const authHeaderValue = String(readBodyValue('auth_header_value', readBodyValue('authHeaderValue', fallback.auth_header_value || '')) || '').trim(); + const itemsPath = String(readBodyValue('items_path', readBodyValue('itemsPath', fallback.items_path || '')) || '').trim(); const updateIntervalValue = Math.max(1, Number(req.body.update_interval_value || req.body.updateIntervalValue || fallback.update_interval_value || 60)); const updateIntervalUnit = normalizeUpdateIntervalUnit(req.body.update_interval_unit || req.body.updateIntervalUnit || fallback.update_interval_unit || 'minutes'); @@ -159,9 +216,34 @@ function buildApiSourcePayload(req, existingApiSource) { throw error; } + if (authMethod === 'basic' && !authUsername && !authPassword) { + const error = new Error('Basic auth requires a username or password.'); + error.statusCode = 400; + throw error; + } + + if (authMethod === 'bearer' && !authBearerToken) { + const error = new Error('Bearer auth requires a token.'); + error.statusCode = 400; + throw error; + } + + if (authMethod === 'api_key_header' && !authHeaderValue) { + const error = new Error('API key auth requires a header value.'); + error.statusCode = 400; + throw error; + } + return { name: name, apiUrl: parsedUrl.toString(), + authMethod: authMethod, + authUsername: authUsername, + authPassword: authPassword, + authBearerToken: authBearerToken, + authHeaderName: authHeaderName, + authHeaderValue: authHeaderValue, + itemsPath: itemsPath, updateIntervalValue: Math.floor(updateIntervalValue), updateIntervalUnit: updateIntervalUnit }; diff --git a/src/data/canvas-sizes.js b/src/data/canvas-sizes.js index d40845b..47d5584 100644 --- a/src/data/canvas-sizes.js +++ b/src/data/canvas-sizes.js @@ -1,3 +1,5 @@ +// Canvas size data access and pagination helpers. + const { fetchPagedRows } = require('./utils'); async function fetchCanvasSizesData(pool) { diff --git a/src/data/client-name-check.js b/src/data/client-name-check.js index 40f0634..531c122 100644 --- a/src/data/client-name-check.js +++ b/src/data/client-name-check.js @@ -1,3 +1,5 @@ +// Client name reservation helpers for onboarding and live connection checks. + const crypto = require('crypto'); function normalizeClientName(value) { diff --git a/src/data/index.js b/src/data/index.js index 372d481..c34161c 100644 --- a/src/data/index.js +++ b/src/data/index.js @@ -1,8 +1,12 @@ +// Aggregated exports for the shared data access layer. + const { fetchAdminData, fetchPlaylistsPage, fetchSlidesPage, fetchTemplatesPage, fetchCanvasSizesPage, fetchScreensPage } = require('./admin'); +const { ANNOUNCEMENT_TYPES, ANNOUNCEMENT_COLORS, ANNOUNCEMENT_ICONS, DEFAULT_ANNOUNCEMENT_ICON, normalizeAnnouncementType, normalizeAnnouncementColor, normalizeAnnouncementIcon, fetchAnnouncementsPage, fetchAnnouncementById, fetchActiveAnnouncement, buildAnnouncementPayload } = require('./announcements'); +const { ANNOUNCEMENT_ICON_OPTIONS, ANNOUNCEMENT_ICON_LABELS } = require('./announcement-icons'); const { fetchPlaylistById } = require('./playlists'); const { fetchApiSourcesData, fetchApiSourcesPage, fetchApiSourceById, fetchApiSourceResponse, buildApiSourcePayload } = require('./api-sources'); const { fetchRssFeedsData, fetchRssFeedsPage, fetchRssFeedById, fetchRssFeedItemsByFeedId, normalizeRssFeedItem, buildRssFeedPayload, fetchRssFeedItems, replaceRssFeedItems } = require('./rss-feeds'); -const { slugify, uniqueScreenSlug, fetchScreenById, fetchScreenEditData } = require('./screens'); +const { slugify, uniqueScreenSlug, fetchScreenById, fetchScreenEditData, fetchScreenPlayerUrls, fetchScreenPlayerRecord } = require('./screens'); const { fetchTemplateById, fetchTemplatesData, extractTemplateRegions, buildTemplatePayload } = require('./templates'); const { fetchCanvasSizesData, fetchCanvasSizeById, buildCanvasSizePayload } = require('./canvas-sizes'); const { fetchSlideById, buildSlidePayload } = require('./slides'); @@ -18,6 +22,19 @@ module.exports = { fetchTemplatesPage, fetchCanvasSizesPage, fetchScreensPage, + ANNOUNCEMENT_TYPES, + ANNOUNCEMENT_COLORS, + ANNOUNCEMENT_ICONS, + ANNOUNCEMENT_ICON_OPTIONS, + ANNOUNCEMENT_ICON_LABELS, + DEFAULT_ANNOUNCEMENT_ICON, + normalizeAnnouncementType, + normalizeAnnouncementColor, + normalizeAnnouncementIcon, + fetchAnnouncementsPage, + fetchAnnouncementById, + fetchActiveAnnouncement, + buildAnnouncementPayload, fetchPlaylistById, fetchApiSourcesData, fetchApiSourcesPage, @@ -34,6 +51,8 @@ module.exports = { replaceRssFeedItems, fetchScreenById, fetchScreenEditData, + fetchScreenPlayerUrls, + fetchScreenPlayerRecord, fetchTemplateById, fetchSlideById, fetchTemplatesData, diff --git a/src/data/playlists.js b/src/data/playlists.js index b187862..444cbe0 100644 --- a/src/data/playlists.js +++ b/src/data/playlists.js @@ -1,3 +1,5 @@ +// Playlist data access helpers. + async function fetchPlaylistById(pool, id) { const [rows] = await pool.query('SELECT id, name, fade_between_slides, skip_unavailable_rtmp, created_at, modified_at, created_by, modified_by FROM c_playlists WHERE id = ?', [id]); return rows[0] || null; diff --git a/src/data/rss-feeds.js b/src/data/rss-feeds.js index a1e2f4c..7d85d67 100644 --- a/src/data/rss-feeds.js +++ b/src/data/rss-feeds.js @@ -1,3 +1,5 @@ +// RSS feed data access, pagination, and item normalization helpers. + const http = require('http'); const https = require('https'); const { fetchPagedRows } = require('./utils'); @@ -50,7 +52,7 @@ async function fetchRssFeedById(pool, id) { async function fetchRssFeedItemsByFeedId(pool, rssFeedId) { const [rows] = await pool.query( `SELECT id, rss_feed_id, position, item_json, created_at, modified_at - FROM rss_feed_items + FROM i_rss_feed_items WHERE rss_feed_id = ? ORDER BY position ASC, id ASC`, [rssFeedId] @@ -229,7 +231,7 @@ async function fetchRssFeedItems(feedUrl, itemLimit) { async function replaceRssFeedItems(connection, rssFeedId, items) { const normalizedItems = Array.isArray(items) ? items : []; - await connection.query('DELETE FROM rss_feed_items WHERE rss_feed_id = ?', [rssFeedId]); + await connection.query('DELETE FROM i_rss_feed_items WHERE rss_feed_id = ?', [rssFeedId]); if (!normalizedItems.length) { return 0; @@ -244,7 +246,7 @@ async function replaceRssFeedItems(connection, rssFeedId, items) { }); await connection.query( - 'INSERT INTO rss_feed_items (rss_feed_id, position, item_json) VALUES ?', + 'INSERT INTO i_rss_feed_items (rss_feed_id, position, item_json) VALUES ?', [insertValues] ); diff --git a/src/data/screens.js b/src/data/screens.js index e632e2e..6589d13 100644 --- a/src/data/screens.js +++ b/src/data/screens.js @@ -1,3 +1,5 @@ +// Screen slug helpers and screen lookup utilities. + function slugify(value) { return String(value || '') .toLowerCase() @@ -7,6 +9,60 @@ function slugify(value) { .replace(/-{2,}/g, '-'); } +function normalizePlayerBaseUrl(value) { + return String(value || '').trim().replace(/\/$/, ''); +} + +function buildScreenPlayerUrl(screen, fallbackBaseUrl) { + const slug = String(screen && screen.slug || '').trim(); + if (!slug) { + return null; + } + + const baseUrl = normalizePlayerBaseUrl(fallbackBaseUrl); + if (!baseUrl) { + return null; + } + + return `${baseUrl}/screen/${encodeURIComponent(slug)}`; +} + +async function fetchScreenPlayerUrls(pool) { + const [rows] = await pool.query(` + SELECT s.slug, p.public_base_url + FROM d_screens s + LEFT JOIN d_players p ON p.device_id = s.player_id + WHERE p.public_base_url IS NOT NULL + AND TRIM(p.public_base_url) <> '' + ORDER BY p.modified_at DESC, s.slug ASC + `); + + const playerUrls = {}; + rows.forEach(function (row) { + const slug = String(row && row.slug || '').trim(); + const publicBaseUrl = normalizePlayerBaseUrl(row && row.public_base_url); + const playerUrl = buildScreenPlayerUrl({ slug: slug }, publicBaseUrl); + if (slug && playerUrl && !playerUrls[slug]) { + playerUrls[slug] = playerUrl; + } + }); + + return playerUrls; +} + +async function fetchScreenPlayerRecord(pool, slug) { + const [rows] = await pool.query(` + SELECT p.device_id, p.public_base_url, p.internal_base_url, p.last_seen_at + FROM d_screens s + JOIN d_players p ON p.device_id = s.player_id + WHERE s.slug = ? + ORDER BY p.modified_at DESC, p.device_id ASC + LIMIT 1 + `, [slug]); + + return rows[0] || null; +} + async function uniqueScreenSlug(pool, baseSlug, excludeId) { const start = baseSlug || `screen-${Date.now()}`; let candidate = start; @@ -44,6 +100,10 @@ async function fetchScreenEditData(pool) { module.exports = { slugify, + normalizePlayerBaseUrl, + buildScreenPlayerUrl, + fetchScreenPlayerUrls, + fetchScreenPlayerRecord, uniqueScreenSlug, fetchScreenById, fetchScreenEditData diff --git a/src/data/slides.js b/src/data/slides.js index 0c28088..ec9d957 100644 --- a/src/data/slides.js +++ b/src/data/slides.js @@ -1,3 +1,5 @@ +// Slide data access helpers, including rich-text normalization and payload building. + const { fetchTemplateById } = require('./templates'); const { parseJsonSafe } = require('./utils'); @@ -25,6 +27,25 @@ function sanitizeRichText(html) { }); } +function normalizePlainText(value) { + return String(value === undefined || value === null ? '' : value) + .replace(/<\s*br\s*\/?\s*>/gi, '\n') + .replace(/<[^>]*>/g, '') + .replace(/ /gi, ' ') + .trim(); +} + +function stripEditorOnlyMarkup(value) { + return String(value || '') + .replace(/]*class="[^"]*api-region-sample-preview[^"]*"[^>]*>[\s\S]*?<\/pre>/gi, '') + .replace(/]*class="[^"]*api-region-sample-accordion[^"]*"[^>]*>[\s\S]*?<\/details>/gi, '') + .trim(); +} + +function normalizeEditorMarkup(value) { + return String(value === undefined || value === null ? '' : value).trim(); +} + async function fetchSlideById(pool, id) { const [slides] = await pool.query(` SELECT s.id, s.title, s.template_id, s.content_json, s.thumbnail_path, s.created_at, s.modified_at, @@ -53,6 +74,14 @@ function getFilesByField(files) { return map; } +function getSubmittedValue(body, key, fallback) { + if (body && Object.prototype.hasOwnProperty.call(body, key)) { + return String(body[key] || '').trim(); + } + + return fallback; +} + function sanitizeTextColor(value, fallback) { const raw = String(value || '').trim(); if (/^#[0-9a-fA-F]{6}$/.test(raw) || /^#[0-9a-fA-F]{3}$/.test(raw)) { @@ -88,9 +117,10 @@ function buildTemplateContent(template, body, filesByField, existingContent) { if (region.region_type === 'image') { const uploaded = filesByField[`region_image_${region.id}`]; const existing = body[`existing_region_image_${region.id}`]; + const current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key].value : ''; content[region.region_key] = { type: 'image', - value: uploaded ? `/media/uploads/${uploaded.filename}` : String(existing || '').trim() || ((existingContent && existingContent[region.region_key]) ? existingContent[region.region_key].value : '') + value: uploaded ? `/media/uploads/${uploaded.filename}` : getSubmittedValue(body, `existing_region_image_${region.id}`, current) }; } else if (region.region_type === 'video') { const uploaded = filesByField[`region_video_${region.id}`]; @@ -99,9 +129,10 @@ function buildTemplateContent(template, body, filesByField, existingContent) { const existingDuration = existingContent && existingContent[region.region_key] ? Number(existingContent[region.region_key].duration_seconds || 0) : 0; const parsedDuration = Number(durationValue || existingDuration || 0); const normalizedDuration = Math.round(parsedDuration * 1000) / 1000; + const current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key].value : ''; content[region.region_key] = { type: 'video', - value: uploaded ? `/media/uploads/${uploaded.filename}` : String(existing || '').trim() || ((existingContent && existingContent[region.region_key]) ? existingContent[region.region_key].value : ''), + value: uploaded ? `/media/uploads/${uploaded.filename}` : getSubmittedValue(body, `existing_region_video_${region.id}`, current), duration_seconds: Number.isFinite(normalizedDuration) && normalizedDuration > 0 ? normalizedDuration : null }; } else if (region.region_type === 'webpage') { @@ -126,6 +157,15 @@ function buildTemplateContent(template, body, filesByField, existingContent) { type: 'html', value: submitted === undefined ? current : String(submitted || '') }; + } else if (region.region_type === 'time-date') { + const submitted = body[`region_text_${region.id}`]; + const current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key] : {}; + const timezoneValue = body[`region_timezone_${region.id}`]; + content[region.region_key] = { + type: 'time-date', + value: submitted === undefined ? String(current.value !== undefined ? current.value : current.text !== undefined ? current.text : '') : String(submitted || ''), + timezone: timezoneValue === undefined || timezoneValue === null ? String(current.timezone || current.time_zone || '') : String(timezoneValue || '').trim() + }; } else if (region.region_type === 'rss') { const submitted = body[`region_text_${region.id}`]; const current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key] : {}; @@ -135,7 +175,7 @@ function buildTemplateContent(template, body, filesByField, existingContent) { const parsedItemNumber = Math.max(1, Number(itemNumber || current.item_number || 1)); content[region.region_key] = { type: 'rss', - value: submitted === undefined ? String(current.value || '') : String(submitted || ''), + value: stripEditorOnlyMarkup(normalizeEditorMarkup(submitted === undefined ? String(current.value || '') : String(submitted || ''))), feed_id: feedId === undefined || feedId === null || feedId === '' ? (current.feed_id || null) : Number(feedId), item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, variable_name: 'item', @@ -149,24 +189,61 @@ function buildTemplateContent(template, body, filesByField, existingContent) { const style = getTextRegionStyle(body, region, existingContent); const sourceId = body[`region_api_source_id_${region.id}`]; const itemNumber = body[`region_api_item_number_${region.id}`]; + const itemsPath = body[`region_api_items_path_${region.id}`]; const parsedItemNumber = Math.max(1, Number(itemNumber || current.item_number || 1)); content[region.region_key] = { type: 'api', - value: submitted === undefined ? String(current.value || '') : String(submitted || ''), + value: stripEditorOnlyMarkup(normalizeEditorMarkup(submitted === undefined ? String(current.value || '') : String(submitted || ''))), source_id: sourceId === undefined || sourceId === null || sourceId === '' ? (current.source_id || null) : Number(sourceId), item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, + items_path: itemsPath === undefined || itemsPath === null ? (current.items_path === undefined || current.items_path === null ? '' : String(current.items_path)) : String(itemsPath || '').trim(), variable_name: 'item', font_family: style.font_family, font_size: style.font_size, font_color: style.font_color }; + } else if (!['text', 'image', 'video', 'webpage', 'html', 'rtmp', 'rss', 'api'].includes(String(region.region_type || '').trim())) { + const current = existingContent && existingContent[region.region_key] && typeof existingContent[region.region_key] === 'object' ? existingContent[region.region_key] : {}; + const suffix = '_' + region.id; + const generic = {}; + + Object.keys(body || {}).forEach((key) => { + if (!key.startsWith('region_') || !key.endsWith(suffix)) { + return; + } + const field = key.slice('region_'.length, -suffix.length); + if (!field || field === 'type' || field === 'key' || field === 'name' || field === 'label') { + return; + } + generic[field] = body[key]; + }); + + Object.keys(filesByField || {}).forEach((fieldName) => { + if (!fieldName.startsWith('region_') || !fieldName.endsWith(suffix)) { + return; + } + const field = fieldName.slice('region_'.length, -suffix.length); + if (!field) { + return; + } + generic[field] = `/media/uploads/${filesByField[fieldName].filename}`; + }); + + Object.keys(current).forEach((key) => { + if (generic[key] === undefined) { + generic[key] = current[key]; + } + }); + + generic.type = region.region_type; + content[region.region_key] = generic; } else { const submitted = body[`region_text_${region.id}`]; const current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key].value : ''; const style = getTextRegionStyle(body, region, existingContent); content[region.region_key] = { type: 'text', - value: submitted === undefined ? current : String(submitted), + value: stripEditorOnlyMarkup(normalizeEditorMarkup(submitted === undefined ? current : String(submitted || ''))), font_family: style.font_family, font_size: style.font_size, font_color: style.font_color diff --git a/src/data/templates.js b/src/data/templates.js index c4e5d72..4184be5 100644 --- a/src/data/templates.js +++ b/src/data/templates.js @@ -1,7 +1,6 @@ -const { parseJsonSafe, readFormArray } = require('./utils'); +// Template data access helpers and region normalization logic. -const ALLOWED_TEMPLATE_REGION_TYPES = ['text', 'image', 'video', 'webpage', 'html', 'rtmp', 'rss', 'api']; -const FONT_FAMILY_REGION_TYPES = ['text', 'html', 'rss', 'api']; +const { parseJsonSafe, readFormArray } = require('./utils'); function sanitizeBackgroundColor(value) { const raw = String(value || '').trim(); @@ -13,7 +12,7 @@ function sanitizeBackgroundColor(value) { function normalizeTemplateRegionType(value) { const rawType = String(value || 'text').trim(); - return ALLOWED_TEMPLATE_REGION_TYPES.includes(rawType) ? rawType : 'text'; + return rawType || 'text'; } function normalizeTemplateRegionLockRatio(value) { @@ -58,7 +57,7 @@ async function fetchTemplateById(pool, id) { return null; } const template = templates[0]; - const [regions] = await pool.query('SELECT id, template_id, region_key, region_type, label, font_family, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions WHERE template_id = ? ORDER BY z_index ASC, id ASC', [id]); + const [regions] = await pool.query('SELECT id, template_id, region_key, region_type, label, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions WHERE template_id = ? ORDER BY z_index ASC, id ASC', [id]); template.regions = regions; return template; } @@ -71,7 +70,7 @@ async function fetchTemplatesData(pool) { LEFT JOIN c_canvas_sizes cs ON cs.id = st.canvas_size_id ORDER BY st.id DESC `); - const [templateRegions] = await pool.query('SELECT id, template_id, region_key, region_type, label, font_family, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions ORDER BY template_id ASC, z_index ASC, id ASC'); + const [templateRegions] = await pool.query('SELECT id, template_id, region_key, region_type, label, lock_ratio, x, y, width, height, z_index, created_at, modified_at, created_by, modified_by FROM c_template_regions ORDER BY template_id ASC, z_index ASC, id ASC'); return { templates, templateRegions }; } @@ -86,7 +85,6 @@ function extractTemplateRegions(body) { region_key: String(region.region_name || region.region_key || region.label || '').trim(), region_type: regionType, label: String(region.region_name || region.label || region.region_key || '').trim(), - font_family: FONT_FAMILY_REGION_TYPES.includes(regionType) ? String(region.font_family || '').trim() || null : null, lock_ratio: normalizeTemplateRegionLockRatio(region.lock_ratio), x: Number(region.x || 0), y: Number(region.y || 0), @@ -108,7 +106,6 @@ function extractTemplateRegions(body) { const widths = readFormArray(body, 'region_width[]'); const heights = readFormArray(body, 'region_height[]'); const zs = readFormArray(body, 'region_z[]'); - const fonts = readFormArray(body, 'font_family[]'); const regions = []; for (let i = 0; i < keys.length; i += 1) { @@ -122,7 +119,6 @@ function extractTemplateRegions(body) { region_key: name, region_type: regionType, label: name, - font_family: FONT_FAMILY_REGION_TYPES.includes(regionType) ? String(fonts[i] || 'Arial').trim() || 'Arial' : null, lock_ratio: normalizeTemplateRegionLockRatio(ratios[i]), x: Number(xs[i] || 0), y: Number(ys[i] || 0), @@ -135,6 +131,43 @@ function extractTemplateRegions(body) { return regions; } +function extractGenericRegionContent(region, body, filesByField, existingContent) { + const content = {}; + const current = existingContent && existingContent[region.region_key] && typeof existingContent[region.region_key] === 'object' ? existingContent[region.region_key] : {}; + const suffix = '_' + region.id; + + Object.keys(body || {}).forEach((key) => { + if (!key.startsWith('region_') || !key.endsWith(suffix)) { + return; + } + const field = key.slice('region_'.length, -suffix.length); + if (!field || field === 'type' || field === 'key' || field === 'name' || field === 'label') { + return; + } + content[field] = body[key]; + }); + + Object.keys(filesByField || {}).forEach((fieldName) => { + if (!fieldName.startsWith('region_') || !fieldName.endsWith(suffix)) { + return; + } + const field = fieldName.slice('region_'.length, -suffix.length); + if (!field) { + return; + } + content[field] = `/media/uploads/${filesByField[fieldName].filename}`; + }); + + Object.keys(current).forEach((key) => { + if (content[key] === undefined) { + content[key] = current[key]; + } + }); + + content.type = region.region_type; + return content; +} + function getFilesByField(files) { const map = {}; (files || []).forEach((file) => { diff --git a/src/data/utils.js b/src/data/utils.js index 00647d6..3411050 100644 --- a/src/data/utils.js +++ b/src/data/utils.js @@ -1,3 +1,5 @@ +// Shared helpers for parsing JSON, reading form arrays, and duplicate-name checks. + function parseJsonSafe(value) { if (!value) { return null; diff --git a/src/db/index.js b/src/db/index.js index b3aca5f..191e5b1 100644 --- a/src/db/index.js +++ b/src/db/index.js @@ -1,3 +1,4 @@ +// Snapshot only: keep this file aligned with the current schema state. async function ensureSchema(pool, options) { await pool.query(` CREATE TABLE IF NOT EXISTS c_canvas_sizes ( @@ -122,6 +123,40 @@ async function ensureSchema(pool, options) { ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `); + await pool.query(` + CREATE TABLE IF NOT EXISTS d_announcements ( + id INT AUTO_INCREMENT PRIMARY KEY, + message TEXT NOT NULL, + short_label VARCHAR(255) NOT NULL DEFAULT '', + announcement_type VARCHAR(32) NOT NULL DEFAULT 'lower-third', + color_key VARCHAR(32) NOT NULL DEFAULT 'primary', + icon_key VARCHAR(64) NOT NULL DEFAULT 'megaphone-fill', + duration_seconds INT NULL, + expires_at TIMESTAMP NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + created_by INT NULL, + modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + modified_by INT NULL, + INDEX idx_announcements_expires_at (expires_at), + INDEX idx_announcements_modified_at (modified_at) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + `); + + await pool.query(` + CREATE TABLE IF NOT EXISTS d_announcement_screens ( + announcement_id INT NOT NULL, + screen_id INT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + created_by INT NULL, + modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + modified_by INT NULL, + PRIMARY KEY (announcement_id, screen_id), + INDEX idx_announcement_screens_screen_id (screen_id), + CONSTRAINT fk_announcement_screens_announcement FOREIGN KEY (announcement_id) REFERENCES d_announcements(id) ON DELETE CASCADE, + CONSTRAINT fk_announcement_screens_screen FOREIGN KEY (screen_id) REFERENCES d_screens(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + `); + await pool.query(` CREATE TABLE IF NOT EXISTS i_rss_feeds ( id INT AUTO_INCREMENT PRIMARY KEY, @@ -287,6 +322,9 @@ async function ensureSchema(pool, options) { INDEX idx_background_tasks_type (task_type) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci `); + + const { runMigrations } = require('./migrations'); + await runMigrations(pool, options); } module.exports = { diff --git a/src/db/migrations.js b/src/db/migrations.js index e5c81a5..5675b02 100644 --- a/src/db/migrations.js +++ b/src/db/migrations.js @@ -1,7 +1,184 @@ -const { version: appVersion } = require('../../package.json'); +const { version: appVersion } = require('#root/package.json'); -async function runMigrations(_pool, _options) { - return; +const VERSIONED_MIGRATIONS = [ + { + version: '2.1.0', + label: 'v2.1.0 player registry schema', + run: async function (pool) { + // Keep the player registry as the source of truth for device metadata. + if (!(await columnExists(pool, 'd_players', 'public_base_url'))) { + await pool.query(` + CREATE TABLE IF NOT EXISTS d_players ( + device_id VARCHAR(128) PRIMARY KEY, + public_base_url VARCHAR(512) NULL, + internal_base_url VARCHAR(512) NULL, + last_seen_at TIMESTAMP NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + `); + } + + // Seed the singleton player row used by the current one-player model. + // For multi-player support, this seed and the hardcoded screen_id/player_id mapping will need to be replaced. + await pool.query(`INSERT IGNORE INTO d_players (device_id) VALUES ('1')`); + + // Store the player pointer on screens so we can resolve the player without needing a player-side screen_id. + // This is the singleton-player shortcut; a multi-player model should make this relational instead of hardcoded to '1'. + if (!(await columnExists(pool, 'd_screens', 'player_id'))) { + await pool.query("ALTER TABLE d_screens ADD COLUMN player_id VARCHAR(128) NOT NULL DEFAULT '1' AFTER playlist_id"); + } else { + await pool.query("UPDATE d_screens SET player_id = '1' WHERE player_id IS NULL OR player_id <> '1'"); + + const [playerColumnNullableRows] = await pool.query( + `SELECT COUNT(*) AS nullable_count + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'd_screens' + AND COLUMN_NAME = 'player_id' + AND IS_NULLABLE = 'YES'` + ); + if (Number(playerColumnNullableRows && playerColumnNullableRows[0] && playerColumnNullableRows[0].nullable_count) > 0) { + await pool.query("ALTER TABLE d_screens MODIFY COLUMN player_id VARCHAR(128) NOT NULL DEFAULT '1' AFTER playlist_id"); + } + } + + const [screenPlayerUniqueRows] = await pool.query( + `SELECT COUNT(*) AS index_count + FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'd_screens' + AND INDEX_NAME = 'uq_screens_player_id'` + ); + if (Number(screenPlayerUniqueRows && screenPlayerUniqueRows[0] && screenPlayerUniqueRows[0].index_count) > 0) { + await pool.query('ALTER TABLE d_screens DROP INDEX uq_screens_player_id'); + } + + // Recreate the screen-to-player foreign key after the column exists and legacy data is copied over. + const [screenPlayerFkRows] = await pool.query( + `SELECT COUNT(*) AS fk_count + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'd_screens' + AND CONSTRAINT_NAME = 'fk_screens_player'` + ); + if (Number(screenPlayerFkRows && screenPlayerFkRows[0] && screenPlayerFkRows[0].fk_count) === 0) { + await pool.query('ALTER TABLE d_screens ADD CONSTRAINT fk_screens_player FOREIGN KEY (player_id) REFERENCES d_players(device_id) ON DELETE RESTRICT'); + } + + if (await columnExists(pool, 'c_template_regions', 'font_family')) { + await pool.query('ALTER TABLE c_template_regions DROP COLUMN font_family'); + } + + } + }, + { + version: '2.1.1', + label: 'v2.1.1 API source schema', + run: async function (pool) { + await ensureColumn(pool, 'i_api_sources', 'auth_method', "VARCHAR(32) NOT NULL DEFAULT 'none'", 'api_url'); + await ensureColumn(pool, 'i_api_sources', 'auth_username', 'VARCHAR(255) NULL', 'auth_method'); + await ensureColumn(pool, 'i_api_sources', 'auth_password', 'MEDIUMTEXT NULL', 'auth_username'); + await ensureColumn(pool, 'i_api_sources', 'auth_bearer_token', 'MEDIUMTEXT NULL', 'auth_password'); + await ensureColumn(pool, 'i_api_sources', 'auth_header_name', 'VARCHAR(255) NULL', 'auth_bearer_token'); + await ensureColumn(pool, 'i_api_sources', 'auth_header_value', 'MEDIUMTEXT NULL', 'auth_header_name'); + await ensureColumn(pool, 'i_api_sources', 'items_path', 'VARCHAR(255) NULL', 'auth_header_value'); + } + }, + { + version: '2.2.0', + label: 'v2.2.0 announcement schema', + run: async function (pool) { + await pool.query(` + CREATE TABLE IF NOT EXISTS d_announcements ( + id INT AUTO_INCREMENT PRIMARY KEY, + message TEXT NOT NULL, + short_label VARCHAR(255) NOT NULL DEFAULT '', + announcement_type VARCHAR(32) NOT NULL DEFAULT 'lower-third', + color_key VARCHAR(32) NOT NULL DEFAULT 'primary', + icon_key VARCHAR(64) NOT NULL DEFAULT 'megaphone-fill', + duration_seconds INT NULL, + expires_at TIMESTAMP NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + created_by INT NULL, + modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + modified_by INT NULL, + INDEX idx_announcements_expires_at (expires_at), + INDEX idx_announcements_modified_at (modified_at) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + `); + + await pool.query(` + CREATE TABLE IF NOT EXISTS d_announcement_screens ( + announcement_id INT NOT NULL, + screen_id INT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + created_by INT NULL, + modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + modified_by INT NULL, + PRIMARY KEY (announcement_id, screen_id), + INDEX idx_announcement_screens_screen_id (screen_id), + CONSTRAINT fk_announcement_screens_announcement FOREIGN KEY (announcement_id) REFERENCES d_announcements(id) ON DELETE CASCADE, + CONSTRAINT fk_announcement_screens_screen FOREIGN KEY (screen_id) REFERENCES d_screens(id) ON DELETE CASCADE + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + `); + } + } +]; + +async function columnExists(pool, tableName, columnName) { + const [rows] = await pool.query( + `SELECT COUNT(*) AS column_count + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = ? + AND COLUMN_NAME = ?`, + [tableName, columnName] + ); + + return Number(rows && rows[0] && rows[0].column_count) > 0; +} + +async function ensureColumn(pool, tableName, columnName, columnDefinition, afterColumn) { + if (await columnExists(pool, tableName, columnName)) { + return; + } + + const afterClause = afterColumn ? ' AFTER ' + afterColumn : ''; + await pool.query('ALTER TABLE ' + tableName + ' ADD COLUMN ' + columnName + ' ' + columnDefinition + afterClause); +} + +function compareVersions(leftVersion, rightVersion) { + const leftParts = String(leftVersion || '0.0.0').split('.').map(function (value) { + return Number(value) || 0; + }); + const rightParts = String(rightVersion || '0.0.0').split('.').map(function (value) { + return Number(value) || 0; + }); + const length = Math.max(leftParts.length, rightParts.length); + for (let index = 0; index < length; index += 1) { + const leftPart = leftParts[index] || 0; + const rightPart = rightParts[index] || 0; + if (leftPart > rightPart) { + return 1; + } + if (leftPart < rightPart) { + return -1; + } + } + return 0; +} + +async function runMigrations(pool, options) { + // Only run migrations that are newer than the installed schema version and not beyond the app version. + const targetVersion = String(appVersion || '0.0.0').trim(); + const currentVersion = String(options && options.currentVersion || '0.0.0').trim(); + + for (const migration of VERSIONED_MIGRATIONS) { + if (compareVersions(migration.version, currentVersion) > 0 && compareVersions(migration.version, targetVersion) <= 0) { + await migration.run(pool); + } + } } module.exports = { diff --git a/src/player.js b/src/player.js index e2fb655..40050f8 100644 --- a/src/player.js +++ b/src/player.js @@ -9,6 +9,7 @@ const { createRtmpStreamService } = require('./player/modules/rtmp-streams'); const { normalizeDeviceId, registerPlayerOnboardingRoutes, commitDeviceBinding } = require('./player/onboarding'); const { createOnboardingStore } = require('./player/onboarding/store'); const { registerPlayerRoutes } = require('./player/routes'); +const { ensureFontLibrary } = require('#src/web/lib/media/font-library'); // Player runtime, media API, and websocket wiring. @@ -16,6 +17,9 @@ async function start() { const app = express(); const pool = common.createPool(); const PORT = Number(process.env.PLAYER_PORT || 8081); + const PLAYER_PUBLIC_BASE_URL = String(process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); + const PLAYER_INTERNAL_BASE_URL = String(process.env.PLAYER_INTERNAL_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); + const PLAYER_IDENTIFIER = '1'; const ASSET_DIR = path.join(__dirname, 'player', 'public'); const MEDIA_DIR = path.join(__dirname, '..', 'media'); const ONBOARDING_QUEUE_FILE = path.join(MEDIA_DIR, 'player-onboarding-queue.json'); @@ -41,6 +45,8 @@ async function start() { common: common, playerRuntime: playerRuntime, onboardingStore: onboardingStore, + playerPublicBaseUrl: PLAYER_PUBLIC_BASE_URL, + playerInternalBaseUrl: PLAYER_INTERNAL_BASE_URL, QRCode: require('qrcode') }); registerPlayerRoutes(app, { @@ -50,7 +56,10 @@ async function start() { assetDir: ASSET_DIR, playerRuntime: playerRuntime, playerPlaylistService: playerPlaylistService, - rtmpStreamService: rtmpStreamService + rtmpStreamService: rtmpStreamService, + playerPublicBaseUrl: PLAYER_PUBLIC_BASE_URL, + playerInternalBaseUrl: PLAYER_INTERNAL_BASE_URL, + playerIdentifier: PLAYER_IDENTIFIER }); app.use(function (error, _req, res, _next) { @@ -59,6 +68,7 @@ async function start() { }); fs.mkdirSync(MEDIA_DIR, { recursive: true }); + await ensureFontLibrary(MEDIA_DIR); server.listen(PORT, function () { console.log(`Pulse Signage app listening on port ${PORT}`); @@ -89,6 +99,12 @@ async function start() { } await syncDatabaseState(); + + if (PLAYER_IDENTIFIER) { + const { upsertPlayerRegistration } = require('./player/onboarding'); + await upsertPlayerRegistration(pool, PLAYER_IDENTIFIER, PLAYER_PUBLIC_BASE_URL, PLAYER_INTERNAL_BASE_URL, null); + } + setInterval(function () { syncDatabaseState().catch(function (error) { console.error(error); diff --git a/src/player/announcement-templates/fullscreen.template.html b/src/player/announcement-templates/fullscreen.template.html new file mode 100644 index 0000000..d0bb5d1 --- /dev/null +++ b/src/player/announcement-templates/fullscreen.template.html @@ -0,0 +1,55 @@ + +
+
+
+ +
{{MESSAGE}}
+
+
+
\ No newline at end of file diff --git a/src/player/announcement-templates/lower-third.template.html b/src/player/announcement-templates/lower-third.template.html new file mode 100644 index 0000000..febcaa3 --- /dev/null +++ b/src/player/announcement-templates/lower-third.template.html @@ -0,0 +1,197 @@ + +
+
+ +
+
+ + {{MESSAGE}} + + +
+
+
+
+ \ No newline at end of file diff --git a/src/player/announcement-templates/top-banner.template.html b/src/player/announcement-templates/top-banner.template.html new file mode 100644 index 0000000..4b56a92 --- /dev/null +++ b/src/player/announcement-templates/top-banner.template.html @@ -0,0 +1,199 @@ + +
+
+ +
+
+ + {{MESSAGE}} + + +
+
+
+
+ \ No newline at end of file diff --git a/src/player/modules/rtmp-streams.js b/src/player/modules/rtmp-streams.js index 4134f32..42cb44e 100644 --- a/src/player/modules/rtmp-streams.js +++ b/src/player/modules/rtmp-streams.js @@ -1,3 +1,5 @@ +// RTMP stream session management and ffmpeg probe orchestration. + const crypto = require('crypto'); const fs = require('fs'); const path = require('path'); diff --git a/src/player/onboarding/index.js b/src/player/onboarding/index.js index 7a49995..77cac9c 100644 --- a/src/player/onboarding/index.js +++ b/src/player/onboarding/index.js @@ -1,5 +1,7 @@ -const { isClientNameAvailable, withClientNameReservation } = require('../../data/client-name-check'); -const { getSharedSecret, verifyPageAuthToken } = require('../../request-auth'); +// Player onboarding routes and signup flow helpers. + +const { isClientNameAvailable, withClientNameReservation } = require('#src/data/client-name-check'); +const { getSharedSecret, verifyPageAuthToken } = require('#src/request-auth'); const { isTransientDbError } = require('./store'); const ONBOARDING_SIGNUP_LIMIT_WINDOW_MS = 5 * 60 * 1000; @@ -10,8 +12,8 @@ function normalizeDeviceId(value) { return String(value || '').trim().replace(/[^a-zA-Z0-9_-]/g, '').slice(0, 128); } -function getPublicBaseUrl(req) { - const configured = String(process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); +function getPublicBaseUrl(req, configuredUrl) { + const configured = String(configuredUrl || process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); if (configured) { return configured; } @@ -40,6 +42,15 @@ function getOnboardingLimitKey(req, deviceId) { return [getRequestIp(req), normalizeDeviceId(deviceId) || 'anonymous'].join('|'); } +function getPlayerPublicBaseUrl(req, configuredUrl) { + return getPublicBaseUrl(req, configuredUrl); +} + +function getPlayerInternalBaseUrl(configuredUrl) { + const configured = String(configuredUrl || process.env.PLAYER_INTERNAL_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); + return configured || null; +} + function clearOnboardingSignupAttempts() { if (onboardingSignupAttempts.size > 1000) { onboardingSignupAttempts.clear(); @@ -121,6 +132,62 @@ async function commitDeviceBinding(pool, deviceId, clientName, screenSlug, isNam }); } +async function upsertPlayerRegistration(pool, deviceId, publicBaseUrl, internalBaseUrl, screenSlug) { + const normalizedDeviceId = normalizeDeviceId(deviceId); + const normalizedPublicBaseUrl = String(publicBaseUrl || '').trim().replace(/\/$/, ''); + const normalizedInternalBaseUrl = String(internalBaseUrl || '').trim().replace(/\/$/, ''); + if (!normalizedDeviceId) { + return null; + } + + await pool.query( + `INSERT INTO d_players (device_id, public_base_url, internal_base_url, last_seen_at) + VALUES (?, ?, ?, CURRENT_TIMESTAMP) + ON DUPLICATE KEY UPDATE public_base_url = VALUES(public_base_url), internal_base_url = VALUES(internal_base_url), last_seen_at = CURRENT_TIMESTAMP, modified_at = CURRENT_TIMESTAMP`, + [normalizedDeviceId, normalizedPublicBaseUrl || null, normalizedInternalBaseUrl || null] + ); + + return { + device_id: normalizedDeviceId, + public_base_url: normalizedPublicBaseUrl || null, + internal_base_url: normalizedInternalBaseUrl || null + }; +} + +async function bindPlayerToScreen(pool, deviceId, screenSlug) { + const normalizedDeviceId = normalizeDeviceId(deviceId); + const normalizedScreenSlug = String(screenSlug || '').trim(); + if (!normalizedDeviceId || !normalizedScreenSlug) { + return null; + } + + const [screenRows] = await pool.query('SELECT id FROM d_screens WHERE slug = ? LIMIT 1', [normalizedScreenSlug]); + if (!screenRows.length) { + return null; + } + + const screenId = Number(screenRows[0].id); + const connection = await pool.getConnection(); + try { + await connection.beginTransaction(); + // Current model: every screen binds to the shared player row '1'. + // If we introduce multiple players, resolve the correct player row here instead of hardcoding it. + await connection.query("UPDATE d_screens SET player_id = '1', modified_at = CURRENT_TIMESTAMP WHERE id = ?", [screenId]); + await connection.commit(); + } catch (error) { + await connection.rollback(); + throw error; + } finally { + connection.release(); + } + + return { + screen_id: screenId, + screen_slug: normalizedScreenSlug, + player_id: '1' + }; +} + async function bindDeviceToScreen(pool, deviceId, clientName, screenSlug, isNameAvailableOnScreen, playerRuntime, onboardingStore) { const liveConnections = playerRuntime && typeof playerRuntime.snapshotAllConnections === 'function' ? playerRuntime.snapshotAllConnections() @@ -184,9 +251,13 @@ function registerPlayerOnboardingRoutes(app, options) { res.send(common.renderPlayerOnboardingLandingPage()); }); - app.get('/onboard', function (req, res) { + app.get('/onboard', async function (req, res, next) { res.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); - res.send(common.renderPlayerOnboardingFormPage(String(req.query.deviceId || '').trim())); + try { + res.send(common.renderPlayerOnboardingFormPage(String(req.query.deviceId || '').trim())); + } catch (error) { + next(error); + } }); app.get('/api/onboarding/status', function (req, res, next) { @@ -231,7 +302,7 @@ function registerPlayerOnboardingRoutes(app, options) { if (!deviceId) { return res.status(400).json({ error: 'Device ID is required' }); } - const onboardingUrl = `${getPublicBaseUrl(req)}/onboard?deviceId=${encodeURIComponent(deviceId)}`; + const onboardingUrl = `${getPublicBaseUrl(req, options && options.playerPublicBaseUrl)}/onboard?deviceId=${encodeURIComponent(deviceId)}`; const svg = await QRCode.toString(onboardingUrl, { type: 'svg', margin: 1, errorCorrectionLevel: 'M' }); res.set('Content-Type', 'image/svg+xml; charset=utf-8'); res.set('Cache-Control', 'no-store'); @@ -262,6 +333,7 @@ function registerPlayerOnboardingRoutes(app, options) { } const status = await bindDeviceToScreen(pool, deviceId, clientName, screenSlug, playerRuntime.isClientNameAvailableOnScreen, playerRuntime, onboardingStore); + await bindPlayerToScreen(pool, deviceId, screenSlug); res.json({ deviceId: deviceId, clientName: status ? status.client_name : clientName, @@ -280,8 +352,12 @@ function registerPlayerOnboardingRoutes(app, options) { module.exports = { normalizeDeviceId: normalizeDeviceId, getPublicBaseUrl: getPublicBaseUrl, + getPlayerPublicBaseUrl: getPlayerPublicBaseUrl, + getPlayerInternalBaseUrl: getPlayerInternalBaseUrl, getOnboardingStatus: getOnboardingStatus, commitDeviceBinding: commitDeviceBinding, + upsertPlayerRegistration: upsertPlayerRegistration, + bindPlayerToScreen: bindPlayerToScreen, bindDeviceToScreen: bindDeviceToScreen, registerPlayerOnboardingRoutes: registerPlayerOnboardingRoutes }; \ No newline at end of file diff --git a/src/player/onboarding/store.js b/src/player/onboarding/store.js index 2fcd07e..eda38ae 100644 --- a/src/player/onboarding/store.js +++ b/src/player/onboarding/store.js @@ -1,3 +1,5 @@ +// File-backed storage for onboarding device mappings. + const fs = require('fs'); const path = require('path'); diff --git a/src/player/player-page-announcements.js b/src/player/player-page-announcements.js new file mode 100644 index 0000000..6c14c5d --- /dev/null +++ b/src/player/player-page-announcements.js @@ -0,0 +1,261 @@ +// Announcement overlay polling and rendering helpers. + +(function () { + var announcementLayer = null; + var announcementRefreshTimer = null; + var announcementPollTimer = null; + var announcementSocket = null; + var announcementReconnectTimer = null; + var announcementRequestId = 0; + var announcementEtag = ''; + var announcementHideTimer = null; + var announcementRevealTimer = null; + var announcementFadeDurationMs = 220; + var announcementSocketPath = '/ws/screens/' + encodeURIComponent(window.slug || '') + '/announcements'; + + function normalizeAnnouncementType(value) { + var normalized = String(value || '').trim().toLowerCase(); + if (normalized === 'center-card') { + return 'fullscreen'; + } + if (['lower-third', 'fullscreen', 'top-banner'].indexOf(normalized) !== -1) { + return normalized; + } + return 'lower-third'; + } + + function getAnnouncementLayer() { + if (announcementLayer) { + return announcementLayer; + } + announcementLayer = document.getElementById('player-announcement-layer'); + if (!announcementLayer) { + announcementLayer = document.createElement('div'); + announcementLayer.id = 'player-announcement-layer'; + announcementLayer.className = 'player-announcement-layer'; + announcementLayer.setAttribute('aria-live', 'polite'); + announcementLayer.setAttribute('aria-atomic', 'true'); + document.body.appendChild(announcementLayer); + } + return announcementLayer; + } + + function clearAnnouncementHideTimer() { + if (announcementHideTimer) { + window.clearTimeout(announcementHideTimer); + announcementHideTimer = null; + } + } + + function clearAnnouncementRevealTimer() { + if (announcementRevealTimer) { + window.cancelAnimationFrame(announcementRevealTimer); + announcementRevealTimer = null; + } + } + + function activateInjectedScripts(layer) { + if (!layer) { + return; + } + + var scripts = layer.querySelectorAll('script'); + scripts.forEach(function (originalScript) { + var replacement = document.createElement('script'); + + Array.prototype.slice.call(originalScript.attributes || []).forEach(function (attribute) { + replacement.setAttribute(attribute.name, attribute.value); + }); + + replacement.text = originalScript.textContent || ''; + originalScript.parentNode.replaceChild(replacement, originalScript); + }); + } + + function hideAnnouncement() { + var layer = getAnnouncementLayer(); + clearAnnouncementRevealTimer(); + clearAnnouncementHideTimer(); + layer.classList.add('is-closing'); + layer.classList.remove('is-visible'); + announcementHideTimer = window.setTimeout(function () { + layer.innerHTML = ''; + layer.hidden = true; + layer.classList.remove('is-closing'); + announcementHideTimer = null; + }, announcementFadeDurationMs); + } + + function renderAnnouncement(announcement) { + var layer = getAnnouncementLayer(); + if (!announcement || !announcement.message) { + hideAnnouncement(); + return; + } + + var type = normalizeAnnouncementType(announcement.announcement_type); + + clearAnnouncementRevealTimer(); + clearAnnouncementHideTimer(); + layer.hidden = false; + layer.className = 'player-announcement-layer player-announcement-layer--' + type; + layer.classList.remove('is-closing'); + layer.innerHTML = window.renderPlayerAnnouncementMarkup ? window.renderPlayerAnnouncementMarkup(announcement) : ''; + activateInjectedScripts(layer); + announcementRevealTimer = window.requestAnimationFrame(function () { + announcementRevealTimer = null; + layer.classList.add('is-visible'); + }); + } + + function scheduleAnnouncementRefresh(delayMs) { + if (announcementRefreshTimer) { + window.clearTimeout(announcementRefreshTimer); + } + announcementRefreshTimer = window.setTimeout(function () { + announcementRefreshTimer = null; + void refreshAnnouncementOverlay(); + }, Math.max(0, Number(delayMs || 0))); + } + + async function refreshAnnouncementOverlay() { + var requestId = ++announcementRequestId; + var request = new XMLHttpRequest(); + var url = window.location.origin + '/api/screens/' + encodeURIComponent(window.slug || '') + '/announcement?ts=' + Date.now(); + request.open('GET', url, true); + request.timeout = 2500; + if (window.__pulsePageAuthToken) { + request.setRequestHeader('x-pulse-page-auth', window.__pulsePageAuthToken); + } + if (announcementEtag) { + request.setRequestHeader('If-None-Match', announcementEtag); + } + request.onreadystatechange = function () { + if (request.readyState !== 4 || requestId !== announcementRequestId) { + return; + } + if (request.status === 304) { + return; + } + if (request.status < 200 || request.status >= 300) { + scheduleAnnouncementRefresh(15000); + return; + } + + try { + var responseEtag = String(request.getResponseHeader('ETag') || '').trim(); + var data = JSON.parse(request.responseText || '{}'); + var announcement = data && data.announcement ? data.announcement : null; + + if (responseEtag) { + announcementEtag = responseEtag; + } + + if (!announcement) { + hideAnnouncement(); + } else { + renderAnnouncement(announcement); + } + } catch (_error) { + scheduleAnnouncementRefresh(15000); + } + }; + request.onerror = function () { + scheduleAnnouncementRefresh(15000); + }; + request.ontimeout = function () { + scheduleAnnouncementRefresh(15000); + }; + request.send(); + } + + function scheduleAnnouncementPolling() { + if (announcementPollTimer) { + window.clearInterval(announcementPollTimer); + } + announcementPollTimer = window.setInterval(function () { + void refreshAnnouncementOverlay(); + }, 15000); + } + + function scheduleAnnouncementReconnect() { + if (announcementReconnectTimer) { + return; + } + announcementReconnectTimer = window.setTimeout(function () { + announcementReconnectTimer = null; + connectAnnouncementSocket(); + }, 5000); + } + + function handleAnnouncementSocketMessage(rawMessage) { + var payload; + try { + payload = JSON.parse(String(rawMessage || '')); + } catch (_error) { + return; + } + + if (!payload || payload.type !== 'announcement-refresh') { + return; + } + + void refreshAnnouncementOverlay(); + } + + function connectAnnouncementSocket() { + if (!window.WebSocket) { + return; + } + if (announcementSocket && (announcementSocket.readyState === WebSocket.OPEN || announcementSocket.readyState === WebSocket.CONNECTING)) { + return; + } + + var socketUrl = new URL(announcementSocketPath, window.location.origin); + if (window.__pulsePageAuthToken) { + socketUrl.searchParams.set('auth', window.__pulsePageAuthToken); + } + + var socket = new WebSocket(socketUrl.toString()); + announcementSocket = socket; + + socket.onopen = function () { + void refreshAnnouncementOverlay(); + }; + + socket.onmessage = function (event) { + handleAnnouncementSocketMessage(event.data); + }; + + socket.onclose = function () { + announcementSocket = null; + scheduleAnnouncementReconnect(); + }; + + socket.onerror = function () { + try { + socket.close(); + } catch (_error) { + // ignore socket close errors + } + }; + } + + window.refreshAnnouncementOverlay = refreshAnnouncementOverlay; + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function () { + void refreshAnnouncementOverlay(); + scheduleAnnouncementPolling(); + connectAnnouncementSocket(); + }, { once: true }); + } else { + void refreshAnnouncementOverlay(); + scheduleAnnouncementPolling(); + connectAnnouncementSocket(); + } + + window.addEventListener('focus', function () { + void refreshAnnouncementOverlay(); + }); +})(); \ No newline at end of file diff --git a/src/player/player-page.script.html b/src/player/player-page.script.html index 4253eac..957b76a 100644 --- a/src/player/player-page.script.html +++ b/src/player/player-page.script.html @@ -1,7 +1,41 @@ '; const pageAuthToken = createPageAuthBundle({ scope: 'player', slug: String(slug || '').trim() }); + const fontStylesheetHref = getFontStylesheetHref(PLAYER_MEDIA_DIR); const script = getPlayerPageScript()({ SLUG_JSON: new Handlebars.SafeString(JSON.stringify(slug)), INITIAL_DATA_JSON: new Handlebars.SafeString(safeJsonForScript(initialData || null)), @@ -118,26 +129,31 @@ function renderPlayerPage(slug, initialData) { return renderPage(template, { title: 'Screen ' + slug, body: '
Loading screen...
', - script: createPageFetchAuthScript(pageAuthToken) + hlsScriptTag + serviceWorkerScript + createThumbnailPreviewBootstrapScript(initialData) + '' + '' + '' + '' + '' + onboardingScript + script + stylesheets: fontStylesheetHref ? [fontStylesheetHref] : [], + script: createPageFetchAuthScript(pageAuthToken) + hlsScriptTag + serviceWorkerScript + createThumbnailPreviewBootstrapScript(initialData) + '' + '' + '' + '' + '' + '' + '' + '' + onboardingScript + script + '' }); } function renderPlayerOnboardingLandingPage() { const pageAuthToken = createPageAuthBundle({ scope: 'onboarding' }); + const fontStylesheetHref = getFontStylesheetHref(PLAYER_MEDIA_DIR); return renderPage(getPlayerPageTemplate(), { title: 'Onboard player', bodyClass: 'onboarding-page', body: renderOnboardingLandingBody(), + stylesheets: fontStylesheetHref ? [fontStylesheetHref] : [], script: createPageFetchAuthScript(pageAuthToken) + getPlayerServiceWorkerRegistrationScript() + renderOnboardingLandingScript() }); } function renderPlayerOnboardingFormPage(deviceId) { const pageAuthToken = createPageAuthBundle({ scope: 'onboarding', deviceId: String(deviceId || '').trim() }); + const fontStylesheetHref = getFontStylesheetHref(PLAYER_MEDIA_DIR); return renderPage(getPlayerPageTemplate(), { title: 'Onboard screen', bodyClass: 'onboarding-page', body: renderOnboardingFormBody(deviceId), + stylesheets: fontStylesheetHref ? [fontStylesheetHref] : [], script: createPageFetchAuthScript(pageAuthToken) + getPlayerServiceWorkerRegistrationScript() + renderOnboardingFormScript(deviceId) }); } diff --git a/src/player/routes.js b/src/player/routes.js index 383f825..3f8784f 100644 --- a/src/player/routes.js +++ b/src/player/routes.js @@ -1,3 +1,5 @@ +// Player route registration and filesystem-backed media helpers. + const fs = require('fs'); const express = require('express'); const path = require('path'); @@ -18,6 +20,9 @@ function registerPlayerRoutes(app, options) { const playerRuntime = options && options.playerRuntime ? options.playerRuntime : null; const playerPlaylistService = options && options.playerPlaylistService ? options.playerPlaylistService : null; const rtmpStreamService = options && options.rtmpStreamService ? options.rtmpStreamService : null; + const playerPublicBaseUrl = String(options && options.playerPublicBaseUrl || process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); + const playerInternalBaseUrl = String(options && options.playerInternalBaseUrl || process.env.PLAYER_INTERNAL_BASE_URL || process.env.PLAYER_BASE_URL || '').trim().replace(/\/$/, ''); + const playerIdentifier = String(options && options.playerIdentifier || '1').trim() || '1'; if (!app || !pool || !common || !mediaDir || !assetDir || !playerRuntime || !playerPlaylistService || !rtmpStreamService) { throw new Error('registerPlayerRoutes requires app, pool, common, mediaDir, assetDir, playerRuntime, playerPlaylistService, and rtmpStreamService.'); @@ -75,6 +80,7 @@ function registerPlayerRoutes(app, options) { } app.use('/assets', express.static(assetDir)); + app.use('/assets/adminlte/bootstrap-icons', express.static(path.join(__dirname, '..', 'web', 'public', 'adminlte', 'bootstrap-icons'))); app.use('/media', express.static(mediaDir)); app.use('/assets/vendor', express.static(path.join(__dirname, '..', '..', 'node_modules', 'hls.js', 'dist'))); @@ -207,6 +213,13 @@ function registerPlayerRoutes(app, options) { app.get('/screen/:slug', function (req, res) { res.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); res.set('Pragma', 'no-cache'); + const { bindPlayerToScreen } = require('./onboarding'); + if (playerIdentifier) { + void bindPlayerToScreen(pool, playerIdentifier, req.params.slug) + .catch(function (error) { + console.error(error); + }); + } playerPlaylistService.buildScreenPlaylist(req.params.slug).then(function (data) { res.send(common.renderPlayerPage(req.params.slug, data)); }).catch(function (error) { @@ -273,6 +286,45 @@ function registerPlayerRoutes(app, options) { } }); + app.get('/api/screens/:slug/announcement', requirePageAuth(['player']), async function (req, res, next) { + try { + res.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate'); + const announcement = typeof common.fetchActiveAnnouncement === 'function' + ? await common.fetchActiveAnnouncement(pool, req.params.slug) + : null; + const revision = announcement + ? [announcement.id, announcement.modified_at || '', announcement.expires_at || '', announcement.enabled ? '1' : '0'].join(':') + : 'none'; + const etag = '"' + String(revision || 'none') + '"'; + res.set('ETag', etag); + if (String(req.headers['if-none-match'] || '').split(',').map(function (value) { + return String(value || '').trim(); + }).includes(etag)) { + return res.status(304).end(); + } + res.json({ + announcement: announcement, + revision: revision + }); + } catch (error) { + if (isTransientDbError(error)) { + return res.status(503).json({ error: 'Announcement state unavailable.' }); + } + next(error); + } + }); + + app.post('/api/screens/:slug/announcements/refresh', requireRequestAuth, async function (req, res, next) { + try { + const sent = typeof playerRuntime.broadcastAnnouncementRefresh === 'function' + ? playerRuntime.broadcastAnnouncementRefresh(req.params.slug) + : 0; + res.json({ ok: true, screenSlug: req.params.slug, sent: sent }); + } catch (error) { + next(error); + } + }); + app.get(['/api/screens/:slug/connections', '/api/screens/:slug/clients'], requireRequestAuth, async function (req, res, next) { try { const connections = playerRuntime.snapshotConnections(req.params.slug); diff --git a/src/player/runtime.js b/src/player/runtime.js index 55a71c7..8e8df4e 100644 --- a/src/player/runtime.js +++ b/src/player/runtime.js @@ -1,8 +1,23 @@ +// Player runtime state, websocket connections, and request-auth enforcement. + const crypto = require('crypto'); const { WebSocketServer, WebSocket } = require('ws'); const { isClientNameAvailable } = require('../data/client-name-check'); const { verifyPageAuthToken, verifyRequestAuth } = require('../request-auth'); +function normalizePlayerPublicBaseUrl(pageUrl) { + const value = String(pageUrl || '').trim(); + if (!value) { + return null; + } + + try { + return new URL(value).origin.replace(/\/$/, ''); + } catch (_error) { + return null; + } +} + function createPlayerRuntime(options) { const pool = options && options.pool ? options.pool : null; const normalizeDeviceId = typeof options.normalizeDeviceId === 'function' @@ -12,6 +27,7 @@ function createPlayerRuntime(options) { }; const connectionsBySlug = new Map(); const dashboardListenersBySlug = new Map(); + const announcementListenersBySlug = new Map(); const wss = new WebSocketServer({ noServer: true }); function normalizeClientIp(value) { @@ -72,6 +88,29 @@ function createPlayerRuntime(options) { } } + function getAnnouncementListenerBucket(slug) { + const key = String(slug || '').trim(); + if (!key) { + return null; + } + if (!announcementListenersBySlug.has(key)) { + announcementListenersBySlug.set(key, new Set()); + } + return announcementListenersBySlug.get(key); + } + + function removeAnnouncementListener(slug, socket) { + const key = String(slug || '').trim(); + const bucket = announcementListenersBySlug.get(key); + if (!bucket) { + return; + } + bucket.delete(socket); + if (!bucket.size) { + announcementListenersBySlug.delete(key); + } + } + function buildClientLabel(connection) { const clientName = String(connection.clientName || '').trim(); const clientId = String(connection.clientId || '').trim(); @@ -123,6 +162,7 @@ function createPlayerRuntime(options) { userAgent: connection.userAgent || null, viewport: connection.viewport || null, page: connection.page || null, + playerPublicBaseUrl: connection.playerPublicBaseUrl || null, currentSlide: connection.currentSlide || null, paused: Boolean(connection.paused), blackout: Boolean(connection.blackout), @@ -178,6 +218,30 @@ function createPlayerRuntime(options) { }); } + function broadcastAnnouncementRefresh(slug) { + const key = String(slug || '').trim(); + const bucket = announcementListenersBySlug.get(key); + if (!bucket || !bucket.size) { + return 0; + } + + const payload = JSON.stringify({ + type: 'announcement-refresh', + slug: key, + sentAt: new Date().toISOString() + }); + + let sent = 0; + bucket.forEach(function (socket) { + if (socket.readyState === WebSocket.OPEN) { + socket.send(payload); + sent += 1; + } + }); + + return sent; + } + async function sendCommandToConnection(slug, connectionId, commandOrPayload) { const bucket = connectionsBySlug.get(String(slug || '').trim()); if (!bucket || !bucket.size) { @@ -235,7 +299,9 @@ function createPlayerRuntime(options) { const dashboardMatch = pathname.match(/^\/ws\/screens\/([^/]+)\/events$/); const playerMatch = pathname.match(/^\/ws\/screens\/([^/]+)$/); - if (!dashboardMatch && !playerMatch) { + const announcementMatch = pathname.match(/^\/ws\/screens\/([^/]+)\/announcements$/); + + if (!dashboardMatch && !playerMatch && !announcementMatch) { socket.destroy(); return; } @@ -256,9 +322,18 @@ function createPlayerRuntime(options) { } } - const slug = decodeURIComponent((dashboardMatch || playerMatch)[1]); + if (announcementMatch) { + const authToken = String(new URL(request.url, 'http://localhost').searchParams.get('auth') || '').trim(); + const payload = verifyPageAuthToken(authToken); + if (!payload || String(payload.scope || '').trim() !== 'player') { + socket.destroy(); + return; + } + } + + const slug = decodeURIComponent((dashboardMatch || playerMatch || announcementMatch)[1]); wss.handleUpgrade(request, socket, head, function (ws) { - wss.emit('connection', ws, request, slug, dashboardMatch ? 'dashboard' : 'player'); + wss.emit('connection', ws, request, slug, dashboardMatch ? 'dashboard' : announcementMatch ? 'announcements' : 'player'); }); } @@ -288,6 +363,30 @@ function createPlayerRuntime(options) { return; } + if (role === 'announcements') { + const listenerBucket = getAnnouncementListenerBucket(slug); + if (!listenerBucket) { + socket.close(); + return; + } + + listenerBucket.add(socket); + socket.send(JSON.stringify({ + type: 'announcement-ready', + slug: String(slug || '').trim(), + sentAt: new Date().toISOString() + })); + + socket.on('close', function () { + removeAnnouncementListener(slug, socket); + }); + + socket.on('error', function () { + removeAnnouncementListener(slug, socket); + }); + return; + } + const remoteAddress = request.socket && request.socket.remoteAddress ? request.socket.remoteAddress : null; const forwardedFor = normalizeClientIp(String(request.headers['x-forwarded-for'] || '').split(',')[0]); const normalizedRemoteAddress = normalizeClientIp(remoteAddress); @@ -304,6 +403,7 @@ function createPlayerRuntime(options) { page: null, paused: false, blackout: false, + playerPublicBaseUrl: null, clientIp: forwardedFor || normalizedRemoteAddress, remoteAddress: normalizedRemoteAddress, label: forwardedFor || normalizedRemoteAddress || 'connected client', @@ -341,6 +441,10 @@ function createPlayerRuntime(options) { connection.userAgent = payload.userAgent ? String(payload.userAgent).trim() : connection.userAgent; connection.viewport = payload.viewport && typeof payload.viewport === 'object' ? payload.viewport : connection.viewport; connection.page = payload.page ? String(payload.page).trim() : connection.page; + const nextPlayerPublicBaseUrl = normalizePlayerPublicBaseUrl(payload.page); + if (nextPlayerPublicBaseUrl && nextPlayerPublicBaseUrl !== connection.playerPublicBaseUrl) { + connection.playerPublicBaseUrl = nextPlayerPublicBaseUrl; + } connection.paused = Boolean(payload.paused); connection.blackout = Boolean(payload.blackout); connection.clientIp = payload.clientIp ? normalizeClientIp(payload.clientIp) || connection.clientIp : connection.clientIp; @@ -372,6 +476,7 @@ function createPlayerRuntime(options) { return { installWebsocket: installWebsocket, + broadcastAnnouncementRefresh: broadcastAnnouncementRefresh, snapshotConnections: snapshotConnections, snapshotAllConnections: snapshotAllConnections, isClientNameAvailableOnScreen: isClientNameAvailableOnScreen, diff --git a/src/player/thumbnail-preview.js b/src/player/thumbnail-preview.js index 732997c..0d9d25b 100644 --- a/src/player/thumbnail-preview.js +++ b/src/player/thumbnail-preview.js @@ -1,3 +1,5 @@ +// Thumbnail preview data and bootstrap script helpers for slide thumbnails. + function buildThumbnailPreviewData(slide) { return { thumbnailPreview: true, diff --git a/src/rbac.js b/src/rbac.js index 30a426d..b1c134a 100644 --- a/src/rbac.js +++ b/src/rbac.js @@ -1,3 +1,5 @@ +// Permission section definitions and normalization helpers for RBAC. + const PERMISSION_SECTIONS = [ { key: 'dashboard', @@ -31,6 +33,18 @@ const PERMISSION_SECTIONS = [ { key: 'delete', name: 'Delete', description: 'Delete screens.' } ] }, + { + key: 'announcements', + order: 35, + name: 'Announcements', + sectionName: 'Content', + actions: [ + { key: 'read', name: 'Read', description: 'View announcements.' }, + { key: 'create', name: 'Create', description: 'Create new announcements.' }, + { key: 'update', name: 'Update', description: 'Update announcements.' }, + { key: 'delete', name: 'Delete', description: 'Delete announcements.' } + ] + }, { key: 'playlists', order: 40, @@ -103,6 +117,17 @@ const PERMISSION_SECTIONS = [ { key: 'delete', name: 'Delete', description: 'Delete API sources.' } ] }, + { + key: 'fonts', + order: 95, + name: 'Fonts', + sectionName: 'Settings', + actions: [ + { key: 'read', name: 'Read', description: 'View managed fonts.' }, + { key: 'create', name: 'Create', description: 'Upload managed fonts.' }, + { key: 'delete', name: 'Delete', description: 'Remove managed fonts.' } + ] + }, { key: 'background-tasks', order: 100, @@ -236,15 +261,22 @@ function hasAnyPermission(currentUser, permissionKeys) { }); } -function requirePermission(permissionKey) { +function requirePermission(permissionKey, options) { const normalizedPermissionKey = normalizePermissionKey(permissionKey); if (!normalizedPermissionKey) { throw new Error('requirePermission requires a permission key.'); } + const setAuthMessageCookie = options && options.setAuthMessageCookie; + return function (req, res, next) { if (!req.currentUser) { - return res.redirect('/login?message=' + encodeURIComponent('Please sign in to continue.')); + if (typeof setAuthMessageCookie === 'function') { + setAuthMessageCookie(res, 'Please sign in to continue.'); + return res.redirect('/login'); + } + + return res.redirect('/login'); } if (hasPermission(req.currentUser, normalizedPermissionKey)) { diff --git a/src/request-auth.js b/src/request-auth.js index ac266b3..62c5bf3 100644 --- a/src/request-auth.js +++ b/src/request-auth.js @@ -1,3 +1,5 @@ +// Page and request authentication signing helpers. + const crypto = require('crypto'); const PAGE_TOKEN_HEADER = 'x-pulse-page-auth'; diff --git a/src/web.js b/src/web.js index 911cd2a..85248aa 100644 --- a/src/web.js +++ b/src/web.js @@ -1,32 +1,29 @@ +// Main web application bootstrap, route wiring, and lifecycle setup. + const express = require('express'); const http = require('http'); const multer = require('multer'); const fs = require('fs'); -const path = require('path'); const crypto = require('crypto'); const common = require('./common'); -const { verifyPassword, createSessionToken, hashSessionToken, hashPassword } = require('./auth'); -const pages = require('./web/pages'); -const registerAuthRoutes = require('./web/routes/auth'); -const registerAdminPagesRoutes = require('./web/routes/admin/pages'); -const registerAdminAccountRoutes = require('./web/routes/admin/account'); -const registerAdminUsersRoutes = require('./web/routes/admin/users'); -const registerAdminManageRoutes = require('./web/routes/admin/manage'); -const registerAdminScreenCommandRoutes = require('./web/routes/admin/client-commands'); -const registerAdminContentRoutes = require('./web/routes/admin/content'); -const registerAdminDataSourceRoutes = require('./web/routes/data-sources'); -const registerAdminSettingsRoutes = require('./web/routes/settings/background-tasks'); -const { createBackgroundTaskQueue } = require('./web/lib/background-task-queue'); -const { createBackgroundTaskSetup } = require('./web/lib/background-task-setup'); -const { captureSlideThumbnail } = require('./web/lib/slide-thumbnails'); -const { refreshApiSource, refreshRssFeed } = require('./web/lib/data-source-refresh'); -const { createWebBootstrap } = require('./web/bootstrap'); -const { requirePermission } = require('./rbac'); -const rbacData = require('./web/lib/rbac-data'); -const { createPlayerActionService } = require('./web/lib/player-actions'); -const { isClientNameAvailable, withClientNameReservation } = require('./data/client-name-check'); -const { createSessionService } = require('./web/lib/session'); -const { hasAnyPermission } = require('./rbac'); +const { verifyPassword, createSessionToken, hashSessionToken, hashPassword } = require('#src/auth'); +const pages = require('#src/web/pages'); +const registerMiddleware = require('#src/web/middleware'); +const { createBackgroundTaskQueue } = require('#src/web/lib/background-tasks/queue'); +const { initializeBackgroundTasks } = require('#src/web/lib/background-tasks'); +const { captureSlideThumbnail } = require('#src/web/lib/media'); +const { createWebBootstrap } = require('#src/web/bootstrap'); +const { registerRoutes } = require('#src/web/routes/register'); +const { createNotifyPlayerScreens } = require('#src/web/lib/notify-player-screens'); +const { initializeWebServer } = require('#src/web/lib/web-startup'); +const { createWebConfig } = require('#src/web/lib/config'); +const { requirePermission: createRequirePermission } = require('#src/rbac'); +const { rbacData } = require('#src/web/lib/auth'); +const { createPlayerActionService } = require('#src/web/lib/player-actions'); +const { isClientNameAvailable, withClientNameReservation } = require('#src/data/client-name-check'); +const { createSessionService } = require('#src/web/lib/auth'); +const { hasAnyPermission } = require('#src/rbac'); +const { ensureFontLibrary } = require('#src/web/lib/media/font-library'); const { formatDashboardDate, readArrayField, @@ -41,57 +38,34 @@ const { fetchScreensByTemplateId, fetchOrderedPlaylistSlides, redirectAfterSave -} = require('./web/lib/helpers'); -const PLAYER_INTERNAL_BASE_URL = (process.env.PLAYER_INTERNAL_BASE_URL || process.env.PLAYER_BASE_URL || 'http://player:8081').replace(/\/$/, ''); -const PLAYER_PUBLIC_BASE_URL = (process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || 'http://localhost:8081').replace(/\/$/, ''); -const PLAYER_WS_BASE_URL = PLAYER_INTERNAL_BASE_URL.replace(/^http/, 'ws'); -const SESSION_COOKIE_NAME = 'digital_signage_session'; -const SESSION_MAX_AGE_DAYS = Number(process.env.SESSION_MAX_AGE_DAYS || 14); -const SESSION_MAX_AGE_MS = (Number.isFinite(SESSION_MAX_AGE_DAYS) && SESSION_MAX_AGE_DAYS > 0 ? SESSION_MAX_AGE_DAYS : 14) * 24 * 60 * 60 * 1000; +} = require('#src/web/lib/helpers'); async function start() { + // Core app and filesystem setup. const app = express(); const server = http.createServer(app); const pool = common.createPool(); - const PORT = Number(process.env.WEB_PORT || 8080); - const MEDIA_DIR = path.join(__dirname, '..', 'media'); - const UPLOADS_DIR = path.join(MEDIA_DIR, 'uploads'); - const THUMBNAILS_DIR = path.join(MEDIA_DIR, 'thumbnails'); - const ASSET_DIR = path.join(__dirname, 'web', 'public'); - const WEB_BASE_URL = (process.env.WEB_PUBLIC_BASE_URL || process.env.WEB_BASE_URL || ('http://127.0.0.1:' + PORT)).replace(/\/$/, ''); - const DATA_SOURCE_STARTUP_REFRESH_STAGGER_MS = Math.max(100, Number(process.env.DATA_SOURCE_STARTUP_REFRESH_STAGGER_MS || 250)); + const webConfig = createWebConfig(); + + // Background services and request forwarding helpers. const backgroundTaskQueue = createBackgroundTaskQueue({ pool: pool, maxConcurrent: 1 }); const playerActionService = createPlayerActionService({ + pool: pool, common: common, - playerInternalBaseUrl: PLAYER_INTERNAL_BASE_URL + playerInternalBaseUrl: webConfig.playerInternalBaseUrl }); - const notifyPlayerScreens = function (slugs, commandOrPayload) { - const uniqueSlugs = Array.from(new Set((slugs || []).map(function (slug) { - return String(slug || '').trim(); - }).filter(Boolean))); + const notifyPlayerScreens = createNotifyPlayerScreens(playerActionService.forwardPlayerCommand); - if (!uniqueSlugs.length) { - return Promise.resolve(0); - } - - return Promise.allSettled(uniqueSlugs.map(function (slug) { - return playerActionService.forwardPlayerCommand(slug, commandOrPayload || 'refresh'); - })).then(function (results) { - return results.filter(function (result) { - return result.status === 'fulfilled'; - }).length; - }); - }; + // Centralized dashboard/player bootstrap. const webBootstrap = createWebBootstrap({ pool: pool, common: common, - playerInternalBaseUrl: PLAYER_INTERNAL_BASE_URL, - playerPublicBaseUrl: PLAYER_PUBLIC_BASE_URL, - uploadDir: UPLOADS_DIR, - dashboardRefreshIntervalMs: Number(process.env.DASHBOARD_REFRESH_INTERVAL_MS || 2000), + playerInternalBaseUrl: webConfig.playerInternalBaseUrl, + playerPublicBaseUrl: webConfig.playerPublicBaseUrl, + uploadDir: webConfig.uploadsDir, formatDashboardDate: formatDashboardDate, notifyPlayerScreens: notifyPlayerScreens, backgroundTaskQueue: backgroundTaskQueue, @@ -102,214 +76,80 @@ async function start() { const collectUploadReferencesFromTemplate = webBootstrap.collectUploadReferencesFromTemplate; const collectUploadReferencesFromPayload = webBootstrap.collectUploadReferencesFromPayload; const removeUnusedUploadFiles = webBootstrap.removeUnusedUploadFiles; - const collectUploadPathsFromDirectory = webBootstrap.collectUploadPathsFromDirectory; const syncPlaylistUploadsOnChange = webBootstrap.syncPlaylistUploadsOnChange; - const syncExistingUploadsToPlayer = webBootstrap.syncExistingUploadsToPlayer; - const runMediaSyncTask = webBootstrap.runMediaSyncTask; - const backgroundTaskSetup = createBackgroundTaskSetup({ - pool: pool, - common: common, - backgroundTaskQueue: backgroundTaskQueue, - collectUploadPathsFromDirectory: collectUploadPathsFromDirectory, - removeUnusedUploadFiles: removeUnusedUploadFiles, - captureSlideThumbnail: captureSlideThumbnail, - refreshApiSource: refreshApiSource, - refreshRssFeed: refreshRssFeed, - runMediaSyncTask: runMediaSyncTask, - mediaDir: MEDIA_DIR, - uploadsDir: UPLOADS_DIR, - playerInternalBaseUrl: PLAYER_INTERNAL_BASE_URL, - dataSourceStartupRefreshStaggerMs: DATA_SOURCE_STARTUP_REFRESH_STAGGER_MS - }); + + // Background task initialization. + // Session and auth helpers for route registration. const broadcastDashboardState = webBootstrap.broadcastDashboardState; const sessionService = createSessionService({ - sessionCookieName: SESSION_COOKIE_NAME, - sessionMaxAgeMs: SESSION_MAX_AGE_MS, + sessionCookieName: webConfig.sessionCookieName, + sessionMaxAgeMs: webConfig.sessionMaxAgeMs, hashSessionToken: hashSessionToken, createSessionToken: createSessionToken }); const parseCookies = sessionService.parseCookies; + const createUserSession = sessionService.createUserSession; const clearSessionCookie = sessionService.clearSessionCookie; const setSessionCookie = sessionService.setSessionCookie; + const setAuthMessageCookie = sessionService.setAuthMessageCookie; + const consumeAuthMessageCookie = sessionService.consumeAuthMessageCookie; const loadCurrentUser = sessionService.loadCurrentUser; - const createUserSession = sessionService.createUserSession; const requireAuth = sessionService.requireAuth; - - app.use(express.urlencoded({ extended: true })); - app.use(express.json()); - app.use('/assets', express.static(ASSET_DIR)); - app.use('/assets/vendor/cropperjs', express.static(path.join(__dirname, '..', 'node_modules', 'cropperjs', 'dist'))); - app.use('/media', express.static(MEDIA_DIR)); - fs.mkdirSync(UPLOADS_DIR, { recursive: true }); - fs.mkdirSync(THUMBNAILS_DIR, { recursive: true }); - - app.use(async function (req, _res, next) { - try { - req.currentUser = await loadCurrentUser(pool, req); - next(); - } catch (error) { - next(error); - } - }); - - app.use(function (req, res, next) { - if (req.path === '/' || req.path === '/login' || req.path === '/logout' || req.path.indexOf('/api/internal/slide-thumbnails/') === 0) { - return next(); - } - - return requireAuth(req, res, next); - }); - - registerAuthRoutes(app, { + // Middleware and route registration. + registerMiddleware(app, { pool: pool, + loadCurrentUser: loadCurrentUser, + requireAuth: requireAuth, + MEDIA_DIR: webConfig.mediaDir, + UPLOADS_DIR: webConfig.uploadsDir, + THUMBNAILS_DIR: webConfig.thumbnailsDir, + ASSET_DIR: webConfig.assetDir + }); + + registerRoutes(app, { + pool: pool, + common: common, pages: pages, + upload: upload, + uploadDir: webConfig.uploadsDir, createUserSession: createUserSession, setSessionCookie: setSessionCookie, clearSessionCookie: clearSessionCookie, + setAuthMessageCookie: setAuthMessageCookie, + consumeAuthMessageCookie: consumeAuthMessageCookie, parseCookies: parseCookies, hashSessionToken: hashSessionToken, verifyPassword: verifyPassword, - sessionCookieName: SESSION_COOKIE_NAME - }); - - registerAdminPagesRoutes(app, { - pool: pool, - common: common, - pages: pages, - requirePermission: requirePermission, - buildDashboardState: webBootstrap.buildDashboardState - }); - - registerAdminAccountRoutes(app, { - pool: pool, - common: common, - pages: pages, - formatDashboardDate: formatDashboardDate, - getAuditUserId: getAuditUserId, - verifyPassword: verifyPassword, - hashPassword: hashPassword, - createUserSession: createUserSession, - setSessionCookie: setSessionCookie - }); - - registerAdminUsersRoutes(app, { - pool: pool, - common: common, - pages: pages, + sessionCookieName: webConfig.sessionCookieName, formatDashboardDate: formatDashboardDate, getAuditUserId: getAuditUserId, hashPassword: hashPassword, readArrayField: readArrayField, rbacData: rbacData, - requirePermission: requirePermission - }); - - registerAdminManageRoutes(app, { - pool: pool, - common: common, - pages: pages, fetchOrderedPlaylistSlides: fetchOrderedPlaylistSlides, fetchScreensByPlaylistId: fetchScreensByPlaylistId, + fetchScreensBySlideId: fetchScreensBySlideId, + fetchScreensByTemplateId: fetchScreensByTemplateId, fetchPlaylistCanvasSignature: fetchPlaylistCanvasSignature, getCanvasSignature: getCanvasSignature, normalizeScheduleMode: normalizeScheduleMode, parseDateTimeLocal: parseDateTimeLocal, parseTimeLocal: parseTimeLocal, - readArrayField: readArrayField, - getAuditUserId: getAuditUserId, redirectAfterSave: redirectAfterSave, notifyPlayerScreens: notifyPlayerScreens, broadcastDashboardState: broadcastDashboardState, - getScreenDeleteBlockMessage: playerActionService.getScreenDeleteBlockMessage, - getScreenConnections: playerActionService.getScreenConnections, - getPlaylistDeleteBlockMessage: playerActionService.getPlaylistDeleteBlockMessage, - forwardPlayerCommand: playerActionService.forwardPlayerCommand, - playerPublicBaseUrl: PLAYER_PUBLIC_BASE_URL, - requirePermission: requirePermission - }); - - registerAdminScreenCommandRoutes(app, { - pool: pool, - forwardPlayerCommand: playerActionService.forwardPlayerCommand, - getScreenConnections: playerActionService.getScreenConnections, + playerActionService: playerActionService, isClientNameAvailable: isClientNameAvailable, withClientNameReservation: withClientNameReservation, - broadcastDashboardState: broadcastDashboardState, - requirePermission: requirePermission - }); - - const registerAdminRbacRoutes = require('./web/routes/admin/rbac'); - registerAdminRbacRoutes(app, { - pool: pool, - common: common, - pages: pages, - getAuditUserId: getAuditUserId, - rbacData: rbacData, - readArrayField: readArrayField, - permissions: require('./rbac').PERMISSIONS, - normalizePermissionKeys: require('./rbac').normalizePermissionKeys, - requirePermission: requirePermission - }); - - registerAdminContentRoutes(app, { - pool: pool, - common: common, - pages: pages, - upload: upload, - uploadDir: UPLOADS_DIR, - fetchScreensBySlideId: fetchScreensBySlideId, - fetchScreensByTemplateId: fetchScreensByTemplateId, + requirePermission: createRequirePermission, + hasAnyPermission: hasAnyPermission, + backgroundTaskQueue: backgroundTaskQueue, collectUploadReferencesFromSlide: collectUploadReferencesFromSlide, collectUploadReferencesFromTemplate: collectUploadReferencesFromTemplate, collectUploadReferencesFromPayload: collectUploadReferencesFromPayload, removeUnusedUploadFiles: removeUnusedUploadFiles, syncPlaylistUploadsOnChange: syncPlaylistUploadsOnChange, - getAuditUserId: getAuditUserId, - redirectAfterSave: redirectAfterSave, - notifyPlayerScreens: notifyPlayerScreens, - broadcastDashboardState: broadcastDashboardState, - backgroundTaskQueue: backgroundTaskQueue, - hasAnyPermission: hasAnyPermission, - getSlideDeleteBlockMessage: playerActionService.getSlideDeleteBlockMessage, - getTemplateDeleteBlockMessage: playerActionService.getTemplateDeleteBlockMessage, - getCanvasSizeDeleteBlockMessage: playerActionService.getCanvasSizeDeleteBlockMessage, - requirePermission: requirePermission - }); - - registerAdminDataSourceRoutes(app, { - pool: pool, - common: common, - pages: pages, - formatDashboardDate: formatDashboardDate, - getAuditUserId: getAuditUserId, - redirectAfterSave: redirectAfterSave, - fetchRssFeedItems: common.fetchRssFeedItems, - backgroundTaskQueue: backgroundTaskQueue, - requirePermission: requirePermission - }); - - registerAdminSettingsRoutes(app, { - pages: pages, - backgroundTaskQueue: backgroundTaskQueue - }); - - - app.use(function (req, res, next) { - const pathName = String(req.originalUrl || ''); - const wantsHtml = !pathName.startsWith('/api/') && (!req.accepts || req.accepts('html')); - - if (!wantsHtml) { - return next(); - } - - return res.status(404).send(pages.renderErrorPage({ - statusCode: 404, - title: 'Not found', - errorTitle: 'Oops! Page not found.', - message: 'We could not find the page you were looking for.', - backUrl: req.currentUser ? '/dashboard' : '/login', - backLabel: req.currentUser ? 'Back to dashboard' : 'Sign in' - }, req.currentUser)); + buildDashboardState: webBootstrap.buildDashboardState }); app.use(function (error, req, res, _next) { @@ -343,20 +183,24 @@ async function start() { res.status(statusCode).send(statusCode >= 500 ? 'Internal server error' : String(error && error.message ? error.message : 'Error')); }); - // Ensure schema and mirror media before the web service starts handling traffic. - await common.ensureSchema(pool, { mediaDir: MEDIA_DIR }); - await common.bootstrapDatabase(pool); - await backgroundTaskQueue.initialize(); - await backgroundTaskSetup.initialize(); - - fs.mkdirSync(MEDIA_DIR, { recursive: true }); - await syncExistingUploadsToPlayer(pool, MEDIA_DIR).catch(function (error) { - console.warn('Unable to sync existing media to player:', error); + // Bootstrap and startup tasks. + fs.mkdirSync(webConfig.mediaDir, { recursive: true }); + await ensureFontLibrary(webConfig.mediaDir); + await initializeWebServer({ + common: common, + pool: pool, + mediaDir: webConfig.mediaDir, + backgroundTaskQueue: backgroundTaskQueue, + webBootstrap: webBootstrap, + loadCurrentUser: loadCurrentUser, + initializeBackgroundTasks: initializeBackgroundTasks, + captureSlideThumbnail: captureSlideThumbnail, + server: server, + dataSourceStartupRefreshStaggerMs: webConfig.dataSourceStartupRefreshStaggerMs }); - webBootstrap.installDashboardWebsocket(server, loadCurrentUser); - server.listen(PORT, function () { - console.log(`Pulse Signage app listening on port ${PORT}`); + server.listen(webConfig.port, function () { + console.log(`Pulse Signage app listening on port ${webConfig.port}`); }); } diff --git a/src/web/bootstrap.js b/src/web/bootstrap.js index abe04c3..3a77c77 100644 --- a/src/web/bootstrap.js +++ b/src/web/bootstrap.js @@ -1,15 +1,17 @@ +// Web-to-player websocket bridge and dashboard state synchronizer. + const { WebSocketServer, WebSocket } = require('ws'); const { createDashboardStateService } = require('./lib/dashboard-state'); -const { createUploadSyncService } = require('./lib/upload-sync'); +const { createUploadSyncService } = require('./lib/media'); const { createRequestAuthHeaders } = require('../request-auth'); function createWebBootstrap(options) { const pool = options && options.pool; const common = options && options.common; - const playerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').replace(/\/$/, ''); + const configuredPlayerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').replace(/\/$/, ''); const playerPublicBaseUrl = String(options && options.playerPublicBaseUrl || '').replace(/\/$/, ''); const uploadDir = String(options && options.uploadDir || '').trim(); - const dashboardRefreshIntervalMs = Number(options && options.dashboardRefreshIntervalMs || 2000); + const dashboardRefreshIntervalMs = 5000; const formatDashboardDate = options && options.formatDashboardDate; const notifyPlayerScreens = options && options.notifyPlayerScreens; const backgroundTaskQueue = options && options.backgroundTaskQueue; @@ -24,9 +26,54 @@ function createWebBootstrap(options) { const playerSnapshotSockets = new Map(); let dashboardRefreshInFlight = null; let broadcastDashboardState = null; + let playerInternalBaseUrl = null; + let playerInternalBaseUrlPromise = null; - function getPlayerSnapshotSocketUrl(slug) { - const url = new URL(playerInternalBaseUrl.replace(/^http/, 'ws')); + async function getPlayerInternalBaseUrl() { + if (playerInternalBaseUrl) { + return playerInternalBaseUrl; + } + + if (playerInternalBaseUrlPromise) { + return playerInternalBaseUrlPromise; + } + + playerInternalBaseUrlPromise = (async function () { + if (!pool) { + return configuredPlayerInternalBaseUrl || null; + } + + try { + const [rows] = await pool.query( + `SELECT internal_base_url + FROM d_players + WHERE device_id = '1' + LIMIT 1` + ); + const resolvedBaseUrl = String(rows && rows[0] && rows[0].internal_base_url || '').trim().replace(/\/$/, ''); + return resolvedBaseUrl || configuredPlayerInternalBaseUrl || null; + } catch (_error) { + return configuredPlayerInternalBaseUrl || null; + } + })().then(function (baseUrl) { + playerInternalBaseUrl = baseUrl || null; + playerInternalBaseUrlPromise = null; + return playerInternalBaseUrl; + }, function () { + playerInternalBaseUrlPromise = null; + return configuredPlayerInternalBaseUrl || null; + }); + + return playerInternalBaseUrlPromise; + } + + async function getPlayerSnapshotSocketUrl(slug) { + const resolvedPlayerInternalBaseUrl = await getPlayerInternalBaseUrl(); + if (!resolvedPlayerInternalBaseUrl) { + throw new Error('Unable to resolve the player internal base URL.'); + } + + const url = new URL(resolvedPlayerInternalBaseUrl.replace(/^http/, 'ws')); url.pathname = `/ws/screens/${encodeURIComponent(slug)}/events`; url.search = ''; return url.toString(); @@ -53,47 +100,53 @@ function createWebBootstrap(options) { return; } - const socketUrl = getPlayerSnapshotSocketUrl(key); + playerSnapshotSockets.set(key, null); + const socketUrlPromise = getPlayerSnapshotSocketUrl(key); const authHeaders = createRequestAuthHeaders({ method: 'GET', pathname: `/ws/screens/${encodeURIComponent(key)}/events` }); - const socket = new WebSocket(socketUrl, { - headers: authHeaders - }); - playerSnapshotSockets.set(key, socket); + socketUrlPromise.then(function (socketUrl) { + const socket = new WebSocket(socketUrl, { + headers: authHeaders + }); + playerSnapshotSockets.set(key, socket); - socket.onmessage = function (event) { - try { - const payload = JSON.parse(String(event.data || '{}')); - if (!payload || payload.type !== 'snapshot' || payload.slug !== key) { - return; + socket.onmessage = function (event) { + try { + const payload = JSON.parse(String(event.data || '{}')); + if (!payload || payload.type !== 'snapshot' || payload.slug !== key) { + return; + } + storePlayerSnapshot(key, payload.connections || []); + if (broadcastDashboardState) { + broadcastDashboardState().catch(function (error) { + console.error(error); + }); + } + } catch (_error) { + // Ignore malformed player snapshot payloads. } - storePlayerSnapshot(key, payload.connections || []); - if (broadcastDashboardState) { - broadcastDashboardState().catch(function (error) { - console.error(error); - }); - } - } catch (_error) { - // Ignore malformed player snapshot payloads. - } - }; + }; - socket.onclose = function () { + socket.onclose = function () { + clearPlayerSnapshotSocket(key); + setTimeout(function () { + ensurePlayerSnapshotSubscription(key); + }, 2000); + }; + + socket.onerror = function () { + try { + socket.close(); + } catch (_error) { + // ignore close errors + } + }; + }).catch(function (error) { clearPlayerSnapshotSocket(key); - setTimeout(function () { - ensurePlayerSnapshotSubscription(key); - }, 2000); - }; - - socket.onerror = function () { - try { - socket.close(); - } catch (_error) { - // ignore close errors - } - }; + console.error(error); + }); } const dashboardStateService = createDashboardStateService({ @@ -110,7 +163,7 @@ function createWebBootstrap(options) { const uploadSyncService = createUploadSyncService({ pool: pool, common: common, - playerInternalBaseUrl: playerInternalBaseUrl, + playerInternalBaseUrl: configuredPlayerInternalBaseUrl, playerSnapshotCache: playerSnapshotCache, notifyPlayerScreens: notifyPlayerScreens, backgroundTaskQueue: backgroundTaskQueue @@ -123,7 +176,6 @@ function createWebBootstrap(options) { const removeUnusedUploadFiles = uploadSyncService.removeUnusedUploadFiles; const collectUploadPathsFromDirectory = uploadSyncService.collectUploadPathsFromDirectory; const syncPlaylistUploadsOnChange = uploadSyncService.syncPlaylistUploadsOnChange; - const syncExistingUploadsToPlayer = uploadSyncService.syncExistingUploadsToPlayer; const runMediaSyncTask = uploadSyncService.runMediaSyncTask; async function sendDashboardStateToSocket(socket) { @@ -208,6 +260,7 @@ function createWebBootstrap(options) { return { upload: upload, + uploadSyncService: uploadSyncService, buildDashboardState: buildDashboardState, collectUploadReferencesFromSlide: collectUploadReferencesFromSlide, collectUploadReferencesFromTemplate: collectUploadReferencesFromTemplate, @@ -215,7 +268,6 @@ function createWebBootstrap(options) { removeUnusedUploadFiles: removeUnusedUploadFiles, collectUploadPathsFromDirectory: collectUploadPathsFromDirectory, syncPlaylistUploadsOnChange: syncPlaylistUploadsOnChange, - syncExistingUploadsToPlayer: syncExistingUploadsToPlayer, runMediaSyncTask: runMediaSyncTask, broadcastDashboardState: broadcastDashboardState, installDashboardWebsocket: installDashboardWebsocket diff --git a/src/web/handlebars.js b/src/web/handlebars.js new file mode 100644 index 0000000..9e0d42c --- /dev/null +++ b/src/web/handlebars.js @@ -0,0 +1,144 @@ +const fs = require('fs'); +const path = require('path'); + +// General-purpose helpers used across the admin UI. +function registerGeneralHelpers(Handlebars) { + Handlebars.registerHelper('eq', function (left, right) { + return left === right; + }); + + Handlebars.registerHelper('gt', function (left, right) { + return left > right; + }); + + Handlebars.registerHelper('lt', function (left, right) { + return left < right; + }); + + Handlebars.registerHelper('json', function (value) { + return new Handlebars.SafeString(JSON.stringify(value).replace(/', + ``, + hasSecondaryActions ? `` : '', + hasSecondaryActions ? '' : '', + '', + ].join('')); + }); +} + +// Shared partials are registered once at startup. +function registerPartials(Handlebars, viewsRoot) { + Handlebars.registerPartial('modal-shell', fs.readFileSync(path.join(viewsRoot, 'shared', 'modal-shell.hbs'), 'utf8')); + Handlebars.registerPartial('table-pagination', fs.readFileSync(path.join(viewsRoot, 'shared', 'table', 'table-pagination.hbs'), 'utf8')); +} + +// One entry point keeps Handlebars bootstrap centralized. +function registerHandlebars(Handlebars, deps) { + const viewsRoot = String(deps && deps.viewsRoot || '').trim(); + const hasPermission = deps && deps.hasPermission; + const hasAnyPermission = deps && deps.hasAnyPermission; + + if (!Handlebars || !viewsRoot || typeof hasPermission !== 'function' || typeof hasAnyPermission !== 'function') { + throw new Error('registerHandlebars requires Handlebars, viewsRoot, hasPermission, and hasAnyPermission.'); + } + + registerGeneralHelpers(Handlebars); + registerUrlHelpers(Handlebars); + registerPermissionHelpers(Handlebars, { hasPermission: hasPermission, hasAnyPermission: hasAnyPermission }); + registerUserHelpers(Handlebars); + registerActionHelpers(Handlebars); + registerPartials(Handlebars, viewsRoot); +} + +module.exports = { + registerHandlebars: registerHandlebars +}; \ No newline at end of file diff --git a/src/web/lib/auth/index.js b/src/web/lib/auth/index.js new file mode 100644 index 0000000..ed712bb --- /dev/null +++ b/src/web/lib/auth/index.js @@ -0,0 +1,6 @@ +// Entry point for the web auth helper modules. + +module.exports = { + createSessionService: require('./session').createSessionService, + rbacData: require('./rbac-data') +}; \ No newline at end of file diff --git a/src/web/lib/rbac-data.js b/src/web/lib/auth/rbac-data.js similarity index 97% rename from src/web/lib/rbac-data.js rename to src/web/lib/auth/rbac-data.js index a8fd585..7c8706f 100644 --- a/src/web/lib/rbac-data.js +++ b/src/web/lib/auth/rbac-data.js @@ -1,5 +1,7 @@ -const { PERMISSIONS, normalizePermissionKeys } = require('../../rbac'); -const { fetchPagedRows } = require('../../data/utils'); +// RBAC data access helpers for roles, permissions, and user-role links. + +const { PERMISSIONS, normalizePermissionKeys } = require('#src/rbac'); +const { fetchPagedRows } = require('#src/data/utils'); function parseCsvIds(value) { return String(value || '') diff --git a/src/web/lib/session.js b/src/web/lib/auth/session.js similarity index 73% rename from src/web/lib/session.js rename to src/web/lib/auth/session.js index edf48a1..61eda43 100644 --- a/src/web/lib/session.js +++ b/src/web/lib/auth/session.js @@ -1,10 +1,13 @@ -const { normalizePermissionKeys } = require('../../rbac'); +// Session cookie and current-user helpers for the web auth flow. + +const { normalizePermissionKeys } = require('#src/rbac'); function createSessionService(options) { const sessionCookieName = String(options && options.sessionCookieName || '').trim(); const sessionMaxAgeMs = Number(options && options.sessionMaxAgeMs); const hashSessionToken = options && options.hashSessionToken; const createSessionToken = options && options.createSessionToken; + const authMessageCookieName = 'pulse_auth_message'; if (!sessionCookieName || !Number.isFinite(sessionMaxAgeMs) || typeof hashSessionToken !== 'function' || typeof createSessionToken !== 'function') { throw new Error('createSessionService requires the session dependencies.'); @@ -39,12 +42,37 @@ function createSessionService(options) { return parts.join('; '); } + function appendCookieHeader(res, cookieValue) { + const existingCookieHeader = res.getHeader('Set-Cookie'); + if (!existingCookieHeader) { + res.setHeader('Set-Cookie', cookieValue); + return; + } + + const cookies = Array.isArray(existingCookieHeader) ? existingCookieHeader.slice() : [existingCookieHeader]; + cookies.push(cookieValue); + res.setHeader('Set-Cookie', cookies); + } + function clearSessionCookie(res) { - res.setHeader('Set-Cookie', serializeCookie(sessionCookieName, '', { maxAge: 0 })); + appendCookieHeader(res, serializeCookie(sessionCookieName, '', { maxAge: 0 })); } function setSessionCookie(res, token) { - res.setHeader('Set-Cookie', serializeCookie(sessionCookieName, token, { maxAge: sessionMaxAgeMs })); + appendCookieHeader(res, serializeCookie(sessionCookieName, token, { maxAge: sessionMaxAgeMs })); + } + + function setAuthMessageCookie(res, message) { + appendCookieHeader(res, serializeCookie(authMessageCookieName, message, { maxAge: 60 * 1000 })); + } + + function consumeAuthMessageCookie(req, res) { + const cookies = parseCookies(req.headers.cookie || ''); + const message = String(cookies[authMessageCookieName] || '').trim(); + if (message) { + appendCookieHeader(res, serializeCookie(authMessageCookieName, '', { maxAge: 0 })); + } + return message; } async function loadCurrentUser(pool, req) { @@ -113,7 +141,8 @@ function createSessionService(options) { if (req.currentUser) { return next(); } - res.redirect('/login?message=' + encodeURIComponent('Please sign in to continue.')); + setAuthMessageCookie(res, 'Please sign in to continue.'); + res.redirect('/login'); } return { @@ -121,6 +150,8 @@ function createSessionService(options) { serializeCookie: serializeCookie, clearSessionCookie: clearSessionCookie, setSessionCookie: setSessionCookie, + setAuthMessageCookie: setAuthMessageCookie, + consumeAuthMessageCookie: consumeAuthMessageCookie, loadCurrentUser: loadCurrentUser, createUserSession: createUserSession, requireAuth: requireAuth diff --git a/src/web/lib/background-task-handlers.js b/src/web/lib/background-task-handlers.js deleted file mode 100644 index 69e5500..0000000 --- a/src/web/lib/background-task-handlers.js +++ /dev/null @@ -1,93 +0,0 @@ -function registerBackgroundTaskHandlers(options) { - const pool = options && options.pool; - const common = options && options.common; - const backgroundTaskQueue = options && options.backgroundTaskQueue; - const captureSlideThumbnail = options && options.captureSlideThumbnail; - const refreshApiSource = options && options.refreshApiSource; - const refreshRssFeed = options && options.refreshRssFeed; - const runMediaSyncTask = options && options.runMediaSyncTask; - const mediaDir = String(options && options.mediaDir || '').trim(); - const playerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').trim(); - - if (!pool || !common || !backgroundTaskQueue || !captureSlideThumbnail || !refreshApiSource || !refreshRssFeed || !runMediaSyncTask || !mediaDir || !playerInternalBaseUrl) { - throw new Error('registerBackgroundTaskHandlers requires the background task dependencies.'); - } - - backgroundTaskQueue.setTaskHandler('media-sync', function (task) { - return runMediaSyncTask(task && task.payload ? task.payload : task); - }); - - backgroundTaskQueue.setTaskHandler('data-source-refresh', async function (task) { - const payload = task && task.payload ? task.payload : {}; - const sourceType = String(payload.sourceType || '').trim(); - const sourceId = Number(payload.sourceId || 0); - - if (sourceType === 'api-source') { - const apiSource = await common.fetchApiSourceById(pool, sourceId); - if (!apiSource) { - throw new Error('API source not found.'); - } - return refreshApiSource(pool, common, apiSource.id, apiSource.api_url, Number(payload.actorId) || null); - } - - if (sourceType === 'rss-feed') { - const rssFeed = await common.fetchRssFeedById(pool, sourceId); - if (!rssFeed) { - throw new Error('RSS feed not found.'); - } - return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, Number(payload.actorId) || null); - } - - throw new Error('Unsupported data source refresh task.'); - }); - - backgroundTaskQueue.setTaskHandler('slide-thumbnail-refresh', async function (task) { - const payload = task && task.payload ? task.payload : {}; - const slideId = Number(payload.slideId || 0); - if (!Number.isFinite(slideId) || slideId <= 0) { - throw new Error('Slide id is required.'); - } - - return captureSlideThumbnail({ - pool: pool, - common: common, - mediaDir: mediaDir, - baseUrl: playerInternalBaseUrl, - slideId: slideId, - previousThumbnailPath: payload.previousThumbnailPath || null - }); - }); - - backgroundTaskQueue.setTaskHandler('template-slide-thumbnail-refresh', async function (task) { - const payload = task && task.payload ? task.payload : {}; - const templateId = Number(payload.templateId || 0); - if (!Number.isFinite(templateId) || templateId <= 0) { - throw new Error('Template id is required.'); - } - - const [slides] = await pool.query( - 'SELECT id, thumbnail_path FROM c_slides WHERE template_id = ? ORDER BY id ASC', - [templateId] - ); - - for (const slide of slides || []) { - const slideId = Number(slide && slide.id || 0); - if (!Number.isFinite(slideId) || slideId <= 0) { - continue; - } - - await captureSlideThumbnail({ - pool: pool, - common: common, - mediaDir: mediaDir, - baseUrl: playerInternalBaseUrl, - slideId: slideId, - previousThumbnailPath: slide && slide.thumbnail_path ? slide.thumbnail_path : null - }); - } - - return { templateId: templateId, slideCount: Array.isArray(slides) ? slides.length : 0 }; - }); -} - -module.exports = { registerBackgroundTaskHandlers }; \ No newline at end of file diff --git a/src/web/lib/background-task-queue.js b/src/web/lib/background-task-queue.js deleted file mode 100644 index 2cda656..0000000 --- a/src/web/lib/background-task-queue.js +++ /dev/null @@ -1,774 +0,0 @@ -function normalizeText(value) { - return String(value || '').trim(); -} - -function toIsoDate(value) { - if (!value) { - return ''; - } - - const date = value instanceof Date ? value : new Date(value); - return Number.isNaN(date.getTime()) ? '' : date.toISOString(); -} - -function normalizeIntervalMs(value, unit) { - const numericValue = Math.max(1, Number(value) || 0); - const normalizedUnit = String(unit || 'minutes').trim().toLowerCase(); - if (normalizedUnit === 'seconds') { - return numericValue * 1000; - } - return numericValue * 60 * 1000; -} - -function createBackgroundTaskQueue(options) { - const pool = options && options.pool; - const maxConcurrent = Math.max(1, Number(options && options.maxConcurrent) || 1); - const taskHandlers = new Map(); - const tasksById = new Map(); - const recurringJobsByKey = new Map(); - const taskIdToRecurringKey = new Map(); - const pendingIds = []; - let nextTaskId = 1; - let activeCount = 0; - let drainScheduled = false; - let initializationPromise = null; - - function createTaskCompletionController() { - let resolveCompletion = null; - let rejectCompletion = null; - const completionPromise = new Promise(function (resolve, reject) { - resolveCompletion = resolve; - rejectCompletion = reject; - }); - - return { - promise: completionPromise, - resolve: resolveCompletion, - reject: rejectCompletion - }; - } - - function parseJsonValue(value, fallback) { - if (value === null || value === undefined || value === '') { - return fallback; - } - - if (typeof value === 'object') { - return value; - } - - try { - return JSON.parse(String(value)); - } catch (_error) { - return fallback; - } - } - - function stringifyJsonValue(value) { - if (value === undefined || value === null) { - return null; - } - - return JSON.stringify(value); - } - - function buildSnapshot(task) { - return { - id: task.id, - key: task.key, - taskType: task.taskType || '', - title: task.title, - category: task.category, - status: task.status, - createdAt: task.createdAt, - startedAt: task.startedAt, - finishedAt: task.finishedAt, - errorMessage: task.errorMessage, - attempts: task.attempts || 0, - metadata: task.metadata, - payload: task.payload || null - }; - } - - function getTaskById(taskId) { - const numericTaskId = Number(taskId); - if (!Number.isFinite(numericTaskId) || numericTaskId <= 0) { - return null; - } - - return tasksById.get(numericTaskId) || null; - } - - function buildTaskFromRow(row) { - const task = { - id: Number(row.id), - key: String(row.task_key || '').trim(), - taskType: String(row.task_type || '').trim(), - title: String(row.title || 'Background task').trim() || 'Background task', - category: String(row.category || 'general').trim() || 'general', - status: String(row.status || 'queued').trim() || 'queued', - createdAt: row.created_at ? new Date(row.created_at).toISOString() : '', - startedAt: row.started_at ? new Date(row.started_at).toISOString() : '', - finishedAt: row.finished_at ? new Date(row.finished_at).toISOString() : '', - errorMessage: String(row.error_message || ''), - attempts: Math.max(0, Number(row.attempts) || 0), - metadata: parseJsonValue(row.metadata_json, {}), - payload: parseJsonValue(row.payload_json, null), - completionPromise: null, - resolveCompletion: null, - rejectCompletion: null, - persisted: true, - run: typeof row.run === 'function' ? row.run : function () { - return Promise.resolve(); - } - }; - - const completionController = createTaskCompletionController(); - task.completionPromise = completionController.promise; - task.resolveCompletion = completionController.resolve; - task.rejectCompletion = completionController.reject; - return task; - } - - function buildTaskRecord(task) { - return { - task_key: task.key || null, - task_type: task.taskType || 'general', - title: task.title, - category: task.category || 'general', - status: task.status, - payload_json: stringifyJsonValue(task.payload), - metadata_json: stringifyJsonValue(task.metadata), - attempts: Math.max(0, Number(task.attempts) || 0), - created_at: task.createdAt ? new Date(task.createdAt) : new Date(), - started_at: task.startedAt ? new Date(task.startedAt) : null, - finished_at: task.finishedAt ? new Date(task.finishedAt) : null, - error_message: task.errorMessage || null - }; - } - - async function persistTaskInsert(task) { - if (!pool || !task.taskType) { - return task; - } - - const record = buildTaskRecord(task); - const [result] = await pool.query( - `INSERT INTO o_background_tasks ( - task_key, - task_type, - title, - category, - status, - payload_json, - metadata_json, - attempts, - created_at, - started_at, - finished_at, - error_message - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, - [ - record.task_key, - record.task_type, - record.title, - record.category, - record.status, - record.payload_json, - record.metadata_json, - record.attempts, - record.created_at, - record.started_at, - record.finished_at, - record.error_message - ] - ); - - task.id = Number(result.insertId); - task.persisted = true; - return task; - } - - async function persistTaskUpdate(task) { - if (!pool || !task.persisted) { - return; - } - - const record = buildTaskRecord(task); - await pool.query( - `UPDATE o_background_tasks - SET task_key = ?, task_type = ?, title = ?, category = ?, status = ?, payload_json = ?, metadata_json = ?, attempts = ?, started_at = ?, finished_at = ?, error_message = ? - WHERE id = ?`, - [ - record.task_key, - record.task_type, - record.title, - record.category, - record.status, - record.payload_json, - record.metadata_json, - record.attempts, - record.started_at, - record.finished_at, - record.error_message, - task.id - ] - ); - } - - async function persistTaskDelete(taskId) { - if (!pool) { - return; - } - - await pool.query('DELETE FROM o_background_tasks WHERE id = ?', [taskId]); - } - - async function initialize() { - if (initializationPromise) { - return initializationPromise; - } - - initializationPromise = (async function () { - if (!pool) { - return; - } - - const [rows] = await pool.query( - 'SELECT id, task_key, task_type, title, category, status, payload_json, metadata_json, attempts, created_at, started_at, finished_at, error_message FROM o_background_tasks ORDER BY id ASC' - ); - - let highestTaskId = 0; - for (const row of rows || []) { - const task = buildTaskFromRow(row); - if (!Number.isInteger(task.id) || task.id <= 0) { - continue; - } - - highestTaskId = Math.max(highestTaskId, task.id); - tasksById.set(task.id, task); - - if (task.status === 'running') { - task.status = 'queued'; - task.startedAt = ''; - task.finishedAt = ''; - task.errorMessage = ''; - await pool.query( - 'UPDATE o_background_tasks SET status = ?, started_at = NULL, finished_at = NULL, error_message = NULL WHERE id = ?', - ['queued', task.id] - ); - } - - if (task.status === 'queued' || task.status === 'running') { - pendingIds.push(task.id); - } - } - - nextTaskId = Math.max(nextTaskId, highestTaskId + 1); - if (pendingIds.length) { - scheduleDrain(); - } - })(); - - return initializationPromise; - } - - function scheduleDrain() { - if (drainScheduled) { - return; - } - - drainScheduled = true; - setTimeout(function () { - drainScheduled = false; - processQueue(); - }, 0); - } - - function clearRecurringTimer(job) { - if (job && job.timerId) { - clearTimeout(job.timerId); - job.timerId = null; - } - } - - function setTaskHandler(taskType, handler) { - const normalizedTaskType = normalizeText(taskType); - if (!normalizedTaskType || typeof handler !== 'function') { - return false; - } - - taskHandlers.set(normalizedTaskType, handler); - return true; - } - - function scheduleRecurringRun(job, delayMs) { - if (!job || job.enabled === false) { - return; - } - - clearRecurringTimer(job); - const safeDelay = Math.max(1, Number(delayMs) || job.intervalMs || 0); - job.nextRunAt = toIsoDate(new Date(Date.now() + safeDelay)); - job.timerId = setTimeout(function () { - job.timerId = null; - triggerRecurringJob(job.key); - }, safeDelay); - } - - function triggerRecurringJob(recurringKey) { - const job = recurringJobsByKey.get(recurringKey); - if (!job || job.enabled === false) { - return; - } - - if (job.activeTaskId && tasksById.has(job.activeTaskId)) { - scheduleRecurringRun(job, job.intervalMs); - return; - } - - job.activeTaskId = -1; - enqueueTask({ - key: `${job.key}:${Date.now()}`, - title: job.title, - category: job.category, - taskType: job.taskType || '', - metadata: Object.assign({}, job.metadata || {}, { - recurringKey: job.key, - recurringTitle: job.title - }), - payload: Object.assign({}, job.payload || {}, { - recurringKey: job.key - }), - run: job.run, - persist: Boolean(job.taskType) - }).then(function (task) { - if (task && Number.isInteger(task.id)) { - job.activeTaskId = task.id; - taskIdToRecurringKey.set(task.id, job.key); - } else { - job.activeTaskId = null; - } - }).catch(function (error) { - job.activeTaskId = null; - console.error(error); - }); - - scheduleRecurringRun(job, job.intervalMs); - } - - function runRecurringTask(recurringKey) { - const normalizedKey = normalizeText(recurringKey); - if (!normalizedKey || !recurringJobsByKey.has(normalizedKey)) { - return false; - } - - triggerRecurringJob(normalizedKey); - return true; - } - - function syncRecurringTaskState(task, status, errorMessage) { - const recurringKey = taskIdToRecurringKey.get(task.id) || (task && task.metadata && task.metadata.recurringKey); - if (!recurringKey) { - return; - } - - const job = recurringJobsByKey.get(recurringKey); - if (!job) { - taskIdToRecurringKey.delete(task.id); - return; - } - - job.activeTaskId = null; - job.lastRunAt = toIsoDate(new Date()); - job.lastStatus = status; - job.lastError = errorMessage ? String(errorMessage) : ''; - taskIdToRecurringKey.delete(task.id); - } - - async function processQueue() { - while (activeCount < maxConcurrent) { - const nextTaskId = pendingIds.shift(); - if (!nextTaskId) { - break; - } - - const task = tasksById.get(nextTaskId); - if (!task || task.status !== 'queued') { - continue; - } - - activeCount += 1; - task.status = 'running'; - task.startedAt = toIsoDate(new Date()); - task.errorMessage = ''; - task.attempts = Math.max(0, Number(task.attempts) || 0) + 1; - - try { - await persistTaskUpdate(task); - } catch (error) { - task.status = 'failed'; - task.errorMessage = String(error && error.message ? error.message : 'Unable to update task state.'); - task.finishedAt = toIsoDate(new Date()); - if (typeof task.rejectCompletion === 'function') { - const completionError = new Error(task.errorMessage); - completionError.task = buildSnapshot(task); - task.rejectCompletion(completionError); - } - activeCount = Math.max(0, activeCount - 1); - scheduleDrain(); - continue; - } - - Promise.resolve() - .then(function () { - if (task.taskType) { - const handler = taskHandlers.get(task.taskType); - if (!handler) { - throw new Error('No handler registered for task type ' + task.taskType + '.'); - } - - return handler({ - id: task.id, - key: task.key, - title: task.title, - category: task.category, - taskType: task.taskType, - payload: task.payload, - metadata: task.metadata, - attempts: task.attempts - }); - } - - return task.run({ - id: task.id, - key: task.key, - title: task.title, - category: task.category, - metadata: task.metadata - }); - }) - .then(function () { - task.status = 'completed'; - task.finishedAt = toIsoDate(new Date()); - if (typeof task.resolveCompletion === 'function') { - task.resolveCompletion(buildSnapshot(task)); - } - syncRecurringTaskState(task, task.status, ''); - return persistTaskUpdate(task); - }) - .catch(function (error) { - task.status = 'failed'; - task.errorMessage = String(error && error.message ? error.message : 'Background task failed.'); - task.finishedAt = toIsoDate(new Date()); - if (typeof task.rejectCompletion === 'function') { - const completionError = new Error(task.errorMessage); - completionError.task = buildSnapshot(task); - task.rejectCompletion(completionError); - } - syncRecurringTaskState(task, task.status, task.errorMessage); - return persistTaskUpdate(task); - }) - .finally(function () { - activeCount = Math.max(0, activeCount - 1); - scheduleDrain(); - }); - } - } - - async function enqueueTask(definition) { - const normalizedKey = normalizeText(definition && definition.key); - const normalizedTitle = normalizeText(definition && definition.title) || 'Background task'; - const normalizedTaskType = normalizeText(definition && definition.taskType); - const shouldPersist = Boolean((definition && definition.persist) || (pool && normalizedTaskType)); - const existingTask = normalizedKey - ? Array.from(tasksById.values()).find(function (task) { - return task.key === normalizedKey && task.status === 'queued' && (!normalizedTaskType || task.taskType === normalizedTaskType); - }) - : null; - - if (existingTask) { - existingTask.title = normalizedTitle; - existingTask.category = normalizeText(definition && definition.category) || existingTask.category || 'general'; - existingTask.metadata = definition && definition.metadata ? definition.metadata : {}; - existingTask.taskType = normalizedTaskType || existingTask.taskType || ''; - existingTask.payload = definition && definition.payload !== undefined ? definition.payload : existingTask.payload; - existingTask.run = typeof definition.run === 'function' ? definition.run : existingTask.run; - existingTask.createdAt = toIsoDate(new Date()); - existingTask.errorMessage = ''; - existingTask.persisted = existingTask.persisted || shouldPersist; - await persistTaskUpdate(existingTask); - return buildSnapshot(existingTask); - } - - const task = { - id: shouldPersist ? 0 : nextTaskId, - key: normalizedKey, - taskType: normalizedTaskType, - title: normalizedTitle, - category: normalizeText(definition && definition.category) || 'general', - status: 'queued', - createdAt: toIsoDate(new Date()), - startedAt: '', - finishedAt: '', - errorMessage: '', - attempts: 0, - metadata: definition && definition.metadata ? definition.metadata : {}, - payload: definition && definition.payload !== undefined ? definition.payload : null, - persisted: shouldPersist, - run: typeof definition.run === 'function' ? definition.run : function () { - return Promise.resolve(); - }, - completionPromise: null, - resolveCompletion: null, - rejectCompletion: null - }; - - const completionController = createTaskCompletionController(); - task.completionPromise = completionController.promise; - task.resolveCompletion = completionController.resolve; - task.rejectCompletion = completionController.reject; - - if (shouldPersist) { - await persistTaskInsert(task); - } else { - nextTaskId += 1; - } - - tasksById.set(task.id, task); - pendingIds.push(task.id); - scheduleDrain(); - return buildSnapshot(task); - } - - function registerRecurringTask(definition) { - const normalizedKey = normalizeText(definition && definition.key); - if (!normalizedKey) { - throw new Error('Recurring tasks require a key.'); - } - - const intervalMs = Math.max(1000, Number(definition && definition.intervalMs) || 0); - if (!Number.isFinite(intervalMs) || intervalMs < 1000) { - throw new Error('Recurring tasks require a valid interval.'); - } - - const job = recurringJobsByKey.get(normalizedKey) || { - key: normalizedKey, - activeTaskId: null, - lastRunAt: '', - lastStatus: '', - lastError: '', - nextRunAt: '', - timerId: null, - enabled: true - }; - - clearRecurringTimer(job); - job.title = normalizeText(definition && definition.title) || 'Background task'; - job.category = normalizeText(definition && definition.category) || 'general'; - job.intervalMs = intervalMs; - job.metadata = definition && definition.metadata ? definition.metadata : {}; - job.run = typeof definition.run === 'function' ? definition.run : function () { - return Promise.resolve(); - }; - job.enabled = definition && definition.enabled === false ? false : true; - recurringJobsByKey.set(normalizedKey, job); - - if (job.enabled) { - scheduleRecurringRun(job, intervalMs); - } - - return buildRecurringSnapshot(job); - } - - function removeRecurringTask(recurringKey) { - const normalizedKey = normalizeText(recurringKey); - const job = recurringJobsByKey.get(normalizedKey); - if (!job) { - return false; - } - - clearRecurringTimer(job); - recurringJobsByKey.delete(normalizedKey); - return true; - } - - function buildRecurringSnapshot(job) { - return { - key: job.key, - title: job.title, - category: job.category, - intervalMs: job.intervalMs, - enabled: job.enabled !== false, - activeTaskId: job.activeTaskId || null, - createdAt: job.createdAt || '', - nextRunAt: job.nextRunAt || '', - lastRunAt: job.lastRunAt || '', - lastStatus: job.lastStatus || '', - lastError: job.lastError || '', - metadata: job.metadata || {} - }; - } - - function getTaskSortTime(task) { - const finishedTime = task && task.finishedAt ? Date.parse(task.finishedAt) : NaN; - if (Number.isFinite(finishedTime)) { - return finishedTime; - } - - const createdTime = task && task.createdAt ? Date.parse(task.createdAt) : NaN; - if (Number.isFinite(createdTime)) { - return createdTime; - } - - return 0; - } - - function listTasks() { - return Array.from(tasksById.values()) - .slice() - .sort(function (left, right) { - const leftStartedTime = left && left.startedAt ? Date.parse(left.startedAt) : NaN; - const rightStartedTime = right && right.startedAt ? Date.parse(right.startedAt) : NaN; - if (Number.isFinite(leftStartedTime) && Number.isFinite(rightStartedTime) && leftStartedTime !== rightStartedTime) { - return rightStartedTime - leftStartedTime; - } - - if (Number.isFinite(leftStartedTime) !== Number.isFinite(rightStartedTime)) { - return Number.isFinite(leftStartedTime) ? -1 : 1; - } - - const leftCreatedTime = left && left.createdAt ? Date.parse(left.createdAt) : NaN; - const rightCreatedTime = right && right.createdAt ? Date.parse(right.createdAt) : NaN; - if (Number.isFinite(leftCreatedTime) && Number.isFinite(rightCreatedTime) && leftCreatedTime !== rightCreatedTime) { - return rightCreatedTime - leftCreatedTime; - } - - if (Number.isFinite(leftCreatedTime) !== Number.isFinite(rightCreatedTime)) { - return Number.isFinite(leftCreatedTime) ? -1 : 1; - } - - return right.id - left.id; - }) - .map(buildSnapshot); - } - - function listRecurringTasks() { - return Array.from(recurringJobsByKey.values()) - .slice() - .sort(function (left, right) { - return left.key.localeCompare(right.key); - }) - .map(buildRecurringSnapshot); - } - - function clearFinishedTasks() { - let removedCount = 0; - Array.from(tasksById.values()).forEach(function (task) { - if (task.status === 'running' || task.status === 'queued') { - return; - } - tasksById.delete(task.id); - removedCount += 1; - persistTaskDelete(task.id).catch(function (error) { - console.warn('Unable to delete finished task from persistence:', error); - }); - }); - return removedCount; - } - - function cancelTask(taskId) { - const task = getTaskById(taskId); - if (!task || task.status !== 'queued') { - return false; - } - - task.status = 'canceled'; - task.finishedAt = toIsoDate(new Date()); - const pendingIndex = pendingIds.indexOf(task.id); - if (pendingIndex >= 0) { - pendingIds.splice(pendingIndex, 1); - } - - if (typeof task.rejectCompletion === 'function') { - const cancellationError = new Error('Task canceled.'); - cancellationError.task = buildSnapshot(task); - task.rejectCompletion(cancellationError); - } - - persistTaskUpdate(task).catch(function (error) { - console.warn('Unable to persist canceled task:', error); - }); - - return true; - } - - function retryTask(taskId) { - const task = getTaskById(taskId); - if (!task || task.status !== 'failed') { - return null; - } - - return enqueueTask({ - key: task.key, - title: task.title, - category: task.category, - metadata: task.metadata, - run: task.run - }); - } - - function getSummary() { - const counts = { - queued: 0, - running: 0, - completed: 0, - failed: 0, - canceled: 0 - }; - - listTasks().forEach(function (task) { - if (Object.prototype.hasOwnProperty.call(counts, task.status)) { - counts[task.status] += 1; - } - }); - - return { - activeCount: activeCount, - counts: counts, - scheduledCount: recurringJobsByKey.size, - total: listTasks().length - }; - } - - return { - enqueueTask: enqueueTask, - enqueueTaskAndWait: function (definition) { - return enqueueTask(definition).then(function (snapshot) { - const task = snapshot && snapshot.id ? getTaskById(snapshot.id) : null; - if (!task || !task.completionPromise) { - return snapshot; - } - - return task.completionPromise; - }); - }, - initialize: initialize, - setTaskHandler: setTaskHandler, - registerRecurringTask: registerRecurringTask, - removeRecurringTask: removeRecurringTask, - runRecurringTask: runRecurringTask, - listTasks: listTasks, - listRecurringTasks: listRecurringTasks, - getTaskById: getTaskById, - getSummary: getSummary, - cancelTask: cancelTask, - retryTask: retryTask, - clearFinishedTasks: clearFinishedTasks - }; -} - -module.exports = { - createBackgroundTaskQueue: createBackgroundTaskQueue, - normalizeIntervalMs: normalizeIntervalMs -}; \ No newline at end of file diff --git a/src/web/lib/background-task-scheduling.js b/src/web/lib/background-task-scheduling.js deleted file mode 100644 index d923d55..0000000 --- a/src/web/lib/background-task-scheduling.js +++ /dev/null @@ -1,146 +0,0 @@ -const { normalizeIntervalMs } = require('./background-task-queue'); - -function registerBackgroundTaskScheduling(options) { - const pool = options && options.pool; - const common = options && options.common; - const backgroundTaskQueue = options && options.backgroundTaskQueue; - const collectUploadPathsFromDirectory = options && options.collectUploadPathsFromDirectory; - const removeUnusedUploadFiles = options && options.removeUnusedUploadFiles; - const refreshApiSource = options && options.refreshApiSource; - const refreshRssFeed = options && options.refreshRssFeed; - const mediaDir = String(options && options.mediaDir || '').trim(); - const dataSourceStartupRefreshStaggerMs = Math.max(100, Number(options && options.dataSourceStartupRefreshStaggerMs || 250)); - - if (!pool || !common || !backgroundTaskQueue || !collectUploadPathsFromDirectory || !removeUnusedUploadFiles || !refreshApiSource || !refreshRssFeed || !mediaDir) { - throw new Error('registerBackgroundTaskScheduling requires the background task dependencies.'); - } - - async function syncRecurringRefreshes() { - const apiSourcesData = await common.fetchApiSourcesData(pool); - (apiSourcesData.apiSources || []).forEach(function (apiSource) { - backgroundTaskQueue.registerRecurringTask({ - key: 'api-source-refresh:' + Number(apiSource.id), - title: 'API source refresh', - category: 'data-source', - intervalMs: normalizeIntervalMs(apiSource.update_interval_value, apiSource.update_interval_unit), - metadata: { - sourceType: 'api-source', - sourceId: Number(apiSource.id), - sourceName: apiSource.name - }, - run: function () { - return refreshApiSource(pool, common, apiSource.id, apiSource.api_url, null); - } - }); - }); - - const rssFeedsData = await common.fetchRssFeedsData(pool); - (rssFeedsData.rssFeeds || []).forEach(function (rssFeed) { - backgroundTaskQueue.registerRecurringTask({ - key: 'rss-feed-refresh:' + Number(rssFeed.id), - title: 'RSS feed refresh', - category: 'data-source', - intervalMs: normalizeIntervalMs(rssFeed.update_interval_value, rssFeed.update_interval_unit), - metadata: { - sourceType: 'rss-feed', - sourceId: Number(rssFeed.id), - sourceName: rssFeed.name - }, - run: function () { - return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, null); - } - }); - }); - } - - async function registerRecurringMaintenanceTasks() { - async function runUnusedUploadSweep() { - const uploadPaths = await collectUploadPathsFromDirectory(mediaDir); - if (!uploadPaths.length) { - return; - } - - await removeUnusedUploadFiles(pool, mediaDir, uploadPaths); - } - - backgroundTaskQueue.registerRecurringTask({ - key: 'unused-upload-sweep', - title: 'Unused upload sweep', - category: 'media-sync', - intervalMs: 24 * 60 * 60 * 1000, - metadata: { - mediaDir: mediaDir - }, - run: runUnusedUploadSweep - }); - } - - async function scheduleInitialDataSourceRefreshes() { - const apiSourcesData = await common.fetchApiSourcesData(pool); - const rssFeedsData = await common.fetchRssFeedsData(pool); - const startupSources = []; - - (apiSourcesData.apiSources || []).forEach(function (apiSource) { - startupSources.push({ - type: 'api-source', - id: Number(apiSource.id), - name: apiSource.name, - run: function () { - return refreshApiSource(pool, common, apiSource.id, apiSource.api_url, null); - } - }); - }); - - (rssFeedsData.rssFeeds || []).forEach(function (rssFeed) { - startupSources.push({ - type: 'rss-feed', - id: Number(rssFeed.id), - name: rssFeed.name, - run: function () { - return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, null); - } - }); - }); - - startupSources.forEach(function (source, index) { - const startupDelayMs = index * dataSourceStartupRefreshStaggerMs; - - setTimeout(function () { - backgroundTaskQueue.enqueueTask({ - key: 'startup-data-source-refresh:' + source.type + ':' + source.id + ':' + Date.now(), - title: source.type === 'rss-feed' ? 'RSS feed refresh' : 'API source refresh', - category: 'data-source', - taskType: 'data-source-refresh', - metadata: { - sourceType: source.type, - sourceId: source.id, - sourceName: source.name, - startupRefresh: true - }, - payload: { - sourceType: source.type, - sourceId: source.id, - sourceName: source.name, - startupRefresh: true - } - }).catch(function (error) { - console.warn('Unable to queue startup refresh for ' + source.type + ' ' + source.id + ':', error); - }); - }, startupDelayMs); - }); - } - - async function initialize() { - await syncRecurringRefreshes(); - await registerRecurringMaintenanceTasks(); - scheduleInitialDataSourceRefreshes().catch(function (error) { - console.warn('Unable to schedule startup data source refreshes:', error); - }); - } - - return { - initialize: initialize - }; -} - -module.exports = { registerBackgroundTaskScheduling }; \ No newline at end of file diff --git a/src/web/lib/background-task-setup.js b/src/web/lib/background-task-setup.js deleted file mode 100644 index 4bada3c..0000000 --- a/src/web/lib/background-task-setup.js +++ /dev/null @@ -1,32 +0,0 @@ -const { registerBackgroundTaskHandlers } = require('./background-task-handlers'); -const { registerBackgroundTaskScheduling } = require('./background-task-scheduling'); - -function createBackgroundTaskSetup(options) { - const pool = options && options.pool; - const common = options && options.common; - const backgroundTaskQueue = options && options.backgroundTaskQueue; - const collectUploadPathsFromDirectory = options && options.collectUploadPathsFromDirectory; - const removeUnusedUploadFiles = options && options.removeUnusedUploadFiles; - const refreshApiSource = options && options.refreshApiSource; - const refreshRssFeed = options && options.refreshRssFeed; - const uploadsDir = String(options && options.uploadsDir || '').trim(); - const dataSourceStartupRefreshStaggerMs = Math.max(100, Number(options && options.dataSourceStartupRefreshStaggerMs || 250)); - - if (!pool || !common || !backgroundTaskQueue || !collectUploadPathsFromDirectory || !removeUnusedUploadFiles || !refreshApiSource || !refreshRssFeed || !uploadsDir) { - throw new Error('createBackgroundTaskSetup requires the background task dependencies.'); - } - - async function initialize() { - registerBackgroundTaskHandlers(options); - const backgroundTaskScheduling = registerBackgroundTaskScheduling(options); - if (backgroundTaskScheduling && typeof backgroundTaskScheduling.initialize === 'function') { - await backgroundTaskScheduling.initialize(); - } - } - - return { - initialize: initialize - }; -} - -module.exports = { createBackgroundTaskSetup }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/index.js b/src/web/lib/background-tasks/index.js new file mode 100644 index 0000000..2b57cd6 --- /dev/null +++ b/src/web/lib/background-tasks/index.js @@ -0,0 +1,99 @@ +// Shared loader for task folders under background-tasks. + +const fs = require('fs'); +const path = require('path'); + +function getTaskExport(taskModule) { + return typeof taskModule === 'function' + ? taskModule + : taskModule && typeof taskModule === 'object' + ? Object.values(taskModule).find(function (value) { + return typeof value === 'function'; + }) + : null; +} + +function loadTaskModules(directory, options) { + const taskFiles = fs.readdirSync(directory) + .filter(function (fileName) { + return fileName.toLowerCase().endsWith('.js') && fileName !== 'index.js'; + }) + .sort(function (left, right) { + return left.localeCompare(right); + }); + + return Promise.all(taskFiles.map(function (fileName) { + const taskModule = require(path.join(directory, fileName)); + const exported = getTaskExport(taskModule); + + if (typeof exported === 'function') { + return exported(options); + } + return null; + })); +} + +// Register ad hoc task handlers that execute queued background work. +function registerAdhocTasks(options) { + const backgroundTaskDirectory = path.join(__dirname, 'tasks-adhoc'); + if (!options || !options.pool || !options.common || !options.backgroundTaskQueue || !options.captureSlideThumbnail || !options.uploadSyncService || !String(options.mediaDir || '').trim()) { + throw new Error('registerAdhocTasks requires the background task dependencies.'); + } + + loadTaskModules(backgroundTaskDirectory, options); +} + +// Register one-time startup work that should run during boot only. +function registerStartupTasks(options) { + const backgroundTaskDirectory = path.join(__dirname, 'tasks-startup'); + + if (!options || !options.pool || !options.common || !options.backgroundTaskQueue || !String(options.mediaDir || '').trim()) { + throw new Error('registerStartupTasks requires the startup task dependencies.'); + } + + async function initialize() { + await loadTaskModules(backgroundTaskDirectory, options); + } + + return { + initialize: initialize + }; +} + +// Register recurring maintenance and data-source refresh tasks. +function registerScheduledTasks(options) { + const backgroundTaskDirectory = path.join(__dirname, 'tasks-scheduled'); + + if (!options || !options.pool || !options.common || !options.backgroundTaskQueue || !options.uploadSyncService || !String(options.mediaDir || '').trim()) { + throw new Error('registerScheduledTasks requires the background task dependencies.'); + } + + async function initialize() { + await loadTaskModules(backgroundTaskDirectory, options); + } + + return { + initialize: initialize + }; +} + +async function initializeBackgroundTasks(options) { + registerAdhocTasks(options); + + const backgroundTaskStartup = registerStartupTasks(options); + if (backgroundTaskStartup && typeof backgroundTaskStartup.initialize === 'function') { + await backgroundTaskStartup.initialize(); + } + + const backgroundTaskScheduling = registerScheduledTasks(options); + if (backgroundTaskScheduling && typeof backgroundTaskScheduling.initialize === 'function') { + await backgroundTaskScheduling.initialize(); + } +} + +module.exports = { + registerAdhocTasks: registerAdhocTasks, + registerStartupTasks: registerStartupTasks, + registerScheduledTasks: registerScheduledTasks, + initializeBackgroundTasks: initializeBackgroundTasks +}; \ No newline at end of file diff --git a/src/web/lib/background-tasks/queue.js b/src/web/lib/background-tasks/queue.js new file mode 100644 index 0000000..851722a --- /dev/null +++ b/src/web/lib/background-tasks/queue.js @@ -0,0 +1,719 @@ +// Database-backed background task queue. + +function normalizeText(value) { + return String(value || '').trim(); +} + +function toIsoDate(value) { + if (!value) { + return ''; + } + + const date = value instanceof Date ? value : new Date(value); + return Number.isNaN(date.getTime()) ? '' : date.toISOString(); +} + +function normalizeIntervalMs(value, unit) { + const numericValue = Math.max(1, Number(value) || 0); + const normalizedUnit = String(unit || 'minutes').trim().toLowerCase(); + if (normalizedUnit === 'seconds') { + return numericValue * 1000; + } + return numericValue * 60 * 1000; +} + +function createBackgroundTaskQueue(options) { + const pool = options && options.pool; + const maxConcurrent = Math.max(1, Number(options && options.maxConcurrent) || 1); + const taskHandlers = new Map(); + const recurringJobsByKey = new Map(); + let activeCount = 0; + let drainScheduled = false; + let initializationPromise = null; + + if (!pool) { + throw new Error('createBackgroundTaskQueue requires a database pool.'); + } + + function buildSnapshot(task) { + return { + id: Number(task && task.id) || 0, + key: String(task && task.key || '').trim(), + taskType: String(task && task.taskType || '').trim(), + title: String(task && task.title || 'Background task').trim() || 'Background task', + category: String(task && task.category || 'general').trim() || 'general', + status: String(task && task.status || 'queued').trim() || 'queued', + createdAt: String(task && task.createdAt || ''), + startedAt: String(task && task.startedAt || ''), + finishedAt: String(task && task.finishedAt || ''), + errorMessage: String(task && task.errorMessage || ''), + attempts: Math.max(0, Number(task && task.attempts) || 0), + metadata: task && task.metadata ? task.metadata : {}, + payload: task && task.payload !== undefined ? task.payload : null + }; + } + + function parseJsonValue(value, fallback) { + if (value === null || value === undefined || value === '') { + return fallback; + } + + if (typeof value === 'object') { + return value; + } + + try { + return JSON.parse(String(value)); + } catch (_error) { + return fallback; + } + } + + function stringifyJsonValue(value) { + if (value === undefined || value === null) { + return null; + } + + return JSON.stringify(value); + } + + function hydrateTaskRow(row) { + if (!row) { + return null; + } + + return { + id: Number(row.id), + key: String(row.task_key || '').trim(), + taskType: String(row.task_type || '').trim(), + title: String(row.title || 'Background task').trim() || 'Background task', + category: String(row.category || 'general').trim() || 'general', + status: String(row.status || 'queued').trim() || 'queued', + createdAt: row.created_at ? new Date(row.created_at).toISOString() : '', + startedAt: row.started_at ? new Date(row.started_at).toISOString() : '', + finishedAt: row.finished_at ? new Date(row.finished_at).toISOString() : '', + errorMessage: String(row.error_message || ''), + attempts: Math.max(0, Number(row.attempts) || 0), + metadata: parseJsonValue(row.metadata_json, {}), + payload: parseJsonValue(row.payload_json, null) + }; + } + + function buildTaskRecord(task) { + return { + task_key: task.key || null, + task_type: task.taskType || null, + title: task.title, + category: task.category || 'general', + status: task.status, + payload_json: stringifyJsonValue(task.payload), + metadata_json: stringifyJsonValue(task.metadata), + attempts: Math.max(0, Number(task.attempts) || 0), + created_at: task.createdAt ? new Date(task.createdAt) : new Date(), + started_at: task.startedAt ? new Date(task.startedAt) : null, + finished_at: task.finishedAt ? new Date(task.finishedAt) : null, + error_message: task.errorMessage || null + }; + } + + async function persistTaskInsert(task) { + const normalizedTaskType = normalizeText(task && task.taskType); + if (!normalizedTaskType) { + throw new Error('Background tasks require a task type.'); + } + + const record = buildTaskRecord(Object.assign({}, task, { + taskType: normalizedTaskType + })); + const [result] = await pool.query( + `INSERT INTO o_background_tasks ( + task_key, + task_type, + title, + category, + status, + payload_json, + metadata_json, + attempts, + created_at, + started_at, + finished_at, + error_message + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, + [ + record.task_key, + record.task_type, + record.title, + record.category, + record.status, + record.payload_json, + record.metadata_json, + record.attempts, + record.created_at, + record.started_at, + record.finished_at, + record.error_message + ] + ); + + task.id = Number(result.insertId); + return task; + } + + async function persistTaskUpdate(task) { + if (!task || !Number.isInteger(Number(task.id)) || Number(task.id) <= 0) { + return; + } + + const record = buildTaskRecord(task); + await pool.query( + `UPDATE o_background_tasks + SET task_key = ?, task_type = ?, title = ?, category = ?, status = ?, payload_json = ?, metadata_json = ?, attempts = ?, started_at = ?, finished_at = ?, error_message = ? + WHERE id = ?`, + [ + record.task_key, + record.task_type, + record.title, + record.category, + record.status, + record.payload_json, + record.metadata_json, + record.attempts, + record.started_at, + record.finished_at, + record.error_message, + Number(task.id) + ] + ); + } + + async function persistTaskDelete(taskId) { + const numericTaskId = Number(taskId); + if (!Number.isFinite(numericTaskId) || numericTaskId <= 0) { + return; + } + + await pool.query('DELETE FROM o_background_tasks WHERE id = ?', [numericTaskId]); + } + + async function fetchTaskById(taskId) { + const numericTaskId = Number(taskId); + if (!Number.isFinite(numericTaskId) || numericTaskId <= 0) { + return null; + } + + const [rows] = await pool.query( + `SELECT id, task_key, task_type, title, category, status, payload_json, metadata_json, attempts, created_at, started_at, finished_at, error_message + FROM o_background_tasks + WHERE id = ? + LIMIT 1`, + [numericTaskId] + ); + + return hydrateTaskRow(rows && rows[0]) || null; + } + + async function fetchQueuedTaskCount() { + const [rows] = await pool.query(`SELECT COUNT(*) AS count FROM o_background_tasks WHERE status = 'queued'`); + return Number(rows && rows[0] && rows[0].count) || 0; + } + + async function claimNextTask() { + const connection = await pool.getConnection(); + try { + await connection.beginTransaction(); + const [rows] = await connection.query( + `SELECT id, task_key, task_type, title, category, status, payload_json, metadata_json, attempts, created_at, started_at, finished_at, error_message + FROM o_background_tasks + WHERE status = 'queued' + ORDER BY created_at ASC, id ASC + LIMIT 1 + FOR UPDATE SKIP LOCKED` + ); + + const row = rows && rows[0] ? rows[0] : null; + if (!row) { + await connection.commit(); + return null; + } + + const nextAttempts = Math.max(0, Number(row.attempts) || 0) + 1; + await connection.query( + `UPDATE o_background_tasks + SET status = 'running', started_at = NOW(), attempts = ?, error_message = NULL + WHERE id = ?`, + [nextAttempts, row.id] + ); + await connection.commit(); + + return hydrateTaskRow(Object.assign({}, row, { + status: 'running', + started_at: new Date(), + attempts: nextAttempts, + error_message: null + })); + } catch (error) { + try { + await connection.rollback(); + } catch (_rollbackError) { + // Ignore rollback failures and surface the original error. + } + throw error; + } finally { + connection.release(); + } + } + + async function syncRecurringTaskState(task, status, errorMessage) { + const recurringKey = String(task && task.metadata && task.metadata.recurringKey || '').trim(); + if (!recurringKey) { + return; + } + + const job = recurringJobsByKey.get(recurringKey); + if (!job) { + return; + } + + job.lastRunAt = toIsoDate(new Date()); + job.lastStatus = String(status || ''); + job.lastError = errorMessage ? String(errorMessage) : ''; + } + + function setTaskHandler(taskType, handler) { + const normalizedTaskType = normalizeText(taskType); + if (!normalizedTaskType || typeof handler !== 'function') { + return false; + } + + taskHandlers.set(normalizedTaskType, handler); + return true; + } + + setTaskHandler('recurring-run', async function (task) { + const recurringKey = String(task && task.metadata && task.metadata.recurringKey || '').trim(); + if (!recurringKey) { + throw new Error('Recurring task key is required.'); + } + + const job = recurringJobsByKey.get(recurringKey); + if (!job || typeof job.run !== 'function') { + throw new Error('Recurring task not found.'); + } + + return job.run(task); + }); + + function scheduleDrain() { + if (drainScheduled) { + return; + } + + drainScheduled = true; + setTimeout(function () { + drainScheduled = false; + processQueue().catch(function (error) { + console.error(error); + }); + }, 0); + } + + async function initialize() { + if (initializationPromise) { + return initializationPromise; + } + + initializationPromise = (async function () { + await pool.query( + `UPDATE o_background_tasks + SET status = 'queued', started_at = NULL, finished_at = NULL, error_message = NULL + WHERE status = 'running'` + ); + + if (await fetchQueuedTaskCount() > 0) { + scheduleDrain(); + } + })(); + + return initializationPromise; + } + + async function processQueue() { + while (activeCount < maxConcurrent) { + const task = await claimNextTask(); + if (!task) { + break; + } + + activeCount += 1; + + (async function () { + try { + const handler = taskHandlers.get(task.taskType); + if (!handler) { + throw new Error('No handler registered for task type ' + task.taskType + '.'); + } + + await handler(task); + task.status = 'completed'; + task.finishedAt = toIsoDate(new Date()); + task.errorMessage = ''; + await persistTaskUpdate(task); + await syncRecurringTaskState(task, task.status, ''); + } catch (error) { + task.status = 'failed'; + task.errorMessage = String(error && error.message ? error.message : 'Background task failed.'); + task.finishedAt = toIsoDate(new Date()); + try { + await persistTaskUpdate(task); + } catch (persistError) { + console.error(persistError); + } + await syncRecurringTaskState(task, task.status, task.errorMessage); + } finally { + activeCount = Math.max(0, activeCount - 1); + scheduleDrain(); + } + })().catch(function (error) { + console.error(error); + }); + } + } + + async function enqueueTask(definition) { + const normalizedKey = normalizeText(definition && definition.key); + const normalizedTitle = normalizeText(definition && definition.title) || 'Background task'; + const normalizedTaskType = normalizeText(definition && definition.taskType); + if (!normalizedTaskType) { + throw new Error('Background tasks require a task type.'); + } + + const task = { + id: 0, + key: normalizedKey, + taskType: normalizedTaskType, + title: normalizedTitle, + category: normalizeText(definition && definition.category) || 'general', + status: 'queued', + createdAt: toIsoDate(new Date()), + startedAt: '', + finishedAt: '', + errorMessage: '', + attempts: 0, + metadata: definition && definition.metadata ? definition.metadata : {}, + payload: definition && definition.payload !== undefined ? definition.payload : null + }; + + await persistTaskInsert(task); + scheduleDrain(); + return buildSnapshot(task); + } + + async function enqueueTaskAndWait(definition) { + const snapshot = await enqueueTask(definition); + const taskId = snapshot && snapshot.id ? snapshot.id : null; + if (!taskId) { + return snapshot; + } + + while (true) { + const currentTask = await fetchTaskById(taskId); + if (!currentTask) { + return snapshot; + } + + if (currentTask.status !== 'queued' && currentTask.status !== 'running') { + return buildSnapshot(currentTask); + } + + await new Promise(function (resolve) { + setTimeout(resolve, 250); + }); + } + } + + function clearRecurringTimer(job) { + if (job && job.timerId) { + clearTimeout(job.timerId); + job.timerId = null; + } + } + + function scheduleRecurringRun(job, delayMs) { + if (!job || job.enabled === false) { + return; + } + + clearRecurringTimer(job); + const safeDelay = Math.max(1, Number(delayMs) || job.intervalMs || 0); + job.nextRunAt = toIsoDate(new Date(Date.now() + safeDelay)); + job.timerId = setTimeout(function () { + job.timerId = null; + triggerRecurringJob(job.key).catch(function (error) { + console.error(error); + }); + }, safeDelay); + } + + async function triggerRecurringJob(recurringKey) { + const job = recurringJobsByKey.get(recurringKey); + if (!job || job.enabled === false) { + return false; + } + + await enqueueTask({ + key: `${job.key}:${Date.now()}`, + title: job.title, + category: job.category, + taskType: 'recurring-run', + metadata: Object.assign({}, job.metadata || {}, { + recurringKey: job.key, + recurringTitle: job.title + }), + payload: Object.assign({}, job.payload || {}, { + recurringKey: job.key + }) + }); + + scheduleRecurringRun(job, job.intervalMs); + return true; + } + + async function runRecurringTask(recurringKey) { + const normalizedKey = normalizeText(recurringKey); + if (!normalizedKey || !recurringJobsByKey.has(normalizedKey)) { + return false; + } + + return triggerRecurringJob(normalizedKey); + } + + function registerRecurringTask(definition) { + const normalizedKey = normalizeText(definition && definition.key); + if (!normalizedKey) { + throw new Error('Recurring tasks require a key.'); + } + + const intervalMs = Math.max(1000, Number(definition && definition.intervalMs) || 0); + if (!Number.isFinite(intervalMs) || intervalMs < 1000) { + throw new Error('Recurring tasks require a valid interval.'); + } + + const job = recurringJobsByKey.get(normalizedKey) || { + key: normalizedKey, + lastRunAt: '', + lastStatus: '', + lastError: '', + nextRunAt: '', + timerId: null, + enabled: true + }; + + clearRecurringTimer(job); + job.title = normalizeText(definition && definition.title) || 'Background task'; + job.category = normalizeText(definition && definition.category) || 'general'; + job.intervalMs = intervalMs; + job.metadata = definition && definition.metadata ? definition.metadata : {}; + job.payload = definition && definition.payload ? definition.payload : null; + job.run = typeof definition.run === 'function' ? definition.run : function () { + return Promise.resolve(); + }; + job.enabled = definition && definition.enabled === false ? false : true; + recurringJobsByKey.set(normalizedKey, job); + + if (job.enabled) { + scheduleRecurringRun(job, intervalMs); + } + + return buildRecurringSnapshot(job); + } + + function removeRecurringTask(recurringKey) { + const normalizedKey = normalizeText(recurringKey); + const job = recurringJobsByKey.get(normalizedKey); + if (!job) { + return false; + } + + clearRecurringTimer(job); + recurringJobsByKey.delete(normalizedKey); + return true; + } + + function buildRecurringSnapshot(job, state) { + const latestState = state || null; + const activeTaskId = latestState && (latestState.status === 'queued' || latestState.status === 'running') + ? latestState.id + : null; + const lastRunAt = latestState + ? latestState.finishedAt || latestState.startedAt || latestState.createdAt || '' + : job.lastRunAt || ''; + + return { + key: job.key, + title: job.title, + category: job.category, + intervalMs: job.intervalMs, + enabled: job.enabled !== false, + activeTaskId: activeTaskId, + createdAt: latestState ? latestState.createdAt || '' : job.createdAt || '', + nextRunAt: job.nextRunAt || '', + lastRunAt: lastRunAt || '', + lastStatus: latestState ? latestState.status || '' : job.lastStatus || '', + lastError: latestState ? latestState.errorMessage || '' : job.lastError || '', + metadata: job.metadata || {} + }; + } + + async function fetchRecurringTaskStates() { + const [rows] = await pool.query( + `SELECT id, status, created_at, started_at, finished_at, error_message, metadata_json + FROM o_background_tasks + WHERE JSON_UNQUOTE(JSON_EXTRACT(metadata_json, '$.recurringKey')) IS NOT NULL + ORDER BY created_at DESC, id DESC` + ); + + const statesByKey = new Map(); + for (const row of rows || []) { + const metadata = parseJsonValue(row.metadata_json, {}); + const recurringKey = normalizeText(metadata && metadata.recurringKey); + if (!recurringKey || statesByKey.has(recurringKey)) { + continue; + } + + statesByKey.set(recurringKey, { + id: Number(row.id), + status: String(row.status || ''), + createdAt: row.created_at ? new Date(row.created_at).toISOString() : '', + startedAt: row.started_at ? new Date(row.started_at).toISOString() : '', + finishedAt: row.finished_at ? new Date(row.finished_at).toISOString() : '', + errorMessage: String(row.error_message || '') + }); + } + + return statesByKey; + } + + async function listTasks() { + const [rows] = await pool.query( + `SELECT id, task_key, task_type, title, category, status, payload_json, metadata_json, attempts, created_at, started_at, finished_at, error_message + FROM o_background_tasks + ORDER BY + CASE status + WHEN 'running' THEN 0 + WHEN 'queued' THEN 1 + WHEN 'failed' THEN 2 + WHEN 'completed' THEN 3 + WHEN 'canceled' THEN 4 + ELSE 5 + END, + COALESCE(started_at, created_at) DESC, + id DESC` + ); + + return (rows || []).map(hydrateTaskRow); + } + + async function listRecurringTasks() { + const statesByKey = await fetchRecurringTaskStates(); + return Array.from(recurringJobsByKey.values()) + .slice() + .sort(function (left, right) { + return left.key.localeCompare(right.key); + }) + .map(function (job) { + return buildRecurringSnapshot(job, statesByKey.get(job.key) || null); + }); + } + + async function clearFinishedTasks() { + const [result] = await pool.query( + `DELETE FROM o_background_tasks + WHERE status IN ('completed', 'failed', 'canceled')` + ); + return Number(result && result.affectedRows) || 0; + } + + async function cancelTask(taskId) { + const numericTaskId = Number(taskId); + if (!Number.isFinite(numericTaskId) || numericTaskId <= 0) { + return false; + } + + const [result] = await pool.query( + `UPDATE o_background_tasks + SET status = 'canceled', + finished_at = NOW(), + error_message = 'Task canceled.' + WHERE id = ? + AND status = 'queued'`, + [numericTaskId] + ); + return Number(result && result.affectedRows) > 0; + } + + async function retryTask(taskId) { + const task = await fetchTaskById(taskId); + if (!task || task.status !== 'failed') { + return null; + } + + return enqueueTask({ + key: task.key, + title: task.title, + category: task.category, + taskType: task.taskType, + metadata: task.metadata, + payload: task.payload + }); + } + + async function getSummary() { + const [rows] = await pool.query( + `SELECT + SUM(status = 'queued') AS queued, + SUM(status = 'running') AS running, + SUM(status = 'completed') AS completed, + SUM(status = 'failed') AS failed, + SUM(status = 'canceled') AS canceled, + COUNT(*) AS total + FROM o_background_tasks` + ); + const row = rows && rows[0] ? rows[0] : {}; + + return { + activeCount: activeCount, + counts: { + queued: Number(row.queued) || 0, + running: Number(row.running) || 0, + completed: Number(row.completed) || 0, + failed: Number(row.failed) || 0, + canceled: Number(row.canceled) || 0 + }, + scheduledCount: recurringJobsByKey.size, + total: Number(row.total) || 0 + }; + } + + return { + enqueueTask: enqueueTask, + enqueueTaskAndWait: enqueueTaskAndWait, + initialize: initialize, + setTaskHandler: setTaskHandler, + registerRecurringTask: registerRecurringTask, + removeRecurringTask: removeRecurringTask, + runRecurringTask: runRecurringTask, + listTasks: listTasks, + listRecurringTasks: listRecurringTasks, + getTaskById: fetchTaskById, + getSummary: getSummary, + cancelTask: cancelTask, + retryTask: retryTask, + clearFinishedTasks: clearFinishedTasks + }; +} + +module.exports = { + createBackgroundTaskQueue: createBackgroundTaskQueue, + normalizeIntervalMs: normalizeIntervalMs +}; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-adhoc/data-source-refresh.js b/src/web/lib/background-tasks/tasks-adhoc/data-source-refresh.js new file mode 100644 index 0000000..6fba4d7 --- /dev/null +++ b/src/web/lib/background-tasks/tasks-adhoc/data-source-refresh.js @@ -0,0 +1,42 @@ +const { refreshApiSource, refreshRssFeed } = require('../../data-source-refresh'); + +const TASK = { + taskType: 'data-source-refresh' +}; + +function registerDataSourceRefreshTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const pool = options && options.pool; + const common = options && options.common; + + if (!backgroundTaskQueue || !pool || !common) { + throw new Error('registerDataSourceRefreshTask requires the data source refresh dependencies.'); + } + + backgroundTaskQueue.setTaskHandler(TASK.taskType, async function (task) { + const payload = task && task.payload ? task.payload : {}; + const sourceType = String(payload.sourceType || '').trim(); + const sourceId = Number(payload.sourceId || 0); + + // Resolve the source record at execution time so stale queued tasks fail cleanly. + if (sourceType === 'api-source') { + const apiSource = await common.fetchApiSourceById(pool, sourceId); + if (!apiSource) { + throw new Error('API source not found.'); + } + return refreshApiSource(pool, common, apiSource, Number(payload.actorId) || null); + } + + if (sourceType === 'rss-feed') { + const rssFeed = await common.fetchRssFeedById(pool, sourceId); + if (!rssFeed) { + throw new Error('RSS feed not found.'); + } + return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, Number(payload.actorId) || null); + } + + throw new Error('Unsupported data source refresh task.'); + }); +} + +module.exports = { registerDataSourceRefreshTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-adhoc/font-sync.js b/src/web/lib/background-tasks/tasks-adhoc/font-sync.js new file mode 100644 index 0000000..7d4191c --- /dev/null +++ b/src/web/lib/background-tasks/tasks-adhoc/font-sync.js @@ -0,0 +1,39 @@ +function registerFontSyncTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const uploadSyncService = options && options.uploadSyncService; + + if (!backgroundTaskQueue || !uploadSyncService) { + throw new Error('registerFontSyncTask requires the font sync dependencies.'); + } + + backgroundTaskQueue.setTaskHandler('font-sync', async function (task) { + const payload = task && task.payload ? task.payload : task || {}; + const uploadDir = String(payload.uploadDir || '').trim(); + const operations = Array.isArray(payload.operations) + ? payload.operations + : Array.isArray(payload.uploadPaths) + ? payload.uploadPaths.map(function (uploadPath) { + return { type: String(payload.action || 'put').trim().toLowerCase(), uploadPath: uploadPath }; + }) + : []; + + if (!uploadDir || !operations.length) { + return; + } + + for (let i = 0; i < operations.length; i += 1) { + const operation = operations[i] || {}; + const uploadPath = String(operation.uploadPath || '').trim(); + if (!uploadPath) { + continue; + } + if (String(operation.type || '').trim().toLowerCase() === 'delete') { + await uploadSyncService.removeUploadFileFromPlayer(uploadPath, uploadDir); + } else { + await uploadSyncService.pushUploadFileToPlayer(uploadPath, uploadDir); + } + } + }); +} + +module.exports = { registerFontSyncTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-adhoc/media-sync.js b/src/web/lib/background-tasks/tasks-adhoc/media-sync.js new file mode 100644 index 0000000..85a7409 --- /dev/null +++ b/src/web/lib/background-tasks/tasks-adhoc/media-sync.js @@ -0,0 +1,20 @@ +const TASK = { + taskType: 'media-sync' +}; + +function registerMediaSyncTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const uploadSyncService = options && options.uploadSyncService; + const runMediaSyncTask = uploadSyncService && uploadSyncService.runMediaSyncTask; + + if (!backgroundTaskQueue || typeof runMediaSyncTask !== 'function') { + throw new Error('registerMediaSyncTask requires the media sync dependencies.'); + } + + // Media sync is just a pass-through to the shared media sync runner. + backgroundTaskQueue.setTaskHandler(TASK.taskType, function (task) { + return runMediaSyncTask(task && task.payload ? task.payload : task); + }); +} + +module.exports = { registerMediaSyncTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-slide.js b/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-slide.js new file mode 100644 index 0000000..ddab50a --- /dev/null +++ b/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-slide.js @@ -0,0 +1,51 @@ +const TASK = { + taskType: 'slide-thumbnail-refresh' +}; + +async function fetchPlayerInternalBaseUrl(pool) { + const [rows] = await pool.query( + `SELECT internal_base_url + FROM d_players + WHERE device_id = '1' + LIMIT 1` + ); + + return String(rows && rows[0] && rows[0].internal_base_url || '').trim().replace(/\/$/, '') || null; +} + +function registerSlideThumbnailRefreshTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const captureSlideThumbnail = options && options.captureSlideThumbnail; + const pool = options && options.pool; + const common = options && options.common; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || typeof captureSlideThumbnail !== 'function' || !pool || !common || !mediaDir) { + throw new Error('registerSlideThumbnailRefreshTask requires the slide thumbnail dependencies.'); + } + + // Refresh the slide thumbnail for one slide id. + backgroundTaskQueue.setTaskHandler(TASK.taskType, async function (task) { + const payload = task && task.payload ? task.payload : {}; + const slideId = Number(payload.slideId || 0); + if (!Number.isFinite(slideId) || slideId <= 0) { + throw new Error('Slide id is required.'); + } + + const playerInternalBaseUrl = await fetchPlayerInternalBaseUrl(pool); + if (!playerInternalBaseUrl) { + throw new Error('Player internal base URL is required.'); + } + + return captureSlideThumbnail({ + pool: pool, + common: common, + mediaDir: mediaDir, + baseUrl: playerInternalBaseUrl, + slideId: slideId, + previousThumbnailPath: payload.previousThumbnailPath || null + }); + }); +} + +module.exports = { registerSlideThumbnailRefreshTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-template.js b/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-template.js new file mode 100644 index 0000000..42d8053 --- /dev/null +++ b/src/web/lib/background-tasks/tasks-adhoc/thumbnail-refresh-template.js @@ -0,0 +1,65 @@ +const TASK = { + taskType: 'template-slide-thumbnail-refresh' +}; + +async function fetchPlayerInternalBaseUrl(pool) { + const [rows] = await pool.query( + `SELECT internal_base_url + FROM d_players + WHERE device_id = '1' + LIMIT 1` + ); + + return String(rows && rows[0] && rows[0].internal_base_url || '').trim().replace(/\/$/, '') || null; +} + +function registerTemplateSlideThumbnailRefreshTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const captureSlideThumbnail = options && options.captureSlideThumbnail; + const pool = options && options.pool; + const common = options && options.common; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || typeof captureSlideThumbnail !== 'function' || !pool || !common || !mediaDir) { + throw new Error('registerTemplateSlideThumbnailRefreshTask requires the template thumbnail dependencies.'); + } + + // Walk every slide in the template and regenerate its thumbnail. + backgroundTaskQueue.setTaskHandler(TASK.taskType, async function (task) { + const payload = task && task.payload ? task.payload : {}; + const templateId = Number(payload.templateId || 0); + if (!Number.isFinite(templateId) || templateId <= 0) { + throw new Error('Template id is required.'); + } + + const playerInternalBaseUrl = await fetchPlayerInternalBaseUrl(pool); + if (!playerInternalBaseUrl) { + throw new Error('Player internal base URL is required.'); + } + + const [slides] = await pool.query( + 'SELECT id, thumbnail_path FROM c_slides WHERE template_id = ? ORDER BY id ASC', + [templateId] + ); + + for (const slide of slides || []) { + const slideId = Number(slide && slide.id || 0); + if (!Number.isFinite(slideId) || slideId <= 0) { + continue; + } + + await captureSlideThumbnail({ + pool: pool, + common: common, + mediaDir: mediaDir, + baseUrl: playerInternalBaseUrl, + slideId: slideId, + previousThumbnailPath: slide && slide.thumbnail_path ? slide.thumbnail_path : null + }); + } + + return { templateId: templateId, slideCount: Array.isArray(slides) ? slides.length : 0 }; + }); +} + +module.exports = { registerTemplateSlideThumbnailRefreshTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-scheduled/data-source-refresh.js b/src/web/lib/background-tasks/tasks-scheduled/data-source-refresh.js new file mode 100644 index 0000000..372f659 --- /dev/null +++ b/src/web/lib/background-tasks/tasks-scheduled/data-source-refresh.js @@ -0,0 +1,139 @@ +const TASK = { + key: 'recurring-data-source-refreshes', + title: 'Recurring data source refreshes', + category: 'data-source', + trigger: 'scheduled recurring task definitions from the database', + purpose: 'keep API sources and RSS feeds refreshed on their configured intervals.', + taskType: 'data-source-refresh', + intervalMs: null +}; + +const { normalizeIntervalMs } = require('../queue'); +const { refreshApiSource, refreshRssFeed } = require('../../data-source-refresh'); + +function registerRecurringDataSourceRefreshes(options) { + const pool = options && options.pool; + const common = options && options.common; + const backgroundTaskQueue = options && options.backgroundTaskQueue; + + if (!pool || !common || !backgroundTaskQueue) { + throw new Error('registerRecurringDataSourceRefreshes requires the recurring refresh dependencies.'); + } + + return (async function () { + const apiSourcesData = await common.fetchApiSourcesData(pool); + (apiSourcesData.apiSources || []).forEach(function (apiSource) { + backgroundTaskQueue.registerRecurringTask({ + key: 'api-source-refresh:' + Number(apiSource.id), + title: 'API source refresh', + category: TASK.category, + intervalMs: normalizeIntervalMs(apiSource.update_interval_value, apiSource.update_interval_unit), + metadata: { + sourceType: 'api-source', + sourceId: Number(apiSource.id), + sourceName: apiSource.name + }, + run: function () { + return refreshApiSource(pool, common, apiSource, null); + } + }); + }); + + const rssFeedsData = await common.fetchRssFeedsData(pool); + (rssFeedsData.rssFeeds || []).forEach(function (rssFeed) { + backgroundTaskQueue.registerRecurringTask({ + key: 'rss-feed-refresh:' + Number(rssFeed.id), + title: 'RSS feed refresh', + category: TASK.category, + intervalMs: normalizeIntervalMs(rssFeed.update_interval_value, rssFeed.update_interval_unit), + metadata: { + sourceType: 'rss-feed', + sourceId: Number(rssFeed.id), + sourceName: rssFeed.name + }, + run: function () { + return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, null); + } + }); + }); + })(); +} + +function createDataSourceTaskService(options) { + const pool = options && options.pool; + const common = options && options.common; + const backgroundTaskQueue = options && options.backgroundTaskQueue; + + if (!pool || !common || !backgroundTaskQueue) { + throw new Error('createDataSourceTaskService requires the data source task dependencies.'); + } + + function formatRecurringKey(sourceType, id) { + return sourceType + '-refresh:' + Number(id); + } + + function buildRecurringTitle(sourceType) { + return sourceType === 'rss-feed' ? 'RSS feed refresh' : 'API source refresh'; + } + + function registerRecurringRefresh(sourceType, id, name, intervalValue, intervalUnit, run) { + backgroundTaskQueue.registerRecurringTask({ + key: formatRecurringKey(sourceType, id), + title: buildRecurringTitle(sourceType), + category: 'data-source', + intervalMs: normalizeIntervalMs(intervalValue, intervalUnit), + metadata: { + sourceType: sourceType, + sourceId: Number(id), + sourceName: name + }, + run: run + }); + } + + function removeRecurringRefresh(sourceType, id) { + backgroundTaskQueue.removeRecurringTask(formatRecurringKey(sourceType, id)); + } + + async function getTaskStatusById(taskId) { + if (!backgroundTaskQueue || typeof backgroundTaskQueue.getTaskById !== 'function') { + return null; + } + + const task = await backgroundTaskQueue.getTaskById(taskId); + if (!task) { + return null; + } + + return { + id: task.id, + key: task.key, + status: task.status, + finishedAt: task.finishedAt || '', + errorMessage: task.errorMessage || '' + }; + } + + async function refreshApiSourceInBackground(apiSourceId, actorId) { + return refreshApiSource(pool, common, apiSourceId, actorId); + } + + async function refreshRssFeedInBackground(rssFeedId, feedUrl, itemLimit, actorId) { + return refreshRssFeed(pool, common, rssFeedId, feedUrl, itemLimit, actorId); + } + + return { + formatRecurringKey: formatRecurringKey, + buildRecurringTitle: buildRecurringTitle, + registerRecurringRefresh: registerRecurringRefresh, + removeRecurringRefresh: removeRecurringRefresh, + getTaskStatusById: getTaskStatusById, + refreshApiSourceInBackground: refreshApiSourceInBackground, + refreshRssFeedInBackground: refreshRssFeedInBackground + }; +} + +module.exports = { + registerRecurringDataSourceRefreshes: registerRecurringDataSourceRefreshes, + createDataSourceTaskService: createDataSourceTaskService +}; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-scheduled/font-sweep.js b/src/web/lib/background-tasks/tasks-scheduled/font-sweep.js new file mode 100644 index 0000000..95f787c --- /dev/null +++ b/src/web/lib/background-tasks/tasks-scheduled/font-sweep.js @@ -0,0 +1,68 @@ +const TASK = { + key: 'font-sweep', + title: 'Font sweep', + category: 'cleanup', + trigger: 'recurring scheduled task, daily', + purpose: 'reconcile managed fonts on the player and remove stale font files.', + taskType: 'recurring-run', + intervalMs: 24 * 60 * 60 * 1000 +}; + +const { + collectFontLibraryDirectoryUploadPaths, + collectFontLibrarySyncOperations +} = require('../../media/font-library'); + +function registerFontSweepTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const uploadSyncService = options && options.uploadSyncService; + const pushUploadFileToPlayer = uploadSyncService && uploadSyncService.pushUploadFileToPlayer; + const removeUploadFileFromPlayer = uploadSyncService && uploadSyncService.removeUploadFileFromPlayer; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || typeof pushUploadFileToPlayer !== 'function' || typeof removeUploadFileFromPlayer !== 'function' || !mediaDir) { + throw new Error('registerFontSweepTask requires the font sweep dependencies.'); + } + + backgroundTaskQueue.registerRecurringTask({ + key: TASK.key, + title: TASK.title, + category: TASK.category, + intervalMs: TASK.intervalMs, + metadata: { + mediaDir: mediaDir + }, + run: async function () { + const desiredOperations = collectFontLibrarySyncOperations(mediaDir); + const desiredUploadPaths = new Set(desiredOperations.map(function (operation) { + return operation && operation.uploadPath ? operation.uploadPath : ''; + }).filter(Boolean)); + const currentUploadPaths = await collectFontLibraryDirectoryUploadPaths(mediaDir); + + for (let i = 0; i < desiredOperations.length; i += 1) { + const operation = desiredOperations[i] || {}; + const uploadPath = String(operation.uploadPath || '').trim(); + if (!uploadPath) { + continue; + } + + if (String(operation.type || '').trim().toLowerCase() === 'delete') { + await removeUploadFileFromPlayer(uploadPath, mediaDir); + } else { + await pushUploadFileToPlayer(uploadPath, mediaDir); + } + } + + for (let i = 0; i < currentUploadPaths.length; i += 1) { + const uploadPath = String(currentUploadPaths[i] || '').trim(); + if (!uploadPath || desiredUploadPaths.has(uploadPath)) { + continue; + } + + await removeUploadFileFromPlayer(uploadPath, mediaDir); + } + } + }); +} + +module.exports = { registerFontSweepTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-scheduled/unused-upload-sweep.js b/src/web/lib/background-tasks/tasks-scheduled/unused-upload-sweep.js new file mode 100644 index 0000000..3ae5823 --- /dev/null +++ b/src/web/lib/background-tasks/tasks-scheduled/unused-upload-sweep.js @@ -0,0 +1,42 @@ +const TASK = { + key: 'unused-upload-sweep', + title: 'Unused upload sweep', + category: 'cleanup', + trigger: 'recurring scheduled task, daily', + purpose: 'remove uploaded media files that are no longer referenced.', + taskType: 'recurring-run', + intervalMs: 24 * 60 * 60 * 1000 +}; + +function registerUnusedUploadSweepTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const uploadSyncService = options && options.uploadSyncService; + const collectUploadPathsFromDirectory = uploadSyncService && uploadSyncService.collectUploadPathsFromDirectory; + const removeUnusedUploadFiles = uploadSyncService && uploadSyncService.removeUnusedUploadFiles; + const pool = options && options.pool; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || typeof collectUploadPathsFromDirectory !== 'function' || typeof removeUnusedUploadFiles !== 'function' || !pool || !mediaDir) { + throw new Error('registerUnusedUploadSweepTask requires the unused upload sweep dependencies.'); + } + + backgroundTaskQueue.registerRecurringTask({ + key: TASK.key, + title: TASK.title, + category: TASK.category, + intervalMs: TASK.intervalMs, + metadata: { + mediaDir: mediaDir + }, + run: async function () { + const uploadPaths = await collectUploadPathsFromDirectory(mediaDir); + if (!uploadPaths.length) { + return; + } + + await removeUnusedUploadFiles(pool, mediaDir, uploadPaths); + } + }); +} + +module.exports = { registerUnusedUploadSweepTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-startup/data-source-refresh.js b/src/web/lib/background-tasks/tasks-startup/data-source-refresh.js new file mode 100644 index 0000000..3bcc82d --- /dev/null +++ b/src/web/lib/background-tasks/tasks-startup/data-source-refresh.js @@ -0,0 +1,76 @@ +const { refreshApiSource, refreshRssFeed } = require('../../data-source-refresh'); + +const TASK = { + key: 'startup-data-source-refresh', + category: 'data-source', +}; + +function scheduleStartupDataSourceRefreshes(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const pool = options && options.pool; + const common = options && options.common; + const dataSourceStartupRefreshStaggerMs = Math.max(100, Number(options && options.dataSourceStartupRefreshStaggerMs || 250)); + + if (!backgroundTaskQueue || !pool || !common) { + throw new Error('scheduleStartupDataSourceRefreshes requires the startup refresh dependencies.'); + } + + const staggerMs = Math.max(100, Number(dataSourceStartupRefreshStaggerMs || 250)); + + function buildStartupSource(type, id, name, run) { + return { + type: type, + id: Number(id), + name: name, + run: run + }; + } + + return (async function () { + const apiSourcesData = await common.fetchApiSourcesData(pool); + const rssFeedsData = await common.fetchRssFeedsData(pool); + const startupSources = []; + + (apiSourcesData.apiSources || []).forEach(function (apiSource) { + startupSources.push(buildStartupSource('api-source', apiSource.id, apiSource.name, function () { + return refreshApiSource(pool, common, apiSource, null); + })); + }); + + (rssFeedsData.rssFeeds || []).forEach(function (rssFeed) { + startupSources.push(buildStartupSource('rss-feed', rssFeed.id, rssFeed.name, function () { + return refreshRssFeed(pool, common, rssFeed.id, rssFeed.feed_url, rssFeed.item_limit, null); + })); + }); + + // Stagger startup refreshes to avoid a burst against the DB/player. + startupSources.forEach(function (source, index) { + const startupDelayMs = index * staggerMs; + + setTimeout(function () { + backgroundTaskQueue.enqueueTask({ + key: TASK.key + ':' + source.type + ':' + source.id + ':' + Date.now(), + title: source.type === 'rss-feed' ? 'RSS feed refresh' : 'API source refresh', + category: TASK.category, + taskType: 'data-source-refresh', + metadata: { + sourceType: source.type, + sourceId: source.id, + sourceName: source.name, + startupRefresh: true + }, + payload: { + sourceType: source.type, + sourceId: source.id, + sourceName: source.name, + startupRefresh: true + } + }).catch(function (error) { + console.warn('Unable to queue startup refresh for ' + source.type + ' ' + source.id + ':', error); + }); + }, startupDelayMs); + }); + })(); +} + +module.exports = { scheduleStartupDataSourceRefreshes }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-startup/font-sync.js b/src/web/lib/background-tasks/tasks-startup/font-sync.js new file mode 100644 index 0000000..1fe7d7e --- /dev/null +++ b/src/web/lib/background-tasks/tasks-startup/font-sync.js @@ -0,0 +1,32 @@ +const { collectFontLibrarySyncOperations } = require('../../media/font-library'); + +const TASK = { + key: 'initial-font-sync', + category: 'fonts' +}; + +function registerInitialFontSyncTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || !mediaDir) { + throw new Error('registerInitialFontSyncTask requires the initial font sync dependencies.'); + } + + return backgroundTaskQueue.enqueueTask({ + key: TASK.key, + title: 'Initial font sync', + category: TASK.category, + taskType: 'font-sync', + payload: { + mode: 'initial', + uploadDir: mediaDir, + operations: collectFontLibrarySyncOperations(mediaDir) + }, + persist: true + }).catch(function (error) { + console.warn('Unable to queue initial font sync:', error); + }); +} + +module.exports = { registerInitialFontSyncTask }; \ No newline at end of file diff --git a/src/web/lib/background-tasks/tasks-startup/media-sync.js b/src/web/lib/background-tasks/tasks-startup/media-sync.js new file mode 100644 index 0000000..5eb69ea --- /dev/null +++ b/src/web/lib/background-tasks/tasks-startup/media-sync.js @@ -0,0 +1,29 @@ +const TASK = { + key: 'initial-media-sync', + category: 'media-sync', +}; + +function registerInitialMediaSyncTask(options) { + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const mediaDir = String(options && options.mediaDir || '').trim(); + + if (!backgroundTaskQueue || !mediaDir) { + throw new Error('registerInitialMediaSyncTask requires the initial media sync dependencies.'); + } + + return backgroundTaskQueue.enqueueTask({ + key: TASK.key, + title: 'Initial media sync', + category: TASK.category, + taskType: 'media-sync', + payload: { + mode: 'initial', + uploadDir: mediaDir + }, + persist: true + }).catch(function (error) { + console.warn('Unable to queue initial media sync:', error); + }); +} + +module.exports = { registerInitialMediaSyncTask }; \ No newline at end of file diff --git a/src/web/lib/config.js b/src/web/lib/config.js new file mode 100644 index 0000000..d921c63 --- /dev/null +++ b/src/web/lib/config.js @@ -0,0 +1,30 @@ +const path = require('path'); + +function createWebConfig() { + const mediaDir = path.join(__dirname, '..', '..', '..', 'media'); + const uploadsDir = path.join(mediaDir, 'uploads'); + const thumbnailsDir = path.join(mediaDir, 'thumbnails'); + const assetDir = path.join(__dirname, '..', 'public'); + const playerInternalBaseUrl = (process.env.PLAYER_INTERNAL_BASE_URL || process.env.PLAYER_BASE_URL || 'http://player:8081').replace(/\/$/, ''); + const playerPublicBaseUrl = (process.env.PLAYER_PUBLIC_BASE_URL || process.env.PLAYER_BASE_URL || 'http://localhost:8081').replace(/\/$/, ''); + const sessionCookieName = 'digital_signage_session'; + const sessionMaxAgeDays = Number(process.env.SESSION_MAX_AGE_DAYS || 14); + const sessionMaxAgeMs = (Number.isFinite(sessionMaxAgeDays) && sessionMaxAgeDays > 0 ? sessionMaxAgeDays : 14) * 24 * 60 * 60 * 1000; + const port = Number(process.env.WEB_PORT || 8080); + const dataSourceStartupRefreshStaggerMs = Math.max(100, Number(process.env.DATA_SOURCE_STARTUP_REFRESH_STAGGER_MS || 250)); + + return { + port: port, + mediaDir: mediaDir, + uploadsDir: uploadsDir, + thumbnailsDir: thumbnailsDir, + assetDir: assetDir, + playerInternalBaseUrl: playerInternalBaseUrl, + playerPublicBaseUrl: playerPublicBaseUrl, + sessionCookieName: sessionCookieName, + sessionMaxAgeMs: sessionMaxAgeMs, + dataSourceStartupRefreshStaggerMs: dataSourceStartupRefreshStaggerMs + }; +} + +module.exports = { createWebConfig }; \ No newline at end of file diff --git a/src/web/lib/dashboard-state.js b/src/web/lib/dashboard-state.js index 368e56e..400f6e8 100644 --- a/src/web/lib/dashboard-state.js +++ b/src/web/lib/dashboard-state.js @@ -1,21 +1,24 @@ +// Helpers for normalizing dashboard state and date values. + const { WebSocket } = require('ws'); function normalizeClientName(value) { return String(value || '').trim(); } -function enrichScreensWithConnections(screens, connectionsBySlug, onboardingNameBySlug) { +function enrichScreensWithConnections(screens, connectionsBySlug, onboardingNameBySlug, playerUrlsBySlug) { return (screens || []).map(function (screen) { const connectionState = connectionsBySlug[screen.slug] || { count: 0, connections: [] }; return Object.assign({}, screen, { client_name: onboardingNameBySlug[screen.slug] || null, player_connection_count: connectionState.count || 0, - player_connections: Array.isArray(connectionState.connections) ? connectionState.connections : [] + player_connections: Array.isArray(connectionState.connections) ? connectionState.connections : [], + player_url: String(playerUrlsBySlug && playerUrlsBySlug[screen.slug] || '').trim() || null }); }); } -function buildClientRows(screens, connectionsBySlug, onboardingNameBySlug, onboardingNameByDeviceId, playerPublicBaseUrl, formatDashboardDate) { +function buildClientRows(screens, connectionsBySlug, onboardingNameBySlug, onboardingNameByDeviceId, formatDashboardDate) { return (screens || []).flatMap(function (screen) { const connectionState = connectionsBySlug[screen.slug] || { count: 0, connections: [] }; return (connectionState.connections || []).map(function (connection) { @@ -27,7 +30,7 @@ function buildClientRows(screens, connectionsBySlug, onboardingNameBySlug, onboa playlist_name: screen.playlist_name || null, connectedAtLabel: formatDashboardDate(connection.connectedAt), lastSeenAtLabel: formatDashboardDate(connection.lastSeenAt), - player_url: `${playerPublicBaseUrl}/screen/${encodeURIComponent(screen.slug)}` + player_url: screen.player_url || String(connection.page || '').trim() || null }); }); }); @@ -51,7 +54,6 @@ function createDashboardStateService(options) { const playerSnapshotCache = options && options.playerSnapshotCache; const playerSnapshotSockets = options && options.playerSnapshotSockets; const ensurePlayerSnapshotSubscription = options && options.ensurePlayerSnapshotSubscription; - const playerPublicBaseUrl = String(options && options.playerPublicBaseUrl || '').replace(/\/$/, ''); const formatDashboardDate = options && options.formatDashboardDate; if (!pool || !common || !playerSnapshotCache || !playerSnapshotSockets || typeof ensurePlayerSnapshotSubscription !== 'function' || typeof formatDashboardDate !== 'function') { @@ -61,6 +63,9 @@ function createDashboardStateService(options) { async function buildDashboardState() { const data = await common.fetchAdminData(pool); const screensData = data.screens || []; + const playerUrlsBySlug = typeof common.fetchScreenPlayerUrls === 'function' + ? await common.fetchScreenPlayerUrls(pool) + : {}; screensData.forEach(function (screen) { ensurePlayerSnapshotSubscription(screen.slug); }); @@ -94,14 +99,14 @@ function createDashboardStateService(options) { } }); - const screens = enrichScreensWithConnections(data.screens || [], connectionsBySlug, onboardingNameBySlug) + const screens = enrichScreensWithConnections(data.screens || [], connectionsBySlug, onboardingNameBySlug, playerUrlsBySlug) .map(function (screen) { return Object.assign({}, screen, { - player_url: `${playerPublicBaseUrl}/screen/${encodeURIComponent(screen.slug)}` + player_url: screen.player_url || null }); }) .sort(compareScreenNames); - const clients = buildClientRows(screens, connectionsBySlug, onboardingNameBySlug, onboardingNameByDeviceId, playerPublicBaseUrl, formatDashboardDate); + const clients = buildClientRows(screens, connectionsBySlug, onboardingNameBySlug, onboardingNameByDeviceId, formatDashboardDate); const playerServiceConnected = Array.from(playerSnapshotSockets.values()).some(function (socket) { return socket && socket.readyState === WebSocket.OPEN; }); diff --git a/src/web/lib/data-source-refresh.js b/src/web/lib/data-source-refresh.js index 77aa7ff..ad8ad22 100644 --- a/src/web/lib/data-source-refresh.js +++ b/src/web/lib/data-source-refresh.js @@ -1,11 +1,20 @@ -async function refreshApiSource(pool, common, apiSourceId, apiUrl, actorId) { +async function refreshApiSource(pool, common, apiSourceOrId, actorId) { const connection = await pool.getConnection(); try { + const apiSource = apiSourceOrId && typeof apiSourceOrId === 'object' + ? apiSourceOrId + : typeof common.fetchApiSourceById === 'function' + ? await common.fetchApiSourceById(pool, Number(apiSourceOrId)) + : null; + if (!apiSource) { + throw new Error('API source not found.'); + } + let responseDetails = null; let pullError = ''; try { - responseDetails = await common.fetchApiSourceResponse(apiUrl); + responseDetails = await common.fetchApiSourceResponse(apiSource); } catch (error) { pullError = String(error && error.message ? error.message : 'Unable to load API response.'); } @@ -13,7 +22,7 @@ async function refreshApiSource(pool, common, apiSourceId, apiUrl, actorId) { await connection.beginTransaction(); await connection.query( 'UPDATE i_api_sources SET last_pulled_at = ?, last_pull_error = ?, last_response_status = ?, last_response_content_type = ?, last_response_json = ?, modified_by = ? WHERE id = ?', - [new Date(), pullError || null, responseDetails ? responseDetails.responseStatus : null, responseDetails ? responseDetails.responseContentType : null, responseDetails ? responseDetails.responseJson : null, actorId, apiSourceId] + [new Date(), pullError || null, responseDetails ? responseDetails.responseStatus : null, responseDetails ? responseDetails.responseContentType : null, responseDetails ? responseDetails.responseJson : null, actorId, apiSource.id] ); await connection.commit(); } catch (error) { diff --git a/src/web/lib/helpers.js b/src/web/lib/helpers.js index e6925fa..9075334 100644 --- a/src/web/lib/helpers.js +++ b/src/web/lib/helpers.js @@ -1,3 +1,5 @@ +// Shared helpers for dashboard date formatting, uploads, and query parsing. + const dashboardDateFormatter = new Intl.DateTimeFormat('en-US', { month: 'short', day: '2-digit', diff --git a/src/web/lib/list-query.js b/src/web/lib/list-query.js index b639c39..e0e52c1 100644 --- a/src/web/lib/list-query.js +++ b/src/web/lib/list-query.js @@ -1,8 +1,22 @@ +// Shared helpers for parsing and sorting web list query state. + function parsePageNumber(value) { const pageNumber = Math.floor(Number(value) || 1); return Math.max(1, pageNumber); } +function getSearchQuery(req) { + return String(req && req.query && req.query.search || '').trim(); +} + +function getSortQuery(req) { + return String(req && req.query && req.query.sort || '').trim(); +} + +function getSortDirectionQuery(req) { + return String(req && req.query && req.query.direction || '').trim().toLowerCase() === 'desc' ? 'desc' : 'asc'; +} + function normalizeSortDirection(value) { return String(value || '').trim().toLowerCase() === 'desc' ? 'desc' : 'asc'; } @@ -81,7 +95,10 @@ function createSearchMatcher(searchTerm, fields) { module.exports = { parsePageNumber: parsePageNumber, + getSearchQuery: getSearchQuery, + getSortQuery: getSortQuery, normalizeSortDirection: normalizeSortDirection, + getSortDirectionQuery: getSortDirectionQuery, getComparableSortValue: getComparableSortValue, compareSortValues: compareSortValues, sortRows: sortRows, diff --git a/src/web/lib/notify-player-screens.js b/src/web/lib/notify-player-screens.js new file mode 100644 index 0000000..7c408b2 --- /dev/null +++ b/src/web/lib/notify-player-screens.js @@ -0,0 +1,25 @@ +function createNotifyPlayerScreens(forwardPlayerCommand) { + if (typeof forwardPlayerCommand !== 'function') { + throw new Error('createNotifyPlayerScreens requires a player command sender.'); + } + + return function notifyPlayerScreens(slugs, commandOrPayload) { + const uniqueSlugs = Array.from(new Set((slugs || []).map(function (slug) { + return String(slug || '').trim(); + }).filter(Boolean))); + + if (!uniqueSlugs.length) { + return Promise.resolve(0); + } + + return Promise.allSettled(uniqueSlugs.map(function (slug) { + return forwardPlayerCommand(slug, commandOrPayload || 'refresh'); + })).then(function (results) { + return results.filter(function (result) { + return result.status === 'fulfilled'; + }).length; + }); + }; +} + +module.exports = { createNotifyPlayerScreens }; \ No newline at end of file diff --git a/src/web/lib/pagination.js b/src/web/lib/pagination.js index 49033e9..8b4fce3 100644 --- a/src/web/lib/pagination.js +++ b/src/web/lib/pagination.js @@ -1,3 +1,5 @@ +// Shared helpers for building paginated list response state. + function normalizePageNumber(value) { const pageNumber = Math.floor(Number(value) || 1); return Math.max(1, pageNumber); @@ -89,6 +91,15 @@ function buildPagination(totalItems, currentPage, pageParam, queryState, pageSiz const firstQuery = Object.assign({}, queryState, { [normalizedPageParam]: 1 }); const lastQuery = Object.assign({}, queryState, { [normalizedPageParam]: totalPages }); + let normalizedItemLabel = String(itemLabel || 'items'); + const total = Number(totalItems) || 0; + + if (total === 1 && normalizedItemLabel.endsWith('s')) { + normalizedItemLabel = normalizedItemLabel.slice(0, -1); + } else if (total > 1 && !normalizedItemLabel.endsWith('s')) { + normalizedItemLabel += 's'; + } + return { currentPage: safeCurrentPage, totalPages: totalPages, @@ -107,7 +118,7 @@ function buildPagination(totalItems, currentPage, pageParam, queryState, pageSiz pages: pages, pageSize: normalizedPageSize, pageParam: normalizedPageParam, - itemLabel: String(itemLabel || 'items'), + itemLabel: String(normalizedItemLabel || 'item'), ariaLabel: String(ariaLabel || 'Pagination') }; } diff --git a/src/web/lib/player-actions.js b/src/web/lib/player-actions.js index 0b6e4ea..2e913a6 100644 --- a/src/web/lib/player-actions.js +++ b/src/web/lib/player-actions.js @@ -1,13 +1,55 @@ -const { createRequestAuthHeaders } = require('../../request-auth'); +const { createRequestAuthHeaders } = require('#src/request-auth'); function createPlayerActionService(options) { - const playerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').replace(/\/$/, ''); + const pool = options && options.pool; + const configuredPlayerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').replace(/\/$/, ''); const common = options && options.common; - if (!playerInternalBaseUrl || !common) { + if (!common) { throw new Error('createPlayerActionService requires the player action dependencies.'); } + let playerInternalBaseUrl = null; + let playerInternalBaseUrlPromise = null; + + async function getPlayerInternalBaseUrl() { + if (playerInternalBaseUrl) { + return playerInternalBaseUrl; + } + + if (playerInternalBaseUrlPromise) { + return playerInternalBaseUrlPromise; + } + + playerInternalBaseUrlPromise = (async function () { + if (!pool) { + return configuredPlayerInternalBaseUrl || null; + } + + try { + const [rows] = await pool.query( + `SELECT internal_base_url + FROM d_players + WHERE device_id = '1' + LIMIT 1` + ); + const resolvedBaseUrl = String(rows && rows[0] && rows[0].internal_base_url || '').trim().replace(/\/$/, ''); + return resolvedBaseUrl || configuredPlayerInternalBaseUrl || null; + } catch (_error) { + return configuredPlayerInternalBaseUrl || null; + } + })().then(function (baseUrl) { + playerInternalBaseUrl = baseUrl || null; + playerInternalBaseUrlPromise = null; + return playerInternalBaseUrl; + }, function () { + playerInternalBaseUrlPromise = null; + return configuredPlayerInternalBaseUrl || null; + }); + + return playerInternalBaseUrlPromise; + } + async function forwardPlayerCommand(slug, commandOrPayload, connectionId) { const payload = typeof commandOrPayload === 'object' && commandOrPayload !== null ? Object.assign({}, commandOrPayload) @@ -20,7 +62,12 @@ function createPlayerActionService(options) { pathname: `/api/screens/${encodeURIComponent(slug)}/commands`, body: payload }); - const response = await fetch(`${playerInternalBaseUrl}/api/screens/${encodeURIComponent(slug)}/commands`, { + const resolvedPlayerInternalBaseUrl = await getPlayerInternalBaseUrl(); + if (!resolvedPlayerInternalBaseUrl) { + throw new Error('Unable to resolve the player internal base URL.'); + } + + const response = await fetch(`${resolvedPlayerInternalBaseUrl}/api/screens/${encodeURIComponent(slug)}/commands`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -42,12 +89,50 @@ function createPlayerActionService(options) { }); } + async function forwardAnnouncementRefresh(slug) { + const authHeaders = createRequestAuthHeaders({ + method: 'POST', + pathname: `/api/screens/${encodeURIComponent(slug)}/announcements/refresh`, + body: { command: 'announcement-refresh' } + }); + const resolvedPlayerInternalBaseUrl = await getPlayerInternalBaseUrl(); + if (!resolvedPlayerInternalBaseUrl) { + throw new Error('Unable to resolve the player internal base URL.'); + } + + const response = await fetch(`${resolvedPlayerInternalBaseUrl}/api/screens/${encodeURIComponent(slug)}/announcements/refresh`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + ...authHeaders + }, + body: JSON.stringify({ command: 'announcement-refresh' }) + }); + + if (!response.ok) { + const errorText = await response.text().catch(function () { return ''; }); + const error = new Error(errorText || `Unable to refresh announcements for player ${slug}.`); + error.statusCode = response.status; + throw error; + } + + return response.json().catch(function () { + return { ok: true }; + }); + } + async function getScreenConnections(slug) { const authHeaders = createRequestAuthHeaders({ method: 'GET', pathname: `/api/screens/${encodeURIComponent(slug)}/connections` }); - const response = await fetch(`${playerInternalBaseUrl}/api/screens/${encodeURIComponent(slug)}/connections`, { + const resolvedPlayerInternalBaseUrl = await getPlayerInternalBaseUrl(); + if (!resolvedPlayerInternalBaseUrl) { + throw new Error('Unable to resolve the player internal base URL.'); + } + + const response = await fetch(`${resolvedPlayerInternalBaseUrl}/api/screens/${encodeURIComponent(slug)}/connections`, { method: 'GET', headers: { Accept: 'application/json', @@ -110,6 +195,7 @@ function createPlayerActionService(options) { return { forwardPlayerCommand: forwardPlayerCommand, + forwardAnnouncementRefresh: forwardAnnouncementRefresh, getScreenConnections: getScreenConnections, getScreenDeleteBlockMessage: getScreenDeleteBlockMessage, getSlideDeleteBlockMessage: getSlideDeleteBlockMessage, diff --git a/src/web/lib/region-scripts.js b/src/web/lib/region-scripts.js new file mode 100644 index 0000000..b3ff2a1 --- /dev/null +++ b/src/web/lib/region-scripts.js @@ -0,0 +1,36 @@ +const fs = require('fs'); +const path = require('path'); + +const PUBLIC_JS_ROOT = path.join(__dirname, '..', 'public', 'js'); +const REGION_ROOT_DIR = path.join(PUBLIC_JS_ROOT, 'regions'); +const REGION_TYPE_DIR = path.join(REGION_ROOT_DIR, 'type'); +const REGION_CORE_SCRIPTS = ['js/shared/placeholder-utils.js', 'js/shared/placeholder-chips.js', 'js/shared/time-date-placeholders.js', 'js/regions/region-utils.js', 'js/regions/region-types.js']; + +function withAssetVersion(scriptPath, assetVersion) { + if (!assetVersion) { + return scriptPath; + } + + return scriptPath + (String(scriptPath).indexOf('?') === -1 ? '?v=' : '&v=') + encodeURIComponent(String(assetVersion)); +} + +function getRegionModuleScripts(assetVersion) { + if (!fs.existsSync(REGION_TYPE_DIR)) { + return []; + } + + return fs.readdirSync(REGION_TYPE_DIR, { withFileTypes: true }) + .filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.js')) + .map((entry) => withAssetVersion(`js/regions/type/${entry.name}`, assetVersion)) + .sort((left, right) => left.localeCompare(right)); +} + +function getRegionEditorScripts(assetVersion) { + return REGION_CORE_SCRIPTS.map((script) => withAssetVersion(script, assetVersion)).concat(getRegionModuleScripts(assetVersion)); +} + +module.exports = { + getRegionModuleScripts, + getRegionEditorScripts, + withAssetVersion +}; \ No newline at end of file diff --git a/src/web/lib/slide-thumbnails.js b/src/web/lib/slide-thumbnails.js deleted file mode 100644 index aea1296..0000000 --- a/src/web/lib/slide-thumbnails.js +++ /dev/null @@ -1,291 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const puppeteer = require('puppeteer-core'); -const chromiumModule = require('@sparticuz/chromium'); -const sharp = require('sharp'); -const chromium = chromiumModule && typeof chromiumModule.executablePath === 'function' - ? chromiumModule - : chromiumModule && chromiumModule.default && typeof chromiumModule.default.executablePath === 'function' - ? chromiumModule.default - : chromiumModule; -const { - escapeHtml, - mediaKind, - renderEditorJsContent, - sanitizeFontFamily, - sanitizeFontSize, - sanitizeTextColor -} = require('../../player/render-helpers'); -const { createRequestAuthHeaders } = require('../../request-auth'); - -const SYSTEM_CHROMIUM_PATHS = [ - process.env.PUPPETEER_EXECUTABLE_PATH, - process.env.CHROMIUM_PATH, - '/usr/bin/chromium', - '/usr/bin/chromium-browser', - '/usr/local/bin/chromium', - '/snap/bin/chromium' -].filter(Boolean); -const PLAYER_VIEWPORT = { - width: 1920, - height: 1080, - deviceScaleFactor: 1 -}; -const THUMBNAIL_MAX_SIZE = { - width: 480, - height: 270 -}; - -function normalizeBaseUrl(baseUrl) { - return String(baseUrl || '').trim().replace(/\/$/, ''); -} - -function resolveAssetUrl(baseUrl, value) { - const raw = String(value || '').trim(); - if (!raw) { - return ''; - } - if (/^(?:https?:)?\/\//i.test(raw) || raw.startsWith('data:')) { - return raw; - } - const normalizedBaseUrl = normalizeBaseUrl(baseUrl); - if (!normalizedBaseUrl) { - return raw; - } - if (raw.startsWith('/')) { - return normalizedBaseUrl + raw; - } - return normalizedBaseUrl + '/' + raw.replace(/^\/+/, ''); -} - -function getCanvasSize(slide) { - const template = slide && slide.template ? slide.template : null; - return { - width: Math.max(1, Number(template && template.canvas_size_width ? template.canvas_size_width : 1920)), - height: Math.max(1, Number(template && template.canvas_size_height ? template.canvas_size_height : 1080)) - }; -} - -function getRegionContent(slide, region) { - const content = slide && slide.content && slide.content[region.region_key] ? slide.content[region.region_key] : {}; - return content && typeof content === 'object' ? content : { value: content }; -} - -function hasVisibleContent(html) { - return Boolean(String(html || '').replace(/<[^>]+>/g, '').trim()); -} - -function buildTextRegionMarkup(region, regionContent) { - const fontFamily = sanitizeFontFamily(regionContent.font_family || region.font_family); - const fontSize = sanitizeFontSize(regionContent.font_size || region.font_size); - const fontColor = sanitizeTextColor(regionContent.font_color || region.font_color); - const renderedBody = renderEditorJsContent(regionContent.value || ''); - if (!hasVisibleContent(renderedBody)) { - return ''; - } - - return '
' + renderedBody + '
'; -} - -function buildRegionInnerHtml(region, regionContent, baseUrl) { - const regionType = String(regionContent.type || region.region_type || 'text').trim().toLowerCase(); - const rawValue = regionContent && regionContent.value !== undefined ? regionContent.value : ''; - - if (regionType === 'image') { - const src = resolveAssetUrl(baseUrl, rawValue); - return src - ? '' + escapeHtml(region.label || region.region_key || 'image') + '' - : ''; - } - - if (regionType === 'video') { - const src = resolveAssetUrl(baseUrl, rawValue); - return src - ? '' - : ''; - } - - if (regionType === 'webpage') { - const src = resolveAssetUrl(baseUrl, rawValue); - return src - ? '' - : ''; - } - - if (regionType === 'html') { - const html = String(rawValue || '').trim(); - return html - ? '' - : ''; - } - - if (regionType === 'rtmp') { - const label = String(rawValue || '').trim() || 'RTMP source'; - return '
' + escapeHtml(label) + '
'; - } - - return buildTextRegionMarkup(region, regionContent); -} - -async function launchBrowser() { - let executablePath = SYSTEM_CHROMIUM_PATHS.find(function (candidate) { - return fs.existsSync(candidate); - }) || ''; - const usingSystemChromium = Boolean(executablePath); - - if (!executablePath && chromium && typeof chromium.executablePath === 'function') { - executablePath = await chromium.executablePath(); - } - - if (!executablePath || !fs.existsSync(executablePath)) { - throw new Error('Chromium executable was not found.'); - } - - if (usingSystemChromium) { - return puppeteer.launch({ - args: [ - '--no-sandbox', - '--disable-setuid-sandbox', - '--disable-dev-shm-usage', - '--disable-gpu' - ], - defaultViewport: { width: 1920, height: 1080, deviceScaleFactor: 1 }, - executablePath: executablePath, - headless: true - }); - } - - return puppeteer.launch({ - args: puppeteer.defaultArgs({ - args: chromium && chromium.args ? chromium.args : [], - headless: 'shell' - }), - defaultViewport: chromium && chromium.defaultViewport ? chromium.defaultViewport : null, - executablePath: executablePath, - headless: 'shell' - }); -} - -async function captureSlideThumbnail(options) { - const pool = options && options.pool; - const common = options && options.common; - const mediaDir = String(options && options.mediaDir || '').trim(); - const baseUrl = normalizeBaseUrl(options && options.baseUrl); - const slideId = Number(options && options.slideId || 0); - const previousThumbnailPath = String(options && options.previousThumbnailPath || '').trim(); - - if (!pool || !common || !mediaDir || !Number.isFinite(slideId) || slideId <= 0) { - throw new Error('captureSlideThumbnail requires pool, common, mediaDir, and slideId.'); - } - - const slide = await common.fetchSlideById(pool, slideId); - if (!slide) { - throw new Error('Slide not found.'); - } - - const canvasSize = getCanvasSize(slide); - const thumbnailDir = path.join(mediaDir, 'thumbnails'); - const thumbnailRelativePath = String(slide.thumbnail_path || '').trim() || '/media/thumbnails/slides/slide-' + slide.id + '.png'; - const filePath = path.join(mediaDir, thumbnailRelativePath.replace(/^\/+media\//, '')); - const fullSizePath = filePath.replace(/\.png$/i, '.full.png'); - const thumbnailTempPath = filePath.replace(/\.png$/i, '.tmp.png'); - const thumbnailPath = thumbnailRelativePath; - - await fs.promises.mkdir(path.dirname(filePath), { recursive: true }); - - async function waitForThumbnailRender(page) { - await page.waitForFunction(function () { - return document.readyState === 'complete' && Boolean(document.querySelector('.slide-canvas')); - }, { timeout: 30000 }); - - await page.waitForFunction(function () { - var canvas = document.querySelector('.slide-canvas'); - if (!canvas) { - return false; - } - - var images = Array.prototype.slice.call(canvas.querySelectorAll('img')); - return images.every(function (image) { - return image.complete && typeof image.naturalWidth === 'number'; - }); - }, { timeout: 30000 }); - - await page.evaluate(async function () { - if (document.fonts && document.fonts.ready) { - try { - await document.fonts.ready; - } catch (_error) { - // Ignore font readiness failures and fall back to the rendered frame. - } - } - }); - - await page.evaluate(function () { - return new Promise(function (resolve) { - window.requestAnimationFrame(function () { - window.requestAnimationFrame(resolve); - }); - }); - }); - } - - const browser = await launchBrowser(); - try { - const page = await browser.newPage(); - try { - const previewPath = '/api/internal/slide-thumbnails/' + slide.id + '/preview'; - const previewUrl = baseUrl + previewPath; - await page.setExtraHTTPHeaders(createRequestAuthHeaders({ - method: 'GET', - pathname: previewPath - })); - await page.setViewport(PLAYER_VIEWPORT); - await page.goto(previewUrl, { waitUntil: 'domcontentloaded', timeout: 30000 }); - await waitForThumbnailRender(page); - const canvas = await page.$('.slide-canvas'); - if (!canvas) { - throw new Error('Player render did not produce a slide canvas.'); - } - await canvas.screenshot({ path: fullSizePath }); - } finally { - await page.close().catch(function () { - return null; - }); - } - } finally { - await browser.close().catch(function () { - return null; - }); - } - - await sharp(fullSizePath) - .resize({ - width: THUMBNAIL_MAX_SIZE.width, - height: THUMBNAIL_MAX_SIZE.height, - fit: 'inside', - withoutEnlargement: true - }) - .png() - .toFile(thumbnailTempPath); - - await fs.promises.rm(filePath, { force: true }); - await fs.promises.rename(thumbnailTempPath, filePath); - await fs.promises.unlink(fullSizePath).catch(function (error) { - if (!error || error.code !== 'ENOENT') { - throw error; - } - }); - - await pool.query('UPDATE c_slides SET thumbnail_path = ? WHERE id = ?', [thumbnailPath, slide.id]); - return { - slideId: slide.id, - thumbnailPath: thumbnailPath, - filePath: filePath, - fullSizePath: fullSizePath, - mediaKind: mediaKind('') - }; -} - -module.exports = { - captureSlideThumbnail: captureSlideThumbnail -}; \ No newline at end of file diff --git a/src/web/lib/upload-sync.js b/src/web/lib/upload-sync.js deleted file mode 100644 index 077c9cf..0000000 --- a/src/web/lib/upload-sync.js +++ /dev/null @@ -1,721 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const crypto = require('crypto'); -const multer = require('multer'); -const { createRequestAuthHeaders } = require('../../request-auth'); - -function normalizeUploadRoot(uploadDir) { - return path.resolve(String(uploadDir || '').trim()); -} - -function createUploadSyncService(options) { - const pool = options && options.pool; - const common = options && options.common; - const playerInternalBaseUrl = String(options && options.playerInternalBaseUrl || '').replace(/\/$/, ''); - const playerSnapshotCache = options && options.playerSnapshotCache; - const notifyPlayerScreens = options && options.notifyPlayerScreens; - const backgroundTaskQueue = options && options.backgroundTaskQueue; - const MAX_UPLOAD_BYTES = 1024 * 1024 * 1024; - - let playerUploadSyncMode = null; - let playerUploadSyncModePromise = null; - const pendingPlayerUploadSyncs = new Map(); - let pendingPlayerUploadSyncFlushTimer = null; - let pendingPlayerUploadSyncFlushInFlight = null; - const pendingPlaylistUploadSyncs = new Map(); - let pendingPlaylistUploadSyncFlushTimer = null; - let pendingPlaylistUploadSyncFlushInFlight = null; - - if (!common || !playerSnapshotCache || typeof notifyPlayerScreens !== 'function') { - throw new Error('createUploadSyncService requires the upload dependencies.'); - } - - function createUploadMiddleware(uploadDir) { - const storage = multer.diskStorage({ - destination: function (_req, _file, cb) { - cb(null, uploadDir); - }, - filename: function (_req, file, cb) { - const safeExt = path.extname(file.originalname || '').toLowerCase(); - const stamp = `${Date.now()}-${crypto.randomUUID()}`; - cb(null, `${stamp}${safeExt}`); - } - }); - return multer({ - storage: storage, - limits: { - fileSize: MAX_UPLOAD_BYTES - } - }); - } - - function normalizeUploadReference(uploadPath) { - const value = String(uploadPath || '').trim(); - if (!value || !value.startsWith('/media/')) { - return null; - } - return value; - } - - function getUploadRelativePath(uploadPath) { - const value = normalizeUploadReference(uploadPath); - if (!value) { - return null; - } - return value.replace(/^\/media\//, ''); - } - - function resolveUploadFilePath(uploadDir, uploadPath) { - const relativePath = getUploadRelativePath(uploadPath); - if (!relativePath) { - return null; - } - - const normalizedUploadDir = normalizeUploadRoot(uploadDir); - if (!normalizedUploadDir) { - return null; - } - - const mediaRoot = path.basename(normalizedUploadDir) === 'uploads' - ? path.dirname(normalizedUploadDir) - : normalizedUploadDir; - - if (relativePath.startsWith('uploads/')) { - return path.join(mediaRoot, relativePath); - } - - return path.join(mediaRoot, relativePath); - } - - function collectUploadReferencesFromValue(value, refs) { - if (!value) { - return refs; - } - const stack = [value]; - while (stack.length) { - const current = stack.pop(); - if (Array.isArray(current)) { - current.forEach(function (item) { - stack.push(item); - }); - continue; - } - if (current && typeof current === 'object') { - Object.keys(current).forEach(function (key) { - stack.push(current[key]); - }); - continue; - } - if (typeof current === 'string') { - const reference = normalizeUploadReference(current); - if (reference) { - refs.add(reference); - } - } - } - return refs; - } - - function collectUploadReferencesFromSlide(slide) { - const refs = new Set(); - if (!slide) { - return refs; - } - collectUploadReferencesFromValue(common.parseJsonSafe(slide.content_json), refs); - return refs; - } - - function collectUploadReferencesFromTemplate(template) { - const refs = new Set(); - if (!template) { - return refs; - } - collectUploadReferencesFromValue(template.background_image_path, refs); - return refs; - } - - function collectUploadReferencesFromPayload(payload) { - const refs = new Set(); - if (!payload) { - return refs; - } - collectUploadReferencesFromValue(common.parseJsonSafe(payload.contentJson), refs); - collectUploadReferencesFromValue(payload.backgroundImagePath, refs); - return refs; - } - - async function countUploadReferences(pool, uploadPath) { - const [slideRows] = await pool.query( - `SELECT COUNT(*) AS ref_count - FROM c_slides - WHERE JSON_SEARCH(COALESCE(content_json, JSON_OBJECT()), 'one', ?) IS NOT NULL`, - [uploadPath] - ); - const [thumbnailRows] = await pool.query( - 'SELECT COUNT(*) AS ref_count FROM c_slides WHERE thumbnail_path = ?', - [uploadPath] - ); - const [templateRows] = await pool.query( - 'SELECT COUNT(*) AS ref_count FROM c_templates WHERE background_image_path = ?', - [uploadPath] - ); - return Number(slideRows[0].ref_count || 0) + Number(thumbnailRows[0].ref_count || 0) + Number(templateRows[0].ref_count || 0); - } - - async function removeUnusedUploadFiles(pool, uploadDir, uploadPaths) { - const uniquePaths = Array.from(new Set((uploadPaths || []).map(normalizeUploadReference).filter(Boolean))); - for (let i = 0; i < uniquePaths.length; i += 1) { - const uploadPath = uniquePaths[i]; - const referenceCount = await countUploadReferences(pool, uploadPath); - if (referenceCount > 0) { - continue; - } - - const filePath = resolveUploadFilePath(uploadDir, uploadPath); - try { - await fs.promises.unlink(filePath); - } catch (error) { - if (error && error.code !== 'ENOENT') { - console.warn('Unable to remove unused upload file:', filePath, error); - } - } - queuePlayerUploadSync({ - type: 'delete', - uploadPath: uploadPath, - uploadDir: uploadDir - }); - } - } - - async function collectUploadPathsFromDirectory(uploadDir) { - const normalizedUploadDir = normalizeUploadRoot(uploadDir); - if (!normalizedUploadDir) { - return []; - } - - const uploadPaths = []; - - async function walkDirectory(currentDir, relativeDir) { - let entries = []; - try { - entries = await fs.promises.readdir(currentDir, { withFileTypes: true }); - } catch (error) { - if (error && error.code !== 'ENOENT') { - console.warn('Unable to read upload directory:', currentDir, error); - } - return; - } - - for (const entry of entries) { - const entryName = String(entry && entry.name || '').trim(); - if (!entryName || entryName === '.' || entryName === '..') { - continue; - } - - const nextRelativePath = relativeDir ? path.posix.join(relativeDir, entryName) : entryName; - const nextAbsolutePath = path.join(currentDir, entryName); - - if (entry.isDirectory && entry.isDirectory()) { - await walkDirectory(nextAbsolutePath, nextRelativePath); - continue; - } - - if (entry.isFile && !entry.isFile()) { - continue; - } - - uploadPaths.push('/media/uploads/' + nextRelativePath.replace(/\\/g, '/')); - } - } - - await walkDirectory(normalizedUploadDir, ''); - return uploadPaths; - } - - async function getPlayerUploadSyncMode(localUploadDir) { - if (playerUploadSyncMode) { - return playerUploadSyncMode; - } - if (playerUploadSyncModePromise) { - return playerUploadSyncModePromise; - } - - playerUploadSyncModePromise = (async function () { - try { - const authHeaders = createRequestAuthHeaders({ - method: 'GET', - pathname: '/api/media/config' - }); - const response = await fetch(`${playerInternalBaseUrl}/api/media/config`, { - headers: { - Accept: 'application/json', - ...authHeaders - } - }); - if (!response.ok) { - return null; - } - const data = await response.json(); - const playerUploadDir = data && (data.uploadDir || data.mediaDir) ? normalizeUploadRoot(data.uploadDir || data.mediaDir) : null; - if (!playerUploadDir) { - return null; - } - return playerUploadDir === normalizeUploadRoot(localUploadDir) ? 'shared' : 'different'; - } catch (_error) { - return null; - } - })().then(function (mode) { - if (mode) { - playerUploadSyncMode = mode; - } - playerUploadSyncModePromise = null; - return mode; - }, function () { - playerUploadSyncModePromise = null; - return null; - }); - - return playerUploadSyncModePromise; - } - - async function shouldMirrorUploads(localUploadDir) { - return Boolean(localUploadDir); - } - - function queuePlayerUploadSync(operation) { - if (!operation || !operation.uploadPath) { - return; - } - - pendingPlayerUploadSyncs.set(normalizeUploadReference(operation.uploadPath), { - type: operation.type === 'delete' ? 'delete' : 'put', - uploadPath: normalizeUploadReference(operation.uploadPath), - uploadDir: operation.uploadDir || null - }); - - schedulePendingPlayerUploadSyncFlush(); - } - - function schedulePendingPlayerUploadSyncFlush() { - if (pendingPlayerUploadSyncFlushTimer) { - return; - } - - pendingPlayerUploadSyncFlushTimer = setTimeout(function () { - pendingPlayerUploadSyncFlushTimer = null; - flushPendingPlayerUploadSyncs().catch(function (error) { - console.warn('Unable to flush pending upload syncs:', error); - }); - }, 5000); - } - - async function pushUploadFileToPlayer(uploadPath, localUploadDir) { - if (!uploadPath || !(await shouldMirrorUploads(localUploadDir))) { - return false; - } - - const relativePath = getUploadRelativePath(uploadPath); - const sourcePath = resolveUploadFilePath(localUploadDir, uploadPath); - if (!relativePath || !sourcePath) { - return false; - } - let fileBuffer = null; - try { - fileBuffer = await fs.promises.readFile(sourcePath); - } catch (error) { - if (!error || error.code !== 'ENOENT') { - console.warn('Unable to read upload for player sync:', sourcePath, error); - } - return; - } - - try { - const authHeaders = createRequestAuthHeaders({ - method: 'PUT', - pathname: `/api/media/${encodeURIComponent(relativePath)}`, - body: fileBuffer - }); - const response = await fetch(`${playerInternalBaseUrl}/api/media/${encodeURIComponent(relativePath)}`, { - method: 'PUT', - headers: { - 'Content-Type': 'application/octet-stream', - ...authHeaders - }, - body: fileBuffer - }); - if (!response.ok) { - console.warn('Unable to sync upload to player:', relativePath, response.status, response.statusText); - return false; - } - return true; - } catch (error) { - console.warn('Unable to sync upload to player:', relativePath, error); - return false; - } - } - - async function removeUploadFileFromPlayer(uploadPath, localUploadDir) { - if (!uploadPath || !(await shouldMirrorUploads(localUploadDir))) { - return false; - } - - const relativePath = getUploadRelativePath(uploadPath); - if (!relativePath) { - return false; - } - try { - const authHeaders = createRequestAuthHeaders({ - method: 'DELETE', - pathname: `/api/media/${encodeURIComponent(relativePath)}` - }); - const response = await fetch(`${playerInternalBaseUrl}/api/media/${encodeURIComponent(relativePath)}`, { - method: 'DELETE', - headers: { - Accept: 'application/json', - ...authHeaders - } - }); - if (!response.ok && response.status !== 404) { - console.warn('Unable to remove upload from player:', relativePath, response.status, response.statusText); - return false; - } - return true; - } catch (error) { - console.warn('Unable to remove upload from player:', relativePath, error); - return false; - } - } - - async function syncUploadRefsToPlayer(uploadRefs, localUploadDir) { - if (!(await shouldMirrorUploads(localUploadDir))) { - return; - } - - const uniqueRefs = Array.from(new Set((uploadRefs || []).map(normalizeUploadReference).filter(Boolean))); - for (let i = 0; i < uniqueRefs.length; i += 1) { - const success = await pushUploadFileToPlayer(uniqueRefs[i], localUploadDir); - if (!success) { - queuePlayerUploadSync({ - type: 'put', - uploadPath: uniqueRefs[i], - uploadDir: localUploadDir - }); - } - } - } - - async function syncExistingUploadsToPlayer(pool, localUploadDir) { - return queueMediaSyncTask('media-sync:initial', 'Initial media sync', { - mode: 'initial', - uploadDir: localUploadDir - }); - } - - function getVisibleCurrentSlideIds() { - const visibleSlideIds = new Set(); - playerSnapshotCache.forEach(function (snapshot) { - const connections = snapshot && Array.isArray(snapshot.connections) ? snapshot.connections : []; - connections.forEach(function (connection) { - const currentSlide = connection && connection.currentSlide && typeof connection.currentSlide === 'object' - ? connection.currentSlide - : null; - const slideId = currentSlide && currentSlide.id !== undefined && currentSlide.id !== null - ? String(currentSlide.id).trim() - : ''; - if (slideId) { - visibleSlideIds.add(slideId); - } - }); - }); - return visibleSlideIds; - } - - function isScreenRefreshBlocked(screenSlug, blockedSlideIds, screenSlideCounts) { - const slideIds = Array.isArray(blockedSlideIds) - ? blockedSlideIds.map(function (value) { - return String(value || '').trim(); - }).filter(Boolean) - : []; - if (!slideIds.length) { - return false; - } - const normalizedScreenSlug = String(screenSlug || '').trim(); - const slideCount = screenSlideCounts && Object.prototype.hasOwnProperty.call(screenSlideCounts, normalizedScreenSlug) - ? Number(screenSlideCounts[normalizedScreenSlug]) - : null; - if (Number.isFinite(slideCount) && slideCount <= 1) { - return false; - } - const snapshot = playerSnapshotCache.get(String(screenSlug || '').trim()); - const connections = snapshot && Array.isArray(snapshot.connections) ? snapshot.connections : []; - return connections.some(function (connection) { - const currentSlide = connection && connection.currentSlide && typeof connection.currentSlide === 'object' - ? connection.currentSlide - : null; - const currentSlideId = currentSlide && currentSlide.id !== undefined && currentSlide.id !== null - ? String(currentSlide.id).trim() - : ''; - return currentSlideId && slideIds.includes(currentSlideId); - }); - } - - function splitRefreshScreenSlugsByVisibility(screenSlugs, blockedSlideIds, screenSlideCounts) { - const ready = []; - const blocked = []; - Array.from(new Set(Array.isArray(screenSlugs) ? screenSlugs : [])).forEach(function (screenSlug) { - const normalizedScreenSlug = String(screenSlug || '').trim(); - if (!normalizedScreenSlug) { - return; - } - if (isScreenRefreshBlocked(normalizedScreenSlug, blockedSlideIds, screenSlideCounts)) { - blocked.push(normalizedScreenSlug); - } else { - ready.push(normalizedScreenSlug); - } - }); - return { ready: ready, blocked: blocked }; - } - - function normalizePlaylistUploadSyncOperation(options) { - return { - key: String(options && options.key ? options.key : '').trim(), - pool: options && options.pool ? options.pool : null, - localUploadDir: options && options.localUploadDir ? options.localUploadDir : null, - previousUploadRefs: Array.from(new Set(options && options.previousUploadRefs ? options.previousUploadRefs : [])), - nextUploadRefs: Array.from(new Set(options && options.nextUploadRefs ? options.nextUploadRefs : [])), - blockedSlideIds: Array.from(new Set(options && options.blockedSlideIds ? options.blockedSlideIds : [])).map(function (value) { - return String(value || '').trim(); - }).filter(Boolean), - refreshScreenSlugs: Array.from(new Set(options && options.refreshScreenSlugs ? options.refreshScreenSlugs : [])).map(function (value) { - return String(value || '').trim(); - }).filter(Boolean) - , - screenSlideCounts: options && options.screenSlideCounts && typeof options.screenSlideCounts === 'object' - ? options.screenSlideCounts - : {} - }; - } - - function queuePlaylistUploadSync(operation) { - if (!operation || !operation.key) { - return; - } - pendingPlaylistUploadSyncs.set(operation.key, normalizePlaylistUploadSyncOperation(operation)); - schedulePendingPlaylistUploadSyncFlush(); - } - - function schedulePendingPlaylistUploadSyncFlush() { - if (pendingPlaylistUploadSyncFlushTimer) { - return; - } - - pendingPlaylistUploadSyncFlushTimer = setTimeout(function () { - pendingPlaylistUploadSyncFlushTimer = null; - flushPendingPlaylistUploadSyncs().catch(function (error) { - console.warn('Unable to flush pending playlist upload syncs:', error); - }); - }, 5000); - } - - async function syncPlaylistUploadsOnChange(options) { - const operation = normalizePlaylistUploadSyncOperation(options); - if (!operation.key) { - return; - } - - return queueMediaSyncTask('media-sync:' + operation.key, 'Media sync', { - mode: 'playlist', - operation: operation - }); - } - - async function flushPendingPlaylistUploadSyncs() { - if (pendingPlaylistUploadSyncFlushInFlight) { - return pendingPlaylistUploadSyncFlushInFlight; - } - - if (!pendingPlaylistUploadSyncs.size) { - return null; - } - - pendingPlaylistUploadSyncFlushInFlight = (async function () { - const pendingEntries = Array.from(pendingPlaylistUploadSyncs.values()); - for (let i = 0; i < pendingEntries.length; i += 1) { - const operation = pendingEntries[i]; - const refreshTargets = splitRefreshScreenSlugsByVisibility(operation.refreshScreenSlugs, operation.blockedSlideIds, operation.screenSlideCounts); - if (!refreshTargets.ready.length) { - continue; - } - - if (refreshTargets.ready.length) { - await notifyPlayerScreens(refreshTargets.ready, 'refresh'); - } - - pendingPlaylistUploadSyncs.delete(operation.key); - } - })().finally(function () { - pendingPlaylistUploadSyncFlushInFlight = null; - if (pendingPlaylistUploadSyncs.size) { - schedulePendingPlaylistUploadSyncFlush(); - } - }); - - return pendingPlaylistUploadSyncFlushInFlight; - } - - async function flushPendingPlayerUploadSyncs() { - if (pendingPlayerUploadSyncFlushInFlight) { - return pendingPlayerUploadSyncFlushInFlight; - } - - if (!pendingPlayerUploadSyncs.size) { - return null; - } - - pendingPlayerUploadSyncFlushInFlight = (async function () { - const pendingEntries = Array.from(pendingPlayerUploadSyncs.values()); - for (let i = 0; i < pendingEntries.length; i += 1) { - const operation = pendingEntries[i]; - let success = false; - if (operation.type === 'delete') { - success = await removeUploadFileFromPlayer(operation.uploadPath, operation.uploadDir); - } else { - success = await pushUploadFileToPlayer(operation.uploadPath, operation.uploadDir); - } - if (success) { - pendingPlayerUploadSyncs.delete(operation.uploadPath); - } - } - })().finally(function () { - pendingPlayerUploadSyncFlushInFlight = null; - if (pendingPlayerUploadSyncs.size) { - schedulePendingPlayerUploadSyncFlush(); - } - }); - - return pendingPlayerUploadSyncFlushInFlight; - } - - async function runMediaSyncTask(payload) { - const taskPayload = payload || {}; - const mode = String(taskPayload.mode || '').trim(); - - if (mode === 'initial') { - const uploadDir = String(taskPayload.uploadDir || '').trim(); - if (!(await shouldMirrorUploads(uploadDir))) { - return; - } - - const data = await common.fetchAdminData(pool); - const uploadRefs = new Set(); - (data.slides || []).forEach(function (slide) { - collectUploadReferencesFromSlide(slide).forEach(function (reference) { - uploadRefs.add(reference); - }); - }); - (data.templates || []).forEach(function (template) { - collectUploadReferencesFromTemplate(template).forEach(function (reference) { - uploadRefs.add(reference); - }); - }); - Array.from(uploadRefs).forEach(function (uploadPath) { - queuePlayerUploadSync({ - type: 'put', - uploadPath: uploadPath, - uploadDir: uploadDir - }); - }); - await flushPendingPlayerUploadSyncs(); - return; - } - - if (mode === 'playlist') { - const operation = normalizePlaylistUploadSyncOperation(taskPayload.operation || taskPayload); - - if (operation.nextUploadRefs.length) { - await syncUploadRefsToPlayer(operation.nextUploadRefs, operation.localUploadDir); - } - - if (operation.previousUploadRefs.length) { - const nextUploadRefSet = new Set(operation.nextUploadRefs); - await removeUnusedUploadFiles(pool, operation.localUploadDir, operation.previousUploadRefs.filter(function (reference) { - return !nextUploadRefSet.has(reference); - })); - } - - if (operation.refreshScreenSlugs.length) { - const refreshTargets = splitRefreshScreenSlugsByVisibility(operation.refreshScreenSlugs, operation.blockedSlideIds, operation.screenSlideCounts); - if (refreshTargets.ready.length) { - await notifyPlayerScreens(refreshTargets.ready, 'refresh'); - } - refreshTargets.blocked.forEach(function (screenSlug) { - queuePlaylistUploadSync({ - key: operation.key + ':refresh:' + screenSlug, - blockedSlideIds: operation.blockedSlideIds, - refreshScreenSlugs: [screenSlug] - }); - }); - } - return; - } - - throw new Error('Unknown media sync task mode.'); - } - - async function queueMediaSyncTask(taskKey, title, payload) { - const safePayload = Object.assign({}, payload || {}); - delete safePayload.pool; - if (safePayload.operation && typeof safePayload.operation === 'object') { - safePayload.operation = Object.assign({}, safePayload.operation); - delete safePayload.operation.pool; - } - - const definition = { - key: taskKey, - title: title, - category: 'media-sync', - taskType: 'media-sync', - payload: safePayload, - persist: true - }; - - if (backgroundTaskQueue && typeof backgroundTaskQueue.enqueueTaskAndWait === 'function') { - return backgroundTaskQueue.enqueueTaskAndWait(definition); - } - - return runMediaSyncTask(safePayload); - } - - return { - createUploadMiddleware: createUploadMiddleware, - normalizeUploadReference: normalizeUploadReference, - collectUploadReferencesFromValue: collectUploadReferencesFromValue, - collectUploadReferencesFromSlide: collectUploadReferencesFromSlide, - collectUploadReferencesFromTemplate: collectUploadReferencesFromTemplate, - collectUploadReferencesFromPayload: collectUploadReferencesFromPayload, - countUploadReferences: countUploadReferences, - removeUnusedUploadFiles: removeUnusedUploadFiles, - collectUploadPathsFromDirectory: collectUploadPathsFromDirectory, - getPlayerUploadSyncMode: getPlayerUploadSyncMode, - shouldMirrorUploads: shouldMirrorUploads, - queuePlayerUploadSync: queuePlayerUploadSync, - schedulePendingPlayerUploadSyncFlush: schedulePendingPlayerUploadSyncFlush, - pushUploadFileToPlayer: pushUploadFileToPlayer, - removeUploadFileFromPlayer: removeUploadFileFromPlayer, - syncUploadRefsToPlayer: syncUploadRefsToPlayer, - syncExistingUploadsToPlayer: syncExistingUploadsToPlayer, - getVisibleCurrentSlideIds: getVisibleCurrentSlideIds, - isScreenRefreshBlocked: isScreenRefreshBlocked, - splitRefreshScreenSlugsByVisibility: splitRefreshScreenSlugsByVisibility, - normalizePlaylistUploadSyncOperation: normalizePlaylistUploadSyncOperation, - queuePlaylistUploadSync: queuePlaylistUploadSync, - schedulePendingPlaylistUploadSyncFlush: schedulePendingPlaylistUploadSyncFlush, - syncPlaylistUploadsOnChange: syncPlaylistUploadsOnChange, - flushPendingPlaylistUploadSyncs: flushPendingPlaylistUploadSyncs, - flushPendingPlayerUploadSyncs: flushPendingPlayerUploadSyncs, - runMediaSyncTask: runMediaSyncTask, - queueMediaSyncTask: queueMediaSyncTask - }; -} - -module.exports = { createUploadSyncService }; \ No newline at end of file diff --git a/src/web/lib/web-startup.js b/src/web/lib/web-startup.js new file mode 100644 index 0000000..9650b64 --- /dev/null +++ b/src/web/lib/web-startup.js @@ -0,0 +1,34 @@ +async function initializeWebServer(options) { + const common = options && options.common; + const pool = options && options.pool; + const mediaDir = String(options && options.mediaDir || '').trim(); + const backgroundTaskQueue = options && options.backgroundTaskQueue; + const webBootstrap = options && options.webBootstrap; + const loadCurrentUser = options && options.loadCurrentUser; + const initializeBackgroundTasks = options && options.initializeBackgroundTasks; + const captureSlideThumbnail = options && options.captureSlideThumbnail; + const dataSourceStartupRefreshStaggerMs = Math.max(100, Number(options && options.dataSourceStartupRefreshStaggerMs || 250)); + const server = options && options.server; + + if (!common || !pool || !mediaDir || !backgroundTaskQueue || !webBootstrap || typeof loadCurrentUser !== 'function' || typeof initializeBackgroundTasks !== 'function' || typeof captureSlideThumbnail !== 'function' || !server) { + throw new Error('initializeWebServer requires the web startup dependencies.'); + } + + await common.ensureSchema(pool, { mediaDir: mediaDir }); + await common.bootstrapDatabase(pool); + await backgroundTaskQueue.initialize(); + + await initializeBackgroundTasks({ + pool: pool, + common: common, + backgroundTaskQueue: backgroundTaskQueue, + uploadSyncService: webBootstrap.uploadSyncService, + captureSlideThumbnail: captureSlideThumbnail, + mediaDir: mediaDir, + dataSourceStartupRefreshStaggerMs: dataSourceStartupRefreshStaggerMs + }); + + webBootstrap.installDashboardWebsocket(server, loadCurrentUser); +} + +module.exports = { initializeWebServer }; \ No newline at end of file diff --git a/src/web/middleware.js b/src/web/middleware.js new file mode 100644 index 0000000..eff0b12 --- /dev/null +++ b/src/web/middleware.js @@ -0,0 +1,38 @@ +// Shared web middleware for auth, media, and upload handling. + +const express = require('express'); +const fs = require('fs'); + +module.exports = function registerMiddleware(app, deps) { + const pool = deps.pool; + const loadCurrentUser = deps.loadCurrentUser; + const requireAuth = deps.requireAuth; + const mediaDir = deps.MEDIA_DIR; + const uploadsDir = deps.UPLOADS_DIR; + const thumbnailsDir = deps.THUMBNAILS_DIR; + const assetDir = deps.ASSET_DIR; + + app.use(express.urlencoded({ extended: true })); + app.use(express.json()); + app.use('/assets', express.static(assetDir)); + app.use('/media', express.static(mediaDir)); + fs.mkdirSync(uploadsDir, { recursive: true }); + fs.mkdirSync(thumbnailsDir, { recursive: true }); + + app.use(async function (req, _res, next) { + try { + req.currentUser = await loadCurrentUser(pool, req); + next(); + } catch (error) { + next(error); + } + }); + + app.use(function (req, res, next) { + if (req.path === '/' || req.path === '/login' || req.path === '/logout' || req.path.indexOf('/api/internal/slide-thumbnails/') === 0) { + return next(); + } + + return requireAuth(req, res, next); + }); +}; \ No newline at end of file diff --git a/src/web/pages/error.js b/src/web/pages/error.js index 5e747d4..14ded86 100644 --- a/src/web/pages/error.js +++ b/src/web/pages/error.js @@ -1,3 +1,5 @@ +// Error page renderer for the web UI. + const { renderView } = require('../view'); function getErrorCopy(statusCode, message) { diff --git a/src/web/pages/index.js b/src/web/pages/index.js index 3a4180f..cd01570 100644 --- a/src/web/pages/index.js +++ b/src/web/pages/index.js @@ -1,3 +1,5 @@ +// Page route-to-view mapping for the web UI. + const path = require('path'); function routePath(...segments) { @@ -25,6 +27,9 @@ module.exports = { renderScreensPage: require(routePath('signage', 'screens', 'list')), renderScreenFormPage: require(routePath('signage', 'screens', 'add')), renderScreenEditPage: require(routePath('signage', 'screens', 'edit')), + renderAnnouncementsPage: require(routePath('signage', 'announcements', 'list')), + renderAnnouncementFormPage: require(routePath('signage', 'announcements', 'add')), + renderAnnouncementEditPage: require(routePath('signage', 'announcements', 'edit')), renderSlidesPage: require(routePath('signage', 'slides', 'list')), renderSlideFormPage: require(routePath('signage', 'slides', 'form')), renderTemplatesPage: require(routePath('signage', 'templates', 'list')), @@ -33,6 +38,7 @@ module.exports = { renderCanvasSizesPage: require(routePath('signage', 'canvas-sizes', 'list')), renderCanvasSizeFormPage: require(routePath('signage', 'canvas-sizes', 'add')), renderCanvasSizeEditPage: require(routePath('signage', 'canvas-sizes', 'edit')), + renderFontsPage: require(routePath('settings', 'fonts', 'list')), renderBackgroundTasksPage: require(routePath('settings', 'background-tasks-page')).renderBackgroundTasksPage, renderBackgroundTasksScheduledPage: require(routePath('settings', 'background-tasks-page')).renderBackgroundTasksScheduledPage, renderErrorPage: require('./error'), diff --git a/src/web/public/css/theme-custom.css b/src/web/public/css/theme-custom.css index 45b8c9c..f114386 100644 --- a/src/web/public/css/theme-custom.css +++ b/src/web/public/css/theme-custom.css @@ -180,6 +180,141 @@ max-width: 14rem; } +.announcement-icon-picker { + position: relative; +} + +.announcement-icon-picker__toggle { + display: flex; + align-items: center; + gap: 0.75rem; + width: 100%; + min-height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + border: 1px solid var(--bs-border-color); + border-radius: 0.375rem; + background: var(--bs-body-bg); + color: var(--bs-body-color); + text-align: left; +} + +.announcement-icon-picker__toggle:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.25); +} + +.announcement-icon-picker__toggle-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 1.75rem; + height: 1.75rem; + border-radius: 0.5rem; + background: rgba(var(--bs-primary-rgb), 0.1); + color: var(--bs-primary); + font-size: 1rem; + flex: 0 0 auto; +} + +.announcement-icon-picker__toggle-label { + flex: 1 1 auto; + min-width: 0; + font-weight: 600; +} + +.announcement-icon-picker__caret { + flex: 0 0 auto; + color: var(--bs-secondary-color); + font-size: 0.8rem; +} + +.announcement-icon-picker__menu { + position: absolute; + z-index: 20; + top: calc(100% + 0.5rem); + bottom: auto; + left: 0; + width: min(100%, 28rem); + max-width: calc(100vw - 1rem); + padding: 0.75rem; + border: 1px solid var(--bs-border-color); + border-radius: 1rem; + background: var(--bs-body-bg); + box-shadow: 0 1rem 2rem rgba(15, 23, 42, 0.18); +} + +.announcement-icon-picker__menu.is-open-above { + top: auto; + bottom: calc(100% + 0.5rem); +} + +.announcement-icon-picker__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + margin-bottom: 0.75rem; + font-size: 0.875rem; + font-weight: 700; +} + +.announcement-icon-picker__grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(2.75rem, 1fr)); + gap: 0.5rem; +} + +.announcement-icon-picker__option { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + border: 1px solid var(--bs-border-color); + border-radius: 0.75rem; + background: var(--bs-body-bg); + color: var(--bs-body-color); + transition: transform 120ms ease, border-color 120ms ease, background-color 120ms ease, box-shadow 120ms ease; +} + +.announcement-icon-picker__option:hover, +.announcement-icon-picker__option:focus-visible { + border-color: rgba(var(--bs-primary-rgb), 0.7); + background: rgba(var(--bs-primary-rgb), 0.08); + box-shadow: 0 0 0 0.15rem rgba(var(--bs-primary-rgb), 0.15); + transform: translateY(-1px); +} + +.announcement-icon-picker__option.is-selected { + border-color: var(--bs-primary); + background: rgba(var(--bs-primary-rgb), 0.12); + color: var(--bs-primary); + box-shadow: 0 0 0 0.15rem rgba(var(--bs-primary-rgb), 0.12); +} + +.announcement-icon-picker__option i { + font-size: 1.05rem; + line-height: 1; +} + +@media (max-width: 576px) { + .announcement-icon-picker__menu { + width: calc(100vw - 2rem); + right: 0; + left: auto; + } + + .announcement-icon-picker__grid { + grid-template-columns: repeat(auto-fill, minmax(2.5rem, 1fr)); + } +} + +.fonts-table-responsive { + border-bottom-left-radius: var(--bs-card-border-radius); + border-bottom-right-radius: var(--bs-card-border-radius); + overflow: hidden; +} + .background-tasks-task-tools { flex-wrap: nowrap; } @@ -194,6 +329,69 @@ flex: 0 0 auto; } +.background-tasks-page { + overflow: hidden; +} + +.table-pagination-page .app-main { + padding-bottom: 0; +} + +.table-pagination-page .app-content { + height: 100%; + overflow: hidden; +} + +.table-pagination-page .app-content .container-fluid { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; + box-sizing: border-box; + padding-top: 0; + padding-bottom: 0; +} + +.background-tasks-page .app-content .container-fluid { + display: flex; + flex-direction: column; + height: 100%; + min-height: 0; + box-sizing: border-box; + padding-bottom: 1rem; +} + +.background-tasks-page .app-main { + height: 100%; + padding-bottom: 0; +} + +.background-tasks-page .app-content { + height: 100%; + overflow: hidden; +} + +[data-table-pagination-card] { + display: flex; + flex: 0 1 auto; + flex-direction: column; + min-height: 0; + max-height: var(--table-pagination-card-max-height, var(--background-tasks-task-card-max-height, calc(100dvh - 12rem))); + overflow: hidden; +} + +[data-table-pagination-card] > .card-body.table-responsive { + flex: 1 1 auto; + min-height: 0; + overflow: auto; +} + +[data-table-pagination-card] > .card-footer { + margin-top: auto; + background: var(--bs-body-bg); + border-top: 1px solid var(--bs-border-color); +} + .admin-form-card { box-shadow: none; } @@ -202,6 +400,20 @@ background: var(--bs-tertiary-bg); } +.api-source-section-heading { + display: flex; + align-items: center; + gap: 0.5rem; + margin: 0 0 1rem; + padding-bottom: 0.35rem; + border-bottom: 1px solid var(--bs-border-color); + color: var(--bs-primary); + font-size: 0.78rem; + font-weight: 800; + letter-spacing: 0.08em; + text-transform: uppercase; +} + .dashboard-hero { overflow: hidden; background: linear-gradient(135deg, rgba(13, 110, 253, 0.08), rgba(32, 201, 151, 0.08)); @@ -468,6 +680,11 @@ white-space: nowrap; } +.chip[data-time-date-placeholder-chip] { + cursor: pointer; + user-select: none; +} + .empty { color: var(--bs-secondary-color); font-style: italic; @@ -532,281 +749,179 @@ td[data-label="Slides"] { margin-top: 0.25rem; } -.slide-form-stack .ck.ck-editor, -.template-field-card .ck.ck-editor { - --ck-custom-background: var(--bs-body-bg); - --ck-custom-foreground: var(--bs-body-color); - --ck-custom-border: var(--bs-border-color); - --ck-color-base-foreground: var(--bs-tertiary-bg); - --ck-color-base-background: var(--bs-body-bg); - --ck-color-base-border: var(--bs-border-color); - --ck-color-base-text: var(--bs-body-color); - --ck-color-base-action: var(--bs-primary); - --ck-color-base-focus: var(--bs-primary); - --ck-color-base-active: var(--bs-primary); - --ck-color-base-active-focus: var(--bs-primary); - --ck-color-base-error: var(--bs-danger); - --ck-color-focus-border: rgba(var(--bs-primary-rgb), 1); - --ck-color-focus-outer-shadow: rgba(var(--bs-primary-rgb), 0.18); - --ck-color-focus-disabled-shadow: rgba(var(--bs-secondary-rgb), 0.14); - --ck-color-focus-error-shadow: rgba(var(--bs-danger-rgb), 0.18); - --ck-color-shadow-drop: rgba(0, 0, 0, 0.16); - --ck-color-shadow-drop-active: rgba(0, 0, 0, 0.22); - --ck-color-shadow-inner: rgba(0, 0, 0, 0.08); - --ck-color-button-default-background: transparent; - --ck-color-button-default-hover-background: var(--bs-secondary-bg); - --ck-color-button-default-active-background: var(--bs-secondary-bg); - --ck-color-button-default-disabled-background: transparent; - --ck-color-button-on-background: rgba(var(--bs-primary-rgb), 0.12); - --ck-color-button-on-hover-background: rgba(var(--bs-primary-rgb), 0.16); - --ck-color-button-on-active-background: rgba(var(--bs-primary-rgb), 0.16); - --ck-color-button-on-disabled-background: var(--bs-secondary-bg); - --ck-color-button-on-color: var(--bs-primary); - --ck-color-button-action-background: var(--bs-primary); - --ck-color-button-action-hover-background: var(--bs-primary); - --ck-color-button-action-active-background: var(--bs-primary); - --ck-color-button-action-disabled-background: var(--bs-primary); - --ck-color-button-action-text: var(--bs-body-bg); - --ck-color-switch-button-off-background: var(--bs-secondary-color); - --ck-color-switch-button-off-hover-background: var(--bs-secondary-color); - --ck-color-switch-button-on-background: var(--bs-primary); - --ck-color-switch-button-on-hover-background: var(--bs-primary); - --ck-color-switch-button-inner-background: var(--bs-body-bg); - --ck-color-switch-button-inner-shadow: rgba(0, 0, 0, 0.08); - --ck-color-dropdown-panel-background: var(--bs-body-bg); - --ck-color-dropdown-panel-border: var(--bs-border-color); - --ck-color-dialog-background: var(--bs-body-bg); - --ck-color-dialog-form-header-border: var(--bs-border-color); - --ck-color-list-button-on-background: rgba(var(--bs-primary-rgb), 0.12); - --ck-color-list-button-on-text: var(--bs-primary); - --ck-color-input-background: var(--bs-body-bg); - --ck-color-input-border: var(--bs-border-color); - --ck-color-input-text: var(--bs-body-color); - --ck-color-input-disabled-background: var(--bs-secondary-bg); - --ck-color-input-disabled-border: var(--bs-border-color); - --ck-color-input-disabled-text: var(--bs-secondary-color); - --ck-color-toolbar-background: var(--bs-tertiary-bg); - --ck-color-toolbar-border: var(--bs-border-color); - --ck-color-toolbar-box-shadow: none; - --ck-color-image-caption-background: var(--bs-secondary-bg); - --ck-color-image-caption-text: var(--bs-secondary-color); - --ck-color-resizer: var(--bs-primary); - --ck-color-resizer-tooltip-background: var(--bs-dark); - --ck-color-resizer-tooltip-text: var(--bs-light); - border-radius: var(--bs-border-radius); - overflow: hidden; - background: var(--bs-body-bg); - border: 1px solid var(--bs-border-color); +.slide-form-stack .editor-holder, +.template-field-card .editor-holder { + position: relative; } -.slide-form-stack .ck.ck-editor__top .ck-sticky-panel__content, -.template-field-card .ck.ck-editor__top .ck-sticky-panel__content { +.slide-form-stack .editor-holder textarea, +.template-field-card .editor-holder textarea { + width: 100%; + min-height: 10rem; +} + +.slide-form-stack .tox, +.template-field-card .tox { + border: 1px solid var(--bs-border-color); + overflow: visible !important; + background: var(--bs-body-bg); +} + +.slide-form-stack .tox.tox-tinymce, +.template-field-card .tox.tox-tinymce { + border-radius: 0 !important; +} + +.slide-form-stack .tox.tox-edit-focus, +.template-field-card .tox.tox-edit-focus { + border-color: rgba(var(--bs-primary-rgb), 0.22) !important; + box-shadow: 0 0 0 0.05rem rgba(var(--bs-primary-rgb), 0.05) !important; +} + +.slide-form-stack .tox .tox-edit-area::before, +.template-field-card .tox .tox-edit-area::before { + border: 1px solid rgba(var(--bs-primary-rgb), 0.08) !important; +} + +.slide-form-stack .tox.tox-edit-focus .tox-edit-area::before, +.template-field-card .tox.tox-edit-focus .tox-edit-area::before { + opacity: 0.35 !important; +} + +.slide-form-stack .tox .tox-editor-header, +.template-field-card .tox .tox-editor-header { border-bottom: 1px solid var(--bs-border-color); } -.slide-form-stack .ck.ck-toolbar, -.template-field-card .ck.ck-toolbar { +.slide-form-stack .tox .tox-toolbar, +.template-field-card .tox .tox-toolbar { background: var(--bs-tertiary-bg); border: 0; - border-radius: 0; } -.slide-form-stack .ck.ck-toolbar .ck-toolbar__items, -.template-field-card .ck.ck-toolbar .ck-toolbar__items { - gap: 0.15rem; +.slide-form-stack .tox .tox-toolbar__group, +.template-field-card .tox .tox-toolbar__group { + border-color: var(--bs-border-color); } -.slide-form-stack .ck.ck-toolbar .ck-button, -.slide-form-stack .ck.ck-toolbar .ck-dropdown__button, -.slide-form-stack .ck.ck-toolbar .ck-splitbutton__action, -.template-field-card .ck.ck-toolbar .ck-button, -.template-field-card .ck.ck-toolbar .ck-dropdown__button, -.template-field-card .ck.ck-toolbar .ck-splitbutton__action { - border-radius: 0.5rem; +.slide-form-stack .tox .tox-tbtn, +.template-field-card .tox .tox-tbtn { color: var(--bs-body-color); } -.slide-form-stack .ck.ck-toolbar .ck-button:hover, -.slide-form-stack .ck.ck-toolbar .ck-dropdown__button:hover, -.slide-form-stack .ck.ck-toolbar .ck-splitbutton__action:hover, -.template-field-card .ck.ck-toolbar .ck-button:hover, -.template-field-card .ck.ck-toolbar .ck-dropdown__button:hover, -.template-field-card .ck.ck-toolbar .ck-splitbutton__action:hover { +.slide-form-stack .tox .tox-tbtn:hover, +.template-field-card .tox .tox-tbtn:hover { background: var(--bs-secondary-bg); } -.slide-form-stack .ck.ck-toolbar .ck-button.ck-on, -.slide-form-stack .ck.ck-toolbar .ck-dropdown__button.ck-on, -.slide-form-stack .ck.ck-toolbar .ck-splitbutton__action.ck-on, -.template-field-card .ck.ck-toolbar .ck-button.ck-on, -.template-field-card .ck.ck-toolbar .ck-dropdown__button.ck-on, -.template-field-card .ck.ck-toolbar .ck-splitbutton__action.ck-on { +.slide-form-stack .tox .tox-tbtn--enabled, +.template-field-card .tox .tox-tbtn--enabled { background: rgba(var(--bs-primary-rgb), 0.12); color: var(--bs-primary); } -.slide-form-stack .ck.ck-toolbar .ck-button.ck-disabled, -.slide-form-stack .ck.ck-toolbar .ck-dropdown__button.ck-disabled, -.slide-form-stack .ck.ck-toolbar .ck-splitbutton__action.ck-disabled, -.template-field-card .ck.ck-toolbar .ck-button.ck-disabled, -.template-field-card .ck.ck-toolbar .ck-dropdown__button.ck-disabled, -.template-field-card .ck.ck-toolbar .ck-splitbutton__action.ck-disabled { +.slide-form-stack .tox .tox-tbtn--disabled, +.template-field-card .tox .tox-tbtn--disabled { color: var(--bs-secondary-color); } -.slide-form-stack .ck.ck-toolbar .ck-font-size-input, -.template-field-card .ck.ck-toolbar .ck-font-size-input { - flex: 0 0 5% !important; - width: 5% !important; - max-width: 5% !important; - min-width: 0 !important; -} - -.slide-form-stack .ck.ck-dropdown__panel, -.slide-form-stack .ck.ck-list__panel, -.slide-form-stack .ck.ck-balloon-panel, -.template-field-card .ck.ck-dropdown__panel, -.template-field-card .ck.ck-list__panel, -.template-field-card .ck.ck-balloon-panel { - border-color: var(--bs-border-color); - box-shadow: var(--bs-box-shadow); -} - -.slide-form-stack .ck.ck-list__item .ck-button, -.template-field-card .ck.ck-list__item .ck-button { +.slide-form-stack .tox .tox-edit-area__iframe, +.template-field-card .tox .tox-edit-area__iframe { + background: var(--bs-body-bg); color: var(--bs-body-color); } -.slide-form-stack .ck.ck-list__item .ck-button:hover, -.template-field-card .ck.ck-list__item .ck-button:hover { +.slide-form-stack .tox .tox-edit-area, +.template-field-card .tox .tox-edit-area { + min-height: 10rem; +} + +.slide-form-stack .tox .tox-edit-area__iframe, +.template-field-card .tox .tox-edit-area__iframe { + min-height: 10rem; +} + +.slide-form-stack .tox .tox-statusbar, +.template-field-card .tox .tox-statusbar { + border-top: 1px solid var(--bs-border-color); + background: var(--bs-tertiary-bg); +} + +.slide-form-stack .tox .tox-menu, +.template-field-card .tox .tox-menu, +.slide-form-stack .tox .tox-collection, +.template-field-card .tox .tox-collection { + background: var(--bs-body-bg); + border-color: var(--bs-border-color); + color: var(--bs-body-color); +} + +.slide-form-stack .tox .tox-collection__item, +.template-field-card .tox .tox-collection__item { + color: var(--bs-body-color); +} + +.slide-form-stack .tox .tox-collection__item:hover, +.template-field-card .tox .tox-collection__item:hover { background: var(--bs-secondary-bg); } -.slide-form-stack .ck.ck-dropdown__panel, -.slide-form-stack .ck.ck-list__panel, -.slide-form-stack .ck.ck-balloon-panel, -.slide-form-stack .ck.ck-toolbar .ck-dropdown__panel, -.template-field-card .ck.ck-dropdown__panel, -.template-field-card .ck.ck-list__panel, -.template-field-card .ck.ck-balloon-panel, -.template-field-card .ck.ck-toolbar .ck-dropdown__panel { +.slide-form-stack .tox .tox-input, +.template-field-card .tox .tox-input { background: var(--bs-body-bg); -} - -.slide-form-stack .ck.ck-input-text, -.slide-form-stack .ck.ck-list__item-text, -.slide-form-stack .ck.ck-list__item-label, -.slide-form-stack .ck.ck-dropdown__panel .ck-button__label, -.template-field-card .ck.ck-input-text, -.template-field-card .ck.ck-list__item-text, -.template-field-card .ck.ck-list__item-label, -.template-field-card .ck.ck-dropdown__panel .ck-button__label { + border-color: var(--bs-border-color); color: var(--bs-body-color); } -.slide-form-stack .ck.ck-input-text, -.template-field-card .ck.ck-input-text { - background: var(--bs-body-bg); - border-color: var(--bs-border-color); -} - -.slide-form-stack .ck.ck-input-text:focus, -.template-field-card .ck.ck-input-text:focus { +.slide-form-stack .tox .tox-input:focus, +.template-field-card .tox .tox-input:focus { border-color: var(--bs-primary); box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.18); } -.slide-form-stack .ck.ck-editor__main > .ck-editor__editable, -.slide-form-stack .ck.ck-editor__editable_inline, -.template-field-card .ck.ck-editor__main > .ck-editor__editable, -.template-field-card .ck.ck-editor__editable_inline { - background: var(--bs-body-bg); - color: var(--bs-body-color); - border: 0; +.slide-form-stack .tox .tox-edit-area__iframe, +.template-field-card .tox .tox-edit-area__iframe { + font-family: inherit; } -.slide-form-stack .ck.ck-editor__main > .ck-editor__editable.ck-focused, -.slide-form-stack .ck.ck-editor__editable_inline.ck-focused, -.template-field-card .ck.ck-editor__main > .ck-editor__editable.ck-focused, -.template-field-card .ck.ck-editor__editable_inline.ck-focused { - box-shadow: inset 0 0 0 1px var(--bs-primary), 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.18); -} - -.slide-form-stack .ck-editor__editable_inline, -.template-field-card .ck-editor__editable_inline { - min-height: 10rem; -} - -.slide-form-stack .ck-content, -.template-field-card .ck-content { +.slide-form-stack .tox-content, +.template-field-card .tox-content { font-family: inherit; line-height: 1.55; } -.slide-form-stack .ck-content h1, -.slide-form-stack .ck-content h2, -.slide-form-stack .ck-content h3, -.slide-form-stack .ck-content h4, -.slide-form-stack .ck-content h5, -.slide-form-stack .ck-content h6, -.template-field-card .ck-content h1, -.template-field-card .ck-content h2, -.template-field-card .ck-content h3, -.template-field-card .ck-content h4, -.template-field-card .ck-content h5, -.template-field-card .ck-content h6 { +.slide-form-stack .tox-content h1, +.slide-form-stack .tox-content h2, +.slide-form-stack .tox-content h3, +.slide-form-stack .tox-content h4, +.slide-form-stack .tox-content h5, +.slide-form-stack .tox-content h6, +.template-field-card .tox-content h1, +.template-field-card .tox-content h2, +.template-field-card .tox-content h3, +.template-field-card .tox-content h4, +.template-field-card .tox-content h5, +.template-field-card .tox-content h6 { color: var(--bs-body-color); } -.slide-form-stack .ck-content p, -.template-field-card .ck-content p { +.slide-form-stack .tox-content p, +.template-field-card .tox-content p { margin-bottom: 0.75rem; } -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-dropdown__panel, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list__panel, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-balloon-panel { +html[data-bs-theme='dark'] .slide-form-stack .tox, +html[data-bs-theme='dark'] .template-field-card .tox, +html[data-bs-theme='dark'] .slide-form-stack .tox .tox-menu, +html[data-bs-theme='dark'] .template-field-card .tox .tox-menu, +html[data-bs-theme='dark'] .slide-form-stack .tox .tox-collection, +html[data-bs-theme='dark'] .template-field-card .tox .tox-collection { background: var(--bs-body-bg) !important; background-color: var(--bs-body-bg) !important; border-color: var(--bs-border-color) !important; color: var(--bs-body-color) !important; } -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list__item .ck-button, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-button, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list__item .ck-button__label, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-button__label, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-dropdown__panel .ck-button__label, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-dropdown__panel .ck-list__item-text, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-dropdown__panel .ck-list__item-label, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid, -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { - color: var(--bs-body-color) !important; -} - -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-button { - background: transparent !important; -} - -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-list-item-button { - background: transparent !important; - background-color: transparent !important; -} - -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-list-item-button:hover { - background: var(--bs-secondary-bg) !important; - background-color: var(--bs-secondary-bg) !important; -} - -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-list .ck-button:hover { - background: var(--bs-secondary-bg) !important; -} - -html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { - border-color: var(--bs-border-color) !important; -} - .slide-preview-dimensions-chip { display: inline-flex; @@ -1137,7 +1252,7 @@ html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { .template-designer-layout { display: grid; - grid-template-columns: minmax(0, 1fr) 20rem; + grid-template-columns: minmax(0, 1fr) 25rem; gap: 1rem; align-items: start; } @@ -1435,7 +1550,8 @@ html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { } .template-field-card { - overflow: hidden; + position: relative; + overflow: visible; } .template-field-card .card-header, @@ -1444,11 +1560,6 @@ html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { border-bottom: 1px solid var(--bs-border-color-translucent); } -.template-field-card .card-body, -.region-item .card-body { - background: var(--bs-body-bg); -} - .template-field-card label, .region-item label { margin-bottom: 0; @@ -1465,11 +1576,105 @@ html[data-bs-theme='dark'] .ck-body-wrapper .ck.ck-color-grid__tile { width: 100%; } -.template-field-card .ckeditor-holder { +.template-field-card .editor-holder { min-width: 0; } -.template-field-card.is-expanded .ck-editor__editable_inline { +.announcement-color-preview { + display: flex; + align-items: center; + justify-content: center; + min-width: 5.5rem; + height: calc(2.375rem + 2px); + box-sizing: border-box; + border: 1px solid var(--bs-border-color); + border-radius: var(--bs-border-radius); +} + +.announcement-icon-preview { + display: flex; + align-items: center; + justify-content: center; + min-width: 5.5rem; + height: calc(2.375rem + 2px); + border: 1px solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + background: var(--bs-tertiary-bg); + font-size: 1.35rem; +} + +.announcement-list-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + border-radius: 999px; + flex: 0 0 auto; + font-size: 1.1rem; +} + +.api-region-placeholder-section { + display: grid; + gap: 0.5rem; + padding-top: 0.25rem; +} + +.api-region-placeholder-title { + color: var(--bs-primary); + font-size: 0.8rem; + font-weight: 800; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +.api-region-sample-accordion { + padding: 0.85rem 1rem; + border: 1px solid var(--bs-border-color); + border-radius: 0.85rem; + background: var(--bs-secondary-bg); +} + +.api-region-sample-accordion > summary { + cursor: pointer; + list-style: none; + color: var(--bs-primary); + font-size: 0.8rem; + font-weight: 800; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +.api-region-sample-accordion > summary::-webkit-details-marker { + display: none; +} + +.api-region-sample-body { + display: grid; + gap: 0.5rem; + margin-top: 0.75rem; +} + +.api-region-sample-meta { + color: var(--bs-secondary-color); + font-size: 0.78rem; +} + +.api-region-sample-preview { + max-height: 12rem; + overflow: auto; + margin: 0; + padding: 0.75rem; + border-radius: 0.65rem; + background: var(--bs-body-bg); + border: 1px solid var(--bs-border-color-translucent); + white-space: pre-wrap; + word-break: break-word; + font-size: 0.78rem; + line-height: 1.45; +} + +.template-field-card.is-expanded .tox-edit-area__iframe { min-height: 32rem; } diff --git a/src/web/public/js/admin/admin-page.js b/src/web/public/js/admin/admin-page.js index 61d80c0..ff8f984 100644 --- a/src/web/public/js/admin/admin-page.js +++ b/src/web/public/js/admin/admin-page.js @@ -80,6 +80,37 @@ } function initAsyncCommandForms() { + function getAnnouncementActionState(actionPath) { + var isPlay = /\/play$/.test(actionPath); + return { + nextActionPath: actionPath.replace(/\/(?:play|stop)$/, isPlay ? '/stop' : '/play'), + nextLabel: isPlay ? 'Stop' : 'Play', + nextIcon: isPlay ? 'bi-stop-fill' : 'bi-play-fill', + nextClassName: isPlay ? 'btn-outline-warning' : 'btn-outline-success', + nextConfirmMessage: isPlay + ? 'Stop this announcement on the selected screens now?' + : 'Send this announcement to the selected screens now?' + }; + } + + function updateAnnouncementActionButton(form, actionPath) { + if (!form) { + return false; + } + + var state = getAnnouncementActionState(actionPath); + var visibleButton = form.querySelector('button[type="submit"]') || (form.id ? document.querySelector('button[form="' + form.id + '"]') : null); + if (!visibleButton) { + return false; + } + + form.action = state.nextActionPath; + form.setAttribute('data-confirm-message', state.nextConfirmMessage); + visibleButton.className = visibleButton.className.replace(/btn-outline-(success|warning)/g, state.nextClassName); + visibleButton.innerHTML = '' + state.nextLabel; + return true; + } + document.addEventListener('submit', function (event) { var form = event.target; if (!form || !form.hasAttribute || !form.hasAttribute('data-async-command')) { @@ -97,6 +128,14 @@ return; } + var actionPath = ''; + try { + actionPath = new URL(form.action, window.location.href).pathname; + } catch (_error) { + actionPath = String(form.action || ''); + } + var shouldReloadAfterSuccess = /^\/announcements\/\d+\/(?:play|stop)$/.test(actionPath); + event.preventDefault(); form.dataset.busy = 'true'; @@ -116,6 +155,11 @@ }, body: body.toString(), credentials: 'same-origin' + }).then(function (response) { + if (shouldReloadAfterSuccess && response && response.ok) { + window.location.reload(); + return; + } }).finally(function () { delete form.dataset.busy; }); @@ -426,6 +470,52 @@ }); } + function renderJsonPrimitive(value) { + if (value === null) { + return 'null'; + } + if (value === true || value === false) { + return '' + String(value) + ''; + } + if (typeof value === 'number') { + return '' + escapeHtml(String(value)) + ''; + } + return '"' + escapeHtml(String(value)) + '"'; + } + + function renderJsonNode(key, value, isRoot) { + var isArray = Array.isArray(value); + var isObject = value && typeof value === 'object' && !isArray; + + if (!isArray && !isObject) { + var primitiveLabel = isRoot ? 'value' : String(key); + return '
' + escapeHtml(primitiveLabel) + ':' + renderJsonPrimitive(value) + '
'; + } + + var entries = isArray + ? value.map(function (entry, index) { + return renderJsonNode('[' + index + ']', entry, false); + }).join('') + : Object.keys(value).map(function (childKey) { + return renderJsonNode(childKey, value[childKey], false); + }).join(''); + + var summaryLabel = isRoot ? (isArray ? 'Array' : 'Object') : String(key); + var summaryMeta = isArray ? '[' + value.length + ']' : '{' + Object.keys(value).length + '}'; + return '' + + '
' + + '' + escapeHtml(summaryLabel) + ':' + escapeHtml(summaryMeta) + '' + + '
' + entries + '
' + + '
'; + } + + function renderJsonTree(value) { + if (Array.isArray(value) || (value && typeof value === 'object')) { + return renderJsonNode('', value, true); + } + return renderJsonNode('value', value, true); + } + function initJsonTogglePanels(root) { var scope = root && root.querySelectorAll ? root : document; var panels = scope.querySelectorAll('[data-json-toggle-panel]'); @@ -436,8 +526,8 @@ } var card = panel.closest ? panel.closest('.card') : null; - var button = card ? card.querySelector('[data-json-toggle]') : null; - var label = button ? button.querySelector('[data-json-toggle-label]') : null; + var collapseButton = card ? card.querySelector('[data-json-toggle-collapse-all]') : null; + var expandButton = card ? card.querySelector('[data-json-toggle-expand-all]') : null; var sourceNode = panel.querySelector('[data-json-toggle-source]'); var rawJson = ''; try { @@ -463,32 +553,47 @@ return; } - var compactJson = JSON.stringify(parsedJson); var formattedJson = JSON.stringify(parsedJson, null, 2); - var isFormatted = true; + var formattedTree = renderJsonTree(parsedJson); - function syncButtonLabel() { - if (!button || !label) { - return; + function setAllSectionsExpanded(expanded) { + var details = output.querySelectorAll('details'); + Array.prototype.forEach.call(details, function (detail) { + detail.open = expanded; + }); + + if (collapseButton) { + collapseButton.disabled = !details.length || !expanded; + } + if (expandButton) { + expandButton.disabled = !details.length || expanded; } - label.textContent = isFormatted - ? String(button.getAttribute('data-json-toggle-label-compact') || 'Unformat JSON') - : String(button.getAttribute('data-json-toggle-label-formatted') || 'Format JSON'); - button.setAttribute('aria-pressed', isFormatted ? 'true' : 'false'); } - function syncOutput() { - output.textContent = isFormatted ? formattedJson : compactJson; - syncButtonLabel(); + function syncButtons() { + if (collapseButton) { + collapseButton.setAttribute('aria-pressed', 'false'); + } + if (expandButton) { + expandButton.setAttribute('aria-pressed', 'true'); + } } - output.textContent = formattedJson; - syncButtonLabel(); + output.innerHTML = formattedTree; + syncButtons(); + setAllSectionsExpanded(true); - if (button) { - button.addEventListener('click', function () { - isFormatted = !isFormatted; - syncOutput(); + if (collapseButton) { + collapseButton.addEventListener('click', function () { + setAllSectionsExpanded(false); + syncButtons(); + }); + } + + if (expandButton) { + expandButton.addEventListener('click', function () { + setAllSectionsExpanded(true); + syncButtons(); }); } }); diff --git a/src/web/public/js/announcements/announcement-form.js b/src/web/public/js/announcements/announcement-form.js new file mode 100644 index 0000000..4cf6444 --- /dev/null +++ b/src/web/public/js/announcements/announcement-form.js @@ -0,0 +1,237 @@ +function updateAnnouncementDurationFields() { + var modeSelect = document.getElementById('announcement-duration-mode'); + var durationFields = document.querySelector('[data-announcement-duration-value-fields]'); + if (!modeSelect || !durationFields) { + return; + } + + var durationValueInput = document.getElementById('announcement-duration-value'); + var durationUnitSelect = document.getElementById('announcement-duration-unit'); + var isDurationMode = String(modeSelect.value || '').trim() === 'duration'; + + durationFields.hidden = !isDurationMode; + if (durationValueInput) { + durationValueInput.disabled = !isDurationMode; + } + if (durationUnitSelect) { + durationUnitSelect.disabled = !isDurationMode; + } +} + +function updateAnnouncementColorPreview() { + var colorSelect = document.getElementById('announcement-color'); + var preview = document.querySelector('[data-announcement-color-preview]'); + if (!colorSelect || !preview) { + return; + } + + var selectedOption = colorSelect.options[colorSelect.selectedIndex] || null; + var colorKey = String(colorSelect.value || '').trim().toLowerCase() || 'primary'; + var label = selectedOption ? String(selectedOption.textContent || selectedOption.label || colorKey).trim() : colorKey; + + preview.className = 'announcement-color-preview text-bg-' + colorKey; + preview.setAttribute('aria-label', label); + preview.setAttribute('title', label); + preview.textContent = ''; +} + +function updateAnnouncementIconPreview() { + var iconSelect = document.getElementById('announcement-icon'); + var preview = document.querySelector('[data-announcement-icon-preview]'); + if (!iconSelect || !preview) { + return; + } + + var selectedOption = iconSelect.options[iconSelect.selectedIndex] || null; + var iconKey = selectedOption ? String(selectedOption.value || '').trim().toLowerCase() : ''; + var label = selectedOption ? String(selectedOption.textContent || selectedOption.label || iconKey).trim() : iconKey; + + preview.className = 'announcement-icon-preview'; + preview.innerHTML = ''; + preview.setAttribute('aria-label', label); + preview.setAttribute('title', label); +} + +function positionAnnouncementIconPicker() { + var picker = document.querySelector('[data-announcement-icon-picker]'); + var toggle = document.querySelector('[data-announcement-icon-picker-toggle]'); + var shell = document.querySelector('[data-announcement-icon-picker-shell]'); + if (!picker || picker.hidden || !toggle || !shell) { + return; + } + + var padding = 8; + var toggleRect = toggle.getBoundingClientRect(); + var menuRect = picker.getBoundingClientRect(); + var viewportHeight = window.innerHeight || document.documentElement.clientHeight || toggleRect.bottom; + var placementAbove = false; + var spaceBelow = viewportHeight - toggleRect.bottom - padding; + var spaceAbove = toggleRect.top - padding; + + if (menuRect.height > spaceBelow && spaceAbove > spaceBelow) { + placementAbove = true; + } + + picker.classList.toggle('is-open-above', placementAbove); +} + +function closeAnnouncementIconPicker() { + var picker = document.querySelector('[data-announcement-icon-picker]'); + var toggle = document.querySelector('[data-announcement-icon-picker-toggle]'); + if (!picker) { + return; + } + + picker.hidden = true; + picker.classList.remove('is-open-above'); + if (toggle) { + toggle.setAttribute('aria-expanded', 'false'); + } +} + +function openAnnouncementIconPicker() { + var picker = document.querySelector('[data-announcement-icon-picker]'); + var toggle = document.querySelector('[data-announcement-icon-picker-toggle]'); + if (!picker) { + return; + } + + picker.hidden = false; + if (toggle) { + toggle.setAttribute('aria-expanded', 'true'); + } + + if (typeof window !== 'undefined' && window.requestAnimationFrame) { + window.requestAnimationFrame(positionAnnouncementIconPicker); + } else { + positionAnnouncementIconPicker(); + } +} + +function updateAnnouncementIconPickerSelection() { + var iconSelect = document.getElementById('announcement-icon'); + var previewButton = document.querySelector('[data-announcement-icon-picker-toggle]'); + var picker = document.querySelector('[data-announcement-icon-picker]'); + if (!iconSelect || !previewButton || !picker) { + return; + } + + var selectedOption = iconSelect.options[iconSelect.selectedIndex] || null; + var selectedValue = selectedOption ? String(selectedOption.value || '').trim().toLowerCase() : ''; + var label = selectedOption ? String(selectedOption.textContent || selectedOption.label || selectedValue).trim() : selectedValue; + var icon = previewButton.querySelector('[data-announcement-icon-picker-icon]'); + var text = previewButton.querySelector('[data-announcement-icon-picker-label]'); + + previewButton.setAttribute('aria-label', label); + previewButton.setAttribute('title', label); + if (icon) { + icon.className = 'bi bi-' + selectedValue; + } + if (text) { + text.textContent = label; + } + + picker.querySelectorAll('[data-announcement-icon-option]').forEach(function (button) { + var isSelected = String(button.getAttribute('data-icon-key') || '').trim().toLowerCase() === selectedValue; + button.classList.toggle('is-selected', isSelected); + button.setAttribute('aria-pressed', isSelected ? 'true' : 'false'); + }); +} + +function setAnnouncementIconValue(iconKey) { + var iconSelect = document.getElementById('announcement-icon'); + if (!iconSelect) { + return; + } + + var normalized = String(iconKey || '').trim().toLowerCase(); + if (!normalized) { + return; + } + + iconSelect.value = normalized; + updateAnnouncementIconPreview(); + updateAnnouncementIconPickerSelection(); +} + +function initAnnouncementForm() { + var modeSelect = document.getElementById('announcement-duration-mode'); + var colorSelect = document.getElementById('announcement-color'); + var iconSelect = document.getElementById('announcement-icon'); + var iconPickerToggle = document.querySelector('[data-announcement-icon-picker-toggle]'); + var iconPicker = document.querySelector('[data-announcement-icon-picker]'); + var iconPickerClose = document.querySelector('[data-announcement-icon-picker-close]'); + + if (modeSelect) { + modeSelect.addEventListener('change', updateAnnouncementDurationFields); + updateAnnouncementDurationFields(); + } + + if (colorSelect) { + colorSelect.addEventListener('change', updateAnnouncementColorPreview); + updateAnnouncementColorPreview(); + } + + if (iconSelect) { + iconSelect.addEventListener('change', updateAnnouncementIconPreview); + updateAnnouncementIconPreview(); + } + + if (iconPickerToggle) { + iconPickerToggle.addEventListener('click', function (event) { + event.preventDefault(); + var isExpanded = iconPicker && !iconPicker.hidden; + if (isExpanded) { + closeAnnouncementIconPicker(); + } else { + openAnnouncementIconPicker(); + } + }); + } + + if (iconPickerClose) { + iconPickerClose.addEventListener('click', function (event) { + event.preventDefault(); + closeAnnouncementIconPicker(); + }); + } + + if (iconPicker) { + iconPicker.addEventListener('click', function (event) { + var button = event.target && event.target.closest ? event.target.closest('[data-announcement-icon-option]') : null; + if (!button) { + return; + } + + event.preventDefault(); + setAnnouncementIconValue(button.getAttribute('data-icon-key')); + closeAnnouncementIconPicker(); + }); + } + + window.addEventListener('resize', positionAnnouncementIconPicker); + + document.addEventListener('click', function (event) { + var picker = document.querySelector('[data-announcement-icon-picker]'); + var toggle = document.querySelector('[data-announcement-icon-picker-toggle]'); + if (!picker || picker.hidden) { + return; + } + + if (picker.contains(event.target) || (toggle && toggle.contains(event.target))) { + return; + } + + closeAnnouncementIconPicker(); + }); + + updateAnnouncementIconPickerSelection(); +} + +if (typeof document !== 'undefined') { + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initAnnouncementForm, { once: true }); + } else { + initAnnouncementForm(); + } +} \ No newline at end of file diff --git a/src/web/public/js/data-sources/api-source-form.js b/src/web/public/js/data-sources/api-source-form.js new file mode 100644 index 0000000..22a2a1a --- /dev/null +++ b/src/web/public/js/data-sources/api-source-form.js @@ -0,0 +1,32 @@ +// API source form visibility helpers. + +(function () { + var form = document.getElementById('api-source-form'); + if (!form) { + return; + } + + var methodSelect = form.querySelector('[data-api-source-auth-method]'); + var authDetailsSection = form.querySelector('[data-api-source-auth-details-section]'); + var panels = Array.prototype.slice.call(form.querySelectorAll('[data-api-source-auth-panel]')); + + function updatePanels() { + var method = String(methodSelect && methodSelect.value || 'none').trim(); + var hasAuth = method !== 'none'; + + if (authDetailsSection) { + authDetailsSection.hidden = !hasAuth; + } + + panels.forEach(function (panel) { + var panelMethod = String(panel.getAttribute('data-api-source-auth-panel') || '').trim(); + panel.hidden = !hasAuth || panelMethod !== method; + }); + } + + if (methodSelect) { + methodSelect.addEventListener('change', updatePanels); + } + + updatePanels(); +}()); \ No newline at end of file diff --git a/src/web/public/js/lib/modal.js b/src/web/public/js/lib/modal.js index e3ffb0a..ca3eac6 100644 --- a/src/web/public/js/lib/modal.js +++ b/src/web/public/js/lib/modal.js @@ -1,3 +1,5 @@ +// Bootstrap modal convenience wrapper for the browser scripts. + (function () { function getOrCreate(modalElement) { if (!modalElement || !window.bootstrap || !window.bootstrap.Modal) { diff --git a/src/web/public/js/rbac-permissions.js b/src/web/public/js/rbac-permissions.js index 10da083..3f6319e 100644 --- a/src/web/public/js/rbac-permissions.js +++ b/src/web/public/js/rbac-permissions.js @@ -1,3 +1,5 @@ +// RBAC permission matrix helpers for checkbox groups. + (function () { function getGroupCheckboxes(group) { return Array.prototype.slice.call(group.querySelectorAll('input[name="permission_keys[]"]')); diff --git a/src/web/public/js/regions/region-types.js b/src/web/public/js/regions/region-types.js new file mode 100644 index 0000000..c8fdf7d --- /dev/null +++ b/src/web/public/js/regions/region-types.js @@ -0,0 +1,116 @@ +// Shared registry for region-type helpers used by the slide and template editors. + +(function () { + var root = window; + var registry = root.pulseRegionTypes && typeof root.pulseRegionTypes === 'object' ? root.pulseRegionTypes : {}; + + function normalizeType(type) { + return String(type || '').trim().toLowerCase(); + } + + function parseLockRatio(value) { + var raw = String(value || '').trim(); + if (!/^[0-9]+\s*:[0-9]+$/.test(raw)) { + return null; + } + + var parts = raw.replace(/\s+/g, '').split(':'); + var width = Number(parts[0]); + var height = Number(parts[1]); + if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) { + return null; + } + + return { label: parts[0] + ':' + parts[1], ratio: width / height }; + } + + function getFallbackDefaultSize(regionType, lockRatio) { + var ratio = parseLockRatio(lockRatio); + + if (ratio) { + if (ratio.ratio >= 1) { + var baseWidth = 300; + return { + width: Math.max(12, Math.round(baseWidth)), + height: Math.max(12, Math.round(baseWidth / ratio.ratio)) + }; + } + + var baseHeight = 240; + return { + width: Math.max(12, Math.round(baseHeight * ratio.ratio)), + height: Math.max(12, Math.round(baseHeight)) + }; + } + + return { + width: 300, + height: 120 + }; + } + + function register(type, definition) { + registry[normalizeType(type)] = definition || {}; + return registry[normalizeType(type)]; + } + + function get(type) { + return registry[normalizeType(type)] || null; + } + + function list() { + return Object.keys(registry).map(function (type) { + return { + type: type, + definition: registry[type] || {} + }; + }); + } + + function getDefaultRegionSize(regionType, lockRatio) { + var definition = get(regionType); + if (definition && typeof definition.getDefaultRegionSize === 'function') { + return definition.getDefaultRegionSize(lockRatio); + } + + return getFallbackDefaultSize(normalizeType(regionType), lockRatio); + } + + function getDefaultRegionStyle(regionType) { + var definition = get(regionType); + if (definition && typeof definition.getDefaultStyle === 'function') { + return definition.getDefaultStyle(); + } + + return null; + } + + function getRegionChipLabel(regionType) { + var definition = get(regionType); + if (definition && definition.label) { + return String(definition.label); + } + + var normalized = normalizeType(regionType); + if (!normalized) { + return 'Region'; + } + + return normalized + .split(/[_-]+/) + .filter(function (segment) { return segment; }) + .map(function (segment) { + return segment.charAt(0).toUpperCase() + segment.slice(1); + }) + .join(' ') || 'Region'; + } + + root.pulseRegionTypes = { + register: register, + get: get, + list: list, + getDefaultRegionSize: getDefaultRegionSize, + getDefaultRegionStyle: getDefaultRegionStyle, + getRegionChipLabel: getRegionChipLabel + }; +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/region-utils.js b/src/web/public/js/regions/region-utils.js new file mode 100644 index 0000000..8d96800 --- /dev/null +++ b/src/web/public/js/regions/region-utils.js @@ -0,0 +1,772 @@ +// Shared browser utilities for region helper modules. + +(function () { + function escapeHtml(value) { + if (window.webUiHelpers && typeof window.webUiHelpers.escapeHtml === 'function') { + return window.webUiHelpers.escapeHtml(value); + } + + return String(value === undefined || value === null ? '' : value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + + function sanitizePreviewHtml(html) { + var output = String(html || ''); + output = output.replace(//gi, ''); + output = output.replace(//gi, ''); + return output.replace(/<[^>]+>/g, function (tag) { + var match = tag.match(/^<\s*(\/?)\s*([a-z0-9]+)([\s\S]*?)(\/?)>$/i); + if (!match) { + return ''; + } + + var closing = Boolean(match[1]); + var name = String(match[2] || '').toLowerCase(); + var attrText = String(match[3] || ''); + var selfClosing = Boolean(match[4]) || name === 'br' || name === 'hr'; + var allowed = ['a', 'b', 'blockquote', 'br', 'code', 'div', 'em', 'figure', 'figcaption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'li', 'ol', 'p', 'pre', 'span', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'u', 'ul']; + if (allowed.indexOf(name) === -1) { + return ''; + } + + if (closing) { + return ''; + } + + return '<' + name + sanitizeTagAttributes(name, attrText) + '>'; + }); + } + + function sanitizeRichText(html) { + return sanitizePreviewHtml(html); + } + + function sanitizeTagAttributes(tagName, attrText) { + var allowedAttributes = { + a: ['href', 'title', 'target', 'rel', 'class', 'style'], + blockquote: ['class', 'style'], + div: ['class', 'style'], + figure: ['class', 'style'], + figcaption: ['class', 'style'], + h1: ['class', 'style'], + h2: ['class', 'style'], + h3: ['class', 'style'], + h4: ['class', 'style'], + h5: ['class', 'style'], + h6: ['class', 'style'], + li: ['class', 'style'], + ol: ['class', 'style', 'start'], + p: ['class', 'style'], + pre: ['class', 'style'], + span: ['class', 'style'], + table: ['class', 'style'], + td: ['class', 'style', 'colspan', 'rowspan'], + th: ['class', 'style', 'colspan', 'rowspan', 'scope'], + tr: ['class', 'style'], + ul: ['class', 'style'] + }; + var allowed = allowedAttributes[tagName] || []; + if (!allowed.length) { + return ''; + } + + var attrs = []; + attrText.replace(/([a-zA-Z0-9:-]+)(?:\s*=\s*("([^"]*)"|'([^']*)'|([^\s"'>/=`]+)))?/g, function (_full, key, _valuePart, doubleQuoted, singleQuoted, bareValue) { + var lowerKey = String(key || '').toLowerCase(); + if (allowed.indexOf(lowerKey) === -1) { + return ''; + } + + var value = doubleQuoted !== undefined ? doubleQuoted : singleQuoted !== undefined ? singleQuoted : bareValue !== undefined ? bareValue : ''; + if (lowerKey === 'href' && /^(?:\s*javascript:|\s*data:)/i.test(String(value || ''))) { + return ''; + } + if (lowerKey === 'style' && /(?:expression\s*\(|javascript:|url\s*\()/i.test(String(value || ''))) { + return ''; + } + if (lowerKey === 'target') { + var targetValue = String(value || '').trim(); + if (targetValue === '_blank') { + attrs.push(' target="_blank"'); + if (attrs.indexOf(' rel="noreferrer noopener"') === -1) { + attrs.push(' rel="noreferrer noopener"'); + } + return ''; + } + } + attrs.push(' ' + lowerKey + '="' + escapeHtml(value) + '"'); + return ''; + }); + + return attrs.join(''); + } + + function sanitizeFontFamily(value) { + return String(value || '').trim(); + } + + function sanitizeTextColor(value) { + return String(value || '').trim() || '#000000'; + } + + function normalizeAcceptList(value) { + return Array.isArray(value) ? value : String(value || '').split(',').map(function (item) { + return String(item || '').trim(); + }).filter(Boolean); + } + + function fileMatchesAccept(file, acceptValue) { + if (!file) { + return false; + } + + var acceptList = normalizeAcceptList(acceptValue).map(function (item) { + return item.toLowerCase(); + }); + + if (!acceptList.length) { + return true; + } + + var fileName = String(file.name || '').toLowerCase(); + var fileType = String(file.type || '').toLowerCase(); + + return acceptList.some(function (rule) { + if (rule === '*/*') { + return true; + } + + if (rule.charAt(0) === '.') { + return fileName.endsWith(rule); + } + + if (rule.endsWith('/*')) { + return fileType.indexOf(rule.slice(0, -1)) === 0; + } + + return fileType === rule; + }); + } + + function bindRegionMediaRemoveControls(templateFields, options) { + var callbacks = options || {}; + + if (!templateFields || templateFields.dataset.regionMediaRemoveBound === '1') { + return; + } + + templateFields.dataset.regionMediaRemoveBound = '1'; + + function getCard(regionId) { + if (typeof callbacks.getCardByRegionId === 'function') { + return callbacks.getCardByRegionId(regionId); + } + + return regionId ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + } + + function getMediaType(button, card) { + if (typeof callbacks.getMediaType === 'function') { + return callbacks.getMediaType(card, button); + } + + if (button && button.hasAttribute('data-remove-region-video')) { + return 'video'; + } + + if (button && button.hasAttribute('data-remove-region-image')) { + return 'image'; + } + + if (card && card.dataset && String(card.dataset.regionMediaType || '').trim()) { + return String(card.dataset.regionMediaType || '').trim() === 'video' ? 'video' : 'image'; + } + + return 'image'; + } + + function getExistingPrefix(mediaType) { + if (typeof callbacks.getExistingMediaPrefix === 'function') { + return callbacks.getExistingMediaPrefix(mediaType); + } + + return String(mediaType || '').trim() === 'video' ? 'existing_region_video_' : 'existing_region_image_'; + } + + function getMediaPrefix(mediaType) { + if (typeof callbacks.getMediaPrefix === 'function') { + return callbacks.getMediaPrefix(mediaType); + } + + return String(mediaType || '').trim() === 'video' ? 'region_video_' : 'region_image_'; + } + + function getVideoDurationHiddenInput(regionId) { + if (typeof callbacks.getVideoDurationHiddenInput === 'function') { + return callbacks.getVideoDurationHiddenInput(regionId); + } + + return null; + } + + function handleRemove(button) { + var regionId = button.getAttribute('data-remove-region-image') || button.getAttribute('data-remove-region-video'); + var card = getCard(regionId); + var mediaType = getMediaType(button, card); + var hidden = card && card.querySelector('input[type="hidden"][name="' + getExistingPrefix(mediaType) + regionId + '"]'); + var input = card && card.querySelector('input[type="file"][name="' + getMediaPrefix(mediaType) + regionId + '"]'); + var uploadPath = input ? String(input.dataset.uploadedPath || '').trim() : ''; + + if (input && input.dataset.previewUrl) { + URL.revokeObjectURL(input.dataset.previewUrl); + delete input.dataset.previewUrl; + } + + if (input && input.dataset.uploadedNeedsCleanup === '1' && uploadPath && typeof callbacks.queueUploadCleanup === 'function') { + callbacks.queueUploadCleanup([uploadPath]); + } + + if (input) { + input.value = ''; + delete input.dataset.uploadedPath; + delete input.dataset.uploadedNeedsCleanup; + } + + if (hidden) { + hidden.value = ''; + } + + var durationHidden = getVideoDurationHiddenInput(regionId); + if (durationHidden) { + durationHidden.value = ''; + } + + if (typeof callbacks.renderPreview === 'function') { + callbacks.renderPreview(card, ''); + } + + if (typeof callbacks.markEdited === 'function') { + callbacks.markEdited(); + } + + if (typeof callbacks.requestPreviewRender === 'function') { + callbacks.requestPreviewRender(); + } + } + + templateFields.addEventListener('click', function (event) { + var button = event.target && event.target.closest ? event.target.closest('[data-remove-region-image], [data-remove-region-video]') : null; + + if (!button || !templateFields.contains(button)) { + return; + } + + handleRemove(button); + }); + + templateFields.addEventListener('keydown', function (event) { + if (event.key !== 'Enter' && event.key !== ' ') { + return; + } + + var button = event.target && event.target.closest ? event.target.closest('[data-remove-region-image], [data-remove-region-video]') : null; + + if (!button || !templateFields.contains(button)) { + return; + } + + event.preventDefault(); + handleRemove(button); + }); + } + + function createRegionMediaUploadController(templateFields, options) { + var callbacks = options || {}; + + if (!templateFields) { + return null; + } + + function getCard(regionId) { + if (typeof callbacks.getCardByRegionId === 'function') { + return callbacks.getCardByRegionId(regionId); + } + + return regionId ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + } + + function getMediaTypeFromInput(input) { + if (typeof callbacks.getMediaTypeFromInput === 'function') { + return callbacks.getMediaTypeFromInput(input); + } + + return input && input.name && input.name.indexOf('region_video_') === 0 ? 'video' : 'image'; + } + + function getMediaPrefix(mediaType) { + if (typeof callbacks.getMediaPrefix === 'function') { + return callbacks.getMediaPrefix(mediaType); + } + + return String(mediaType || '').trim() === 'video' ? 'region_video_' : 'region_image_'; + } + + function getExistingMediaPrefix(mediaType) { + if (typeof callbacks.getExistingMediaPrefix === 'function') { + return callbacks.getExistingMediaPrefix(mediaType); + } + + return String(mediaType || '').trim() === 'video' ? 'existing_region_video_' : 'existing_region_image_'; + } + + function getUploadZone(input) { + if (typeof callbacks.getUploadZone === 'function') { + return callbacks.getUploadZone(input); + } + + return input ? input.closest('[data-region-upload-zone]') : null; + } + + function getUploadProgressNode(zone) { + return zone ? zone.querySelector('[data-region-upload-progress]') : null; + } + + function getUploadProgressBar(zone) { + return zone ? zone.querySelector('[data-region-upload-progress-bar]') : null; + } + + function getUploadProgressText(zone) { + return zone ? zone.querySelector('[data-region-upload-progress-text]') : null; + } + + function setUploadProgress(zone, percent, text, isIndeterminate) { + var progress = getUploadProgressNode(zone); + var bar = getUploadProgressBar(zone); + var progressText = getUploadProgressText(zone); + var normalizedPercent = Math.max(0, Math.min(100, Math.round(Number(percent || 0)))); + + if (!progress || !bar) { + return; + } + + if (progressText) { + progressText.textContent = text || 'Uploading...'; + } + + progress.hidden = false; + bar.style.width = (isIndeterminate ? 100 : normalizedPercent) + '%'; + bar.textContent = isIndeterminate ? 'Uploading...' : normalizedPercent + '%'; + bar.setAttribute('aria-valuenow', String(isIndeterminate ? 100 : normalizedPercent)); + bar.classList.toggle('progress-bar-striped', Boolean(isIndeterminate)); + bar.classList.toggle('progress-bar-animated', Boolean(isIndeterminate)); + } + + function setUploadState(input, isUploading, percent, text, isIndeterminate) { + var zone = getUploadZone(input); + var progress = getUploadProgressNode(zone); + + if (!zone || !progress) { + return; + } + + zone.classList.toggle('is-uploading', Boolean(isUploading)); + zone.setAttribute('aria-busy', isUploading ? 'true' : 'false'); + input.disabled = Boolean(isUploading); + + if (isUploading) { + setUploadProgress(zone, percent, text, isIndeterminate); + return; + } + + progress.hidden = true; + if (input) { + input.disabled = false; + } + } + + function setInputFile(input, file) { + if (!input || !file) { + return; + } + + var dataTransfer = new DataTransfer(); + dataTransfer.items.add(file); + input.files = dataTransfer.files; + input.dispatchEvent(new Event('change', { bubbles: true })); + } + + function queueUploadCleanup(uploadPaths) { + var normalizedPaths = Array.from(new Set((uploadPaths || []).map(function (value) { + return String(value || '').trim(); + }).filter(Boolean))); + + if (!normalizedPaths.length) { + return; + } + + if (typeof callbacks.queueUploadCleanup === 'function') { + callbacks.queueUploadCleanup(normalizedPaths); + return; + } + + var payload = JSON.stringify({ uploadPaths: normalizedPaths }); + var url = String(callbacks.cleanupUrl || '/slides/uploads/cleanup'); + + if (navigator.sendBeacon) { + try { + navigator.sendBeacon(url, new Blob([payload], { type: 'application/json' })); + return; + } catch (_error) { + // Fall back to fetch below. + } + } + + fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }, + body: payload, + credentials: 'same-origin', + keepalive: true + }).catch(function () { + // Best-effort cleanup only. + }); + } + + function getPendingUploadCleanupPaths() { + return Array.prototype.slice.call(templateFields.querySelectorAll('input[type="file"][name^="region_image_"], input[type="file"][name^="region_video_"]')).map(function (input) { + if (!input || String(input.dataset.uploadedNeedsCleanup || '') !== '1') { + return null; + } + + return String(input.dataset.uploadedPath || '').trim(); + }).filter(Boolean); + } + + function clearPendingUploadCleanupPaths() { + Array.prototype.slice.call(templateFields.querySelectorAll('input[type="file"][name^="region_image_"], input[type="file"][name^="region_video_"]')).forEach(function (input) { + if (!input) { + return; + } + + delete input.dataset.uploadedNeedsCleanup; + }); + } + + function uploadFile(input, file) { + if (!input || !file) { + return Promise.resolve(null); + } + + var mediaType = getMediaTypeFromInput(input); + var regionId = input.name.replace(/^region_(?:image|video)_/, ''); + var card = getCard(regionId); + var hidden = card && card.querySelector('input[type="hidden"][name="' + getExistingMediaPrefix(mediaType) + regionId + '"]'); + var zone = getUploadZone(input); + var uploadToken = String(Date.now()) + ':' + Math.random().toString(16).slice(2); + var previousUploadedPath = String(input.dataset.uploadedPath || '').trim(); + var previousNeedsCleanup = String(input.dataset.uploadedNeedsCleanup || '') === '1'; + var uploadUrl = String(callbacks.uploadUrl || '/slides/uploads'); + var uploadTimeoutMs = Math.max(1, Number(callbacks.uploadTimeoutMs || 30000)); + + input.dataset.uploadToken = uploadToken; + setUploadState(input, true, 0, 'Uploading...', true); + + return new Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + var formData = new FormData(); + formData.append('file', file, file.name || 'upload'); + + xhr.open('POST', uploadUrl, true); + xhr.responseType = 'text'; + xhr.withCredentials = true; + xhr.timeout = uploadTimeoutMs; + xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + xhr.setRequestHeader('Accept', 'application/json, text/plain, */*'); + + xhr.upload.onprogress = function (event) { + if (input.dataset.uploadToken !== uploadToken) { + return; + } + + if (!event || !event.lengthComputable || !event.total) { + setUploadProgress(zone, 100, 'Uploading...', true); + return; + } + + var percent = Math.round((event.loaded / event.total) * 100); + setUploadProgress(zone, percent, 'Uploading ' + percent + '%', false); + }; + + xhr.onload = function () { + if (input.dataset.uploadToken !== uploadToken) { + resolve(null); + return; + } + + var response = { + ok: xhr.status >= 200 && xhr.status < 300, + status: xhr.status, + statusText: xhr.statusText, + responseText: xhr.responseText || '' + }; + + if (!response.ok) { + var error = new Error(response.responseText || 'Unable to upload media.'); + error.status = response.status; + error.responseText = response.responseText; + reject(error); + return; + } + + if (String(response.responseText || '').trim().toLowerCase().indexOf(' 0 ? parsedItemNumber : 1, + items_path: Object.prototype.hasOwnProperty.call(current, 'items_path') ? String(current.items_path === undefined || current.items_path === null ? '' : current.items_path) : undefined, + default_items_path: String(source && (source.items_path || source.itemsPath) || '').trim(), + value: current.value !== undefined ? current.value : '' + }; + } + + function substituteVariables(html, item) { + var source = String(html || ''); + return source.replace(/\{\{\s*([^{}]+?)\s*\}\}/g, function (_match, expression) { + if (!item || typeof item !== 'object') { + return ''; + } + + if (typeof placeholderUtils.resolvePlaceholderExpression !== 'function' || typeof placeholderUtils.formatPlaceholderValue !== 'function') { + return ''; + } + + return escapeHtml(placeholderUtils.formatPlaceholderValue(placeholderUtils.resolvePlaceholderExpression(item, expression))); + }); + } + + function getItem(sourceId, itemNumber, sources, itemsPathOverride) { + var items = getItems(sourceId, sources, itemsPathOverride); + var parsedItemNumber = Math.max(1, Number(itemNumber || 1)); + var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; + return items[index] || null; + } + + function getPreviewFallback(item) { + if (!item || typeof item !== 'object') { + return ''; + } + + var title = String(item.title || item.name || '').trim(); + var description = String(item.description || item.summary || item.text || '').trim(); + var summary = []; + if (title) { + summary.push('

' + escapeHtml(title) + '

'); + } + if (description) { + summary.push('
' + sanitizeRichText(description) + '
'); + } + if (!summary.length) { + return ''; + } + return summary.join(''); + } + + function normalizeRenderableValue(value) { + if (value && typeof value === 'object') { + if (value.value !== undefined) { + return value.value; + } + if (value.text !== undefined) { + return value.text; + } + if (value.html !== undefined) { + return value.html; + } + try { + return JSON.stringify(value); + } catch (_error) { + return ''; + } + } + return value; + } + + function renderPreview(region, regionContent, context) { + var existingContent = context && context.existingContent ? context.existingContent : {}; + var sources = context && context.sources ? context.sources : []; + var content = normalizeRenderableValue(regionContent && regionContent.value !== undefined ? regionContent.value : ''); + var config = getCurrentConfig(region, existingContent, sources); + var sourceId = regionContent && regionContent.source_id !== undefined ? regionContent.source_id : config.source_id; + var itemNumber = regionContent && regionContent.item_number !== undefined ? regionContent.item_number : config.item_number; + var itemsPath = regionContent && regionContent.items_path !== undefined ? regionContent.items_path : (config.items_path !== undefined ? config.items_path : config.default_items_path); + var itemCount = getItemCount(sourceId, sources, itemsPath); + var itemNumberMax = Math.max(1, Number(itemCount || 1)); + var fontFamily = sanitizeFontFamily(regionContent.font_family || region.fontFamily); + var fontSize = sanitizeFontSize(regionContent.font_size || region.fontSize); + var fontColor = sanitizeTextColor(regionContent.font_color || region.fontColor); + var item = getItem(sourceId, itemNumber, sources, itemsPath); + var body = item ? substituteVariables(content, item) : ''; + + if (!body && item) { + body = getPreviewFallback(item); + } + + body = String(body || '') + .replace(/]*class="[^"]*api-region-sample-preview[^"]*"[^>]*>[\s\S]*?<\/pre>/gi, '') + .replace(/]*class="[^"]*api-region-sample-accordion[^"]*"[^>]*>[\s\S]*?<\/details>/gi, ''); + + if (!body) { + return ''; + } + var renderedBody = sanitizeRichText(body); + return renderedBody ? '
' + renderedBody + '
' : ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = context.current || {}; + var config = context.config || {}; + var placeholderChips = String(context.placeholderChips || ''); + var sourceOptions = String(context.sourceOptions || ''); + var itemsPathValue = context.itemsPath !== undefined + ? String(context.itemsPath === null ? '' : context.itemsPath) + : String(config.default_items_path || ''); + var sampleDataPreview = String(context.sampleDataPreview || ''); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + '
' + + 'API' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '
' + + '' + + '' + + '
' + + '
' + + '
' + + '' + + '' + + '
Use transforms like {{name.upper()}}, {{name.title()}}, or {{name.lower()}} on leaf fields.
' + + '
' + + '
Available placeholders
' + + '
' + (placeholderChips || 'No JSON fields available.') + '
' + + '
' + + '
' + + 'Data' + + '
' + sampleDataPreview + '
' + + '
' + + '
' + + '
'; + } + + function buildEditorCardContext(context, existingContent, sources) { + var region = context.region; + var current = context.current || {}; + var config = context.config || {}; + var placeholderChips = String(context.placeholderChips || ''); + var sourceOptions = String(context.sourceOptions || ''); + var itemsPathValue = context.itemsPath !== undefined + ? String(context.itemsPath === null ? '' : context.itemsPath) + : String(config.default_items_path || ''); + var sampleDataPreview = String(context.sampleDataPreview || ''); + + return { + region: region, + current: current, + config: config, + fontSize: context.fontSize || '', + itemsPath: itemsPathValue, + sampleDataPreview: sampleDataPreview, + placeholderChips: placeholderChips, + sourceOptions: sourceOptions, + existingContent: existingContent || {}, + sources: Array.isArray(sources) ? sources : [] + }; + } + + function buildPreviewRenderContext(region, card, existingContent, sources) { + var current = getCurrentConfig(region, existingContent || {}, sources || []); + var editor = window.tinymce && typeof window.tinymce.get === 'function' ? window.tinymce.get('slide-editor-region-' + region.id) : null; + var content = card && card.querySelector ? { + value: String(editor ? editor.getContent({ format: 'html' }) : ((card.querySelector('textarea[name="region_text_' + region.id + '"]') || {}).value || current.value || '')), + source_id: (card.querySelector('select[name="region_api_source_id_' + region.id + '"]') || {}).value || current.source_id, + item_number: (card.querySelector('input[name="region_api_item_number_' + region.id + '"]') || {}).value || current.item_number, + items_path: card.querySelector('input[name="region_api_items_path_' + region.id + '"]') ? (card.querySelector('input[name="region_api_items_path_' + region.id + '"]') || {}).value : current.items_path + } : current; + + return { + value: content.value, + source_id: content.source_id, + item_number: content.item_number, + items_path: content.items_path, + existingContent: existingContent || {}, + sources: Array.isArray(sources) ? sources : [] + }; + } + + registry.register('api', { + label: 'API', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + getSourceById: getSourceById, + getItems: getItems, + getItemCount: getItemCount, + getCurrentConfig: getCurrentConfig, + getItem: getItem, + getPreviewFallback: getPreviewFallback, + substituteVariables: substituteVariables, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/html.js b/src/web/public/js/regions/type/html.js new file mode 100644 index 0000000..db031fe --- /dev/null +++ b/src/web/public/js/regions/type/html.js @@ -0,0 +1,46 @@ +// HTML region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function renderPreview(value) { + var content = value && typeof value === 'object' && value.value !== undefined ? value : null; + var html = String(content ? content.value : value || '').trim(); + if (!html) { + return '
HTML
'; + } + return ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + 'HTML' + + '
' + + '
' + + '' + + '
HTML is rendered in a sandboxed iframe preview.
' + + '
' + + '
'; + } + + registry.register('html', { + label: 'HTML', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/image.js b/src/web/public/js/regions/type/image.js new file mode 100644 index 0000000..4f9f14d --- /dev/null +++ b/src/web/public/js/regions/type/image.js @@ -0,0 +1,150 @@ +// Image region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function showUploadWarning(message) { + if (typeof window.showToast === 'function') { + window.showToast(message, 'warning'); + return; + } + + window.alert(message); + } + + function renderPreview(region, value) { + var content = value && typeof value === 'object' && value.value !== undefined ? value : null; + var src = String(content ? content.value : value || '').trim(); + if (!src) { + return '
Image
'; + } + return ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + var regionRatio = String(context.regionRatio || '1:1'); + var uploadConfig = context.uploadConfig || {}; + var uploadMaxLabel = String(uploadConfig.limitLabel || context.uploadMaxLabel || '100 MB'); + var uploadAccept = Array.isArray(uploadConfig.accept) ? uploadConfig.accept.join(', ') : String(uploadConfig.accept || 'image/png, image/jpeg, image/gif, image/webp'); + var uploadHelpText = String(uploadConfig.helpText || 'PNG, JPG, GIF, or WebP'); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + 'Image' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + (current + ? '
' + + 'Current image preview' + + '' + + '
' + : '
No image
') + + '
' + + '
' + + '
' + + '' + + '
' + + '
'; + } + + function buildEditorCardContext(context) { + var defaultConfig = context && context.uploadConfig ? context.uploadConfig : {}; + return { + region: context.region, + current: String(context.current || ''), + regionRatio: String(context.regionRatio || '1:1'), + uploadConfig: { + accept: Array.isArray(defaultConfig.accept) ? defaultConfig.accept : ['image/png', 'image/jpeg', 'image/gif', 'image/webp'], + limitBytes: defaultConfig.limitBytes, + limitLabel: defaultConfig.limitLabel || context.uploadMaxLabel || '100 MB', + helpText: defaultConfig.helpText || 'PNG, JPG, GIF, or WebP' + }, + uploadMaxLabel: context.uploadMaxLabel || '100 MB' + }; + } + + function buildPreviewRenderContext(region, card, existingContent) { + var current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key] : {}; + var imageHidden = card && card.querySelector ? card.querySelector('input[type="hidden"][name="existing_region_image_' + region.id + '"]') : null; + var imageFileInput = card && card.querySelector ? card.querySelector('input[type="file"][name="region_image_' + region.id + '"]') : null; + + return { + value: imageFileInput && imageFileInput.dataset.previewUrl ? imageFileInput.dataset.previewUrl : (imageHidden ? imageHidden.value : (current && current.value !== undefined ? current.value : '')), + existingContent: existingContent || {} + }; + } + + function handleMediaInputChange(context) { + if (!context || !context.file || typeof context.uploadFile !== 'function') { + return false; + } + + var uploadConfig = context.uploadConfig || {}; + var accept = uploadConfig.accept || ['image/png', 'image/jpeg', 'image/gif', 'image/webp']; + var limitBytes = Number(uploadConfig.limitBytes || 100 * 1024 * 1024); + + if (!utils.fileMatchesAccept || !utils.fileMatchesAccept(context.file, accept)) { + showUploadWarning('This image region accepts PNG, JPG, GIF, or WebP files.'); + return false; + } + + if (Number(context.file.size || 0) > limitBytes) { + showUploadWarning('File must be ' + String(uploadConfig.limitLabel || '100 MB') + ' or smaller.'); + return false; + } + + return context.uploadFile(context.file); + } + + registry.register('image', { + label: 'Image', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + getMediaUploadConfig: function (context) { + var defaultConfig = context && context.defaultConfig ? context.defaultConfig : {}; + + return { + accept: ['image/png', 'image/jpeg', 'image/gif', 'image/webp'], + limitBytes: defaultConfig.limitBytes, + limitLabel: defaultConfig.limitLabel, + helpText: 'PNG, JPG, GIF, or WebP' + }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext, + handleMediaInputChange: handleMediaInputChange + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/rss.js b/src/web/public/js/regions/type/rss.js new file mode 100644 index 0000000..faaff7b --- /dev/null +++ b/src/web/public/js/regions/type/rss.js @@ -0,0 +1,299 @@ +// RSS region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + var DEFAULT_STYLE = { + font_family: 'Arial', + font_size: 32, + font_color: '#000000' + }; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function sanitizePreviewHtml(html) { + return utils.sanitizePreviewHtml ? utils.sanitizePreviewHtml(html) : escapeHtml(html); + } + + function sanitizeRichText(html) { + return utils.sanitizeRichText ? utils.sanitizeRichText(html) : sanitizePreviewHtml(html); + } + + function sanitizeFontFamily(value) { + return utils.sanitizeFontFamily ? utils.sanitizeFontFamily(value) : String(value || '').trim(); + } + + function sanitizeTextColor(value) { + return utils.sanitizeTextColor ? utils.sanitizeTextColor(value) : String(value || '').trim() || '#000000'; + } + + function sanitizeFontSize(value) { + var raw = String(value || '').trim().toLowerCase(); + if (/^\d+(?:\.\d+)?px$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw.replace(/px$/, ''))))); + } + if (/^\d+(?:\.\d+)?$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw)))); + } + return '32'; + } + + function getDefaultStyle() { + return { + font_family: DEFAULT_STYLE.font_family, + font_size: DEFAULT_STYLE.font_size, + font_color: DEFAULT_STYLE.font_color + }; + } + + function getFeedById(feedId, feeds) { + var normalizedId = Number(feedId || 0); + return (Array.isArray(feeds) ? feeds : []).find(function (feed) { + return Number(feed.id) === normalizedId; + }) || null; + } + + function getFieldList(feedId, feeds) { + var feed = getFeedById(feedId, feeds); + var sampleItem = feed && Array.isArray(feed.items) ? feed.items[0] : null; + var sampleJson = sampleItem && sampleItem.itemJson && typeof sampleItem.itemJson === 'object' ? sampleItem.itemJson : null; + + function walkFields(value, prefix, output) { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + return; + } + + Object.keys(value).forEach(function (key) { + if (key === 'rawXml') { + return; + } + + var nextPath = prefix ? prefix + '.' + key : key; + var nextValue = value[key]; + if (nextValue && typeof nextValue === 'object' && !Array.isArray(nextValue)) { + walkFields(nextValue, nextPath, output); + return; + } + + if (output.indexOf(nextPath) === -1) { + output.push(nextPath); + } + }); + } + + var fields = []; + walkFields(sampleJson, '', fields); + return fields; + } + + function getCurrentConfig(region, existingContent) { + var current = existingContent[region.region_key] || {}; + var parsedItemNumber = Math.max(1, Number(current.item_number || 1)); + return { + feed_id: current.feed_id === undefined || current.feed_id === null || current.feed_id === '' ? '' : Number(current.feed_id), + item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, + value: current.value !== undefined ? current.value : '' + }; + } + + function resolvePath(value, path) { + var current = value; + if (!path) { + return current; + } + String(path).split('.').forEach(function (segment) { + if (current === undefined || current === null) { + current = ''; + return; + } + current = current[segment]; + }); + return current === undefined || current === null ? '' : current; + } + + function substituteVariables(html, item) { + var source = String(html || ''); + return source.replace(/\{\{\s*([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_.]+))?\s*\}\}/g, function (_match, tokenName, tokenPath) { + if (!item || typeof item !== 'object') { + return ''; + } + var key = tokenPath ? tokenName + '.' + tokenPath : tokenName; + return escapeHtml(resolvePath(item, key || '')); + }); + } + + function getItem(feedId, itemNumber, feeds) { + var feed = getFeedById(feedId, feeds); + var items = feed && Array.isArray(feed.items) ? feed.items : []; + var parsedItemNumber = Math.max(1, Number(itemNumber || 1)); + var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; + return items[index] || null; + } + + function getPreviewFallback(item) { + if (!item || typeof item !== 'object') { + return '
RSS item
'; + } + + var title = String(item.title || '').trim(); + var description = String(item.description || '').trim(); + var summary = []; + if (title) { + summary.push('

' + escapeHtml(title) + '

'); + } + if (description) { + summary.push('

' + sanitizePreviewHtml(description) + '

'); + } + if (!summary.length) { + return '
RSS item
'; + } + return summary.join(''); + } + + function normalizeRenderableValue(value) { + if (value && typeof value === 'object') { + if (value.value !== undefined) { + return value.value; + } + if (value.text !== undefined) { + return value.text; + } + if (value.html !== undefined) { + return value.html; + } + try { + return JSON.stringify(value); + } catch (_error) { + return ''; + } + } + return value; + } + + function renderPreview(region, regionContent, context) { + var existingContent = context && context.existingContent ? context.existingContent : {}; + var feeds = context && context.feeds ? context.feeds : []; + var content = normalizeRenderableValue(regionContent && regionContent.value !== undefined ? regionContent.value : ''); + var config = getCurrentConfig(region, existingContent); + var defaultStyle = getDefaultStyle(); + var feedId = regionContent && regionContent.feed_id !== undefined ? regionContent.feed_id : config.feed_id; + var itemNumber = regionContent && regionContent.item_number !== undefined ? regionContent.item_number : config.item_number; + var fontFamily = sanitizeFontFamily(regionContent.font_family || region.fontFamily || defaultStyle.font_family); + var fontSize = sanitizeFontSize(regionContent.font_size || region.fontSize || defaultStyle.font_size); + var fontColor = sanitizeTextColor(regionContent.font_color || region.fontColor || defaultStyle.font_color); + var item = getItem(feedId, itemNumber, feeds); + var body = item ? substituteVariables(content, item) : ''; + + if (!body && item) { + var summaryParts = []; + if (item.title) { + summaryParts.push('

' + escapeHtml(item.title) + '

'); + } + if (item.description) { + summaryParts.push('
' + sanitizeRichText(item.description) + '
'); + } + body = summaryParts.join(''); + } + + if (!body) { + return ''; + } + var renderedBody = sanitizeRichText(body); + return renderedBody ? '
' + renderedBody + '
' : ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = context.current || {}; + var config = context.config || {}; + var placeholderChips = String(context.placeholderChips || ''); + var feedOptions = String(context.feedOptions || ''); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + '
' + + 'RSS' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '' + + '
' + + '
' + + '' + + '' + + '
Use placeholders like {{title.upper()}}, {{title.title()}}, or {{title.lower()}}. Available placeholders:
' + + '
' + (placeholderChips || 'No RSS fields available.') + '
' + + '
' + + '
'; + } + + function buildEditorCardContext(context, existingContent, feeds) { + var region = context.region; + var current = context.current || {}; + var config = context.config || {}; + var placeholderChips = String(context.placeholderChips || ''); + var feedOptions = String(context.feedOptions || ''); + + return { + region: region, + current: current, + config: config, + fontSize: context.fontSize || '', + placeholderChips: placeholderChips, + feedOptions: feedOptions, + existingContent: existingContent || {}, + feeds: Array.isArray(feeds) ? feeds : [] + }; + } + + function buildPreviewRenderContext(region, card, existingContent, feeds) { + var current = getCurrentConfig(region, existingContent || {}); + var editor = window.tinymce && typeof window.tinymce.get === 'function' ? window.tinymce.get('slide-editor-region-' + region.id) : null; + var content = card && card.querySelector ? { + value: String(editor ? editor.getContent({ format: 'html' }) : ((card.querySelector('textarea[name="region_text_' + region.id + '"]') || {}).value || current.value || '')), + feed_id: (card.querySelector('select[name="region_rss_feed_id_' + region.id + '"]') || {}).value || current.feed_id, + item_number: (card.querySelector('input[name="region_rss_item_number_' + region.id + '"]') || {}).value || current.item_number + } : current; + + return { + value: content.value, + feed_id: content.feed_id, + item_number: content.item_number, + existingContent: existingContent || {}, + feeds: Array.isArray(feeds) ? feeds : [] + }; + } + + registry.register('rss', { + label: 'RSS', + getDefaultStyle: getDefaultStyle, + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + getFieldList: getFieldList, + getCurrentConfig: getCurrentConfig, + getItem: getItem, + getPreviewFallback: getPreviewFallback, + substituteVariables: substituteVariables, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/rtmp.js b/src/web/public/js/regions/type/rtmp.js new file mode 100644 index 0000000..04e72c9 --- /dev/null +++ b/src/web/public/js/regions/type/rtmp.js @@ -0,0 +1,52 @@ +// RTMP region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function renderPreview(value, disableAudio) { + var content = value && typeof value === 'object' && value.value !== undefined ? value : null; + var src = String(content ? content.value : value || '').trim(); + var label = src ? 'RTMP' : 'RTMP stream'; + if (disableAudio) { + label += ' (muted)'; + } + return '
' + label + '
'; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + var disableAudio = context.disableAudio === undefined ? true : Boolean(context.disableAudio); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + 'RTMP' + + '
' + + '
' + + '' + + '' + + '
Player controls stay hidden and the stream is not interactive.
' + + '
' + + '
'; + } + + registry.register('rtmp', { + label: 'RTMP', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/text.js b/src/web/public/js/regions/type/text.js new file mode 100644 index 0000000..9789a70 --- /dev/null +++ b/src/web/public/js/regions/type/text.js @@ -0,0 +1,104 @@ +// Text region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + var DEFAULT_STYLE = { + font_family: 'Arial', + font_size: 32, + font_color: '#000000' + }; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function sanitizePreviewHtml(html) { + return utils.sanitizePreviewHtml ? utils.sanitizePreviewHtml(html) : escapeHtml(html); + } + + function getDefaultStyle() { + return { + font_family: DEFAULT_STYLE.font_family, + font_size: DEFAULT_STYLE.font_size, + font_color: DEFAULT_STYLE.font_color + }; + } + + function renderPreview(region, value, styleOrContext) { + var rawValue = value && typeof value === 'object' && value.value !== undefined ? value.value : value; + var raw = String(rawValue || ''); + if (!raw) { + return '
Empty text
'; + } + + var style = styleOrContext && styleOrContext.style ? styleOrContext.style : styleOrContext || {}; + var fontFamily = style && style.font_family ? 'font-family:' + escapeHtml(style.font_family) + ';' : ''; + var color = style && style.font_color ? 'color:' + escapeHtml(style.font_color) + ';' : ''; + var fontSize = style && style.font_size ? 'font-size:' + Math.max(1, Math.round(Number(style.font_size))) + 'px;' : ''; + var width = Math.max(1, Math.round(Number(region && region.width ? region.width : 0) || 1)); + var height = Math.max(1, Math.round(Number(region && region.height ? region.height : 0) || 1)); + var wrapperStyle = 'width:' + width + 'px;height:' + height + 'px;overflow:hidden;' + fontFamily + fontSize + color; + return '
' + sanitizePreviewHtml(raw) + '
'; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + var style = context.style || {}; + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + '
' + + 'Text' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '' + + '
' + + '
'; + } + + function buildEditorCardContext(context) { + return { + region: context.region, + current: String(context.current || ''), + style: context.style || {} + }; + } + + function buildPreviewRenderContext(region, card, existingContent) { + var current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key] : {}; + var textarea = card && card.querySelector ? card.querySelector('textarea.editor-source') : null; + var hidden = card && card.querySelector ? card.querySelector('input[type="hidden"][name="region_text_' + region.id + '"]') : null; + var editor = window.tinymce && typeof window.tinymce.get === 'function' ? window.tinymce.get('slide-editor-region-' + region.id) : null; + var defaultStyle = getDefaultStyle(); + var style = current && typeof current === 'object' ? { + font_family: current.font_family || region.font_family || defaultStyle.font_family, + font_size: current.font_size || defaultStyle.font_size, + font_color: current.font_color || region.font_color || defaultStyle.font_color + } : {}; + + return { + value: String(editor ? editor.getContent({ format: 'html' }) : (hidden && hidden.value !== undefined ? hidden.value : (textarea && textarea.value !== undefined ? textarea.value : (current && current.value !== undefined ? current.value : '')))), + style: style, + existingContent: existingContent || {} + }; + } + + registry.register('text', { + label: 'Text', + getDefaultStyle: getDefaultStyle, + getDefaultRegionSize: function () { + return { width: 300, height: 120 }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/time-date.js b/src/web/public/js/regions/type/time-date.js new file mode 100644 index 0000000..c0219bd --- /dev/null +++ b/src/web/public/js/regions/type/time-date.js @@ -0,0 +1,357 @@ +// Time/date region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + var placeholderUtils = window.placeholderUtils || {}; + var placeholderChips = window.placeholderChips || {}; + var DEFAULT_STYLE = { + font_family: 'Arial', + font_size: 32, + font_color: '#000000' + }; + var COMMON_TIME_ZONES = [ + 'UTC', + 'Europe/London', + 'Europe/Dublin', + 'Europe/Paris', + 'Europe/Berlin', + 'Europe/Madrid', + 'America/New_York', + 'America/Chicago', + 'America/Denver', + 'America/Los_Angeles', + 'America/Toronto', + 'America/Vancouver', + 'America/Sao_Paulo', + 'Asia/Dubai', + 'Asia/Kolkata', + 'Asia/Singapore', + 'Asia/Tokyo', + 'Asia/Seoul', + 'Australia/Sydney', + 'Pacific/Auckland' + ]; + var formatterCache = Object.create(null); + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function sanitizePreviewHtml(html) { + return utils.sanitizePreviewHtml ? utils.sanitizePreviewHtml(html) : escapeHtml(html); + } + + function normalizeEditorText(value) { + return String(value === undefined || value === null ? '' : value) + .replace(/<\s*br\s*\/?\s*>/gi, '\n') + .replace(/<[^>]*>/g, '') + .replace(/ /gi, ' ') + .trim(); + } + + function getDefaultStyle() { + return { + font_family: DEFAULT_STYLE.font_family, + font_size: DEFAULT_STYLE.font_size, + font_color: DEFAULT_STYLE.font_color + }; + } + + function getDefaultTimeZone() { + try { + return Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC'; + } catch (_error) { + return 'UTC'; + } + } + + function resolveTimeZone(value) { + var raw = String(value || '').trim(); + if (!raw) { + return getDefaultTimeZone(); + } + + try { + new Intl.DateTimeFormat('en-GB', { timeZone: raw }).format(new Date()); + return raw; + } catch (_error) { + return getDefaultTimeZone(); + } + } + + function getFormatter(cacheKey, options) { + if (!formatterCache[cacheKey]) { + formatterCache[cacheKey] = new Intl.DateTimeFormat('en-GB', options); + } + + return formatterCache[cacheKey]; + } + + function getFormattedParts(timeZone, date) { + var targetDate = date instanceof Date ? date : new Date(); + var resolvedTimeZone = resolveTimeZone(timeZone); + var numericParts = getFormatter('numeric:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + hour12: false, + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + day: '2-digit', + month: '2-digit', + year: 'numeric' + }).formatToParts(targetDate); + var weekdayLong = getFormatter('weekday-long:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + weekday: 'long' + }).formatToParts(targetDate); + var weekdayShort = getFormatter('weekday-short:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + weekday: 'short' + }).formatToParts(targetDate); + var monthLong = getFormatter('month-long:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + month: 'long' + }).formatToParts(targetDate); + var monthShort = getFormatter('month-short:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + month: 'short' + }).formatToParts(targetDate); + var ampm = getFormatter('ampm:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + hour12: true, + hour: '2-digit', + minute: '2-digit' + }).formatToParts(targetDate); + + function getPart(parts, type) { + var match = parts.find(function (part) { + return part && part.type === type; + }); + return match ? String(match.value || '') : ''; + } + + function toTitleCase(value) { + return String(value || '').toLowerCase().replace(/\b([a-z])/g, function (match, letter) { + return String(letter || '').toUpperCase(); + }); + } + + return { + h: String(Number(getPart(numericParts, 'hour')) || 0), + hh: getPart(numericParts, 'hour'), + m: String(Number(getPart(numericParts, 'minute')) || 0), + mm: getPart(numericParts, 'minute'), + s: String(Number(getPart(numericParts, 'second')) || 0), + ss: getPart(numericParts, 'second'), + d: String(Number(getPart(numericParts, 'day')) || 0), + dd: getPart(numericParts, 'day'), + M: String(Number(getPart(numericParts, 'month')) || 0), + MM: getPart(numericParts, 'month'), + y: String(Number(getPart(numericParts, 'year')) || 0), + yyyy: getPart(numericParts, 'year'), + yy: String(Number(String(getPart(numericParts, 'year')).slice(-2)) || 0).toString().padStart(2, '0'), + ddd: toTitleCase(getPart(weekdayShort, 'weekday')), + dddd: toTitleCase(getPart(weekdayLong, 'weekday')), + MMM: toTitleCase(getPart(monthShort, 'month')), + MMMM: toTitleCase(getPart(monthLong, 'month')), + a: toTitleCase(getPart(ampm, 'dayPeriod')), + tz: resolvedTimeZone, + tz_short: getPart(getFormatter('tz-short:' + resolvedTimeZone, { + timeZone: resolvedTimeZone, + timeZoneName: 'short' + }).formatToParts(targetDate), 'timeZoneName'), + date: getPart(numericParts, 'year') + '-' + getPart(numericParts, 'month') + '-' + getPart(numericParts, 'day'), + time: getPart(numericParts, 'hour') + ':' + getPart(numericParts, 'minute') + ':' + getPart(numericParts, 'second') + }; + } + + function resolveTimeDatePlaceholder(values, expression) { + if (typeof placeholderUtils.resolvePlaceholderExpression === 'function' && typeof placeholderUtils.formatPlaceholderValue === 'function') { + return placeholderUtils.formatPlaceholderValue(placeholderUtils.resolvePlaceholderExpression(values, expression)); + } + + var parsed = String(expression || '').trim(); + return Object.prototype.hasOwnProperty.call(values, parsed) ? values[parsed] : ''; + } + + function renderTimeDatePlaceholderChips() { + if (window.timeDatePlaceholders && typeof window.timeDatePlaceholders.renderChips === 'function') { + return window.timeDatePlaceholders.renderChips(); + } + + var tokens = [ + 'h', + 'hh', + 'm', + 'mm', + 's', + 'ss', + 'd', + 'dd', + 'M', + 'MM', + 'y', + 'yyyy', + 'yy', + 'ddd', + 'dddd', + 'MMM', + 'MMMM', + 'a', + 'tz', + 'tz_short' + ]; + + if (typeof placeholderChips.renderChips === 'function') { + return placeholderChips.renderChips(tokens); + } + + return tokens.map(function (token) { + return '{{' + token + '}}'; + }).join(''); + } + + function getEditorContentStyle() { + return 'body { text-align: center; }'; + } + + function renderTemplate(format, timeZone, date) { + var template = String(format || '').trim(); + var values = getFormattedParts(timeZone, date); + return template.replace(/\{\{\s*([a-zA-Z0-9_.()\-]+)\s*\}\}/g, function (_match, key) { + return String(resolveTimeDatePlaceholder(values, key) || ''); + }); + } + + function getCurrentValue(region, existingContent) { + var current = existingContent[region.region_key] || {}; + return { + value: current.value !== undefined && current.value !== null ? String(current.value) : (current.text !== undefined && current.text !== null ? String(current.text) : ''), + timezone: current.timezone !== undefined ? current.timezone : (current.time_zone !== undefined ? current.time_zone : getDefaultTimeZone()) + }; + } + + function getTextStyle(region, current) { + var defaultStyle = getDefaultStyle(); + return { + font_family: current.font_family || region.font_family || defaultStyle.font_family, + font_size: current.font_size || defaultStyle.font_size, + font_color: current.font_color || region.font_color || defaultStyle.font_color + }; + } + + function renderPreview(region, regionContent, style, scale) { + var current = regionContent && typeof regionContent === 'object' ? regionContent : {}; + var format = current.value !== undefined && current.value !== null + ? String(current.value) + : (current.text !== undefined && current.text !== null ? String(current.text) : ''); + var timeZone = resolveTimeZone(current.timezone || current.time_zone || ''); + var textStyle = getTextStyle(region, current); + var fontFamily = textStyle.font_family ? 'font-family:' + escapeHtml(textStyle.font_family) + ';' : ''; + var fontSize = textStyle.font_size ? 'font-size:' + Math.max(1, Math.round(Number(textStyle.font_size))) + 'px;' : ''; + var fontColor = textStyle.font_color ? 'color:' + escapeHtml(textStyle.font_color) + ';' : ''; + var rendered = renderTemplate(format, timeZone, new Date()); + var previewScale = Math.max(0.01, Number(scale || 1) || 1); + var previewWidth = Math.max(1, Math.round(Number(region && (region.width || region.pixelWidth) ? (region.width || region.pixelWidth) : 0) || 1)); + var previewHeight = Math.max(1, Math.round(Number(region && (region.height || region.pixelHeight) ? (region.height || region.pixelHeight) : 0) || 1)); + var contentStyle = 'width:' + previewWidth + 'px;height:' + previewHeight + 'px;transform:scale(' + previewScale + ');transform-origin:top left;' + (fontFamily ? fontFamily : '') + fontSize + fontColor + 'white-space:pre-wrap;line-height:1.1;font-variant-numeric:tabular-nums;'; + return '
' + sanitizePreviewHtml(rendered) + '
'; + } + + function buildTimezoneOptionsMarkup(selectedTimeZone) { + var supportedValues = COMMON_TIME_ZONES; + if (Intl.supportedValuesOf) { + try { + supportedValues = Intl.supportedValuesOf('timeZone'); + } catch (_error) { + supportedValues = COMMON_TIME_ZONES; + } + } + + var seen = Object.create(null); + var options = []; + [selectedTimeZone].concat(supportedValues).forEach(function (timeZone) { + var value = String(timeZone || '').trim(); + if (!value || seen[value]) { + return; + } + seen[value] = true; + options.push(''); + }); + return options.join(''); + } + + function renderPlaceholderChips() { + return renderTimeDatePlaceholderChips(); + } + + function renderEditorCard(context) { + var region = context.region; + var current = context.current || {}; + var value = current.value !== undefined && current.value !== null + ? String(current.value) + : (current.text !== undefined && current.text !== null ? String(current.text) : ''); + var timeZone = resolveTimeZone(current.timezone || current.time_zone || ''); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + '
' + + 'Time / Date' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '' + + '' + + '' + buildTimezoneOptionsMarkup(timeZone) + '' + + '
' + + '
' + + '
Available placeholders
' + + '
' + renderPlaceholderChips() + '
' + + '
' + + '
' + + '
'; + } + + function buildEditorCardContext(context) { + var current = context.current || {}; + return { + region: context.region, + current: { + value: current.value !== undefined && current.value !== null ? String(current.value) : (current.text !== undefined && current.text !== null ? String(current.text) : ''), + timezone: resolveTimeZone(current.timezone || current.time_zone || '') + }, + style: context.style || {} + }; + } + + function buildPreviewRenderContext(region, card, existingContent) { + var current = getCurrentValue(region, existingContent || {}); + var textarea = card && card.querySelector ? card.querySelector('textarea[name="region_text_' + region.id + '"]') : null; + var timezoneInput = card && card.querySelector ? card.querySelector('input[name="region_timezone_' + region.id + '"]') : null; + return { + value: String(textarea && textarea.value !== undefined ? textarea.value : (current.value !== undefined && current.value !== null ? current.value : (current.text !== undefined && current.text !== null ? current.text : ''))), + timezone: String(timezoneInput && timezoneInput.value !== undefined ? timezoneInput.value : (current.timezone || getDefaultTimeZone())), + existingContent: existingContent || {}, + style: getTextStyle(region, current) + }; + } + + registry.register('time-date', { + label: 'Time / Date', + getDefaultStyle: getDefaultStyle, + getDefaultRegionSize: function () { + return { width: 420, height: 180 }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + getEditorContentStyle: getEditorContentStyle, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/video.js b/src/web/public/js/regions/type/video.js new file mode 100644 index 0000000..7b82a09 --- /dev/null +++ b/src/web/public/js/regions/type/video.js @@ -0,0 +1,181 @@ +// Video region helpers for editor previews and duration probing. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + + function escapeHtml(value) { + return String(value === undefined || value === null ? '' : value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + + function showUploadWarning(message) { + if (typeof window.showToast === 'function') { + window.showToast(message, 'warning'); + return; + } + + window.alert(message); + } + + function renderPreview(region, value) { + var content = value && typeof value === 'object' && value.value !== undefined ? value : null; + var src = String(content ? content.value : value || '').trim(); + if (!src) { + return '
Video
'; + } + return ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + var currentDuration = String(context.currentDuration || ''); + var uploadConfig = context.uploadConfig || {}; + var uploadVideoMaxLabel = String(uploadConfig.limitLabel || context.uploadVideoMaxLabel || '1 GB'); + var uploadAccept = Array.isArray(uploadConfig.accept) ? uploadConfig.accept.join(', ') : String(uploadConfig.accept || 'video/mp4, video/webm, video/ogg'); + var uploadHelpText = String(uploadConfig.helpText || 'MP4, WebM, or Ogg'); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + 'Video' + + '
' + + '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '
' + + (current + ? '
' + + '' + + '' + + '
' + : '
No video
') + + '
' + + '
' + + '
' + + '' + + '' + + '
' + + '
'; + } + + function buildEditorCardContext(context) { + var defaultConfig = context && context.uploadConfig ? context.uploadConfig : {}; + return { + region: context.region, + current: String(context.current || ''), + currentDuration: String(context.currentDuration || ''), + uploadConfig: { + accept: Array.isArray(defaultConfig.accept) ? defaultConfig.accept : ['video/mp4', 'video/webm', 'video/ogg'], + limitBytes: defaultConfig.limitBytes, + limitLabel: defaultConfig.limitLabel || context.uploadVideoMaxLabel || '1 GB', + helpText: defaultConfig.helpText || 'MP4, WebM, or Ogg' + }, + uploadVideoMaxLabel: context.uploadVideoMaxLabel || '1 GB' + }; + } + + function buildPreviewRenderContext(region, card, existingContent) { + var current = existingContent && existingContent[region.region_key] ? existingContent[region.region_key] : {}; + var videoHidden = card && card.querySelector ? card.querySelector('input[type="hidden"][name="existing_region_video_' + region.id + '"]') : null; + var videoFileInput = card && card.querySelector ? card.querySelector('input[type="file"][name="region_video_' + region.id + '"]') : null; + + return { + value: videoFileInput && videoFileInput.dataset.previewUrl ? videoFileInput.dataset.previewUrl : (videoHidden ? videoHidden.value : (current && current.value !== undefined ? current.value : '')), + existingContent: existingContent || {} + }; + } + + function handleMediaInputChange(context) { + if (!context || !context.file || typeof context.uploadFile !== 'function') { + return false; + } + + var uploadConfig = context.uploadConfig || {}; + var accept = uploadConfig.accept || ['video/mp4', 'video/webm', 'video/ogg']; + var limitBytes = Number(uploadConfig.limitBytes || 1024 * 1024 * 1024); + + if (!utils.fileMatchesAccept || !utils.fileMatchesAccept(context.file, accept)) { + showUploadWarning('This video region accepts MP4, WebM, or Ogg files.'); + return false; + } + + if (Number(context.file.size || 0) > limitBytes) { + showUploadWarning('File must be ' + String(uploadConfig.limitLabel || '1 GB') + ' or smaller.'); + return false; + } + + return context.uploadFile(context.file); + } + + function syncDuration(card, source, options) { + var helpers = options || {}; + if (!card || typeof helpers.getHiddenInput !== 'function' || typeof helpers.loadDuration !== 'function') { + return Promise.resolve(); + } + + var hidden = helpers.getHiddenInput(card); + if (!hidden) { + return Promise.resolve(); + } + + var mediaPath = String(source || '').trim(); + if (!mediaPath) { + hidden.value = ''; + return Promise.resolve(); + } + + return helpers.loadDuration(mediaPath).then(function (duration) { + hidden.value = String(duration); + }).catch(function () { + hidden.value = ''; + }); + } + + registry.register('video', { + label: 'Video', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + getMediaUploadConfig: function (context) { + var defaultConfig = context && context.defaultConfig ? context.defaultConfig : {}; + + return { + accept: ['video/mp4', 'video/webm', 'video/ogg'], + limitBytes: defaultConfig.limitBytes, + limitLabel: defaultConfig.limitLabel, + helpText: 'MP4, WebM, or Ogg' + }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard, + buildEditorCardContext: buildEditorCardContext, + buildPreviewRenderContext: buildPreviewRenderContext, + handleMediaInputChange: handleMediaInputChange, + syncDuration: syncDuration + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/regions/type/webpage.js b/src/web/public/js/regions/type/webpage.js new file mode 100644 index 0000000..bc105a9 --- /dev/null +++ b/src/web/public/js/regions/type/webpage.js @@ -0,0 +1,46 @@ +// Webpage region helpers for editor previews and defaults. + +(function () { + var registry = window.pulseRegionTypes; + var utils = window.pulseRegionUtils || {}; + + function escapeHtml(value) { + return utils.escapeHtml ? utils.escapeHtml(value) : String(value === undefined || value === null ? '' : value); + } + + function renderPreview(value) { + var content = value && typeof value === 'object' && value.value !== undefined ? value : null; + var src = String(content ? content.value : value || '').trim(); + if (!src) { + return '
Webpage
'; + } + return ''; + } + + function renderEditorCard(context) { + var region = context.region; + var current = String(context.current || ''); + return '' + + '
' + + '
' + + '' + escapeHtml(region.label) + '' + + 'Webpage' + + '
' + + '
' + + '' + + '
The webpage will be loaded in an iframe.
' + + '
' + + '
'; + } + + registry.register('webpage', { + label: 'Webpage', + getDefaultRegionSize: function () { + return { width: 420, height: 240 }; + }, + renderPreview: renderPreview, + renderEditorCard: renderEditorCard + }); +}()); \ No newline at end of file diff --git a/src/web/public/js/settings/background-tasks.js b/src/web/public/js/settings/background-tasks.js index 69219b9..55d87e9 100644 --- a/src/web/public/js/settings/background-tasks.js +++ b/src/web/public/js/settings/background-tasks.js @@ -3,6 +3,41 @@ return; } + function updateBackgroundTasksCardHeight() { + var card = document.getElementById('background-tasks-task-card'); + if (!card) { + return; + } + + var cardRect = card.getBoundingClientRect(); + var bottomInset = 16; + var availableHeight = Math.max(0, window.innerHeight - cardRect.top - bottomInset); + card.style.setProperty('--background-tasks-task-card-max-height', availableHeight + 'px'); + } + + var scheduleUpdate = window.requestAnimationFrame ? function () { + window.requestAnimationFrame(updateBackgroundTasksCardHeight); + } : updateBackgroundTasksCardHeight; + + if (window.addEventListener) { + window.addEventListener('resize', scheduleUpdate); + window.addEventListener('orientationchange', scheduleUpdate); + window.addEventListener('load', scheduleUpdate); + } + + if (window.ResizeObserver) { + try { + var summary = document.getElementById('background-tasks-summary'); + if (summary) { + new ResizeObserver(scheduleUpdate).observe(summary); + } + } catch (_error) { + // Ignore ResizeObserver setup failures. + } + } + + scheduleUpdate(); + try { var url = new URL(window.location.href); if (!url.searchParams.has('message')) { diff --git a/src/web/public/js/shared/placeholder-chips.js b/src/web/public/js/shared/placeholder-chips.js new file mode 100644 index 0000000..a02f29a --- /dev/null +++ b/src/web/public/js/shared/placeholder-chips.js @@ -0,0 +1,117 @@ +// Shared placeholder chip markup and copy-to-clipboard behavior. + +(function () { + var root = window; + var CHIP_ATTR = 'data-placeholder-chip'; + + function escapeHtml(value) { + return String(value === undefined || value === null ? '' : value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + + function copyTextToClipboard(text) { + var value = String(text === undefined || text === null ? '' : text); + if (!value) { + return Promise.resolve(false); + } + + if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function' && window.isSecureContext) { + return navigator.clipboard.writeText(value).then(function () { + return true; + }); + } + + return new Promise(function (resolve) { + var textarea = document.createElement('textarea'); + textarea.value = value; + textarea.setAttribute('readonly', ''); + textarea.style.position = 'fixed'; + textarea.style.left = '-9999px'; + textarea.style.top = '0'; + document.body.appendChild(textarea); + textarea.focus(); + textarea.select(); + + var success = false; + try { + success = document.execCommand('copy'); + } catch (_error) { + success = false; + } + + document.body.removeChild(textarea); + resolve(success); + }); + } + + function findChipElement(target) { + if (!target || typeof target.closest !== 'function') { + return null; + } + + return target.closest('[' + CHIP_ATTR + ']'); + } + + function activateChipCopy(chip) { + if (!chip) { + return Promise.resolve(false); + } + + return copyTextToClipboard(chip.getAttribute('data-copy-text') || chip.textContent || ''); + } + + function handleChipInteraction(event) { + var chip = findChipElement(event && event.target); + if (!chip) { + return; + } + + if (event.type === 'keydown') { + var key = String(event.key || ''); + if (key !== 'Enter' && key !== ' ') { + return; + } + event.preventDefault(); + } + + event.preventDefault(); + event.stopPropagation(); + activateChipCopy(chip); + } + + function ensureCopyHandler() { + if (root.__placeholderChipCopyHandlerInstalled) { + return; + } + + root.__placeholderChipCopyHandlerInstalled = true; + document.addEventListener('click', handleChipInteraction, true); + document.addEventListener('keydown', handleChipInteraction, true); + } + + function renderChip(token) { + var copyText = '{{' + String(token || '') + '}}'; + var escapedCopyText = escapeHtml(copyText); + ensureCopyHandler(); + + return '' + escapedCopyText + ''; + } + + function renderChips(tokens) { + var list = Array.isArray(tokens) ? tokens : []; + return list.map(function (token) { + return renderChip(token); + }).join(''); + } + + root.placeholderChips = { + renderChip: renderChip, + renderChips: renderChips, + copyTextToClipboard: copyTextToClipboard, + ensureCopyHandler: ensureCopyHandler + }; +}()); \ No newline at end of file diff --git a/src/web/public/js/shared/placeholder-utils.js b/src/web/public/js/shared/placeholder-utils.js new file mode 100644 index 0000000..b3d8e09 --- /dev/null +++ b/src/web/public/js/shared/placeholder-utils.js @@ -0,0 +1,131 @@ +// Shared placeholder parsing and resolution helpers for browser-rendered API content. + +(function () { + var root = window; + var transformPattern = /^(upper|lower|title)\(\)$/i; + + function resolvePath(value, path) { + var current = value; + if (!path) { + return current; + } + + String(path).split('.').forEach(function (segment) { + if (current === undefined || current === null) { + current = ''; + return; + } + + current = current[segment]; + }); + + return current === undefined || current === null ? '' : current; + } + + function parsePlaceholderExpression(expression) { + var raw = String(expression || '').trim(); + var segments = raw ? raw.split('.') : []; + var transforms = []; + + while (segments.length) { + var candidate = String(segments[segments.length - 1] || '').trim(); + if (!transformPattern.test(candidate)) { + break; + } + + transforms.unshift(candidate.replace(/\(\)$/g, '').toLowerCase()); + segments.pop(); + } + + return { + path: segments.join('.'), + transforms: transforms + }; + } + + function applyTransform(value, transform) { + var text = String(value === undefined || value === null ? '' : value); + + if (transform === 'lower') { + return text.toLowerCase(); + } + + if (transform === 'upper') { + return text.toUpperCase(); + } + + if (transform === 'title') { + return text.toLowerCase().replace(/\b([a-z])/g, function (match, letter) { + return String(letter || '').toUpperCase(); + }); + } + + return text; + } + + function resolvePlaceholderExpression(value, expression) { + var parsed = parsePlaceholderExpression(expression); + var resolved = resolvePath(value, parsed.path); + + parsed.transforms.forEach(function (transform) { + resolved = applyTransform(resolved, transform); + }); + + return resolved; + } + + function formatPlaceholderValue(value) { + if (value === undefined || value === null) { + return ''; + } + + if (typeof value === 'object') { + try { + return JSON.stringify(value); + } catch (_error) { + return ''; + } + } + + return String(value); + } + + function collectPlaceholderFieldPaths(value) { + var output = []; + + function walk(currentValue, prefix) { + if (!currentValue || typeof currentValue !== 'object') { + return; + } + + if (Array.isArray(currentValue)) { + return; + } + + Object.keys(currentValue).forEach(function (key) { + var nextPath = prefix ? prefix + '.' + key : key; + var nextValue = currentValue[key]; + + if (nextValue && typeof nextValue === 'object') { + walk(nextValue, nextPath); + return; + } + + if (output.indexOf(nextPath) === -1) { + output.push(nextPath); + } + }); + } + + walk(value, ''); + return output; + } + + root.placeholderUtils = { + resolvePath: resolvePath, + parsePlaceholderExpression: parsePlaceholderExpression, + resolvePlaceholderExpression: resolvePlaceholderExpression, + formatPlaceholderValue: formatPlaceholderValue, + collectPlaceholderFieldPaths: collectPlaceholderFieldPaths + }; +}()); \ No newline at end of file diff --git a/src/web/public/js/shared/time-date-placeholders.js b/src/web/public/js/shared/time-date-placeholders.js new file mode 100644 index 0000000..e7a758e --- /dev/null +++ b/src/web/public/js/shared/time-date-placeholders.js @@ -0,0 +1,48 @@ +// Shared time/date placeholder definitions used by editor renderers. + +(function () { + var root = window; + var PLACEHOLDERS = [ + { token: 'h', label: 'h' }, + { token: 'hh', label: 'hh' }, + { token: 'm', label: 'm' }, + { token: 'mm', label: 'mm' }, + { token: 's', label: 's' }, + { token: 'ss', label: 'ss' }, + { token: 'd', label: 'd' }, + { token: 'dd', label: 'dd' }, + { token: 'M', label: 'M' }, + { token: 'MM', label: 'MM' }, + { token: 'y', label: 'y' }, + { token: 'yyyy', label: 'yyyy' }, + { token: 'yy', label: 'yy' }, + { token: 'ddd', label: 'ddd' }, + { token: 'dddd', label: 'dddd' }, + { token: 'MMM', label: 'MMM' }, + { token: 'MMMM', label: 'MMMM' }, + { token: 'a', label: 'a' }, + { token: 'tz', label: 'tz' }, + { token: 'tz_short', label: 'tz_short' } + ]; + + function getTokens() { + return PLACEHOLDERS.slice(); + } + + function renderChips() { + if (root.placeholderChips && typeof root.placeholderChips.renderChips === 'function') { + return root.placeholderChips.renderChips(PLACEHOLDERS.map(function (item) { + return item.token; + })); + } + + return PLACEHOLDERS.map(function (item) { + return '{{' + item.token + '}}'; + }).join(''); + } + + root.timeDatePlaceholders = { + getTokens: getTokens, + renderChips: renderChips + }; +}()); \ No newline at end of file diff --git a/src/web/public/js/slides/slide-form-editor.js b/src/web/public/js/slides/slide-form-editor.js new file mode 100644 index 0000000..59fbbbe --- /dev/null +++ b/src/web/public/js/slides/slide-form-editor.js @@ -0,0 +1,332 @@ +export function createSlideFormEditorController(options) { + var settings = options || {}; + var templateFields = settings.templateFields || null; + var templateSelectorLock = settings.templateSelectorLock || null; + var requestPreviewRender = typeof settings.requestPreviewRender === 'function' ? settings.requestPreviewRender : function () {}; + var defaultFontSize = Math.max(1, Number(settings.defaultFontSize || 32)); + var fontFamilyFormats = String(settings.fontFamilyFormats || '').trim(); + var fontStylesheetHref = String(settings.fontStylesheetHref || '').trim(); + var defaultEditorFontFamily = 'Arial, Helvetica, sans-serif'; + var editorInstances = new Map(); + var getRegionTypeModule = typeof settings.getRegionTypeModule === 'function' ? settings.getRegionTypeModule : function () { + return null; + }; + var getEditorBackgroundColor = typeof settings.getEditorBackgroundColor === 'function' ? settings.getEditorBackgroundColor : function () { + return '#111111'; + }; + + function normalizeEditorData(value) { + return String(value || ''); + } + + function normalizeEditorMarkup(value) { + return String(value === undefined || value === null ? '' : value).trim(); + } + + function normalizeFontSizeValue(value) { + var raw = String(value || '').trim().toLowerCase(); + if (/^\d+(?:\.\d+)?px$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw.replace(/px$/, ''))))); + } + if (/^\d+(?:\.\d+)?$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw)))); + } + return ''; + } + + function getEditorHiddenInput(regionId) { + if (!templateFields) { + return null; + } + + var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); + return card ? card.querySelector('input[type="hidden"][name="region_text_' + regionId + '"]') : null; + } + + function getEditorFontSizeHiddenInput(regionId) { + if (!templateFields) { + return null; + } + + var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); + return card ? card.querySelector('input[name="region_font_size_' + regionId + '"]') : null; + } + + function getEditorRegionType(card) { + if (!card) { + return ''; + } + + if (card.dataset && String(card.dataset.regionMediaType || '').trim()) { + return String(card.dataset.regionMediaType || '').trim(); + } + + var regionTypeInput = card.querySelector ? card.querySelector('input[type="hidden"][name="region_type[]"]') : null; + return String(regionTypeInput && regionTypeInput.value || '').trim(); + } + + function getEditorContentStyle(regionType) { + var module = getRegionTypeModule(regionType); + if (module && typeof module.getEditorContentStyle === 'function') { + return String(module.getEditorContentStyle() || '').trim(); + } + + return ''; + } + + function syncEditorFontSizeHidden(regionId) { + var fontSizeHidden = getEditorFontSizeHiddenInput(regionId); + if (!fontSizeHidden) { + return; + } + + fontSizeHidden.value = normalizeFontSizeValue(fontSizeHidden.value) || String(defaultFontSize); + } + + function getTinymce() { + return window.tinymce || null; + } + + function getThemeName() { + var theme = String(document.documentElement && document.documentElement.dataset && document.documentElement.dataset.bsTheme || 'light').trim().toLowerCase(); + if (theme === 'auto') { + return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } + return theme === 'dark' ? 'dark' : 'light'; + } + + function getTinyMceThemeAssets() { + var themeName = getThemeName(); + var skinName = themeName === 'dark' ? 'oxide-dark' : 'oxide'; + var skinBase = '/assets/vendor/tinymce/skins/ui/' + skinName; + return { + themeName: themeName, + skinName: skinName, + skinUrl: skinBase, + contentCss: skinBase + '/content.css', + bodyClass: themeName === 'dark' ? 'tinymce-theme-dark' : 'tinymce-theme-light' + }; + } + + function getEditorBackgroundColorValue() { + var value = String(getEditorBackgroundColor() || '').trim(); + return value || '#111111'; + } + + function getFontFamilyFormats() { + if (fontFamilyFormats) { + return fontFamilyFormats; + } + + return [ + 'Default=inherit', + 'Arial=Arial,Helvetica,sans-serif', + 'Comic Sans MS=Comic Sans MS,cursive,sans-serif', + 'Courier New=Courier New,Courier,monospace', + 'Georgia=Georgia,serif', + 'Helvetica=Helvetica,Arial,sans-serif', + 'Impact=Impact,Charcoal,sans-serif', + 'Lucida Sans Unicode=Lucida Sans Unicode,Lucida Grande,sans-serif', + 'Palatino Linotype=Palatino Linotype,Book Antiqua,Palatino,serif', + 'Tahoma=Tahoma,Geneva,sans-serif', + 'Times New Roman=Times New Roman,Times,serif', + 'Trebuchet MS=Trebuchet MS,Helvetica,sans-serif', + 'Verdana=Verdana,Geneva,sans-serif' + ].join(';'); + } + + function getContentCss() { + var themeAssets = getTinyMceThemeAssets(); + return fontStylesheetHref + ? [themeAssets.contentCss, fontStylesheetHref] + : themeAssets.contentCss; + } + + function attachEditorEvents(regionId, editor) { + var hidden = getEditorHiddenInput(regionId); + var source = editor && editor.targetElm ? editor.targetElm : null; + + function syncState() { + var currentEditor = editorInstances.get(regionId); + if (currentEditor !== editor) { + return; + } + + if (typeof editor.save === 'function') { + editor.save(); + } + var content = editor.getContent({ format: 'html' }); + if (hidden) { + hidden.value = content; + } + if (source) { + source.value = content; + } + if (templateSelectorLock && typeof templateSelectorLock.markEdited === 'function') { + templateSelectorLock.markEdited(); + } + requestPreviewRender(); + } + + editor.on('init', function () { + var content = editor.getContent({ format: 'html' }); + if (hidden) { + hidden.value = content; + } + if (source) { + source.value = content; + } + syncEditorFontSizeHidden(regionId); + syncState(); + }); + + ['change', 'keyup', 'undo', 'redo', 'SetContent', 'Paste', 'input', 'NodeChange'].forEach(function (eventName) { + editor.on(eventName, syncState); + }); + } + + function createEditorForHolder(holder) { + if (!holder) { + return Promise.resolve(null); + } + + var regionId = holder.getAttribute('data-region-id'); + var card = holder.closest ? holder.closest('[data-region-id]') : null; + var source = holder.querySelector('.editor-source'); + var hidden = getEditorHiddenInput(regionId); + var tinymce = getTinymce(); + var themeAssets = getTinyMceThemeAssets(); + var editorContentStyle = getEditorContentStyle(getEditorRegionType(card)); + + if (!source || !tinymce || typeof tinymce.init !== 'function') { + return Promise.resolve(null); + } + + source.value = normalizeEditorMarkup(normalizeEditorData(source && source.value !== undefined && source.value !== null ? source.value : (hidden ? hidden.value : ''))); + + if (!source.id) { + source.id = 'slide-editor-region-' + regionId; + } + + return tinymce.init({ + target: source, + menubar: false, + branding: false, + promotion: false, + statusbar: true, + resize: true, + plugins: 'lists link code advlist fullscreen', + toolbar: 'undo redo | fontfamily fontsizeinput | forecolor backcolor bold italic underline strikethrough subscript superscript removeformat | align lineheight indent outdent bullist numlist | fullscreen', + toolbar_mode: 'sliding', + license_key: 'gpl', + skin: themeAssets.skinName, + skin_url: themeAssets.skinUrl, + content_css: getContentCss(), + body_class: themeAssets.bodyClass, + content_style: 'body { font-family: ' + defaultEditorFontFamily + '; font-size: 32px; line-height: 1.5; background-color: ' + getEditorBackgroundColorValue() + '; } p { margin: 1em 0; } p:first-child { margin-top: 0; } p:last-child { margin-bottom: 1em; }' + (editorContentStyle ? ' ' + editorContentStyle : ''), + font_family_formats: getFontFamilyFormats(), + font_size_input_default_unit: 'px', + forced_root_block: 'p', + force_br_newlines: false, + newline_behavior: 'default', + setup: function (editor) { + editorInstances.set(regionId, editor); + attachEditorEvents(regionId, editor); + } + }).then(function (editors) { + var editor = Array.isArray(editors) && editors.length ? editors[0] : tinymce.get(source.id); + if (!editor) { + return null; + } + + editorInstances.set(regionId, editor); + if (editor.targetElm) { + editor.targetElm.value = editor.getContent({ format: 'html' }); + } + return editor; + }).catch(function (error) { + console.error('Failed to initialize TinyMCE.', error); + return null; + }); + } + + function renderEditors() { + if (!templateFields) { + return Promise.resolve([]); + } + + watchThemeChanges(); + + var holders = Array.prototype.slice.call(templateFields.querySelectorAll('.editor-holder')); + return Promise.all(holders.map(function (holder) { + return createEditorForHolder(holder); + })); + } + + function syncEditors() { + if (!templateFields) { + return Promise.resolve([]); + } + + var saves = Array.prototype.map.call(templateFields.querySelectorAll('.editor-holder'), function (holder) { + var regionId = holder.getAttribute('data-region-id'); + var editor = editorInstances.get(regionId); + var hidden = getEditorHiddenInput(regionId); + + if (!editor || !hidden) { + return Promise.resolve(); + } + + hidden.value = editor.getContent({ format: 'html' }); + syncEditorFontSizeHidden(regionId); + return Promise.resolve(); + }); + + return Promise.all(saves); + } + + function destroyEditors() { + editorInstances.forEach(function (editor) { + if (editor && typeof editor.remove === 'function') { + editor.remove(); + } + }); + editorInstances.clear(); + + var tinymce = getTinymce(); + if (tinymce && typeof tinymce.remove === 'function') { + tinymce.remove(); + } + } + + var themeObserver = null; + + function watchThemeChanges() { + if (themeObserver || !window.MutationObserver || !templateFields) { + return; + } + + themeObserver = new MutationObserver(function () { + destroyEditors(); + renderEditors(); + }); + + themeObserver.observe(document.documentElement, { + attributes: true, + attributeFilter: ['data-bs-theme'] + }); + } + + return { + renderEditors: renderEditors, + syncEditors: syncEditors, + destroyEditors: function () { + if (themeObserver) { + themeObserver.disconnect(); + themeObserver = null; + } + destroyEditors(); + }, + watchThemeChanges: watchThemeChanges + }; +} \ No newline at end of file diff --git a/src/web/public/js/slides/slide-form-preview.js b/src/web/public/js/slides/slide-form-preview.js new file mode 100644 index 0000000..3afda72 --- /dev/null +++ b/src/web/public/js/slides/slide-form-preview.js @@ -0,0 +1,261 @@ +export function createSlideFormPreviewHelpers(options) { + var settings = options || {}; + var getRegionTypeModule = typeof settings.getRegionTypeModule === 'function' ? settings.getRegionTypeModule : function () { return null; }; + var escapeHtml = typeof settings.escapeHtml === 'function' + ? settings.escapeHtml + : function (value) { + return String(value === undefined || value === null ? '' : value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }; + + function sanitizeTagAttributes(tagName, attrText) { + var allowedAttributes = { + a: ['href', 'title', 'target', 'rel', 'class', 'style'], + blockquote: ['class', 'style'], + div: ['class', 'style'], + figure: ['class', 'style'], + figcaption: ['class', 'style'], + h1: ['class', 'style'], + h2: ['class', 'style'], + h3: ['class', 'style'], + h4: ['class', 'style'], + h5: ['class', 'style'], + h6: ['class', 'style'], + li: ['class', 'style'], + ol: ['class', 'style', 'start'], + p: ['class', 'style'], + pre: ['class', 'style'], + span: ['class', 'style'], + table: ['class', 'style'], + td: ['class', 'style', 'colspan', 'rowspan'], + th: ['class', 'style', 'colspan', 'rowspan', 'scope'], + tr: ['class', 'style'], + ul: ['class', 'style'] + }; + var allowed = allowedAttributes[tagName] || []; + if (!allowed.length) { + return ''; + } + + var attrs = []; + attrText.replace(/([a-zA-Z0-9:-]+)(?:\s*=\s*("([^"]*)"|'([^']*)'|([^\s"'>/=`]+)))?/g, function (_full, key, _valuePart, doubleQuoted, singleQuoted, bareValue) { + var lowerKey = String(key || '').toLowerCase(); + if (allowed.indexOf(lowerKey) === -1) { + return ''; + } + + var value = doubleQuoted !== undefined ? doubleQuoted : singleQuoted !== undefined ? singleQuoted : bareValue !== undefined ? bareValue : ''; + if (lowerKey === 'href' && /^(?:\s*javascript:|\s*data:)/i.test(String(value || ''))) { + return ''; + } + if (lowerKey === 'style' && /(?:expression\s*\(|javascript:|url\s*\()/i.test(String(value || ''))) { + return ''; + } + if (lowerKey === 'target') { + var targetValue = String(value || '').trim(); + if (targetValue === '_blank') { + attrs.push(' target="_blank"'); + if (attrs.indexOf(' rel="noreferrer noopener"') === -1) { + attrs.push(' rel="noreferrer noopener"'); + } + return ''; + } + } + attrs.push(' ' + lowerKey + '="' + escapeHtml(value) + '"'); + return ''; + }); + + return attrs.join(''); + } + + function sanitizePreviewHtml(html) { + var output = String(html || ''); + output = output.replace(//gi, ''); + output = output.replace(//gi, ''); + output = output.replace(/<[^>]+>/g, function (tag) { + var match = tag.match(/^<\s*(\/?)\s*([a-z0-9]+)([\s\S]*?)(\/?)>$/i); + if (!match) { + return ''; + } + + var closing = Boolean(match[1]); + var name = String(match[2] || '').toLowerCase(); + var attrText = String(match[3] || ''); + var allowed = ['a', 'b', 'blockquote', 'br', 'code', 'div', 'em', 'figure', 'figcaption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'li', 'ol', 'p', 'pre', 'span', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'u', 'ul']; + if (allowed.indexOf(name) === -1) { + return ''; + } + + if (closing) { + return ''; + } + + return '<' + name + sanitizeTagAttributes(name, attrText) + '>'; + }); + + return output.replace(/]*)>/gi, function (tag, attrText) { + if (/\bstyle\s*=\s*/i.test(attrText)) { + return tag.replace(/\bstyle\s*=\s*("([^"]*)"|'([^']*)')/i, function (full, quoted, doubleQuoted, singleQuoted) { + var existingStyle = String(doubleQuoted !== undefined ? doubleQuoted : singleQuoted !== undefined ? singleQuoted : ''); + if (/\bmargin\s*:/i.test(existingStyle)) { + return full; + } + return 'style="margin:1em 0;' + existingStyle + '"'; + }); + } + + return ''; + }); + } + + function renderPreviewListItem(item, tag) { + if (item && typeof item === 'object') { + var content = item.content !== undefined ? item.content : (item.text !== undefined ? item.text : item.value !== undefined ? item.value : ''); + var children = Array.isArray(item.items) ? item.items : Array.isArray(item.subItems) ? item.subItems : Array.isArray(item.children) ? item.children : []; + var nested = children.length ? '<' + tag + ' style="list-style-type:' + (tag === 'ol' ? 'decimal' : 'disc') + ';padding-left:1.4em;">' + children.map(function (child) { return renderPreviewListItem(child, tag); }).join('') + '' : ''; + return '
  • ' + sanitizePreviewHtml(content || '') + nested + '
  • '; + } + + return '
  • ' + sanitizePreviewHtml(item || '') + '
  • '; + } + + function renderPreviewTable(data) { + var rows = Array.isArray(data.content) ? data.content : Array.isArray(data.rows) ? data.rows : []; + if (!rows.length) { + return ''; + } + var hasHeadings = Boolean(data.withHeadings); + var body = rows.map(function (row, rowIndex) { + var cells = Array.isArray(row) ? row : []; + var cellTag = hasHeadings && rowIndex === 0 ? 'th' : 'td'; + var cellAttrs = cellTag === 'th' ? ' scope="col"' : ''; + return '' + cells.map(function (cell) { + return '<' + cellTag + cellAttrs + '>' + sanitizePreviewHtml(cell || '') + ''; + }).join('') + ''; + }).join(''); + return '' + body + '
    '; + } + + function renderPreviewBlock(block) { + if (!block || !block.type || !block.data) { + return ''; + } + if (block.type === 'header') { + var level = Math.max(1, Math.min(6, Number(block.data.level || 2))); + return '' + sanitizePreviewHtml(block.data.text || '') + ''; + } + if (block.type === 'list') { + var tag = block.data.style === 'ordered' ? 'ol' : 'ul'; + var items = Array.isArray(block.data.items) ? block.data.items : []; + return '<' + tag + ' style="list-style-type:' + (tag === 'ol' ? 'decimal' : 'disc') + ';padding-left:1.4em;">' + items.map(function (item) { return renderPreviewListItem(item, tag); }).join('') + ''; + } + if (block.type === 'delimiter') { + return '
    '; + } + if (block.type === 'code') { + return '
    ' + sanitizePreviewHtml(block.data.code || '') + '
    '; + } + if (block.type === 'table') { + return renderPreviewTable(block.data); + } + if (block.type === 'paragraph') { + return '

    ' + sanitizePreviewHtml(block.data.text || '') + '

    '; + } + return ''; + } + + function renderPreviewText(value) { + var rawValue = value; + if (rawValue && typeof rawValue === 'object') { + if (rawValue.value !== undefined) { + rawValue = rawValue.value; + } else if (rawValue.text !== undefined) { + rawValue = rawValue.text; + } else if (rawValue.html !== undefined) { + rawValue = rawValue.html; + } else { + try { + rawValue = JSON.stringify(rawValue); + } catch (_error) { + rawValue = ''; + } + } + } + var raw = String(rawValue || ''); + if (!raw) { + return '
    Empty text
    '; + } + return sanitizePreviewHtml(raw); + } + + function renderPreviewTextRegion(region, value, style, scale) { + var module = getRegionTypeModule('text'); + if (module && typeof module.renderPreview === 'function') { + return module.renderPreview(region, value, style, scale); + } + + var fontFamily = style.font_family ? 'font-family:' + escapeHtml(style.font_family) + ';' : ''; + var color = style.font_color ? 'color:' + escapeHtml(style.font_color) + ';' : ''; + var fontSize = style.font_size ? 'font-size:' + Math.max(1, Math.round(Number(style.font_size))) + 'px;' : ''; + var width = Math.max(1, Math.round(Number(region && region.width ? region.width : 0) || 1)); + var height = Math.max(1, Math.round(Number(region && region.height ? region.height : 0) || 1)); + var wrapperStyle = 'width:' + width + 'px;height:' + height + 'px;overflow:hidden;' + fontFamily + fontSize + color; + return '
    ' + renderPreviewText(value) + '
    '; + } + + function startPreviewVideoPlayback(root) { + if (!root) { + return; + } + + var videos = root.querySelectorAll('video.slide-preview-video'); + Array.prototype.forEach.call(videos, function (video) { + if (!video) { + return; + } + + video.autoplay = true; + video.loop = true; + video.muted = true; + video.playsInline = true; + + function tryPlay() { + try { + video.load(); + } catch (_error) { + // Ignore load failures and try to play anyway. + } + + var playPromise = video.play && video.play(); + if (playPromise && typeof playPromise.catch === 'function') { + playPromise.catch(function () { + return null; + }); + } + } + + if (video.readyState >= 2) { + tryPlay(); + return; + } + + video.addEventListener('canplay', tryPlay, { once: true }); + video.addEventListener('loadedmetadata', tryPlay, { once: true }); + }); + } + + return { + sanitizePreviewHtml: sanitizePreviewHtml, + sanitizeTagAttributes: sanitizeTagAttributes, + renderPreviewListItem: renderPreviewListItem, + renderPreviewTable: renderPreviewTable, + renderPreviewBlock: renderPreviewBlock, + renderPreviewText: renderPreviewText, + renderPreviewTextRegion: renderPreviewTextRegion, + startPreviewVideoPlayback: startPreviewVideoPlayback + }; +} diff --git a/src/web/public/js/slides/slide-form-regions.js b/src/web/public/js/slides/slide-form-regions.js new file mode 100644 index 0000000..aef0931 --- /dev/null +++ b/src/web/public/js/slides/slide-form-regions.js @@ -0,0 +1,650 @@ +// Region-specific helpers for slide forms. + +import { createSlideFormPreviewHelpers } from '/assets/js/slides/slide-form-preview.js'; + +export function createSlideFormRegionHelpers(options) { + var settings = options || {}; + var templateFields = settings.templateFields || null; + var existingContent = settings.existingContent || {}; + var rssFeeds = Array.isArray(settings.rssFeeds) ? settings.rssFeeds : []; + var apiSources = Array.isArray(settings.apiSources) ? settings.apiSources : []; + var getRegionTypeModule = typeof settings.getRegionTypeModule === 'function' ? settings.getRegionTypeModule : function () { return null; }; + var placeholderUtils = window.placeholderUtils || {}; + var placeholderChips = window.placeholderChips || {}; + var escapeHtml = typeof settings.escapeHtml === 'function' + ? settings.escapeHtml + : function (value) { + return String(value === undefined || value === null ? '' : value) + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + }; + var previewHelpers = createSlideFormPreviewHelpers({ + getRegionTypeModule: getRegionTypeModule, + escapeHtml: escapeHtml + }); + var defaultFontSize = Math.max(1, Number(settings.defaultFontSize || 32)); + var uploadMaxLabel = String(settings.uploadMaxLabel || '100 MB'); + var uploadVideoMaxLabel = String(settings.uploadVideoMaxLabel || '1 GB'); + + function sanitizeFontSize(value) { + var raw = String(value || '').trim().toLowerCase(); + if (/^\d+(?:\.\d+)?px$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw.replace(/px$/, ''))))); + } + if (/^\d+(?:\.\d+)?$/.test(raw)) { + return String(Math.max(1, Math.round(Number(raw)))); + } + return String(defaultFontSize); + } + + var sanitizePreviewHtml = previewHelpers.sanitizePreviewHtml; + var sanitizeTagAttributes = previewHelpers.sanitizeTagAttributes; + var renderPreviewListItem = previewHelpers.renderPreviewListItem; + var renderPreviewTable = previewHelpers.renderPreviewTable; + var renderPreviewBlock = previewHelpers.renderPreviewBlock; + var renderPreviewText = previewHelpers.renderPreviewText; + var renderPreviewTextRegion = previewHelpers.renderPreviewTextRegion; + var startPreviewVideoPlayback = previewHelpers.startPreviewVideoPlayback; + + function getCurrentTextStyle(region) { + var current = existingContent[region.region_key] || {}; + var textRegion = getRegionTypeModule('text'); + var defaultStyle = window.pulseRegionTypes && typeof window.pulseRegionTypes.getDefaultRegionStyle === 'function' + ? window.pulseRegionTypes.getDefaultRegionStyle('text') + : textRegion && typeof textRegion.getDefaultStyle === 'function' + ? textRegion.getDefaultStyle() + : { + font_family: 'Arial', + font_size: defaultFontSize, + font_color: '#000000' + }; + return { + font_family: String(current.font_family || region.font_family || defaultStyle.font_family || 'Arial').trim() || 'Arial', + font_size: Math.max(8, Number(current.font_size || defaultStyle.font_size || defaultFontSize)), + font_color: String(current.font_color || region.font_color || defaultStyle.font_color || '#000000').trim() || '#000000' + }; + } + + function getRssFeedById(feedId) { + var normalizedId = Number(feedId || 0); + return rssFeeds.find(function (feed) { + return Number(feed.id) === normalizedId; + }) || null; + } + + function getRssFieldList(feedId) { + var module = getRegionTypeModule('rss'); + if (module && typeof module.getFieldList === 'function') { + return module.getFieldList(feedId, rssFeeds); + } + + var feed = getRssFeedById(feedId); + var sampleItem = feed && Array.isArray(feed.items) ? feed.items[0] : null; + var sampleJson = sampleItem && sampleItem.itemJson && typeof sampleItem.itemJson === 'object' ? sampleItem.itemJson : null; + + function walkFields(value, prefix, output) { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + return; + } + + Object.keys(value).forEach(function (key) { + if (key === 'rawXml') { + return; + } + + var nextPath = prefix ? prefix + '.' + key : key; + var nextValue = value[key]; + if (nextValue && typeof nextValue === 'object' && !Array.isArray(nextValue)) { + walkFields(nextValue, nextPath, output); + return; + } + + if (output.indexOf(nextPath) === -1) { + output.push(nextPath); + } + }); + } + + var fields = []; + walkFields(sampleJson, '', fields); + return fields; + } + + function buildLimitedPlaceholderChipMarkup(fieldList, emptyLabel) { + var fields = Array.isArray(fieldList) ? fieldList : []; + var visibleFields = fields.slice(0, 8); + var overflowFields = fields.slice(visibleFields.length); + + if (!fields.length) { + return '' + escapeHtml(emptyLabel) + ''; + } + + var visibleMarkup = visibleFields.map(function (field) { + return typeof placeholderChips.renderChip === 'function' + ? placeholderChips.renderChip(field) + : '{{' + escapeHtml(field) + '}}'; + }).join(''); + + if (!overflowFields.length) { + return visibleMarkup; + } + + return '' + + visibleMarkup + + '
    ' + + 'Show ' + escapeHtml(overflowFields.length) + ' more fields' + + '
    ' + overflowFields.map(function (field) { + return typeof placeholderChips.renderChip === 'function' + ? placeholderChips.renderChip(field) + : '{{' + escapeHtml(field) + '}}'; + }).join('') + '
    ' + + '
    '; + } + + function truncateJsonPreview(value, maxLength) { + var text = ''; + try { + text = JSON.stringify(value, null, 2); + } catch (_error) { + text = String(value === undefined || value === null ? '' : value); + } + + if (!text) { + return ''; + } + + var limit = Math.max(200, Number(maxLength || 1100)); + if (text.length <= limit) { + return text; + } + + return text.slice(0, limit).replace(/\s+$/, '') + '\n...'; + } + + function buildApiSampleDataMarkup(sourceId, itemNumber, itemsPathOverride) { + var source = getApiSourceById(sourceId); + if (!source) { + return '
    Select an API source to preview sample data.
    '; + } + + var item = getApiSourceItems(sourceId, itemsPathOverride)[Math.max(0, Math.max(1, Number(itemNumber || 1)) - 1)] || null; + if (!item) { + return '
    No sample item is available for the current selection.
    '; + } + + return '
    ' + escapeHtml(truncateJsonPreview(item, 1100)) + '
    '; + } + + function updatePlaceholderChipList(card, fieldList, emptyLabel) { + if (!card) { + return; + } + + var container = card.querySelector('[data-placeholder-chips]'); + if (!container) { + return; + } + + var chips = Array.isArray(fieldList) ? fieldList.map(function (field) { + return typeof placeholderChips.renderChip === 'function' + ? placeholderChips.renderChip(field) + : '{{' + escapeHtml(field) + '}}'; + }).join('') : ''; + + container.innerHTML = chips || '' + escapeHtml(emptyLabel) + ''; + } + + function updateRssPlaceholderChips(regionId, feedId) { + var card = templateFields ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + updatePlaceholderChipList(card, getRssFieldList(feedId), 'No RSS fields available.'); + } + + function getCurrentRssConfig(region) { + var module = getRegionTypeModule('rss'); + if (module && typeof module.getCurrentConfig === 'function') { + return module.getCurrentConfig(region, existingContent); + } + + var current = existingContent[region.region_key] || {}; + var parsedItemNumber = Math.max(1, Number(current.item_number || 1)); + return { + feed_id: current.feed_id === undefined || current.feed_id === null || current.feed_id === '' ? '' : Number(current.feed_id), + item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, + value: current.value !== undefined ? current.value : '' + }; + } + + function resolvePath(value, path) { + var current = value; + if (!path) { + return current; + } + String(path).split('.').forEach(function (segment) { + if (current === undefined || current === null) { + current = ''; + return; + } + current = current[segment]; + }); + return current === undefined || current === null ? '' : current; + } + + function substituteRssVariables(html, item) { + var source = String(html || ''); + return source.replace(/\{\{\s*([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_.]+))?\s*\}\}/g, function (_match, tokenName, tokenPath) { + if (!item || typeof item !== 'object') { + return ''; + } + var key = tokenName === 'item' && tokenPath ? tokenPath : tokenName; + return escapeHtml(resolvePath(item, key || '')); + }); + } + + function getRssItem(feedId, itemNumber) { + var module = getRegionTypeModule('rss'); + if (module && typeof module.getItem === 'function') { + return module.getItem(feedId, itemNumber, rssFeeds); + } + + var feed = getRssFeedById(feedId); + var items = feed && Array.isArray(feed.items) ? feed.items : []; + var parsedItemNumber = Math.max(1, Number(itemNumber || 1)); + var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; + return items[index] || null; + } + + function getRssPreviewFallback(item) { + var module = getRegionTypeModule('rss'); + if (module && typeof module.getPreviewFallback === 'function') { + return module.getPreviewFallback(item); + } + + if (!item || typeof item !== 'object') { + return '
    RSS item
    '; + } + + var title = String(item.title || '').trim(); + var description = String(item.description || '').trim(); + var summary = []; + if (title) { + summary.push('

    ' + escapeHtml(title) + '

    '); + } + if (description) { + summary.push('

    ' + sanitizePreviewHtml(description) + '

    '); + } + if (!summary.length) { + return '
    RSS item
    '; + } + return summary.join(''); + } + + function getApiSourceById(sourceId) { + var normalizedId = Number(sourceId || 0); + return apiSources.find(function (source) { + return Number(source.id) === normalizedId; + }) || null; + } + + function getApiSourceItemsPath(source, overridePath) { + if (overridePath === undefined || overridePath === null) { + return String(source && (source.items_path || source.itemsPath) || '').trim(); + } + + return String(overridePath || '').trim(); + } + + function getApiSourceItems(sourceId, itemsPathOverride) { + var source = getApiSourceById(sourceId); + var module = getRegionTypeModule('api'); + if (module && typeof module.getItems === 'function') { + return module.getItems(sourceId, apiSources, itemsPathOverride); + } + + var responseJson = source && source.responseJson && typeof source.responseJson === 'object' ? source.responseJson : null; + var itemsPath = getApiSourceItemsPath(source, itemsPathOverride); + if (itemsPath !== undefined && itemsPath !== null && itemsPath !== '') { + var current = responseJson; + String(itemsPath).split('.').forEach(function (segment) { + if (current === undefined || current === null) { + current = ''; + return; + } + current = current[segment]; + }); + return Array.isArray(current) ? current : []; + } + if (Array.isArray(responseJson)) { + return responseJson; + } + if (responseJson && Array.isArray(responseJson.items)) { + return responseJson.items; + } + if (responseJson && Array.isArray(responseJson.results)) { + return responseJson.results; + } + if (responseJson && Array.isArray(responseJson.data)) { + return responseJson.data; + } + return responseJson ? [responseJson] : []; + } + + function getApiItemCount(sourceId, itemsPathOverride) { + var module = getRegionTypeModule('api'); + if (module && typeof module.getItemCount === 'function') { + return module.getItemCount(sourceId, apiSources, itemsPathOverride); + } + + return getApiSourceItems(sourceId, itemsPathOverride).length; + } + + function getApiFieldList(sourceId, itemsPathOverride) { + var sampleItem = getApiSourceItems(sourceId, itemsPathOverride)[0] || null; + if (typeof placeholderUtils.collectPlaceholderFieldPaths === 'function') { + return placeholderUtils.collectPlaceholderFieldPaths(sampleItem && typeof sampleItem === 'object' ? sampleItem : null); + } + return []; + } + + function updateApiPlaceholderChips(regionId, sourceId, itemsPathOverride) { + var card = templateFields ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + if (!card) { + return; + } + + var container = card.querySelector('[data-placeholder-chips]'); + if (!container) { + return; + } + + container.innerHTML = buildLimitedPlaceholderChipMarkup(getApiFieldList(sourceId, itemsPathOverride), 'No JSON fields available.'); + } + + function updateApiSampleDataPanel(regionId, sourceId, itemNumber, itemsPathOverride) { + var card = templateFields ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + if (!card) { + return; + } + + var container = card.querySelector('[data-api-sample-data-panel]'); + if (!container) { + return; + } + + container.innerHTML = buildApiSampleDataMarkup(sourceId, itemNumber, itemsPathOverride); + } + + function updateApiItemNumberLimit(regionId, sourceId, itemsPathOverride) { + var card = templateFields ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + if (!card) { + return; + } + + var input = card.querySelector('input[name="region_api_item_number_' + regionId + '"]'); + if (!input) { + return; + } + + var itemCount = Math.max(1, Number(getApiItemCount(sourceId, itemsPathOverride) || 1)); + input.setAttribute('max', String(itemCount)); + if (Number(input.value || 0) > itemCount) { + input.value = String(itemCount); + } + } + + function clampApiItemNumber(regionId, sourceId, itemNumber, itemsPathOverride) { + var card = templateFields ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; + if (!card) { + return ''; + } + + var input = card.querySelector('input[name="region_api_item_number_' + regionId + '"]'); + if (!input) { + return ''; + } + + var itemCount = Math.max(1, Number(getApiItemCount(sourceId, itemsPathOverride) || 1)); + var parsedValue = Math.max(1, Number(itemNumber || 1)); + var clampedValue = Math.min(itemCount, Number.isFinite(parsedValue) && parsedValue > 0 ? parsedValue : 1); + input.setAttribute('max', String(itemCount)); + input.value = String(clampedValue); + return String(clampedValue); + } + + function getCurrentApiConfig(region) { + var module = getRegionTypeModule('api'); + if (module && typeof module.getCurrentConfig === 'function') { + return module.getCurrentConfig(region, existingContent, apiSources); + } + + var current = existingContent[region.region_key] || {}; + var source = getApiSourceById(current.source_id); + var parsedItemNumber = Math.max(1, Number(current.item_number || 1)); + return { + source_id: current.source_id === undefined || current.source_id === null || current.source_id === '' ? '' : Number(current.source_id), + item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, + items_path: Object.prototype.hasOwnProperty.call(current, 'items_path') ? String(current.items_path === undefined || current.items_path === null ? '' : current.items_path) : undefined, + default_items_path: String(source && (source.items_path || source.itemsPath) || '').trim(), + value: current.value !== undefined ? current.value : '' + }; + } + + function reduceAspectRatio(width, height) { + var a = Math.max(1, Math.round(Number(width || 0) || 1)); + var b = Math.max(1, Math.round(Number(height || 0) || 1)); + var x = a; + var y = b; + + while (y !== 0) { + var remainder = x % y; + x = y; + y = remainder; + } + + return Math.max(1, Math.round(a / x)) + ':' + Math.max(1, Math.round(b / x)); + } + + function getCurrentRegionValue(region) { + var current = existingContent[region.region_key]; + return current && current.value !== undefined ? current.value : ''; + } + + function getCurrentTimeDateConfig(region) { + var current = existingContent[region.region_key] || {}; + return { + value: current.value !== undefined ? current.value : '', + timezone: current.timezone !== undefined ? current.timezone : (current.time_zone !== undefined ? current.time_zone : '') + }; + } + + function getCurrentRegionVideoDuration(region) { + var current = existingContent[region.region_key] || {}; + var duration = Math.round(Number(current.duration_seconds || 0) * 1000) / 1000; + return Number.isFinite(duration) && duration > 0 ? String(duration) : ''; + } + + function buildRegionEditorCardContext(region) { + var module = getRegionTypeModule(region.region_type); + if (module && typeof module.buildEditorCardContext === 'function') { + return module.buildEditorCardContext({ + region: region, + current: region.region_type === 'rss' || region.region_type === 'api' || region.region_type === 'time-date' ? (existingContent[region.region_key] || {}) : getCurrentRegionValue(region), + currentDuration: getCurrentRegionVideoDuration(region), + regionRatio: reduceAspectRatio(region.width, region.height), + uploadMaxLabel: uploadMaxLabel, + uploadVideoMaxLabel: uploadVideoMaxLabel, + disableAudio: (existingContent[region.region_key] || {}).disable_audio, + config: region.region_type === 'api' ? getCurrentApiConfig(region) : getCurrentRssConfig(region), + style: getCurrentTextStyle(region), + fontSize: getCurrentTextStyle(region).font_size, + feedOptions: rssFeeds.map(function (feed) { + var selected = Number(feed.id) === Number(getCurrentRssConfig(region).feed_id) ? ' selected' : ''; + return ''; + }).join(''), + sourceOptions: apiSources.map(function (source) { + var selected = Number(source.id) === Number(getCurrentApiConfig(region).source_id) ? ' selected' : ''; + return ''; + }).join(''), + placeholderChips: region.region_type === 'rss' + ? getRssFieldList(getCurrentRssConfig(region).feed_id).map(function (field) { + return '{{' + escapeHtml(field) + '}}'; + }).join('') + : buildLimitedPlaceholderChipMarkup(getApiFieldList(getCurrentApiConfig(region).source_id, getCurrentApiConfig(region).items_path), 'No JSON fields available.'), + sampleDataPreview: buildApiSampleDataMarkup(getCurrentApiConfig(region).source_id, getCurrentApiConfig(region).item_number, getCurrentApiConfig(region).items_path) + }, existingContent, region.region_type === 'rss' ? rssFeeds : apiSources); + } + + var textStyle = getCurrentTextStyle(region); + var rssConfig = getCurrentRssConfig(region); + var apiConfig = getCurrentApiConfig(region); + var currentContent = existingContent[region.region_key] || {}; + var apiItemsPath = apiConfig.items_path !== undefined ? apiConfig.items_path : apiConfig.default_items_path; + + return { + region: region, + current: region.region_type === 'rss' || region.region_type === 'api' ? currentContent : getCurrentRegionValue(region), + currentDuration: getCurrentRegionVideoDuration(region), + regionRatio: reduceAspectRatio(region.width, region.height), + uploadMaxLabel: uploadMaxLabel, + uploadVideoMaxLabel: uploadVideoMaxLabel, + disableAudio: currentContent.disable_audio, + config: region.region_type === 'api' ? apiConfig : rssConfig, + style: textStyle, + fontSize: textStyle.font_size, + feedOptions: rssFeeds.map(function (feed) { + var selected = Number(feed.id) === Number(rssConfig.feed_id) ? ' selected' : ''; + return ''; + }).join(''), + sourceOptions: apiSources.map(function (source) { + var selected = Number(source.id) === Number(apiConfig.source_id) ? ' selected' : ''; + return ''; + }).join(''), + placeholderChips: region.region_type === 'rss' + ? getRssFieldList(rssConfig.feed_id).map(function (field) { + return '{{' + escapeHtml(field) + '}}'; + }).join('') + : buildLimitedPlaceholderChipMarkup(getApiFieldList(apiConfig.source_id, apiItemsPath), 'No JSON fields available.'), + sampleDataPreview: buildApiSampleDataMarkup(apiConfig.source_id, apiConfig.item_number, apiItemsPath) + }; + } + + function getRegionEditorCardHtml(region) { + var module = getRegionTypeModule(region.region_type); + if (!module || typeof module.renderEditorCard !== 'function') { + return ''; + } + + return module.renderEditorCard(buildRegionEditorCardContext(region)); + } + + function getPreviewRegionContent(card, region) { + var module = getRegionTypeModule(region.region_type); + if (module && typeof module.buildPreviewRenderContext === 'function') { + return module.buildPreviewRenderContext(region, card, existingContent, region.region_type === 'rss' ? rssFeeds : apiSources); + } + + var current = existingContent[region.region_key]; + var content = current && typeof current === 'object' ? Object.assign({}, current) : {}; + if (!card) { + return content; + } + + var hiddenInput = card.querySelector('input[type="hidden"][name="region_text_' + region.id + '"]'); + var textAreaInput = card.querySelector('textarea[name="region_text_' + region.id + '"]'); + var htmlInput = card.querySelector('textarea[name="region_html_' + region.id + '"]'); + var timeDateTimezoneInput = card.querySelector('input[name="region_timezone_' + region.id + '"]'); + var imageHidden = card.querySelector('input[type="hidden"][name="existing_region_image_' + region.id + '"]'); + var imageFileInput = card.querySelector('input[type="file"][name="region_image_' + region.id + '"]'); + var videoHidden = card.querySelector('input[type="hidden"][name="existing_region_video_' + region.id + '"]'); + var videoFileInput = card.querySelector('input[type="file"][name="region_video_' + region.id + '"]'); + var webpageInput = card.querySelector('input[type="url"][name="region_webpage_' + region.id + '"]'); + var rtmpInput = card.querySelector('input[type="url"][name="region_rtmp_' + region.id + '"]'); + var disableAudioInput = card.querySelector('input[type="checkbox"][name="region_disable_audio_' + region.id + '"]'); + var rssFeedInput = card.querySelector('select[name="region_rss_feed_id_' + region.id + '"]'); + var rssItemInput = card.querySelector('input[name="region_rss_item_number_' + region.id + '"]'); + var apiSourceInput = card.querySelector('select[name="region_api_source_id_' + region.id + '"]'); + var apiItemInput = card.querySelector('input[name="region_api_item_number_' + region.id + '"]'); + var apiItemsPathInput = card.querySelector('input[name="region_api_items_path_' + region.id + '"]'); + + if (region.region_type === 'image') { + content.value = (imageFileInput && imageFileInput.dataset.previewUrl) ? imageFileInput.dataset.previewUrl : (imageHidden ? imageHidden.value : content.value || ''); + } else if (region.region_type === 'video') { + content.value = (videoFileInput && videoFileInput.dataset.previewUrl) ? videoFileInput.dataset.previewUrl : (videoHidden ? videoHidden.value : content.value || ''); + } else if (region.region_type === 'webpage') { + content.value = webpageInput ? webpageInput.value : (content.value || ''); + } else if (region.region_type === 'rtmp') { + content.value = rtmpInput ? rtmpInput.value : (content.value || ''); + content.disable_audio = disableAudioInput ? disableAudioInput.checked : (content.disable_audio === undefined ? true : Boolean(content.disable_audio)); + } else if (region.region_type === 'html') { + content.value = htmlInput ? htmlInput.value : (content.value || ''); + } else if (region.region_type === 'time-date') { + var timeDateCurrent = getCurrentTimeDateConfig(region); + content.value = textAreaInput ? textAreaInput.value : (timeDateCurrent.value || ''); + content.timezone = timeDateTimezoneInput ? timeDateTimezoneInput.value : (timeDateCurrent.timezone || ''); + } else if (region.region_type === 'rss') { + content.value = hiddenInput ? hiddenInput.value : (content.value || ''); + content.feed_id = rssFeedInput ? rssFeedInput.value : content.feed_id; + content.item_number = rssItemInput ? rssItemInput.value : content.item_number; + } else if (region.region_type === 'api') { + content.value = hiddenInput ? hiddenInput.value : (content.value || ''); + content.source_id = apiSourceInput ? apiSourceInput.value : content.source_id; + content.item_number = apiItemInput ? apiItemInput.value : content.item_number; + content.items_path = apiItemsPathInput ? apiItemsPathInput.value : content.items_path; + } else { + content.value = hiddenInput ? hiddenInput.value : (content.value || ''); + } + + return content; + } + + function buildPreviewRenderContext(region, card) { + var module = getRegionTypeModule(region.region_type); + if (module && typeof module.buildPreviewRenderContext === 'function') { + return module.buildPreviewRenderContext(region, card, existingContent, region.region_type === 'rss' ? rssFeeds : apiSources); + } + + var textStyle = getCurrentTextStyle(region); + var previewContent = getPreviewRegionContent(card, region); + return { + value: previewContent.value, + timezone: previewContent.timezone, + style: textStyle, + existingContent: existingContent, + feeds: rssFeeds, + sources: apiSources, + disable_audio: previewContent.disable_audio === undefined ? true : Boolean(previewContent.disable_audio), + feed_id: previewContent.feed_id, + item_number: previewContent.item_number, + source_id: previewContent.source_id, + items_path: previewContent.items_path, + font_size: textStyle.font_size, + font_color: textStyle.font_color, + font_family: textStyle.font_family + }; + } + + return { + sanitizePreviewHtml: sanitizePreviewHtml, + sanitizeTagAttributes: sanitizeTagAttributes, + getCurrentTextStyle: getCurrentTextStyle, + getRssFieldList: getRssFieldList, + updateRssPlaceholderChips: updateRssPlaceholderChips, + getCurrentRssConfig: getCurrentRssConfig, + getApiFieldList: getApiFieldList, + updateApiPlaceholderChips: updateApiPlaceholderChips, + updateApiSampleDataPanel: updateApiSampleDataPanel, + updateApiItemNumberLimit: updateApiItemNumberLimit, + getCurrentApiConfig: getCurrentApiConfig, + reduceAspectRatio: reduceAspectRatio, + renderPreviewTextRegion: renderPreviewTextRegion, + startPreviewVideoPlayback: startPreviewVideoPlayback, + getRegionEditorCardHtml: getRegionEditorCardHtml, + buildRegionEditorCardContext: buildRegionEditorCardContext, + getPreviewRegionContent: getPreviewRegionContent, + buildPreviewRenderContext: buildPreviewRenderContext, + getCurrentRegionValue: getCurrentRegionValue, + getCurrentRegionVideoDuration: getCurrentRegionVideoDuration + }; +} diff --git a/src/web/public/js/slides/slide-form-template-lock.js b/src/web/public/js/slides/slide-form-template-lock.js index c0e2099..a37e54a 100644 --- a/src/web/public/js/slides/slide-form-template-lock.js +++ b/src/web/public/js/slides/slide-form-template-lock.js @@ -1,3 +1,5 @@ +// Template selection lock controller for slide forms. + export function createTemplateSelectorLockController(templateSelect) { var locked = false; var armed = false; diff --git a/src/web/public/js/slides/slide-form.js b/src/web/public/js/slides/slide-form.js index 97c4476..ed35437 100644 --- a/src/web/public/js/slides/slide-form.js +++ b/src/web/public/js/slides/slide-form.js @@ -1,28 +1,7 @@ -import { - Alignment, - BlockQuote, - Bold, - ClassicEditor, - ClipboardPipeline, - Essentials, - FontBackgroundColor, - FontColor, - FontFamily, - FontSize, - Heading, - HorizontalLine, - Indent, - IndentBlock, - Italic, - InputTextView, - Plugin, - Paragraph, - Strikethrough, - Subscript, - Superscript, - Underline -} from '/assets/js/vendor/ckeditor5/ckeditor5.js'; import { createTemplateSelectorLockController } from '/assets/js/slides/slide-form-template-lock.js'; +import { createSlideFormEditorController } from '/assets/js/slides/slide-form-editor.js'; +import { createSlideFormRegionHelpers } from '/assets/js/slides/slide-form-regions.js'; +import { createSlideFormPreviewHelpers } from '/assets/js/slides/slide-form-preview.js'; (function () { var DEFAULT_FONT_SIZE = 32; @@ -42,6 +21,7 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo var templates = Array.isArray(slideEditorData.templates) ? slideEditorData.templates : []; var rssFeeds = Array.isArray(slideEditorData.rssFeeds) ? slideEditorData.rssFeeds : []; var apiSources = Array.isArray(slideEditorData.apiSources) ? slideEditorData.apiSources : []; + var fontStylesheetHref = String(slideEditorData.fontStylesheetHref || '').trim(); var existingTemplateId = slideEditorData.existingTemplateId !== undefined ? slideEditorData.existingTemplateId : null; var existingContent = slideEditorData.existingContent || {}; var templateSelect = document.getElementById('template-select'); @@ -56,7 +36,6 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo var slidePreviewEmpty = document.getElementById('slide-preview-empty'); var slidePreviewOverlay = document.getElementById('slide-preview-overlay'); var openPreviewPopupButton = document.getElementById('open-preview-popup'); - var editorInstances = new Map(); var submitting = false; var uploadMaxBytes = 100 * 1024 * 1024; var uploadMaxLabel = '100 MB'; @@ -66,153 +45,13 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo var previewRenderFrame = 0; var previewPopupWindow = null; var previewPopupRenderFrame = 0; + var previewPopupFeatures = ''; var currentPreviewCanvasWidth = 0; var currentPreviewCanvasHeight = 0; var sidebarSyncFrame = 0; var sidebarTopOffset = 16; var templateSelectorLock = createTemplateSelectorLockController(templateSelect); - - function applyBackdropStyle(element, backgroundColor, backgroundImagePath) { - if (!element) { - return; - } - - var color = String(backgroundColor || '#111111').trim() || '#111111'; - element.style.backgroundColor = color; - element.style.backgroundImage = backgroundImagePath - ? 'linear-gradient(rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.42)), url("' + encodeURI(String(backgroundImagePath)) + '")' - : 'linear-gradient(rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.42))'; - element.style.backgroundPosition = backgroundImagePath ? 'center, center' : 'center'; - element.style.backgroundSize = backgroundImagePath ? '100% 100%, cover' : '100% 100%'; - element.style.backgroundRepeat = backgroundImagePath ? 'no-repeat, no-repeat' : 'no-repeat'; - } - - function applyPopupBackdropStyle(element, backgroundColor) { - if (!element) { - return; - } - - var color = String(backgroundColor || '#111111').trim() || '#111111'; - element.style.backgroundColor = color; - element.style.backgroundImage = 'linear-gradient(rgba(0, 0, 0, 0.42), rgba(0, 0, 0, 0.42))'; - element.style.backgroundPosition = 'center'; - element.style.backgroundSize = '100% 100%'; - element.style.backgroundRepeat = 'no-repeat'; - } - - class FontSizeInputUI extends Plugin { - static get pluginName() { - return 'FontSizeInputUI'; - } - - init() { - var editor = this.editor; - var fontSizeCommand = editor.commands.get('fontSize'); - var plugin = this; - - if (!fontSizeCommand) { - return; - } - - editor.ui.componentFactory.add('fontSizeInput', function (locale) { - var view = new InputTextView(locale); - - view.extendTemplate({ - attributes: { - class: ['ck-font-size-input'] - } - }); - - view.set({ - placeholder: 'Font size', - ariaLabel: 'Font size' - }); - - function getCurrentFontSizeValue() { - var value = fontSizeCommand.value; - if (value === null || value === undefined || value === '') { - return String(DEFAULT_FONT_SIZE); - } - - var parsed = Math.round(Number(String(value).replace(/[^0-9.]/g, ''))); - return Number.isFinite(parsed) && parsed > 0 ? String(parsed) : ''; - } - - function syncValue() { - if (view.element && document.activeElement === view.element) { - return; - } - - view.value = getCurrentFontSizeValue(); - } - - view.on('render', function () { - if (!view.element) { - return; - } - - view.element.type = 'text'; - view.element.inputMode = 'numeric'; - view.element.autocomplete = 'off'; - view.element.spellcheck = false; - view.element.style.width = '3.5em'; - syncValue(); - }); - - function applyValue() { - if (!view.element) { - return; - } - - var size = Math.max(1, Math.round(Number(view.element.value || 0))); - if (!size) { - return; - } - - editor.execute('fontSize', { value: size + 'px' }); - } - - view.on('input', applyValue); - view.on('blur', applyValue); - - view.on('keydown', function (_eventInfo, domEvent) { - if (domEvent.key === 'Enter') { - domEvent.preventDefault(); - if (view.element) { - view.element.blur(); - } - } - }); - - plugin.listenTo(editor.model.document.selection, 'change:range', syncValue); - plugin.listenTo(fontSizeCommand, 'change:value', syncValue); - - syncValue(); - - return view; - }); - } - } - - class ForcePlainTextPaste extends Plugin { - static get pluginName() { - return 'ForcePlainTextPaste'; - } - - static get requires() { - return [ClipboardPipeline]; - } - - init() { - var editor = this.editor; - var clipboardPipeline = editor.plugins.get(ClipboardPipeline); - - this.listenTo(clipboardPipeline, 'inputTransformation', function (_event, data) { - var plainText = data.dataTransfer.getData('text/plain'); - data.content = editor.data.processor.toView(plainTextToHtml(plainText)); - }, { priority: 'high' }); - } - } + var regionTypes = window.pulseRegionTypes || {}; function escapeHtml(value) { return String(value ?? '') @@ -223,594 +62,85 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo .replace(/'/g, '''); } - function plainTextToHtml(value) { - var lines = String(value ?? '').replace(/\r\n?/g, '\n').split('\n'); - var paragraphs = []; - var currentParagraph = []; - - lines.forEach(function (line) { - if (line === '') { - if (currentParagraph.length) { - paragraphs.push('

    ' + currentParagraph.join('
    ') + '

    '); - currentParagraph = []; - } else { - paragraphs.push('

    '); - } - return; - } - - currentParagraph.push(escapeHtml(line)); - }); - - if (currentParagraph.length) { - paragraphs.push('

    ' + currentParagraph.join('
    ') + '

    '); + function getRegionTypeModule(regionType) { + if (regionTypes && typeof regionTypes.get === 'function') { + return regionTypes.get(regionType); } - return paragraphs.length ? paragraphs.join('') : '

    '; + return regionTypes && regionTypes[regionType] ? regionTypes[regionType] : null; } function getTemplateById(id) { return templates.find(function (item) { return Number(item.id) === Number(id); }) || null; } - function getCurrentRegionValue(region) { - var current = existingContent[region.region_key]; - return current && current.value !== undefined ? current.value : ''; - } - - function getCurrentRegionVideoDuration(region) { - var current = existingContent[region.region_key] || {}; - var duration = Math.round(Number(current.duration_seconds || 0) * 1000) / 1000; - return Number.isFinite(duration) && duration > 0 ? String(duration) : ''; - } - - function normalizeEditorData(value) { - return String(value || ''); - } - - function requestPreviewRender() { - if (previewRenderFrame) { + function applyBackdropStyle(element, backgroundColor, backgroundImagePath) { + if (!element) { return; } - previewRenderFrame = window.requestAnimationFrame(function () { - previewRenderFrame = 0; - renderPreview(); - }); + var color = String(backgroundColor || '#111111').trim() || '#111111'; + element.style.backgroundColor = color; + element.style.backgroundImage = backgroundImagePath ? 'url("' + encodeURI(String(backgroundImagePath)) + '")' : 'none'; + element.style.backgroundPosition = 'center'; + element.style.backgroundSize = 'cover'; + element.style.backgroundRepeat = 'no-repeat'; } - function getTemplateFieldControls() { - return templateFields ? templateFields.querySelectorAll('input, textarea, select') : []; - } - - function sanitizePreviewHtml(html) { - var output = String(html || ''); - output = output.replace(//gi, ''); - output = output.replace(//gi, ''); - return output.replace(/<[^>]+>/g, function (tag) { - var match = tag.match(/^<\s*(\/?)\s*([a-z0-9]+)([\s\S]*?)(\/?)>$/i); - if (!match) { - return ''; - } - var closing = Boolean(match[1]); - var name = String(match[2] || '').toLowerCase(); - var attrText = String(match[3] || ''); - var selfClosing = Boolean(match[4]) || name === 'br' || name === 'hr'; - var allowed = ['a', 'b', 'blockquote', 'br', 'code', 'div', 'em', 'figure', 'figcaption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'li', 'ol', 'p', 'pre', 'span', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'u', 'ul']; - if (allowed.indexOf(name) === -1) { - return ''; - } - if (closing) { - return ''; - } - if (selfClosing) { - return '<' + name + sanitizeTagAttributes(name, attrText) + '>'; - } - return '<' + name + sanitizeTagAttributes(name, attrText) + '>'; - }); - } - - function sanitizeTagAttributes(tagName, attrText) { - var allowedAttributes = { - a: ['href', 'title', 'target', 'rel', 'class', 'style'], - blockquote: ['class', 'style'], - div: ['class', 'style'], - figure: ['class', 'style'], - figcaption: ['class', 'style'], - h1: ['class', 'style'], - h2: ['class', 'style'], - h3: ['class', 'style'], - h4: ['class', 'style'], - h5: ['class', 'style'], - h6: ['class', 'style'], - li: ['class', 'style'], - ol: ['class', 'style', 'start'], - p: ['class', 'style'], - pre: ['class', 'style'], - span: ['class', 'style'], - table: ['class', 'style'], - td: ['class', 'style', 'colspan', 'rowspan'], - th: ['class', 'style', 'colspan', 'rowspan', 'scope'], - tr: ['class', 'style'], - ul: ['class', 'style'] - }; - var allowed = allowedAttributes[tagName] || []; - if (!allowed.length) { - return ''; - } - - var attrs = []; - attrText.replace(/([a-zA-Z0-9:-]+)(?:\s*=\s*("([^"]*)"|'([^']*)'|([^\s"'>/=`]+)))?/g, function (_full, key, _valuePart, doubleQuoted, singleQuoted, bareValue) { - var lowerKey = String(key || '').toLowerCase(); - if (allowed.indexOf(lowerKey) === -1) { - return ''; - } - var value = doubleQuoted !== undefined ? doubleQuoted : singleQuoted !== undefined ? singleQuoted : bareValue !== undefined ? bareValue : ''; - if (lowerKey === 'href' && /^(?:\s*javascript:|\s*data:)/i.test(String(value || ''))) { - return ''; - } - if (lowerKey === 'style' && /(?:expression\s*\(|javascript:|url\s*\()/i.test(String(value || ''))) { - return ''; - } - if (lowerKey === 'target') { - var targetValue = String(value || '').trim(); - if (targetValue === '_blank') { - attrs.push(' target="_blank"'); - if (attrs.indexOf(' rel="noreferrer noopener"') === -1) { - attrs.push(' rel="noreferrer noopener"'); - } - return ''; - } - } - attrs.push(' ' + lowerKey + '="' + escapeHtml(value) + '"'); - return ''; - }); - - return attrs.join(''); - } - - function renderPreviewListItem(item, tag) { - if (item && typeof item === 'object') { - var content = item.content !== undefined ? item.content : (item.text !== undefined ? item.text : item.value !== undefined ? item.value : ''); - var children = Array.isArray(item.items) ? item.items : Array.isArray(item.subItems) ? item.subItems : Array.isArray(item.children) ? item.children : []; - var nested = children.length ? '<' + tag + ' style="list-style-type:' + (tag === 'ol' ? 'decimal' : 'disc') + ';padding-left:1.4em;">' + children.map(function (child) { return renderPreviewListItem(child, tag); }).join('') + '' : ''; - return '
  • ' + sanitizePreviewHtml(content || '') + nested + '
  • '; - } - return '
  • ' + sanitizePreviewHtml(item || '') + '
  • '; - } - - function renderPreviewTable(data) { - var rows = Array.isArray(data.content) ? data.content : Array.isArray(data.rows) ? data.rows : []; - if (!rows.length) { - return ''; - } - var hasHeadings = Boolean(data.withHeadings); - var body = rows.map(function (row, rowIndex) { - var cells = Array.isArray(row) ? row : []; - var cellTag = hasHeadings && rowIndex === 0 ? 'th' : 'td'; - var cellAttrs = cellTag === 'th' ? ' scope="col"' : ''; - return '' + cells.map(function (cell) { - return '<' + cellTag + cellAttrs + '>' + sanitizePreviewHtml(cell || '') + ''; - }).join('') + ''; - }).join(''); - return '' + body + '
    '; - } - - function renderPreviewBlock(block) { - if (!block || !block.type || !block.data) { - return ''; - } - if (block.type === 'header') { - var level = Math.max(1, Math.min(6, Number(block.data.level || 2))); - return '' + sanitizePreviewHtml(block.data.text || '') + ''; - } - if (block.type === 'list') { - var tag = block.data.style === 'ordered' ? 'ol' : 'ul'; - var items = Array.isArray(block.data.items) ? block.data.items : []; - return '<' + tag + ' style="list-style-type:' + (tag === 'ol' ? 'decimal' : 'disc') + ';padding-left:1.4em;">' + items.map(function (item) { return renderPreviewListItem(item, tag); }).join('') + ''; - } - if (block.type === 'delimiter') { - return '
    '; - } - if (block.type === 'code') { - return '
    ' + sanitizePreviewHtml(block.data.code || '') + '
    '; - } - if (block.type === 'table') { - return renderPreviewTable(block.data); - } - if (block.type === 'paragraph') { - return '

    ' + sanitizePreviewHtml(block.data.text || '') + '

    '; - } - return ''; - } - - function renderPreviewText(value) { - var raw = String(value || ''); - if (!raw) { - return '
    Empty text
    '; - } - return sanitizePreviewHtml(raw); - } - - function renderPreviewTextRegion(region, value, style, scale) { - var fontFamily = style.font_family ? 'font-family:' + escapeHtml(style.font_family) + ';' : ''; - var color = style.font_color ? 'color:' + escapeHtml(style.font_color) + ';' : ''; - var fontSize = style.font_size ? 'font-size:' + Math.max(1, Math.round(Number(style.font_size))) + 'px;' : ''; - var width = Math.max(1, Math.round(Number(region && region.width ? region.width : 0) || 1)); - var height = Math.max(1, Math.round(Number(region && region.height ? region.height : 0) || 1)); - var wrapperStyle = 'width:' + width + 'px;height:' + height + 'px;overflow:hidden;' + fontFamily + fontSize + color; - return '
    ' + renderPreviewText(value) + '
    '; - } - - function renderPreviewWebpageRegion(value) { - var src = String(value || '').trim(); - if (!src) { - return '
    Webpage
    '; - } - return ''; - } - - function renderPreviewRtmpRegion(value, disableAudio) { - var src = String(value || '').trim(); - var label = src ? 'RTMP' : 'RTMP stream'; - if (disableAudio) { - label += ' (muted)'; - } - return '
    ' + label + '
    '; - } - - function renderPreviewHtmlRegion(value) { - var html = String(value || '').trim(); - if (!html) { - return '
    HTML
    '; - } - return ''; - } - - function startPreviewVideoPlayback(root) { - if (!root) { + function applyPopupBackdropStyle(element, backgroundColor) { + if (!element) { return; } - var videos = root.querySelectorAll('video.slide-preview-video'); - Array.prototype.forEach.call(videos, function (video) { - if (!video) { - return; - } - - video.autoplay = true; - video.loop = true; - video.muted = true; - video.playsInline = true; - - function tryPlay() { - try { - video.load(); - } catch (_error) { - // Ignore load failures and try to play anyway. - } - - var playPromise = video.play && video.play(); - if (playPromise && typeof playPromise.catch === 'function') { - playPromise.catch(function () { - return null; - }); - } - } - - if (video.readyState >= 2) { - tryPlay(); - return; - } - - video.addEventListener('canplay', tryPlay, { once: true }); - video.addEventListener('loadedmetadata', tryPlay, { once: true }); - }); + var color = String(backgroundColor || '#111111').trim() || '#111111'; + element.style.backgroundColor = color; + element.style.backgroundImage = 'none'; + element.style.backgroundPosition = 'center'; + element.style.backgroundSize = '100% 100%'; + element.style.backgroundRepeat = 'no-repeat'; } - function destroyEditors() { - editorInstances.forEach(function (editor) { - if (editor && typeof editor.destroy === 'function') { - editor.destroy(); - } - }); - editorInstances.clear(); - } - - function getEditorHiddenInput(regionId) { - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - return card ? card.querySelector('input[type="hidden"][name="region_text_' + regionId + '"]') : null; - } - - function getEditorFontSizeHiddenInput(regionId) { - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - return card ? card.querySelector('input[name="region_font_size_' + regionId + '"]') : null; - } - - function normalizeFontSizeValue(value) { - var raw = String(value || '').trim().toLowerCase(); - if (/^\d+(?:\.\d+)?px$/.test(raw)) { - return String(Math.max(1, Math.round(Number(raw.replace(/px$/, ''))))); - } - if (/^\d+(?:\.\d+)?$/.test(raw)) { - return String(Math.max(1, Math.round(Number(raw)))); - } - return ''; - } - - function syncEditorFontSizeHidden(regionId, editor) { - var fontSizeHidden = getEditorFontSizeHiddenInput(regionId); - if (!fontSizeHidden || !editor) { - return; - } - - var fontSizeCommand = editor.commands.get('fontSize'); - fontSizeHidden.value = normalizeFontSizeValue(fontSizeCommand && fontSizeCommand.value) || String(DEFAULT_FONT_SIZE); - } - - function getCurrentTextStyle(region) { - var current = existingContent[region.region_key] || {}; - return { - font_family: String(current.font_family || region.font_family || 'Arial').trim() || 'Arial', - font_size: Math.max(8, Number(current.font_size || DEFAULT_FONT_SIZE)), - font_color: String(current.font_color || region.font_color || '#000000').trim() || '#000000' - }; - } - - function getRssFeedById(feedId) { - var normalizedId = Number(feedId || 0); - return rssFeeds.find(function (feed) { - return Number(feed.id) === normalizedId; - }) || null; - } - - function getRssFieldList(feedId) { - var feed = getRssFeedById(feedId); - var sampleItem = feed && Array.isArray(feed.items) ? feed.items[0] : null; - var sampleJson = sampleItem && sampleItem.itemJson && typeof sampleItem.itemJson === 'object' ? sampleItem.itemJson : null; - - function walkFields(value, prefix, output) { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - return; - } - - Object.keys(value).forEach(function (key) { - if (key === 'rawXml') { - return; - } - - var nextPath = prefix ? prefix + '.' + key : key; - var nextValue = value[key]; - if (nextValue && typeof nextValue === 'object' && !Array.isArray(nextValue)) { - walkFields(nextValue, nextPath, output); - return; - } - - if (output.indexOf(nextPath) === -1) { - output.push(nextPath); - } - }); - } - - var fields = []; - walkFields(sampleJson, '', fields); - return fields; - } - - function updatePlaceholderChipList(card, fieldList, emptyLabel) { - if (!card) { - return; - } - - var container = card.querySelector('[data-placeholder-chips]'); - if (!container) { - return; - } - - var chips = Array.isArray(fieldList) ? fieldList.map(function (field) { - return '{{' + escapeHtml(field) + '}}'; - }).join('') : ''; - - container.innerHTML = chips || '' + escapeHtml(emptyLabel) + ''; - } - - function updateRssPlaceholderChips(regionId, feedId) { - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - updatePlaceholderChipList(card, getRssFieldList(feedId), 'No RSS fields available.'); - } - - function getCurrentRssConfig(region) { - var current = existingContent[region.region_key] || {}; - var parsedItemNumber = Math.max(1, Number(current.item_number || 1)); - return { - feed_id: current.feed_id === undefined || current.feed_id === null || current.feed_id === '' ? '' : Number(current.feed_id), - item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, - value: current.value !== undefined ? current.value : '' - }; - } - - function resolveRssPath(value, path) { - var current = value; - if (!path) { - return current; - } - String(path).split('.').forEach(function (segment) { - if (current === undefined || current === null) { - current = ''; - return; - } - current = current[segment]; - }); - return current === undefined || current === null ? '' : current; - } - - function normalizeRssVariableName(value) { - var next = String(value || '').trim(); - return next || 'item'; - } - - function substituteRssVariables(html, item) { - var source = String(html || ''); - return source.replace(/\{\{\s*([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_.]+))?\s*\}\}/g, function (_match, tokenName, tokenPath) { - if (!item || typeof item !== 'object') { - return ''; - } - var key = tokenName === 'item' && tokenPath ? tokenPath : tokenName; - return escapeHtml(resolveRssPath(item, key || '')); - }); - } - - function getRssItem(region, rssConfig) { - var feed = getRssFeedById(rssConfig.feed_id); - var items = feed && Array.isArray(feed.items) ? feed.items : []; - var parsedItemNumber = Math.max(1, Number(rssConfig.item_number || 1)); - var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; - return items[index] || null; - } - - function getRssPreviewFallback(item) { - if (!item || typeof item !== 'object') { - return '
    RSS item
    '; - } - - var title = String(item.title || '').trim(); - var description = String(item.description || '').trim(); - var summary = []; - if (title) { - summary.push('

    ' + escapeHtml(title) + '

    '); - } - if (description) { - summary.push('

    ' + sanitizePreviewHtml(description) + '

    '); - } - if (!summary.length) { - return '
    RSS item
    '; - } - return summary.join(''); - } - - function getApiSourceById(sourceId) { - var normalizedId = Number(sourceId || 0); - return apiSources.find(function (source) { - return Number(source.id) === normalizedId; - }) || null; - } - - function getApiSourceItems(sourceId) { - var source = getApiSourceById(sourceId); - var responseJson = source && source.responseJson && typeof source.responseJson === 'object' ? source.responseJson : null; - if (Array.isArray(responseJson)) { - return responseJson; - } - if (responseJson && Array.isArray(responseJson.items)) { - return responseJson.items; - } - if (responseJson && Array.isArray(responseJson.results)) { - return responseJson.results; - } - if (responseJson && Array.isArray(responseJson.data)) { - return responseJson.data; - } - return responseJson ? [responseJson] : []; - } - - function getApiFieldList(sourceId) { - var sampleItem = getApiSourceItems(sourceId)[0] || null; - - function walkFields(value, prefix, output) { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - return; - } - - Object.keys(value).forEach(function (key) { - var nextPath = prefix ? prefix + '.' + key : key; - var nextValue = value[key]; - if (nextValue && typeof nextValue === 'object' && !Array.isArray(nextValue)) { - walkFields(nextValue, nextPath, output); - return; - } - - if (output.indexOf(nextPath) === -1) { - output.push(nextPath); - } - }); - } - - var fields = []; - walkFields(sampleItem && typeof sampleItem === 'object' ? sampleItem : null, '', fields); - return fields; - } - - function updateApiPlaceholderChips(regionId, sourceId) { - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - updatePlaceholderChipList(card, getApiFieldList(sourceId), 'No JSON fields available.'); - } - - function getCurrentApiConfig(region) { - var current = existingContent[region.region_key] || {}; - var parsedItemNumber = Math.max(1, Number(current.item_number || 1)); - return { - source_id: current.source_id === undefined || current.source_id === null || current.source_id === '' ? '' : Number(current.source_id), - item_number: Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber : 1, - value: current.value !== undefined ? current.value : '' - }; - } - - function resolveApiPath(value, path) { - var current = value; - if (!path) { - return current; - } - String(path).split('.').forEach(function (segment) { - if (current === undefined || current === null) { - current = ''; - return; - } - current = current[segment]; - }); - return current === undefined || current === null ? '' : current; - } - - function substituteApiVariables(html, item) { - var source = String(html || ''); - return source.replace(/\{\{\s*([a-zA-Z0-9_]+)(?:\.([a-zA-Z0-9_.]+))?\s*\}\}/g, function (_match, tokenName, tokenPath) { - if (!item || typeof item !== 'object') { - return ''; - } - var key = tokenName === 'item' && tokenPath ? tokenPath : tokenName; - return escapeHtml(resolveApiPath(item, key || '')); - }); - } - - function getApiItem(sourceId, itemNumber) { - var items = getApiSourceItems(sourceId); - var parsedItemNumber = Math.max(1, Number(itemNumber || 1)); - var index = Number.isFinite(parsedItemNumber) && parsedItemNumber > 0 ? parsedItemNumber - 1 : 0; - return items[index] || null; - } - - function getApiPreviewFallback(item) { - if (!item || typeof item !== 'object') { - return '
    API item
    '; - } - - var title = String(item.title || item.name || '').trim(); - var description = String(item.description || item.summary || item.text || '').trim(); - var summary = []; - if (title) { - summary.push('

    ' + escapeHtml(title) + '

    '); - } - if (description) { - summary.push('

    ' + sanitizePreviewHtml(description) + '

    '); - } - if (!summary.length) { - return '
    API item
    '; - } - return summary.join(''); - } - - function getTextStyleFromCard(_card, region) { - return getCurrentTextStyle(region); - } + var slideFormEditorController = createSlideFormEditorController({ + templateFields: templateFields, + templateSelectorLock: templateSelectorLock, + defaultFontSize: DEFAULT_FONT_SIZE, + fontFamilyFormats: slideEditorData.fontFamilyFormats || '', + fontStylesheetHref: fontStylesheetHref, + getRegionTypeModule: getRegionTypeModule, + getEditorBackgroundColor: function () { + var template = getTemplateById(templateSelect.value); + return template && template.background_color ? String(template.background_color) : '#111111'; + }, + requestPreviewRender: requestPreviewRender + }); + var regionUtils = window.pulseRegionUtils || {}; + var slideRegionHelpers = createSlideFormRegionHelpers({ + templateFields: templateFields, + existingContent: existingContent, + rssFeeds: rssFeeds, + apiSources: apiSources, + defaultFontSize: DEFAULT_FONT_SIZE, + uploadMaxLabel: uploadMaxLabel, + uploadVideoMaxLabel: uploadVideoMaxLabel, + escapeHtml: escapeHtml, + getRegionTypeModule: getRegionTypeModule + }); + var slidePreviewHelpers = createSlideFormPreviewHelpers({ + getRegionTypeModule: getRegionTypeModule, + escapeHtml: escapeHtml + }); + var sanitizePreviewHtml = slidePreviewHelpers.sanitizePreviewHtml; + var sanitizeTagAttributes = slidePreviewHelpers.sanitizeTagAttributes; + var renderPreviewListItem = slidePreviewHelpers.renderPreviewListItem; + var renderPreviewTable = slidePreviewHelpers.renderPreviewTable; + var renderPreviewBlock = slidePreviewHelpers.renderPreviewBlock; + var renderPreviewText = slidePreviewHelpers.renderPreviewText; + var renderPreviewTextRegion = slidePreviewHelpers.renderPreviewTextRegion; + var buildRegionEditorCardContext = slideRegionHelpers.buildRegionEditorCardContext; + var getRegionEditorCardHtml = slideRegionHelpers.getRegionEditorCardHtml; + var getPreviewRegionContent = slideRegionHelpers.getPreviewRegionContent; + var buildPreviewRenderContext = slideRegionHelpers.buildPreviewRenderContext; + var startPreviewVideoPlayback = slidePreviewHelpers.startPreviewVideoPlayback; function getSelectedTemplate() { return templates.find(function (item) { return Number(item.id) === Number(templateSelect.value); }) || null; @@ -825,369 +155,81 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo }); } - function getRegionMediaType(card) { - if (card && card.dataset && String(card.dataset.regionMediaType || '').trim()) { - return String(card.dataset.regionMediaType || '').trim() === 'video' ? 'video' : 'image'; - } - - var regionTypeInput = card && card.querySelector ? card.querySelector('input[type="hidden"][name="region_type[]"]') : null; - return regionTypeInput && String(regionTypeInput.value || '').trim() === 'video' ? 'video' : 'image'; - } - - function getRegionMediaPrefix(mediaType) { - return String(mediaType || '').trim() === 'video' ? 'region_video_' : 'region_image_'; - } - - function getRegionExistingMediaPrefix(mediaType) { - return String(mediaType || '').trim() === 'video' ? 'existing_region_video_' : 'existing_region_image_'; - } - - function getRegionExistingVideoDurationName(regionId) { - return 'existing_region_video_duration_' + regionId; - } - function getRegionVideoDurationHiddenInput(regionId) { var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - return card ? card.querySelector('input[type="hidden"][name="' + getRegionExistingVideoDurationName(regionId) + '"]') : null; + return card ? card.querySelector('input[type="hidden"][name="existing_region_video_duration_' + regionId + '"]') : null; } - function getRegionUploadZone(input) { - return input ? input.closest('[data-region-upload-zone]') : null; + function getRegionEditorRegionType(card) { + if (!card) { + return ''; + } + + if (card.dataset && String(card.dataset.regionMediaType || '').trim()) { + return String(card.dataset.regionMediaType || '').trim(); + } + + var regionTypeInput = card.querySelector ? card.querySelector('input[type="hidden"][name="region_type[]"]') : null; + return String(regionTypeInput && regionTypeInput.value || '').trim(); } - function getRegionUploadHiddenValue(input) { - var mediaType = input && input.name && input.name.indexOf('region_video_') === 0 ? 'video' : 'image'; + function getRegionEditorModule(card) { + return getRegionTypeModule(getRegionEditorRegionType(card)); + } + + var regionMediaController = regionUtils.createRegionMediaUploadController ? regionUtils.createRegionMediaUploadController(templateFields, { + getCardByRegionId: function (regionId) { + return templateFields.querySelector('[data-region-id="' + regionId + '"]'); + }, + handleMediaSelection: function (input, file) { + return handleRegionMediaFileSelection(input, file); + }, + renderPreview: function (card, value) { + renderRegionMediaPreview(card, value); + }, + syncDuration: function (card, source) { + return syncVideoRegionDuration(card, source); + }, + markEdited: function () { + templateSelectorLock.markEdited(); + requestPreviewRender(); + }, + requestPreviewRender: function () { + requestPreviewRender(); + } + }) : null; + + function buildRegionMediaHookContext(input, file) { var regionId = input && input.name ? input.name.replace(/^region_(?:image|video)_/, '') : ''; var card = regionId ? templateFields.querySelector('[data-region-id="' + regionId + '"]') : null; - var hidden = card && card.querySelector('input[type="hidden"][name="' + getRegionExistingMediaPrefix(mediaType) + regionId + '"]'); - return hidden ? hidden.value : ''; + + return { + input: input, + file: file || null, + card: card, + regionId: regionId, + regionType: getRegionEditorRegionType(card), + setInputFile: function (nextFile) { + return regionMediaController ? regionMediaController.setInputFile(input, nextFile) : null; + }, + uploadFile: function (nextFile) { + return regionMediaController ? regionMediaController.uploadFile(input, nextFile || file) : Promise.resolve(null); + } + }; } - function getRegionUploadProgressNode(zone) { - return zone ? zone.querySelector('[data-region-upload-progress]') : null; - } + function handleRegionMediaFileSelection(input, file) { + var card = input && input.name ? templateFields.querySelector('[data-region-id="' + input.name.replace(/^region_(?:image|video)_/, '') + '"]') : null; + var module = getRegionEditorModule(card); + var hookContext = buildRegionMediaHookContext(input, file); - function getRegionUploadProgressBar(zone) { - return zone ? zone.querySelector('[data-region-upload-progress-bar]') : null; - } - - function getRegionUploadProgressText(zone) { - return zone ? zone.querySelector('[data-region-upload-progress-text]') : null; - } - - function setRegionUploadProgress(zone, percent, text, isIndeterminate) { - var progress = getRegionUploadProgressNode(zone); - var bar = getRegionUploadProgressBar(zone); - var progressText = getRegionUploadProgressText(zone); - var normalizedPercent = Math.max(0, Math.min(100, Math.round(Number(percent || 0)))); - - if (!progress || !bar) { - return; - } - - if (progressText) { - progressText.textContent = text || 'Uploading...'; - } - - progress.hidden = false; - bar.style.width = (isIndeterminate ? 100 : normalizedPercent) + '%'; - bar.textContent = isIndeterminate ? 'Uploading...' : normalizedPercent + '%'; - bar.setAttribute('aria-valuenow', String(isIndeterminate ? 100 : normalizedPercent)); - bar.classList.toggle('progress-bar-striped', Boolean(isIndeterminate)); - bar.classList.toggle('progress-bar-animated', Boolean(isIndeterminate)); - } - - function setRegionUploadState(input, isUploading, percent, text, isIndeterminate) { - var zone = getRegionUploadZone(input); - var progress = getRegionUploadProgressNode(zone); - - if (!zone || !progress) { - return; - } - - zone.classList.toggle('is-uploading', Boolean(isUploading)); - zone.setAttribute('aria-busy', isUploading ? 'true' : 'false'); - input.disabled = Boolean(isUploading); - - if (isUploading) { - setRegionUploadProgress(zone, percent, text, isIndeterminate); - return; - } - - progress.hidden = true; - if (input) { - input.disabled = false; - } - } - - function isRegionImageFileWithinLimit(file) { - return Boolean(file) && Number(file.size || 0) <= uploadMaxBytes; - } - - function getRegionMediaTypeFromInput(input) { - return input && input.name && input.name.indexOf('region_video_') === 0 ? 'video' : 'image'; - } - - function getRegionMediaUploadLimitBytes(mediaType) { - return String(mediaType || '').trim() === 'video' ? uploadVideoMaxBytes : uploadMaxBytes; - } - - function getRegionMediaUploadLimitLabel(mediaType) { - return String(mediaType || '').trim() === 'video' ? uploadVideoMaxLabel : uploadMaxLabel; - } - - function isRegionMediaFileWithinLimit(file, mediaType) { - return Boolean(file) && Number(file.size || 0) <= getRegionMediaUploadLimitBytes(mediaType); - } - - function rejectOversizeRegionImage(input, file) { - return rejectOversizeRegionMedia(input, file, 'image'); - } - - function rejectOversizeRegionMedia(input, file, mediaType) { - var zone = getRegionUploadZone(input); - var hiddenValue = getRegionUploadHiddenValue(input); - var limitLabel = getRegionMediaUploadLimitLabel(mediaType || getRegionMediaTypeFromInput(input)); - - if (typeof window.showToast === 'function') { - window.showToast('File must be ' + limitLabel + ' or smaller.', 'warning'); - } else { - window.alert('File must be ' + limitLabel + ' or smaller.'); - } - input.value = ''; - if (input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; - } - renderRegionMediaPreview(zone ? zone.closest('[data-region-id]') : null, hiddenValue); - if (file) { - return false; + if (module && typeof module.handleMediaInputChange === 'function') { + return module.handleMediaInputChange(hookContext); } return false; } - function setRegionImageInputFile(input, file) { - return setRegionMediaInputFile(input, file); - } - - function setRegionMediaInputFile(input, file) { - if (!input || !file) { - return; - } - - var mediaType = getRegionMediaTypeFromInput(input); - - if (!isRegionMediaFileWithinLimit(file, mediaType)) { - rejectOversizeRegionMedia(input, file, mediaType); - return; - } - - var dataTransfer = new DataTransfer(); - dataTransfer.items.add(file); - input.files = dataTransfer.files; - input.dispatchEvent(new Event('change', { bubbles: true })); - } - - function uploadRegionImageFile(input, file) { - return uploadRegionMediaFile(input, file); - } - - function uploadRegionMediaFile(input, file) { - if (!input || !file) { - return Promise.resolve(null); - } - - var mediaType = getRegionMediaTypeFromInput(input); - - if (!isRegionMediaFileWithinLimit(file, mediaType)) { - rejectOversizeRegionMedia(input, file, mediaType); - return Promise.resolve(null); - } - - var regionId = input.name.replace(/^region_(?:image|video)_/, ''); - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - var hidden = card && card.querySelector('input[type="hidden"][name="' + getRegionExistingMediaPrefix(mediaType) + regionId + '"]'); - var zone = getRegionUploadZone(input); - var uploadToken = String(Date.now()) + ':' + Math.random().toString(16).slice(2); - var previousUploadedPath = String(input.dataset.uploadedPath || '').trim(); - var previousNeedsCleanup = String(input.dataset.uploadedNeedsCleanup || '') === '1'; - - input.dataset.uploadToken = uploadToken; - setRegionUploadState(input, true, 0, 'Uploading...', true); - - return new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - var formData = new FormData(); - formData.append('file', file, file.name || 'upload'); - - xhr.open('POST', '/slides/uploads', true); - xhr.responseType = 'text'; - xhr.withCredentials = true; - xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); - xhr.setRequestHeader('Accept', 'application/json, text/plain, */*'); - - xhr.upload.onprogress = function (event) { - if (input.dataset.uploadToken !== uploadToken) { - return; - } - - if (!event || !event.lengthComputable || !event.total) { - setRegionUploadProgress(zone, 100, 'Uploading...', true); - return; - } - - var percent = Math.round((event.loaded / event.total) * 100); - setRegionUploadProgress(zone, percent, 'Uploading ' + percent + '%', false); - }; - - xhr.onload = function () { - if (input.dataset.uploadToken !== uploadToken) { - resolve(null); - return; - } - - var response = { - ok: xhr.status >= 200 && xhr.status < 300, - status: xhr.status, - statusText: xhr.statusText, - responseText: xhr.responseText || '' - }; - - if (!response.ok) { - var error = new Error(response.responseText || 'Unable to upload media.'); - error.status = response.status; - error.responseText = response.responseText; - reject(error); - return; - } - - var payload = {}; - try { - payload = JSON.parse(response.responseText || '{}') || {}; - } catch (_error) { - payload = {}; - } - - var uploadedPath = String(payload.path || '').trim(); - if (!uploadedPath) { - reject(new Error('Unable to upload media.')); - return; - } - - if (input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; - } - - if (hidden) { - hidden.value = uploadedPath; - } - input.dataset.uploadedPath = uploadedPath; - input.dataset.uploadedNeedsCleanup = '1'; - input.value = ''; - input.setCustomValidity(''); - renderRegionMediaPreview(card, uploadedPath); - void syncVideoRegionDuration(card, uploadedPath); - templateSelectorLock.markEdited(); - requestPreviewRender(); - if (previousNeedsCleanup && previousUploadedPath && previousUploadedPath !== uploadedPath) { - queueUploadCleanup([previousUploadedPath]); - } - setRegionUploadState(input, false); - resolve(payload); - }; - - xhr.onerror = function () { - if (input.dataset.uploadToken !== uploadToken) { - resolve(null); - return; - } - - reject(new Error('Unable to upload media.')); - }; - - xhr.onabort = function () { - if (input.dataset.uploadToken !== uploadToken) { - resolve(null); - return; - } - - reject(new Error('Unable to upload media.')); - }; - - xhr.onloadend = function () { - if (input.dataset.uploadToken === uploadToken) { - delete input.dataset.uploadToken; - setRegionUploadState(input, false); - } - }; - - xhr.send(formData); - }).catch(function (error) { - if (input.dataset.uploadToken === uploadToken) { - delete input.dataset.uploadToken; - setRegionUploadState(input, false); - } - throw error; - }); - } - - function getPendingUploadCleanupPaths() { - return getRegionMediaInputs().map(function (input) { - if (!input || String(input.dataset.uploadedNeedsCleanup || '') !== '1') { - return null; - } - - return String(input.dataset.uploadedPath || '').trim(); - }).filter(Boolean); - } - - function clearPendingUploadCleanupPaths() { - getRegionMediaInputs().forEach(function (input) { - if (!input) { - return; - } - - delete input.dataset.uploadedNeedsCleanup; - }); - } - - function queueUploadCleanup(uploadPaths) { - var normalizedPaths = Array.from(new Set((uploadPaths || []).map(function (value) { - return String(value || '').trim(); - }).filter(Boolean))); - - if (!normalizedPaths.length) { - return; - } - - var payload = JSON.stringify({ uploadPaths: normalizedPaths }); - var url = '/slides/uploads/cleanup'; - - if (navigator.sendBeacon) { - try { - navigator.sendBeacon(url, new Blob([payload], { type: 'application/json' })); - return; - } catch (_error) { - // Fall back to fetch below. - } - } - - fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json' - }, - body: payload, - credentials: 'same-origin', - keepalive: true - }).catch(function () { - // Best-effort cleanup only. - }); - } - function renderRegionMediaPreview(card, value) { if (!card) { return; @@ -1198,7 +240,7 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo return; } - var mediaType = getRegionMediaType(card); + var mediaType = card && card.dataset && String(card.dataset.regionMediaType || '').trim() === 'video' ? 'video' : 'image'; var isVideo = mediaType === 'video'; previewBox.innerHTML = value @@ -1306,6 +348,17 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo } async function syncVideoRegionDuration(card, source) { + var module = getRegionTypeModule('video'); + if (module && typeof module.syncDuration === 'function') { + return module.syncDuration(card, source, { + getHiddenInput: function (targetCard) { + var regionId = targetCard && targetCard.getAttribute('data-region-id'); + return regionId ? getRegionVideoDurationHiddenInput(regionId) : null; + }, + loadDuration: loadVideoDuration + }); + } + if (!card) { return; } @@ -1368,21 +421,20 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo }; } - function buildPreviewPopupHtml() { - return '' + - '' + - '' + - '' + - '' + - 'Slide preview' + - '' + - '' + - '' + - '' + - '' + - ''; + function buildPreviewPopupPayload() { + var template = getSelectedTemplate(); + return { + html: slidePreviewCanvas.innerHTML, + canvasWidth: currentPreviewCanvasWidth || Math.max(1, Number(template && template.canvas_size_width ? template.canvas_size_width : 1920)), + canvasHeight: currentPreviewCanvasHeight || Math.max(1, Number(template && template.canvas_size_height ? template.canvas_size_height : 1080)), + backgroundColor: template && template.background_color ? String(template.background_color) : '#111111', + backgroundImagePath: template && template.background_image_path ? String(template.background_image_path) : '', + fontStylesheetHref: fontStylesheetHref + }; + } + + function buildPreviewPopupUrl() { + return '/slides/popup-preview#' + encodeURIComponent(JSON.stringify(buildPreviewPopupPayload())); } function syncPopupPreview() { @@ -1391,91 +443,15 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo return; } - var popupDocument = previewPopupWindow.document; - if (!popupDocument) { - return; - } - - var popupStage = popupDocument.getElementById('popup-preview-stage'); - var popupCanvas = popupDocument.getElementById('popup-preview-canvas'); - var template = getSelectedTemplate(); - - if (!popupStage || !popupCanvas) { - if (previewPopupRenderFrame) { - cancelAnimationFrame(previewPopupRenderFrame); - } - previewPopupRenderFrame = requestAnimationFrame(syncPopupPreview); - return; - } - - if (!template) { - applyBackdropStyle(popupCanvas, '#111111'); - popupCanvas.style.width = ''; - popupCanvas.style.height = ''; - popupCanvas.style.transform = ''; - popupCanvas.innerHTML = slidePreviewCanvas.innerHTML; - var popupEmpty = popupCanvas.querySelector('#slide-preview-empty'); - var popupOverlay = popupCanvas.querySelector('#slide-preview-overlay'); - var popupBackground = popupCanvas.querySelector('#slide-preview-background'); - if (popupBackground) { - popupBackground.style.display = 'none'; - } - if (popupEmpty) { - popupEmpty.style.display = 'flex'; - popupEmpty.textContent = 'Select a template to preview the slide.'; - } - if (popupOverlay) { - popupOverlay.innerHTML = ''; - } - startPreviewVideoPlayback(popupCanvas); - return; - } - - var canvasWidth = currentPreviewCanvasWidth || Math.max(1, Number(template.canvas_size_width || 1920)); - var canvasHeight = currentPreviewCanvasHeight || Math.max(1, Number(template.canvas_size_height || 1080)); - applyBackdropStyle(popupCanvas, template.background_color || '#111111', template.background_image_path); - popupCanvas.style.width = canvasWidth + 'px'; - popupCanvas.style.height = canvasHeight + 'px'; - popupCanvas.innerHTML = slidePreviewCanvas.innerHTML; - var popupBackground = popupCanvas.querySelector('#slide-preview-background'); - var popupEmpty = popupCanvas.querySelector('#slide-preview-empty'); - var popupOverlay = popupCanvas.querySelector('#slide-preview-overlay'); - - if (popupBackground) { - popupBackground.style.display = template.background_image_path ? 'block' : 'none'; - popupBackground.src = template.background_image_path || ''; - } - if (popupEmpty) { - popupEmpty.style.display = 'none'; - } - - startPreviewVideoPlayback(popupCanvas); - - var stageRect = popupStage.getBoundingClientRect(); - if (!stageRect.width || !stageRect.height) { - if (previewPopupRenderFrame) { - cancelAnimationFrame(previewPopupRenderFrame); - } - previewPopupRenderFrame = requestAnimationFrame(syncPopupPreview); - return; - } - - var scale = Math.min(stageRect.width / canvasWidth, stageRect.height / canvasHeight) || 1; - popupCanvas.style.transform = 'translate3d(0, 0, 0) scale(' + scale + ')'; + previewPopupWindow = window.open(buildPreviewPopupUrl(), 'slide-preview-popup', previewPopupFeatures); } function openPreviewPopup() { - if (previewPopupWindow && !previewPopupWindow.closed) { - previewPopupWindow.focus(); - syncPopupPreview(); - return; - } - var popupWidth = 1280; var popupHeight = 900; var left = Math.max(0, Math.round((window.screen.width - popupWidth) / 2)); var top = Math.max(0, Math.round((window.screen.height - popupHeight) / 2)); - var popupFeatures = [ + previewPopupFeatures = [ 'popup=yes', 'toolbar=no', 'location=no', @@ -1490,15 +466,11 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo 'top=' + top ].join(','); - previewPopupWindow = window.open('', 'slide-preview-popup', popupFeatures); + previewPopupWindow = window.open(buildPreviewPopupUrl(), 'slide-preview-popup', previewPopupFeatures); if (!previewPopupWindow) { return; } - previewPopupWindow.document.open(); - previewPopupWindow.document.write(buildPreviewPopupHtml()); - previewPopupWindow.document.close(); - previewPopupWindow.addEventListener('resize', syncPopupPreview); previewPopupWindow.focus(); syncPopupPreview(); } @@ -1598,72 +570,14 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo slidePreviewOverlay.innerHTML = regions.map(function (region) { var box = getRegionBox(region, canvasWidth, canvasHeight); var card = templateFields.querySelector('[data-region-id="' + region.id + '"]'); - var hiddenInput = card && card.querySelector('input[type="hidden"][name="region_text_' + region.id + '"]'); - var htmlInput = card && card.querySelector('textarea[name="region_html_' + region.id + '"]'); - var imageHidden = card && card.querySelector('input[type="hidden"][name="existing_region_image_' + region.id + '"]'); - var imageFileInput = card && card.querySelector('input[type="file"][name="region_image_' + region.id + '"]'); - var videoHidden = card && card.querySelector('input[type="hidden"][name="existing_region_video_' + region.id + '"]'); - var videoFileInput = card && card.querySelector('input[type="file"][name="region_video_' + region.id + '"]'); - var webpageInput = card && card.querySelector('input[type="url"][name="region_webpage_' + region.id + '"]'); - var rtmpInput = card && card.querySelector('input[type="url"][name="region_rtmp_' + region.id + '"]'); - var disableAudioInput = card && card.querySelector('input[type="checkbox"][name="region_disable_audio_' + region.id + '"]'); - var rssFeedInput = card && card.querySelector('select[name="region_rss_feed_id_' + region.id + '"]'); - var rssItemInput = card && card.querySelector('input[name="region_rss_item_number_' + region.id + '"]'); - var apiSourceInput = card && card.querySelector('select[name="region_api_source_id_' + region.id + '"]'); - var apiItemInput = card && card.querySelector('input[name="region_api_item_number_' + region.id + '"]'); - var existingRtmp = existingContent[region.region_key] || {}; - var existingRss = existingContent[region.region_key] || {}; - var existingApi = existingContent[region.region_key] || {}; - var value = region.region_type === 'image' - ? ((imageFileInput && imageFileInput.dataset.previewUrl) ? imageFileInput.dataset.previewUrl : (imageHidden ? imageHidden.value : '')) - : region.region_type === 'video' - ? ((videoFileInput && videoFileInput.dataset.previewUrl) ? videoFileInput.dataset.previewUrl : (videoHidden ? videoHidden.value : '')) - : region.region_type === 'webpage' - ? (webpageInput ? webpageInput.value : '') - : region.region_type === 'rtmp' - ? (rtmpInput ? rtmpInput.value : '') - : region.region_type === 'rss' - ? (hiddenInput ? hiddenInput.value : '') - : region.region_type === 'api' - ? (hiddenInput ? hiddenInput.value : '') - : region.region_type === 'html' - ? (htmlInput ? htmlInput.value : '') - : (hiddenInput ? hiddenInput.value : ''); - var style = region.region_type === 'image' - ? null - : region.region_type === 'webpage' - ? null - : region.region_type === 'rtmp' - ? null - : region.region_type === 'html' - ? null - : getTextStyleFromCard(card, region); - var content = region.region_type === 'image' - ? (value ? '' : '
    Image
    ') - : region.region_type === 'video' - ? (value ? '' : '
    Video
    ') - : region.region_type === 'webpage' - ? renderPreviewWebpageRegion(value) - : region.region_type === 'rtmp' - ? renderPreviewRtmpRegion(value, disableAudioInput ? disableAudioInput.checked : (existingRtmp.disable_audio === undefined ? true : Boolean(existingRtmp.disable_audio))) - : region.region_type === 'rss' - ? (function () { - var item = getRssItem(region, { - feed_id: rssFeedInput ? rssFeedInput.value : existingRss.feed_id, - item_number: rssItemInput ? rssItemInput.value : existingRss.item_number - }); - var rendered = substituteRssVariables(value, item); - return renderPreviewTextRegion(region, rendered ? rendered : getRssPreviewFallback(item), style, scale); - }()) - : region.region_type === 'api' - ? (function () { - var item = getApiItem(apiSourceInput ? apiSourceInput.value : existingApi.source_id, apiItemInput ? apiItemInput.value : existingApi.item_number); - var rendered = substituteApiVariables(value, item); - return renderPreviewTextRegion(region, rendered ? rendered : getApiPreviewFallback(item), style, scale); - }()) - : region.region_type === 'html' - ? renderPreviewHtmlRegion(value) - : renderPreviewTextRegion(region, value, style, scale); + var typeModule = getRegionTypeModule(region.region_type); + var previewContext = buildPreviewRenderContext(region, card); + var content = typeModule && typeof typeModule.renderPreview === 'function' + ? typeModule.renderPreview(region, previewContext, previewContext) + : renderPreviewTextRegion(region, previewContext.value, previewContext.style, scale); + if (typeModule && typeof typeModule.renderPreview === 'function') { + content = content || renderPreviewTextRegion(region, previewContext.value, previewContext.style, scale); + } var selected = region.region_type === 'image' ? ' slide-preview-image-region' : region.region_type === 'video' @@ -1687,285 +601,32 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo syncPopupPreview(); } - function renderTextRegion(region) { - var current = getCurrentRegionValue(region); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - '
    ' + - '' + - 'Text' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '' + - '' + - '
    ' + - '
    '; - } - - function renderRssRegion(region) { - var current = existingContent[region.region_key] || {}; - var config = getCurrentRssConfig(region); - var fieldList = getRssFieldList(config.feed_id); - var placeholderChips = fieldList.map(function (field) { - return '{{' + escapeHtml(field) + '}}'; - }).join(''); - var feedOptions = rssFeeds.map(function (feed) { - var selected = Number(feed.id) === Number(config.feed_id) ? ' selected' : ''; - return ''; - }).join(''); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - '
    ' + - '' + - 'RSS' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    ' + - '' + - '' + - '
    Use placeholders like {{title}} or {{link}}. Available placeholders:
    ' + - '
    ' + (placeholderChips || 'No RSS fields available.') + '
    ' + - '
    ' + - '
    '; - } - - function renderApiRegion(region) { - var current = existingContent[region.region_key] || {}; - var config = getCurrentApiConfig(region); - var fieldList = getApiFieldList(config.source_id); - var placeholderChips = fieldList.map(function (field) { - return '{{' + escapeHtml(field) + '}}'; - }).join(''); - var sourceOptions = apiSources.map(function (source) { - var selected = Number(source.id) === Number(config.source_id) ? ' selected' : ''; - return ''; - }).join(''); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - '
    ' + - '' + - 'API' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    ' + - '' + - '' + - '
    Use placeholders like {{title}} or {{description}}. Available placeholders:
    ' + - '
    ' + (placeholderChips || 'No JSON fields available.') + '
    ' + - '
    ' + - '
    '; + function requestPreviewRender() { + if (previewRenderFrame) { + return; } - function renderWebpageRegion(region) { - var current = getCurrentRegionValue(region); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - 'Webpage' + - '
    ' + - '
    ' + - '' + - '
    The webpage will be loaded in an iframe.
    ' + - '
    ' + - '
    '; + previewRenderFrame = window.requestAnimationFrame(function () { + previewRenderFrame = 0; + renderPreview(); + }); } - function renderRtmpRegion(region) { - var current = existingContent[region.region_key] || {}; - var url = String(current.value || '').trim(); - var disableAudio = current.disable_audio === undefined ? true : Boolean(current.disable_audio); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - 'RTMP' + - '
    ' + - '
    ' + - '' + - '' + - '
    Player controls stay hidden and the stream is not interactive.
    ' + - '
    ' + - '
    '; - } - - function renderHtmlRegion(region) { - var current = getCurrentRegionValue(region); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - 'HTML' + - '
    ' + - '
    ' + - '' + - '
    HTML is rendered in a sandboxed iframe preview.
    ' + - '
    ' + - '
    '; - } - - function reduceAspectRatio(width, height) { - var a = Math.max(1, Math.round(Number(width || 0) || 1)); - var b = Math.max(1, Math.round(Number(height || 0) || 1)); - while (b !== 0) { - var remainder = a % b; - a = b; - b = remainder; - } - var divisor = Math.max(1, a); - return Math.max(1, Math.round(Number(width || 0) || 1) / divisor) + ':' + Math.max(1, Math.round(Number(height || 0) || 1) / divisor); - } - - function renderImageRegion(region) { - var current = getCurrentRegionValue(region); - var regionWidth = Math.max(1, Math.round(Number(region && region.width ? region.width : 0) || 1)); - var regionHeight = Math.max(1, Math.round(Number(region && region.height ? region.height : 0) || 1)); - var regionRatio = reduceAspectRatio(regionWidth, regionHeight); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - 'Image' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '
    ' + - '
    ' + - (current - ? '
    ' + - 'Current image preview' + - '' + - '
    ' - : '
    No image
    ') + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '
    '; - } - - function renderVideoRegion(region) { - var current = getCurrentRegionValue(region); - var currentDuration = getCurrentRegionVideoDuration(region); - return '' + - '
    ' + - '
    ' + - '' + escapeHtml(region.label) + '' + - 'Video' + - '
    ' + - '
    ' + - '
    ' + - '
    ' + - '' + - '
    ' + - '
    ' + - '
    ' + - (current - ? '
    ' + - '' + - '' + - '
    ' - : '
    No video
    ') + - '
    ' + - '
    ' + - '
    ' + - '' + - '' + - '
    ' + - '
    '; - } + var reduceAspectRatio = slideRegionHelpers.reduceAspectRatio; + var getCurrentTextStyle = slideRegionHelpers.getCurrentTextStyle; + var getRssFieldList = slideRegionHelpers.getRssFieldList; + var updateRssPlaceholderChips = slideRegionHelpers.updateRssPlaceholderChips; + var getCurrentRssConfig = slideRegionHelpers.getCurrentRssConfig; + var getApiFieldList = slideRegionHelpers.getApiFieldList; + var updateApiPlaceholderChips = slideRegionHelpers.updateApiPlaceholderChips; + var updateApiSampleDataPanel = slideRegionHelpers.updateApiSampleDataPanel; + var updateApiItemNumberLimit = slideRegionHelpers.updateApiItemNumberLimit; + var getCurrentApiConfig = slideRegionHelpers.getCurrentApiConfig; function renderTemplate() { templateSelectorLock.reset(); clearImagePreviewUrls(); - destroyEditors(); + slideFormEditorController.destroyEditors(); var template = getTemplateById(templateSelect.value); if (!template) { templateFields.innerHTML = ''; @@ -1974,28 +635,7 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo } templateFields.innerHTML = template.regions.length ? template.regions.map(function (region) { - if (region.region_type === 'image') { - return renderImageRegion(region); - } - if (region.region_type === 'video') { - return renderVideoRegion(region); - } - if (region.region_type === 'webpage') { - return renderWebpageRegion(region); - } - if (region.region_type === 'rtmp') { - return renderRtmpRegion(region); - } - if (region.region_type === 'rss') { - return renderRssRegion(region); - } - if (region.region_type === 'api') { - return renderApiRegion(region); - } - if (region.region_type === 'html') { - return renderHtmlRegion(region); - } - return renderTextRegion(region); + return getRegionEditorCardHtml(region) || '
    Region editor unavailable.
    '; }).join('') : '
    This template has no regions.
    '; templateFields.querySelectorAll('[data-region-media-type="video"]').forEach(function (card) { @@ -2006,259 +646,80 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo } }); - templateFields.querySelectorAll('.ckeditor-holder').forEach(function (holder) { - var regionId = holder.getAttribute('data-region-id'); - var source = holder.querySelector('.ckeditor-source'); - var hidden = getEditorHiddenInput(regionId); - var editorConfig = { - licenseKey: 'GPL', - placeholder: 'Write content...', - toolbar: { - items: [ - 'undo', - 'redo', - '|', - 'fontSizeInput', - 'fontFamily', - 'fontColor', - 'fontBackgroundColor', - '|', - 'bold', - 'italic', - 'underline', - 'strikethrough', - 'subscript', - 'superscript', - '|', - 'horizontalLine', - 'blockQuote', - '|', - 'alignment', - '|', - 'outdent', - 'indent' - ], - shouldNotGroupWhenFull: false - }, - plugins: [ - Alignment, - BlockQuote, - Bold, - Essentials, - ForcePlainTextPaste, - FontBackgroundColor, - FontColor, - FontFamily, - FontSize, - FontSizeInputUI, - HorizontalLine, - Indent, - IndentBlock, - Italic, - Paragraph, - Strikethrough, - Subscript, - Superscript, - Underline - ], - fontFamily: { - supportAllValues: true - }, - fontSize: { - options: [20, 24, 28, 32, 36, 40, 44], - supportAllValues: true - }, - initialData: normalizeEditorData((source && source.value) || (hidden ? hidden.value : '')) - }; - - ClassicEditor.create(source || holder, editorConfig).then(function (editor) { - editorInstances.set(regionId, editor); - var fontSizeCommand = editor.commands.get('fontSize'); - if (hidden) { - hidden.value = editor.getData(); - } - syncEditorFontSizeHidden(regionId, editor); - if (fontSizeCommand) { - fontSizeCommand.on('change:value', function () { - syncEditorFontSizeHidden(regionId, editor); - }); - } - editor.model.document.on('change:data', function () { - var instance = editorInstances.get(regionId); - if (instance !== editor) { - return; - } - if (hidden) { - hidden.value = editor.getData(); - } - templateSelectorLock.markEdited(); - requestPreviewRender(); - }); - requestPreviewRender(); - }).catch(function (error) { - console.error('Failed to initialize CKEditor.', error); - }); - }); - - templateFields.querySelectorAll('[data-toggle-editor-height]').forEach(function (button) { - button.addEventListener('click', function () { - var regionId = button.getAttribute('data-toggle-editor-height'); - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - if (!card) { - return; - } - - var expanded = card.classList.toggle('is-expanded'); - button.textContent = expanded ? 'Collapse' : 'Expand'; - }); - }); - - templateFields.querySelectorAll('input[type="file"][name^="region_image_"], input[type="file"][name^="region_video_"]').forEach(function (input) { - input.addEventListener('change', function () { - var mediaType = getRegionMediaTypeFromInput(input); - var regionId = input.name.replace(/^region_(?:image|video)_/, ''); - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - var hidden = card && card.querySelector('input[type="hidden"][name="' + getRegionExistingMediaPrefix(mediaType) + regionId + '"]'); - var file = input.files && input.files.length ? input.files[0] : null; - - if (file && !isRegionMediaFileWithinLimit(file, mediaType)) { - if (input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; - } - input.value = ''; - if (typeof window.showToast === 'function') { - window.showToast('File must be ' + getRegionMediaUploadLimitLabel(mediaType) + ' or smaller.', 'warning'); - } else { - window.alert('File must be ' + getRegionMediaUploadLimitLabel(mediaType) + ' or smaller.'); - } - renderRegionMediaPreview(card, hidden ? hidden.value : ''); - return; - } - - if (input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; - } - if (file) { - input.dataset.previewUrl = URL.createObjectURL(file); - } - renderRegionMediaPreview(card, input.dataset.previewUrl || (hidden ? hidden.value : '')); - void syncVideoRegionDuration(card, input.dataset.previewUrl || (hidden ? hidden.value : '')); - templateSelectorLock.markEdited(); - requestPreviewRender(); - if (file) { - uploadRegionMediaFile(input, file).catch(function (error) { - if (input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; - } - input.value = ''; - if (typeof showToast === 'function') { - showToast(error && error.message ? error.message : 'Unable to upload media.', 'danger'); - } else { - window.alert(error && error.message ? error.message : 'Unable to upload media.'); - } - renderRegionMediaPreview(card, hidden ? hidden.value : ''); - void syncVideoRegionDuration(card, hidden ? hidden.value : ''); - requestPreviewRender(); - }); - } - }); - }); - templateFields.querySelectorAll('[data-region-upload-zone]').forEach(function (zone) { - var regionId = zone.getAttribute('data-region-upload-zone'); - var input = zone.querySelector('input[type="file"]'); - if (!input) { - return; + slideFormEditorController.renderEditors(); + templateFields.querySelectorAll('input[name^="region_api_item_number_"]').forEach(function (input) { + var regionId = input.name.replace(/^region_api_item_number_/, ''); + var sourceInput = templateFields.querySelector('select[name="region_api_source_id_' + regionId + '"]'); + var pathInput = templateFields.querySelector('input[name="region_api_items_path_' + regionId + '"]'); + if (sourceInput) { + updateApiItemNumberLimit(regionId, sourceInput.value, pathInput ? pathInput.value : ''); } - - zone.addEventListener('dragover', function (event) { - event.preventDefault(); - zone.classList.add('is-dragover'); - }); - - zone.addEventListener('dragleave', function () { - zone.classList.remove('is-dragover'); - }); - - zone.addEventListener('drop', function (event) { - event.preventDefault(); - zone.classList.remove('is-dragover'); - - var files = event.dataTransfer && event.dataTransfer.files ? event.dataTransfer.files : null; - var file = files && files.length ? files[0] : null; - var card = zone.closest('[data-region-id]'); - var mediaType = getRegionMediaType(card); - if (!file || !(mediaType === 'video' ? /^video\//i.test(file.type || '') : /^image\//i.test(file.type || ''))) { - return; - } - - if (!isRegionMediaFileWithinLimit(file, mediaType)) { - rejectOversizeRegionMedia(input, file, mediaType); - return; - } - - setRegionMediaInputFile(input, file); - }); }); - templateFields.querySelectorAll('[data-remove-region-image], [data-remove-region-video]').forEach(function (button) { - button.addEventListener('click', function () { - var regionId = button.getAttribute('data-remove-region-image') || button.getAttribute('data-remove-region-video'); - var card = templateFields.querySelector('[data-region-id="' + regionId + '"]'); - var mediaType = getRegionMediaType(card); - var hidden = card && card.querySelector('input[type="hidden"][name="' + getRegionExistingMediaPrefix(mediaType) + regionId + '"]'); - var input = card && card.querySelector('input[type="file"][name="' + getRegionMediaPrefix(mediaType) + regionId + '"]'); - var uploadPath = input ? String(input.dataset.uploadedPath || '').trim() : ''; - if (input && input.dataset.previewUrl) { - URL.revokeObjectURL(input.dataset.previewUrl); - delete input.dataset.previewUrl; + if (typeof regionUtils.bindRegionMediaRemoveControls === 'function') { + regionUtils.bindRegionMediaRemoveControls(templateFields, { + getCardByRegionId: function (regionId) { + return templateFields.querySelector('[data-region-id="' + regionId + '"]'); + }, + getMediaType: function (card) { + return card && card.dataset && String(card.dataset.regionMediaType || '').trim() === 'video' ? 'video' : 'image'; + }, + getExistingMediaPrefix: function (mediaType) { + return String(mediaType || '').trim() === 'video' ? 'existing_region_video_' : 'existing_region_image_'; + }, + getMediaPrefix: function (mediaType) { + return String(mediaType || '').trim() === 'video' ? 'region_video_' : 'region_image_'; + }, + getVideoDurationHiddenInput: function (regionId) { + return getRegionVideoDurationHiddenInput(regionId); + }, + queueUploadCleanup: function (uploadPaths) { + if (regionMediaController) { + regionMediaController.queueUploadCleanup(uploadPaths); + } + }, + renderPreview: function (card, value) { + renderRegionMediaPreview(card, value); + }, + markEdited: function () { + templateSelectorLock.markEdited(); + }, + requestPreviewRender: function () { + requestPreviewRender(); } - if (input && input.dataset.uploadedNeedsCleanup === '1' && uploadPath) { - queueUploadCleanup([uploadPath]); - } - if (input) { - input.value = ''; - delete input.dataset.uploadedPath; - delete input.dataset.uploadedNeedsCleanup; - } - if (hidden) { - hidden.value = ''; - } - var durationHidden = card ? getRegionVideoDurationHiddenInput(regionId) : null; - if (durationHidden) { - durationHidden.value = ''; - } - - renderRegionMediaPreview(card, ''); - templateSelectorLock.markEdited(); - requestPreviewRender(); }); - }); - templateFields.querySelectorAll('select[name^="region_rss_feed_id_"], input[name^="region_rss_item_number_"], select[name^="region_api_source_id_"], input[name^="region_api_item_number_"]').forEach(function (input) { + } + templateFields.querySelectorAll('select[name^="region_rss_feed_id_"], input[name^="region_rss_item_number_"], select[name^="region_api_source_id_"], input[name^="region_api_item_number_"], input[name^="region_api_items_path_"]').forEach(function (input) { input.addEventListener('input', function () { - var regionId = input.name.replace(/^region_(?:rss_feed_id|rss_item_number|api_source_id|api_item_number)_/, ''); + var regionId = input.name.replace(/^region_(?:rss_feed_id|rss_item_number|api_source_id|api_item_number|api_items_path)_/, ''); if (input.name.indexOf('region_rss_') === 0) { var rssFeed = input.name.indexOf('region_rss_feed_id_') === 0 ? input.value : (templateFields.querySelector('select[name="region_rss_feed_id_' + regionId + '"]') || {}).value; updateRssPlaceholderChips(regionId, rssFeed); } if (input.name.indexOf('region_api_') === 0) { var apiSource = input.name.indexOf('region_api_source_id_') === 0 ? input.value : (templateFields.querySelector('select[name="region_api_source_id_' + regionId + '"]') || {}).value; - updateApiPlaceholderChips(regionId, apiSource); + var apiItemNumber = input.name.indexOf('region_api_item_number_') === 0 ? input.value : (templateFields.querySelector('input[name="region_api_item_number_' + regionId + '"]') || {}).value; + var apiItemsPath = input.name.indexOf('region_api_items_path_') === 0 ? input.value : (templateFields.querySelector('input[name="region_api_items_path_' + regionId + '"]') || {}).value; + updateApiItemNumberLimit(regionId, apiSource, apiItemsPath); + updateApiPlaceholderChips(regionId, apiSource, apiItemsPath); + updateApiSampleDataPanel(regionId, apiSource, apiItemNumber, apiItemsPath); } templateSelectorLock.markEdited(); requestPreviewRender(); }); input.addEventListener('change', function () { - var regionId = input.name.replace(/^region_(?:rss_feed_id|rss_item_number|api_source_id|api_item_number)_/, ''); + var regionId = input.name.replace(/^region_(?:rss_feed_id|rss_item_number|api_source_id|api_item_number|api_items_path)_/, ''); if (input.name.indexOf('region_rss_') === 0) { var rssFeed = input.name.indexOf('region_rss_feed_id_') === 0 ? input.value : (templateFields.querySelector('select[name="region_rss_feed_id_' + regionId + '"]') || {}).value; updateRssPlaceholderChips(regionId, rssFeed); } if (input.name.indexOf('region_api_') === 0) { var apiSource = input.name.indexOf('region_api_source_id_') === 0 ? input.value : (templateFields.querySelector('select[name="region_api_source_id_' + regionId + '"]') || {}).value; - updateApiPlaceholderChips(regionId, apiSource); + var apiItemNumber = input.name.indexOf('region_api_item_number_') === 0 ? input.value : (templateFields.querySelector('input[name="region_api_item_number_' + regionId + '"]') || {}).value; + var apiItemsPath = input.name.indexOf('region_api_items_path_') === 0 ? input.value : (templateFields.querySelector('input[name="region_api_items_path_' + regionId + '"]') || {}).value; + updateApiItemNumberLimit(regionId, apiSource, apiItemsPath); + updateApiPlaceholderChips(regionId, apiSource, apiItemsPath); + updateApiSampleDataPanel(regionId, apiSource, apiItemNumber, apiItemsPath); } templateSelectorLock.markEdited(); requestPreviewRender(); @@ -2288,23 +749,12 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo var submitterValue = event.submitter && event.submitter.name === 'save_action' ? String(event.submitter.value || '').trim().toLowerCase() : ''; - var saves = Array.prototype.map.call(templateFields.querySelectorAll('.ckeditor-holder'), function (holder) { - var regionId = holder.getAttribute('data-region-id'); - var editor = editorInstances.get(regionId); - var hidden = getEditorHiddenInput(regionId); - if (!editor || !hidden) { - return Promise.resolve(); - } - syncEditorFontSizeHidden(regionId, editor); - hidden.value = editor.getData(); - return Promise.resolve(); - }); submitting = true; try { if (hasPendingRegionImageUpload()) { throw new Error('Wait for the image upload to finish before saving.'); } - await Promise.all(saves); + await slideFormEditorController.syncEditors(); var formData = new FormData(slideForm); if (event.submitter && event.submitter.name) { formData.set(event.submitter.name, event.submitter.value || ''); @@ -2334,7 +784,9 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo if (isCreateForm) { try { if (response.url) { - clearPendingUploadCleanupPaths(); + if (regionMediaController) { + regionMediaController.clearPendingUploadCleanupPaths(); + } window.location.replace(response.url); return; } @@ -2360,7 +812,9 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo showToast(savedMessage || 'Saved slide.', 'success'); slideForm.dataset.dirty = 'false'; - clearPendingUploadCleanupPaths(); + if (regionMediaController) { + regionMediaController.clearPendingUploadCleanupPaths(); + } } catch (error) { if (typeof showToast === 'function') { var variant = Number(error && error.status) >= 400 && Number(error && error.status) < 500 ? 'warning' : 'danger'; @@ -2396,6 +850,27 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo templateSelectorLock.markEdited(); requestPreviewRender(); }); + templateFields.addEventListener('click', function (event) { + var button = event.target && typeof event.target.closest === 'function' ? event.target.closest('[data-api-items-path-reset]') : null; + if (!button) { + return; + } + + var card = button.closest('[data-region-id]'); + if (!card) { + return; + } + + var regionId = card.getAttribute('data-region-id'); + var input = card.querySelector('input[name="region_api_items_path_' + regionId + '"]'); + if (!input) { + return; + } + + input.value = String(button.dataset && Object.prototype.hasOwnProperty.call(button.dataset, 'apiDefaultItemsPath') ? button.dataset.apiDefaultItemsPath : ''); + input.dispatchEvent(new Event('input', { bubbles: true })); + input.dispatchEvent(new Event('change', { bubbles: true })); + }); if (existingTemplateId) { templateSelect.value = String(existingTemplateId); } @@ -2411,7 +886,9 @@ import { createTemplateSelectorLockController } from '/assets/js/slides/slide-fo window.addEventListener('resize', requestPreviewRender); window.addEventListener('resize', requestSidebarSync); window.addEventListener('beforeunload', function () { - queueUploadCleanup(getPendingUploadCleanupPaths()); + if (regionMediaController) { + regionMediaController.queueUploadCleanup(regionMediaController.getPendingUploadCleanupPaths()); + } if (previewPopupWindow && !previewPopupWindow.closed) { previewPopupWindow.close(); } diff --git a/src/web/public/js/slides/slide-image-cropper.js b/src/web/public/js/slides/slide-image-cropper.js index 8c1c41e..21cbed5 100644 --- a/src/web/public/js/slides/slide-image-cropper.js +++ b/src/web/public/js/slides/slide-image-cropper.js @@ -1,3 +1,5 @@ +// Slide image cropper modal wiring and file replacement helpers. + (function () { var templateFields = document.getElementById('template-fields'); var modal = document.getElementById('slide-image-cropper-modal'); diff --git a/src/web/public/js/table/table-search.js b/src/web/public/js/table/table-search.js index fd6fdb7..b19bd1d 100644 --- a/src/web/public/js/table/table-search.js +++ b/src/web/public/js/table/table-search.js @@ -15,6 +15,35 @@ if (typeof window.initLocalDateTimes === 'function') { window.initLocalDateTimes(container); } + + syncTablePaginationCards(container); + syncTablePaginationPageClass(); + } + + function syncTablePaginationCards(root) { + if (!root || !root.querySelectorAll) { + return; + } + + Array.prototype.forEach.call(root.querySelectorAll('[data-table-pagination-card]'), function (card) { + if (!card || !card.getBoundingClientRect) { + return; + } + + var cardRect = card.getBoundingClientRect(); + var bottomInset = 16; + var availableHeight = Math.max(0, window.innerHeight - cardRect.top - bottomInset); + card.style.removeProperty('--table-pagination-card-height'); + card.style.setProperty('--table-pagination-card-max-height', availableHeight + 'px'); + }); + } + + function syncTablePaginationPageClass() { + if (!document || !document.body || !document.body.classList) { + return; + } + + document.body.classList.toggle('table-pagination-page', !!document.querySelector('[data-table-pagination-card]')); } function focusSearchInput(input) { @@ -163,8 +192,21 @@ } }); }); + + syncTablePaginationCards(scope); + } + + if (window.addEventListener) { + window.addEventListener('resize', function () { + syncTablePaginationCards(document); + }); + window.addEventListener('orientationchange', function () { + syncTablePaginationCards(document); + }); } window.initTableSearches = initTableSearches; window.replaceTableResults = replaceTableResults; + syncTablePaginationCards(document); + syncTablePaginationPageClass(); }()); \ No newline at end of file diff --git a/src/web/public/js/table/table-sort.js b/src/web/public/js/table/table-sort.js index aa5196d..1ea06ec 100644 --- a/src/web/public/js/table/table-sort.js +++ b/src/web/public/js/table/table-sort.js @@ -1,3 +1,5 @@ +// Table sorting helpers for clickable list headers. + (function () { function getTableSortState(table) { if (!table._tableSortState) { diff --git a/src/web/public/js/templates/template-designer-utils.js b/src/web/public/js/templates/template-designer-utils.js index 60f44be..8457ae8 100644 --- a/src/web/public/js/templates/template-designer-utils.js +++ b/src/web/public/js/templates/template-designer-utils.js @@ -1,3 +1,5 @@ +// Shared template designer utility helpers. + (function () { function escapeHtml(value) { return String(value === undefined || value === null ? '' : value) @@ -43,8 +45,12 @@ } function getDefaultRegionSize(regionType, lockRatio) { + if (window.pulseRegionTypes && typeof window.pulseRegionTypes.getDefaultRegionSize === 'function') { + return window.pulseRegionTypes.getDefaultRegionSize(regionType, lockRatio); + } + var ratio = parseLockRatio(lockRatio); - var locked = regionType === 'image' || regionType === 'video' || regionType === 'webpage' || regionType === 'html' || regionType === 'rtmp' || regionType === 'rss' || regionType === 'api'; + var locked = false; if (ratio) { if (ratio.ratio >= 1) { @@ -89,7 +95,6 @@ region_key: name, label: name, region_type: card.querySelector('[name="region_type[]"]').value, - font_family: card.querySelector('[name="font_family[]"]').value, lock_ratio: normalizeLockRatio(card.querySelector('[name="region_lock_ratio[]"]').value), x: Number(card.querySelector('[name="region_x[]"]').value || 0), y: Number(card.querySelector('[name="region_y[]"]').value || 0), @@ -108,7 +113,6 @@ syncRegionIdentity(card, values.label); } if (values.region_type !== undefined) { card.querySelector('[name="region_type[]"]').value = values.region_type; } - if (values.font_family !== undefined) { card.querySelector('[name="font_family[]"]').value = values.font_family; } if (values.lock_ratio !== undefined) { card.querySelector('[name="region_lock_ratio[]"]').value = normalizeLockRatio(values.lock_ratio); } if (values.x !== undefined) { card.querySelector('[name="region_x[]"]').value = Math.round(values.x); } if (values.y !== undefined) { card.querySelector('[name="region_y[]"]').value = Math.round(values.y); } diff --git a/src/web/public/js/templates/template-designer.js b/src/web/public/js/templates/template-designer.js index d957243..164ed23 100644 --- a/src/web/public/js/templates/template-designer.js +++ b/src/web/public/js/templates/template-designer.js @@ -1,3 +1,5 @@ +// Template designer bootstrap and form wiring. + (function () { var dataElement = document.getElementById('template-editor-data'); if (!dataElement) { @@ -33,6 +35,7 @@ var removeBackgroundFlag = document.getElementById('remove-background-image-flag'); var addRegionButton = document.getElementById('add-region-button'); var regionAddModal = document.getElementById('region-add-modal'); + var regionAddOptions = document.getElementById('region-add-options'); var regionCardTemplate = document.getElementById('region-card-template'); var regionsJsonInput = document.getElementById('regions-json'); var templateForm = document.getElementById('template-form'); @@ -101,7 +104,7 @@ return utils.getDefaultRegionSize(regionType, lockRatio); } var ratio = parseLockRatio(lockRatio); - var locked = regionType === 'image' || regionType === 'webpage' || regionType === 'html' || regionType === 'rtmp' || regionType === 'rss'; + var locked = false; if (ratio) { if (ratio.ratio >= 1) { var baseWidth = locked ? 420 : 300; @@ -113,6 +116,41 @@ return { width: locked ? 420 : 300, height: locked ? 240 : 120 }; } + function getRegionTypeEntries() { + if (window.pulseRegionTypes && typeof window.pulseRegionTypes.list === 'function') { + return window.pulseRegionTypes.list(); + } + + return ['api', 'html', 'image', 'rss', 'rtmp', 'text', 'time-date', 'video', 'webpage'].map(function (type) { + return { type: type, definition: window.pulseRegionTypes && typeof window.pulseRegionTypes.get === 'function' ? window.pulseRegionTypes.get(type) || {} : {} }; + }); + } + + function formatRegionTypeLabel(regionType) { + return String(regionType || '') + .trim() + .replace(/(^|[_-])(\w)/g, function (_match, _prefix, letter) { + return String(letter || '').toUpperCase(); + }) || 'Region'; + } + + function renderAddRegionOptions() { + if (!regionAddOptions) { + return; + } + + regionAddOptions.innerHTML = getRegionTypeEntries().map(function (entry) { + var type = String(entry && entry.type ? entry.type : '').trim(); + if (!type) { + return ''; + } + + var definition = entry.definition || {}; + var label = definition.label || formatRegionTypeLabel(type); + return ''; + }).join(''); + } + function getCards() { return Array.prototype.slice.call(regionList.querySelectorAll('.region-item')); } @@ -179,7 +217,6 @@ region_key: getRegionName(card), label: getRegionName(card), region_type: card.querySelector('[name="region_type[]"]').value, - font_family: card.querySelector('[name="font_family[]"]').value, lock_ratio: normalizeLockRatio(card.querySelector('[name="region_lock_ratio[]"]').value), x: Number(card.querySelector('[name="region_x[]"]').value || 0), y: Number(card.querySelector('[name="region_y[]"]').value || 0), @@ -202,7 +239,6 @@ syncRegionIdentity(card, values.label); } if (values.region_type !== undefined) { card.querySelector('[name="region_type[]"]').value = values.region_type; } - if (values.font_family !== undefined) { card.querySelector('[name="font_family[]"]').value = values.font_family; } if (values.lock_ratio !== undefined) { card.querySelector('[name="region_lock_ratio[]"]').value = normalizeLockRatio(values.lock_ratio); } if (values.x !== undefined) { card.querySelector('[name="region_x[]"]').value = Math.round(values.x); } if (values.y !== undefined) { card.querySelector('[name="region_y[]"]').value = Math.round(values.y); } @@ -328,6 +364,10 @@ } function getRegionChipLabel(regionType) { + if (window.pulseRegionTypes && typeof window.pulseRegionTypes.getRegionChipLabel === 'function') { + return window.pulseRegionTypes.getRegionChipLabel(regionType); + } + return regionType === 'image' ? 'Image' : regionType === 'video' ? 'Video' : regionType === 'webpage' ? 'Webpage' : regionType === 'html' ? 'HTML' : regionType === 'rtmp' ? 'RTMP' : regionType === 'rss' ? 'RSS' : 'Text'; } @@ -335,7 +375,6 @@ var chip = card.querySelector('[data-region-chip]'); var title = card.querySelector('[data-region-title]'); var nameInput = card.querySelector('[name="region_name[]"]'); - var fontFamilyInput = card.querySelector('[name="font_family[]"]'); var regionTypeInput = card.querySelector('[name="region_type[]"]'); var regionKeyInput = card.querySelector('[name="region_key[]"]'); var regionLabelInput = card.querySelector('[name="region_label[]"]'); @@ -349,9 +388,6 @@ if (nameInput) { nameInput.value = region.region_key || region.label || ''; } - if (fontFamilyInput) { - fontFamilyInput.value = region.region_type === 'image' || region.region_type === 'video' || region.region_type === 'rtmp' ? '' : (region.font_family || 'Arial'); - } if (regionTypeInput) { regionTypeInput.value = region.region_type || 'text'; } @@ -577,7 +613,6 @@ region_key: name, label: name, region_type: type, - font_family: type === 'text' || type === 'html' || type === 'rss' || type === 'api' ? 'Arial' : '', x: 80, y: 80, width: size.width, @@ -753,19 +788,26 @@ } if (addRegionButton && regionAddModal) { - var addRegionTypeButtons = regionAddModal.querySelectorAll('[data-add-region-type]'); addRegionButton.addEventListener('click', function () { + renderAddRegionOptions(); openAddRegionModal(); }); - Array.prototype.forEach.call(addRegionTypeButtons, function (button) { - button.addEventListener('click', function () { + if (regionAddOptions) { + regionAddOptions.addEventListener('click', function (event) { + var button = event.target && event.target.closest ? event.target.closest('[data-add-region-type]') : null; + if (!button) { + return; + } + var regionType = button.getAttribute('data-add-region-type'); addRegion(createDefaultRegion(regionType)); if (window.pulseModal) { window.pulseModal.hide(regionAddModal); } }); - }); + } + + renderAddRegionOptions(); } backgroundInput.addEventListener('change', function () { var file = backgroundInput.files && backgroundInput.files[0]; diff --git a/src/web/public/js/theme-init.js b/src/web/public/js/theme-init.js index ec163ed..371fe67 100644 --- a/src/web/public/js/theme-init.js +++ b/src/web/public/js/theme-init.js @@ -1,7 +1,8 @@ +// Theme bootstrap script that applies the saved or preferred color scheme. + (function () { var storageKey = 'lte-theme'; var theme = 'auto'; - var ckeditorThemeStyleId = 'ckeditor-dark-theme-overrides'; function getPreferredTheme() { if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { @@ -11,57 +12,6 @@ return 'light'; } - function getOrCreateCkeditorThemeStyleElement() { - var styleElement = document.getElementById(ckeditorThemeStyleId); - - if (styleElement) { - return styleElement; - } - - styleElement = document.createElement('style'); - styleElement.id = ckeditorThemeStyleId; - document.head.appendChild(styleElement); - - return styleElement; - } - - function syncCkeditorTheme(currentTheme) { - var styleElement = getOrCreateCkeditorThemeStyleElement(); - - if (currentTheme !== 'dark') { - styleElement.textContent = ''; - return; - } - - styleElement.textContent = [ - '.ck.ck-dropdown__panel,', - '.ck.ck-list__panel,', - '.ck.ck-list,', - '.ck.ck-balloon-panel {', - ' background: var(--bs-body-bg) !important;', - ' background-color: var(--bs-body-bg) !important;', - ' border-color: var(--bs-border-color) !important;', - ' color: var(--bs-body-color) !important;', - '}', - '.ck.ck-list .ck-list-item-button {', - ' background: transparent !important;', - ' background-color: transparent !important;', - ' color: var(--bs-body-color) !important;', - '}', - '.ck.ck-list .ck-list-item-button:hover {', - ' background: var(--bs-secondary-bg) !important;', - ' background-color: var(--bs-secondary-bg) !important;', - '}', - '.ck.ck-color-grid,', - '.ck.ck-color-grid__tile {', - ' color: var(--bs-body-color) !important;', - '}', - '.ck.ck-color-grid__tile {', - ' border-color: var(--bs-border-color) !important;', - '}' - ].join('\n'); - } - try { var storedTheme = window.localStorage.getItem(storageKey); if (storedTheme === 'dark' || storedTheme === 'light' || storedTheme === 'auto') { @@ -73,5 +23,4 @@ document.documentElement.dataset.bsTheme = theme; document.documentElement.style.colorScheme = theme; - syncCkeditorTheme(theme === 'auto' ? getPreferredTheme() : theme); }()); \ No newline at end of file diff --git a/src/web/public/js/toast.js b/src/web/public/js/toast.js index c81645f..487dd0c 100644 --- a/src/web/public/js/toast.js +++ b/src/web/public/js/toast.js @@ -1,4 +1,4 @@ -(function () { + (function (root) { function getToastTitle(variant) { var textVariant = String(variant || '').trim().toLowerCase(); if (textVariant === 'danger') { @@ -141,12 +141,17 @@ function getMessageVariant(message, fallbackVariant) { var text = String(message || '').trim(); - if (/\b(?:unable to|cannot|can't|could not|failed to)\s+delete\b/i.test(text) || /\bdelete\b.*\b(?:before|first)\b/i.test(text) || /\bstill (?:in use|linked|assigned|used)\b/i.test(text)) { - return 'danger'; - } - if (/\b(?:already exists|already exist|already taken|duplicate|must be unique|name already exists)\b/i.test(text)) { - return 'warning'; + var rules = [ + { variant: 'danger', patterns: [/\b(?:unable to|cannot|can't|could not|failed to)\s+delete\b/i, /\bdelete\b.*\b(?:before|first)\b/i, /\bstill (?:in use|linked|assigned|used)\b/i] }, + { variant: 'warning', patterns: [/\b(?:already exists|already exist|already taken|duplicate|must be unique|name already exists)\b/i] } + ]; + + for (var i = 0; i < rules.length; i += 1) { + if (rules[i].patterns.some(function (pattern) { return pattern.test(text); })) { + return rules[i].variant; + } } + return String(fallbackVariant || 'info').trim().toLowerCase() || 'info'; } @@ -230,9 +235,18 @@ } } - window.dismissToast = dismissToast; - window.showToast = showToast; - window.initToast = initToast; + root.dismissToast = dismissToast; + root.showToast = showToast; + root.initToast = initToast; + root.getMessageVariant = getMessageVariant; - initToast(); -}()); \ No newline at end of file + if (typeof module !== 'undefined' && module.exports) { + module.exports = { + getMessageVariant: getMessageVariant + }; + } + + if (root.document) { + initToast(); + } +}(typeof window !== 'undefined' ? window : globalThis)); \ No newline at end of file diff --git a/src/web/public/js/vendor/ckeditor5/LICENSE-ckeditor5.md b/src/web/public/js/vendor/ckeditor5/LICENSE-ckeditor5.md deleted file mode 100644 index 6c4174f..0000000 --- a/src/web/public/js/vendor/ckeditor5/LICENSE-ckeditor5.md +++ /dev/null @@ -1,55 +0,0 @@ -Software License Agreement -========================== - -**CKEditor 5** (https://github.com/ckeditor/ckeditor5)
    -Copyright (c) 2003–2026, [CKSource Holding sp. z o.o.](https://cksource.com) All rights reserved. - -Licensed under a dual-license model, this software is available under: - -* the [GNU General Public License Version 2 or later](https://www.gnu.org/licenses/gpl.html) (see COPYING.GPL), -* or commercial license terms from CKSource Holding sp. z o.o. - -For more information, see: [https://ckeditor.com/legal/ckeditor-licensing-options](https://ckeditor.com/legal/ckeditor-licensing-options). - -If you are using CKEditor under commercial terms, you are free to remove the COPYING.GPL file with the full copy of a GPL license. - -Sources of Intellectual Property Included in CKEditor 5 ------------------------------------------------------------- - -Where not otherwise indicated, all CKEditor 5 content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor 5 will incorporate work done by developers outside of CKSource with their express permission. - -The following libraries are included in CKEditor 5 under the [ISC license](https://opensource.org/licenses/ISC): - -* hast-util-from-dom - Copyright (c) Keith McKnight . -* rehype-dom-parse - Copyright (c) 2018 Keith McKnight . -* rehype-dom-stringify - Copyright (c) 2018 Keith McKnight . - -The following libraries are included in CKEditor 5 under the [MIT license](https://opensource.org/licenses/MIT): - -* @types/color-convert - Copyright (c) Microsoft Corporation. -* @types/hast - Copyright (c) Microsoft Corporation. -* blurhash - Copyright (c) 2018 Wolt Enterprises. -* color-convert - Copyright (c) 2011-2016 Heather Arthur and Copyright (c) 2016-2021 Josh Junon . -* color-parse - Copyright (c) 2015 Dmitry Ivanov. -* emojibase-data - Copyright (c) 2017-2019 Miles Johnson. -* es-toolkit - Copyright (c) 2024 Viva Republica, Inc and Copyright OpenJS Foundation and other contributors. -* fuzzysort - Copyright (c) 2018 Stephen Kamenar. -* hast-util-to-html - Copyright (c) Titus Wormer . -* hast-util-to-mdast - Copyright (c) Titus Wormer and Copyright (c) Seth Vincent . -* hastscript - Copyright (c) Titus Wormer . -* is-emoji-supported - Copyright (c) 2016-2020 Koala Interactive, Inc. -* Regular expression for URL validation - Copyright (c) 2010-2018 Diego Perini. -* rehype-remark - Copyright (c) Titus Wormer . -* remark-breaks - Copyright (c) 2017 Titus Wormer . -* remark-gfm - Copyright (c) Titus Wormer . -* remark-parse - Copyright (c) 2014 Titus Wormer . -* remark-rehype - Copyright (c) Titus Wormer . -* remark-stringify - Copyright (c) 2014 Titus Wormer . -* unified - Copyright (c) 2015 Titus Wormer . -* unist-util-visit - Copyright (c) 2015 Titus Wormer . -* vanilla-colorful - Copyright (c) 2020 Serhii Kulykov . - -Trademarks ----------- - -**CKEditor** is a trademark of [CKSource Holding sp. z o.o.](https://cksource.com) All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/src/web/public/js/vendor/ckeditor5/ckeditor5-content.css b/src/web/public/js/vendor/ckeditor5/ckeditor5-content.css deleted file mode 100644 index 7bfeb85..0000000 --- a/src/web/public/js/vendor/ckeditor5/ckeditor5-content.css +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options - */ -.ck-content code{background-color:#c7c7c74d;border-radius:2px;padding:.15em}.ck-content blockquote{border-left:5px solid #ccc;font-style:italic;margin-left:0;margin-right:0;overflow:hidden;padding-left:1.5em;padding-right:1.5em}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}.ck-content pre{background:#c7c7c74d;border:1px solid #c4c4c4;border-radius:2px;color:#353535;direction:ltr;font-style:normal;margin:.9em 0;min-width:200px;padding:1em;tab-size:4;text-align:left;white-space:pre-wrap}.ck-content pre code{background:unset;border-radius:0;padding:0}:root{--ck-content-font-family:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-content-font-size:medium;--ck-content-font-color:#000;--ck-content-line-height:1.5;--ck-content-word-break:normal;--ck-content-overflow-wrap:break-word}.ck-content{color:var(--ck-content-font-color);font-family:var(--ck-content-font-family);font-size:var(--ck-content-font-size);line-height:var(--ck-content-line-height);overflow-wrap:var(--ck-content-overflow-wrap);word-break:var(--ck-content-word-break)}:root{--ck-content-font-size-tiny:.7em;--ck-content-font-size-small:.85em;--ck-content-font-size-big:1.4em;--ck-content-font-size-huge:1.8em}.ck-content .text-tiny{font-size:var(--ck-content-font-size-tiny)}.ck-content .text-small{font-size:var(--ck-content-font-size-small)}.ck-content .text-big{font-size:var(--ck-content-font-size-big)}.ck-content .text-huge{font-size:var(--ck-content-font-size-huge)}:root{--ck-content-highlight-marker-yellow:#fdfd77;--ck-content-highlight-marker-green:#62f962;--ck-content-highlight-marker-pink:#fc7899;--ck-content-highlight-marker-blue:#72ccfd;--ck-content-highlight-pen-red:#e71313;--ck-content-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-content-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-content-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-content-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-content-highlight-marker-blue)}.ck-content .pen-red{background-color:#0000;color:var(--ck-content-highlight-pen-red)}.ck-content .pen-green{background-color:#0000;color:var(--ck-content-highlight-pen-green)}.ck-content hr{background:#dedede;border:0;display:inline-block;height:4px;margin:15px 0;vertical-align:middle;width:100%}:root{--ck-content-color-image-caption-background:#f7f7f7;--ck-content-color-image-caption-text:#333}.ck-content .image>figcaption{background-color:var(--ck-content-color-image-caption-background);break-before:avoid;caption-side:bottom;color:var(--ck-content-color-image-caption-text);display:table-caption;font-size:.75em;outline-offset:-1px;overflow-wrap:anywhere;padding:.6em;word-break:normal}@media (forced-colors:active){.ck-content .image>figcaption{background-color:unset;color:unset}}.ck-content img.image_resized{height:auto}.ck-content .image.image_resized{box-sizing:border-box;display:block;max-width:100%}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}:root{--ck-content-image-style-spacing:1.5em;--ck-content-inline-image-style-spacing:calc(var(--ck-content-image-style-spacing)/2)}.ck-content .image.image-style-block-align-left,.ck-content .image.image-style-block-align-right{max-width:calc(100% - var(--ck-content-image-style-spacing))}.ck-content .image.image-style-align-left,.ck-content .image.image-style-align-right{clear:none}.ck-content .image.image-style-side{float:right;margin-left:var(--ck-content-image-style-spacing);max-width:50%}.ck-content .image.image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-block-align-right{margin-left:auto;margin-right:0}.ck-content .image.image-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content p+.image.image-style-align-left,.ck-content p+.image.image-style-align-right,.ck-content p+.image.image-style-side{margin-top:0}.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right{margin-bottom:var(--ck-content-inline-image-style-spacing);margin-top:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-left{margin-right:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-right{margin-left:var(--ck-content-inline-image-style-spacing)}.ck-content .image{clear:both;display:table;margin:.9em auto;min-width:50px;text-align:center}.ck-content .image img{display:block;height:auto;margin:0 auto;max-width:100%;min-width:100%}.ck-content .image-inline{align-items:flex-start;display:inline-flex;max-width:100%}.ck-content .image-inline picture{display:flex}.ck-content .image-inline img,.ck-content .image-inline picture{flex-grow:1;flex-shrink:1;max-width:100%}:root{--ck-content-list-marker-color:var(--ck-content-font-color);--ck-content-list-marker-font-family:var(--ck-content-font-family);--ck-content-list-marker-font-size:var(--ck-content-font-size)}.ck-content li>p:first-of-type{margin-top:0}.ck-content li>p:only-of-type{margin-bottom:0;margin-top:0}.ck-content li.ck-list-marker-bold::marker{font-weight:700}.ck-content li.ck-list-marker-italic::marker{font-style:italic}.ck-content li.ck-list-marker-color::marker{color:var(--ck-content-list-marker-color)}.ck-content li.ck-list-marker-font-family::marker{font-family:var(--ck-content-list-marker-font-family)}.ck-content li.ck-list-marker-font-size::marker{font-size:var(--ck-content-list-marker-font-size)}.ck-content li.ck-list-marker-font-size-tiny::marker{font-size:var(--ck-content-font-size-tiny)}.ck-content li.ck-list-marker-font-size-small::marker{font-size:var(--ck-content-font-size-small)}.ck-content li.ck-list-marker-font-size-big::marker{font-size:var(--ck-content-font-size-big)}.ck-content li.ck-list-marker-font-size-huge::marker{font-size:var(--ck-content-font-size-huge)}.ck-content ol{list-style-type:decimal}.ck-content ol ol{list-style-type:lower-latin}.ck-content ol ol ol{list-style-type:lower-roman}.ck-content ol ol ol ol{list-style-type:upper-latin}.ck-content ol ol ol ol ol{list-style-type:upper-roman}.ck-content ul{list-style-type:disc}.ck-content ul ul{list-style-type:circle}.ck-content ul ul ul,.ck-content ul ul ul ul{list-style-type:square}:root{--ck-content-todo-list-checkmark-size:16px}.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{-webkit-appearance:none;border:0;display:inline-block;height:var(--ck-content-todo-list-checkmark-size);left:-25px;margin-left:0;margin-right:-15px;position:relative;right:0;vertical-align:middle;width:var(--ck-content-todo-list-checkmark-size)}[dir=rtl]:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input){left:0;margin-left:-15px;margin-right:0;right:-25px}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{border:1px solid #333;border-radius:2px;box-sizing:border-box;content:"";display:block;height:100%;position:absolute;transition:box-shadow .25s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{transition:none}}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):after{border-color:#0000;border-style:solid;border-width:0 calc(var(--ck-content-todo-list-checkmark-size)/8) calc(var(--ck-content-todo-list-checkmark-size)/8) 0;box-sizing:content-box;content:"";display:block;height:calc(var(--ck-content-todo-list-checkmark-size)/2.6);left:calc(var(--ck-content-todo-list-checkmark-size)/3);pointer-events:none;position:absolute;top:calc(var(--ck-content-todo-list-checkmark-size)/5.3);transform:rotate(45deg);width:calc(var(--ck-content-todo-list-checkmark-size)/5.3)}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:before{background:#26ab33;border-color:#26ab33}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:after{border-color:#fff}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px;position:relative}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{cursor:pointer}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):hover:before{box-shadow:0 0 0 5px #0000001a}.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-content .media{clear:both;display:block;margin:.9em auto;min-width:15em}.ck-content .media:has(>div[data-oembed-url*="open.spotify.com"]){min-width:286px;width:300px}.ck-content .media.media_resized{box-sizing:border-box;display:block;max-width:100%}.ck-content .media.media_resized>div[data-oembed-url]{width:100%}:root{--ck-content-media-style-spacing:1.5em}.ck-content .media.media-style-align-left,.ck-content .media.media-style-align-right{clear:none;width:100%}.ck-content .media.media-style-align-left{float:left;margin-right:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-align-right{float:right;margin-left:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .media.media-style-block-align-right{margin-left:auto;margin-right:0}:root{--ck-content-color-mention-background:#9900301a;--ck-content-color-mention-text:#990030}.ck-content .mention{background:var(--ck-content-color-mention-background);color:var(--ck-content-color-mention-text)}.ck-content .page-break{align-items:center;clear:both;display:flex;justify-content:center;padding:5px 0;position:relative}.ck-content .page-break:after{border-bottom:2px dashed #c4c4c4;content:"";position:absolute;width:100%}.ck-content .page-break__label{background:#fff;border:1px solid #c4c4c4;border-radius:2px;box-shadow:2px 2px 1px #00000026;color:#333;display:block;font-size:.75em;font-weight:700;padding:.3em .6em;position:relative;text-transform:uppercase;-webkit-user-select:none;user-select:none;z-index:1}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}.ck-content :has(+.page-break){margin-bottom:0}}.ck-content .table th{text-align:start}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}.ck-content figure.table:not(.layout-table){display:table}.ck-content figure.table:not(.layout-table)>table{height:100%;width:100%}.ck-content .table:not(.layout-table){margin:.9em auto}.ck-content figure.table:not(.layout-table)>table,.ck-content table.table:not(.layout-table){border:1px double #b3b3b3;border-collapse:collapse;border-spacing:0}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{background:#0000000d;font-weight:700}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:first-of-type{margin-top:0}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:last-of-type{margin-bottom:0}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{border:1px solid #bfbfbf;min-width:2em;padding:.4em}@media print{.ck-content figure.table:not(.layout-table){height:fit-content;width:fit-content}.ck-content figure.table:not(.layout-table)>table{height:auto}}.ck-content figure.table.layout-table,.ck-content table.table.layout-table{margin-bottom:0;margin-top:0}.ck-content figure.table.layout-table>table,.ck-content table.table.layout-table{border-spacing:0}:root{--ck-content-table-style-spacing:1.5em}.ck-content .table.table-style-align-left{float:left;margin-right:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-right{float:right;margin-left:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-content .table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .table.table-style-block-align-right{margin-left:auto;margin-right:0}:root{--ck-content-color-table-caption-background:#f7f7f7;--ck-content-color-table-caption-text:#333}.ck-content .table>figcaption,.ck-content figure.table>table>caption{background-color:var(--ck-content-color-table-caption-background);caption-side:top;color:var(--ck-content-color-table-caption-text);display:table-caption;font-size:.75em;outline-offset:-1px;overflow-wrap:anywhere;padding:.6em;text-align:center;word-break:normal}@media (forced-colors:active){.ck-content .table>figcaption,.ck-content figure.table>table>caption{background-color:unset;color:unset}}.ck-content .table .ck-table-resized{table-layout:fixed}.ck-content .table td,.ck-content .table th{overflow-wrap:break-word} \ No newline at end of file diff --git a/src/web/public/js/vendor/ckeditor5/ckeditor5-editor.css b/src/web/public/js/vendor/ckeditor5/ckeditor5-editor.css deleted file mode 100644 index becf4e7..0000000 --- a/src/web/public/js/vendor/ckeditor5/ckeditor5-editor.css +++ /dev/null @@ -1,5 +0,0 @@ -/** - * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options - */ -:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218,81.8%,56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:#77baf84d;--ck-color-focus-error-shadow:#ff401f4d;--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:#00000026;--ck-color-shadow-drop-active:#0003;--ck-color-shadow-inner:#0000001a;--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:#0000001a;--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-dialog-background:var(--ck-custom-background);--ck-color-dialog-form-header-border:var(--ck-custom-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:#1fb0ff1a;--ck-color-link-fake-selection:#1fb0ff4d;--ck-color-highlight-background:#ff0;--ck-color-light-red:#fcc;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-font-size-tiny:.7em;--ck-font-size-small:.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *),.ck.ck-reset,.ck.ck-reset_all{box-sizing:border-box;vertical-align:middle;word-wrap:break-word;background:0 0;border:0;height:auto;margin:0;padding:0;position:static;text-decoration:none;transition:none;width:auto}.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *),.ck.ck-reset_all{border-collapse:collapse;color:var(--ck-color-text);cursor:auto;float:none;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);text-align:left;white-space:nowrap}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all textarea:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-rounded-corners-radius:0}.ck-rounded-corners{--ck-rounded-corners-radius:var(--ck-border-radius)}:root{--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:.6em;--ck-spacing-extra-large:calc(var(--ck-spacing-unit)*2);--ck-spacing-large:calc(var(--ck-spacing-unit)*1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit)*0.8);--ck-spacing-medium-small:calc(var(--ck-spacing-unit)*0.667);--ck-spacing-small:calc(var(--ck-spacing-unit)*0.5);--ck-spacing-tiny:calc(var(--ck-spacing-unit)*0.3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit)*0.16)}.ck-hidden{display:none!important}:root{--ck-z-default:1;--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:9999}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-font-size:calc(var(--ck-font-size-base)*7.5/13);--ck-powered-by-line-height:calc(var(--ck-font-size-base)*10/13);--ck-powered-by-letter-spacing:calc(var(--ck-font-size-base)*-0.2/13);--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border);--ck-powered-by-svg-width:53;--ck-powered-by-svg-height:10;--ck-powered-by-icon-width:calc(var(--ck-font-size-base)*var(--ck-powered-by-svg-width)/13);--ck-powered-by-icon-height:calc(var(--ck-font-size-base)*var(--ck-powered-by-svg-height)/13)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);background:var(--ck-powered-by-background);box-shadow:none;min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{align-items:center;cursor:pointer;display:flex;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);opacity:.66;padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{color:var(--ck-powered-by-text-color);cursor:pointer;font-size:var(--ck-powered-by-font-size);font-weight:700;letter-spacing:var(--ck-powered-by-letter-spacing);line-height:normal;margin-right:4px;padding-left:2px;text-transform:uppercase}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;display:block;height:var(--ck-powered-by-icon-height);width:var(--ck-powered-by-icon-width)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-evaluation-badge-font-size:calc(var(--ck-font-size-base)*7.5/13);--ck-evaluation-badge-line-height:calc(var(--ck-font-size-base)*7.5/13);--ck-evaluation-badge-letter-spacing:calc(var(--ck-font-size-base)*-0.2/13);--ck-evaluation-badge-padding-vertical:2px;--ck-evaluation-badge-padding-horizontal:4px;--ck-evaluation-badge-text-color:#4f4f4f;--ck-evaluation-badge-border-radius:var(--ck-border-radius);--ck-evaluation-badge-background:#fff;--ck-evaluation-badge-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon{--ck-border-radius:var(--ck-evaluation-badge-border-radius);background:var(--ck-evaluation-badge-background);box-shadow:none;min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge{line-height:var(--ck-evaluation-badge-line-height);padding:var(--ck-evaluation-badge-padding-vertical) var(--ck-evaluation-badge-padding-horizontal)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge .ck-evaluation-badge__label{color:var(--ck-evaluation-badge-text-color);display:block;font-size:var(--ck-evaluation-badge-font-size);font-weight:700;letter-spacing:var(--ck-evaluation-badge-letter-spacing);line-height:normal;padding:0 2px;text-transform:uppercase}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-evaluation-badge-border-color)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (width<=600px){.ck.ck-responsive-form{padding:0;width:calc(var(--ck-input-width)*.8)}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-number,.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text{min-width:0;width:100%}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){border-radius:0;margin-top:var(--ck-spacing-large);padding:var(--ck-spacing-standard)}:is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:after{bottom:-1px;content:"";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck.ck-responsive-form .ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:focus:after{display:none}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck-vertical-form .ck-button:after{bottom:-1px;content:"";position:absolute;right:-1px;top:-1px;width:0;z-index:1}.ck-vertical-form .ck-button:focus:after{display:none}:root{--ck-form-default-width:340px}.ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form.ck-form_default-width{width:var(--ck-form-default-width)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-number,.ck.ck-form .ck.ck-input-text{min-width:100%;width:0}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit{align-items:stretch;flex-direction:column;padding:0}.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit>.ck{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit .ck-button_with-text{justify-content:center}.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}}[dir=ltr] .ck.ck-form.ck-responsive-form>:not(:first-child),[dir=rtl] .ck.ck-form.ck-responsive-form>:not(:last-child){margin-left:0}.ck.ck-aria-live-announcer{left:-10000px;position:absolute;top:-10000px}.ck.ck-aria-live-region-list{list-style-type:none}:root{--ck-accessibility-help-dialog-max-width:600px;--ck-accessibility-help-dialog-max-height:400px;--ck-accessibility-help-dialog-border-color:#ccced1;--ck-accessibility-help-dialog-code-background-color:#ededed;--ck-accessibility-help-dialog-kbd-shadow-color:#9c9c9c}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content{border:1px solid #0000;max-height:var(--ck-accessibility-help-dialog-max-height);max-width:var(--ck-accessibility-help-dialog-max-width);overflow:auto;padding:var(--ck-spacing-large);user-select:text}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content *{white-space:normal}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content .ck-label{display:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3{font-size:1.2em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4{font-size:1em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content p,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content table{margin:1em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl{border-bottom:none;border-top:1px solid var(--ck-accessibility-help-dialog-border-color);display:grid;grid-template-columns:2fr 1fr}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt{border-bottom:1px solid var(--ck-accessibility-help-dialog-border-color);padding:.4em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt{grid-column-start:1}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd{grid-column-start:2;text-align:right}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd{background:var(--ck-accessibility-help-dialog-code-background-color);border-radius:2px;display:inline-block;font-size:.9em;line-height:1;padding:.4em;text-align:center;vertical-align:middle}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code{font-family:monospace}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd{box-shadow:0 1px 1px var(--ck-accessibility-help-dialog-kbd-shadow-color);margin:0 1px;min-width:1.8em}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd+kbd{margin-left:2px}.ck.ck-button,:where(a).ck.ck-button{--ck-button-background:var(--ck-color-button-default-background);--ck-button-hover-background:var(--ck-color-button-default-hover-background);--ck-button-active-background:var(--ck-color-button-default-active-background);--ck-button-disabled-background:var(--ck-color-button-default-disabled-background);background:var(--ck-button-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):hover{background:var(--ck-button-hover-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):active{background:var(--ck-button-active-background)}.ck.ck-button,:where(a).ck.ck-button{align-items:center;-webkit-appearance:none;border:1px solid #0000;border-radius:var(--ck-rounded-corners-radius);cursor:default;display:inline-flex;font-size:inherit;line-height:1;min-height:var(--ck-ui-component-min-height);min-width:var(--ck-ui-component-min-height);padding:var(--ck-spacing-tiny);position:relative;text-align:center;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;-webkit-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}@media (prefers-reduced-motion:reduce){.ck.ck-button,:where(a).ck.ck-button{transition:none}}:is(.ck.ck-button,:where(a).ck.ck-button):active,:is(.ck.ck-button,:where(a).ck.ck-button):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use,:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use *{color:inherit}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{color:inherit;cursor:inherit;font-size:inherit;font-weight:inherit;vertical-align:middle}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:left}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:right}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{display:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke{color:inherit;opacity:.5}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-left:var(--ck-spacing-large)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-right:var(--ck-spacing-large)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled{background:var(--ck-button-disabled-background)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:active,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__icon,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__keystroke{opacity:.3}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-left:var(--ck-spacing-medium)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__label{display:inline-block}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-keystroke .ck-button__label{flex-grow:1}:is(.ck.ck-button,:where(a).ck.ck-button).ck-on{--ck-button-background:var(--ck-color-button-on-background);--ck-button-hover-background:var(--ck-color-button-on-hover-background);--ck-button-active-background:var(--ck-color-button-on-active-background);--ck-button-disabled-background:var(--ck-color-button-on-disabled-background);color:var(--ck-color-button-on-color)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-save{color:var(--ck-color-button-save)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-cancel{color:var(--ck-color-button-cancel)}[dir=ltr] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:left}[dir=rtl] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:right}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-button_with-text){justify-content:center}.ck.ck-button-action,a.ck.ck-button-action{--ck-button-background:var(--ck-color-button-action-background);--ck-button-hover-background:var(--ck-color-button-action-hover-background);--ck-button-active-background:var(--ck-color-button-action-active-background);--ck-button-disabled-background:var(--ck-color-button-action-disabled-background);color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}:root{--ck-switch-button-toggle-width:2.61538em;--ck-switch-button-toggle-inner-size:calc(1.07692em + 1px);--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2px);--ck-switch-button-inner-hover-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton,.ck.ck-button.ck-switchbutton.ck-on:active,.ck.ck-button.ck-switchbutton.ck-on:focus,.ck.ck-button.ck-switchbutton.ck-on:hover,.ck.ck-button.ck-switchbutton:active,.ck.ck-button.ck-switchbutton:focus,.ck.ck-button.ck-switchbutton:hover{background:0 0;color:inherit}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-right:calc(var(--ck-spacing-large)*2)}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-left:calc(var(--ck-spacing-large)*2)}.ck.ck-button.ck-switchbutton .ck-button__toggle{background:var(--ck-color-switch-button-off-background);border:1px solid #0000;border-radius:var(--ck-rounded-corners-radius);transition:background .4s,box-shadow .2s ease-in-out,outline .2s ease-in-out;width:var(--ck-switch-button-toggle-width)}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-left:auto}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{background:var(--ck-color-switch-button-inner-background);border-radius:calc(var(--ck-rounded-corners-radius)*.5);height:var(--ck-switch-button-toggle-inner-size);transition:all .3s;width:var(--ck-switch-button-toggle-inner-size)}@media (prefers-reduced-motion:reduce){.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{transition:none}}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:var(--ck-switch-button-inner-hover-shadow)}.ck.ck-button.ck-switchbutton .ck-button__toggle{display:block}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton:focus{border-color:#0000;box-shadow:none;outline:none}.ck.ck-button.ck-switchbutton:focus .ck-button__toggle{box-shadow:0 0 0 1px var(--ck-color-base-background),0 0 0 5px var(--ck-color-focus-outer-shadow);outline:var(--ck-focus-ring);outline-offset:1px}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(calc(var(--ck-switch-button-translation)*-1))}.ck.ck-button.ck-list-item-button{padding:var(--ck-spacing-tiny) calc(var(--ck-spacing-standard)*2)}.ck.ck-button.ck-list-item-button,.ck.ck-button.ck-list-item-button.ck-on{background:var(--ck-color-list-background);color:var(--ck-color-text)}[dir=ltr] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-right:var(--ck-spacing-small)}.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}:is(.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled),.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button.ck-on:hover):not(.ck-disabled){color:var(--ck-color-text)}.ck.ck-list-item-button{border-radius:0;min-height:unset;width:100%}[dir=ltr] .ck.ck-list-item-button{text-align:left}[dir=rtl] .ck.ck-list-item-button{text-align:right}[dir=ltr] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-right:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-holder{display:inline-flex;height:.9em;width:.9em}[dir=ltr] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-right:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-left:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-icon{height:100%}:root{--ck-collapsible-arrow-size:calc(var(--ck-icon-size)*0.5)}.ck.ck-collapsible>.ck.ck-button{border-radius:0;color:inherit;font-weight:700;width:100%}.ck.ck-collapsible>.ck.ck-button:focus{background:0 0}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:hover:not(:focus),.ck.ck-collapsible>.ck.ck-button:not(:focus){background:0 0;border-color:#0000;box-shadow:none}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:var(--ck-spacing-medium) var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#166fd4}.ck.ck-color-grid{grid-gap:5px;display:grid;padding:8px}.ck.ck-color-grid__tile{transition:box-shadow .2s}@media (forced-colors:none){.ck.ck-color-grid__tile{border:0;height:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);padding:0;width:var(--ck-color-grid-tile-size)}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile.ck-color-selector__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}}@media (forced-colors:active){.ck.ck-color-grid__tile{height:unset;min-height:unset;min-width:unset;padding:0 var(--ck-spacing-small);width:unset}.ck.ck-color-grid__tile .ck-button__label{display:inline-block}}@media (prefers-reduced-motion:reduce){.ck.ck-color-grid__tile{transition:none}}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile .ck.ck-icon{color:var(--ck-color-color-grid-check-icon);display:none}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}.color-picker-hex-input{width:max-content}.color-picker-hex-input .ck.ck-input{min-width:unset}.ck.ck-color-picker__row{display:flex;flex-flow:row;justify-content:space-between;margin:var(--ck-spacing-large) 0 0;width:unset}.ck.ck-color-picker__row .ck.ck-labeled-field-view{padding-top:unset}.ck.ck-color-picker__row .ck.ck-input-text{width:unset}.ck.ck-color-picker__row .ck-color-picker__hash-view{padding-right:var(--ck-spacing-medium);padding-top:var(--ck-spacing-tiny)}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color{align-items:center;display:flex;width:100%}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker){justify-content:flex-start}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard)}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker:not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-left:var(--ck-spacing-standard)}.ck.ck-color-selector .ck-color-grids-fragment label.ck.ck-color-grid__label{font-weight:unset}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker{padding:8px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker{height:100px;min-width:180px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation){border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue){border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius)}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue-pointer),.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation-pointer){height:15px;width:15px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar{display:flex;flex-direction:row;justify-content:space-around;padding:0 8px 8px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-cancel,.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-save{flex:1}:root{--ck-dialog-overlay-background-color:#00000080;--ck-dialog-drop-shadow:0px 0px 6px 2px #00000026;--ck-dialog-max-width:100vw;--ck-dialog-max-height:90vh;--ck-color-dialog-background:var(--ck-color-base-background);--ck-color-dialog-form-header-border:var(--ck-color-base-border)}.ck.ck-dialog-overlay{animation:ck-dialog-fade-in .3s;background:var(--ck-dialog-overlay-background-color);inset:0;overscroll-behavior:none;position:fixed;user-select:none;z-index:var(--ck-z-dialog)}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent{animation:none;background:0 0;pointer-events:none}.ck.ck-dialog{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow),0 0;--ck-drop-shadow:var(--ck-dialog-drop-shadow);background:var(--ck-color-dialog-background);border:1px solid var(--ck-color-base-border);max-height:var(--ck-dialog-max-height);max-width:var(--ck-dialog-max-width);overscroll-behavior:contain;overscroll-behavior:none;position:absolute;width:fit-content}.ck.ck-dialog .ck.ck-form__header{border-bottom:1px solid var(--ck-color-dialog-form-header-border);flex-shrink:0}.ck.ck-dialog:not(.ck-dialog_modal) .ck.ck-form__header .ck-form__header__label{cursor:grab}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent .ck.ck-dialog{pointer-events:all}.ck-dialog-scroll-locked{overflow:hidden}@keyframes ck-dialog-fade-in{0%{background:0 0}to{background:var(--ck-dialog-overlay-background-color)}}.ck.ck-dialog .ck.ck-dialog__actions{display:flex;padding:var(--ck-spacing-large)}.ck.ck-dialog .ck.ck-dialog__actions>*+*{margin-left:var(--ck-spacing-large)}.ck.ck-dialog .ck.ck-dialog__actions{justify-content:flex-end}:root{--ck-dropdown-arrow-size:calc(var(--ck-icon-size)*0.5);--ck-dropdown-max-width:75vw}.ck.ck-dropdown{display:inline-block;font-size:inherit;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{pointer-events:none;width:var(--ck-dropdown-arrow-size);z-index:var(--ck-z-default)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{margin-left:var(--ck-spacing-standard);right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{overflow:hidden;text-overflow:ellipsis;width:7em}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active{box-shadow:none}:is(.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active):focus{box-shadow:var(--ck-focus-outer-shadow),0 0}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-dropdown__panel{display:none;max-width:var(--ck-dropdown-max-width);position:absolute;z-index:var(--ck-z-panel)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{bottom:auto;top:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s{left:50%;transform:translate(-50%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw{left:75%;transform:translate(-75%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme{left:25%;transform:translate(-25%)}.ck.ck-dropdown__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);border-radius:var(--ck-rounded-corners-radius);bottom:0;box-shadow:var(--ck-drop-shadow),0 0;min-width:100%}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}.ck.ck-dropdown__panel:focus{outline:none}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}[dir=ltr] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-bottom-right-radius:unset;border-top-right-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-bottom-left-radius:unset;border-top-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-bottom-left-radius:unset;border-top-left-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-bottom-right-radius:unset;border-top-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton>.ck-splitbutton__arrow:not(:focus){border-bottom-width:0;border-top-width:0}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action{border-bottom-left-radius:0}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow{border-bottom-right-radius:0}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{background-color:var(--ck-color-split-button-hover-border);content:"";height:100%;position:absolute;width:1px}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:focus:after{--ck-color-split-button-hover-border:var(--ck-color-focus-border)}[dir=ltr] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{left:-1px}[dir=rtl] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{right:-1px}:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-background)}:is(:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover)):after{display:none}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-hover-background)}.ck.ck-splitbutton{font-size:inherit}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}:root{--ck-toolbar-dropdown-max-width:60vw}.ck.ck-toolbar-dropdown>.ck-dropdown__panel{max-width:var(--ck-toolbar-dropdown-max-width);width:max-content}.ck.ck-toolbar-dropdown>.ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:first-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:last-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-dropdown-menu-list__nested-menu{display:block}:root{--ck-dropdown-menu-menu-item-min-width:18em}.ck.ck-dropdown-menu-list__nested-menu__item{min-width:var(--ck-dropdown-menu-menu-item-min-width)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button{border-radius:0}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container,.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container{margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus{border-color:#0000;box-shadow:none}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button{border-radius:0;padding:var(--ck-spacing-tiny) calc(var(--ck-spacing-standard)*2);width:100%}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus{border-color:#0000;box-shadow:none}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-button__label{flex-grow:1;overflow:hidden;text-overflow:ellipsis}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-icon-spacing:not(:has(.ck-button__icon))>.ck-button__label{margin-left:calc(var(--ck-icon-size) - var(--ck-spacing-small))}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow{pointer-events:none;width:var(--ck-dropdown-arrow-size);z-index:var(--ck-z-default)}[dir=ltr] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){margin-left:var(--ck-spacing-standard);margin-right:calc(var(--ck-spacing-small)*-1);right:var(--ck-spacing-standard);transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){left:var(--ck-spacing-standard);margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small);transform:rotate(90deg)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-dropdown-menu-list__nested-menu__button__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}:root{--ck-dropdown-menu-menu-panel-max-width:75vw}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);bottom:0;box-shadow:var(--ck-drop-shadow),0 0;height:fit-content;max-height:314px;max-width:var(--ck-dropdown-menu-menu-panel-max-width);overflow-y:auto;position:absolute}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:after,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:before{display:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_es,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_se{border-top-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_sw,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ws{border-top-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_en,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ne{border-bottom-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_nw,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_wn{border-bottom-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:focus{outline:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-editable-blur-selection:#d9d9d9}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content{border:solid var(--ck-color-base-border);border-radius:var(--ck-rounded-corners-radius);border-bottom-left-radius:0;border-bottom-right-radius:0;border-width:1px 1px 0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content.ck-sticky-panel__content_sticky{border-bottom-width:1px}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-menu-bar{border:0;border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-toolbar{border:0}.ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:var(--ck-rounded-corners-radius)}.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;outline:none}.ck.ck-editor__editable_inline{border:1px solid #0000;overflow:auto;padding:0 var(--ck-spacing-standard)}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-editor__editable_inline.ck-editor__editable_inline-root br{margin-bottom:0;margin-top:0}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background)}.ck.ck-form__row{align-items:flex-start;display:flex;flex-direction:row;justify-content:space-between;padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0}.ck.ck-form__row.ck-form__row_large-top-padding{padding-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_with-submit{flex-wrap:nowrap}.ck.ck-form__row.ck-form__row_with-submit>:not(:first-child){margin-inline-start:var(--ck-spacing-standard)}.ck.ck-form__row>.ck.ck-form__row{padding:0}:root{--ck-form-header-height:3.384em}.ck.ck-form__header{align-items:center;border-bottom:1px solid var(--ck-color-base-border);display:flex;flex-flow:row;flex-shrink:0;height:var(--ck-form-header-height);justify-content:space-between;line-height:var(--ck-form-header-height);padding:var(--ck-spacing-small) var(--ck-spacing-large)}.ck.ck-form__header>.ck-icon{flex-shrink:0;margin-inline-end:var(--ck-spacing-medium)}.ck.ck-form__header .ck-form__header__label{--ck-font-size-base:1.153em;font-weight:700}.ck.ck-form__header:has(.ck-button-back.ck-hidden){padding-inline:var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-form__header:has(.ck-button-back:not(.ck-hidden)){padding-inline:var(--ck-spacing-small) var(--ck-spacing-small)}.ck.ck-form__header>.ck-button-back{margin-inline-end:var(--ck-spacing-small)}.ck.ck-form__header>.ck.ck-button{flex-shrink:0}.ck.ck-form__header h2.ck-form__header__label{flex-grow:1;overflow:hidden;text-overflow:ellipsis}:root{--ck-icon-size:calc(var(--ck-line-height-base)*var(--ck-font-size-normal));--ck-icon-font-size:.833335em}.ck.ck-icon{font-size:var(--ck-icon-font-size);height:var(--ck-icon-size);width:var(--ck-icon-size)}.ck.ck-icon,.ck.ck-icon *{cursor:inherit}.ck.ck-icon.ck-icon_inherit-color,.ck.ck-icon.ck-icon_inherit-color *{color:inherit}.ck.ck-icon.ck-icon_inherit-color :not([fill]){fill:currentColor}.ck.ck-icon{vertical-align:middle}:root{--ck-input-width:18em;--ck-input-text-width:var(--ck-input-width)}.ck.ck-input{background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);border-radius:var(--ck-rounded-corners-radius);min-height:var(--ck-ui-component-min-height);min-width:var(--ck-input-width);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);transition:box-shadow .1s ease-in-out,border .1s ease-in-out}@media (prefers-reduced-motion:reduce){.ck.ck-input{transition:none}}.ck.ck-input:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none}.ck.ck-input[readonly]{background:var(--ck-color-input-disabled-background);border:1px solid var(--ck-color-input-disabled-border);color:var(--ck-color-input-disabled-text)}.ck.ck-input[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow),0 0}.ck.ck-input.ck-error{animation:ck-input-shake .3s both;border-color:var(--ck-color-input-error-border)}@media (prefers-reduced-motion:reduce){.ck.ck-input.ck-error{animation:none}}.ck.ck-input.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow),0 0}@keyframes ck-input-shake{20%{transform:translate(-2px)}40%{transform:translate(2px)}60%{transform:translate(-1px)}80%{transform:translate(1px)}}.ck-textarea{overflow-x:hidden}.ck.ck-label{display:block;font-weight:700}.ck.ck-voice-label{display:none}:root{--ck-labeled-field-view-transition:.1s cubic-bezier(0,0,.24,.95);--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-spacing-medium);--ck-labeled-field-label-default-position-x:var(--ck-spacing-medium);--ck-labeled-field-label-default-position-y:calc(var(--ck-font-size-base)*0.6);--ck-color-labeled-field-label-background:var(--ck-color-base-background)}.ck.ck-labeled-field-view{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-labeled-field-view .ck.ck-label{display:block;position:absolute}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{display:flex;width:100%}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{background:var(--ck-color-labeled-field-label-background);font-weight:400;line-height:normal;max-width:100%;overflow:hidden;padding:0 calc(var(--ck-font-size-tiny)*.5);pointer-events:none;text-overflow:ellipsis;top:0;transition:transform var(--ck-labeled-field-view-transition),padding var(--ck-labeled-field-view-transition),background var(--ck-labeled-field-view-transition)}[dir=ltr] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){left:0;transform:translate(var(--ck-spacing-medium),-6px) scale(.75);transform-origin:0 0}[dir=rtl] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){right:0;transform:translate(calc(var(--ck-spacing-medium)*-1),-6px) scale(.75);transform-origin:100% 0}@media (prefers-reduced-motion:reduce){.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transition:none}}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{position:relative}.ck.ck-labeled-field-view.ck-error .ck-input:not([readonly])+.ck.ck-label,.ck.ck-labeled-field-view.ck-error>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status.ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view.ck-disabled>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-input-disabled-text)}[dir=ltr] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(var(--ck-labeled-field-label-default-position-x),var(--ck-labeled-field-label-default-position-y)) scale(1)}[dir=rtl] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(calc(var(--ck-labeled-field-label-default-position-x)*-1),var(--ck-labeled-field-label-default-position-y)) scale(1)}.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{background:0 0;max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width));padding:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck.ck-button{background:0 0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck-button>.ck-button__label{opacity:0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown+.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard))}.ck.ck-labeled-field-view.ck-labeled-field-view_full-width{flex-grow:1}.ck.ck-labeled-input .ck-labeled-input__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-input .ck-labeled-input__status_error{color:var(--ck-color-base-error)}.ck.ck-list{background:var(--ck-color-list-background);border-radius:var(--ck-rounded-corners-radius);display:flex;flex-direction:column;list-style-type:none;padding:var(--ck-spacing-small) 0;-webkit-user-select:none;user-select:none}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{position:relative;z-index:var(--ck-z-default)}.ck.ck-list__item{cursor:default;min-width:15em}.ck.ck-list__item>.ck-button:not(.ck-list-item-button){border-radius:0;min-height:unset;padding:var(--ck-spacing-tiny) calc(var(--ck-spacing-standard)*2);width:100%}[dir=ltr] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:left}[dir=rtl] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:right}.ck.ck-list__item>.ck-button:not(.ck-list-item-button) .ck-button__label{line-height:calc(var(--ck-line-height-base)*var(--ck-font-size-base))}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck-list .ck-list__group{padding-top:var(--ck-spacing-medium)}.ck-list .ck-list__group:first-child{padding-top:0}:not(.ck-hidden)~:is(.ck-list .ck-list__group){border-top:1px solid var(--ck-color-base-border)}.ck-list .ck-list__group>.ck-label{font-size:11px;font-weight:700;padding:var(--ck-spacing-medium) var(--ck-spacing-large) 0}.ck.ck-list__separator{background:var(--ck-color-base-border);height:1px;margin:var(--ck-spacing-small) 0;width:100%}:root{--ck-balloon-border-width:1px;--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px;--ck-balloon-arrow-drop-shadow:0 2px 2px var(--ck-color-shadow-drop);--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{background:var(--ck-color-panel-background);border:var(--ck-balloon-border-width) solid var(--ck-color-panel-border);border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow),0 0;display:none;min-height:15px;position:absolute;z-index:var(--ck-z-panel)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{border-style:solid;content:"";height:0;position:absolute;width:0}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:after,.ck.ck-balloon-panel[class*=arrow_n]:before{border-width:0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_n]:before{border-color:transparent transparent var(--ck-color-panel-border) transparent;margin-top:calc(var(--ck-balloon-border-width)*-1);z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{border-color:transparent transparent var(--ck-color-panel-background) transparent;margin-top:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:after,.ck.ck-balloon-panel[class*=arrow_s]:before{border-width:var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-color:var(--ck-color-panel-border) transparent transparent;filter:drop-shadow(var(--ck-balloon-arrow-drop-shadow));margin-bottom:calc(var(--ck-balloon-border-width)*-1);z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{border-color:var(--ck-color-panel-background) transparent transparent transparent;margin-bottom:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_e]:after,.ck.ck-balloon-panel[class*=arrow_e]:before{border-width:var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_e]:before{border-color:transparent transparent transparent var(--ck-color-panel-border);margin-right:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_e]:after{border-color:transparent transparent transparent var(--ck-color-panel-background);margin-right:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:after,.ck.ck-balloon-panel[class*=arrow_w]:before{border-width:var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0}.ck.ck-balloon-panel[class*=arrow_w]:before{border-color:transparent var(--ck-color-panel-border) transparent transparent;margin-left:calc(var(--ck-balloon-border-width)*-1)}.ck.ck-balloon-panel[class*=arrow_w]:after{border-color:transparent var(--ck-color-panel-background) transparent transparent;margin-left:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before{left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before{left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before{right:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:50%;margin-left:calc(var(--ck-balloon-arrow-half-width)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);right:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);margin-right:calc(var(--ck-balloon-arrow-half-width)*2);right:25%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before{bottom:calc(var(--ck-balloon-arrow-height)*-1);left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before{margin-right:calc(var(--ck-balloon-arrow-half-width)*2);right:25%;top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before{left:25%;margin-left:calc(var(--ck-balloon-arrow-half-width)*2);top:calc(var(--ck-balloon-arrow-height)*-1)}.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:before{margin-top:calc(var(--ck-balloon-arrow-half-width)*-1);right:calc(var(--ck-balloon-arrow-height)*-1);top:50%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:after,.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:before{left:calc(var(--ck-balloon-arrow-height)*-1);margin-top:calc(var(--ck-balloon-arrow-half-width)*-1);top:50%}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}.ck .ck-balloon-rotator__navigation{align-items:center;background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);display:flex;padding:0 var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation>*{margin-bottom:var(--ck-spacing-small);margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-left:var(--ck-spacing-small);margin-right:var(--ck-spacing-standard)}.ck .ck-balloon-rotator__navigation{justify-content:center}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);box-shadow:var(--ck-drop-shadow),0 0;height:100%;min-height:15px;position:absolute;width:100%}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical);z-index:2}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*2);z-index:1}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal)*3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical)*3)}.ck .ck-fake-panel{position:absolute;z-index:calc(var(--ck-z-panel) - 1)}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{border-top-left-radius:0;border-top-right-radius:0;border-width:0 1px 1px;box-shadow:var(--ck-drop-shadow),0 0;position:fixed;top:0;z-index:var(--ck-z-panel)}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{position:absolute;top:auto}.ck.ck-autocomplete>.ck-search__results{background:var(--ck-color-base-background);border:1px solid var(--ck-color-dropdown-panel-border);border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow),0 0;max-height:200px;min-width:auto;overflow-y:auto;position:absolute}.ck.ck-autocomplete>.ck-search__results.ck-search__results_n{border-bottom-left-radius:0;border-bottom-right-radius:0;bottom:100%;margin-bottom:-1px}.ck.ck-autocomplete>.ck-search__results.ck-search__results_s{border-top-left-radius:0;border-top-right-radius:0;bottom:auto;margin-top:-1px;top:100%}.ck.ck-autocomplete>.ck-search__results{z-index:var(--ck-z-panel)}.ck.ck-autocomplete{position:relative}:root{--ck-search-field-view-horizontal-spacing:calc(var(--ck-icon-size) + var(--ck-spacing-medium))}.ck.ck-search>.ck-labeled-field-view .ck-input{width:100%}.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon{position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){left:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){right:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view .ck-search__reset{position:absolute;top:50%;transform:translateY(-50%)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon{--ck-labeled-field-label-default-position-x:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon>.ck-labeled-field-view__input-wrapper>.ck-icon{opacity:.5;pointer-events:none}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input){padding-left:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input):not(.ck-input-text_empty){padding-left:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset{--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset.ck-labeled-field-view_empty{--ck-labeled-field-empty-unfocused-max-width:100% - var(--ck-search-field-view-horizontal-spacing) - var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset{background:0 0;min-height:auto;min-width:auto;opacity:.5;padding:0}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){left:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset:hover{opacity:1}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input):not(.ck-input-text_empty){padding-right:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input){padding-right:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-search__results{min-width:100%}.ck.ck-search>.ck-search__results>.ck-search__info{padding:var(--ck-spacing-medium) var(--ck-spacing-large);width:100%}.ck.ck-search>.ck-search__results>.ck-search__info *{white-space:normal}.ck.ck-search>.ck-search__results>.ck-search__info>span:first-child{display:block;font-weight:700}.ck.ck-search>.ck-search__results>.ck-search__info>span:last-child{margin-top:var(--ck-spacing-medium)}.ck.ck-search>.ck-search__results>.ck-search__info:not(.ck-hidden)~*{display:none}.ck.ck-highlighted-text mark{background:var(--ck-color-highlight-background);font-size:inherit;font-weight:inherit;line-height:inherit;vertical-align:initial}.ck.ck-balloon-panel.ck-tooltip{--ck-balloon-border-width:0px;--ck-balloon-arrow-offset:0px;--ck-balloon-arrow-half-width:4px;--ck-balloon-arrow-height:4px;--ck-tooltip-text-padding:4px;--ck-color-panel-background:var(--ck-color-tooltip-background);box-shadow:none;padding:0 var(--ck-spacing-medium);-webkit-user-select:none;user-select:none}.ck.ck-balloon-panel.ck-tooltip .ck-tooltip__text{color:var(--ck-color-tooltip-text);font-size:.9em;line-height:1.5}.ck.ck-balloon-panel.ck-tooltip.ck-tooltip_multi-line .ck-tooltip__text{display:inline-block;max-width:200px;padding:var(--ck-tooltip-text-padding) 0;white-space:break-spaces}.ck.ck-balloon-panel.ck-tooltip:before{display:none}.ck.ck-balloon-panel.ck-tooltip{z-index:calc(var(--ck-z-dialog) + 100)}:root{--ck-toolbar-spinner-size:18px}.ck.ck-spinner-container{animation:ck-spinner-rotate 1.5s linear infinite;display:block;height:var(--ck-toolbar-spinner-size);width:var(--ck-toolbar-spinner-size)}@media (prefers-reduced-motion:reduce){.ck.ck-spinner-container{animation-duration:3s}}.ck.ck-spinner-container{position:relative}.ck.ck-spinner{border:2px solid var(--ck-color-text);border-radius:50%;border-top:2px solid #0000;height:var(--ck-toolbar-spinner-size);left:0;margin:0 auto;position:absolute;right:0;top:50%;transform:translateY(-50%);width:var(--ck-toolbar-spinner-size);z-index:1}@keyframes ck-spinner-rotate{to{transform:rotate(1turn)}}.ck.ck-toolbar{align-items:center;background:var(--ck-color-toolbar-background);border:1px solid var(--ck-color-toolbar-border);border-radius:var(--ck-rounded-corners-radius);display:flex;flex-flow:row;padding:0 var(--ck-spacing-small);-webkit-user-select:none;user-select:none}.ck.ck-toolbar .ck.ck-toolbar__separator{background:var(--ck-color-toolbar-border);display:inline-block;height:var(--ck-icon-size);margin-bottom:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);min-width:1px;width:1px}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar .ck-toolbar__line-break{flex-basis:100%;height:0}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break){margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items{align-items:center;display:flex;flex-flow:wrap;flex-grow:1}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break),.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-bottom:var(--ck-spacing-small);margin-top:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{border-radius:0;margin:0;width:100%}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-dropdown__panel{min-width:auto}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-button>.ck-button__label{max-width:7em;width:auto}.ck.ck-toolbar:focus{outline:none}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck{margin-right:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]):not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck:last-child{margin-left:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-bottom-left-radius:0;border-top-left-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-bottom-right-radius:0;border-top-right-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck.ck-toolbar__separator{margin-left:var(--ck-spacing-small)}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck-toolbar__items>.ck:last-child{margin-right:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-bottom-right-radius:0;border-top-right-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-bottom-left-radius:0;border-top-left-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child),:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck.ck-toolbar__separator{margin-right:var(--ck-spacing-small)}:root{--ck-color-block-toolbar-button:var(--ck-color-text);--ck-block-toolbar-button-size:var(--ck-font-size-normal)}.ck.ck-block-toolbar-button{color:var(--ck-color-block-toolbar-button);font-size:var(--ck-block-toolbar-size);position:absolute;z-index:var(--ck-z-default)}.ck.ck-menu-bar{background:var(--ck-color-base-background);border:1px solid var(--ck-color-toolbar-border);display:flex;flex-wrap:wrap;gap:var(--ck-spacing-small);justify-content:flex-start;padding:var(--ck-spacing-small);width:100%}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button{width:100%}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-button__label{flex-grow:1;overflow:hidden;text-overflow:ellipsis}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button{min-height:unset;padding:var(--ck-spacing-small) var(--ck-spacing-medium)}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-button__label{line-height:unset;overflow:visible;width:unset}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button.ck-on{border-bottom-left-radius:0;border-bottom-right-radius:0}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-icon{display:none}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button{border-radius:0}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){margin-left:var(--ck-spacing-standard);margin-right:calc(var(--ck-spacing-small)*-1);transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){left:var(--ck-spacing-standard);margin-left:calc(var(--ck-spacing-small)*-1);margin-right:var(--ck-spacing-small);transform:rotate(90deg)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button.ck-disabled>.ck-menu-bar__menu__button__arrow{opacity:var(--ck-disabled-opacity)}:root{--ck-menu-bar-menu-max-width:75vw;--ck-menu-bar-nested-menu-horizontal-offset:5px}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel{background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);border-radius:var(--ck-rounded-corners-radius);bottom:0;box-shadow:var(--ck-drop-shadow),0 0;height:fit-content;max-width:var(--ck-menu-bar-menu-max-width);position:absolute;z-index:var(--ck-z-panel)}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{border-top-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws{border-top-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne{border-bottom-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{border-bottom-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel:focus{outline:none}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw{bottom:100%}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{bottom:auto;top:100%}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{left:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{right:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es{left:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en{bottom:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws{right:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{bottom:0}.ck.ck-menu-bar .ck-list-item-button:active,.ck.ck-menu-bar .ck-list-item-button:focus{border-color:#0000;box-shadow:none}.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:active,.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow),0 0;outline:none;position:relative;z-index:2}.ck.ck-menu-bar__menu{display:block;font-size:inherit}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level{max-width:100%}.ck.ck-menu-bar__menu{position:relative}:root{--ck-menu-bar-menu-item-min-width:18em}.ck.ck-menu-bar__menu .ck.ck-menu-bar__menu__item{min-width:var(--ck-menu-bar-menu-item-min-width)}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button{border-radius:0}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container,.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container{font-size:var(--ck-icon-font-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-left:var(--ck-spacing-medium)}.ck.ck-editor__editable .ck-code_selected{background-color:#c7c7c780}:root{--ck-bookmark-icon-hover-fill-color:var(--ck-color-widget-hover-border);--ck-bookmark-icon-selected-fill-color:var(--ck-color-focus-border);--ck-bookmark-icon-animation-duration:var(--ck-widget-handler-animation-duration);--ck-bookmark-icon-animation-curve:var(--ck-widget-handler-animation-curve)}.ck .ck-bookmark.ck-widget{display:inline-block;outline:none}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon__fill{transition:fill var(--ck-bookmark-icon-animation-duration) var(--ck-bookmark-icon-animation-curve)}.ck .ck-bookmark.ck-widget:hover .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-hover-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-selected-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected,.ck .ck-bookmark.ck-widget.ck-widget_selected:hover{outline:none}.ck .ck-bookmark.ck-widget .ck-bookmark__icon{display:block;position:relative;top:-.1em}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon{height:1.2em;vertical-align:middle;width:auto}.ck .ck-fake-bookmark-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-bookmark-selection_collapsed{border-right:1px solid var(--ck-color-base-text);height:100%;margin-right:-1px;outline:1px solid #ffffff80}.ck.ck-bookmark-balloon .ck.ck-toolbar>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-bookmark-toolbar__preview{cursor:default;font-weight:400;max-width:var(--ck-input-width);min-width:3em;overflow:hidden;padding:0 var(--ck-spacing-medium);text-align:center;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}:root{--ck-bookmark-form-width:340px}@media screen and (width<=600px){:root{--ck-bookmark-form-width:300px}}.ck.ck-bookmark-form{width:var(--ck-bookmark-form-width)}:root{--ck-image-processing-highlight-color:#f9fafa;--ck-image-processing-background-color:#e3e5e8}.ck.ck-editor__editable .image.image-processing{position:relative}.ck.ck-editor__editable .image.image-processing:before{animation:ck-image-processing-animation 2s linear infinite;background:linear-gradient(90deg,var(--ck-image-processing-background-color),var(--ck-image-processing-highlight-color),var(--ck-image-processing-background-color));background-size:200% 100%;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.ck.ck-editor__editable .image.image-processing img{height:100%}@keyframes ck-image-processing-animation{0%{background-position:200% 0}to{background-position:-200% 0}}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);bottom:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);margin-left:-1px;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{border-color:var(--ck-clipboard-drop-target-color) transparent transparent transparent;border-style:solid;border-width:calc(var(--ck-clipboard-drop-target-dot-height)) calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0 calc(var(--ck-clipboard-drop-target-dot-width)*.5);content:"";display:block;height:0;left:50%;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-height)*-.5);transform:translate(-50%);width:0}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{width:0}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{display:inline;pointer-events:none;position:relative}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{outline:none!important;zoom:.6}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}.ck.ck-clipboard-drop-target-line{background:var(--ck-clipboard-drop-target-color);border:1px solid var(--ck-clipboard-drop-target-color);height:0;margin-top:-1px;position:absolute;z-index:var(--ck-z-default)}.ck.ck-clipboard-drop-target-line:before{border-style:solid;content:"";height:0;position:absolute;top:calc(var(--ck-clipboard-drop-target-dot-width)*-.5);width:0}.ck.ck-clipboard-drop-target-line{pointer-events:none}[dir=ltr] .ck.ck-clipboard-drop-target-line:before{border-color:transparent transparent transparent var(--ck-clipboard-drop-target-color);border-width:calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0 calc(var(--ck-clipboard-drop-target-dot-width)*.5) var(--ck-clipboard-drop-target-dot-height);left:-1px}[dir=rtl] .ck.ck-clipboard-drop-target-line:before{border-color:transparent var(--ck-clipboard-drop-target-color) transparent transparent;border-width:calc(var(--ck-clipboard-drop-target-dot-width)*.5) var(--ck-clipboard-drop-target-dot-height) calc(var(--ck-clipboard-drop-target-dot-width)*.5) 0;right:-1px}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{background:var(--ck-color-code-block-label-background);color:#fff;content:attr(data-language);font-family:var(--ck-font-face);font-size:10px;line-height:16px;padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);position:absolute;right:10px;top:-1px;white-space:nowrap}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}.ck.ck-editor__editable pre{position:relative}:root{--ck-content-font-family:Helvetica,Arial,Tahoma,Verdana,Sans-Serif;--ck-content-font-size:medium;--ck-content-font-color:#000;--ck-content-line-height:1.5;--ck-content-word-break:normal;--ck-content-overflow-wrap:break-word}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}.ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-panel)}.ck.ck-menu-bar{border:none;border-bottom:1px solid var(--ck-color-toolbar-border)}.ck.ck-emoji{width:320px}.ck .ck.ck-emoji__search{align-items:center;display:flex;justify-content:space-between;padding:var(--ck-spacing-large);padding-bottom:var(--ck-spacing-medium)}.ck .ck.ck-emoji__search>.ck.ck-search{flex:1}.ck .ck-fake-emoji-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-emoji-selection_collapsed{border-right:1px solid var(--ck-color-base-text);height:100%;margin-right:-1px;outline:1px solid #ffffff80}div.ck.ck-balloon-panel.ck-emoji-picker-balloon{z-index:calc(var(--ck-z-dialog) + 1)}.ck.ck-emoji__categories-list{display:flex;justify-content:space-between;margin:0 var(--ck-spacing-large)}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text{border-width:0;border-bottom:2px solid #0000;font-size:var(--ck-font-size-big);min-height:var(--ck-font-size-big);min-width:var(--ck-font-size-big);padding:0}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text.ck-emoji__category-item.ck-on{border-bottom-color:var(--ck-color-base-active)}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text>span{margin:auto}:root{--ck-emoji-grid-tile-size:27px}.ck.ck-emoji .ck.ck-emoji__tiles{border-top:1px solid var(--ck-color-base-border);max-height:min(265px,40vh);max-width:100%;overflow:hidden auto}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__grid{grid-template-columns:repeat(auto-fill,minmax(var(--ck-emoji-grid-tile-size),1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-small);display:grid}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{border:0;font-size:1.5em;height:var(--ck-emoji-grid-tile-size);min-height:var(--ck-emoji-grid-tile-size);min-width:var(--ck-emoji-grid-tile-size);padding:0;transition:box-shadow .2s;width:var(--ck-emoji-grid-tile-size)}@media (prefers-reduced-motion:reduce){.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{transition:none}}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:focus:not(.ck-disabled),.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile .ck-button__label{line-height:var(--ck-emoji-grid-tile-size);text-align:center;width:100%}.ck.ck-form.ck-emoji-picker-form{padding-bottom:0}.ck.ck-form.ck-emoji-picker-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border-color:#0000}.ck.ck-emoji__skin-tone{margin-left:var(--ck-spacing-standard)}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck.ck-list__item{min-width:1em}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:auto}.ck .ck-placeholder,.ck.ck-placeholder{position:relative}@media (forced-colors:active){.ck .ck-placeholder,.ck.ck-placeholder{forced-color-adjust:preserve-parent-color}}:is(.ck.ck-placeholder,.ck .ck-placeholder):before{box-sizing:border-box;content:attr(data-placeholder);cursor:text;left:0;overflow:hidden;padding-left:inherit;padding-right:inherit;pointer-events:none;position:absolute;right:0;text-overflow:ellipsis;white-space:nowrap}@media (forced-colors:none){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{color:var(--ck-color-engine-placeholder-text)}}@media (forced-colors:active){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{font-style:italic;margin-left:1px}}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-reset_all .ck-placeholder{position:relative}.ck.ck-editor__editable span[data-ck-unsafe-element]{display:none}.ck-find-result{background:var(--ck-color-highlight-background);color:var(--ck-color-text)}.ck-find-result_selected{background:#ff9633}.ck.ck-find-and-replace-form{max-width:100%;width:400px}.ck.ck-find-and-replace-form:focus{outline:none}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions,.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs{align-content:stretch;align-items:center;display:flex;flex:auto;flex-flow:wrap;margin:0;padding:var(--ck-spacing-large)}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>.ck-button{flex:none}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-left:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-right:var(--ck-spacing-standard)}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view{flex:auto}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view .ck-input{min-width:50px;width:100%}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs{align-items:flex-start}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-prev>.ck-icon{transform:rotate(90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-next>.ck-icon{transform:rotate(-90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter{color:var(--ck-color-base-border);position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){left:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace{flex:0 0 100%;padding-top:var(--ck-spacing-standard)}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-left:0}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-right:0}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions{flex-wrap:wrap;justify-content:flex-end;margin-top:calc(var(--ck-spacing-large)*-1)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find{font-weight:700}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find .ck-button__label{padding-left:var(--ck-spacing-large);padding-right:var(--ck-spacing-large)}.ck.ck-find-and-replace-form .ck-switchbutton{align-items:center;display:flex;flex-flow:row;justify-content:space-between;width:100%}@media screen and (width<=600px){.ck.ck-find-and-replace-form{max-width:100%;width:300px}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input{flex-wrap:wrap}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input .ck-labeled-field-view{flex:1 0 auto;margin-bottom:var(--ck-spacing-standard);width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type .ck-button__label{text-align:center;width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view){flex:auto;flex-wrap:wrap}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button .ck-button__label{text-align:center;width:100%}}:root{--ck-content-font-size-tiny:.7em;--ck-content-font-size-small:.85em;--ck-content-font-size-big:1.4em;--ck-content-font-size-huge:1.8em}body.ck-fullscreen,html.ck-fullscreen{--ck-z-fullscreen:10000;--ck-z-default:calc(var(--ck-z-fullscreen) + 1);--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:100000;overflow:hidden}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n){--ckbox-z-index-root:calc(var(--ck-z-dialog) + 1);position:absolute}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n) .ckbox-img-editor{--ckbox-z-index-preview:calc(var(--ck-z-dialog) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .ck-pagination-view-line{z-index:calc(var(--ck-z-fullscreen) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .page-break__label{z-index:calc(var(--ck-z-fullscreen) + 2)}.ck.ck-fullscreen__main-wrapper{background:var(--ck-color-base-foreground);display:flex;flex-direction:column;height:100%;left:0;position:fixed;top:0;width:100%;z-index:var(--ck-z-fullscreen)}.ck.ck-fullscreen__main-wrapper .ck.ck-revision-history-ui__changes-navigation{margin-bottom:0;margin-top:0}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper{position:absolute}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper .ck-fullscreen__top-wrapper{border-left:1px solid var(--ck-color-base-border);border-radius:var(--ck-border-radius) 0;border-right:1px solid var(--ck-color-base-border);border-top:1px solid var(--ck-color-base-border)}.ck-fullscreen__menu-bar .ck.ck-menu-bar{border:none}.ck.ck-fullscreen__toolbar .ck-toolbar{border-left:0;border-radius:0;border-right:0}.ck-fullscreen__main-wrapper .ck-fullscreen__editable-wrapper{--ck-fullscreen-editor-top-margin:28px;--ck-fullscreen-editor-bottom-margin:28px;display:flex;justify-content:flex-start;max-height:100%;overflow:auto}.ck-fullscreen__main-wrapper .ck-fullscreen__editable{height:100%;margin-left:auto;margin-top:var(--ck-fullscreen-editor-top-margin)}.ck-fullscreen__main-wrapper .ck-fullscreen__editable:after{content:"";display:block;height:var(--ck-fullscreen-editor-bottom-margin)}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck.ck-editor__editable:not(.ck-editor__nested-editable){background:#fff;border:1px solid var(--ck-color-base-border);box-shadow:0 2px 3px #00000014;box-sizing:border-box;height:fit-content;margin:0;max-width:795.701px;min-height:297mm;padding:20mm 12mm;width:795.701px}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck-source-editing-area{width:795.701px}.ck-fullscreen__sidebar{margin-left:10px;margin-top:var(--ck-fullscreen-editor-top-margin);width:270px}.ck-fullscreen__left-sidebar{--ck-user-avatar-size:28px;align-self:flex-start;background-color:#0000;box-sizing:border-box;display:flex;flex-direction:column;font-family:Helvetica,Arial,sans-serif;height:100%;margin-right:10px;margin-top:0;position:sticky;top:0}.ck-fullscreen__left-sidebar .ck-button.ck-fullscreen__left-sidebar-toggle-button{--ck-icon-size:20px;--ck-ui-component-min-height:0px;align-self:flex-start;border-radius:100%;margin-bottom:var(--ck-spacing-large);margin-top:var(--ck-fullscreen-editor-top-margin);opacity:.5;padding-top:0}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky{min-width:270px}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky:first-child{padding-top:var(--ck-fullscreen-editor-top-margin)}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed{width:65px}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed>:not(.ck-fullscreen__left-sidebar-toggle-button){display:none}.ck-fullscreen__left-sidebar .ck.ck-presence-list--collapsed{--ck-user-avatar-size:32px}.ck-fullscreen__left-sidebar .ck-presence-list__users-counter__text,.ck-fullscreen__left-sidebar .ck-user{font-size:.85em}.ck-fullscreen__left-sidebar-item{margin-bottom:var(--ck-spacing-medium);padding:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item:first-child{padding-top:0}.ck-fullscreen__left-sidebar-item:last-child{margin-bottom:0}.ck-fullscreen__left-sidebar-header{--ck-fullscreen-presence-list-header-font-size:.875em;color:var(--ck-document-outline-item-default-color);font-size:var(--ck-fullscreen-presence-list-header-font-size);font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ck-fullscreen__left-sidebar--sticky{position:sticky;top:0}.ck-fullscreen__left-sidebar--sticky>:first-child{padding-top:0}.ck-fullscreen__presence-list{margin-top:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item--no-margin{margin:0}.ck-fullscreen__left-sidebar .ck.ck-document-outline{padding-left:0;padding-right:0;padding-top:0}.ck-fullscreen__document-outline-wrapper{overflow-y:auto;padding-top:0}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar{margin-right:auto;margin-top:var(--ck-fullscreen-editor-top-margin)}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar:not(.ck-fullscreen__right-sidebar--collapsed)>:first-child{min-width:270px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed{width:65px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed>:first-child{min-width:65px}.ck.ck-fullscreen__right-edge{margin-left:10px;margin-top:0;position:sticky;top:0}.ck.ck-fullscreen__right-edge>:first-child{border-bottom:none;border-right:none;border-top:none;height:100%;width:495px}.ck.ck-heading_heading1 .ck-button__label{font-size:20px}.ck.ck-heading_heading2 .ck-button__label{font-size:17px}.ck.ck-heading_heading3 .ck-button__label{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}:root{--ck-content-highlight-marker-yellow:#fdfd77;--ck-content-highlight-marker-green:#62f962;--ck-content-highlight-marker-pink:#fc7899;--ck-content-highlight-marker-blue:#72ccfd;--ck-content-highlight-pen-red:#e71313;--ck-content-highlight-pen-green:#128a00}.ck-editor__editable .ck-horizontal-line{display:flow-root}:root{--ck-html-embed-content-width:calc(100% - var(--ck-icon-size)*1.5);--ck-html-embed-source-height:10em;--ck-html-embed-unfocused-outline-width:1px;--ck-html-embed-content-min-height:calc(var(--ck-icon-size) + var(--ck-spacing-standard));--ck-html-embed-source-disabled-background:var(--ck-color-base-foreground);--ck-html-embed-source-disabled-color:#737373}.ck-widget.raw-html-embed{background-color:var(--ck-color-base-foreground);display:flow-root;font-size:var(--ck-font-size-base);margin:.9em auto;min-width:15em;position:relative}.ck-widget.raw-html-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.raw-html-embed[dir=ltr]{text-align:left}.ck-widget.raw-html-embed[dir=rtl]{text-align:right}.ck-widget.raw-html-embed:before{background:#999;border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);content:attr(data-html-embed-label);font-family:var(--ck-font-face);font-size:var(--ck-font-size-tiny);left:var(--ck-spacing-standard);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);position:absolute;top:calc(var(--ck-html-embed-unfocused-outline-width)*-1);transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);z-index:1}.ck-widget.raw-html-embed[dir=rtl]:before{left:auto;right:var(--ck-spacing-standard)}.ck-widget.raw-html-embed[dir=ltr] .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck.ck-editor__editable.ck-blurred .ck-widget.raw-html-embed.ck-widget_selected:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck.ck-editor__editable:not(.ck-blurred) .ck-widget.raw-html-embed.ck-widget_selected:before{background:var(--ck-color-focus-border);padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck.ck-editor__editable .ck-widget.raw-html-embed:not(.ck-widget_selected):hover:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck-widget.raw-html-embed .raw-html-embed__content-wrapper{padding:var(--ck-spacing-standard)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{display:flex;position:absolute;right:var(--ck-spacing-standard);top:var(--ck-spacing-standard)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__save-button{color:var(--ck-color-button-save)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__cancel-button{color:var(--ck-color-button-cancel)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button:not(:first-child){margin-top:var(--ck-spacing-small)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{flex-direction:column}.ck-widget.raw-html-embed[dir=rtl] .raw-html-embed__buttons-wrapper{left:var(--ck-spacing-standard);right:auto}.ck-widget.raw-html-embed .raw-html-embed__source{box-sizing:border-box;direction:ltr;font-family:monospace;font-size:var(--ck-font-size-base);height:var(--ck-html-embed-source-height);min-width:0;padding:var(--ck-spacing-standard);resize:none;tab-size:4;text-align:left;white-space:pre-wrap;width:var(--ck-html-embed-content-width)}.ck-widget.raw-html-embed .raw-html-embed__source[disabled]{background:var(--ck-html-embed-source-disabled-background);color:var(--ck-html-embed-source-disabled-color);-webkit-text-fill-color:var(--ck-html-embed-source-disabled-color);opacity:1}.ck-widget.raw-html-embed .raw-html-embed__preview{min-height:var(--ck-html-embed-content-min-height);overflow:hidden;position:relative;width:var(--ck-html-embed-content-width)}.ck-editor__editable:not(.ck-read-only) :is(.ck-widget.raw-html-embed .raw-html-embed__preview){pointer-events:none}.ck-widget.raw-html-embed .raw-html-embed__preview{display:flex}.ck-widget.raw-html-embed .raw-html-embed__preview-content{background-color:var(--ck-color-base-foreground);border-collapse:separate;box-sizing:border-box;display:table;margin:auto;position:relative;width:100%}.ck-widget.raw-html-embed .raw-html-embed__preview-content>*{margin-left:auto;margin-right:auto}.ck-widget.raw-html-embed .raw-html-embed__preview-content{border-spacing:7px}.ck-widget.raw-html-embed .raw-html-embed__preview-placeholder{align-items:center;color:var(--ck-html-embed-source-disabled-color);display:flex;inset:0;justify-content:center;position:absolute}.ck-widget.raw-html-embed{font-style:normal}:root{--ck-html-object-embed-unfocused-outline-width:1px}.ck-widget.html-object-embed{background-color:var(--ck-color-base-foreground);font-size:var(--ck-font-size-base);min-width:calc(76px + var(--ck-spacing-standard));padding:var(--ck-spacing-small);padding-top:calc(var(--ck-font-size-tiny) + var(--ck-spacing-large))}.ck-widget.html-object-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-object-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.html-object-embed:before{background:#999;border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);content:attr(data-html-object-embed-label);font-family:var(--ck-font-face);font-size:var(--ck-font-size-tiny);font-style:normal;font-weight:400;left:var(--ck-spacing-standard);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-object-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);position:absolute;top:0;transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}.ck-widget.html-object-embed .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck-widget.html-object-embed .html-object-embed__content{pointer-events:none}div.ck-widget.html-object-embed{margin:1em auto}span.ck-widget.html-object-embed{display:inline-block}:root{--ck-content-color-image-caption-background:#f7f7f7;--ck-content-color-image-caption-text:#333;--ck-color-image-caption-highlighted-background:#fd0}@media (forced-colors:none){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:ck-image-caption-highlight .6s ease-out}}@media (prefers-reduced-motion:reduce){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:none}}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highlighted-background)}to{background-color:var(--ck-content-color-image-caption-background)}}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}:root{--ck-content-image-style-spacing:1.5em;--ck-content-inline-image-style-spacing:calc(var(--ck-content-image-style-spacing)/2)}:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{animation:fadeIn .7s}@media (prefers-reduced-motion:reduce){:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{animation:none;opacity:1}}.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline{position:relative}.ck.ck-editor__editable .image .ck-progress-bar,.ck.ck-editor__editable .image-inline .ck-progress-bar{background:var(--ck-color-upload-bar-background);height:2px;left:0;position:absolute;top:0;transition:width .1s;width:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20;--ck-image-upload-icon-width:2px;--ck-image-upload-icon-is-visible:clamp(0px,100% - 50px,1px)}.ck-image-upload-complete-icon{animation-delay:0s,3s;animation-duration:.5s,.5s;animation-fill-mode:forwards,forwards;animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;background:var(--ck-color-image-upload-icon-background);border-radius:50%;display:block;font-size:calc(1px*var(--ck-image-upload-icon-size));height:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size));opacity:0;overflow:hidden;position:absolute;right:min(var(--ck-spacing-medium),6%);top:min(var(--ck-spacing-medium),6%);width:calc(var(--ck-image-upload-icon-is-visible)*var(--ck-image-upload-icon-size))}.ck-image-upload-complete-icon:after{animation-delay:.5s;animation-duration:.5s;animation-fill-mode:forwards;animation-name:ck-upload-complete-icon-check;border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);box-sizing:border-box;content:"";height:0;left:25%;opacity:0;position:absolute;top:50%;transform:scaleX(-1)rotate(135deg);transform-origin:0 0;width:0}@media (prefers-reduced-motion:reduce){.ck-image-upload-complete-icon{animation-duration:0s}.ck-image-upload-complete-icon:after{animation:none;height:.45em;opacity:1;width:.3em}}.ck-image-upload-complete-icon{z-index:1}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{height:0;opacity:1;width:0}33%{height:0;width:.3em}to{height:.45em;opacity:1;width:.3em}}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px;--ck-upload-placeholder-image-aspect-ratio:2.8}.ck .ck-image-upload-placeholder{margin:0;width:100%}.ck .ck-image-upload-placeholder.image-inline{width:calc(var(--ck-upload-placeholder-loader-size)*2*var(--ck-upload-placeholder-image-aspect-ratio))}.ck .ck-image-upload-placeholder img{aspect-ratio:var(--ck-upload-placeholder-image-aspect-ratio)}.ck .ck-upload-placeholder-loader{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;top:0;width:100%}.ck .ck-upload-placeholder-loader:before{animation:ck-upload-placeholder-loader 1s linear infinite;border-radius:50%;border-right:2px solid #0000;border-top:3px solid var(--ck-color-upload-placeholder-loader);content:"";height:var(--ck-upload-placeholder-loader-size);position:relative;width:var(--ck-upload-placeholder-loader-size)}.ck .ck-upload-placeholder-loader{left:0}@keyframes ck-upload-placeholder-loader{to{transform:rotate(1turn)}}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{overflow:hidden;padding-left:inherit;padding-right:inherit;text-overflow:ellipsis;white-space:nowrap}.ck.ck-editor__editable .image{z-index:1}.ck.ck-editor__editable .image.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable .image-inline img{height:auto}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline img{max-width:none}.ck.ck-editor__editable img.image_placeholder{background-size:100% 100%}:root{--ck-image-insert-insert-by-url-width:250px}.ck.ck-image-insert-url{--ck-input-width:100%;width:400px}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-column-gap:var(--ck-spacing-large);display:grid;margin-top:var(--ck-spacing-large)}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-cancel,.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-save{justify-content:center;min-width:auto}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-template-columns:repeat(2,1fr)}.ck.ck-image-insert-url{padding:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-image-insert-form>.ck.ck-button{display:block;width:100%}[dir=ltr] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:left}[dir=rtl] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:right}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:first-child){border-top:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:last-child){border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible,.ck.ck-image-insert-form>.ck.ck-image-insert-url{min-width:var(--ck-image-insert-insert-by-url-width)}.ck.ck-image-insert-form>.ck.ck-image-insert-url{padding:var(--ck-spacing-large)}.ck.ck-image-insert-form:focus{outline:none}:root{--ck-image-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-image-custom-resize-form-width:300px}}.ck.ck-image-custom-resize-form.ck-responsive-form{width:var(--ck-image-custom-resize-form-width)}:root{--ck-text-alternative-form-width:340px}@media screen and (width<=600px){:root{--ck-text-alternative-form-width:300px}}.ck.ck-text-alternative-form.ck-responsive-form{width:var(--ck-text-alternative-form-width)}.ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-link_selected span.image-inline{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{border-right:1px solid var(--ck-color-base-text);height:100%;margin-right:-1px;outline:1px solid #ffffff80}:root{--ck-link-bookmark-icon-size:calc(var(--ck-icon-size)*0.7)}.ck.ck-toolbar.ck-link-toolbar>.ck-toolbar__items{flex-wrap:nowrap}a.ck.ck-button.ck-link-toolbar__preview{align-items:center;color:var(--ck-color-link-default);cursor:pointer;display:flex;flex-direction:row;justify-content:center;padding:0 var(--ck-spacing-medium)}a.ck.ck-button.ck-link-toolbar__preview .ck.ck-button__label{max-width:var(--ck-input-width);text-overflow:ellipsis}a.ck.ck-button.ck-link-toolbar__preview,a.ck.ck-button.ck-link-toolbar__preview:active,a.ck.ck-button.ck-link-toolbar__preview:focus,a.ck.ck-button.ck-link-toolbar__preview:hover{background:0 0}a.ck.ck-button.ck-link-toolbar__preview:active{box-shadow:none}a.ck.ck-button.ck-link-toolbar__preview:focus,a.ck.ck-button.ck-link-toolbar__preview:hover{text-decoration:underline}a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon{height:var(--ck-link-bookmark-icon-size);width:var(--ck-link-bookmark-icon-size)}[dir=ltr] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-left:var(--ck-spacing-small);margin-right:var(--ck-spacing-tiny)}[dir=rtl] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-left:var(--ck-spacing-tiny);margin-right:var(--ck-spacing-small)}a.ck.ck-button.ck-link-toolbar__preview:has(.ck-icon){padding-left:var(--ck-spacing-extra-tiny)}.ck.ck-link-toolbar__preview{display:inline-block}.ck.ck-link-toolbar__preview .ck-button__label{overflow:hidden}:root{--ck-link-image-indicator-icon-size:20;--ck-link-image-indicator-icon-is-visible:clamp(0px,100% - 50px,1px)}:is(.ck.ck-editor__editable figure.image>a,.ck.ck-editor__editable a span.image-inline):after{background-color:#0006;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzUuNzUgMCAwIDEtLjIxNy4yMDYgNS4yNTEgNS4yNTEgMCAwIDEtOC41MDMtNS45NTUuNy43IDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NHptNS40OTQtNS4zMzVhLjc1Ljc1IDAgMCAxLS4xMi4yNzRsLTEuMTQ3IDEuNjM5YS43NS43NSAwIDEgMS0xLjIyOC0uODZsLjg2LTEuMjNhMy43NSAzLjc1IDAgMCAwLTYuMTQ0LTQuMzAxbC0uODYgMS4yMjlhLjc1Ljc1IDAgMCAxLTEuMjI5LS44NmwxLjE0OC0xLjY0YS43NS43NSAwIDAgMSAuMjE3LS4yMDYgNS4yNTEgNS4yNTEgMCAwIDEgOC41MDMgNS45NTVtLTQuNTYzLTIuNTMyYS43NS43NSAwIDAgMSAuMTg0IDEuMDQ1bC0zLjE1NSA0LjUwNWEuNzUuNzUgMCAxIDEtMS4yMjktLjg2bDMuMTU1LTQuNTA2YS43NS43NSAwIDAgMSAxLjA0NS0uMTg0Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:14px;border-radius:100%;content:"";display:block;height:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size));overflow:hidden;position:absolute;right:min(var(--ck-spacing-medium),6%);top:min(var(--ck-spacing-medium),6%);width:calc(var(--ck-link-image-indicator-icon-is-visible)*var(--ck-link-image-indicator-icon-size))}:root{--ck-link-panel-width:340px;--ck-link-provider-list-item-text-height:calc(var(--ck-line-height-base)*var(--ck-font-size-base));--ck-link-provider-list-item-height:calc(var(--ck-link-provider-list-item-text-height) + var(--ck-spacing-small) + var(--ck-spacing-small))}@media screen and (width<=600px){:root{--ck-link-panel-width:300px}}.ck.ck-form.ck-link-form{padding-bottom:0;width:var(--ck-link-panel-width)}@media screen and (width<=600px){.ck.ck-form.ck-link-form.ck-responsive-form .ck-labeled-field-view{margin:0}}.ck.ck-form.ck-link-form .ck-link-form__providers-list{border-top:1px solid var(--ck-color-base-border);display:flex;flex-direction:column}.ck.ck-form.ck-link-form .ck-link-form__providers-list:has(.ck-list__item:nth-child(n+5)){max-height:calc(var(--ck-link-provider-list-item-height)*4 + var(--ck-spacing-large) + 1px);overflow:auto}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button{border-radius:0;padding:var(--ck-spacing-small) var(--ck-spacing-large)}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button>.ck-button__label{flex-grow:1;overflow:hidden;text-overflow:ellipsis}.ck.ck-link-form .ck-link__items:empty{display:none}:root{--ck-link-properties-width:340px}@media screen and (width<=600px){:root{--ck-link-properties-width:300px}}.ck.ck-link-properties{width:var(--ck-link-properties-width)}:root{--ck-link-providers-width:340px;--ck-link-list-view-max-height:240px;--ck-link-list-view-icon-size:calc(var(--ck-icon-size)*0.8)}@media screen and (width<=600px){:root{--ck-link-providers-width:300px}}.ck.ck-link-providers{width:var(--ck-link-providers-width)}.ck.ck-link-providers .ck-form__header__label{overflow:hidden;text-overflow:ellipsis}.ck.ck-link-providers>.ck-link-providers__list{max-height:min(var(--ck-link-list-view-max-height),40vh);overflow:hidden auto}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-icon{flex-shrink:0;height:var(--ck-link-list-view-icon-size);width:var(--ck-link-list-view-icon-size)}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-button__label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ck.ck-link-providers>.ck-link-providers__list{overscroll-behavior:contain}.ck.ck-link-providers .ck-link__empty-list-info{font-style:italic;padding:calc(var(--ck-spacing-large)*2) var(--ck-spacing-medium);text-align:center}.ck-editor__editable .ck-list-bogus-paragraph{display:block}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{column-gap:var(--ck-spacing-medium);grid-template-columns:repeat(3,auto);padding:var(--ck-spacing-large);row-gap:var(--ck-spacing-medium)}.ck.ck-list-styles-list .ck-button{box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button,.ck.ck-list-styles-list .ck-button .ck-icon{height:var(--ck-list-style-button-size);width:var(--ck-list-style-button-size)}.ck.ck-list-styles-list{display:grid}.ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}.ck.ck-list-properties.ck-list-properties_without-styles>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{min-width:auto;width:100%}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{background:0 0;margin-bottom:calc(var(--ck-spacing-tiny)*-1);padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{background:0 0;border-color:#0000;box-shadow:none}:root{--ck-content-list-marker-color:var(--ck-content-font-color);--ck-content-list-marker-font-family:var(--ck-content-font-family);--ck-content-list-marker-font-size:var(--ck-content-font-size);--ck-content-todo-list-checkmark-size:16px}.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{-webkit-appearance:none;border:0;display:inline-block;height:var(--ck-content-todo-list-checkmark-size);left:-25px;margin-left:0;margin-right:-15px;position:relative;right:0;vertical-align:middle;width:var(--ck-content-todo-list-checkmark-size)}[dir=rtl]:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input){left:0;margin-left:-15px;margin-right:0;right:-25px}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{border:1px solid #333;border-radius:2px;box-sizing:border-box;content:"";display:block;height:100%;position:absolute;transition:box-shadow .25s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{transition:none}}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):after{border-color:#0000;border-style:solid;border-width:0 calc(var(--ck-content-todo-list-checkmark-size)/8) calc(var(--ck-content-todo-list-checkmark-size)/8) 0;box-sizing:content-box;content:"";display:block;height:calc(var(--ck-content-todo-list-checkmark-size)/2.6);left:calc(var(--ck-content-todo-list-checkmark-size)/3);pointer-events:none;position:absolute;top:calc(var(--ck-content-todo-list-checkmark-size)/5.3);transform:rotate(45deg);width:calc(var(--ck-content-todo-list-checkmark-size)/5.3)}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:before{background:#26ab33;border-color:#26ab33}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:after{border-color:#fff}.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{cursor:pointer}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):hover:before{box-shadow:0 0 0 5px #0000001a}.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{align-items:center;background:var(--ck-color-base-foreground);display:flex;flex-direction:column;padding:calc(var(--ck-spacing-standard)*3)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{background-position:50%;background-size:cover;height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);min-width:var(--ck-media-embed-placeholder-icon-size)}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{height:100%;width:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);font-style:italic;text-align:center;text-overflow:ellipsis;white-space:nowrap}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{display:block;overflow:hidden}.ck-media__wrapper[data-oembed-url*="goo.gl/maps"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="maps.app.goo.gl"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="maps.google.com"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSlzY2FsZSguOTgwMTIpIj48cmVjdCB3aWR0aD0iNjAuMDk5IiBoZWlnaHQ9IjYwLjA5OSIgeD0iMTc2LjAzMSIgeT0iMjMxLjM5OSIgZmlsbD0iIzM0YTY2OCIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiIHJ4PSI1LjIzOCIgcnk9IjUuMjM4Ii8+PHBhdGggZmlsbD0iIzVjODhjNSIgZD0ibTIwNi40NzcgMjYwLjktMjguOTg3IDI4Ljk4N2E1LjIyIDUuMjIgMCAwIDAgMy43OCAxLjYxaDQ5LjYyMWMxLjY5NCAwIDMuMTktLjc5OCA0LjE0Ni0yLjAzN3oiLz48cGF0aCBmaWxsPSIjZGQ0YjNlIiBkPSJNMjI2Ljc0MiAyMjIuOTg4Yy05LjI2NiAwLTE2Ljc3NyA3LjE3LTE2Ljc3NyAxNi4wMTQuMDA3IDIuNzYyLjY2MyA1LjQ3NCAyLjA5MyA3Ljg3NS40My43MDMuODMgMS40MDggMS4xOSAyLjEwN3EuNS43NTMuOTUgMS41MDguNTE1LjcxNS45ODggMS40NGMxLjMxIDEuNzY5IDIuNSAzLjUwMiAzLjYzNyA1LjE2OC43OTMgMS4yNzUgMS42ODMgMi42NCAyLjQ2NiAzLjk5IDIuMzYzIDQuMDk0IDQuMDA3IDguMDkyIDQuNiAxMy45MTR2LjAxMmMuMTgyLjQxMi41MTYuNjY2Ljg3OS42NjcuNDAzLS4wMDEuNzY4LS4zMTQuOTMtLjc5OS42MDMtNS43NTYgMi4yMzgtOS43MjkgNC41ODUtMTMuNzk0Ljc4Mi0xLjM1IDEuNjczLTIuNzE1IDIuNDY1LTMuOTkgMS4xMzctMS42NjYgMi4zMjgtMy40IDMuNjM4LTUuMTY5cS40NzMtLjcyMy45ODgtMS40MzkuNDUtLjc1NS45NS0xLjUwOGMuMzU5LS43Ljc2LTEuNDA0IDEuMTktMi4xMDcgMS40MjYtMi40MDIgMi01LjExNCAyLjAwNC03Ljg3NSAwLTguODQ0LTcuNTExLTE2LjAxNC0xNi43NzYtMTYuMDE0IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxlbGxpcHNlIGN4PSIyMjYuNzQyIiBjeT0iMjM5LjAwMiIgZmlsbD0iIzgwMmQyNyIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiIHJ4PSI1LjgyOCIgcnk9IjUuNTY0Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTE5MC4zMDEgMjM3LjI4M2MtNC42NyAwLTguNDU3IDMuODUzLTguNDU3IDguNjA2czMuNzg2IDguNjA3IDguNDU3IDguNjA3YzMuMDQzIDAgNC44MDYtLjk1OCA2LjMzNy0yLjUxNiAxLjUzLTEuNTU3IDIuMDg3LTMuOTEzIDIuMDg3LTYuMjlxLS4wMDEtLjU0My0uMDY0LTEuMDc5aC04LjI1N3YzLjA0M2g0Ljg1Yy0uMTk3Ljc1OS0uNTMxIDEuNDUtMS4wNTggMS45ODYtLjk0Mi45NTgtMi4wMjggMS41NDgtMy45MDEgMS41NDgtMi44NzYgMC01LjIwOC0yLjM3Mi01LjIwOC01LjI5OSAwLTIuOTI2IDIuMzMyLTUuMjk5IDUuMjA4LTUuMjk5IDEuMzk5IDAgMi42MTguNDA3IDMuNTg0IDEuMjkzbDIuMzgxLTIuMzhxLS4wMDEtLjAwMy0uMDA0LS4wMDVjLTEuNTg4LTEuNTI0LTMuNjItMi4yMTUtNS45NTUtMi4yMTVtNC40MyA1LjY2LjAwMy4wMDZ2LS4wMDN6IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGZpbGw9IiNjM2MzYzMiIGQ9Im0yMTUuMTg0IDI1MS45MjktNy45OCA3Ljk3OSAyOC40NzcgMjguNDc1YTUuMiA1LjIgMCAwIDAgLjQ0OS0yLjEyM3YtMzEuMTY1Yy0uNDY5LjY3NS0uOTM0IDEuMzQ5LTEuMzgyIDIuMDA1LS43OTIgMS4yNzUtMS42ODIgMi42NC0yLjQ2NSAzLjk5LTIuMzQ3IDQuMDY1LTMuOTgyIDguMDM4LTQuNTg1IDEzLjc5NC0uMTYyLjQ4NS0uNTI3Ljc5OC0uOTMuNzk5LS4zNjMtLjAwMS0uNjk3LS4yNTUtLjg3OS0uNjY3di0uMDEyYy0uNTkzLTUuODIyLTIuMjM3LTkuODItNC42LTEzLjkxNC0uNzgzLTEuMzUtMS42NzMtMi43MTUtMi40NjYtMy45OS0xLjEzNy0xLjY2Ni0yLjMyNy0zLjQtMy42MzctNS4xNjl6Ii8+PHBhdGggZmlsbD0iI2ZkZGM0ZiIgZD0ibTIxMi45ODMgMjQ4LjQ5NS0zNi45NTIgMzYuOTUzdi44MTJhNS4yMjcgNS4yMjcgMCAwIDAgNS4yMzggNS4yMzhoMS4wMTVsMzUuNjY2LTM1LjY2NmExMzYgMTM2IDAgMCAwLTIuNzY0LTMuOSAzOCAzOCAwIDAgMC0uOTg5LTEuNDQgMzUgMzUgMCAwIDAtLjk1LTEuNTA4Yy0uMDgzLS4xNjItLjE3Ni0uMzI2LS4yNjQtLjQ4OSIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMjExLjk5OCAyNjEuMDgzLTYuMTUyIDYuMTUxIDI0LjI2NCAyNC4yNjRoLjc4MWE1LjIyNyA1LjIyNyAwIDAgMCA1LjIzOS01LjIzOHYtMS4wNDV6IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDI0IiBoZWlnaHQ9IjEwMjQiIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPjx0aXRsZT5GaWxsIDE8L3RpdGxlPjxwYXRoIGZpbGw9IiNmZmZmZmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTk2Ny40ODQgMEg1Ni41MTdDMjUuMzA0IDAgMCAyNS4zMDQgMCA1Ni41MTd2OTEwLjk2NkMwIDk5OC42OTQgMjUuMjk3IDEwMjQgNTYuNTIyIDEwMjRINTQ3VjYyOEg0MTRWNDczaDEzM1YzNTkuMDI5YzAtMTMyLjI2MiA4MC43NzMtMjA0LjI4MiAxOTguNzU2LTIwNC4yODIgNTYuNTEzIDAgMTA1LjA4NiA0LjIwOCAxMTkuMjQ0IDYuMDg5VjI5OWwtODEuNjE2LjAzN2MtNjMuOTkzIDAtNzYuMzg0IDMwLjQ5Mi03Ni4zODQgNzUuMjM2VjQ3M2gxNTMuNDg3bC0xOS45ODYgMTU1SDcwN3YzOTZoMjYwLjQ4NGMzMS4yMTMgMCA1Ni41MTYtMjUuMzAzIDU2LjUxNi01Ni41MTZWNTYuNTE1QzEwMjQgMjUuMzAzIDk5OC42OTcgMCA5NjcuNDg0IDAiLz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTA0IiBoZWlnaHQ9IjUwNCIgdmlld0JveD0iMCAwIDUwNCA1MDQiPjx0aXRsZT5nbHlwaC1sb2dvX01heTIwMTY8L3RpdGxlPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNMCAuMTU5aDUwMy44NDFWNTAzLjk0SDB6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PG1hc2sgaWQ9ImIiIGZpbGw9IiNmZmYiPjx1c2UgeGxpbms6aHJlZj0iI2EiLz48L21hc2s+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI1MS45MjEuMTU5Yy02OC40MTggMC03Ni45OTcuMjktMTAzLjg2NyAxLjUxNi0yNi44MTQgMS4yMjMtNDUuMTI3IDUuNDgyLTYxLjE1MSAxMS43MS0xNi41NjYgNi40MzctMzAuNjE1IDE1LjA1MS00NC42MjEgMjkuMDU2LTE0LjAwNSAxNC4wMDYtMjIuNjE5IDI4LjA1NS0yOS4wNTYgNDQuNjIxLTYuMjI4IDE2LjAyNC0xMC40ODcgMzQuMzM3LTExLjcxIDYxLjE1MUMuMjkgMTc1LjA4MyAwIDE4My42NjIgMCAyNTIuMDhjMCA2OC40MTcuMjkgNzYuOTk2IDEuNTE2IDEwMy44NjYgMS4yMjMgMjYuODE0IDUuNDgyIDQ1LjEyNyAxMS43MSA2MS4xNTEgNi40MzcgMTYuNTY2IDE1LjA1MSAzMC42MTUgMjkuMDU2IDQ0LjYyMSAxNC4wMDYgMTQuMDA1IDI4LjA1NSAyMi42MTkgNDQuNjIxIDI5LjA1NyAxNi4wMjQgNi4yMjcgMzQuMzM3IDEwLjQ4NiA2MS4xNTEgMTEuNzA5IDI2Ljg3IDEuMjI2IDM1LjQ0OSAxLjUxNiAxMDMuODY3IDEuNTE2IDY4LjQxNyAwIDc2Ljk5Ni0uMjkgMTAzLjg2Ni0xLjUxNiAyNi44MTQtMS4yMjMgNDUuMTI3LTUuNDgyIDYxLjE1MS0xMS43MDkgMTYuNTY2LTYuNDM4IDMwLjYxNS0xNS4wNTIgNDQuNjIxLTI5LjA1NyAxNC4wMDUtMTQuMDA2IDIyLjYxOS0yOC4wNTUgMjkuMDU3LTQ0LjYyMSA2LjIyNy0xNi4wMjQgMTAuNDg2LTM0LjMzNyAxMS43MDktNjEuMTUxIDEuMjI2LTI2Ljg3IDEuNTE2LTM1LjQ0OSAxLjUxNi0xMDMuODY2IDAtNjguNDE4LS4yOS03Ni45OTctMS41MTYtMTAzLjg2Ny0xLjIyMy0yNi44MTQtNS40ODItNDUuMTI3LTExLjcwOS02MS4xNTEtNi40MzgtMTYuNTY2LTE1LjA1Mi0zMC42MTUtMjkuMDU3LTQ0LjYyMS0xNC4wMDYtMTQuMDA1LTI4LjA1NS0yMi42MTktNDQuNjIxLTI5LjA1Ni0xNi4wMjQtNi4yMjgtMzQuMzM3LTEwLjQ4Ny02MS4xNTEtMTEuNzFDMzI4LjkxNy40NDkgMzIwLjMzOC4xNTkgMjUxLjkyMS4xNTltMCA0NS4zOTFjNjcuMjY1IDAgNzUuMjMzLjI1NyAxMDEuNzk3IDEuNDY5IDI0LjU2MiAxLjEyIDM3LjkwMSA1LjIyNCA0Ni43NzggOC42NzQgMTEuNzU5IDQuNTcgMjAuMTUxIDEwLjAyOSAyOC45NjYgMTguODQ1czE0LjI3NSAxNy4yMDcgMTguODQ1IDI4Ljk2NmMzLjQ1IDguODc3IDcuNTU0IDIyLjIxNiA4LjY3NCA0Ni43NzggMS4yMTIgMjYuNTY0IDEuNDY5IDM0LjUzMiAxLjQ2OSAxMDEuNzk4IDAgNjcuMjY1LS4yNTcgNzUuMjMzLTEuNDY5IDEwMS43OTctMS4xMiAyNC41NjItNS4yMjQgMzcuOTAxLTguNjc0IDQ2Ljc3OC00LjU3IDExLjc1OS0xMC4wMjkgMjAuMTUxLTE4Ljg0NSAyOC45NjZzLTE3LjIwNyAxNC4yNzUtMjguOTY2IDE4Ljg0NWMtOC44NzcgMy40NS0yMi4yMTYgNy41NTQtNDYuNzc4IDguNjc0LTI2LjU2IDEuMjEyLTM0LjUyNyAxLjQ2OS0xMDEuNzk3IDEuNDY5LTY3LjI3MSAwLTc1LjIzNy0uMjU3LTEwMS43OTgtMS40NjktMjQuNTYyLTEuMTItMzcuOTAxLTUuMjI0LTQ2Ljc3OC04LjY3NC0xMS43NTktNC41Ny0yMC4xNTEtMTAuMDI5LTI4Ljk2Ni0xOC44NDVzLTE0LjI3NS0xNy4yMDctMTguODQ1LTI4Ljk2NmMtMy40NS04Ljg3Ny03LjU1NC0yMi4yMTYtOC42NzQtNDYuNzc4LTEuMjEyLTI2LjU2NC0xLjQ2OS0zNC41MzItMS40NjktMTAxLjc5NyAwLTY3LjI2Ni4yNTctNzUuMjM0IDEuNDY5LTEwMS43OTggMS4xMi0yNC41NjIgNS4yMjQtMzcuOTAxIDguNjc0LTQ2Ljc3OCA0LjU3LTExLjc1OSAxMC4wMjktMjAuMTUxIDE4Ljg0NS0yOC45NjZzMTcuMjA3LTE0LjI3NSAyOC45NjYtMTguODQ1YzguODc3LTMuNDUgMjIuMjE2LTcuNTU0IDQ2Ljc3OC04LjY3NCAyNi41NjQtMS4yMTIgMzQuNTMyLTEuNDY5IDEwMS43OTgtMS40NjkiIG1hc2s9InVybCgjYikiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjUxLjkyMSAzMzYuMDUzYy00Ni4zNzggMC04My45NzQtMzcuNTk2LTgzLjk3NC04My45NzNzMzcuNTk2LTgzLjk3NCA4My45NzQtODMuOTc0YzQ2LjM3NyAwIDgzLjk3MyAzNy41OTYgODMuOTczIDgzLjk3NCAwIDQ2LjM3Ny0zNy41OTYgODMuOTczLTgzLjk3MyA4My45NzNtMC0yMTMuMzM4Yy03MS40NDcgMC0xMjkuMzY1IDU3LjkxOC0xMjkuMzY1IDEyOS4zNjUgMCA3MS40NDYgNTcuOTE4IDEyOS4zNjQgMTI5LjM2NSAxMjkuMzY0IDcxLjQ0NiAwIDEyOS4zNjQtNTcuOTE4IDEyOS4zNjQtMTI5LjM2NCAwLTcxLjQ0Ny01Ny45MTgtMTI5LjM2NS0xMjkuMzY0LTEyOS4zNjVNNDE2LjYyNyAxMTcuNjA0YzAgMTYuNjk2LTEzLjUzNSAzMC4yMy0zMC4yMzEgMzAuMjMtMTYuNjk1IDAtMzAuMjMtMTMuNTM0LTMwLjIzLTMwLjIzczEzLjUzNS0zMC4yMzEgMzAuMjMtMzAuMjMxYzE2LjY5NiAwIDMwLjIzMSAxMy41MzUgMzAuMjMxIDMwLjIzMSIvPjwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA0MDAgNDAwIj48cGF0aCBkPSJNNDAwIDIwMGMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDBTMCAzMTAuNSAwIDIwMCA4OS41IDAgMjAwIDBzMjAwIDg5LjUgMjAwIDIwME0xNjMuNCAzMDUuNWM4OC43IDAgMTM3LjItNzMuNSAxMzcuMi0xMzcuMiAwLTIuMSAwLTQuMi0uMS02LjIgOS40LTYuOCAxNy42LTE1LjMgMjQuMS0yNS04LjYgMy44LTE3LjkgNi40LTI3LjcgNy42IDEwLTYgMTcuNi0xNS40IDIxLjItMjYuNy05LjMgNS41LTE5LjYgOS41LTMwLjYgMTEuNy04LjgtOS40LTIxLjMtMTUuMi0zNS4yLTE1LjItMjYuNiAwLTQ4LjIgMjEuNi00OC4yIDQ4LjIgMCAzLjguNCA3LjUgMS4zIDExLTQwLjEtMi03NS42LTIxLjItOTkuNC01MC40LTQuMSA3LjEtNi41IDE1LjQtNi41IDI0LjIgMCAxNi43IDguNSAzMS41IDIxLjUgNDAuMS03LjktLjItMTUuMy0yLjQtMjEuOC02di42YzAgMjMuNCAxNi42IDQyLjggMzguNyA0Ny4zLTQgMS4xLTguMyAxLjctMTIuNyAxLjctMy4xIDAtNi4xLS4zLTkuMS0uOSA2LjEgMTkuMiAyMy45IDMzLjEgNDUgMzMuNS0xNi41IDEyLjktMzcuMyAyMC42LTU5LjkgMjAuNi0zLjkgMC03LjctLjItMTEuNS0uNyAyMS4xIDEzLjggNDYuNSAyMS44IDczLjcgMjEuOCIgc3R5bGU9ImZpbGw6I2ZmZiIvPjwvc3ZnPg==)}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}:is(.ck-media__wrapper[data-oembed-url*=twitter\.com],.ck-media__wrapper[data-oembed-url*="google.com/maps"],.ck-media__wrapper[data-oembed-url*="goo.gl/maps"],.ck-media__wrapper[data-oembed-url*="maps.google.com"],.ck-media__wrapper[data-oembed-url*="maps.app.goo.gl"],.ck-media__wrapper[data-oembed-url*=facebook\.com],.ck-media__wrapper[data-oembed-url*=instagram\.com]) .ck-media__placeholder__icon *{display:none}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}.ck .ck-widget.media:-webkit-drag>.ck-widget__resizer{display:none}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-media-embed-button .ck-button__label{width:4em}:root{--ck-media-embed-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-media-embed-custom-resize-form-width:300px}}.ck.ck-media-embed-custom-resize-form.ck-responsive-form{width:var(--ck-media-embed-custom-resize-form-width)}:root{--ck-content-media-style-spacing:1.5em}.ck.ck-media-form{align-items:flex-start;display:flex;flex-flow:row;width:400px}.ck.ck-media-form .ck-labeled-field-view{display:inline-block;width:100%}.ck.ck-media-form .ck-label{display:none}.ck.ck-media-form .ck-input{width:100%}@media screen and (width<=600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}:root{--ck-content-color-mention-background:#9900301a;--ck-content-color-mention-text:#990030;--ck-mention-list-max-height:300px}.ck.ck-mentions{max-height:var(--ck-mention-list-max-height);overflow:hidden auto;overscroll-behavior:contain}.ck.ck-mentions>.ck-list__item{flex-shrink:0;overflow:hidden}div.ck.ck-balloon-panel.ck-mention-balloon{z-index:calc(var(--ck-z-dialog) + 1)}:root{--ck-color-minimap-tracker-background:208,0%,51%;--ck-color-minimap-iframe-outline:#bfbfbf;--ck-color-minimap-iframe-shadow:#0000001c;--ck-color-minimap-progress-background:#666}.ck.ck-minimap{background:var(--ck-color-base-background);position:absolute;user-select:none}.ck.ck-minimap,.ck.ck-minimap iframe{height:100%;width:100%}.ck.ck-minimap iframe{border:0;box-shadow:0 2px 5px var(--ck-color-minimap-iframe-shadow);margin:0;outline:1px solid var(--ck-color-minimap-iframe-outline);pointer-events:none;position:relative}.ck.ck-minimap .ck.ck-minimap__position-tracker{background:hsla(var(--ck-color-minimap-tracker-background),.2);position:absolute;top:0;transition:background .1s ease-in-out;width:100%;z-index:1}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker{transition:none}}.ck.ck-minimap .ck.ck-minimap__position-tracker:hover{background:hsla(var(--ck-color-minimap-tracker-background),.3)}.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover{background:hsla(var(--ck-color-minimap-tracker-background),.4)}:is(.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover):after{opacity:1}.ck.ck-minimap .ck.ck-minimap__position-tracker:after{background:var(--ck-color-minimap-progress-background);border:1px solid var(--ck-color-base-background);border-radius:3px;color:var(--ck-color-base-background);content:attr(data-progress) "%";font-size:10px;opacity:0;padding:2px 4px;position:absolute;right:5px;top:5px;transition:opacity .1s ease-in-out}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker:after{transition:none}}:root{--ck-color-restricted-editing-exception-background:#ffa94c33;--ck-color-restricted-editing-exception-hover-background:#ffa94c59;--ck-color-restricted-editing-exception-brackets:#cc690066;--ck-color-restricted-editing-selected-exception-background:#ffa94c80;--ck-color-restricted-editing-selected-exception-brackets:#cc690099}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right,var(--ck-color-restricted-editing-exception-brackets) 0,var(--ck-color-restricted-editing-exception-brackets) 5px,#0000 6px,#0000 calc(100% - 6px),var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}@media (prefers-reduced-motion:reduce){.ck-editor__editable .restricted-editing-exception{transition:none}}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right,var(--ck-color-restricted-editing-selected-exception-brackets) 0,var(--ck-color-restricted-editing-selected-exception-brackets) 5px,var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted,.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception,.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}:root{--ck-show-blocks-border-color:#757575}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) address{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-address-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-address-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) aside{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-aside-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-aside-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) blockquote{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-blockquote-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-blockquote-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) details{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-details-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-details-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) div:not(.ck-widget,.ck-widget *){--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-div-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-div-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) footer{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-footer-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-footer-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h1{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h1-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h1-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h2{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h2-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h2-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h3{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h3-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h3-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h4{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h4-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h4-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h5{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h5-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h5-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h6{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h6-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h6-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) header{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-header-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-header-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) main{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-main-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-main-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) nav{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-nav-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-nav-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) pre{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-pre-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-pre-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ol{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ol-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ol-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ul{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ul-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ul-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) p{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-p-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-p-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) section{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-section-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-section-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(figure.image,figure.table) figcaption{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-figcaption-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-figcaption-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-repeat:no-repeat;padding-top:15px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption):where(:not(.ck-widget_selected):not(.ck-widget:hover)){outline:1px dashed var(--ck-show-blocks-border-color)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(ltr) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-ltr);background-position:1px 1px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(rtl) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-rtl);background-position:calc(100% - 1px) 1px}.ck-source-editing-area{overflow:hidden;position:relative}.ck-source-editing-area textarea,.ck-source-editing-area:after{border:1px solid #0000;font-family:monospace;font-size:var(--ck-font-size-normal);line-height:var(--ck-line-height-base);margin:0;padding:var(--ck-spacing-large);white-space:pre-wrap}.ck-source-editing-area:after{content:attr(data-value) " ";display:block;visibility:hidden}.ck-source-editing-area textarea{border-color:var(--ck-color-base-border);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0;box-sizing:border-box;height:100%;outline:none;overflow:hidden;position:absolute;resize:none;width:100%}.ck-source-editing-area textarea:not([readonly]):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow),0 0;outline:none}.ck.ck-special-characters-navigation>.ck-label{max-width:160px;overflow:hidden;text-overflow:ellipsis}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}@media screen and (width<=600px){.ck.ck-special-characters-navigation{max-width:190px}.ck.ck-special-characters-navigation>.ck-form__header__label{overflow:hidden;text-overflow:ellipsis}}.ck.ck-special-characters>.ck-dialog__content>div{grid-column-gap:0;grid-row-gap:0;display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr auto;height:100%;max-width:100%;width:350px}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories{grid-area:1/1/2/2;padding:var(--ck-spacing-medium) var(--ck-spacing-large)}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view{padding-top:var(--ck-spacing-standard);width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s both;background:var(--ck-color-base-error);color:var(--ck-color-base-background);min-width:var(--ck-table-properties-min-error-width);padding:var(--ck-spacing-small) var(--ck-spacing-medium);text-align:center}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-style:solid;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size)}@media (prefers-reduced-motion:reduce){.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown{display:block;width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button>span{width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-grid{grid-area:2/1/3/2;max-height:200px}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-info{grid-area:3/1/4/2}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow:hidden auto}.ck.ck-character-grid .ck-character-grid__tiles{grid-template-columns:repeat(auto-fill,minmax(var(--ck-character-grid-tile-size),1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard);display:grid}.ck.ck-character-grid .ck-character-grid__tile{border:0;font-size:1.5em;height:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);padding:0;transition:box-shadow .2s;width:var(--ck-character-grid-tile-size)}@media (prefers-reduced-motion:reduce){.ck.ck-character-grid .ck-character-grid__tile{transition:none}}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){border:0;box-shadow:inset 0 0 0 1px var(--ck-color-base-background),0 0 0 2px var(--ck-color-focus-border)}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);text-align:center;width:100%}.ck.ck-character-grid{max-width:100%}.ck.ck-character-info{border-top:1px solid var(--ck-color-base-border);display:flex;padding:var(--ck-spacing-small) var(--ck-spacing-large)}.ck.ck-character-info>*{font-size:var(--ck-font-size-small);text-transform:uppercase}.ck.ck-character-info .ck-character-info__name{max-width:280px;overflow:hidden;text-overflow:ellipsis}.ck.ck-character-info .ck-character-info__code{opacity:.6}.ck.ck-character-info{justify-content:space-between}.ck.ck-dropdown.ck-style-dropdown.ck-style-dropdown_multiple-active>.ck-button>.ck-button__label{font-style:italic}:root{--ck-style-panel-button-width:120px;--ck-style-panel-button-height:80px;--ck-style-panel-button-label-background:#f0f0f0;--ck-style-panel-button-hover-label-background:#ebebeb;--ck-style-panel-button-hover-border-color:#b3b3b3;--ck-style-panel-columns:3}.ck.ck-style-panel .ck-style-grid{column-gap:var(--ck-spacing-large);display:grid;grid-template-columns:repeat(var(--ck-style-panel-columns),auto);row-gap:var(--ck-spacing-large)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{--ck-color-button-default-hover-background:var(--ck-color-base-background);--ck-color-button-default-active-background:var(--ck-color-base-background);display:flex;height:var(--ck-style-panel-button-height);justify-content:space-between;padding:0;width:var(--ck-style-panel-button-width)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-button__label{flex-shrink:0;height:22px;line-height:22px;overflow:hidden;padding:0 var(--ck-spacing-medium);text-overflow:ellipsis;width:100%}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-style-grid__button__preview{align-items:center;background:var(--ck-color-base-background);border:2px solid var(--ck-color-base-background);display:flex;flex-basis:100%;flex-grow:1;opacity:.9;overflow:hidden;padding:var(--ck-spacing-medium);place-content:center flex-start;width:100%}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled{--ck-color-button-default-disabled-background:var(--ck-color-base-foreground)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled:not(:focus){border-color:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled .ck-style-grid__button__preview{border-color:var(--ck-color-base-foreground);filter:saturate(.3);opacity:.4}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on{border-color:var(--ck-color-base-active)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on .ck-button__label{box-shadow:0 -1px 0 var(--ck-color-base-active);z-index:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on:hover{border-color:var(--ck-color-base-active-focus)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on) .ck-button__label{background:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on):hover .ck-button__label{background:var(--ck-style-panel-button-hover-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on){border-color:var(--ck-style-panel-button-hover-border-color)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on) .ck-style-grid__button__preview{opacity:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{flex-direction:column}.ck.ck-style-panel .ck-style-grid{justify-content:start}.ck.ck-style-panel .ck-style-panel__style-group>.ck-label{margin:var(--ck-spacing-large) 0}.ck.ck-style-panel .ck-style-panel__style-group:first-child>.ck-label{margin-top:0}:root{--ck-style-panel-max-height:470px}.ck.ck-style-panel{max-height:var(--ck-style-panel-max-height);overflow-y:auto;padding:var(--ck-spacing-large)}.ck-editor__editable .ck-table-bogus-paragraph{display:inline-block;width:100%}:root{--ck-color-table-focused-cell-background:#9ec9fa4d;--ck-table-content-default-border-color:#d4d4d4;--ck-table-border-none-helper-line-color:#d4d4d4;--ck-table-border-none-helper-line-style:dashed;--ck-table-border-none-helper-line-width:1px}.ck-widget.table table[style*=border-style\:none],.ck-widget.table table[style*=border-width\:0],.ck-widget.table table[style*=border\:0],.ck-widget.table table[style*=border\:none]{outline:var(--ck-table-content-default-border-color) 1px dashed}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable{outline:unset}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected).ck-editor__nested-editable_focused,:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected):focus{background:var(--ck-color-table-focused-cell-background);outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table){--ck-table-border-none-helper-line:var(--ck-table-border-none-helper-line-width) var(--ck-table-border-none-helper-line-style) var(--ck-table-border-none-helper-line-color)}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(td,th):where([style*=border\:none],[style*=border\:0],[style*=border-style\:none],[style*=border-width\:0]){border:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-top-style\:none],[style*=border-top-width\:0]){border-top:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-right-style\:none],[style*=border-right-width\:0]){border-right:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-bottom-style\:none],[style*=border-bottom-width\:0]){border-bottom:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-left-style\:none],[style*=border-left-width\:0]){border-left:var(--ck-table-border-none-helper-line)!important}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{align-self:flex-end;padding:0;width:25%}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{background:0 0;margin-top:var(--ck-spacing-standard)}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__horizontal-alignment-toolbar{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width)*2 + var(--ck-spacing-large));max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0;width:var(--ck-table-form-dimensions-input-width)}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__vertical-alignment-toolbar{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:first-of-type{flex-grow:.57}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:last-of-type{flex-grow:.43}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar .ck-button{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{max-width:80px;min-width:80px;width:80px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width)*2 + var(--ck-spacing-large));max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0;width:var(--ck-table-form-dimensions-input-width)}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0;max-width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);width:var(--ck-table-form-default-input-width)}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:flex-end;display:inline-block;height:var(--ck-ui-component-min-height);left:-.5ch;line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);overflow:visible;position:relative;width:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button{flex-grow:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button .ck-button__label{color:currentColor}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__cell-type-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width)*2 + var(--ck-spacing-large));max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0;width:var(--ck-table-form-dimensions-input-width)}:root{--ck-table-layout-widget-type-around-button-size:16px;--ck-table-layout-widget-type-around-icon-width:10px;--ck-table-layout-widget-type-around-icon-height:8px;--ck-table-layout-widget-handler-icon-size:10px;--ck-table-layout-default-border-color:#d4d4d4}.ck-editor__editable .table.layout-table>table{border-collapse:revert;height:100%;width:100%}.ck-editor__editable .table.layout-table>table:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){border-color:#0000;border-width:0;outline:none}.ck-editor__editable .table.layout-table>table>tbody>tr>td{border-color:var(--ck-table-layout-default-border-color);border-style:dashed;box-shadow:revert;min-width:2em;padding:revert;text-indent:1px}.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=" width:"],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=";width:"],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style^=width\:]{min-width:auto}.ck-editor__editable .table.layout-table>table>tbody>tr>td:focus{background-color:#0000}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){border-color:#0000;border-width:0;outline:var(--ck-table-layout-default-border-color) 1px dashed;outline-offset:-1px}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]):focus{outline:var(--ck-color-focus-border) 1px solid}.ck-editor__editable .table.layout-table>table>tbody>tr>td>.ck-table-bogus-paragraph{text-indent:0;width:calc(100% - 1px)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around{--ck-widget-type-around-button-size:var(--ck-table-layout-widget-type-around-button-size)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after,.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before{transform:translateY(0);z-index:2}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before{border-radius:0 0 100px 100px;left:min(10%,30px);margin-left:var(--ck-table-layout-widget-type-around-button-size)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before:after{border-radius:0 0 100px 100px}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after,.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after:after{border-radius:100px 100px 0 0}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button svg{height:var(--ck-table-layout-widget-type-around-icon-height);width:var(--ck-table-layout-widget-type-around-icon-width)}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_with-selection-handle>.ck-widget__selection-handle{--ck-widget-handler-icon-size:var(--ck-table-layout-widget-handler-icon-size);transform:translateY(calc(0px - var(--ck-widget-outline-thickness)));z-index:3}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:0}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:0}.ck-editor__editable .table.layout-table.ck-widget:hover{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle{opacity:.75;visibility:visible}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle:hover{opacity:1}.ck-editor__editable .table.layout-table.ck-widget:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_selected{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table{display:table;margin:0}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:first-child{margin-top:var(--ck-spacing-large)}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:last-child,.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:nth-last-child(2):has(+.ck-fake-selection-container){margin-bottom:var(--ck-spacing-large)}.ck.ck-form__row>:not(.ck-label)+*{margin-inline-start:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{min-width:100%;width:100%}.ck.ck-form__row.ck-table-form__action-row{justify-content:flex-end;margin-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel,.ck.ck-form__row.ck-table-form__action-row .ck-button-save{justify-content:center}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form{--ck-table-form-default-input-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{max-width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);width:var(--ck-table-form-default-input-width)}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width)*2 + var(--ck-spacing-large));max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0;width:var(--ck-table-form-dimensions-input-width)}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width{margin:0;max-width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);width:var(--ck-table-form-default-input-width)}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{align-self:flex-end;display:inline-block;height:var(--ck-ui-component-min-height);left:-.5ch;line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);overflow:visible;position:relative;width:0}.ck.ck-table-form .ck-form__row.ck-table-form__background-row,.ck.ck-table-form .ck-form__row.ck-table-form__border-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{align-items:center;flex-wrap:wrap}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view{align-items:center;display:flex;flex-direction:column-reverse}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view .ck.ck-dropdown{flex-grow:0}.ck.ck-table-form .ck-form__row:not(.ck-table-form__action-row)>:not(.ck-label,.ck-table-form__dimension-operator){flex-grow:1}.ck.ck-table-form .ck.ck-labeled-field-view{padding-top:var(--ck-spacing-standard)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:ck-table-form-labeled-view-status-appear .15s both;background:var(--ck-color-base-error);border-radius:var(--ck-rounded-corners-radius);bottom:calc(var(--ck-table-properties-error-arrow-size)*-1);color:var(--ck-color-base-background);left:50%;min-width:var(--ck-table-properties-min-error-width);padding:var(--ck-spacing-small) var(--ck-spacing-medium);position:absolute;text-align:center;transform:translate(-50%,100%)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-style:solid;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);content:"";left:50%;position:absolute;top:calc(var(--ck-table-properties-error-arrow-size)*-1);transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{align-content:baseline;align-self:flex-end;flex-basis:0;flex-wrap:wrap}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{background:0 0;margin-top:var(--ck-spacing-standard)}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{flex:1}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}:root{--ck-content-table-style-spacing:1.5em}.ck-editor__editable .table.layout-table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-align-left{margin-right:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-align-right{margin-left:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-block-align-right{margin-left:auto;margin-right:0}:root{--ck-content-color-table-caption-background:#f7f7f7;--ck-content-color-table-caption-text:#333;--ck-color-table-caption-highlighted-background:#fd0}@media (forced-colors:none){:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).table__caption_highlighted{animation:ck-table-caption-highlight .6s ease-out}}:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).ck-placeholder:before{overflow:hidden;padding-left:inherit;padding-right:inherit;text-overflow:ellipsis;white-space:nowrap}@keyframes ck-table-caption-highlight{0%{background-color:var(--ck-color-table-caption-highlighted-background)}to{background-color:var(--ck-content-color-table-caption-background)}}:root{--ck-table-selected-cell-background:#9ecffa4d}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected{box-shadow:unset;caret-color:#0000;position:relative}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:after{background-color:var(--ck-table-selected-cell-background);content:"";inset:0;pointer-events:none;position:absolute}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:focus{background-color:#0000}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget{outline:unset}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle{display:none}:root{--ck-color-table-column-resizer-hover:var(--ck-color-base-active);--ck-table-column-resizer-width:7px;--ck-table-column-resizer-position-offset:calc(var(--ck-table-column-resizer-width)*-0.5 - 0.5px)}.ck.ck-editor__editable .table td,.ck.ck-editor__editable .table th{position:relative}.ck.ck-editor__editable .table .ck-table-column-resizer{bottom:0;cursor:col-resize;position:absolute;right:var(--ck-table-column-resizer-position-offset);top:0;user-select:none;width:var(--ck-table-column-resizer-width);z-index:var(--ck-z-default)}.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer,.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer{display:none}.ck.ck-editor__editable .table .ck-table-column-resizer:hover,.ck.ck-editor__editable .table .ck-table-column-resizer__active{background-color:var(--ck-color-table-column-resizer-hover);opacity:.25}.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer{left:var(--ck-table-column-resizer-position-offset);right:unset}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-input-text){border-bottom-right-radius:0;border-top-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-input-text){border-bottom-left-radius:0;border-top-left-radius:0}.ck.ck-input-color>.ck.ck-input-text:focus{z-index:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{display:flex;padding:0}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-bottom-left-radius:0;border-top-left-radius:0}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-left:1px solid #0000}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-bottom-right-radius:0;border-top-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-right:1px solid #0000}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border:1px solid var(--ck-color-input-border);border-radius:var(--ck-rounded-corners-radius);height:20px;overflow:hidden;position:relative;width:20px}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{background:red;border-radius:2px;display:block;height:150%;left:50%;position:absolute;top:-30%;transform:rotate(45deg);transform-origin:50%;width:8%}.ck.ck-input-color .ck.ck-input-color__remove-color{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:calc(var(--ck-spacing-standard)/2) var(--ck-spacing-standard);width:100%}.ck.ck-input-color .ck.ck-input-color__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-input-border)}[dir=ltr] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-right-radius:0}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon){margin-left:var(--ck-spacing-standard);margin-right:0}.ck.ck-input-color{display:flex;flex-direction:row-reverse;width:100%}.ck.ck-input-color>input.ck.ck-input-text{flex-grow:1;min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{display:flex;flex-flow:wrap;padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;width:calc(var(--ck-insert-table-dropdown-box-width)*10 + var(--ck-insert-table-dropdown-box-margin)*20 + var(--ck-insert-table-dropdown-padding)*2)}.ck .ck-insert-table-dropdown__label,.ck[dir=rtl] .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{border:1px solid var(--ck-color-base-border);border-radius:1px;margin:var(--ck-insert-table-dropdown-box-margin);min-height:var(--ck-insert-table-dropdown-box-height);min-width:var(--ck-insert-table-dropdown-box-width);outline:none;transition:none}@media (prefers-reduced-motion:reduce){.ck .ck-insert-table-dropdown-grid-box{transition:none}}.ck .ck-insert-table-dropdown-grid-box:focus{box-shadow:none}.ck .ck-insert-table-dropdown-grid-box.ck-on{background:var(--ck-color-focus-outer-shadow);border-color:var(--ck-color-focus-border)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:.2s;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background);--ck-color-resizer:var(--ck-color-focus-border);--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2;--ck-resizer-border-radius:var(--ck-border-radius);--ck-resizer-tooltip-offset:10px;--ck-resizer-tooltip-height:calc(var(--ck-spacing-small)*2 + 10px)}.ck .ck-widget{outline-color:#0000;outline-style:solid;outline-width:var(--ck-widget-outline-thickness);transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}@media (prefers-reduced-motion:reduce){.ck .ck-widget{transition:none}}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget{position:relative}.ck .ck-editor__nested-editable{border:1px solid #0000}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{box-shadow:var(--ck-inner-shadow),0 0}@media (forced-colors:none){.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{background-color:var(--ck-color-widget-editable-focus-background)}}:is(.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus):not(td,th){border:var(--ck-focus-ring);outline:none}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{background-color:#0000;border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;box-sizing:border-box;left:calc(0px - var(--ck-widget-outline-thickness));opacity:0;padding:4px;top:0;transform:translateY(-100%);transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{color:var(--ck-color-widget-drag-handler-icon-color);height:var(--ck-widget-handler-icon-size);width:var(--ck-widget-handler-icon-size)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{background-color:var(--ck-color-widget-hover-border);opacity:1;visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{background-color:var(--ck-color-focus-border);opacity:1;visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck .ck-widget:has(.ck-widget.table:hover){outline-color:#0000}.ck .ck-widget.ck-widget_with-selection-handle:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle,:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable:not(.ck-pagination-view) blockquote>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable:not(.ck-pagination-view)>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);color:var(--ck-color-resizer-tooltip-text);display:block;font-size:var(--ck-font-size-tiny);height:var(--ck-resizer-tooltip-height);line-height:var(--ck-resizer-tooltip-height);padding:0 var(--ck-spacing-small)}.ck .ck-size-view.ck-orientation-above-center,.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right{position:absolute}.ck .ck-size-view.ck-orientation-top-left{left:var(--ck-resizer-tooltip-offset);top:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{right:var(--ck-resizer-tooltip-offset);top:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-above-center{left:50%;top:calc(var(--ck-resizer-tooltip-height)*-1);transform:translate(-50%)}:root{--ck-resizer-size:10px;--ck-resizer-offset:calc(var(--ck-resizer-size)/-2 - 2px);--ck-resizer-border-width:1px}.ck .ck-widget__resizer{display:none;left:0;outline:1px solid var(--ck-color-resizer);pointer-events:none;position:absolute;top:0}.ck .ck-widget__resizer__handle{background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius);height:var(--ck-resizer-size);pointer-events:all;position:absolute;width:var(--ck-resizer-size)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{left:var(--ck-resizer-offset);top:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{right:var(--ck-resizer-offset);top:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{cursor:nesw-resize}.ck .ck-widget_with-resizer{position:relative}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button);border-radius:100px;display:block;height:var(--ck-widget-type-around-button-size);opacity:0;overflow:hidden;pointer-events:none;position:absolute;transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);width:var(--ck-widget-type-around-button-size);z-index:var(--ck-z-default)}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg{height:8px;left:50%;margin-top:1px;position:absolute;top:50%;transform:translate(-50%,-50%);transition:transform .5s;width:10px}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button svg{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg *{fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-dasharray:10;stroke-dashoffset:0;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5px}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button svg{z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button:hover{animation:ck-widget-type-around-button-sonar 1s infinite}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:ck-widget-type-around-arrow-dash 2s linear}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:ck-widget-type-around-arrow-tip-dash 2s linear}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button:hover,.ck .ck-widget .ck-widget__type-around__button:hover svg line,.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:none}}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{left:min(10%,30px);top:calc(var(--ck-widget-outline-thickness)*-.5);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(var(--ck-widget-outline-thickness)*-.5);right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}:is(.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover):after{background:linear-gradient(135deg,#fff0,#ffffff4d);border-radius:100px;content:"";display:block;height:calc(var(--ck-widget-type-around-button-size) - 2px);left:1px;position:absolute;top:1px;width:calc(var(--ck-widget-type-around-button-size) - 2px);z-index:calc(var(--ck-z-default) + 1)}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before{outline-color:#0000}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{animation:ck-widget-type-around-fake-caret-pulse 1s linear infinite forwards;background:var(--ck-color-base-text);height:1px;outline:1px solid #ffffff80;pointer-events:none}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}:is(:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected,:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{opacity:0}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer{opacity:0}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;left:0;position:absolute;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(var(--ck-widget-outline-thickness)*-1);right:calc(var(--ck-widget-outline-thickness)*-1)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:block;top:calc(var(--ck-widget-outline-thickness)*-1 - 1px)}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(var(--ck-widget-outline-thickness)*-1 - 1px);display:block}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:0;margin-right:20px}:is(.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget:has(.ck-widget.table:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10px}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7px}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates),var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}.ck.ck-editor__editable.ck-restricted-editing_mode_restricted div.restricted-editing-exception .ck-widget__type-around{display:initial} \ No newline at end of file diff --git a/src/web/public/js/vendor/ckeditor5/ckeditor5.css b/src/web/public/js/vendor/ckeditor5/ckeditor5.css deleted file mode 100644 index 466976b..0000000 --- a/src/web/public/js/vendor/ckeditor5/ckeditor5.css +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options - */ -:root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218, 81.8%, 56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:#77baf84d;--ck-color-focus-error-shadow:#ff401f4d;--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:#00000026;--ck-color-shadow-drop-active:#0003;--ck-color-shadow-inner:#0000001a;--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:#0000001a;--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-dialog-background:var(--ck-custom-background);--ck-color-dialog-form-header-border:var(--ck-custom-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:#1fb0ff1a;--ck-color-link-fake-selection:#1fb0ff4d;--ck-color-highlight-background:#ff0;--ck-color-light-red:#fcc;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica, Arial, Tahoma, Verdana, Sans-Serif;--ck-font-size-tiny:.7em;--ck-font-size-small:.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck.ck-reset,.ck.ck-reset_all,.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){box-sizing:border-box;vertical-align:middle;word-wrap:break-word;background:0 0;border:0;width:auto;height:auto;margin:0;padding:0;text-decoration:none;transition:none;position:static}.ck.ck-reset_all,.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){border-collapse:collapse;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);color:var(--ck-color-text);text-align:left;white-space:nowrap;cursor:auto;float:none}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all textarea:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-rounded-corners-radius:0}.ck-rounded-corners{--ck-rounded-corners-radius:var(--ck-border-radius)}:root{--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:.6em;--ck-spacing-extra-large:calc(var(--ck-spacing-unit) * 2);--ck-spacing-large:calc(var(--ck-spacing-unit) * 1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit) * .8);--ck-spacing-medium-small:calc(var(--ck-spacing-unit) * .667);--ck-spacing-small:calc(var(--ck-spacing-unit) * .5);--ck-spacing-tiny:calc(var(--ck-spacing-unit) * .3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit) * .16)}.ck-hidden{display:none!important}:root{--ck-z-default:1;--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:9999}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-font-size:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-powered-by-line-height:calc(var(--ck-font-size-base) * 10 / 13);--ck-powered-by-letter-spacing:calc(var(--ck-font-size-base) * -.2 / 13);--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border);--ck-powered-by-svg-width:53;--ck-powered-by-svg-height:10;--ck-powered-by-icon-width:calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-width) / 13);--ck-powered-by-icon-height:calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-height) / 13)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);box-shadow:none;background:var(--ck-powered-by-background);min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{cursor:pointer;opacity:.66;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal);align-items:center;display:flex}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{font-size:var(--ck-powered-by-font-size);letter-spacing:var(--ck-powered-by-letter-spacing);text-transform:uppercase;cursor:pointer;color:var(--ck-powered-by-text-color);margin-right:4px;padding-left:2px;font-weight:700;line-height:normal}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;width:var(--ck-powered-by-icon-width);height:var(--ck-powered-by-icon-height);display:block}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0%);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-evaluation-badge-font-size:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-evaluation-badge-line-height:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-evaluation-badge-letter-spacing:calc(var(--ck-font-size-base) * -.2 / 13);--ck-evaluation-badge-padding-vertical:2px;--ck-evaluation-badge-padding-horizontal:4px;--ck-evaluation-badge-text-color:#4f4f4f;--ck-evaluation-badge-border-radius:var(--ck-border-radius);--ck-evaluation-badge-background:#fff;--ck-evaluation-badge-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon{--ck-border-radius:var(--ck-evaluation-badge-border-radius);box-shadow:none;background:var(--ck-evaluation-badge-background);min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge{line-height:var(--ck-evaluation-badge-line-height);padding:var(--ck-evaluation-badge-padding-vertical) var(--ck-evaluation-badge-padding-horizontal)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge .ck-evaluation-badge__label{font-size:var(--ck-evaluation-badge-font-size);letter-spacing:var(--ck-evaluation-badge-letter-spacing);text-transform:uppercase;color:var(--ck-evaluation-badge-text-color);padding:0 2px;font-weight:700;line-height:normal;display:block}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-evaluation-badge-border-color)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child){margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (width<=600px){.ck.ck-responsive-form{width:calc(.8 * var(--ck-input-width));padding:0}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text,.ck.ck-responsive-form .ck-labeled-field-view .ck-input-number{width:100%;min-width:0}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-large);border-radius:0}:is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:after{content:"";z-index:1;width:0;position:absolute;top:-1px;bottom:-1px;right:-1px}.ck.ck-responsive-form .ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:focus:after{display:none}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck-vertical-form .ck-button:after{content:"";z-index:1;width:0;position:absolute;top:-1px;bottom:-1px;right:-1px}.ck-vertical-form .ck-button:focus:after{display:none}:root{--ck-form-default-width:340px}.ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form.ck-form_default-width{width:var(--ck-form-default-width)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text,.ck.ck-form .ck.ck-input-number{width:0;min-width:100%}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit{flex-direction:column;align-items:stretch;padding:0}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit>.ck{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit .ck-button_with-text{justify-content:center}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}}[dir=ltr] .ck.ck-form.ck-responsive-form>:not(:first-child){margin-left:0}[dir=rtl] .ck.ck-form.ck-responsive-form>:not(:last-child){margin-left:0}.ck.ck-aria-live-announcer{position:absolute;top:-10000px;left:-10000px}.ck.ck-aria-live-region-list{list-style-type:none}:root{--ck-accessibility-help-dialog-max-width:600px;--ck-accessibility-help-dialog-max-height:400px;--ck-accessibility-help-dialog-border-color:#ccced1;--ck-accessibility-help-dialog-code-background-color:#ededed;--ck-accessibility-help-dialog-kbd-shadow-color:#9c9c9c}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content{padding:var(--ck-spacing-large);max-width:var(--ck-accessibility-help-dialog-max-width);max-height:var(--ck-accessibility-help-dialog-max-height);user-select:text;border:1px solid #0000;overflow:auto}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content *{white-space:normal}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content .ck-label{display:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3{font-size:1.2em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4{font-size:1em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content p,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content table{margin:1em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl{border-top:1px solid var(--ck-accessibility-help-dialog-border-color);border-bottom:none;grid-template-columns:2fr 1fr;display:grid}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd{border-bottom:1px solid var(--ck-accessibility-help-dialog-border-color);padding:.4em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt{grid-column-start:1}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd{text-align:right;grid-column-start:2}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code{background:var(--ck-accessibility-help-dialog-code-background-color);vertical-align:middle;text-align:center;border-radius:2px;padding:.4em;font-size:.9em;line-height:1;display:inline-block}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code{font-family:monospace}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd{min-width:1.8em;box-shadow:0px 1px 1px var(--ck-accessibility-help-dialog-kbd-shadow-color);margin:0 1px}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd+kbd{margin-left:2px}.ck.ck-button,:where(a).ck.ck-button{--ck-button-background:var(--ck-color-button-default-background);--ck-button-hover-background:var(--ck-color-button-default-hover-background);--ck-button-active-background:var(--ck-color-button-default-active-background);--ck-button-disabled-background:var(--ck-color-button-default-disabled-background);background:var(--ck-button-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):hover{background:var(--ck-button-hover-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):active{background:var(--ck-button-active-background)}.ck.ck-button,:where(a).ck.ck-button{border-radius:var(--ck-rounded-corners-radius);white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;-webkit-appearance:none;-webkit-user-select:none;user-select:none;border:1px solid #0000;align-items:center;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;display:inline-flex;position:relative}@media (prefers-reduced-motion:reduce){.ck.ck-button,:where(a).ck.ck-button{transition:none}}:is(.ck.ck-button,:where(a).ck.ck-button):active,:is(.ck.ck-button,:where(a).ck.ck-button):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use,:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use *{color:inherit}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:left}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:right}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{display:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke{color:inherit;opacity:.5}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-left:var(--ck-spacing-large)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-right:var(--ck-spacing-large)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled{background:var(--ck-button-disabled-background)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:active,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow), 0 0}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__icon,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__keystroke{opacity:.3}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-left:var(--ck-spacing-medium)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__label{display:inline-block}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-keystroke .ck-button__label{flex-grow:1}:is(.ck.ck-button,:where(a).ck.ck-button).ck-on{--ck-button-background:var(--ck-color-button-on-background);--ck-button-hover-background:var(--ck-color-button-on-hover-background);--ck-button-active-background:var(--ck-color-button-on-active-background);--ck-button-disabled-background:var(--ck-color-button-on-disabled-background);color:var(--ck-color-button-on-color)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-save{color:var(--ck-color-button-save)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-cancel{color:var(--ck-color-button-cancel)}[dir=ltr] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:left}[dir=rtl] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:right}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-button_with-text){justify-content:center}.ck.ck-button-action,a.ck.ck-button-action{--ck-button-background:var(--ck-color-button-action-background);--ck-button-hover-background:var(--ck-color-button-action-hover-background);--ck-button-active-background:var(--ck-color-button-action-active-background);--ck-button-disabled-background:var(--ck-color-button-action-disabled-background);color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}:root{--ck-switch-button-toggle-width:2.61538em;--ck-switch-button-toggle-inner-size:calc(1.07692em + 1px);--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2px );--ck-switch-button-inner-hover-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton,.ck.ck-button.ck-switchbutton:hover,.ck.ck-button.ck-switchbutton:focus,.ck.ck-button.ck-switchbutton:active,.ck.ck-button.ck-switchbutton.ck-on:hover,.ck.ck-button.ck-switchbutton.ck-on:focus,.ck.ck-button.ck-switchbutton.ck-on:active{color:inherit;background:0 0}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-right:calc(2 * var(--ck-spacing-large))}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-left:calc(2 * var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:var(--ck-rounded-corners-radius);width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background);border:1px solid #0000;transition:background .4s,box-shadow .2s ease-in-out,outline .2s ease-in-out}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-left:auto}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:calc(.5 * var(--ck-rounded-corners-radius));width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s}@media (prefers-reduced-motion:reduce){.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{transition:none}}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:var(--ck-switch-button-inner-hover-shadow)}.ck.ck-button.ck-switchbutton .ck-button__toggle{display:block}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton:focus{box-shadow:none;border-color:#0000;outline:none}.ck.ck-button.ck-switchbutton:focus .ck-button__toggle{box-shadow:0 0 0 1px var(--ck-color-base-background), 0 0 0 5px var(--ck-color-focus-outer-shadow);outline-offset:1px;outline:var(--ck-focus-ring)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(calc(-1 * var(--ck-switch-button-translation)))}.ck.ck-button.ck-list-item-button{padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard))}.ck.ck-button.ck-list-item-button,.ck.ck-button.ck-list-item-button.ck-on{background:var(--ck-color-list-background);color:var(--ck-color-text)}[dir=ltr] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-right:var(--ck-spacing-small)}.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled),.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button.ck-on:hover{background:var(--ck-color-list-button-hover-background)}:is(.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled),.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button.ck-on:hover):not(.ck-disabled){color:var(--ck-color-text)}.ck.ck-list-item-button{min-height:unset;border-radius:0;width:100%}[dir=ltr] .ck.ck-list-item-button{text-align:left}[dir=rtl] .ck.ck-list-item-button{text-align:right}[dir=ltr] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-right:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-holder{width:.9em;height:.9em;display:inline-flex}[dir=ltr] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-right:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-left:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-icon{height:100%}:root{--ck-collapsible-arrow-size:calc(.5 * var(--ck-icon-size))}.ck.ck-collapsible>.ck.ck-button{width:100%;color:inherit;border-radius:0;font-weight:700}.ck.ck-collapsible>.ck.ck-button:focus{background:0 0}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:not(:focus),.ck.ck-collapsible>.ck.ck-button:hover:not(:focus){box-shadow:none;background:0 0;border-color:#0000}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:var(--ck-spacing-medium) var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#166fd4}.ck.ck-color-grid{grid-gap:5px;padding:8px;display:grid}.ck.ck-color-grid__tile{transition:box-shadow .2s}@media (forced-colors:none){.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);border:0;padding:0}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile.ck-color-selector__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border)}}@media (forced-colors:active){.ck.ck-color-grid__tile{width:unset;height:unset;min-width:unset;min-height:unset;padding:0 var(--ck-spacing-small)}.ck.ck-color-grid__tile .ck-button__label{display:inline-block}}@media (prefers-reduced-motion:reduce){.ck.ck-color-grid__tile{transition:none}}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile .ck.ck-icon{color:var(--ck-color-color-grid-check-icon);display:none}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}.color-picker-hex-input{width:max-content}.color-picker-hex-input .ck.ck-input{min-width:unset}.ck.ck-color-picker__row{margin:var(--ck-spacing-large) 0 0;width:unset;flex-flow:row;justify-content:space-between;display:flex}.ck.ck-color-picker__row .ck.ck-labeled-field-view{padding-top:unset}.ck.ck-color-picker__row .ck.ck-input-text{width:unset}.ck.ck-color-picker__row .ck-color-picker__hash-view{padding-top:var(--ck-spacing-tiny);padding-right:var(--ck-spacing-medium)}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker{align-items:center;width:100%;display:flex}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker){justify-content:flex-start}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker{padding:calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker:not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-left:var(--ck-spacing-standard)}.ck.ck-color-selector .ck-color-grids-fragment label.ck.ck-color-grid__label{font-weight:unset}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker{padding:8px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker{min-width:180px;height:100px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation){border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue){border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius)}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation-pointer),.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue-pointer){width:15px;height:15px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar{flex-direction:row;justify-content:space-around;padding:0 8px 8px;display:flex}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-save,.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-cancel{flex:1}:root{--ck-dialog-overlay-background-color:#00000080;--ck-dialog-drop-shadow:0px 0px 6px 2px #00000026;--ck-dialog-max-width:100vw;--ck-dialog-max-height:90vh;--ck-color-dialog-background:var(--ck-color-base-background);--ck-color-dialog-form-header-border:var(--ck-color-base-border)}.ck.ck-dialog-overlay{background:var(--ck-dialog-overlay-background-color);z-index:var(--ck-z-dialog);user-select:none;overscroll-behavior:none;animation:.3s ck-dialog-fade-in;position:fixed;inset:0}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent{pointer-events:none;background:0 0;animation:none}.ck.ck-dialog{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;--ck-drop-shadow:var(--ck-dialog-drop-shadow);background:var(--ck-color-dialog-background);max-height:var(--ck-dialog-max-height);max-width:var(--ck-dialog-max-width);border:1px solid var(--ck-color-base-border);overscroll-behavior:contain;overscroll-behavior:none;width:fit-content;position:absolute}.ck.ck-dialog .ck.ck-form__header{border-bottom:1px solid var(--ck-color-dialog-form-header-border);flex-shrink:0}.ck.ck-dialog:not(.ck-dialog_modal) .ck.ck-form__header .ck-form__header__label{cursor:grab}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent .ck.ck-dialog{pointer-events:all}.ck-dialog-scroll-locked{overflow:hidden}@keyframes ck-dialog-fade-in{0%{background:0 0}to{background:var(--ck-dialog-overlay-background-color)}}.ck.ck-dialog .ck.ck-dialog__actions{padding:var(--ck-spacing-large);display:flex}.ck.ck-dialog .ck.ck-dialog__actions>*+*{margin-left:var(--ck-spacing-large)}.ck.ck-dialog .ck.ck-dialog__actions{justify-content:flex-end}:root{--ck-dropdown-arrow-size:calc(.5 * var(--ck-icon-size));--ck-dropdown-max-width:75vw}.ck.ck-dropdown{font-size:inherit;display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size);pointer-events:none;z-index:var(--ck-z-default)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{text-overflow:ellipsis;width:7em;overflow:hidden}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active{box-shadow:none}:is(.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active):focus{box-shadow:var(--ck-focus-outer-shadow), 0 0}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-dropdown__panel{z-index:var(--ck-z-panel);max-width:var(--ck-dropdown-max-width);display:none;position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n{left:50%;transform:translate(-50%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw{left:75%;transform:translate(-75%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme{left:25%;transform:translate(-25%)}.ck.ck-dropdown__panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);min-width:100%;bottom:0}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}.ck.ck-dropdown__panel:focus{outline:none}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}[dir=ltr] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton>.ck-splitbutton__arrow:not(:focus){border-top-width:0;border-bottom-width:0}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action{border-bottom-left-radius:0}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow{border-bottom-right-radius:0}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{content:"";background-color:var(--ck-color-split-button-hover-border);width:1px;height:100%;position:absolute}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:focus:after{--ck-color-split-button-hover-border:var(--ck-color-focus-border)}[dir=ltr] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{left:-1px}[dir=rtl] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{right:-1px}:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-background)}:is(:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover)):after{display:none}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-hover-background)}.ck.ck-splitbutton{font-size:inherit}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}:root{--ck-toolbar-dropdown-max-width:60vw}.ck.ck-toolbar-dropdown>.ck-dropdown__panel{width:max-content;max-width:var(--ck-toolbar-dropdown-max-width)}.ck.ck-toolbar-dropdown>.ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:first-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:last-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-dropdown-menu-list__nested-menu{display:block}:root{--ck-dropdown-menu-menu-item-min-width:18em}.ck.ck-dropdown-menu-list__nested-menu__item{min-width:var(--ck-dropdown-menu-menu-item-min-width)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button{border-radius:0}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container,.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container{margin-left:calc(-1 * var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus{box-shadow:none;border-color:#0000}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button{width:100%;padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));border-radius:0}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus{box-shadow:none;border-color:#0000}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-icon-spacing:not(:has(.ck-button__icon))>.ck-button__label{margin-left:calc(var(--ck-icon-size) - var(--ck-spacing-small))}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow{width:var(--ck-dropdown-arrow-size);pointer-events:none;z-index:var(--ck-z-default)}[dir=ltr] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard);margin-right:calc(-1 * var(--ck-spacing-small));transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small);margin-left:calc(-1 * var(--ck-spacing-small));transform:rotate(90deg)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-dropdown-menu-list__nested-menu__button__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}:root{--ck-dropdown-menu-menu-panel-max-width:75vw}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);height:fit-content;max-width:var(--ck-dropdown-menu-menu-panel-max-width);max-height:314px;position:absolute;bottom:0;overflow-y:auto}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:after,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:before{display:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_es,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_se{border-top-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ws,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_sw{border-top-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_en,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ne{border-bottom-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_wn,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_nw{border-bottom-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:focus{outline:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-editable-blur-selection:#d9d9d9}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content{border-radius:var(--ck-rounded-corners-radius);border:1px solid var(--ck-color-base-border);border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content.ck-sticky-panel__content_sticky{border-bottom-width:1px}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-menu-bar{border:0;border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-toolbar{border:0}.ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:var(--ck-rounded-corners-radius)}.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow), 0 0;outline:none}.ck.ck-editor__editable_inline{padding:0 var(--ck-spacing-standard);border:1px solid #0000;overflow:auto}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-editor__editable_inline.ck-editor__editable_inline-root br{margin-top:0;margin-bottom:0}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background)}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0;flex-direction:row;justify-content:space-between;align-items:flex-start;display:flex}.ck.ck-form__row.ck-form__row_large-top-padding{padding-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_with-submit{flex-wrap:nowrap}.ck.ck-form__row.ck-form__row_with-submit>:not(:first-child){margin-inline-start:var(--ck-spacing-standard)}.ck.ck-form__row>.ck.ck-form__row{padding:0}:root{--ck-form-header-height:3.384em}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border);flex-flow:row;flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.ck.ck-form__header>.ck-icon{flex-shrink:0;margin-inline-end:var(--ck-spacing-medium)}.ck.ck-form__header .ck-form__header__label{--ck-font-size-base:1.153em;font-weight:700}.ck.ck-form__header:has(.ck-button-back.ck-hidden){padding-inline:var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-form__header:has(.ck-button-back:not(.ck-hidden)){padding-inline:var(--ck-spacing-small) var(--ck-spacing-small)}.ck.ck-form__header>.ck-button-back{margin-inline-end:var(--ck-spacing-small)}.ck.ck-form__header>.ck.ck-button{flex-shrink:0}.ck.ck-form__header h2.ck-form__header__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}:root{--ck-icon-size:calc(var(--ck-line-height-base) * var(--ck-font-size-normal));--ck-icon-font-size:.833335em}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:var(--ck-icon-font-size);cursor:inherit}.ck.ck-icon *{cursor:inherit}.ck.ck-icon.ck-icon_inherit-color{color:inherit}.ck.ck-icon.ck-icon_inherit-color *{color:inherit}.ck.ck-icon.ck-icon_inherit-color *:not([fill]){fill:currentColor}.ck.ck-icon{vertical-align:middle}:root{--ck-input-width:18em;--ck-input-text-width:var(--ck-input-width)}.ck.ck-input{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .1s ease-in-out,border .1s ease-in-out}@media (prefers-reduced-motion:reduce){.ck.ck-input{transition:none}}.ck.ck-input:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}.ck.ck-input[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow), 0 0}.ck.ck-input.ck-error{border-color:var(--ck-color-input-error-border);animation:.3s both ck-input-shake}@media (prefers-reduced-motion:reduce){.ck.ck-input.ck-error{animation:none}}.ck.ck-input.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow), 0 0}@keyframes ck-input-shake{20%{transform:translate(-2px)}40%{transform:translate(2px)}60%{transform:translate(-1px)}80%{transform:translate(1px)}}.ck-textarea{overflow-x:hidden}.ck.ck-label{font-weight:700;display:block}.ck.ck-voice-label{display:none}:root{--ck-labeled-field-view-transition:.1s cubic-bezier(0, 0, .24, .95);--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-spacing-medium);--ck-labeled-field-label-default-position-x:var(--ck-spacing-medium);--ck-labeled-field-label-default-position-y:calc(.6 * var(--ck-font-size-base));--ck-color-labeled-field-label-background:var(--ck-color-base-background)}.ck.ck-labeled-field-view{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-labeled-field-view .ck.ck-label{display:block;position:absolute}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{width:100%;display:flex}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{pointer-events:none;background:var(--ck-color-labeled-field-label-background);padding:0 calc(.5 * var(--ck-font-size-tiny));line-height:initial;text-overflow:ellipsis;max-width:100%;transition:transform var(--ck-labeled-field-view-transition), padding var(--ck-labeled-field-view-transition), background var(--ck-labeled-field-view-transition);font-weight:400;top:0;overflow:hidden}[dir=ltr] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform-origin:0 0;transform:translate(var(--ck-spacing-medium), -6px) scale(.75);left:0}[dir=rtl] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform-origin:100% 0;transform:translate(calc(-1 * var(--ck-spacing-medium)), -6px) scale(.75);right:0}@media (prefers-reduced-motion:reduce){.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transition:none}}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{position:relative}.ck.ck-labeled-field-view.ck-error>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-error .ck-input:not([readonly])+.ck.ck-label{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status.ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view.ck-disabled>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-input-disabled-text)}[dir=ltr] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(var(--ck-labeled-field-label-default-position-x), var(--ck-labeled-field-label-default-position-y)) scale(1)}[dir=rtl] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(calc(-1 * var(--ck-labeled-field-label-default-position-x)), var(--ck-labeled-field-label-default-position-y)) scale(1)}.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width));background:0 0;padding:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck.ck-button{background:0 0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck-button>.ck-button__label{opacity:0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown+.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard))}.ck.ck-labeled-field-view.ck-labeled-field-view_full-width{flex-grow:1}.ck.ck-labeled-input .ck-labeled-input__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-input .ck-labeled-input__status_error{color:var(--ck-color-base-error)}.ck.ck-list{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-list-background);padding:var(--ck-spacing-small) 0;-webkit-user-select:none;user-select:none;flex-direction:column;list-style-type:none;display:flex}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{z-index:var(--ck-z-default);position:relative}.ck.ck-list__item{cursor:default;min-width:15em}.ck.ck-list__item>.ck-button:not(.ck-list-item-button){padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));min-height:unset;border-radius:0;width:100%}[dir=ltr] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:left}[dir=rtl] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:right}.ck.ck-list__item>.ck-button:not(.ck-list-item-button) .ck-button__label{line-height:calc(var(--ck-line-height-base) * var(--ck-font-size-base))}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck-list .ck-list__group{padding-top:var(--ck-spacing-medium)}.ck-list .ck-list__group:first-child{padding-top:0}:not(.ck-hidden)~:is(.ck-list .ck-list__group){border-top:1px solid var(--ck-color-base-border)}.ck-list .ck-list__group>.ck-label{padding:var(--ck-spacing-medium) var(--ck-spacing-large) 0;font-size:11px;font-weight:700}.ck.ck-list__separator{background:var(--ck-color-base-border);width:100%;height:1px;margin:var(--ck-spacing-small) 0}:root{--ck-balloon-border-width:1px;--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px;--ck-balloon-arrow-drop-shadow:0 2px 2px var(--ck-color-shadow-drop);--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-panel-background);border:var(--ck-balloon-border-width) solid var(--ck-color-panel-border);min-height:15px;z-index:var(--ck-z-panel);display:none;position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{content:"";border-style:solid;width:0;height:0;position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before,.ck.ck-balloon-panel[class*=arrow_n]:after{border-width:0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_n]:before{border-color:transparent transparent var(--ck-color-panel-border) transparent;margin-top:calc(-1 * var(--ck-balloon-border-width));z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{border-color:transparent transparent var(--ck-color-panel-background) transparent;margin-top:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before,.ck.ck-balloon-panel[class*=arrow_s]:after{border-width:var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-color:var(--ck-color-panel-border) transparent transparent;filter:drop-shadow(var(--ck-balloon-arrow-drop-shadow));margin-bottom:calc(-1 * var(--ck-balloon-border-width));z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{border-color:var(--ck-color-panel-background) transparent transparent transparent;margin-bottom:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_e]:before,.ck.ck-balloon-panel[class*=arrow_e]:after{border-width:var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_e]:before{border-color:transparent transparent transparent var(--ck-color-panel-border);margin-right:calc(-1 * var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_e]:after{border-color:transparent transparent transparent var(--ck-color-panel-background);margin-right:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:before,.ck.ck-balloon-panel[class*=arrow_w]:after{border-width:var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0}.ck.ck-balloon-panel[class*=arrow_w]:before{border-color:transparent var(--ck-color-panel-border) transparent transparent;margin-left:calc(-1 * var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:after{border-color:transparent var(--ck-color-panel-background) transparent transparent;margin-left:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after{margin-left:calc(-1 * var(--ck-balloon-arrow-half-width));left:50%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after{left:calc(2 * var(--ck-balloon-arrow-half-width));top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after{right:calc(2 * var(--ck-balloon-arrow-half-width));top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after{margin-left:calc(-1 * var(--ck-balloon-arrow-half-width));left:50%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after{left:calc(2 * var(--ck-balloon-arrow-half-width));bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after{right:calc(2 * var(--ck-balloon-arrow-half-width));bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after{margin-right:calc(2 * var(--ck-balloon-arrow-half-width));right:25%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after{margin-left:calc(2 * var(--ck-balloon-arrow-half-width));left:25%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after{margin-right:calc(2 * var(--ck-balloon-arrow-half-width));right:25%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after{margin-left:calc(2 * var(--ck-balloon-arrow-half-width));left:25%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:after{right:calc(-1 * var(--ck-balloon-arrow-height));margin-top:calc(-1 * var(--ck-balloon-arrow-half-width));top:50%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:after{left:calc(-1 * var(--ck-balloon-arrow-height));margin-top:calc(-1 * var(--ck-balloon-arrow-half-width));top:50%}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small);align-items:center;display:flex}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation{justify-content:center}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%;min-height:15px;position:absolute}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical);z-index:2}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal) * 2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical) * 2);z-index:1}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal) * 3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical) * 3)}.ck .ck-fake-panel{z-index:calc(var(--ck-z-panel) - 1);position:absolute}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow), 0 0;z-index:var(--ck-z-panel);border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0;position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{position:absolute;top:auto}.ck.ck-autocomplete>.ck-search__results{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-base-background);border:1px solid var(--ck-color-dropdown-panel-border);min-width:auto;max-height:200px;position:absolute;overflow-y:auto}.ck.ck-autocomplete>.ck-search__results.ck-search__results_n{border-bottom-right-radius:0;border-bottom-left-radius:0;margin-bottom:-1px;bottom:100%}.ck.ck-autocomplete>.ck-search__results.ck-search__results_s{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px;top:100%;bottom:auto}.ck.ck-autocomplete>.ck-search__results{z-index:var(--ck-z-panel)}.ck.ck-autocomplete{position:relative}:root{--ck-search-field-view-horizontal-spacing:calc(var(--ck-icon-size) + var(--ck-spacing-medium))}.ck.ck-search>.ck-labeled-field-view .ck-input{width:100%}.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon{position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){left:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){right:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view .ck-search__reset{position:absolute;top:50%;transform:translateY(-50%)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon{--ck-labeled-field-label-default-position-x:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon>.ck-labeled-field-view__input-wrapper>.ck-icon{opacity:.5;pointer-events:none}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input){padding-left:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input):not(.ck-input-text_empty){padding-left:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset{--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset.ck-labeled-field-view_empty{--ck-labeled-field-empty-unfocused-max-width:100% - var(--ck-search-field-view-horizontal-spacing) - var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset{opacity:.5;background:0 0;min-width:auto;min-height:auto;padding:0}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){left:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset:hover{opacity:1}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input):not(.ck-input-text_empty){padding-right:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input){padding-right:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-search__results{min-width:100%}.ck.ck-search>.ck-search__results>.ck-search__info{width:100%;padding:var(--ck-spacing-medium) var(--ck-spacing-large)}.ck.ck-search>.ck-search__results>.ck-search__info *{white-space:normal}.ck.ck-search>.ck-search__results>.ck-search__info>span:first-child{font-weight:700;display:block}.ck.ck-search>.ck-search__results>.ck-search__info>span:last-child{margin-top:var(--ck-spacing-medium)}.ck.ck-search>.ck-search__results>.ck-search__info:not(.ck-hidden)~*{display:none}.ck.ck-highlighted-text mark{background:var(--ck-color-highlight-background);vertical-align:initial;font-weight:inherit;line-height:inherit;font-size:inherit}.ck.ck-balloon-panel.ck-tooltip{--ck-balloon-border-width:0px;--ck-balloon-arrow-offset:0px;--ck-balloon-arrow-half-width:4px;--ck-balloon-arrow-height:4px;--ck-tooltip-text-padding:4px;--ck-color-panel-background:var(--ck-color-tooltip-background);padding:0 var(--ck-spacing-medium);box-shadow:none;-webkit-user-select:none;user-select:none}.ck.ck-balloon-panel.ck-tooltip .ck-tooltip__text{color:var(--ck-color-tooltip-text);font-size:.9em;line-height:1.5}.ck.ck-balloon-panel.ck-tooltip.ck-tooltip_multi-line .ck-tooltip__text{white-space:break-spaces;padding:var(--ck-tooltip-text-padding) 0;max-width:200px;display:inline-block}.ck.ck-balloon-panel.ck-tooltip:before{display:none}.ck.ck-balloon-panel.ck-tooltip{z-index:calc(var(--ck-z-dialog) + 100)}:root{--ck-toolbar-spinner-size:18px}.ck.ck-spinner-container{width:var(--ck-toolbar-spinner-size);height:var(--ck-toolbar-spinner-size);animation:1.5s linear infinite ck-spinner-rotate;display:block}@media (prefers-reduced-motion:reduce){.ck.ck-spinner-container{animation-duration:3s}}.ck.ck-spinner-container{position:relative}.ck.ck-spinner{width:var(--ck-toolbar-spinner-size);height:var(--ck-toolbar-spinner-size);border:2px solid var(--ck-color-text);z-index:1;border-top-color:#0000;border-radius:50%;margin:0 auto;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}@keyframes ck-spinner-rotate{to{transform:rotate(360deg)}}.ck.ck-toolbar{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border);-webkit-user-select:none;user-select:none;flex-flow:row;align-items:center;display:flex}.ck.ck-toolbar .ck.ck-toolbar__separator{height:var(--ck-icon-size);background:var(--ck-color-toolbar-border);width:1px;min-width:1px;margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar .ck-toolbar__line-break{flex-basis:100%;height:0}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break){margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items{flex-flow:wrap;flex-grow:1;align-items:center;display:flex}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break),.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{border-radius:0;width:100%;margin:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-dropdown__panel{min-width:auto}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-button>.ck-button__label{width:auto;max-width:7em}.ck.ck-toolbar:focus{outline:none}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck{margin-right:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]):not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck:last-child{margin-left:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck.ck-toolbar__separator,:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck-toolbar__items>.ck:last-child{margin-right:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck.ck-toolbar__separator,:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}:root{--ck-color-block-toolbar-button:var(--ck-color-text);--ck-block-toolbar-button-size:var(--ck-font-size-normal)}.ck.ck-block-toolbar-button{color:var(--ck-color-block-toolbar-button);font-size:var(--ck-block-toolbar-size);z-index:var(--ck-z-default);position:absolute}.ck.ck-menu-bar{background:var(--ck-color-base-background);padding:var(--ck-spacing-small);justify-content:flex-start;gap:var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border);flex-wrap:wrap;width:100%;display:flex}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button{width:100%}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button{padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-height:unset}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-button__label{width:unset;line-height:unset;overflow:visible}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button.ck-on{border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-icon{display:none}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button{border-radius:0}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){margin-left:var(--ck-spacing-standard);margin-right:calc(-1 * var(--ck-spacing-small));transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small);margin-left:calc(-1 * var(--ck-spacing-small));transform:rotate(90deg)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button.ck-disabled>.ck-menu-bar__menu__button__arrow{opacity:var(--ck-disabled-opacity)}:root{--ck-menu-bar-menu-max-width:75vw;--ck-menu-bar-nested-menu-horizontal-offset:5px}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);height:fit-content;z-index:var(--ck-z-panel);max-width:var(--ck-menu-bar-menu-max-width);position:absolute;bottom:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{border-top-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{border-top-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne{border-bottom-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw{border-bottom-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel:focus{outline:none}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw{bottom:100%}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{top:100%;bottom:auto}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{left:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{right:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en{left:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en{bottom:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{right:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{bottom:0}.ck.ck-menu-bar .ck-list-item-button:focus,.ck.ck-menu-bar .ck-list-item-button:active{box-shadow:none;border-color:#0000}.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:focus,.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:active{z-index:2;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none;position:relative}.ck.ck-menu-bar__menu{font-size:inherit;display:block}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level{max-width:100%}.ck.ck-menu-bar__menu{position:relative}:root{--ck-menu-bar-menu-item-min-width:18em}.ck.ck-menu-bar__menu .ck.ck-menu-bar__menu__item{min-width:var(--ck-menu-bar-menu-item-min-width)}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button{border-radius:0}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container,.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container{font-size:var(--ck-icon-font-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-left:var(--ck-spacing-medium)}.ck-content code{background-color:#c7c7c74d;border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:#c7c7c780}.ck-content blockquote{border-left:5px solid #ccc;margin-left:0;margin-right:0;padding-left:1.5em;padding-right:1.5em;font-style:italic;overflow:hidden}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}:root{--ck-bookmark-icon-hover-fill-color:var(--ck-color-widget-hover-border);--ck-bookmark-icon-selected-fill-color:var(--ck-color-focus-border);--ck-bookmark-icon-animation-duration:var(--ck-widget-handler-animation-duration);--ck-bookmark-icon-animation-curve:var(--ck-widget-handler-animation-curve)}.ck .ck-bookmark.ck-widget{outline:none;display:inline-block}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon__fill{transition:fill var(--ck-bookmark-icon-animation-duration) var(--ck-bookmark-icon-animation-curve)}.ck .ck-bookmark.ck-widget:hover .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-hover-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-selected-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected,.ck .ck-bookmark.ck-widget.ck-widget_selected:hover{outline:none}.ck .ck-bookmark.ck-widget .ck-bookmark__icon{display:block;position:relative;top:-.1em}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon{vertical-align:middle;width:auto;height:1.2em}.ck .ck-fake-bookmark-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-bookmark-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}.ck.ck-bookmark-balloon .ck.ck-toolbar>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-bookmark-toolbar__preview{padding:0 var(--ck-spacing-medium);max-width:var(--ck-input-width);text-overflow:ellipsis;text-align:center;-webkit-user-select:none;user-select:none;cursor:default;min-width:3em;font-weight:400;overflow:hidden}:root{--ck-bookmark-form-width:340px}@media screen and (width<=600px){:root{--ck-bookmark-form-width:300px}}.ck.ck-bookmark-form{width:var(--ck-bookmark-form-width)}:root{--ck-image-processing-highlight-color:#f9fafa;--ck-image-processing-background-color:#e3e5e8}.ck.ck-editor__editable .image.image-processing{position:relative}.ck.ck-editor__editable .image.image-processing:before{content:"";z-index:1;background:linear-gradient(90deg, var(--ck-image-processing-background-color), var(--ck-image-processing-highlight-color), var(--ck-image-processing-background-color));background-size:200% 100%;width:100%;height:100%;animation:2s linear infinite ck-image-processing-animation;position:absolute;top:0;left:0}.ck.ck-editor__editable .image.image-processing img{height:100%}@keyframes ck-image-processing-animation{0%{background-position:200% 0}to{background-position:-200% 0}}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{bottom:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));top:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));border:1px solid var(--ck-clipboard-drop-target-color);background:var(--ck-clipboard-drop-target-color);margin-left:-1px;position:absolute}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{content:"";width:0;height:0;left:50%;top:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));border-color:var(--ck-clipboard-drop-target-color) transparent transparent transparent;border-width:calc(var(--ck-clipboard-drop-target-dot-height)) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width));border-style:solid;display:block;position:absolute;transform:translate(-50%)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{width:0}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{pointer-events:none;display:inline;position:relative}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{zoom:.6;outline:none!important}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}.ck.ck-clipboard-drop-target-line{border:1px solid var(--ck-clipboard-drop-target-color);background:var(--ck-clipboard-drop-target-color);height:0;z-index:var(--ck-z-default);margin-top:-1px;position:absolute}.ck.ck-clipboard-drop-target-line:before{content:"";top:calc(-.5 * var(--ck-clipboard-drop-target-dot-width));border-style:solid;width:0;height:0;position:absolute}.ck.ck-clipboard-drop-target-line{pointer-events:none}[dir=ltr] .ck.ck-clipboard-drop-target-line:before{border-width:calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height);border-color:transparent transparent transparent var(--ck-clipboard-drop-target-color);left:-1px}[dir=rtl] .ck.ck-clipboard-drop-target-line:before{border-width:calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0;border-color:transparent var(--ck-clipboard-drop-target-color) transparent transparent;right:-1px}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap;line-height:16px;position:absolute;top:-1px;right:10px}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}.ck-content pre{color:#353535;text-align:left;tab-size:4;white-space:pre-wrap;direction:ltr;background:#c7c7c74d;border:1px solid #c4c4c4;border-radius:2px;min-width:200px;margin:.9em 0;padding:1em;font-style:normal}.ck-content pre code{background:unset;border-radius:0;padding:0}.ck.ck-editor__editable pre{position:relative}:root{--ck-content-font-family:Helvetica, Arial, Tahoma, Verdana, Sans-Serif;--ck-content-font-size:medium;--ck-content-font-color:#000;--ck-content-line-height:1.5;--ck-content-word-break:normal;--ck-content-overflow-wrap:break-word}.ck-content{font-family:var(--ck-content-font-family);font-size:var(--ck-content-font-size);color:var(--ck-content-font-color);line-height:var(--ck-content-line-height);word-break:var(--ck-content-word-break);overflow-wrap:var(--ck-content-overflow-wrap)}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}.ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-panel)}.ck.ck-menu-bar{border:none;border-bottom:1px solid var(--ck-color-toolbar-border)}.ck.ck-emoji{width:320px}.ck .ck.ck-emoji__search{padding:var(--ck-spacing-large);padding-bottom:var(--ck-spacing-medium);justify-content:space-between;align-items:center;display:flex}.ck .ck.ck-emoji__search>.ck.ck-search{flex:1}.ck .ck-fake-emoji-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-emoji-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}div.ck.ck-balloon-panel.ck-emoji-picker-balloon{z-index:calc(var(--ck-z-dialog) + 1)}.ck.ck-emoji__categories-list{margin:0 var(--ck-spacing-large);justify-content:space-between;display:flex}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text{font-size:var(--ck-font-size-big);min-width:var(--ck-font-size-big);min-height:var(--ck-font-size-big);border-width:0 0 2px;border-bottom-style:solid;border-bottom-color:#0000;padding:0}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text.ck-emoji__category-item.ck-on{border-bottom-color:var(--ck-color-base-active)}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text>span{margin:auto}:root{--ck-emoji-grid-tile-size:27px}.ck.ck-emoji .ck.ck-emoji__tiles{border-top:1px solid var(--ck-color-base-border);max-width:100%;max-height:min(265px,40vh);overflow:hidden auto}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__grid{grid-template-columns:repeat(auto-fill, minmax(var(--ck-emoji-grid-tile-size), 1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-small);display:grid}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{width:var(--ck-emoji-grid-tile-size);height:var(--ck-emoji-grid-tile-size);min-width:var(--ck-emoji-grid-tile-size);min-height:var(--ck-emoji-grid-tile-size);border:0;padding:0;font-size:1.5em;transition:box-shadow .2s}@media (prefers-reduced-motion:reduce){.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{transition:none}}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:focus:not(.ck-disabled),.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);border:0}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile .ck-button__label{line-height:var(--ck-emoji-grid-tile-size);text-align:center;width:100%}.ck.ck-form.ck-emoji-picker-form{padding-bottom:0}.ck.ck-form.ck-emoji-picker-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border-color:#0000}.ck.ck-emoji__skin-tone{margin-left:var(--ck-spacing-standard)}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck.ck-list__item{min-width:1em}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:initial}.ck.ck-placeholder,.ck .ck-placeholder{position:relative}@media (forced-colors:active){.ck.ck-placeholder,.ck .ck-placeholder{forced-color-adjust:preserve-parent-color}}:is(.ck.ck-placeholder,.ck .ck-placeholder):before{content:attr(data-placeholder);cursor:text;pointer-events:none;padding-left:inherit;padding-right:inherit;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;position:absolute;left:0;right:0;overflow:hidden}@media (forced-colors:none){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{color:var(--ck-color-engine-placeholder-text)}}@media (forced-colors:active){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{margin-left:1px;font-style:italic}}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-reset_all .ck-placeholder{position:relative}.ck.ck-editor__editable span[data-ck-unsafe-element]{display:none}.ck-find-result{background:var(--ck-color-highlight-background);color:var(--ck-color-text)}.ck-find-result_selected{background:#ff9633}.ck.ck-find-and-replace-form{width:400px;max-width:100%}.ck.ck-find-and-replace-form:focus{outline:none}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions{padding:var(--ck-spacing-large);flex-flow:wrap;flex:auto;align-content:stretch;align-items:center;margin:0;display:flex}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>.ck-button{flex:none}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-left:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-right:var(--ck-spacing-standard)}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view{flex:auto}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view .ck-input{width:100%;min-width:50px}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs{align-items:flex-start}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-prev>.ck-icon{transform:rotate(90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-next>.ck-icon{transform:rotate(-90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter{color:var(--ck-color-base-border);position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){left:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace{padding-top:var(--ck-spacing-standard);flex:0 0 100%}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-left:0}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-right:0}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions{margin-top:calc(-1 * var(--ck-spacing-large));flex-wrap:wrap;justify-content:flex-end}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find{font-weight:700}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find .ck-button__label{padding-left:var(--ck-spacing-large);padding-right:var(--ck-spacing-large)}.ck.ck-find-and-replace-form .ck-switchbutton{flex-flow:row;justify-content:space-between;align-items:center;width:100%;display:flex}@media screen and (width<=600px){.ck.ck-find-and-replace-form{width:300px;max-width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input{flex-wrap:wrap}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input .ck-labeled-field-view{width:100%;margin-bottom:var(--ck-spacing-standard);flex:1 0 auto}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type .ck-button__label{text-align:center;width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view){flex-wrap:wrap;flex:auto}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button .ck-button__label{text-align:center;width:100%}}:root{--ck-content-font-size-tiny:.7em;--ck-content-font-size-small:.85em;--ck-content-font-size-big:1.4em;--ck-content-font-size-huge:1.8em}.ck-content .text-tiny{font-size:var(--ck-content-font-size-tiny)}.ck-content .text-small{font-size:var(--ck-content-font-size-small)}.ck-content .text-big{font-size:var(--ck-content-font-size-big)}.ck-content .text-huge{font-size:var(--ck-content-font-size-huge)}html.ck-fullscreen,body.ck-fullscreen{--ck-z-fullscreen:10000;--ck-z-default:calc(var(--ck-z-fullscreen) + 1);--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:100000;overflow:hidden}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n){--ckbox-z-index-root:calc(var(--ck-z-dialog) + 1);position:absolute}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n) .ckbox-img-editor{--ckbox-z-index-preview:calc(var(--ck-z-dialog) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .ck-pagination-view-line{z-index:calc(var(--ck-z-fullscreen) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .page-break__label{z-index:calc(var(--ck-z-fullscreen) + 2)}.ck.ck-fullscreen__main-wrapper{width:100%;height:100%;z-index:var(--ck-z-fullscreen);background:var(--ck-color-base-foreground);flex-direction:column;display:flex;position:fixed;top:0;left:0}.ck.ck-fullscreen__main-wrapper .ck.ck-revision-history-ui__changes-navigation{margin-top:0;margin-bottom:0}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper{position:absolute}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper .ck-fullscreen__top-wrapper{border-top:1px solid var(--ck-color-base-border);border-left:1px solid var(--ck-color-base-border);border-right:1px solid var(--ck-color-base-border);border-radius:var(--ck-border-radius) 0}.ck-fullscreen__menu-bar .ck.ck-menu-bar{border:none}.ck.ck-fullscreen__toolbar .ck-toolbar{border-left:0;border-right:0;border-radius:0}.ck-fullscreen__main-wrapper .ck-fullscreen__editable-wrapper{--ck-fullscreen-editor-top-margin:28px;--ck-fullscreen-editor-bottom-margin:28px;justify-content:flex-start;max-height:100%;display:flex;overflow:auto}.ck-fullscreen__main-wrapper .ck-fullscreen__editable{margin-top:var(--ck-fullscreen-editor-top-margin);height:100%;margin-left:auto}.ck-fullscreen__main-wrapper .ck-fullscreen__editable:after{content:"";height:var(--ck-fullscreen-editor-bottom-margin);display:block}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck.ck-editor__editable:not(.ck-editor__nested-editable){box-sizing:border-box;border:1px var(--ck-color-base-border) solid;background:#fff;width:795.701px;max-width:795.701px;height:fit-content;min-height:297mm;margin:0;padding:20mm 12mm;box-shadow:0 2px 3px #00000014}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck-source-editing-area{width:795.701px}.ck-fullscreen__sidebar{width:270px;margin-top:var(--ck-fullscreen-editor-top-margin);margin-left:10px}.ck-fullscreen__left-sidebar{--ck-user-avatar-size:28px;box-sizing:border-box;background-color:#0000;flex-direction:column;align-self:flex-start;height:100%;margin-top:0;margin-right:10px;font-family:Helvetica,Arial,sans-serif;display:flex;position:sticky;top:0}.ck-fullscreen__left-sidebar .ck-button.ck-fullscreen__left-sidebar-toggle-button{--ck-icon-size:20px;--ck-ui-component-min-height:0px;margin-top:var(--ck-fullscreen-editor-top-margin);margin-bottom:var(--ck-spacing-large);opacity:.5;border-radius:100%;align-self:flex-start;padding-top:0}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky{min-width:270px}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky:first-child{padding-top:var(--ck-fullscreen-editor-top-margin)}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed{width:65px}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed>:not(.ck-fullscreen__left-sidebar-toggle-button){display:none}.ck-fullscreen__left-sidebar .ck.ck-presence-list--collapsed{--ck-user-avatar-size:32px}.ck-fullscreen__left-sidebar .ck-user,.ck-fullscreen__left-sidebar .ck-presence-list__users-counter__text{font-size:.85em}.ck-fullscreen__left-sidebar-item{padding:var(--ck-spacing-medium);margin-bottom:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item:first-child{padding-top:0}.ck-fullscreen__left-sidebar-item:last-child{margin-bottom:0}.ck-fullscreen__left-sidebar-header{--ck-fullscreen-presence-list-header-font-size:.875em;font-size:var(--ck-fullscreen-presence-list-header-font-size);color:var(--ck-document-outline-item-default-color);white-space:nowrap;text-overflow:ellipsis;font-weight:700;overflow:hidden}.ck-fullscreen__left-sidebar--sticky{position:sticky;top:0}.ck-fullscreen__left-sidebar--sticky>:first-child{padding-top:0}.ck-fullscreen__presence-list{margin-top:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item--no-margin{margin:0}.ck-fullscreen__left-sidebar .ck.ck-document-outline{padding-top:0;padding-left:0;padding-right:0}.ck-fullscreen__document-outline-wrapper{padding-top:0;overflow-y:auto}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar{margin-top:var(--ck-fullscreen-editor-top-margin);margin-right:auto}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar:not(.ck-fullscreen__right-sidebar--collapsed)>:first-child{min-width:270px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed{width:65px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed>:first-child{min-width:65px}.ck.ck-fullscreen__right-edge{margin-top:0;margin-left:10px;position:sticky;top:0}.ck.ck-fullscreen__right-edge>:first-child{border-top:none;border-bottom:none;border-right:none;width:495px;height:100%}.ck.ck-heading_heading1 .ck-button__label{font-size:20px}.ck.ck-heading_heading2 .ck-button__label{font-size:17px}.ck.ck-heading_heading3 .ck-button__label{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}:root{--ck-content-highlight-marker-yellow:#fdfd77;--ck-content-highlight-marker-green:#62f962;--ck-content-highlight-marker-pink:#fc7899;--ck-content-highlight-marker-blue:#72ccfd;--ck-content-highlight-pen-red:#e71313;--ck-content-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-content-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-content-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-content-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-content-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-content-highlight-pen-red);background-color:#0000}.ck-content .pen-green{color:var(--ck-content-highlight-pen-green);background-color:#0000}.ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{vertical-align:middle;background:#dedede;border:0;width:100%;height:4px;margin:15px 0;display:inline-block}:root{--ck-html-embed-content-width:calc(100% - 1.5 * var(--ck-icon-size));--ck-html-embed-source-height:10em;--ck-html-embed-unfocused-outline-width:1px;--ck-html-embed-content-min-height:calc(var(--ck-icon-size) + var(--ck-spacing-standard));--ck-html-embed-source-disabled-background:var(--ck-color-base-foreground);--ck-html-embed-source-disabled-color:#737373}.ck-widget.raw-html-embed{font-size:var(--ck-font-size-base);background-color:var(--ck-color-base-foreground);min-width:15em;margin:.9em auto;display:flow-root;position:relative}.ck-widget.raw-html-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.raw-html-embed[dir=ltr]{text-align:left}.ck-widget.raw-html-embed[dir=rtl]{text-align:right}.ck-widget.raw-html-embed:before{content:attr(data-html-embed-label);top:calc(-1 * var(--ck-html-embed-unfocused-outline-width));left:var(--ck-spacing-standard);transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);font-size:var(--ck-font-size-tiny);font-family:var(--ck-font-face);z-index:1;background:#999;position:absolute}.ck-widget.raw-html-embed[dir=rtl]:before{left:auto;right:var(--ck-spacing-standard)}.ck-widget.raw-html-embed[dir=ltr] .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck.ck-editor__editable.ck-blurred .ck-widget.raw-html-embed.ck-widget_selected:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck.ck-editor__editable:not(.ck-blurred) .ck-widget.raw-html-embed.ck-widget_selected:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);background:var(--ck-color-focus-border);top:0}.ck.ck-editor__editable .ck-widget.raw-html-embed:not(.ck-widget_selected):hover:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck-widget.raw-html-embed .raw-html-embed__content-wrapper{padding:var(--ck-spacing-standard)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{top:var(--ck-spacing-standard);right:var(--ck-spacing-standard);display:flex;position:absolute}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__save-button{color:var(--ck-color-button-save)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__cancel-button{color:var(--ck-color-button-cancel)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button:not(:first-child){margin-top:var(--ck-spacing-small)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{flex-direction:column}.ck-widget.raw-html-embed[dir=rtl] .raw-html-embed__buttons-wrapper{left:var(--ck-spacing-standard);right:auto}.ck-widget.raw-html-embed .raw-html-embed__source{box-sizing:border-box;height:var(--ck-html-embed-source-height);width:var(--ck-html-embed-content-width);resize:none;min-width:0;padding:var(--ck-spacing-standard);tab-size:4;white-space:pre-wrap;font-family:monospace;font-size:var(--ck-font-size-base);text-align:left;direction:ltr}.ck-widget.raw-html-embed .raw-html-embed__source[disabled]{background:var(--ck-html-embed-source-disabled-background);color:var(--ck-html-embed-source-disabled-color);-webkit-text-fill-color:var(--ck-html-embed-source-disabled-color);opacity:1}.ck-widget.raw-html-embed .raw-html-embed__preview{min-height:var(--ck-html-embed-content-min-height);width:var(--ck-html-embed-content-width);position:relative;overflow:hidden}.ck-editor__editable:not(.ck-read-only) :is(.ck-widget.raw-html-embed .raw-html-embed__preview){pointer-events:none}.ck-widget.raw-html-embed .raw-html-embed__preview{display:flex}.ck-widget.raw-html-embed .raw-html-embed__preview-content{box-sizing:border-box;background-color:var(--ck-color-base-foreground);border-collapse:separate;width:100%;margin:auto;display:table;position:relative}.ck-widget.raw-html-embed .raw-html-embed__preview-content>*{margin-left:auto;margin-right:auto}.ck-widget.raw-html-embed .raw-html-embed__preview-content{border-spacing:7px}.ck-widget.raw-html-embed .raw-html-embed__preview-placeholder{color:var(--ck-html-embed-source-disabled-color);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ck-widget.raw-html-embed{font-style:normal}:root{--ck-html-object-embed-unfocused-outline-width:1px}.ck-widget.html-object-embed{font-size:var(--ck-font-size-base);background-color:var(--ck-color-base-foreground);padding:var(--ck-spacing-small);padding-top:calc(var(--ck-font-size-tiny) + var(--ck-spacing-large));min-width:calc(76px + var(--ck-spacing-standard))}.ck-widget.html-object-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-object-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.html-object-embed:before{content:attr(data-html-object-embed-label);top:0;left:var(--ck-spacing-standard);transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-object-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);font-style:normal;font-weight:400;font-size:var(--ck-font-size-tiny);font-family:var(--ck-font-face);background:#999;position:absolute}.ck-widget.html-object-embed .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck-widget.html-object-embed .html-object-embed__content{pointer-events:none}div.ck-widget.html-object-embed{margin:1em auto}span.ck-widget.html-object-embed{display:inline-block}:root{--ck-content-color-image-caption-background:#f7f7f7;--ck-content-color-image-caption-text:#333;--ck-color-image-caption-highlighted-background:#fd0}.ck-content .image>figcaption{caption-side:bottom;word-break:normal;overflow-wrap:anywhere;break-before:avoid;color:var(--ck-content-color-image-caption-text);background-color:var(--ck-content-color-image-caption-background);outline-offset:-1px;padding:.6em;font-size:.75em;display:table-caption}@media (forced-colors:active){.ck-content .image>figcaption{background-color:unset;color:unset}}@media (forced-colors:none){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:.6s ease-out ck-image-caption-highlight}}@media (prefers-reduced-motion:reduce){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:none}}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highlighted-background)}to{background-color:var(--ck-content-color-image-caption-background)}}.ck-content img.image_resized{height:auto}.ck-content .image.image_resized{box-sizing:border-box;max-width:100%;display:block}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}:root{--ck-content-image-style-spacing:1.5em;--ck-content-inline-image-style-spacing:calc(var(--ck-content-image-style-spacing) / 2)}.ck-content .image.image-style-block-align-left,.ck-content .image.image-style-block-align-right{max-width:calc(100% - var(--ck-content-image-style-spacing))}.ck-content .image.image-style-align-left,.ck-content .image.image-style-align-right{clear:none}.ck-content .image.image-style-side{float:right;margin-left:var(--ck-content-image-style-spacing);max-width:50%}.ck-content .image.image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-block-align-right{margin-left:auto;margin-right:0}.ck-content .image.image-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content p+.image.image-style-align-left,.ck-content p+.image.image-style-align-right,.ck-content p+.image.image-style-side{margin-top:0}.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right{margin-top:var(--ck-content-inline-image-style-spacing);margin-bottom:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-left{margin-right:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-right{margin-left:var(--ck-content-inline-image-style-spacing)}:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{animation:.7s fadeIn}@media (prefers-reduced-motion:reduce){:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{opacity:1;animation:none}}.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline{position:relative}.ck.ck-editor__editable .image .ck-progress-bar,.ck.ck-editor__editable .image-inline .ck-progress-bar{background:var(--ck-color-upload-bar-background);width:0;height:2px;transition:width .1s;position:absolute;top:0;left:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20;--ck-image-upload-icon-width:2px;--ck-image-upload-icon-is-visible:clamp(0px, 100% - 50px, 1px)}.ck-image-upload-complete-icon{opacity:0;background:var(--ck-color-image-upload-icon-background);font-size:calc(1px * var(--ck-image-upload-icon-size));width:calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));height:calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));top:min(var(--ck-spacing-medium), 6%);right:min(var(--ck-spacing-medium), 6%);border-radius:50%;animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-duration:.5s,.5s;animation-delay:0s,3s;animation-fill-mode:forwards,forwards;display:block;position:absolute;overflow:hidden}.ck-image-upload-complete-icon:after{opacity:0;transform-origin:0 0;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);box-sizing:border-box;content:"";width:0;height:0;animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;position:absolute;top:50%;left:25%;transform:scaleX(-1)rotate(135deg)}@media (prefers-reduced-motion:reduce){.ck-image-upload-complete-icon{animation-duration:0s}.ck-image-upload-complete-icon:after{opacity:1;width:.3em;height:.45em;animation:none}}.ck-image-upload-complete-icon{z-index:1}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px;--ck-upload-placeholder-image-aspect-ratio:2.8}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-image-upload-placeholder.image-inline{width:calc(2 * var(--ck-upload-placeholder-loader-size) * var(--ck-upload-placeholder-image-aspect-ratio))}.ck .ck-image-upload-placeholder img{aspect-ratio:var(--ck-upload-placeholder-image-aspect-ratio)}.ck .ck-upload-placeholder-loader{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;top:0}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-top:3px solid var(--ck-color-upload-placeholder-loader);content:"";border-right:2px solid #0000;border-radius:50%;animation:1s linear infinite ck-upload-placeholder-loader;position:relative}.ck .ck-upload-placeholder-loader{left:0}@keyframes ck-upload-placeholder-loader{to{transform:rotate(360deg)}}.ck-content .image{clear:both;text-align:center;min-width:50px;margin:.9em auto;display:table}.ck-content .image img{min-width:100%;max-width:100%;height:auto;margin:0 auto;display:block}.ck-content .image-inline{align-items:flex-start;max-width:100%;display:inline-flex}.ck-content .image-inline picture{display:flex}.ck-content .image-inline picture,.ck-content .image-inline img{flex-grow:1;flex-shrink:1;max-width:100%}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ck.ck-editor__editable .image{z-index:1}.ck.ck-editor__editable .image.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable .image-inline img{height:auto}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline img{max-width:none}.ck.ck-editor__editable img.image_placeholder{background-size:100% 100%}:root{--ck-image-insert-insert-by-url-width:250px}.ck.ck-image-insert-url{--ck-input-width:100%;width:400px}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-column-gap:var(--ck-spacing-large);margin-top:var(--ck-spacing-large);display:grid}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-save,.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-cancel{justify-content:center;min-width:auto}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-template-columns:repeat(2,1fr)}.ck.ck-image-insert-url{padding:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-image-insert-form>.ck.ck-button{width:100%;display:block}[dir=ltr] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:left}[dir=rtl] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:right}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:first-child){border-top:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:last-child){border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible{min-width:var(--ck-image-insert-insert-by-url-width)}.ck.ck-image-insert-form>.ck.ck-image-insert-url{min-width:var(--ck-image-insert-insert-by-url-width);padding:var(--ck-spacing-large)}.ck.ck-image-insert-form:focus{outline:none}:root{--ck-image-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-image-custom-resize-form-width:300px}}.ck.ck-image-custom-resize-form.ck-responsive-form{width:var(--ck-image-custom-resize-form-width)}:root{--ck-text-alternative-form-width:340px}@media screen and (width<=600px){:root{--ck-text-alternative-form-width:300px}}.ck.ck-text-alternative-form.ck-responsive-form{width:var(--ck-text-alternative-form-width)}.ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-link_selected span.image-inline{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}:root{--ck-link-bookmark-icon-size:calc(var(--ck-icon-size) * .7)}.ck.ck-toolbar.ck-link-toolbar>.ck-toolbar__items{flex-wrap:nowrap}a.ck.ck-button.ck-link-toolbar__preview{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);cursor:pointer;flex-direction:row;justify-content:center;align-items:center;display:flex}a.ck.ck-button.ck-link-toolbar__preview .ck.ck-button__label{text-overflow:ellipsis;max-width:var(--ck-input-width)}a.ck.ck-button.ck-link-toolbar__preview,a.ck.ck-button.ck-link-toolbar__preview:hover,a.ck.ck-button.ck-link-toolbar__preview:focus,a.ck.ck-button.ck-link-toolbar__preview:active{background:0 0}a.ck.ck-button.ck-link-toolbar__preview:active{box-shadow:none}a.ck.ck-button.ck-link-toolbar__preview:hover,a.ck.ck-button.ck-link-toolbar__preview:focus{text-decoration:underline}a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon{width:var(--ck-link-bookmark-icon-size);height:var(--ck-link-bookmark-icon-size)}[dir=ltr] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-right:var(--ck-spacing-tiny);margin-left:var(--ck-spacing-small)}[dir=rtl] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-left:var(--ck-spacing-tiny);margin-right:var(--ck-spacing-small)}a.ck.ck-button.ck-link-toolbar__preview:has(.ck-icon){padding-left:var(--ck-spacing-extra-tiny)}.ck.ck-link-toolbar__preview{display:inline-block}.ck.ck-link-toolbar__preview .ck-button__label{overflow:hidden}:root{--ck-link-image-indicator-icon-size:20;--ck-link-image-indicator-icon-is-visible:clamp(0px, 100% - 50px, 1px)}:is(.ck.ck-editor__editable figure.image>a,.ck.ck-editor__editable a span.image-inline):after{content:"";top:min(var(--ck-spacing-medium), 6%);right:min(var(--ck-spacing-medium), 6%);width:calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));height:calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));background-color:#0006;background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzQ4Ljc0OCAwIDAgMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAgMS04LjUwMy01Ljk1NS43NDEuNzQxIDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NGwuMDA2LjAwNHptNS40OTQtNS4zMzVhLjc0OC43NDggMCAwIDEtLjEyLjI3NGwtMS4xNDcgMS42MzlhLjc1Ljc1IDAgMSAxLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwIDAtNi4xNDQtNC4zMDFsLS44NiAxLjIyOWEuNzUuNzUgMCAwIDEtMS4yMjktLjg2bDEuMTQ4LTEuNjRhLjc0OC43NDggMCAwIDEgLjIxNy0uMjA2IDUuMjUxIDUuMjUxIDAgMCAxIDguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMCAxIC4xODQgMS4wNDVsLTMuMTU1IDQuNTA1YS43NS43NSAwIDEgMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMCAxIDEuMDQ1LS4xODR6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:14px;border-radius:100%;display:block;position:absolute;overflow:hidden}:root{--ck-link-panel-width:340px;--ck-link-provider-list-item-text-height:calc(var(--ck-line-height-base) * var(--ck-font-size-base));--ck-link-provider-list-item-height:calc(var(--ck-link-provider-list-item-text-height) + var(--ck-spacing-small) + var(--ck-spacing-small))}@media screen and (width<=600px){:root{--ck-link-panel-width:300px}}.ck.ck-form.ck-link-form{width:var(--ck-link-panel-width);padding-bottom:0}@media screen and (width<=600px){.ck.ck-form.ck-link-form.ck-responsive-form .ck-labeled-field-view{margin:0}}.ck.ck-form.ck-link-form .ck-link-form__providers-list{border-top:1px solid var(--ck-color-base-border);flex-direction:column;display:flex}.ck.ck-form.ck-link-form .ck-link-form__providers-list:has(.ck-list__item:nth-child(n+5)){max-height:calc(var(--ck-link-provider-list-item-height) * 4 + var(--ck-spacing-large) + 1px);overflow:auto}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button{padding:var(--ck-spacing-small) var(--ck-spacing-large);border-radius:0}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-link-form .ck-link__items:empty{display:none}:root{--ck-link-properties-width:340px}@media screen and (width<=600px){:root{--ck-link-properties-width:300px}}.ck.ck-link-properties{width:var(--ck-link-properties-width)}:root{--ck-link-providers-width:340px;--ck-link-list-view-max-height:240px;--ck-link-list-view-icon-size:calc(var(--ck-icon-size) * .8)}@media screen and (width<=600px){:root{--ck-link-providers-width:300px}}.ck.ck-link-providers{width:var(--ck-link-providers-width)}.ck.ck-link-providers .ck-form__header__label{text-overflow:ellipsis;overflow:hidden}.ck.ck-link-providers>.ck-link-providers__list{max-height:min(var(--ck-link-list-view-max-height), 40vh);overflow:hidden auto}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-icon{width:var(--ck-link-list-view-icon-size);height:var(--ck-link-list-view-icon-size);flex-shrink:0}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-button__label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ck.ck-link-providers>.ck-link-providers__list{overscroll-behavior:contain}.ck.ck-link-providers .ck-link__empty-list-info{padding:calc(2 * var(--ck-spacing-large)) var(--ck-spacing-medium);text-align:center;font-style:italic}.ck-editor__editable .ck-list-bogus-paragraph{display:block}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{row-gap:var(--ck-spacing-medium);column-gap:var(--ck-spacing-medium);padding:var(--ck-spacing-large);grid-template-columns:repeat(3,auto)}.ck.ck-list-styles-list .ck-button{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size);box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button .ck-icon{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size)}.ck.ck-list-styles-list{display:grid}.ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}.ck.ck-list-properties.ck-list-properties_without-styles>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{width:100%;min-width:auto}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{margin-bottom:calc(-1 * var(--ck-spacing-tiny));background:0 0;padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{box-shadow:none;background:0 0;border-color:#0000}:root{--ck-content-list-marker-color:var(--ck-content-font-color);--ck-content-list-marker-font-family:var(--ck-content-font-family);--ck-content-list-marker-font-size:var(--ck-content-font-size)}.ck-content li>p:first-of-type{margin-top:0}.ck-content li>p:only-of-type{margin-top:0;margin-bottom:0}.ck-content li.ck-list-marker-bold::marker{font-weight:700}.ck-content li.ck-list-marker-italic::marker{font-style:italic}.ck-content li.ck-list-marker-color::marker{color:var(--ck-content-list-marker-color)}.ck-content li.ck-list-marker-font-family::marker{font-family:var(--ck-content-list-marker-font-family)}.ck-content li.ck-list-marker-font-size::marker{font-size:var(--ck-content-list-marker-font-size)}.ck-content li.ck-list-marker-font-size-tiny::marker{font-size:var(--ck-content-font-size-tiny)}.ck-content li.ck-list-marker-font-size-small::marker{font-size:var(--ck-content-font-size-small)}.ck-content li.ck-list-marker-font-size-big::marker{font-size:var(--ck-content-font-size-big)}.ck-content li.ck-list-marker-font-size-huge::marker{font-size:var(--ck-content-font-size-huge)}.ck-content ol{list-style-type:decimal}.ck-content ol ol{list-style-type:lower-latin}.ck-content ol ol ol{list-style-type:lower-roman}.ck-content ol ol ol ol{list-style-type:upper-latin}.ck-content ol ol ol ol ol{list-style-type:upper-roman}.ck-content ul{list-style-type:disc}.ck-content ul ul{list-style-type:circle}.ck-content ul ul ul{list-style-type:square}.ck-content ul ul ul ul{list-style-type:square}:root{--ck-content-todo-list-checkmark-size:16px}.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{-webkit-appearance:none;width:var(--ck-content-todo-list-checkmark-size);height:var(--ck-content-todo-list-checkmark-size);vertical-align:middle;border:0;margin-left:0;margin-right:-15px;display:inline-block;position:relative;left:-25px;right:0}[dir=rtl]:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input){margin-left:-15px;margin-right:0;left:0;right:-25px}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{box-sizing:border-box;content:"";border:1px solid #333;border-radius:2px;width:100%;height:100%;transition:box-shadow .25s ease-in-out;display:block;position:absolute}@media (prefers-reduced-motion:reduce){:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{transition:none}}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):after{box-sizing:content-box;pointer-events:none;content:"";left:calc(var(--ck-content-todo-list-checkmark-size) / 3);top:calc(var(--ck-content-todo-list-checkmark-size) / 5.3);width:calc(var(--ck-content-todo-list-checkmark-size) / 5.3);height:calc(var(--ck-content-todo-list-checkmark-size) / 2.6);border-style:solid;border-color:#0000;border-width:0 calc(var(--ck-content-todo-list-checkmark-size) / 8) calc(var(--ck-content-todo-list-checkmark-size) / 8) 0;display:block;position:absolute;transform:rotate(45deg)}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:before{background:#26ab33;border-color:#26ab33}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:after{border-color:#fff}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px;position:relative}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{cursor:pointer}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):hover:before{box-shadow:0 0 0 5px #0000001a}.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-content .media{clear:both;min-width:15em;margin:.9em auto;display:block}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3 * var(--ck-spacing-standard));background:var(--ck-color-base-foreground);flex-direction:column;align-items:center;display:flex}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;text-overflow:ellipsis;font-style:italic}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{display:block;overflow:hidden}.ck-media__wrapper[data-oembed-url*="google.com/maps"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="goo.gl/maps"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="maps.google.com"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*="maps.app.goo.gl"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMCAwIDMuNzggMS42MWg0OS42MjFjMS42OTQgMCAzLjE5LS43OTggNC4xNDYtMi4wMzd6IiBmaWxsPSIjNWM4OGM1Ii8+PHBhdGggZD0iTTIyNi43NDIgMjIyLjk4OGMtOS4yNjYgMC0xNi43NzcgNy4xNy0xNi43NzcgMTYuMDE0LjAwNyAyLjc2Mi42NjMgNS40NzQgMi4wOTMgNy44NzUuNDMuNzAzLjgzIDEuNDA4IDEuMTkgMi4xMDcuMzMzLjUwMi42NSAxLjAwNS45NSAxLjUwOC4zNDMuNDc3LjY3My45NTcuOTg4IDEuNDQgMS4zMSAxLjc2OSAyLjUgMy41MDIgMy42MzcgNS4xNjguNzkzIDEuMjc1IDEuNjgzIDIuNjQgMi40NjYgMy45OSAyLjM2MyA0LjA5NCA0LjAwNyA4LjA5MiA0LjYgMTMuOTE0di4wMTJjLjE4Mi40MTIuNTE2LjY2Ni44NzkuNjY3LjQwMy0uMDAxLjc2OC0uMzE0LjkzLS43OTkuNjAzLTUuNzU2IDIuMjM4LTkuNzI5IDQuNTg1LTEzLjc5NC43ODItMS4zNSAxLjY3My0yLjcxNSAyLjQ2NS0zLjk5IDEuMTM3LTEuNjY2IDIuMzI4LTMuNCAzLjYzOC01LjE2OS4zMTUtLjQ4Mi42NDUtLjk2Mi45ODgtMS40MzkuMy0uNTAzLjYxNy0xLjAwNi45NS0xLjUwOC4zNTktLjcuNzYtMS40MDQgMS4xOS0yLjEwNyAxLjQyNi0yLjQwMiAyLTUuMTE0IDIuMDA0LTcuODc1IDAtOC44NDQtNy41MTEtMTYuMDE0LTE2Ljc3Ni0xNi4wMTR6IiBmaWxsPSIjZGQ0YjNlIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxlbGxpcHNlIHJ5PSI1LjU2NCIgcng9IjUuODI4IiBjeT0iMjM5LjAwMiIgY3g9IjIyNi43NDIiIGZpbGw9IiM4MDJkMjciIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTE5MC4zMDEgMjM3LjI4M2MtNC42NyAwLTguNDU3IDMuODUzLTguNDU3IDguNjA2czMuNzg2IDguNjA3IDguNDU3IDguNjA3YzMuMDQzIDAgNC44MDYtLjk1OCA2LjMzNy0yLjUxNiAxLjUzLTEuNTU3IDIuMDg3LTMuOTEzIDIuMDg3LTYuMjkgMC0uMzYyLS4wMjMtLjcyMi0uMDY0LTEuMDc5aC04LjI1N3YzLjA0M2g0Ljg1Yy0uMTk3Ljc1OS0uNTMxIDEuNDUtMS4wNTggMS45ODYtLjk0Mi45NTgtMi4wMjggMS41NDgtMy45MDEgMS41NDgtMi44NzYgMC01LjIwOC0yLjM3Mi01LjIwOC01LjI5OSAwLTIuOTI2IDIuMzMyLTUuMjk5IDUuMjA4LTUuMjk5IDEuMzk5IDAgMi42MTguNDA3IDMuNTg0IDEuMjkzbDIuMzgxLTIuMzhjMC0uMDAyLS4wMDMtLjAwNC0uMDA0LS4wMDUtMS41ODgtMS41MjQtMy42Mi0yLjIxNS01Ljk1NS0yLjIxNXptNC40MyA1LjY2bC4wMDMuMDA2di0uMDAzeiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjE1LjE4NCAyNTEuOTI5bC03Ljk4IDcuOTc5IDI4LjQ3NyAyOC40NzVjLjI4Ny0uNjQ5LjQ0OS0xLjM2Ni40NDktMi4xMjN2LTMxLjE2NWMtLjQ2OS42NzUtLjkzNCAxLjM0OS0xLjM4MiAyLjAwNS0uNzkyIDEuMjc1LTEuNjgyIDIuNjQtMi40NjUgMy45OS0yLjM0NyA0LjA2NS0zLjk4MiA4LjAzOC00LjU4NSAxMy43OTQtLjE2Mi40ODUtLjUyNy43OTgtLjkzLjc5OS0uMzYzLS4wMDEtLjY5Ny0uMjU1LS44NzktLjY2N3YtLjAxMmMtLjU5My01LjgyMi0yLjIzNy05LjgyLTQuNi0xMy45MTQtLjc4My0xLjM1LTEuNjczLTIuNzE1LTIuNDY2LTMuOTktMS4xMzctMS42NjYtMi4zMjctMy40LTMuNjM3LTUuMTY5bC0uMDAyLS4wMDN6IiBmaWxsPSIjYzNjM2MzIi8+PHBhdGggZD0iTTIxMi45ODMgMjQ4LjQ5NWwtMzYuOTUyIDM2Ljk1M3YuODEyYTUuMjI3IDUuMjI3IDAgMCAwIDUuMjM4IDUuMjM4aDEuMDE1bDM1LjY2Ni0zNS42NjZhMTM2LjI3NSAxMzYuMjc1IDAgMCAwLTIuNzY0LTMuOSAzNy41NzUgMzcuNTc1IDAgMCAwLS45ODktMS40NGMtLjI5OS0uNTAzLS42MTYtMS4wMDYtLjk1LTEuNTA4LS4wODMtLjE2Mi0uMTc2LS4zMjYtLjI2NC0uNDg5eiIgZmlsbD0iI2ZkZGM0ZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjExLjk5OCAyNjEuMDgzbC02LjE1MiA2LjE1MSAyNC4yNjQgMjQuMjY0aC43ODFhNS4yMjcgNS4yMjcgMCAwIDAgNS4yMzktNS4yMzh2LTEuMDQ1eiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48L2c+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIxMDI0cHgiIGhlaWdodD0iMTAyNHB4IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiAgICAgICAgPHRpdGxlPkZpbGwgMTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZGVmcz48L2RlZnM+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9ImZMb2dvX1doaXRlIiBmaWxsPSIjRkZGRkZFIj4gICAgICAgICAgICA8cGF0aCBkPSJNOTY3LjQ4NCwwIEw1Ni41MTcsMCBDMjUuMzA0LDAgMCwyNS4zMDQgMCw1Ni41MTcgTDAsOTY3LjQ4MyBDMCw5OTguNjk0IDI1LjI5NywxMDI0IDU2LjUyMiwxMDI0IEw1NDcsMTAyNCBMNTQ3LDYyOCBMNDE0LDYyOCBMNDE0LDQ3MyBMNTQ3LDQ3MyBMNTQ3LDM1OS4wMjkgQzU0NywyMjYuNzY3IDYyNy43NzMsMTU0Ljc0NyA3NDUuNzU2LDE1NC43NDcgQzgwMi4yNjksMTU0Ljc0NyA4NTAuODQyLDE1OC45NTUgODY1LDE2MC44MzYgTDg2NSwyOTkgTDc4My4zODQsMjk5LjAzNyBDNzE5LjM5MSwyOTkuMDM3IDcwNywzMjkuNTI5IDcwNywzNzQuMjczIEw3MDcsNDczIEw4NjAuNDg3LDQ3MyBMODQwLjUwMSw2MjggTDcwNyw2MjggTDcwNywxMDI0IEw5NjcuNDg0LDEwMjQgQzk5OC42OTcsMTAyNCAxMDI0LDk5OC42OTcgMTAyNCw5NjcuNDg0IEwxMDI0LDU2LjUxNSBDMTAyNCwyNS4zMDMgOTk4LjY5NywwIDk2Ny40ODQsMCIgaWQ9IkZpbGwtMSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*=facebook\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI1MDRweCIgaGVpZ2h0PSI1MDRweCIgdmlld0JveD0iMCAwIDUwNCA1MDQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+Z2x5cGgtbG9nb19NYXkyMDE2PC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPiAgICAgICAgPHBvbHlnb24gaWQ9InBhdGgtMSIgcG9pbnRzPSIwIDAuMTU5IDUwMy44NDEgMC4xNTkgNTAzLjg0MSA1MDMuOTQgMCA1MDMuOTQiPjwvcG9seWdvbj4gICAgPC9kZWZzPiAgICA8ZyBpZD0iZ2x5cGgtbG9nb19NYXkyMDE2IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJHcm91cC0zIj4gICAgICAgICAgICA8bWFzayBpZD0ibWFzay0yIiBmaWxsPSJ3aGl0ZSI+ICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+ICAgICAgICAgICAgPC9tYXNrPiAgICAgICAgICAgIDxnIGlkPSJDbGlwLTIiPjwvZz4gICAgICAgICAgICA8cGF0aCBkPSJNMjUxLjkyMSwwLjE1OSBDMTgzLjUwMywwLjE1OSAxNzQuOTI0LDAuNDQ5IDE0OC4wNTQsMS42NzUgQzEyMS4yNCwyLjg5OCAxMDIuOTI3LDcuMTU3IDg2LjkwMywxMy4zODUgQzcwLjMzNywxOS44MjIgNTYuMjg4LDI4LjQzNiA0Mi4yODIsNDIuNDQxIEMyOC4yNzcsNTYuNDQ3IDE5LjY2Myw3MC40OTYgMTMuMjI2LDg3LjA2MiBDNi45OTgsMTAzLjA4NiAyLjczOSwxMjEuMzk5IDEuNTE2LDE0OC4yMTMgQzAuMjksMTc1LjA4MyAwLDE4My42NjIgMCwyNTIuMDggQzAsMzIwLjQ5NyAwLjI5LDMyOS4wNzYgMS41MTYsMzU1Ljk0NiBDMi43MzksMzgyLjc2IDYuOTk4LDQwMS4wNzMgMTMuMjI2LDQxNy4wOTcgQzE5LjY2Myw0MzMuNjYzIDI4LjI3Nyw0NDcuNzEyIDQyLjI4Miw0NjEuNzE4IEM1Ni4yODgsNDc1LjcyMyA3MC4zMzcsNDg0LjMzNyA4Ni45MDMsNDkwLjc3NSBDMTAyLjkyNyw0OTcuMDAyIDEyMS4yNCw1MDEuMjYxIDE0OC4wNTQsNTAyLjQ4NCBDMTc0LjkyNCw1MDMuNzEgMTgzLjUwMyw1MDQgMjUxLjkyMSw1MDQgQzMyMC4zMzgsNTA0IDMyOC45MTcsNTAzLjcxIDM1NS43ODcsNTAyLjQ4NCBDMzgyLjYwMSw1MDEuMjYxIDQwMC45MTQsNDk3LjAwMiA0MTYuOTM4LDQ5MC43NzUgQzQzMy41MDQsNDg0LjMzNyA0NDcuNTUzLDQ3NS43MjMgNDYxLjU1OSw0NjEuNzE4IEM0NzUuNTY0LDQ0Ny43MTIgNDg0LjE3OCw0MzMuNjYzIDQ5MC42MTYsNDE3LjA5NyBDNDk2Ljg0Myw0MDEuMDczIDUwMS4xMDIsMzgyLjc2IDUwMi4zMjUsMzU1Ljk0NiBDNTAzLjU1MSwzMjkuMDc2IDUwMy44NDEsMzIwLjQ5NyA1MDMuODQxLDI1Mi4wOCBDNTAzLjg0MSwxODMuNjYyIDUwMy41NTEsMTc1LjA4MyA1MDIuMzI1LDE0OC4yMTMgQzUwMS4xMDIsMTIxLjM5OSA0OTYuODQzLDEwMy4wODYgNDkwLjYxNiw4Ny4wNjIgQzQ4NC4xNzgsNzAuNDk2IDQ3NS41NjQsNTYuNDQ3IDQ2MS41NTksNDIuNDQxIEM0NDcuNTUzLDI4LjQzNiA0MzMuNTA0LDE5LjgyMiA0MTYuOTM4LDEzLjM4NSBDNDAwLjkxNCw3LjE1NyAzODIuNjAxLDIuODk4IDM1NS43ODcsMS42NzUgQzMyOC45MTcsMC40NDkgMzIwLjMzOCwwLjE1OSAyNTEuOTIxLDAuMTU5IFogTTI1MS45MjEsNDUuNTUgQzMxOS4xODYsNDUuNTUgMzI3LjE1NCw0NS44MDcgMzUzLjcxOCw0Ny4wMTkgQzM3OC4yOCw0OC4xMzkgMzkxLjYxOSw1Mi4yNDMgNDAwLjQ5Niw1NS42OTMgQzQxMi4yNTUsNjAuMjYzIDQyMC42NDcsNjUuNzIyIDQyOS40NjIsNzQuNTM4IEM0MzguMjc4LDgzLjM1MyA0NDMuNzM3LDkxLjc0NSA0NDguMzA3LDEwMy41MDQgQzQ1MS43NTcsMTEyLjM4MSA0NTUuODYxLDEyNS43MiA0NTYuOTgxLDE1MC4yODIgQzQ1OC4xOTMsMTc2Ljg0NiA0NTguNDUsMTg0LjgxNCA0NTguNDUsMjUyLjA4IEM0NTguNDUsMzE5LjM0NSA0NTguMTkzLDMyNy4zMTMgNDU2Ljk4MSwzNTMuODc3IEM0NTUuODYxLDM3OC40MzkgNDUxLjc1NywzOTEuNzc4IDQ0OC4zMDcsNDAwLjY1NSBDNDQzLjczNyw0MTIuNDE0IDQzOC4yNzgsNDIwLjgwNiA0MjkuNDYyLDQyOS42MjEgQzQyMC42NDcsNDM4LjQzNyA0MTIuMjU1LDQ0My44OTYgNDAwLjQ5Niw0NDguNDY2IEMzOTEuNjE5LDQ1MS45MTYgMzc4LjI4LDQ1Ni4wMiAzNTMuNzE4LDQ1Ny4xNCBDMzI3LjE1OCw0NTguMzUyIDMxOS4xOTEsNDU4LjYwOSAyNTEuOTIxLDQ1OC42MDkgQzE4NC42NSw0NTguNjA5IDE3Ni42ODQsNDU4LjM1MiAxNTAuMTIzLDQ1Ny4xNCBDMTI1LjU2MSw0NTYuMDIgMTEyLjIyMiw0NTEuOTE2IDEwMy4zNDUsNDQ4LjQ2NiBDOTEuNTg2LDQ0My44OTYgODMuMTk0LDQzOC40MzcgNzQuMzc5LDQyOS42MjEgQzY1LjU2NCw0MjAuODA2IDYwLjEwNCw0MTIuNDE0IDU1LjUzNCw0MDAuNjU1IEM1Mi4wODQsMzkxLjc3OCA0Ny45OCwzNzguNDM5IDQ2Ljg2LDM1My44NzcgQzQ1LjY0OCwzMjcuMzEzIDQ1LjM5MSwzMTkuMzQ1IDQ1LjM5MSwyNTIuMDggQzQ1LjM5MSwxODQuODE0IDQ1LjY0OCwxNzYuODQ2IDQ2Ljg2LDE1MC4yODIgQzQ3Ljk4LDEyNS43MiA1Mi4wODQsMTEyLjM4MSA1NS41MzQsMTAzLjUwNCBDNjAuMTA0LDkxLjc0NSA2NS41NjMsODMuMzUzIDc0LjM3OSw3NC41MzggQzgzLjE5NCw2NS43MjIgOTEuNTg2LDYwLjI2MyAxMDMuMzQ1LDU1LjY5MyBDMTEyLjIyMiw1Mi4yNDMgMTI1LjU2MSw0OC4xMzkgMTUwLjEyMyw0Ny4wMTkgQzE3Ni42ODcsNDUuODA3IDE4NC42NTUsNDUuNTUgMjUxLjkyMSw0NS41NSBaIiBpZD0iRmlsbC0xIiBmaWxsPSIjRkZGRkZGIiBtYXNrPSJ1cmwoI21hc2stMikiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgICAgIDxwYXRoIGQ9Ik0yNTEuOTIxLDMzNi4wNTMgQzIwNS41NDMsMzM2LjA1MyAxNjcuOTQ3LDI5OC40NTcgMTY3Ljk0NywyNTIuMDggQzE2Ny45NDcsMjA1LjcwMiAyMDUuNTQzLDE2OC4xMDYgMjUxLjkyMSwxNjguMTA2IEMyOTguMjk4LDE2OC4xMDYgMzM1Ljg5NCwyMDUuNzAyIDMzNS44OTQsMjUyLjA4IEMzMzUuODk0LDI5OC40NTcgMjk4LjI5OCwzMzYuMDUzIDI1MS45MjEsMzM2LjA1MyBaIE0yNTEuOTIxLDEyMi43MTUgQzE4MC40NzQsMTIyLjcxNSAxMjIuNTU2LDE4MC42MzMgMTIyLjU1NiwyNTIuMDggQzEyMi41NTYsMzIzLjUyNiAxODAuNDc0LDM4MS40NDQgMjUxLjkyMSwzODEuNDQ0IEMzMjMuMzY3LDM4MS40NDQgMzgxLjI4NSwzMjMuNTI2IDM4MS4yODUsMjUyLjA4IEMzODEuMjg1LDE4MC42MzMgMzIzLjM2NywxMjIuNzE1IDI1MS45MjEsMTIyLjcxNSBaIiBpZD0iRmlsbC00IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgICAgICA8cGF0aCBkPSJNNDE2LjYyNywxMTcuNjA0IEM0MTYuNjI3LDEzNC4zIDQwMy4wOTIsMTQ3LjgzNCAzODYuMzk2LDE0Ny44MzQgQzM2OS43MDEsMTQ3LjgzNCAzNTYuMTY2LDEzNC4zIDM1Ni4xNjYsMTE3LjYwNCBDMzU2LjE2NiwxMDAuOTA4IDM2OS43MDEsODcuMzczIDM4Ni4zOTYsODcuMzczIEM0MDMuMDkyLDg3LjM3MyA0MTYuNjI3LDEwMC45MDggNDE2LjYyNywxMTcuNjA0IiBpZD0iRmlsbC01IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgIDwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*=instagram\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IldoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQwMCA0MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5zdDB7ZmlsbDojRkZGRkZGO308L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAsMjAwYzAsMTEwLjUtODkuNSwyMDAtMjAwLDIwMFMwLDMxMC41LDAsMjAwUzg5LjUsMCwyMDAsMFM0MDAsODkuNSw0MDAsMjAweiBNMTYzLjQsMzA1LjVjODguNywwLDEzNy4yLTczLjUsMTM3LjItMTM3LjJjMC0yLjEsMC00LjItMC4xLTYuMmM5LjQtNi44LDE3LjYtMTUuMywyNC4xLTI1Yy04LjYsMy44LTE3LjksNi40LTI3LjcsNy42YzEwLTYsMTcuNi0xNS40LDIxLjItMjYuN2MtOS4zLDUuNS0xOS42LDkuNS0zMC42LDExLjdjLTguOC05LjQtMjEuMy0xNS4yLTM1LjItMTUuMmMtMjYuNiwwLTQ4LjIsMjEuNi00OC4yLDQ4LjJjMCwzLjgsMC40LDcuNSwxLjMsMTFjLTQwLjEtMi03NS42LTIxLjItOTkuNC01MC40Yy00LjEsNy4xLTYuNSwxNS40LTYuNSwyNC4yYzAsMTYuNyw4LjUsMzEuNSwyMS41LDQwLjFjLTcuOS0wLjItMTUuMy0yLjQtMjEuOC02YzAsMC4yLDAsMC40LDAsMC42YzAsMjMuNCwxNi42LDQyLjgsMzguNyw0Ny4zYy00LDEuMS04LjMsMS43LTEyLjcsMS43Yy0zLjEsMC02LjEtMC4zLTkuMS0wLjljNi4xLDE5LjIsMjMuOSwzMy4xLDQ1LDMzLjVjLTE2LjUsMTIuOS0zNy4zLDIwLjYtNTkuOSwyMC42Yy0zLjksMC03LjctMC4yLTExLjUtMC43QzExMC44LDI5Ny41LDEzNi4yLDMwNS41LDE2My40LDMwNS41Ii8+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*=twitter\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}:is(.ck-media__wrapper[data-oembed-url*=twitter\.com],.ck-media__wrapper[data-oembed-url*="google.com/maps"],.ck-media__wrapper[data-oembed-url*="goo.gl/maps"],.ck-media__wrapper[data-oembed-url*="maps.google.com"],.ck-media__wrapper[data-oembed-url*="maps.app.goo.gl"],.ck-media__wrapper[data-oembed-url*=facebook\.com],.ck-media__wrapper[data-oembed-url*=instagram\.com]) .ck-media__placeholder__icon *{display:none}.ck-content .media:has(>div[data-oembed-url*="open.spotify.com"]){width:300px;min-width:286px}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}.ck-content .media.media_resized{box-sizing:border-box;max-width:100%;display:block}.ck-content .media.media_resized>div[data-oembed-url]{width:100%}.ck .ck-widget.media:-webkit-drag>.ck-widget__resizer{display:none}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-media-embed-button .ck-button__label{width:4em}:root{--ck-media-embed-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-media-embed-custom-resize-form-width:300px}}.ck.ck-media-embed-custom-resize-form.ck-responsive-form{width:var(--ck-media-embed-custom-resize-form-width)}:root{--ck-content-media-style-spacing:1.5em}.ck-content .media.media-style-align-left,.ck-content .media.media-style-align-right{clear:none;width:100%}.ck-content .media.media-style-align-left{float:left;margin-right:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-align-right{float:right;margin-left:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .media.media-style-block-align-right{margin-left:auto;margin-right:0}.ck.ck-media-form{flex-flow:row;align-items:flex-start;width:400px;display:flex}.ck.ck-media-form .ck-labeled-field-view{width:100%;display:inline-block}.ck.ck-media-form .ck-label{display:none}.ck.ck-media-form .ck-input{width:100%}@media screen and (width<=600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}:root{--ck-content-color-mention-background:#9900301a;--ck-content-color-mention-text:#990030}.ck-content .mention{background:var(--ck-content-color-mention-background);color:var(--ck-content-color-mention-text)}:root{--ck-mention-list-max-height:300px}.ck.ck-mentions{max-height:var(--ck-mention-list-max-height);overscroll-behavior:contain;overflow:hidden auto}.ck.ck-mentions>.ck-list__item{flex-shrink:0;overflow:hidden}div.ck.ck-balloon-panel.ck-mention-balloon{z-index:calc(var(--ck-z-dialog) + 1)}:root{--ck-color-minimap-tracker-background:208, 0%, 51%;--ck-color-minimap-iframe-outline:#bfbfbf;--ck-color-minimap-iframe-shadow:#0000001c;--ck-color-minimap-progress-background:#666}.ck.ck-minimap{user-select:none;background:var(--ck-color-base-background);position:absolute}.ck.ck-minimap,.ck.ck-minimap iframe{width:100%;height:100%}.ck.ck-minimap iframe{pointer-events:none;outline:1px solid var(--ck-color-minimap-iframe-outline);box-shadow:0 2px 5px var(--ck-color-minimap-iframe-shadow);border:0;margin:0;position:relative}.ck.ck-minimap .ck.ck-minimap__position-tracker{background:hsla(var(--ck-color-minimap-tracker-background), .2);z-index:1;width:100%;transition:background .1s ease-in-out;position:absolute;top:0}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker{transition:none}}.ck.ck-minimap .ck.ck-minimap__position-tracker:hover{background:hsla(var(--ck-color-minimap-tracker-background), .3)}.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover{background:hsla(var(--ck-color-minimap-tracker-background), .4)}:is(.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover):after{opacity:1}.ck.ck-minimap .ck.ck-minimap__position-tracker:after{content:attr(data-progress) "%";background:var(--ck-color-minimap-progress-background);color:var(--ck-color-base-background);border:1px solid var(--ck-color-base-background);opacity:0;border-radius:3px;padding:2px 4px;font-size:10px;transition:opacity .1s ease-in-out;position:absolute;top:5px;right:5px}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker:after{transition:none}}.ck-content .page-break{clear:both;justify-content:center;align-items:center;padding:5px 0;display:flex;position:relative}.ck-content .page-break:after{content:"";border-bottom:2px dashed #c4c4c4;width:100%;position:absolute}.ck-content .page-break__label{z-index:1;text-transform:uppercase;color:#333;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #c4c4c4;border-radius:2px;padding:.3em .6em;font-size:.75em;font-weight:700;display:block;position:relative;box-shadow:2px 2px 1px #00000026}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}.ck-content :has(+.page-break){margin-bottom:0}}:root{--ck-color-restricted-editing-exception-background:#ffa94c33;--ck-color-restricted-editing-exception-hover-background:#ffa94c59;--ck-color-restricted-editing-exception-brackets:#cc690066;--ck-color-restricted-editing-selected-exception-background:#ffa94c80;--ck-color-restricted-editing-selected-exception-brackets:#cc690099}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right, var(--ck-color-restricted-editing-exception-brackets) 0%, var(--ck-color-restricted-editing-exception-brackets) 5px, #0000 6px, #0000 calc(100% - 6px), var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px), var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}@media (prefers-reduced-motion:reduce){.ck-editor__editable .restricted-editing-exception{transition:none}}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right, var(--ck-color-restricted-editing-selected-exception-brackets) 0%, var(--ck-color-restricted-editing-selected-exception-brackets) 5px, var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px), var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted{cursor:default}.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}:root{--ck-show-blocks-border-color:#757575}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) address{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-address-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-address-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) aside{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-aside-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-aside-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) blockquote{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-blockquote-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-blockquote-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) details{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-details-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-details-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) div:not(.ck-widget,.ck-widget *){--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-div-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-div-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) footer{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-footer-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-footer-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h1{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h1-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h1-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h2{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h2-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h2-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h3{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h3-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h3-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h4{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h4-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h4-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h5{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h5-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h5-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h6{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h6-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h6-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) header{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-header-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-header-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) main{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-main-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-main-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) nav{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-nav-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-nav-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) pre{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-pre-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-pre-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ol{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ol-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ol-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ul{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ul-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ul-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) p{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-p-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-p-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) section{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-section-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-section-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(figure.image,figure.table) figcaption{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-figcaption-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-figcaption-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-repeat:no-repeat;padding-top:15px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption):where(:not(.ck-widget_selected):not(.ck-widget:hover)){outline:1px dashed var(--ck-show-blocks-border-color)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(ltr) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-ltr);background-position:1px 1px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(rtl) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-rtl);background-position:calc(100% - 1px) 1px}.ck-source-editing-area{position:relative;overflow:hidden}.ck-source-editing-area:after,.ck-source-editing-area textarea{padding:var(--ck-spacing-large);line-height:var(--ck-line-height-base);font-size:var(--ck-font-size-normal);white-space:pre-wrap;border:1px solid #0000;margin:0;font-family:monospace}.ck-source-editing-area:after{content:attr(data-value) " ";visibility:hidden;display:block}.ck-source-editing-area textarea{resize:none;box-sizing:border-box;border-color:var(--ck-color-base-border);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0;outline:none;width:100%;height:100%;position:absolute;overflow:hidden}.ck-source-editing-area textarea:not([readonly]):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow), 0 0;outline:none}.ck.ck-special-characters-navigation>.ck-label{text-overflow:ellipsis;max-width:160px;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}@media screen and (width<=600px){.ck.ck-special-characters-navigation{max-width:190px}.ck.ck-special-characters-navigation>.ck-form__header__label{text-overflow:ellipsis;overflow:hidden}}.ck.ck-special-characters>.ck-dialog__content>div{grid-column-gap:0px;grid-row-gap:0px;grid-template-rows:auto 1fr auto;grid-template-columns:1fr;width:350px;max-width:100%;height:100%;display:grid}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories{padding:var(--ck-spacing-medium) var(--ck-spacing-large);grid-area:1/1/2/2}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view{padding-top:var(--ck-spacing-standard);width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center;animation:.15s both ck-table-form-labeled-view-status-appear}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);border-style:solid}@media (prefers-reduced-motion:reduce){.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown{width:100%;display:block}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button>span{width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-grid{grid-area:2/1/3/2;max-height:200px}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-info{grid-area:3/1/4/2}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow:hidden auto}.ck.ck-character-grid .ck-character-grid__tiles{grid-template-columns:repeat(auto-fill, minmax(var(--ck-character-grid-tile-size), 1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard);display:grid}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);border:0;padding:0;font-size:1.5em;transition:box-shadow .2s}@media (prefers-reduced-motion:reduce){.ck.ck-character-grid .ck-character-grid__tile{transition:none}}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);border:0}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);text-align:center;width:100%}.ck.ck-character-grid{max-width:100%}.ck.ck-character-info{padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border);display:flex}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{text-overflow:ellipsis;max-width:280px;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}.ck.ck-character-info{justify-content:space-between}.ck.ck-dropdown.ck-style-dropdown.ck-style-dropdown_multiple-active>.ck-button>.ck-button__label{font-style:italic}:root{--ck-style-panel-button-width:120px;--ck-style-panel-button-height:80px;--ck-style-panel-button-label-background:#f0f0f0;--ck-style-panel-button-hover-label-background:#ebebeb;--ck-style-panel-button-hover-border-color:#b3b3b3;--ck-style-panel-columns:3}.ck.ck-style-panel .ck-style-grid{row-gap:var(--ck-spacing-large);column-gap:var(--ck-spacing-large);grid-template-columns:repeat(var(--ck-style-panel-columns),auto);display:grid}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{--ck-color-button-default-hover-background:var(--ck-color-base-background);--ck-color-button-default-active-background:var(--ck-color-base-background);width:var(--ck-style-panel-button-width);height:var(--ck-style-panel-button-height);justify-content:space-between;padding:0;display:flex}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-button__label{width:100%;height:22px;padding:0 var(--ck-spacing-medium);text-overflow:ellipsis;flex-shrink:0;line-height:22px;overflow:hidden}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-style-grid__button__preview{opacity:.9;width:100%;padding:var(--ck-spacing-medium);background:var(--ck-color-base-background);border:2px solid var(--ck-color-base-background);flex-grow:1;flex-basis:100%;place-content:center flex-start;align-items:center;display:flex;overflow:hidden}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled{--ck-color-button-default-disabled-background:var(--ck-color-base-foreground)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled:not(:focus){border-color:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled .ck-style-grid__button__preview{opacity:.4;border-color:var(--ck-color-base-foreground);filter:saturate(.3)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on{border-color:var(--ck-color-base-active)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on .ck-button__label{box-shadow:0 -1px 0 var(--ck-color-base-active);z-index:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on:hover{border-color:var(--ck-color-base-active-focus)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on) .ck-button__label{background:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on):hover .ck-button__label{background:var(--ck-style-panel-button-hover-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on){border-color:var(--ck-style-panel-button-hover-border-color)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on) .ck-style-grid__button__preview{opacity:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{flex-direction:column}.ck.ck-style-panel .ck-style-grid{justify-content:start}.ck.ck-style-panel .ck-style-panel__style-group>.ck-label{margin:var(--ck-spacing-large) 0}.ck.ck-style-panel .ck-style-panel__style-group:first-child>.ck-label{margin-top:0}:root{--ck-style-panel-max-height:470px}.ck.ck-style-panel{padding:var(--ck-spacing-large);max-height:var(--ck-style-panel-max-height);overflow-y:auto}.ck-content .table th{text-align:start}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}.ck-content figure.table:not(.layout-table){display:table}.ck-content figure.table:not(.layout-table)>table{width:100%;height:100%}.ck-content .table:not(.layout-table){margin:.9em auto}.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table{border-collapse:collapse;border-spacing:0;border:1px double #b3b3b3}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{background:#0000000d;font-weight:700}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:first-of-type{margin-top:0}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:last-of-type{margin-bottom:0}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{border:1px solid #bfbfbf;min-width:2em;padding:.4em}@media print{.ck-content figure.table:not(.layout-table){width:fit-content;height:fit-content}.ck-content figure.table:not(.layout-table)>table{height:initial}}.ck-editor__editable .ck-table-bogus-paragraph{width:100%;display:inline-block}:root{--ck-color-table-focused-cell-background:#9ec9fa4d;--ck-table-content-default-border-color:#d4d4d4;--ck-table-border-none-helper-line-color:#d4d4d4;--ck-table-border-none-helper-line-style:dashed;--ck-table-border-none-helper-line-width:1px}.ck-widget.table table[style*=border\:none],.ck-widget.table table[style*=border-style\:none],.ck-widget.table table[style*=border\:0],.ck-widget.table table[style*=border-width\:0]{outline:var(--ck-table-content-default-border-color) 1px dashed}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable{outline:unset}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected).ck-editor__nested-editable_focused,:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected):focus{background:var(--ck-color-table-focused-cell-background);outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table){--ck-table-border-none-helper-line:var(--ck-table-border-none-helper-line-width) var(--ck-table-border-none-helper-line-style) var(--ck-table-border-none-helper-line-color)}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(td,th):where([style*=border\:none],[style*=border\:0],[style*=border-style\:none],[style*=border-width\:0]){border:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-top-style\:none],[style*=border-top-width\:0]){border-top:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-right-style\:none],[style*=border-right-width\:0]){border-right:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-bottom-style\:none],[style*=border-bottom-width\:0]){border-bottom:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-left-style\:none],[style*=border-left-width\:0]){border-left:var(--ck-table-border-none-helper-line)!important}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{align-self:flex-end;width:25%;padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{margin-top:var(--ck-spacing-standard);background:0 0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__horizontal-alignment-toolbar{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__vertical-alignment-toolbar{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:first-of-type{flex-grow:.57}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:last-of-type{flex-grow:.43}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar .ck-button{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:80px;min-width:80px;max-width:80px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width);margin:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{width:0;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);align-self:flex-end;display:inline-block;position:relative;left:-.5ch;overflow:visible}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button{flex-grow:initial}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button .ck-button__label{color:currentColor}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__cell-type-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}:root{--ck-table-layout-widget-type-around-button-size:16px;--ck-table-layout-widget-type-around-icon-width:10px;--ck-table-layout-widget-type-around-icon-height:8px;--ck-table-layout-widget-handler-icon-size:10px;--ck-table-layout-default-border-color:#d4d4d4}.ck-content table.table.layout-table,.ck-content figure.table.layout-table{margin-top:0;margin-bottom:0}.ck-content table.table.layout-table,.ck-content figure.table.layout-table>table{border-spacing:0}.ck-editor__editable .table.layout-table>table{border-collapse:revert;width:100%;height:100%}.ck-editor__editable .table.layout-table>table:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){border-width:0;border-color:#0000;outline:none}.ck-editor__editable .table.layout-table>table>tbody>tr>td{box-shadow:revert;padding:revert;text-indent:1px;border-color:var(--ck-table-layout-default-border-color);border-style:dashed;min-width:2em}.ck-editor__editable .table.layout-table>table>tbody>tr>td[style^=width\:],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=" width:"],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=";width:"]{min-width:auto}.ck-editor__editable .table.layout-table>table>tbody>tr>td:focus{background-color:#0000}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){outline:var(--ck-table-layout-default-border-color) 1px dashed;outline-offset:-1px;border-width:0;border-color:#0000}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]):focus{outline:var(--ck-color-focus-border) 1px solid}.ck-editor__editable .table.layout-table>table>tbody>tr>td>.ck-table-bogus-paragraph{text-indent:0;width:calc(100% - 1px)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around{--ck-widget-type-around-button-size:var(--ck-table-layout-widget-type-around-button-size)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before,.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after{z-index:2;transform:translateY(0)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:var(--ck-table-layout-widget-type-around-button-size);border-radius:0 0 100px 100px;left:min(10%,30px)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before:after{border-radius:0 0 100px 100px}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after{border-radius:100px 100px 0 0}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after:after{border-radius:100px 100px 0 0}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button svg{width:var(--ck-table-layout-widget-type-around-icon-width);height:var(--ck-table-layout-widget-type-around-icon-height)}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_with-selection-handle>.ck-widget__selection-handle{--ck-widget-handler-icon-size:var(--ck-table-layout-widget-handler-icon-size);transform:translateY(calc(0px - var(--ck-widget-outline-thickness)));z-index:3}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:0}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:0}.ck-editor__editable .table.layout-table.ck-widget:hover{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle{opacity:.75;visibility:visible}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle:hover{opacity:1}.ck-editor__editable .table.layout-table.ck-widget:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_selected{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table{margin:0;display:table}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:first-child{margin-top:var(--ck-spacing-large)}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:last-child,.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:nth-last-child(2):has(+.ck-fake-selection-container){margin-bottom:var(--ck-spacing-large)}.ck.ck-form__row>:not(.ck-label)+*{margin-inline-start:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large);justify-content:flex-end}.ck.ck-form__row.ck-table-form__action-row .ck-button-save,.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel{justify-content:center}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form{--ck-table-form-default-input-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width)}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width);margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{width:0;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);align-self:flex-end;display:inline-block;position:relative;left:-.5ch;overflow:visible}.ck.ck-table-form .ck-form__row.ck-table-form__border-row,.ck.ck-table-form .ck-form__row.ck-table-form__background-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row{flex-wrap:wrap;align-items:center}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view{flex-direction:column-reverse;align-items:center;display:flex}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view .ck.ck-dropdown{flex-grow:0}.ck.ck-table-form .ck-form__row:not(.ck-table-form__action-row)>:not(.ck-label,.ck-table-form__dimension-operator){flex-grow:1}.ck.ck-table-form .ck.ck-labeled-field-view{padding-top:var(--ck-spacing-standard)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center;left:50%;bottom:calc(-1 * var(--ck-table-properties-error-arrow-size));animation:.15s both ck-table-form-labeled-view-status-appear;position:absolute;transform:translate(-50%,100%)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);content:"";top:calc(-1 * var(--ck-table-properties-error-arrow-size));border-style:solid;position:absolute;left:50%;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline;align-self:flex-end}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{margin-top:var(--ck-spacing-standard);background:0 0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{flex:1}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}:root{--ck-content-table-style-spacing:1.5em}.ck-content .table.table-style-align-left{float:left;margin-right:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-right{float:right;margin-left:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-content .table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .table.table-style-block-align-right{margin-left:auto;margin-right:0}.ck-editor__editable .table.layout-table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-align-left{margin-right:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-align-right{margin-left:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-block-align-right{margin-left:auto;margin-right:0}:root{--ck-content-color-table-caption-background:#f7f7f7;--ck-content-color-table-caption-text:#333;--ck-color-table-caption-highlighted-background:#fd0}.ck-content .table>figcaption,.ck-content figure.table>table>caption{caption-side:top;word-break:normal;overflow-wrap:anywhere;text-align:center;color:var(--ck-content-color-table-caption-text);background-color:var(--ck-content-color-table-caption-background);outline-offset:-1px;padding:.6em;font-size:.75em;display:table-caption}@media (forced-colors:active){.ck-content .table>figcaption,.ck-content figure.table>table>caption{background-color:unset;color:unset}}@media (forced-colors:none){:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).table__caption_highlighted{animation:.6s ease-out ck-table-caption-highlight}}:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes ck-table-caption-highlight{0%{background-color:var(--ck-color-table-caption-highlighted-background)}to{background-color:var(--ck-content-color-table-caption-background)}}:root{--ck-table-selected-cell-background:#9ecffa4d}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected{caret-color:#0000;box-shadow:unset;position:relative}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:after{content:"";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;inset:0}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:focus{background-color:#0000}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget{outline:unset}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle{display:none}:root{--ck-color-table-column-resizer-hover:var(--ck-color-base-active);--ck-table-column-resizer-width:7px;--ck-table-column-resizer-position-offset:calc(var(--ck-table-column-resizer-width) * -.5 - .5px)}.ck-content .table .ck-table-resized{table-layout:fixed}.ck-content .table td,.ck-content .table th{overflow-wrap:break-word}.ck.ck-editor__editable .table td,.ck.ck-editor__editable .table th{position:relative}.ck.ck-editor__editable .table .ck-table-column-resizer{top:0;bottom:0;right:var(--ck-table-column-resizer-position-offset);width:var(--ck-table-column-resizer-width);cursor:col-resize;user-select:none;z-index:var(--ck-z-default);position:absolute}.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer,.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer{display:none}.ck.ck-editor__editable .table .ck-table-column-resizer:hover,.ck.ck-editor__editable .table .ck-table-column-resizer__active{background-color:var(--ck-color-table-column-resizer-hover);opacity:.25}.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer{left:var(--ck-table-column-resizer-position-offset);right:unset}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-input-text){border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-input-text){border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-input-text:focus{z-index:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{padding:0;display:flex}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-left:1px solid #0000}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-right:1px solid #0000}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:var(--ck-rounded-corners-radius);border:1px solid var(--ck-color-input-border);width:20px;height:20px;position:relative;overflow:hidden}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{transform-origin:50%;background:red;border-radius:2px;width:8%;height:150%;display:block;position:absolute;top:-30%;left:50%;transform:rotate(45deg)}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;padding:calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-input-border)}[dir=ltr] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-right-radius:0}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon){margin-right:0;margin-left:var(--ck-spacing-standard)}.ck.ck-input-color{flex-direction:row-reverse;width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{flex-grow:1;min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width) * 10 + var(--ck-insert-table-dropdown-box-margin) * 20 + var(--ck-insert-table-dropdown-padding) * 2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;flex-flow:wrap;display:flex}.ck .ck-insert-table-dropdown__label,.ck[dir=rtl] .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{min-width:var(--ck-insert-table-dropdown-box-width);min-height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px;outline:none;transition:none}@media (prefers-reduced-motion:reduce){.ck .ck-insert-table-dropdown-grid-box{transition:none}}.ck .ck-insert-table-dropdown-grid-box:focus{box-shadow:none}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:.2s;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background);--ck-color-resizer:var(--ck-color-focus-border);--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2;--ck-resizer-border-radius:var(--ck-border-radius);--ck-resizer-tooltip-offset:10px;--ck-resizer-tooltip-height:calc(var(--ck-spacing-small) * 2 + 10px)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);outline-style:solid;outline-color:#0000}@media (prefers-reduced-motion:reduce){.ck .ck-widget{transition:none}}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget{position:relative}.ck .ck-editor__nested-editable{border:1px solid #0000}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{box-shadow:var(--ck-inner-shadow), 0 0}@media (forced-colors:none){.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{background-color:var(--ck-color-widget-editable-focus-background)}}:is(.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus):not(td,th){border:var(--ck-focus-ring);outline:none}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{box-sizing:border-box;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;left:calc(0px - var(--ck-widget-outline-thickness));background-color:#0000;padding:4px;top:0;transform:translateY(-100%)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border);visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border);visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck .ck-widget:has(.ck-widget.table:hover){outline-color:#0000}.ck .ck-widget.ck-widget_with-selection-handle:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle,:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable:not(.ck-pagination-view)>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable:not(.ck-pagination-view) blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);padding:0 var(--ck-spacing-small);height:var(--ck-resizer-tooltip-height);line-height:var(--ck-resizer-tooltip-height);display:block}.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-above-center{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-above-center{top:calc(var(--ck-resizer-tooltip-height) * -1);left:50%;transform:translate(-50%)}:root{--ck-resizer-size:10px;--ck-resizer-offset:calc(( var(--ck-resizer-size) / -2 ) - 2px);--ck-resizer-border-width:1px}.ck .ck-widget__resizer{outline:1px solid var(--ck-color-resizer);pointer-events:none;display:none;position:absolute;top:0;left:0}.ck .ck-widget__resizer__handle{width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius);pointer-events:all;position:absolute}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{cursor:nesw-resize}.ck .ck-widget_with-resizer{position:relative}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);opacity:0;pointer-events:none;z-index:var(--ck-z-default);border-radius:100px;display:block;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;margin-top:1px;transition:transform .5s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button svg{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button svg{z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button:hover{animation:1s infinite ck-widget-type-around-button-sonar}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:2s linear ck-widget-type-around-arrow-dash}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:2s linear ck-widget-type-around-arrow-tip-dash}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button:hover{animation:none}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline,.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:none}}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-.5 * var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-.5 * var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}:is(.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover):after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);content:"";z-index:calc(var(--ck-z-default) + 1);background:linear-gradient(135deg,#fff0 0%,#ffffff4d 100%);border-radius:100px;display:block;position:absolute;top:1px;left:1px}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after{outline-color:#0000}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{pointer-events:none;background:var(--ck-color-base-text);outline:1px solid #ffffff80;height:1px;animation:1s linear infinite forwards ck-widget-type-around-fake-caret-pulse}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}:is(:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected,:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{opacity:0}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer{opacity:0}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;position:absolute;left:0;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(-1 * var(--ck-widget-outline-thickness));right:calc(-1 * var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:calc(-1 * var(--ck-widget-outline-thickness) - 1px);display:block}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(-1 * var(--ck-widget-outline-thickness) - 1px);display:block}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:0;margin-right:20px}:is(.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget:has(.ck-widget.table:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10px}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7px}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around{display:none}.ck.ck-editor__editable.ck-restricted-editing_mode_restricted div.restricted-editing-exception .ck-widget__type-around{display:initial} -/*# sourceMappingURL=ckeditor5.css.map */ \ No newline at end of file diff --git a/src/web/public/js/vendor/ckeditor5/ckeditor5.css.map b/src/web/public/js/vendor/ckeditor5/ckeditor5.css.map deleted file mode 100644 index 24fc606..0000000 --- a/src/web/public/js/vendor/ckeditor5/ckeditor5.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../ckeditor5-ui/theme/globals/_colors.css","../../../ckeditor5-ui/theme/globals/_reset.css","../../../ckeditor5-ui/theme/globals/_rounded.css","../../../ckeditor5-ui/theme/globals/_shadow.css","../../../ckeditor5-ui/theme/globals/_hidden.css","../../../ckeditor5-ui/theme/globals/_zindex.css","../../../ckeditor5-ui/theme/globals/_transition.css","../../../ckeditor5-ui/theme/globals/_poweredby.css","../../../ckeditor5-ui/theme/globals/_evaluationbadge.css","../../../ckeditor5-ui/theme/components/responsive-form/responsiveform.css","../../../ckeditor5-ui/theme/components/form/form.css","../../../ckeditor5-ui/theme/components/arialiveannouncer/arialiveannouncer.css","../../../ckeditor5-ui/theme/components/editorui/accessibilityhelp.css","../../../ckeditor5-ui/theme/components/button/button.css","../../../ckeditor5-ui/theme/components/button/switchbutton.css","../../../ckeditor5-ui/theme/components/button/listitembutton.css","../../../ckeditor5-ui/theme/components/collapsible/collapsible.css","../../../ckeditor5-ui/theme/components/colorgrid/colorgrid.css","../../../ckeditor5-ui/theme/components/colorpicker/colorpicker.css","../../../ckeditor5-ui/theme/components/colorselector/colorselector.css","../../../ckeditor5-ui/theme/components/dropdown/menu/dropdownmenubutton.css","../../../ckeditor5-ui/theme/components/dialog/dialogactions.css","../../../ckeditor5-ui/theme/components/dropdown/dropdown.css","../../../ckeditor5-ui/theme/components/dropdown/splitbutton.css","../../../ckeditor5-ui/theme/components/dropdown/toolbardropdown.css","../../../ckeditor5-fullscreen/theme/fullscreen.css","../../../ckeditor5-ui/theme/components/dropdown/menu/dropdownmenu.css","../../../ckeditor5-ui/theme/components/dropdown/menu/dropdownmenulistitem.css","../../../ckeditor5-ui/theme/components/dropdown/menu/dropdownmenulistitembutton.css","../../../ckeditor5-ui/theme/components/dialog/dialog.css","../../../ckeditor5-ui/theme/components/dropdown/menu/dropdownmenupanel.css","../../../ckeditor5-ui/theme/components/editorui/editorui.css","../../../ckeditor5-ui/theme/components/formrow/formrow.css","../../../ckeditor5-ui/theme/components/formheader/formheader.css","../../../ckeditor5-ui/theme/components/icon/icon.css","../../../ckeditor5-ui/theme/components/input/input.css","../../../ckeditor5-ui/theme/components/textarea/textarea.css","../../../ckeditor5-ui/theme/components/label/label.css","../../../ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css","../../../ckeditor5-ui/theme/components/menubar/menubarmenu.css","../../../ckeditor5-ui/theme/components/list/list.css","../../../ckeditor5-ui/theme/components/panel/balloonpanel.css","../../../ckeditor5-ui/theme/components/panel/balloonrotator.css","../../../ckeditor5-ui/theme/components/panel/fakepanel.css","../../../ckeditor5-ui/theme/components/panel/stickypanel.css","../../../ckeditor5-media-embed/theme/mediaembedresize.css","../../../ckeditor5-ui/theme/components/search/search.css","../../../ckeditor5-ui/theme/components/highlightedtext/highlightedtext.css","../../../ckeditor5-media-embed/theme/mediaform.css","../../../ckeditor5-table/theme/tableselection.css","../../../ckeditor5-ui/theme/components/toolbar/toolbar.css","../../../ckeditor5-html-support/theme/datafilter.css","../../../ckeditor5-ui/theme/components/menubar/menubar.css","../../../ckeditor5-ui/theme/components/menubar/menubarmenubutton.css","../../../ckeditor5-special-characters/theme/charactergrid.css","../../../ckeditor5-ui/theme/components/labeledinput/labeledinput.css","../../../ckeditor5-ui/theme/globals/_spacing.css","../../../ckeditor5-ui/theme/components/menubar/menubarmenulistitembutton.css","../../../ckeditor5-emoji/theme/emojigrid.css","../../../ckeditor5-block-quote/theme/blockquote.css","../../../ckeditor5-bookmark/theme/bookmark.css","../../../ckeditor5-table/theme/formrow.css","../../../ckeditor5-bookmark/theme/bookmarkform.css","../../../ckeditor5-ckbox/theme/ckboximageedit.css","../../../ckeditor5-clipboard/theme/clipboard.css","../../../ckeditor5-code-block/theme/codeblock.css","../../../ckeditor5-core/theme/core.css","../../../ckeditor5-editor-classic/theme/classiceditor.css","../../../ckeditor5-editor-inline/theme/inlineeditor.css","../../../ckeditor5-emoji/theme/emojipicker.css","../../../ckeditor5-emoji/theme/emojicategories.css","../../../ckeditor5-image/theme/imageuploadicon.css","../../../ckeditor5-emoji/theme/emojipickerform.css","../../../ckeditor5-emoji/theme/emojitone.css","../../../ckeditor5-engine/theme/placeholder.css","../../../ckeditor5-engine/theme/renderer.css","../../../ckeditor5-find-and-replace/theme/findandreplace.css","../../../ckeditor5-find-and-replace/theme/findandreplaceform.css","../../../ckeditor5-font/theme/fontsize.css","../../../ckeditor5-ui/theme/components/dropdown/listdropdown.css","../../../ckeditor5-heading/theme/heading.css","../../../ckeditor5-mention/theme/mention.css","../../../ckeditor5-table/theme/tablelayout.css","../../../ckeditor5-html-embed/theme/htmlembed.css","../../../ckeditor5-ui/theme/components/toolbar/blocktoolbar.css","../../../ckeditor5-table/theme/inserttable.css","../../../ckeditor5-image/theme/imageresize.css","../../../ckeditor5-image/theme/imagestyle.css","../../../ckeditor5-image/theme/imageuploadprogress.css","../../../ckeditor5-basic-styles/theme/code.css","../../../ckeditor5-image/theme/imageuploadloader.css","../../../ckeditor5-image/theme/image.css","../../../ckeditor5-image/theme/imageplaceholder.css","../../../ckeditor5-image/theme/imageinsert.css","../../../ckeditor5-image/theme/imagecustomresizeform.css","../../../ckeditor5-image/theme/textalternativeform.css","../../../ckeditor5-link/theme/link.css","../../../ckeditor5-link/theme/linktoolbar.css","../../../ckeditor5-list/theme/todolist.css","../../../ckeditor5-link/theme/linkform.css","../../../ckeditor5-link/theme/linkproperties.css","../../../ckeditor5-link/theme/linkprovideritems.css","../../../ckeditor5-list/theme/documentlist.css","../../../ckeditor5-list/theme/liststyles.css","../../../ckeditor5-list/theme/listproperties.css","../../../ckeditor5-list/theme/listformatting.css","../../../ckeditor5-list/theme/list.css","../../../ckeditor5-link/theme/linkimage.css","../../../ckeditor5-media-embed/theme/mediaembed.css","../../../ckeditor5-media-embed/theme/mediaembedediting.css","../../../ckeditor5-ui/theme/components/autocomplete/autocomplete.css","../../../ckeditor5-media-embed/theme/mediaembedcustomresizeform.css","../../../ckeditor5-media-embed/theme/mediaembedstyle.css","../../../ckeditor5-ui/theme/components/tooltip/tooltip.css","../../../ckeditor5-highlight/theme/highlight.css","../../../ckeditor5-mention/theme/mentionui.css","../../../ckeditor5-minimap/theme/minimap.css","../../../ckeditor5-page-break/theme/pagebreak.css","../../../ckeditor5-restricted-editing/theme/restrictedediting.css","../../../ckeditor5-show-blocks/theme/showblocks.css","../../../ckeditor5-source-editing/theme/sourceediting.css","../../../ckeditor5-special-characters/theme/specialcharacters.css","../../../ckeditor5-widget/theme/widgetresize.css","../../../ckeditor5-special-characters/theme/characterinfo.css","../../../ckeditor5-style/theme/style.css","../../../ckeditor5-style/theme/stylegrid.css","../../../ckeditor5-style/theme/stylegroup.css","../../../ckeditor5-style/theme/stylepanel.css","../../../ckeditor5-table/theme/table.css","../../../ckeditor5-table/theme/tableediting.css","../../../ckeditor5-table/theme/tablecellproperties.css","../../../ckeditor5-ui/theme/components/spinner/spinner.css","../../../ckeditor5-bookmark/theme/bookmarktoolbar.css","../../../ckeditor5-table/theme/tableform.css","../../../ckeditor5-table/theme/tableproperties.css","../../../ckeditor5-table/theme/tablecaption.css","../../../ckeditor5-horizontal-line/theme/horizontalline.css","../../../ckeditor5-table/theme/tablecolumnresize.css","../../../ckeditor5-table/theme/colorinput.css","../../../ckeditor5-image/theme/imagecaption.css","../../../ckeditor5-widget/theme/widget.css","../../../ckeditor5-ui/theme/components/menubar/menubarmenupanel.css","../../../ckeditor5-widget/theme/widgettypearound.css","ckeditor5.css"],"names":[],"mappings":"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AAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,WAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CCWA,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,C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EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CCvFA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,CAsBA,CAAA,EAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CCvBA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CCGA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,SAAA,CCHA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CCGA,CAAA,EAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,SAAA,CCHA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KA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CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,CAAA,GAAA,CAMA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,WAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CCnGA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA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CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CCzDD,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAQJ,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CC7BH,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAmBC,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAOA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,UAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAWC,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAyC,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAK1C,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAmBC,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CASF,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAIC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAMA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA,IAAA,CAAA,wBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,MAAA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,KAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAcD,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAIC,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CASA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,KAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CC3HF,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CCAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,CAAA,EAAA,CAAA,cAAA,CAAA,MAAA,CAAA,CAAA,CAAA,IAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAOC,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,KAAA,CAOC,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAMD,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,CAOC,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAOD,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAMC,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAOF,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,mNAAA,CAAA,mVAAA,CAAA,m9BAAA,CAAA,2pCAAA,CAAA,+iBAAA,CAAA,OAAA,CAAA,CAAA,CAOA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,mSAAA,CAAA,uEAAA,CAAA,+zBAAA,CAAA,mCAAA,CAAA,OAAA,CAAA,CAAA,CAIA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAMF,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,uPAAA,CAAA,mBAAA,CAAA,+CAAA,CAAA,mCAAA,CAAA,+WAAA,CAAA,uDAAA,CAAA,OAAA,CAAA,2rHAAA,CAAA,uVAAA,CAAA,mBAAA,CAAA,CAAA,CAIA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAMF,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAIC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,MAAA,CAAA,mwCAAA,CAAA,OAAA,CAAA,CAAA,CAIA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAGC,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,EAAA,CAAA,6BAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAaD,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAcF,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,KAAA,CAAA,KAAA,CAQA,CAAA,EAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,eAAA,CAAA,CAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CC9IA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAMC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,GAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAMD,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,eAAA,CAAA,OAAA,CAAA,IAAA,CAIA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,YAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAIA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,WAAA,CAAA,IAAA,CAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,YAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAIA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CCxBA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAIA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CACC,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAMA,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,UAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CCXD,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,CASC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAMA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAKA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAQA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAKA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CChCD,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAOC,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAIA,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAIA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAsC,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAGrC,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAIA,CAAA,EAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CC5BF,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAKA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CCLA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,MAAA,CAAA,KAAA,CAIA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAaC,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAMD,GAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CCvBA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,GAAA,CAOA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAKC,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAMA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CASA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,UAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CASC,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAyC,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAIzC,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIC,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAKD,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAeC,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAyC,CAAA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CCpE5C,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,QAAA,CAQC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAQD,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,YAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAoBA,CAAA,KAAA,CAAA,KAAA,CACC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAGC,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAWD,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CCnDD,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAQA,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,GAAA,CAcC,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAyC,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAIzC,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAWA,CAAA,EAAA,CAAA,gBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAMD,CAAA,EAAA,CAAA,UAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,OAAA,CAKC,CAAA,EAAA,CAAA,UAAA,CAAA,uBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAIA,CAAA,EAAA,CAAA,UAAA,CAAA,uBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAGC,CAAA,EAAA,CAAA,UAAA,CAAA,uBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAIA,CAAA,EAAA,CAAA,UAAA,CAAA,uBAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CC3DF,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAKC,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAKA,CAAA,EAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,I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,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAaA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAIU,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,GAAA,CAAA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A,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAKA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,IAAA,CA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","file":"ckeditor5.css.map","sourcesContent":["/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-base-foreground: \t\t\t\t\t\t\t\thsl(0, 0%, 98%);\n\t--ck-color-base-background: \t\t\t\t\t\t\t\thsl(0, 0%, 100%);\n\t--ck-color-base-border: \t\t\t\t\t\t\t\t\thsl(220, 6%, 81%);\n\t--ck-color-base-action: \t\t\t\t\t\t\t\t\thsl(104, 50.2%, 42.5%);\n\t--ck-color-base-focus: \t\t\t\t\t\t\t\t\t\thsl(209, 92%, 70%);\n\t--ck-color-base-text: \t\t\t\t\t\t\t\t\t\thsl(0, 0%, 20%);\n\t--ck-color-base-active: \t\t\t\t\t\t\t\t\thsl(218.1, 100%, 58%);\n\t--ck-color-base-active-focus:\t\t\t\t\t\t\t\thsl(218.2, 100%, 52.5%);\n\t--ck-color-base-error:\t\t\t\t\t\t\t\t\t\thsl(15, 100%, 43%);\n\n\t/* -- Generic colors ------------------------------------------------------------------------ */\n\n\t--ck-color-focus-border-coordinates: \t\t\t\t\t\t218, 81.8%, 56.9%;\n\t--ck-color-focus-border: \t\t\t\t\t\t\t\t\thsl(var(--ck-color-focus-border-coordinates));\n\t--ck-color-focus-outer-shadow:\t\t\t\t\t\t\t\thsl(212.4, 89.3%, 89%);\n\t--ck-color-focus-disabled-shadow:\t\t\t\t\t\t\thsla(209, 90%, 72%,.3);\n\t--ck-color-focus-error-shadow:\t\t\t\t\t\t\t\thsla(9,100%,56%,.3);\n\t--ck-color-text: \t\t\t\t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-shadow-drop: \t\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.15);\n\t--ck-color-shadow-drop-active:\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.2);\n\t--ck-color-shadow-inner: \t\t\t\t\t\t\t\t\thsla(0, 0%, 0%, 0.1);\n\n\t/* -- Buttons ------------------------------------------------------------------------------- */\n\n\t--ck-color-button-default-background: \t\t\t\t\t\ttransparent;\n\t--ck-color-button-default-hover-background: \t\t\t\thsl(0, 0%, 94.1%);\n\t--ck-color-button-default-active-background: \t\t\t\thsl(0, 0%, 94.1%);\n\t--ck-color-button-default-disabled-background: \t\t\t\ttransparent;\n\n\t--ck-color-button-on-background: \t\t\t\t\t\t\thsl(212, 100%, 97.1%);\n\t--ck-color-button-on-hover-background: \t\t\t\t\t\thsl(211.7, 100%, 92.9%);\n\t--ck-color-button-on-active-background: \t\t\t\t\thsl(211.7, 100%, 92.9%);\n\t--ck-color-button-on-disabled-background: \t\t\t\t\thsl(211, 15%, 95%);\n\t--ck-color-button-on-color:\t\t\t\t\t\t\t\t\thsl(218.1, 100%, 58%);\n\n\n\t--ck-color-button-action-background: \t\t\t\t\t\tvar(--ck-color-base-action);\n\t--ck-color-button-action-hover-background: \t\t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-button-action-active-background: \t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-button-action-disabled-background: \t\t\t\thsl(104, 44%, 58%);\n\t--ck-color-button-action-text: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t--ck-color-button-save: \t\t\t\t\t\t\t\t\thsl(120, 100%, 27%);\n\t--ck-color-button-cancel: \t\t\t\t\t\t\t\t\thsl(15, 100%, 43%);\n\n\t--ck-color-switch-button-off-background:\t\t\t\t\thsl(0, 0%, 57.6%);\n\t--ck-color-switch-button-off-hover-background:\t\t\t\thsl(0, 0%, 49%);\n\t--ck-color-switch-button-on-background:\t\t\t\t\t\tvar(--ck-color-button-action-background);\n\t--ck-color-switch-button-on-hover-background:\t\t\t\thsl(104, 53.2%, 40.2%);\n\t--ck-color-switch-button-inner-background:\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-switch-button-inner-shadow:\t\t\t\t\t\thsla(0, 0%, 0%, 0.1);\n\n\t/* -- Dropdown ------------------------------------------------------------------------------ */\n\n\t--ck-color-dropdown-panel-background: \t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-dropdown-panel-border: \t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Dialog -------------------------------------------------------------------------------- */\n\n\t--ck-color-dialog-background: \t\t\t\t\t\t\t\tvar(--ck-custom-background);\n\t--ck-color-dialog-form-header-border: \t\t\t\t\t\tvar(--ck-custom-border);\n\n\t/* -- Input --------------------------------------------------------------------------------- */\n\n\t--ck-color-input-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-input-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\t--ck-color-input-error-border:\t\t\t\t\t\t\t\tvar(--ck-color-base-error);\n\t--ck-color-input-text: \t\t\t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-input-disabled-background: \t\t\t\t\t\thsl(0, 0%, 95%);\n\t--ck-color-input-disabled-border: \t\t\t\t\t\t\tvar(--ck-color-base-border);\n\t--ck-color-input-disabled-text: \t\t\t\t\t\t\thsl(0, 0%, 46%);\n\n\t/* -- List ---------------------------------------------------------------------------------- */\n\n\t--ck-color-list-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-list-button-hover-background: \t\t\t\t\tvar(--ck-color-button-default-hover-background);\n\t--ck-color-list-button-on-background: \t\t\t\t\t\tvar(--ck-color-button-on-color);\n\t--ck-color-list-button-on-background-focus: \t\t\t\tvar(--ck-color-button-on-color);\n\t--ck-color-list-button-on-text:\t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t/* -- Panel --------------------------------------------------------------------------------- */\n\n\t--ck-color-panel-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-panel-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Toolbar ------------------------------------------------------------------------------- */\n\n\t--ck-color-toolbar-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\t--ck-color-toolbar-border: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-border);\n\n\t/* -- Tooltip ------------------------------------------------------------------------------- */\n\n\t--ck-color-tooltip-background: \t\t\t\t\t\t\t\tvar(--ck-color-base-text);\n\t--ck-color-tooltip-text: \t\t\t\t\t\t\t\t\tvar(--ck-color-base-background);\n\n\t/* -- Engine -------------------------------------------------------------------------------- */\n\n\t--ck-color-engine-placeholder-text: \t\t\t\t\t\thsl(0, 0%, 44%);\n\n\t/* -- Upload -------------------------------------------------------------------------------- */\n\n\t--ck-color-upload-bar-background:\t\t \t\t\t\t\thsl(209, 92%, 70%);\n\n\t/* -- Link -------------------------------------------------------------------------------- */\n\n\t--ck-color-link-default:\t\t\t\t\t\t\t\t\thsl(240, 100%, 47%);\n\t--ck-color-link-selected-background:\t\t\t\t\t\thsla(201, 100%, 56%, 0.1);\n\t--ck-color-link-fake-selection:\t\t\t\t\t\t\t\thsla(201, 100%, 56%, 0.3);\n\n\t/* -- Search result highlight ---------------------------------------------------------------- */\n\n\t--ck-color-highlight-background:\t\t\t\t\t\t\thsl(60, 100%, 50%);\n\n\t/* -- Generic colors ------------------------------------------------------------------------- */\n\n\t--ck-color-light-red:\t\t\t\t\t\t\t\t\t\thsl(0, 100%, 90%);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* This is super-important. This is **manually** adjusted so a button without an icon\n\tis never smaller than a button with icon, additionally making sure that text-less buttons\n\tare perfect squares. The value is also shared by other components which should stay \"in-line\"\n\twith buttons. */\n\t--ck-ui-component-min-height: 2.3em;\n}\n\n/**\n * Resets an element, ignoring its children.\n */\n.ck.ck-reset,\n.ck.ck-reset_all,\n.ck-reset_all *:not(.ck-reset_all-excluded, .ck-reset_all-excluded *) {\n\tbox-sizing: border-box;\n\twidth: auto;\n\theight: auto;\n\tposition: static;\n\n\t/* Do not include inheritable rules here. */\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tbackground: transparent;\n\ttext-decoration: none;\n\tvertical-align: middle;\n\ttransition: none;\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/3379 */\n\tword-wrap: break-word;\n}\n\n/**\n * Resets an element AND its children.\n */\n.ck.ck-reset_all,\n.ck-reset_all *:not(.ck-reset_all-excluded, .ck-reset_all-excluded *) {\n\t/* These are rule inherited by all children elements. */\n\tborder-collapse: collapse;\n\tfont: normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);\n\tcolor: var(--ck-color-text);\n\ttext-align: left;\n\twhite-space: nowrap;\n\tcursor: auto;\n\tfloat: none;\n}\n\n.ck-reset_all {\n\t& .ck-rtl *:not(.ck-reset_all-excluded, .ck-reset_all-excluded *) {\n\t\ttext-align: right;\n\t}\n\n\t& iframe:not(.ck-reset_all-excluded *) {\n\t\t/* For IE */\n\t\tvertical-align: inherit;\n\t}\n\n\t& textarea:not(.ck-reset_all-excluded *) {\n\t\twhite-space: pre-wrap;\n\t}\n\n\t& textarea:not(.ck-reset_all-excluded *),\n\t& input[type=\"text\"]:not(.ck-reset_all-excluded *),\n\t& input[type=\"password\"]:not(.ck-reset_all-excluded *) {\n\t\tcursor: text;\n\t}\n\n\t& textarea[disabled]:not(.ck-reset_all-excluded *),\n\t& input[type=\"text\"][disabled]:not(.ck-reset_all-excluded *),\n\t& input[type=\"password\"][disabled]:not(.ck-reset_all-excluded *) {\n\t\tcursor: default;\n\t}\n\n\t& fieldset:not(.ck-reset_all-excluded *) {\n\t\tpadding: 10px;\n\t\tborder: 2px groove hsl(255, 7%, 88%);\n\t}\n\n\t& button:not(.ck-reset_all-excluded *)::-moz-focus-inner {\n\t\t/* See http://stackoverflow.com/questions/5517744/remove-extra-button-spacing-padding-in-firefox */\n\t\tpadding: 0;\n\t\tborder: 0\n\t}\n}\n\n/**\n * Default UI rules for RTL languages.\n */\n.ck[dir=\"rtl\"],\n.ck[dir=\"rtl\"] .ck {\n\ttext-align: right;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t/**\n\t* Default border-radius value.\n\t*/\n\t--ck-border-radius: 2px;\n\n\t/**\n\t* `.ck-rounded-corners` is an opt-in switch class used on the UI root.\n\t* By default, `--ck-rounded-corners-radius` is `0` (square corners).\n\t* When the switch class is present, it maps to `--ck-border-radius`.\n\t*\n\t* Component usage:\n\t* - Use `border-radius: var(--ck-rounded-corners-radius);` on elements that\n\t* should respect the global rounded-corners setting.\n\t* - If a component needs a custom radius, override `--ck-border-radius` locally\n\t* and keep using `--ck-rounded-corners-radius`.\n\t* - For per-corner shapes, use the variable-based radius first and then override\n\t* specific corners with `0` (or another value).\n\t*/\n\t--ck-rounded-corners-radius: 0;\n}\n\n.ck-rounded-corners {\n\t--ck-rounded-corners-radius: var(--ck-border-radius);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/**\n\t * A visual style of element's inner shadow (i.e. input).\n\t */\n\t--ck-inner-shadow: 2px 2px 3px var(--ck-color-shadow-inner) inset;\n\n\t/**\n\t * A visual style of element's drop shadow (i.e. panel).\n\t */\n\t--ck-drop-shadow: 0 1px 2px 1px var(--ck-color-shadow-drop);\n\n\t/**\n\t * A visual style of element's active shadow (i.e. comment or suggestion).\n\t */\n\t--ck-drop-shadow-active: 0 3px 6px 1px var(--ck-color-shadow-drop-active);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * A class which hides an element in DOM.\n */\n.ck-hidden {\n\t/* Override selector specificity. Otherwise, all elements with some display\n\tstyle defined will override this one, which is not a desired result. */\n\tdisplay: none !important;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-z-default: 1;\n\t--ck-z-panel: calc( var(--ck-z-default) + 999 );\n\t--ck-z-dialog: 9999;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * A class that disables all transitions of the element and its children.\n */\n.ck-transitions-disabled,\n.ck-transitions-disabled * {\n\ttransition: none !important;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* where 7.5(px) is the font size of the powered by label and 13(px) is the base font size. */\n\t--ck-powered-by-font-size: calc(var(--ck-font-size-base) * 7.5 / 13);\n\t/* where 10(px) is the line height of the powered by label and 13(px) is the base font size. */\n\t--ck-powered-by-line-height: calc(var(--ck-font-size-base) * 10 / 13);\n\t/* where -0.2(px) is the letter spacing of the powered by label and 13(px) is the base font size. */\n\t--ck-powered-by-letter-spacing: calc(var(--ck-font-size-base) * -0.2 / 13);\n\t--ck-powered-by-padding-vertical: 2px;\n\t--ck-powered-by-padding-horizontal: 4px;\n\t--ck-powered-by-text-color: hsl(0, 0%, 31%);\n\t--ck-powered-by-border-radius: var(--ck-border-radius);\n\t--ck-powered-by-background: hsl(0, 0%, 100%);\n\t--ck-powered-by-border-color: var(--ck-color-focus-border);\n\n\t--ck-powered-by-svg-width: 53;\n\t--ck-powered-by-svg-height: 10;\n\t--ck-powered-by-icon-width: calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-width) / 13);\n\t--ck-powered-by-icon-height: calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-height) / 13);\n}\n\n.ck.ck-balloon-panel.ck-powered-by-balloon {\n\t--ck-border-radius: var(--ck-powered-by-border-radius);\n\n\tbox-shadow: none;\n\tbackground: var(--ck-powered-by-background);\n\tmin-height: unset;\n\tz-index: calc( var(--ck-z-panel) - 1 );\n\n\t& .ck.ck-powered-by {\n\t\tline-height: var(--ck-powered-by-line-height);\n\n\t\t& a {\n\t\t\tcursor: pointer;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\topacity: .66;\n\t\t\tfilter: grayscale(80%);\n\t\t\tline-height: var(--ck-powered-by-line-height);\n\t\t\tpadding: var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal);\n\t\t}\n\n\t\t& .ck-powered-by__label {\n\t\t\tfont-size: var(--ck-powered-by-font-size);\n\t\t\tletter-spacing: var(--ck-powered-by-letter-spacing);\n\t\t\tpadding-left: 2px;\n\t\t\ttext-transform: uppercase;\n\t\t\tfont-weight: bold;\n\t\t\tmargin-right: 4px;\n\t\t\tcursor: pointer;\n\t\t\tline-height: normal;\n\t\t\tcolor: var(--ck-powered-by-text-color);\n\n\t\t}\n\n\t\t& .ck-icon {\n\t\t\tdisplay: block;\n\t\t\tcursor: pointer;\n\t\t\twidth: var(--ck-powered-by-icon-width);\n\t\t\theight: var(--ck-powered-by-icon-height);\n\t\t}\n\n\t\t&:hover {\n\t\t\t& a {\n\t\t\t\tfilter: grayscale(0%);\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n\n\t&[class*=\"position_inside\"] {\n\t\tborder-color: transparent;\n\t}\n\n\t&[class*=\"position_border\"] {\n\t\tborder: var(--ck-focus-ring);\n\t\tborder-color: var(--ck-powered-by-border-color);\n\t}\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* where 7.5(px) is the font size of the evaluation badge label and 13(px) is the base font size. */\n\t--ck-evaluation-badge-font-size: calc(var(--ck-font-size-base) * 7.5 / 13);\n\t/* where 7.5(px) is the line height of the evaluation badge label and 13(px) is the base font size. */\n\t--ck-evaluation-badge-line-height: calc(var(--ck-font-size-base) * 7.5 / 13);\n\t/* where -0.2(px) is the letter spacing of the evaluation badge label and 13(px) is the base font size. */\n\t--ck-evaluation-badge-letter-spacing: calc(var(--ck-font-size-base) * -0.2 / 13);\n\t--ck-evaluation-badge-padding-vertical: 2px;\n\t--ck-evaluation-badge-padding-horizontal: 4px;\n\t--ck-evaluation-badge-text-color: hsl(0, 0%, 31%);\n\t--ck-evaluation-badge-border-radius: var(--ck-border-radius);\n\t--ck-evaluation-badge-background: hsl(0, 0%, 100%);\n\t--ck-evaluation-badge-border-color: var(--ck-color-focus-border);\n}\n\n.ck.ck-balloon-panel.ck-evaluation-badge-balloon {\n\t--ck-border-radius: var(--ck-evaluation-badge-border-radius);\n\n\tbox-shadow: none;\n\tbackground: var(--ck-evaluation-badge-background);\n\tmin-height: unset;\n\tz-index: calc( var(--ck-z-panel) - 1 );\n\n\t& .ck.ck-evaluation-badge {\n\t\tline-height: var(--ck-evaluation-badge-line-height);\n\t\tpadding: var(--ck-evaluation-badge-padding-vertical) var(--ck-evaluation-badge-padding-horizontal);\n\n\t\t& .ck-evaluation-badge__label {\n\t\t\tdisplay: block;\n\t\t\tpadding: 0 2px;\n\t\t\tfont-size: var(--ck-evaluation-badge-font-size);\n\t\t\tletter-spacing: var(--ck-evaluation-badge-letter-spacing);\n\t\t\tfont-weight: bold;\n\t\t\tline-height: normal;\n\t\t\ttext-transform: uppercase;\n\t\t\tcolor: var(--ck-evaluation-badge-text-color);\n\t\t}\n\t}\n\n\t&[class*=\"position_inside\"] {\n\t\tborder-color: transparent;\n\t}\n\n\t&[class*=\"position_border\"] {\n\t\tborder: var(--ck-focus-ring);\n\t\tborder-color: var(--ck-evaluation-badge-border-color);\n\t}\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-responsive-form {\n\tpadding: var(--ck-spacing-large);\n\n\t&:focus {\n\t\t/* See: https://github.com/ckeditor/ckeditor5/issues/4773 */\n\t\toutline: none;\n\t}\n\n\t[dir=\"ltr\"] & {\n\t\t& > :not(:first-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t[dir=\"rtl\"] & {\n\t\t& > :not(:last-child) {\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t@media screen and (max-width: 600px) {\n\t\tpadding: 0;\n\t\twidth: calc(.8 * var(--ck-input-width));\n\n\t\t& .ck-labeled-field-view {\n\t\t\tmargin: var(--ck-spacing-large) var(--ck-spacing-large) 0;\n\n\t\t\t& .ck-input-text,\n\t\t\t& .ck-input-number {\n\t\t\t\tmin-width: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t/* Let the long error messages wrap in the narrow form. */\n\t\t\t& .ck-labeled-field-view__error {\n\t\t\t\twhite-space: normal;\n\t\t\t}\n\t\t}\n\n\t\t& > .ck-button:nth-last-child(1),\n\t\t& > .ck-button:nth-last-child(2) {\n\t\t\tpadding: var(--ck-spacing-standard);\n\t\t\tmargin-top: var(--ck-spacing-large);\n\t\t\tborder-radius: 0;\n\n\t\t\t&:not(:focus) {\n\t\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tmargin-left: 0;\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t& .ck-button {\n\t\t\t&::after {\n\t\t\t\tcontent: \"\";\n\t\t\t\twidth: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: -1px;\n\t\t\t\ttop: -1px;\n\t\t\t\tbottom: -1px;\n\t\t\t\tz-index: 1;\n\t\t\t}\n\n\t\t\t&:nth-last-child(2)::after {\n\t\t\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t&:focus::after {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck-vertical-form > .ck-button:nth-last-child(2)::after {\n\tborder-right: 1px solid var(--ck-color-base-border);\n}\n\n.ck-vertical-form .ck-button {\n\t&::after {\n\t\tcontent: \"\";\n\t\twidth: 0;\n\t\tposition: absolute;\n\t\tright: -1px;\n\t\ttop: -1px;\n\t\tbottom: -1px;\n\t\tz-index: 1;\n\t}\n\n\t&:focus::after {\n\t\tdisplay: none;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-form-default-width: 340px;\n}\n\n.ck.ck-form {\n\tpadding: 0 0 var(--ck-spacing-large);\n\n\t&.ck-form_default-width {\n\t\twidth: var(--ck-form-default-width);\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t& .ck.ck-input-text,\n\t& .ck.ck-input-number {\n\t\tmin-width: 100%;\n\t\twidth: 0;\n\t}\n\n\t& .ck.ck-dropdown {\n\t\tmin-width: 100%;\n\n\t\t& .ck-dropdown__button {\n\t\t\t&:not(:focus) {\n\t\t\t\tborder: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t& .ck-button__label {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Default `ck-responsive-form` customization when it lies next to `ck-form` class */\n\t&.ck-responsive-form {\n\t\t& .ck.ck-form__row {\n\t\t\t&.ck-form__row_with-submit {\n\t\t\t\t@media screen and (max-width: 600px) {\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\talign-items: stretch;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t}\n\n\t\t\t\t> .ck {\n\t\t\t\t\t@media screen and (max-width: 600px) {\n\t\t\t\t\t\tmargin: var(--ck-spacing-large) var(--ck-spacing-large) 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t.ck-button_with-text {\n\t\t\t\t\t@media screen and (max-width: 600px) {\n\t\t\t\t\t\tjustify-content: center;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.ck-form__row_large-bottom-padding {\n\t\t\t\t@media screen and (max-width: 600px) {\n\t\t\t\t\tpadding-bottom: var(--ck-spacing-large);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t& > :not(:first-child) {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t& > :not(:last-child) {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t}\n\t}\n\t/* End of `ck-responsive-form` customization */\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-aria-live-announcer {\n\tposition: absolute;\n\tleft: -10000px;\n\ttop: -10000px;\n}\n\n.ck.ck-aria-live-region-list {\n\tlist-style-type: none;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-accessibility-help-dialog-max-width: 600px;\n\t--ck-accessibility-help-dialog-max-height: 400px;\n\t--ck-accessibility-help-dialog-border-color: hsl(220, 6%, 81%);\n\t--ck-accessibility-help-dialog-code-background-color: hsl(0deg 0% 92.94%);\n\t--ck-accessibility-help-dialog-kbd-shadow-color: hsl(0deg 0% 61%);\n}\n\n.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content {\n\tpadding: var(--ck-spacing-large);\n\tmax-width: var(--ck-accessibility-help-dialog-max-width);\n\tmax-height: var(--ck-accessibility-help-dialog-max-height);\n\toverflow: auto;\n\tuser-select: text;\n\n\tborder: 1px solid transparent;\n\n\t&:focus {\n\t\toutline: none;\n\t\tborder: var(--ck-focus-ring);\n\t\tbox-shadow: var(--ck-focus-outer-shadow), 0 0;\n\t}\n\n\t* {\n\t\twhite-space: normal;\n\t}\n\n\t/* Hide the main label of the content container. */\n\t& .ck-label {\n\t\tdisplay: none;\n\t}\n\n\t& h3 {\n\t\tfont-weight: bold;\n\t\tfont-size: 1.2em;\n\t}\n\n\t& h4 {\n\t\tfont-weight: bold;\n\t\tfont-size: 1em;\n\t}\n\n\t& p,\n\t& h3,\n\t& h4,\n\t& table {\n\t\tmargin: 1em 0;\n\t}\n\n\t& dl {\n\t\tdisplay: grid;\n\t\tgrid-template-columns: 2fr 1fr;\n\t\tborder-top: 1px solid var(--ck-accessibility-help-dialog-border-color);\n\t\tborder-bottom: none;\n\n\t\t& dt, & dd {\n\t\t\tborder-bottom: 1px solid var(--ck-accessibility-help-dialog-border-color);\n\t\t\tpadding: .4em 0;\n\t\t}\n\n\t\t& dt {\n\t\t\tgrid-column-start: 1;\n\t\t}\n\n\t\t& dd {\n\t\t\tgrid-column-start: 2;\n\t\t\ttext-align: right;\n\t\t}\n\t}\n\n\t& kbd, & code {\n\t\tdisplay: inline-block;\n\t\tbackground: var(--ck-accessibility-help-dialog-code-background-color);\n\t\tpadding: .4em;\n\t\tvertical-align: middle;\n\t\tline-height: 1;\n\t\tborder-radius: 2px;\n\t\ttext-align: center;\n\t\tfont-size: .9em;\n\t}\n\n\t& code {\n\t\tfont-family: monospace;\n\t}\n\n\t& kbd {\n\t\tmin-width: 1.8em;\n\t\tbox-shadow: 0px 1px 1px var(--ck-accessibility-help-dialog-kbd-shadow-color);\n\t\tmargin: 0 1px;\n\n\t\t& + kbd {\n\t\t\tmargin-left: 2px;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* Use :where(a) (not plain a) to keep the anchor variant at zero specificity. */\n.ck.ck-button,\n:where(a).ck.ck-button {\n\t--ck-button-background: var(--ck-color-button-default-background);\n\t--ck-button-hover-background: var(--ck-color-button-default-hover-background);\n\t--ck-button-active-background: var(--ck-color-button-default-active-background);\n\t--ck-button-disabled-background: var(--ck-color-button-default-disabled-background);\n\n\tbackground: var(--ck-button-background);\n\n\t&:not(.ck-disabled) {\n\t\t&:hover {\n\t\t\tbackground: var(--ck-button-hover-background);\n\t\t}\n\n\t\t&:active {\n\t\t\tbackground: var(--ck-button-active-background);\n\t\t}\n\t}\n\n\tborder-radius: var(--ck-rounded-corners-radius);\n\twhite-space: nowrap;\n\tcursor: default;\n\tvertical-align: middle;\n\tpadding: var(--ck-spacing-tiny);\n\ttext-align: center;\n\n\t/* A very important piece of styling. Go to variable declaration to learn more. */\n\tmin-width: var(--ck-ui-component-min-height);\n\tmin-height: var(--ck-ui-component-min-height);\n\n\t/* Normalize the height of the line. Removing this will break consistent height\n\tamong text and text-less buttons (with icons). */\n\tline-height: 1;\n\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\n\t/* Avoid flickering when the foucs border shows up. */\n\tborder: 1px solid transparent;\n\n\t/* Apply some smooth transition to the box-shadow and border. */\n\ttransition: box-shadow .2s ease-in-out, border .2s ease-in-out;\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/3414 */\n\t-webkit-appearance: none;\n\t-webkit-user-select: none;\n\tuser-select: none;\n\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&:active,\n\t&:focus {\n\t\toutline: none;\n\t\tborder: var(--ck-focus-ring);\n\t\tbox-shadow: var(--ck-focus-outer-shadow), 0 0;\n\t}\n\n\t/* Allow icon coloring using the text \"color\" property. */\n\t& .ck-button__icon {\n\t\t& use,\n\t\t& use * {\n\t\t\tcolor: inherit;\n\t\t}\n\t}\n\n\t& .ck-button__label {\n\t\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\t\tfont-size: inherit;\n\t\tfont-weight: inherit;\n\t\tcolor: inherit;\n\t\tcursor: inherit;\n\n\t\t/* Must be consistent with .ck-icon's vertical align. Otherwise, buttons with and\n\t\twithout labels (but with icons) have different sizes in Chrome */\n\t\tvertical-align: middle;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\ttext-align: right;\n\t\t}\n\t\tdisplay: none\n\t}\n\n\t& .ck-button__keystroke {\n\t\tcolor: inherit;\n\n\t\topacity: .5;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\tmargin-left: var(--ck-spacing-large);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tmargin-right: var(--ck-spacing-large);\n\t\t}\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/3362 */\n\t&.ck-disabled {\n\t\tbackground: var(--ck-button-disabled-background);\n\n\t\t&:active,\n\t\t&:focus {\n\t\t\t/* The disabled button should have a slightly less visible shadow when focused. */\n\t\t\tbox-shadow: var(--ck-focus-disabled-outer-shadow), 0 0;\n\t\t}\n\n\t\t& .ck-button__icon {\n\t\t\topacity: var(--ck-disabled-opacity);\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/3376 */\n\t\t& .ck-button__label {\n\t\t\topacity: var(--ck-disabled-opacity);\n\t\t}\n\n\t\t& .ck-button__keystroke {\n\t\t\topacity: .3;\n\t\t}\n\t}\n\n\t&.ck-button_with-text {\n\t\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-standard);\n\n\t\t& .ck-button__icon {\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tmargin-right: var(--ck-spacing-medium);\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tmargin-left: var(--ck-spacing-medium);\n\t\t\t}\n\t\t}\n\t\t& .ck-button__label {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\n\t&.ck-button_with-keystroke {\n\t\t& .ck-button__label {\n\t\t\tflex-grow: 1;\n\t\t}\n\t}\n\n\t/* A style of the button which is currently on, e.g. its feature is active. */\n\t&.ck-on {\n\t\t--ck-button-background: var(--ck-color-button-on-background);\n\t\t--ck-button-hover-background: var(--ck-color-button-on-hover-background);\n\t\t--ck-button-active-background: var(--ck-color-button-on-active-background);\n\t\t--ck-button-disabled-background: var(--ck-color-button-on-disabled-background);\n\n\t\tcolor: var(--ck-color-button-on-color);\n\t}\n\n\t&.ck-button-save {\n\t\tcolor: var(--ck-color-button-save);\n\t}\n\n\t&.ck-button-cancel {\n\t\tcolor: var(--ck-color-button-cancel);\n\t}\n\n\t[dir=\"ltr\"] & {\n\t\tjustify-content: left;\n\t}\n\n\t[dir=\"rtl\"] & {\n\t\tjustify-content: right;\n\t}\n\n\t/* Center the icon horizontally in a button without text. */\n\t&:not(.ck-button_with-text) {\n\t\tjustify-content: center;\n\t}\n}\n\n/* A style of the button which handles the primary action. */\n\n.ck.ck-button-action,\na.ck.ck-button-action {\n\t--ck-button-background: var(--ck-color-button-action-background);\n\t--ck-button-hover-background: var(--ck-color-button-action-hover-background);\n\t--ck-button-active-background: var(--ck-color-button-action-active-background);\n\t--ck-button-disabled-background: var(--ck-color-button-action-disabled-background);\n\n\tcolor: var(--ck-color-button-action-text);\n}\n\n.ck.ck-button-bold,\na.ck.ck-button-bold {\n\tfont-weight: bold;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* 34px at 13px font-size */\n\t--ck-switch-button-toggle-width: 2.6153846154em;\n\t/* 14px at 13px font-size */\n\t--ck-switch-button-toggle-inner-size: calc(1.0769230769em + 1px);\n\t--ck-switch-button-translation: calc(\n\t\tvar(--ck-switch-button-toggle-width) -\n\t\tvar(--ck-switch-button-toggle-inner-size) -\n\t\t2px /* Border */\n\t);\n\t--ck-switch-button-inner-hover-shadow: 0 0 0 5px var(--ck-color-switch-button-inner-shadow);\n}\n\n.ck.ck-button.ck-switchbutton {\n\t/* Unlike a regular button, the switch button text color and background should never change.\n\t * Changing toggle switch (background, outline) is enough to carry the information about the\n\t * state of the entire component (https://github.com/ckeditor/ckeditor5/issues/12519)\n\t */\n\t&, &:hover, &:focus, &:active, &.ck-on:hover, &.ck-on:focus, &.ck-on:active {\n\t\tcolor: inherit;\n\t\tbackground: transparent;\n\t}\n\n\t& .ck-button__label {\n\t\t[dir=\"ltr\"] & {\n\t\t\t/* Separate the label from the switch */\n\t\t\tmargin-right: calc(2 * var(--ck-spacing-large));\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t/* Separate the label from the switch */\n\t\t\tmargin-left: calc(2 * var(--ck-spacing-large));\n\t\t}\n\t}\n\n\t& .ck-button__toggle {\n\t\tborder-radius: var(--ck-rounded-corners-radius);\n\n\t\t/* Apply some smooth transition to the box-shadow and border. */\n\t\t/* Gently animate the background color of the toggle switch */\n\t\ttransition: background 400ms ease, box-shadow .2s ease-in-out, outline .2s ease-in-out;\n\t\tborder: 1px solid transparent;\n\t\twidth: var(--ck-switch-button-toggle-width);\n\t\tbackground: var(--ck-color-switch-button-off-background);\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t/* Make sure the toggle is always to the right as far as possible. */\n\t\t\tmargin-left: auto;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t/* Make sure the toggle is always to the left as far as possible. */\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t& .ck-button__toggle__inner {\n\t\t\tborder-radius: calc(.5 * var(--ck-rounded-corners-radius));\n\t\t\twidth: var(--ck-switch-button-toggle-inner-size);\n\t\t\theight: var(--ck-switch-button-toggle-inner-size);\n\t\t\tbackground: var(--ck-color-switch-button-inner-background);\n\n\t\t\t/* Gently animate the inner part of the toggle switch */\n\t\t\ttransition: all 300ms ease;\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t\tdisplay: block\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground: var(--ck-color-switch-button-off-hover-background);\n\n\t\t\t& .ck-button__toggle__inner {\n\t\t\t\tbox-shadow: var(--ck-switch-button-inner-hover-shadow);\n\t\t\t}\n\t\t}\n\t\tdisplay: block\n\t}\n\n\t&.ck-disabled .ck-button__toggle {\n\t\topacity: var(--ck-disabled-opacity);\n\t}\n\n\t/* Overriding default .ck-button:focus styles + an outline around the toogle */\n\t&:focus {\n\t\tborder-color: transparent;\n\t\toutline: none;\n\t\tbox-shadow: none;\n\n\t\t& .ck-button__toggle {\n\t\t\tbox-shadow: 0 0 0 1px var(--ck-color-base-background), 0 0 0 5px var(--ck-color-focus-outer-shadow);\n\t\t\toutline-offset: 1px;\n\t\t\toutline: var(--ck-focus-ring);\n\t\t}\n\t}\n\n\t&.ck-on {\n\t\t& .ck-button__toggle {\n\t\t\tbackground: var(--ck-color-switch-button-on-background);\n\n\t\t\t&:hover {\n\t\t\t\tbackground: var(--ck-color-switch-button-on-hover-background);\n\t\t\t}\n\n\t\t\t& .ck-button__toggle__inner {\n\t\t\t\t/*\n\t\t\t\t* Move the toggle switch to the right. It will be animated.\n\t\t\t\t*/\n\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\ttransform: translateX( var( --ck-switch-button-translation ) );\n\t\t\t\t}\n\n\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\ttransform: translateX( calc( -1 * var( --ck-switch-button-translation ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-button.ck-list-item-button {\n\tpadding: var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));\n\n\t&,\n\t&.ck-on {\n\t\tbackground: var(--ck-color-list-background);\n\t\tcolor: var(--ck-color-text);\n\t}\n\n\t&:has(.ck-list-item-button__check-holder) {\n\t\t[dir=\"ltr\"] & {\n\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t/*\n\t * `.ck-on` class and background styling is overridden for `ck-button` in many places.\n\t * This is a workaround to make sure that the background is not overridden and uses similar\n\t * selector specificity as the other overrides.\n\t */\n\t&:hover:not(.ck-disabled),\n\t&.ck-button.ck-on:hover,\n\t&.ck-on:not(.ck-list-item-button_toggleable),\n\t&.ck-on:hover {\n\t\tbackground: var(--ck-color-list-button-hover-background);\n\n\t\t&:not(.ck-disabled) {\n\t\t\tcolor: var(--ck-color-text);\n\t\t}\n\t}\n}\n\n.ck.ck-list-item-button {\n\tmin-height: unset;\n\twidth: 100%;\n\tborder-radius: 0;\n\n\t[dir=\"ltr\"] & {\n\t\ttext-align: left;\n\t}\n\n\t[dir=\"rtl\"] & {\n\t\ttext-align: right;\n\t}\n\n\t&.ck-list-item-button_toggleable {\n\t\t[dir=\"ltr\"] & {\n\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t& .ck-list-item-button__check-holder {\n\t\tdisplay: inline-flex;\n\t\twidth: .9em;\n\t\theight: .9em;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tmargin-left: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t& .ck-list-item-button__check-icon {\n\t\theight: 100%;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-collapsible-arrow-size: calc(0.5 * var(--ck-icon-size));\n}\n\n.ck.ck-collapsible {\n\t& > .ck.ck-button {\n\t\twidth: 100%;\n\t\tfont-weight: bold;\n\t\tborder-radius: 0;\n\t\tcolor: inherit;\n\n\t\t&:focus {\n\t\t\tbackground: transparent;\n\t\t}\n\n\t\t&:active, &:not(:focus), &:hover:not(:focus) {\n\t\t\tbackground: transparent;\n\t\t\tborder-color: transparent;\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t& > .ck-icon {\n\t\t\tmargin-right: var(--ck-spacing-medium);\n\t\t\twidth: var(--ck-collapsible-arrow-size);\n\t\t}\n\t}\n\n\t& > .ck-collapsible__children {\n\t\tpadding: var(--ck-spacing-medium) var(--ck-spacing-large) var(--ck-spacing-large);\n\t}\n\n\t&.ck-collapsible_collapsed {\n\t\t& > .ck.ck-button .ck-icon {\n\t\t\ttransform: rotate(-90deg);\n\t\t}\n\n\t\t& > .ck-collapsible__children {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-color-grid-tile-size: 24px;\n\n\t/* Not using global colors here because these may change but some colors in a pallette\n\t * require special treatment. For instance, this ensures no matter what the UI text color is,\n\t * the check icon will look good on the black color tile. */\n\t--ck-color-color-grid-check-icon: hsl(212, 81%, 46%);\n}\n\n.ck.ck-color-grid {\n\tgrid-gap: 5px;\n\tpadding: 8px;\n\tdisplay: grid;\n}\n\n.ck.ck-color-grid__tile {\n\ttransition: .2s ease box-shadow;\n\n\t@media (forced-colors: none) {\n\t\twidth: var(--ck-color-grid-tile-size);\n\t\theight: var(--ck-color-grid-tile-size);\n\t\tmin-width: var(--ck-color-grid-tile-size);\n\t\tmin-height: var(--ck-color-grid-tile-size);\n\t\tpadding: 0;\n\t\tborder: 0;\n\n\t\t&.ck-on,\n\t\t&:focus:not( .ck-disabled ),\n\t\t&:hover:not( .ck-disabled ) {\n\t\t\t/* Disable the default .ck-button's border ring. */\n\t\t\tborder: 0;\n\t\t}\n\n\t\t&.ck-color-selector__color-tile_bordered {\n\t\t\tbox-shadow: 0 0 0 1px var(--ck-color-base-border);\n\t\t}\n\n\t\t&.ck-on {\n\t\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-base-text);\n\t\t}\n\n\t\t&:focus:not( .ck-disabled ),\n\t\t&:hover:not( .ck-disabled ) {\n\t\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);\n\t\t}\n\t}\n\n\t/*\n\t * In high contrast mode, the colors are replaced with text labels.\n\t * See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t */\n\t@media (forced-colors: active) {\n\t\twidth: unset;\n\t\theight: unset;\n\t\tmin-width: unset;\n\t\tmin-height: unset;\n\t\tpadding: 0 var(--ck-spacing-small);\n\n\t\t& .ck-button__label {\n\t\t\tdisplay: inline-block;\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&.ck-disabled {\n\t\tcursor: unset;\n\t\ttransition: unset;\n\t}\n\n\t& .ck.ck-icon {\n\t\tdisplay: none;\n\t\tcolor: var(--ck-color-color-grid-check-icon);\n\t}\n\n\t&.ck-on {\n\t\t& .ck.ck-icon {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n.ck.ck-color-grid__label {\n\tpadding: 0 var(--ck-spacing-standard);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.color-picker-hex-input {\n\twidth: max-content;\n\n\t& .ck.ck-input {\n\t\tmin-width: unset;\n\t}\n}\n\n.ck.ck-color-picker__row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tjustify-content: space-between;\n\tmargin: var(--ck-spacing-large) 0 0;\n\twidth: unset;\n\n\t& .ck.ck-labeled-field-view {\n\t\tpadding-top: unset;\n\t}\n\n\t& .ck.ck-input-text {\n\t\twidth: unset;\n\t}\n\n\t& .ck-color-picker__hash-view {\n\t\tpadding-top: var(--ck-spacing-tiny);\n\t\tpadding-right: var(--ck-spacing-medium);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-color-selector {\n\t/* View fragment with color grids. */\n\t& .ck-color-grids-fragment {\n\t\t& .ck-button.ck-color-selector__remove-color,\n\t\t& .ck-button.ck-color-selector__color-picker {\n\t\t\twidth: 100%;\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tjustify-content: flex-start;\n\t\t\t}\n\t\t}\n\n\t\t& .ck-button.ck-color-selector__color-picker {\n\t\t\tpadding: calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\n\t\t\t&:not(:focus) {\n\t\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t& .ck.ck-icon {\n\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\tmargin-right: var(--ck-spacing-standard);\n\t\t\t\t}\n\n\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t& label.ck.ck-color-grid__label {\n\t\t\tfont-weight: unset;\n\t\t}\n\t}\n\n\t/* View fragment with a color picker. */\n\t& .ck-color-picker-fragment {\n\t\t& .ck.ck-color-picker {\n\t\t\tpadding: 8px;\n\n\t\t\t& .hex-color-picker {\n\t\t\t\theight: 100px;\n\t\t\t\tmin-width: 180px;\n\n\t\t\t\t&::part(saturation) {\n\t\t\t\t\tborder-radius: var(--ck-border-radius) var(--ck-border-radius) 0 0;\n\t\t\t\t}\n\n\t\t\t\t&::part(hue) {\n\t\t\t\t\tborder-radius: 0 0 var(--ck-border-radius) var(--ck-border-radius);\n\t\t\t\t}\n\n\t\t\t\t&::part(saturation-pointer),\n\t\t\t\t&::part(hue-pointer) {\n\t\t\t\t\twidth: 15px;\n\t\t\t\t\theight: 15px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t& .ck.ck-color-selector_action-bar {\n\t\t\tpadding: 0 8px 8px;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tjustify-content: space-around;\n\n\t\t\t& .ck-button-save,\n\t\t\t& .ck-button-cancel {\n\t\t\t\tflex: 1\n\t\t\t}\n\t\t}\n\t}\n\t/* View fragment with color grids. */\n\n\t/* View fragment with a color picker. */\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-button.ck-dropdown-menu-list__nested-menu__button {\n\twidth: 100%;\n\tpadding: var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));\n\tborder-radius: 0;\n\n\t&:focus {\n\t\tborder-color: transparent;\n\t\tbox-shadow: none;\n\n\t\t&:not(.ck-on) {\n\t\t\tbackground: var(--ck-color-button-default-hover-background);\n\t\t}\n\t}\n\n\t& > .ck-button__label {\n\t\tflex-grow: 1;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&.ck-disabled > .ck-button__label {\n\t\topacity: var(--ck-disabled-opacity);\n\t}\n\n\t/* Spacing in buttons that miss the icon. */\n\t&.ck-icon-spacing:not(:has(.ck-button__icon)) > .ck-button__label {\n\t\tmargin-left: calc(var(--ck-icon-size) - var(--ck-spacing-small));\n\t}\n\n\t& > .ck-dropdown-menu-list__nested-menu__button__arrow {\n\t\twidth: var(--ck-dropdown-arrow-size);\n\t\tpointer-events: none;\n\t\tz-index: var(--ck-z-default);\n\n\t\t[dir=\"ltr\"] & {\n\t\t\ttransform: rotate(-90deg);\n\t\t\tright: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\n\t\t\t/* Nudge the arrow gently to the right because its center of gravity is to the left */\n\t\t\tmargin-right: calc(-1 * var(--ck-spacing-small));\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\ttransform: rotate(90deg);\n\t\t\tleft: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-right: var(--ck-spacing-small);\n\n\t\t\t/* Nudge the arrow gently to the left because its center of gravity is to the right (after rotation). */\n\t\t\tmargin-left: calc(-1 * var(--ck-spacing-small));\n\t\t}\n\t}\n\n\t&.ck-disabled > .ck-dropdown-menu-list__nested-menu__button__arrow {\n\t\topacity: var(--ck-disabled-opacity);\n\t}\n\n\t[dir=\"ltr\"] & {\n\t\t&:not(.ck-button_with-text) {\n\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t[dir=\"rtl\"] & {\n\t\t&:not(.ck-button_with-text) {\n\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-dialog {\n\t& .ck.ck-dialog__actions {\n\t\tpadding: var(--ck-spacing-large);\n\t\tdisplay: flex;\n\n\t\t& > * + * {\n\t\t\tmargin-left: var(--ck-spacing-large);\n\t\t}\n\t\tjustify-content: flex-end\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-dropdown-arrow-size: calc(0.5 * var(--ck-icon-size));\n\t--ck-dropdown-max-width: 75vw;\n}\n\n.ck.ck-dropdown {\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\tdisplay: inline-block;\n\tposition: relative;\n\n\t& .ck-dropdown__arrow {\n\t\twidth: var(--ck-dropdown-arrow-size);\n\t\tpointer-events: none;\n\t\tz-index: var(--ck-z-default);\n\t}\n\n\t[dir=\"ltr\"] & {\n\t\t& .ck-dropdown__arrow {\n\t\t\tright: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t[dir=\"rtl\"] & {\n\t\t& .ck-dropdown__arrow {\n\t\t\tleft: var(--ck-spacing-standard);\n\n\t\t\t/* A space to accommodate the triangle. */\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t&.ck-disabled .ck-dropdown__arrow {\n\t\topacity: var(--ck-disabled-opacity);\n\t}\n\n\t& .ck-button.ck-dropdown__button {\n\t\t[dir=\"ltr\"] & {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\t/* Make sure dropdowns with just an icon have the right inner spacing */\n\t\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\t/* Make sure dropdowns with just an icon have the right inner spacing */\n\t\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/23 */\n\t\t& .ck-button__label {\n\t\t\twidth: 7em;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/3362 */\n\t\t&.ck-disabled .ck-button__label {\n\t\t\topacity: var(--ck-disabled-opacity);\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/816 */\n\t\t&.ck-on {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t&.ck-dropdown__button_label-width_auto .ck-button__label {\n\t\t\twidth: auto;\n\t\t}\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/8699 */\n\t\t&.ck-off:active,\n\t\t&.ck-on:active {\n\t\t\tbox-shadow: none;\n\n\t\t\t&:focus {\n\t\t\t\tbox-shadow: var(--ck-focus-outer-shadow), 0 0;\n\t\t\t}\n\t\t}\n\t\twidth: 100%\n\t}\n\n\t/* Dropdown button should span horizontally, e.g. in vertical toolbars */\n\n\t& .ck-dropdown__panel {\n\t\tdisplay: none;\n\t\tz-index: var(--ck-z-panel);\n\t\tmax-width: var(--ck-dropdown-max-width);\n\n\t\tposition: absolute;\n\n\t\t&.ck-dropdown__panel-visible {\n\t\t\tdisplay: inline-block;\n\t\t}\n\n\t\t&.ck-dropdown__panel_ne,\n\t\t&.ck-dropdown__panel_nw,\n\t\t&.ck-dropdown__panel_n,\n\t\t&.ck-dropdown__panel_nmw,\n\t\t&.ck-dropdown__panel_nme {\n\t\t\tbottom: 100%;\n\t\t}\n\n\t\t&.ck-dropdown__panel_se,\n\t\t&.ck-dropdown__panel_sw,\n\t\t&.ck-dropdown__panel_smw,\n\t\t&.ck-dropdown__panel_sme,\n\t\t&.ck-dropdown__panel_s {\n\t\t\t/*\n\t\t\t * Using transform: translate3d( 0, 100%, 0 ) causes blurry dropdown on Chrome 67-78+ on non-retina displays.\n\t\t\t * See https://github.com/ckeditor/ckeditor5/issues/1053.\n\t\t\t */\n\t\t\ttop: 100%;\n\t\t\tbottom: auto;\n\t\t}\n\n\t\t&.ck-dropdown__panel_ne,\n\t\t&.ck-dropdown__panel_se {\n\t\t\tleft: 0px;\n\t\t}\n\n\t\t&.ck-dropdown__panel_nw,\n\t\t&.ck-dropdown__panel_sw {\n\t\t\tright: 0px;\n\t\t}\n\n\t\t&.ck-dropdown__panel_s,\n\t\t&.ck-dropdown__panel_n {\n\t\t\t/* Positioning panels relative to the center of the button */\n\t\t\tleft: 50%;\n\t\t\ttransform: translateX(-50%);\n\t\t}\n\n\t\t&.ck-dropdown__panel_nmw,\n\t\t&.ck-dropdown__panel_smw {\n\t\t\t/* Positioning panels relative to the middle-west of the button */\n\t\t\tleft: 75%;\n\t\t\ttransform: translateX(-75%);\n\t\t}\n\n\t\t&.ck-dropdown__panel_nme,\n\t\t&.ck-dropdown__panel_sme {\n\t\t\t/* Positioning panels relative to the middle-east of the button */\n\t\t\tleft: 25%;\n\t\t\ttransform: translateX(-25%);\n\t\t}\n\t}\n}\n\n.ck.ck-dropdown__panel {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\tbackground: var(--ck-color-dropdown-panel-background);\n\tborder: 1px solid var(--ck-color-dropdown-panel-border);\n\tbottom: 0;\n\n\t/* Make sure the panel is at least as wide as the drop-down's button. */\n\tmin-width: 100%;\n\n\t/* Disabled corner border radius to be consistent with the .dropdown__button\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\t&.ck-dropdown__panel_se {\n\t\tborder-top-left-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_sw {\n\t\tborder-top-right-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_ne {\n\t\tborder-bottom-left-radius: 0;\n\t}\n\n\t&.ck-dropdown__panel_nw {\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n}\n\n/*\n * Toolbar dropdown panels should be always above the UI (eg. other dropdown panels) from the editor's content.\n * See https://github.com/ckeditor/ckeditor5/issues/7874\n */\n\n.ck.ck-toolbar .ck-dropdown__panel {\n\tz-index: calc( var(--ck-z-panel) + 1 );\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-split-button-hover-background: hsl(0, 0%, 92%);\n\t--ck-color-split-button-hover-border: hsl(0, 0%, 70%);\n}\n\n.ck.ck-splitbutton {\n\t/*\n\t * Note: ck-rounded and ck-dir mixins don't go together (because they both use @nest).\n\t */\n\t& .ck-splitbutton__action:focus {\n\t\tz-index: calc(var(--ck-z-default) + 1);\n\t}\n\n\t&:hover > .ck-splitbutton__action,\n\t&.ck-splitbutton_open > .ck-splitbutton__action {\n\t\t[dir=\"ltr\"] & {\n\t\t\t/* Don't round the action button on the right side */\n\t\t\tborder-top-right-radius: unset;\n\t\t\tborder-bottom-right-radius: unset;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t/* Don't round the action button on the left side */\n\t\t\tborder-top-left-radius: unset;\n\t\t\tborder-bottom-left-radius: unset;\n\t\t}\n\t}\n\n\t& > .ck-splitbutton__arrow {\n\t\t/* It's a text-less button and since the icon is positioned absolutely in such situation,\n\t\tit must get some arbitrary min-width. */\n\t\tmin-width: unset;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t/* Don't round the arrow button on the left side */\n\t\t\tborder-top-left-radius: unset;\n\t\t\tborder-bottom-left-radius: unset;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t/* Don't round the arrow button on the right side */\n\t\t\tborder-top-right-radius: unset;\n\t\t\tborder-bottom-right-radius: unset;\n\t\t}\n\n\t\t& svg {\n\t\t\twidth: var(--ck-dropdown-arrow-size);\n\t\t}\n\t}\n\n\t/* Make sure the divider stretches 100% height of the button\n\thttps://github.com/ckeditor/ckeditor5/issues/10936 */\n\t& > .ck-splitbutton__arrow:not(:focus) {\n\t\tborder-top-width: 0px;\n\t\tborder-bottom-width: 0px;\n\t}\n\n\t/* Don't round the bottom left and right corners of the buttons when \"open\"\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\t&.ck-splitbutton_open {\n\t\tborder-radius: var(--ck-rounded-corners-radius);\n\n\t\t& > .ck-splitbutton__action {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\n\t\t& > .ck-splitbutton__arrow {\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\t}\n\n\t/* When the split button is \"open\" (the arrow is on) or being hovered, it should get some styling\n\tas a whole. The background of both buttons should stand out and there should be a visual\n\tseparation between both buttons. */\n\t&.ck-splitbutton_open,\n\t&:hover {\n\t\t/* When the split button hovered as a whole, not as individual buttons. */\n\t\t& > .ck-button:not(.ck-on):not(.ck-disabled):not(:hover) {\n\t\t\tbackground: var(--ck-color-split-button-hover-background);\n\t\t}\n\n\t\t/* Splitbutton separator needs to be set with the ::after pseudoselector\n\t\tto display properly the borders on focus */\n\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\twidth: 1px;\n\t\t\theight: 100%;\n\t\t\tbackground-color: var(--ck-color-split-button-hover-border);\n\t\t}\n\n\t\t/* Make sure the divider between the buttons looks fine when the button is focused */\n\t\t& > .ck-splitbutton__arrow:focus::after {\n\t\t\t--ck-color-split-button-hover-border: var(--ck-color-focus-border);\n\t\t}\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\t\tleft: -1px;\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled)::after {\n\t\t\t\tright: -1px;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* The button should display as a regular drop-down if the action button\n\tis forced to fire the same action as the arrow button. */\n\t&.ck-splitbutton_flatten {\n\t\t&:hover,\n\t\t&.ck-splitbutton_open {\n\t\t\t& > .ck-splitbutton__action:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled):not(:hover) {\n\t\t\t\tbackground-color: var(--ck-color-button-on-background);\n\n\t\t\t\t&::after {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.ck-splitbutton_open:hover {\n\t\t\t& > .ck-splitbutton__action:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled),\n\t\t\t& > .ck-splitbutton__arrow:not(.ck-disabled):not(:hover) {\n\t\t\t\tbackground-color: var(--ck-color-button-on-hover-background);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-toolbar-dropdown .ck-toolbar {\n\tborder: 0;\n}\n\n:root {\n\t--ck-toolbar-dropdown-max-width: 60vw;\n}\n\n.ck.ck-toolbar-dropdown > .ck-dropdown__panel {\n\t/* https://github.com/ckeditor/ckeditor5/issues/5586 */\n\twidth: max-content;\n\tmax-width: var(--ck-toolbar-dropdown-max-width);\n\n\t& .ck-button {\n\t\t&:focus {\n\t\t\tz-index: calc(var(--ck-z-default) + 1);\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* Increase z-index of everything to make sure nothing sticks in front of the editor.\nDisable scrollbars that can be present due to the rest of the website content. */\nhtml.ck-fullscreen,\nbody.ck-fullscreen {\n\t--ck-z-fullscreen: 10000;\n\n\toverflow: hidden;\n\n\t--ck-z-default: calc(var(--ck-z-fullscreen) + 1);\n\t--ck-z-panel: calc(var(--ck-z-default) + 999);\n\t--ck-z-dialog: 100000;\n\n\t/* CKBox wrappers have z-index of 9999, let's bump them over the dialog's to ensure visibility like outside fullscreen mode. */\n\t& .ckbox:not(#n) {\n\t\t--ckbox-z-index-root: calc(var(--ck-z-dialog) + 1);\n\n\t\t/*\n\t\t * Safari composites `overflow: auto` scroll layers (like `.ck-fullscreen__editable-wrapper`) on top of\n\t\t * sibling stacking contexts regardless of z-index. Setting `position: absolute` promotes `.ckbox` to its\n\t\t * own compositing layer, which Safari then sorts correctly above the editable wrapper's layer.\n\t\t */\n\t\tposition: absolute;\n\t}\n\n\t& .ckbox:not(#n) .ckbox-img-editor {\n\t\t--ckbox-z-index-preview: calc(var(--ck-z-dialog) + 1);\n\t}\n\n\t& .ck-pagination-view-line {\n\t\tz-index: calc(var(--ck-z-fullscreen) + 1);\n\t}\n\n\t& .page-break__label {\n\t\t/* Needs to be higher than for .ck-pagination-view-line to be displayed on top of the line. */\n\t\tz-index: calc(var(--ck-z-fullscreen) + 2);\n\t}\n}\n\n/*\nFullscreen layout:\n\n
    \n\t
    \n\t\t
    \n\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t
    \n\t\t
    \n\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t
    \n
    \n*/\n\n.ck.ck-fullscreen__main-wrapper {\n\t/* `position: fixed` prevents the overscroll on macos that would happen with `position: absolute`. */\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: var(--ck-z-fullscreen);\n\tbackground: var(--ck-color-base-foreground);\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t& .ck.ck-revision-history-ui__changes-navigation {\n\t\tmargin-top: 0px;\n\t\tmargin-bottom: 0px;\n\t}\n}\n\n/* If the fullscreen container is not directly in the body, we need to make sure it's positioned absolutely. */\n:not(body> .ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper {\n\tposition: absolute;\n\n\t& .ck-fullscreen__top-wrapper {\n\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\tborder-left: 1px solid var(--ck-color-base-border);\n\t\tborder-right: 1px solid var(--ck-color-base-border);\n\t\tborder-radius: var(--ck-border-radius) 0;\n\t}\n}\n\n.ck-fullscreen__menu-bar .ck.ck-menu-bar {\n\tborder: none;\n}\n\n.ck.ck-fullscreen__toolbar .ck-toolbar {\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-radius: 0;\n}\n\n.ck-fullscreen__main-wrapper .ck-fullscreen__editable-wrapper {\n\t--ck-fullscreen-editor-top-margin: 28px;\n\t--ck-fullscreen-editor-bottom-margin: 28px;\n\tdisplay: flex;\n\tjustify-content: flex-start;\n\toverflow: auto;\n\tmax-height: 100%;\n}\n\n.ck-fullscreen__main-wrapper .ck-fullscreen__editable {\n\tmargin-top: var(--ck-fullscreen-editor-top-margin);\n\theight: 100%;\n\tmargin-left: auto;\n\n\t&::after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\theight: var(--ck-fullscreen-editor-bottom-margin);\n\t}\n}\n\n.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck.ck-editor__editable:not(.ck-editor__nested-editable) {\n\tbox-sizing: border-box;\n\t/* Make sure the border is taken into account. */\n\twidth: calc(210mm + 2px);\n\t/* Make sure the border is taken into account. */\n\tmax-width: calc(210mm + 2px);\n\tmin-height: 297mm;\n\theight: fit-content;\n\t/* Reset margins that may be present on editable. We add them in other places. */\n\tmargin: 0;\n\tpadding: 20mm 12mm;\n\tborder: 1px var(--ck-color-base-border) solid;\n\tbackground: hsl(0, 0%, 100%);\n\tbox-shadow: 0 2px 3px hsla(0, 0%, 0%, 0.078);\n}\n\n.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck-source-editing-area {\n\twidth: calc(210mm + 2px);\n}\n\n.ck-fullscreen__sidebar {\n\twidth: 270px;\n\tmargin-top: var(--ck-fullscreen-editor-top-margin);\n\tmargin-left: 10px;\n}\n\n.ck-fullscreen__left-sidebar {\n\tfont-family: Helvetica, Arial, sans-serif;\n\t--ck-user-avatar-size: 28px;\n\tposition: sticky;\n\talign-self: flex-start;\n\ttop: 0;\n\theight: 100%;\n\tbackground-color: transparent;\n\tmargin-top: 0px;\n\tmargin-right: 10px;\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t& .ck-button.ck-fullscreen__left-sidebar-toggle-button {\n\t\t--ck-icon-size: 20px;\n\t\t--ck-ui-component-min-height: 0px;\n\n\t\talign-self: flex-start;\n\t\tpadding-top: 0;\n\t\tmargin-top: var(--ck-fullscreen-editor-top-margin);\n\t\tmargin-bottom: var(--ck-spacing-large);\n\t\topacity: 0.5;\n\t\tborder-radius: 100%;\n\t}\n\n\t> .ck-fullscreen__left-sidebar-sticky {\n\t\t/* Set minimal width if there is any item in the sidebar. */\n\t\tmin-width: 270px;\n\n\t\t&:first-child {\n\t\t\tpadding-top: var(--ck-fullscreen-editor-top-margin);\n\t\t}\n\t}\n\n\t&.ck-fullscreen__left-sidebar--collapsed {\n\t\twidth: 65px;\n\n\t\t> :not(.ck-fullscreen__left-sidebar-toggle-button) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n.ck-fullscreen__left-sidebar .ck.ck-presence-list--collapsed {\n\t--ck-user-avatar-size: 32px;\n}\n\n.ck-fullscreen__left-sidebar .ck-user {\n\tfont-size: 0.85em;\n}\n\n.ck-fullscreen__left-sidebar .ck-presence-list__users-counter__text {\n\tfont-size: 0.85em;\n}\n\n.ck-fullscreen__left-sidebar-item {\n\tpadding: var(--ck-spacing-medium);\n\tmargin-bottom: var(--ck-spacing-medium);\n\n\t/* First header should not have top padding. */\n\t&:first-child {\n\t\tpadding-top: 0;\n\t}\n\n\t&:last-child {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n.ck-fullscreen__left-sidebar-header {\n\t--ck-fullscreen-presence-list-header-font-size: 0.875em;\n\tfont-size: var(--ck-fullscreen-presence-list-header-font-size);\n\tfont-weight: bold;\n\tcolor: var(--ck-document-outline-item-default-color);\n\twhite-space: nowrap;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.ck-fullscreen__left-sidebar--sticky {\n\tposition: sticky;\n\ttop: 0;\n\n\t& > :first-child {\n\t\tpadding-top: 0;\n\t}\n}\n\n.ck-fullscreen__presence-list {\n\tmargin-top: var(--ck-spacing-medium);\n}\n\n.ck-fullscreen__left-sidebar-item--no-margin {\n\tmargin: 0;\n}\n\n.ck-fullscreen__left-sidebar .ck.ck-document-outline {\n\tpadding-top: 0;\n\tpadding-left: 0;\n\tpadding-right: 0;\n}\n\n.ck-fullscreen__document-outline-wrapper {\n\tpadding-top: 0;\n\toverflow-y: auto;\n}\n\n.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar {\n\tmargin-top: var(--ck-fullscreen-editor-top-margin);\n\tmargin-right: auto;\n\n\t&:not(.ck-fullscreen__right-sidebar--collapsed) > :first-child {\n\t\t/* Set minimal width if there is any item in the sidebar. */\n\t\tmin-width: 270px;\n\t}\n\n\t&.ck-fullscreen__right-sidebar--collapsed {\n\t\twidth: 65px;\n\n\t\t& > :first-child {\n\t\t\tmin-width: 65px;\n\t\t}\n\t}\n}\n\n.ck.ck-fullscreen__right-edge {\n\tposition: sticky;\n\ttop: 0;\n\tmargin-top: 0;\n\tmargin-left: 10px;\n\n\t& > :first-child {\n\t\tborder-top: none;\n\t\tborder-bottom: none;\n\t\tborder-right: none;\n\t\theight: 100%;\n\t\twidth: 495px;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-dropdown-menu-list__nested-menu {\n\tdisplay: block;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-dropdown-menu-menu-item-min-width: 18em;\n}\n\n.ck.ck-dropdown-menu-list__nested-menu__item {\n\tmin-width: var(--ck-dropdown-menu-menu-item-min-width);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-button.ck-dropdown-menu-list__nested-menu__item__button {\n\tborder-radius: 0;\n\n\t& > .ck-spinner-container,\n\t& > .ck-spinner-container .ck-spinner {\n\t\t/* These styles correspond to .ck-icon so that the spinner seamlessly replaces the icon. */\n\t\t--ck-toolbar-spinner-size: 20px;\n\t}\n\n\t& > .ck-spinner-container {\n\t\t/* These margins are the same as for .ck-icon. */\n\t\tmargin-left: calc(-1 * var(--ck-spacing-small));\n\t\tmargin-right: var(--ck-spacing-small);\n\t}\n\n\t/*\n\t * Hovered items automatically get focused. Default focus styles look odd\n\t * while moving across a huge list of items so let's get rid of them\n\t */\n\t&:focus {\n\t\tborder-color: transparent;\n\t\tbox-shadow: none;\n\n\t\t&:not(.ck-on) {\n\t\t\tbackground: var(--ck-color-button-default-hover-background);\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-dialog-overlay-background-color: hsla( 0, 0%, 0%, .5 );\n\t--ck-dialog-drop-shadow: 0px 0px 6px 2px hsl(0deg 0% 0% / 15%);\n\t--ck-dialog-max-width: 100vw;\n\t--ck-dialog-max-height: 90vh;\n\t--ck-color-dialog-background: var(--ck-color-base-background);\n\t--ck-color-dialog-form-header-border: var(--ck-color-base-border);\n}\n\n.ck.ck-dialog-overlay {\n\tanimation: ck-dialog-fade-in .3s;\n\tbackground: var(--ck-dialog-overlay-background-color);\n\tz-index: var(--ck-z-dialog);\n\tuser-select: none;\n\toverscroll-behavior: none;\n\n\tposition: fixed;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\n\t&.ck-dialog-overlay__transparent {\n\t\tpointer-events: none;\n\t\tanimation: none;\n\t\tbackground: none;\n\t}\n}\n\n.ck.ck-dialog {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\t--ck-drop-shadow: var(--ck-dialog-drop-shadow);\n\n\tbackground: var(--ck-color-dialog-background);\n\tmax-height: var(--ck-dialog-max-height);\n\tmax-width: var(--ck-dialog-max-width);\n\tborder: 1px solid var(--ck-color-base-border);\n\toverscroll-behavior: contain;\n\toverscroll-behavior: none;\n\twidth: fit-content;\n\tposition: absolute;\n\n\t& .ck.ck-form__header {\n\t\tborder-bottom: 1px solid var(--ck-color-dialog-form-header-border);\n\t\tflex-shrink: 0;\n\t}\n\n\t/* Modals should not be draggable. */\n\t&:not(.ck-dialog_modal) {\n\t\t& .ck.ck-form__header .ck-form__header__label {\n\t\t\tcursor: grab;\n\t\t}\n\t}\n\n\t.ck.ck-dialog-overlay.ck-dialog-overlay__transparent & {\n\t\tpointer-events: all;\n\t}\n}\n\n.ck-dialog-scroll-locked {\n\toverflow: hidden;\n}\n\n@keyframes ck-dialog-fade-in {\n\t0% {\n\t\tbackground: hsla( 0, 0%, 0%, 0 );\n\t}\n\n\t100% {\n\t\tbackground: var(--ck-dialog-overlay-background-color);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-dropdown-menu-menu-panel-max-width: 75vw;\n}\n\n.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel {\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\tbackground: var(--ck-color-dropdown-panel-background);\n\tborder: 1px solid var(--ck-color-dropdown-panel-border);\n\tbottom: 0;\n\theight: fit-content;\n\tmax-width: var(--ck-dropdown-menu-menu-panel-max-width);\n\tposition: absolute;\n\tmax-height: 314px; /* With the default settings, this is equal to 10 menu items. */\n\toverflow-y: auto;\n\n\t/* Reset balloon styling */\n\t&::after,\n\t&::before {\n\t\tdisplay: none;\n\t}\n\n\t/* Corner border radius consistent with the button. */\n\t&.ck-balloon-panel_es,\n\t&.ck-balloon-panel_se {\n\t\tborder-top-left-radius: 0;\n\t}\n\n\t&.ck-balloon-panel_ws,\n\t&.ck-balloon-panel_sw {\n\t\tborder-top-right-radius: 0;\n\t}\n\n\t&.ck-balloon-panel_en,\n\t&.ck-balloon-panel_ne {\n\t\tborder-bottom-left-radius: 0;\n\t}\n\n\t&.ck-balloon-panel_wn,\n\t&.ck-balloon-panel_nw {\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n\tz-index: calc(var(--ck-z-panel) + 1)\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-editable-blur-selection: hsl(0, 0%, 85%);\n}\n\n.ck.ck-editor__top {\n\t& .ck-sticky-panel {\n\t\t& .ck-sticky-panel__content {\n\t\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\n\t\t\tborder: 1px solid var(--ck-color-base-border);\n\t\t\tborder-bottom-width: 0;\n\n\t\t\t&.ck-sticky-panel__content_sticky {\n\t\t\t\tborder-bottom-width: 1px;\n\t\t\t}\n\n\t\t\t& .ck-menu-bar {\n\t\t\t\tborder: 0;\n\t\t\t\tborder-bottom: 1px solid var(--ck-color-base-border);\n\t\t\t}\n\n\t\t\t& .ck-toolbar {\n\t\t\t\tborder: 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable:not(.ck-editor__nested-editable) {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\n\t&.ck-focused {\n\t\toutline: none;\n\t\tborder: var(--ck-focus-ring);\n\t\tbox-shadow: var(--ck-inner-shadow), 0 0;\n\t}\n}\n\n.ck.ck-editor__editable_inline {\n\toverflow: auto;\n\tpadding: 0 var(--ck-spacing-standard);\n\tborder: 1px solid transparent;\n\n\t&[dir=\"ltr\"] {\n\t\ttext-align: left;\n\t}\n\n\t&[dir=\"rtl\"] {\n\t\ttext-align: right;\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/3385 */\n\t& > *:first-child {\n\t\tmargin-top: var(--ck-spacing-large);\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/847 */\n\t& > *:last-child {\n\t\t/*\n\t\t * This value should match with the default margins of the block elements (like .media or .image)\n\t\t * to avoid a content jumping when the fake selection container shows up (See https://github.com/ckeditor/ckeditor5/issues/9825).\n\t\t */\n\t\tmargin-bottom: var(--ck-spacing-large);\n\t}\n\n\t/* https://github.com/ckeditor/ckeditor5/issues/6517 */\n\t&.ck-blurred ::selection {\n\t\tbackground: var(--ck-color-editable-blur-selection);\n\t}\n\n\t&.ck-editor__editable_inline-root br {\n\t\t/*\n\t\t * An inline root content is placed directly inside editable element (without blocks)\n\t\t * and BR block filler (and plain soft-break) gets margins for first and last occurrences as set above.\n\t\t * This is ignored in Chrome but Firefox applies this margins.\n\t\t */\n\t\tmargin-top: 0;\n\t\tmargin-bottom: 0;\n\t}\n}\n\n/* https://github.com/ckeditor/ckeditor5/issues/3383 */\n\n.ck.ck-balloon-panel.ck-toolbar-container[class*=\"arrow_n\"] {\n\t&::after {\n\t\tborder-bottom-color: var(--ck-color-panel-background);\n\t}\n}\n\n.ck.ck-balloon-panel.ck-toolbar-container[class*=\"arrow_s\"] {\n\t&::after {\n\t\tborder-top-color: var(--ck-color-panel-background);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-form__row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: space-between;\n\talign-items: flex-start;\n\tpadding: var(--ck-spacing-standard) var(--ck-spacing-large) 0;\n\n\t&.ck-form__row_large-top-padding {\n\t\tpadding-top: var(--ck-spacing-large);\n\t}\n\n\t&.ck-form__row_large-bottom-padding {\n\t\tpadding-bottom: var(--ck-spacing-large);\n\t}\n\n\t&.ck-form__row_with-submit {\n\t\tflex-wrap: nowrap;\n\n\t\t& > *:not(:first-child) {\n\t\t\tmargin-inline-start: var(--ck-spacing-standard);\n\t\t}\n\t}\n\n\t& > .ck.ck-form__row {\n\t\tpadding: 0;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-form-header-height: 3.384em;\n}\n\n.ck.ck-form__header {\n\tpadding: var(--ck-spacing-small) var(--ck-spacing-large);\n\theight: var(--ck-form-header-height);\n\tline-height: var(--ck-form-header-height);\n\tborder-bottom: 1px solid var(--ck-color-base-border);\n\t/* To prevent shrinking when placed in flexbox. */\n\tflex-shrink: 0;\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\n\t& > .ck-icon {\n\t\tmargin-inline-end: var(--ck-spacing-medium);\n\t\tflex-shrink: 0;\n\t}\n\n\t& .ck-form__header__label {\n\t\t/* Defaults to 15px. */\n\t\t--ck-font-size-base: 1.153em;\n\n\t\tfont-weight: bold;\n\t}\n\n\t/* Padding when back button is hidden */\n\t&:has(.ck-button-back.ck-hidden) {\n\t\tpadding-inline: var(--ck-spacing-large) var(--ck-spacing-large);\n\t}\n\n\t/* Padding when back button is visible */\n\t&:has(.ck-button-back:not(.ck-hidden)) {\n\t\tpadding-inline: var(--ck-spacing-small) var(--ck-spacing-small);\n\t}\n\n\t& > .ck-button-back {\n\t\tmargin-inline-end: var(--ck-spacing-small);\n\t}\n\n\t& > .ck.ck-button {\n\t\tflex-shrink: 0;\n\t}\n\n\t& h2.ck-form__header__label {\n\t\tflex-grow: 1;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-icon-size: calc(var(--ck-line-height-base) * var(--ck-font-size-normal));\n\t--ck-icon-font-size: .8333350694em;\n}\n\n.ck.ck-icon {\n\twidth: var(--ck-icon-size);\n\theight: var(--ck-icon-size);\n\n\t/* Multiplied by the height of the line in \"px\" should give SVG \"viewport\" dimensions */\n\tfont-size: var(--ck-icon-font-size);\n\n\t/* Inherit cursor style (https://github.com/ckeditor/ckeditor5/issues/5). */\n\tcursor: inherit;\n\n\t& * {\n\t\t/* Inherit cursor style (https://github.com/ckeditor/ckeditor5/issues/5). */\n\t\tcursor: inherit;\n\t}\n\n\t/* Allows dynamic coloring of an icon by inheriting its color from the parent. */\n\t&.ck-icon_inherit-color {\n\t\tcolor: inherit;\n\n\t\t& * {\n\t\t\tcolor: inherit;\n\n\t\t\t&:not([fill]) {\n\t\t\t\t/* Needed by FF. */\n\t\t\t\tfill: currentColor;\n\t\t\t}\n\t\t}\n\t}\n\tvertical-align: middle\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-input-width: 18em;\n\n\t/* Backward compatibility. */\n\t--ck-input-text-width: var(--ck-input-width);\n}\n\n.ck.ck-input {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbackground: var(--ck-color-input-background);\n\tborder: 1px solid var(--ck-color-input-border);\n\tpadding: var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);\n\tmin-width: var(--ck-input-width);\n\n\t/* This is important to stay of the same height as surrounding buttons */\n\tmin-height: var(--ck-ui-component-min-height);\n\n\t/* Apply some smooth transition to the box-shadow and border. */\n\ttransition: box-shadow .1s ease-in-out, border .1s ease-in-out;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t\tborder: var(--ck-focus-ring);\n\t\tbox-shadow: var(--ck-focus-outer-shadow), 0 0;\n\t}\n\n\t&[readonly] {\n\t\tborder: 1px solid var(--ck-color-input-disabled-border);\n\t\tbackground: var(--ck-color-input-disabled-background);\n\t\tcolor: var(--ck-color-input-disabled-text);\n\n\t\t&:focus {\n\t\t\t/* The read-only input should have a slightly less visible shadow when focused. */\n\t\t\tbox-shadow: var(--ck-focus-disabled-outer-shadow), 0 0;\n\t\t}\n\t}\n\n\t&.ck-error {\n\t\tborder-color: var(--ck-color-input-error-border);\n\t\tanimation: ck-input-shake .3s ease both;\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\tanimation: none;\n\t\t}\n\n\t\t&:focus {\n\t\t\tbox-shadow: var(--ck-focus-error-outer-shadow), 0 0;\n\t\t}\n\t}\n}\n\n@keyframes ck-input-shake {\n\t20% {\n\t\ttransform: translateX(-2px);\n\t}\n\n\t40% {\n\t\ttransform: translateX(2px);\n\t}\n\n\t60% {\n\t\ttransform: translateX(-1px);\n\t}\n\n\t80% {\n\t\ttransform: translateX(1px);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-textarea {\n\toverflow-x: hidden\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-label {\n\tfont-weight: bold;\n\tdisplay: block;\n}\n\n.ck.ck-voice-label {\n\tdisplay: none;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-labeled-field-view-transition: .1s cubic-bezier(0, 0, 0.24, 0.95);\n\t--ck-labeled-field-empty-unfocused-max-width: 100% - 2 * var(--ck-spacing-medium);\n\t--ck-labeled-field-label-default-position-x: var(--ck-spacing-medium);\n\t--ck-labeled-field-label-default-position-y: calc(0.6 * var(--ck-font-size-base));\n\t--ck-color-labeled-field-label-background: var(--ck-color-base-background);\n}\n\n.ck.ck-labeled-field-view {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\n\t& .ck.ck-label {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t}\n\n\t& > .ck.ck-labeled-field-view__input-wrapper {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\n\t\t& > .ck.ck-label {\n\t\t\ttop: 0px;\n\n\t\t\tpointer-events: none;\n\n\t\t\tbackground: var(--ck-color-labeled-field-label-background);\n\t\t\tpadding: 0 calc(.5 * var(--ck-font-size-tiny));\n\t\t\tline-height: initial;\n\t\t\tfont-weight: normal;\n\n\t\t\t/* Prevent overflow when the label is longer than the input */\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\n\t\t\tmax-width: 100%;\n\n\t\t\ttransition:\n\t\t\t\ttransform var(--ck-labeled-field-view-transition),\n\t\t\t\tpadding var(--ck-labeled-field-view-transition),\n\t\t\t\tbackground var(--ck-labeled-field-view-transition);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tleft: 0px;\n\t\t\t\ttransform-origin: 0 0;\n\t\t\t\t/* By default, display the label scaled down above the field. */\n\t\t\t\ttransform: translate(var(--ck-spacing-medium), -6px) scale(.75);\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tright: 0px;\n\t\t\t\ttransform-origin: 100% 0;\n\t\t\t\ttransform: translate(calc(-1 * var(--ck-spacing-medium)), -6px) scale(.75);\n\t\t\t}\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t\tposition: relative\n\t}\n\n\t&.ck-error {\n\t\t& > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\n\t\t& .ck-input:not([readonly]) + .ck.ck-label {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\t}\n\n\t& .ck-labeled-field-view__status {\n\t\tfont-size: var(--ck-font-size-small);\n\t\tmargin-top: var(--ck-spacing-small);\n\n\t\t/* Let the info wrap to the next line to avoid stretching the layout horizontally.\n\t\tThe status could be very long. */\n\t\twhite-space: normal;\n\n\t\t&.ck-labeled-field-view__status_error {\n\t\t\tcolor: var(--ck-color-base-error);\n\t\t}\n\t}\n\n\t/* Disabled fields and fields that have no focus should fade out. */\n\t&.ck-disabled > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label,\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused) > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\tcolor: var(--ck-color-input-disabled-text);\n\t}\n\n\t/* Fields that are disabled or not focused and without a placeholder should have full-sized labels. */\n\t&.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder) > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label,\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error) > .ck.ck-labeled-field-view__input-wrapper > .ck.ck-label {\n\t\t[dir=\"ltr\"] & {\n\t\t\ttransform: translate(var(--ck-labeled-field-label-default-position-x), var(--ck-labeled-field-label-default-position-y)) scale(1);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\ttransform: translate(calc(-1 * var(--ck-labeled-field-label-default-position-x)), var(--ck-labeled-field-label-default-position-y)) scale(1);\n\t\t}\n\n\t\t/* Compensate for the default translate position. */\n\t\tmax-width: calc(var(--ck-labeled-field-empty-unfocused-max-width));\n\n\t\tbackground: transparent;\n\t\tpadding: 0;\n\t}\n\n\t/*------ DropdownView integration ----------------------------------------------------------------------------------- */\n\n\t/* Make sure dropdown' background color in any of dropdown's state does not collide with labeled field. */\n\t& > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown > .ck.ck-button {\n\t\tbackground: transparent;\n\t}\n\n\t/* When the dropdown is \"empty\", the labeled field label replaces its label. */\n\t&.ck-labeled-field-view_empty > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown > .ck-button > .ck-button__label {\n\t\topacity: 0;\n\t}\n\n\t/* Make sure the label of the empty, unfocused input does not cover the dropdown arrow. */\n\t&.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder) > .ck.ck-labeled-field-view__input-wrapper > .ck-dropdown + .ck-label {\n\t\tmax-width: calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard));\n\t}\n\n\t&.ck-labeled-field-view_full-width {\n\t\tflex-grow: 1;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-menu-bar__menu {\n\t/* Enable font size inheritance, which allows fluid UI scaling. */\n\tfont-size: inherit;\n\tdisplay: block;\n\n\t&.ck-menu-bar__menu_top-level {\n\t\tmax-width: 100%;\n\t}\n\tposition: relative\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-list {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tlist-style-type: none;\n\tbackground: var(--ck-color-list-background);\n\n\t/* A spacing at the beginning and end of the list */\n\tpadding: var(--ck-spacing-small) 0;\n\t-webkit-user-select: none;\n\tuser-select: none;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t& .ck-list__item,\n\t& .ck-list__separator {\n\t\tdisplay: block;\n\t}\n\n\t/* Make sure that whatever child of the list item gets focus, it remains on the\n\ttop. Thanks to that, styles like box-shadow, outline, etc. are not masked by\n\tadjacent list items. */\n\t& .ck-list__item > *:focus {\n\t\tposition: relative;\n\t\tz-index: var(--ck-z-default);\n\t}\n}\n\n.ck.ck-list__item {\n\tcursor: default;\n\n\t/* Almost as wide as menu bar items. */\n\tmin-width: 15em;\n\n\t& > .ck-button:not(.ck-list-item-button) {\n\t\tpadding: var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));\n\t\tmin-height: unset;\n\t\twidth: 100%;\n\t\tborder-radius: 0;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t& .ck-button__label {\n\t\t\t/* https://github.com/ckeditor/ckeditor5-heading/issues/63 */\n\t\t\tline-height: calc(var(--ck-line-height-base) * var(--ck-font-size-base));\n\t\t}\n\n\t\t&:active {\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\t&.ck-on {\n\t\t\tbackground: var(--ck-color-list-button-on-background);\n\t\t\tcolor: var(--ck-color-list-button-on-text);\n\n\t\t\t&:active {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n\t\t\t&:hover:not(.ck-disabled) {\n\t\t\t\tbackground: var(--ck-color-list-button-on-background-focus);\n\t\t\t}\n\n\t\t\t&:focus:not(.ck-disabled) {\n\t\t\t\tborder-color: var(--ck-color-base-background);\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(.ck-disabled) {\n\t\t\tbackground: var(--ck-color-list-button-hover-background);\n\t\t}\n\t}\n\n\t/* It's unnecessary to change the background/text of a switch toggle; it has different ways\n\tof conveying its state (like the switcher) */\n\t& > .ck-button.ck-switchbutton {\n\t\t&.ck-on {\n\t\t\tbackground: var(--ck-color-list-background);\n\t\t\tcolor: inherit;\n\n\t\t\t&:hover:not(.ck-disabled) {\n\t\t\t\tbackground: var(--ck-color-list-button-hover-background);\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck-list .ck-list__group {\n\tpadding-top: var(--ck-spacing-medium);\n\n\t/* Lists come with an inner vertical padding. Don't duplicate it. */\n\t&:first-child {\n\t\tpadding-top: 0;\n\t}\n\n\t/* The group should have a border when it's not the first item. */\n\t*:not(.ck-hidden) ~ & {\n\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t}\n\n\t& > .ck-label {\n\t\tfont-size: 11px;\n\t\tfont-weight: bold;\n\t\tpadding: var(--ck-spacing-medium) var(--ck-spacing-large) 0;\n\t}\n}\n\n.ck.ck-list__separator {\n\theight: 1px;\n\twidth: 100%;\n\tbackground: var(--ck-color-base-border);\n\n\t/* Give the separator some air */\n\tmargin: var(--ck-spacing-small) 0;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-balloon-border-width: 1px;\n\t--ck-balloon-arrow-offset: 2px;\n\t--ck-balloon-arrow-height: 10px;\n\t--ck-balloon-arrow-half-width: 8px;\n\t--ck-balloon-arrow-drop-shadow: 0 2px 2px var(--ck-color-shadow-drop);\n\t/* Make sure the balloon arrow does not float over its children. */\n\t--ck-balloon-panel-arrow-z-index: calc(var(--ck-z-default) - 3);\n}\n\n.ck.ck-balloon-panel {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\tmin-height: 15px;\n\n\tbackground: var(--ck-color-panel-background);\n\tborder: var(--ck-balloon-border-width) solid var(--ck-color-panel-border);\n\tdisplay: none;\n\tposition: absolute;\n\n\tz-index: var(--ck-z-panel);\n\n\t&.ck-balloon-panel_with-arrow {\n\t\t&::before,\n\t\t&::after {\n\t\t\twidth: 0;\n\t\t\theight: 0;\n\t\t\tborder-style: solid;\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t}\n\n\t\t&::before {\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&[class*=\"arrow_n\"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent transparent var(--ck-color-panel-border) transparent;\n\t\t\tmargin-top: calc( -1 * var(--ck-balloon-border-width) );\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent transparent var(--ck-color-panel-background) transparent;\n\t\t\tmargin-top: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&[class*=\"arrow_s\"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: var(--ck-color-panel-border) transparent transparent;\n\t\t\tfilter: drop-shadow(var(--ck-balloon-arrow-drop-shadow));\n\t\t\tmargin-bottom: calc( -1 * var(--ck-balloon-border-width) );\n\t\t\tz-index: var(--ck-balloon-panel-arrow-z-index);\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: var(--ck-color-panel-background) transparent transparent transparent;\n\t\t\tmargin-bottom: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t\tz-index: calc(var(--ck-balloon-panel-arrow-z-index) + 1);\n\t\t}\n\t}\n\n\t&[class*=\"arrow_e\"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height);\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent transparent transparent var(--ck-color-panel-border);\n\t\t\tmargin-right: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent transparent transparent var(--ck-color-panel-background);\n\t\t\tmargin-right: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&[class*=\"arrow_w\"] {\n\t\t&::before,\n\t\t&::after {\n\t\t\tborder-width: var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0;\n\t\t}\n\n\t\t&::before {\n\t\t\tborder-color: transparent var(--ck-color-panel-border) transparent transparent;\n\t\t\tmargin-left: calc( -1 * var(--ck-balloon-border-width) );\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: transparent var(--ck-color-panel-background) transparent transparent;\n\t\t\tmargin-left: calc( var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width) );\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_n {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 50%;\n\t\t\tmargin-left: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_ne {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_s {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 50%;\n\t\t\tmargin-left: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_sw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_se {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_sme {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: 25%;\n\t\t\tmargin-right: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_smw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 25%;\n\t\t\tmargin-left: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\tbottom: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nme {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: 25%;\n\t\t\tmargin-right: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_nmw {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: 25%;\n\t\t\tmargin-left: calc(2 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_e {\n\t\t&::before,\n\t\t&::after {\n\t\t\tright: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t\tmargin-top: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: 50%;\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_arrow_w {\n\t\t&::before,\n\t\t&::after {\n\t\t\tleft: calc(-1 * var(--ck-balloon-arrow-height));\n\t\t\tmargin-top: calc(-1 * var(--ck-balloon-arrow-half-width));\n\t\t\ttop: 50%;\n\t\t}\n\t}\n\n\t&.ck-balloon-panel_visible {\n\t\tdisplay: block;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck .ck-balloon-rotator__navigation {\n\tbackground: var(--ck-color-toolbar-background);\n\tborder-bottom: 1px solid var(--ck-color-toolbar-border);\n\tpadding: 0 var(--ck-spacing-small);\n\tdisplay: flex;\n\talign-items: center;\n\n\t/* Let's keep similar appearance to `ck-toolbar`. */\n\t& > * {\n\t\tmargin-right: var(--ck-spacing-small);\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t}\n\n\t/* Gives counter more breath than buttons. */\n\t& .ck-balloon-rotator__counter {\n\t\tmargin-right: var(--ck-spacing-standard);\n\n\t\t/* We need to use smaller margin because of previous button's right margin. */\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n\tjustify-content: center\n}\n\n.ck .ck-balloon-rotator__content {\n\n\t/* Disable default annotation shadow inside rotator with fake panels. */\n\t& .ck.ck-annotation-wrapper {\n\t\tbox-shadow: none;\n\t}\n}\n\n/* Buttons inside a toolbar should be centered when rotator bar is wider.\n * See: https://github.com/ckeditor/ckeditor5-ui/issues/495\n */\n\n.ck .ck-balloon-rotator__content .ck-toolbar {\n\tjustify-content: center;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-balloon-fake-panel-offset-horizontal: 6px;\n\t--ck-balloon-fake-panel-offset-vertical: 6px;\n}\n\n/* Let's use `.ck-balloon-panel` appearance. See: balloonpanel.css. */\n\n.ck .ck-fake-panel div {\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\tmin-height: 15px;\n\n\tbackground: var(--ck-color-panel-background);\n\tborder: 1px solid var(--ck-color-panel-border);\n\tborder-radius: var(--ck-border-radius);\n\n\twidth: 100%;\n\theight: 100%;\n\tposition: absolute;\n}\n\n.ck .ck-fake-panel div:nth-child( 1 ) {\n\tmargin-left: var(--ck-balloon-fake-panel-offset-horizontal);\n\tmargin-top: var(--ck-balloon-fake-panel-offset-vertical);\n\tz-index: 2;\n}\n\n.ck .ck-fake-panel div:nth-child( 2 ) {\n\tmargin-left: calc(var(--ck-balloon-fake-panel-offset-horizontal) * 2);\n\tmargin-top: calc(var(--ck-balloon-fake-panel-offset-vertical) * 2);\n\tz-index: 1;\n}\n\n.ck .ck-fake-panel div:nth-child( 3 ) {\n\tmargin-left: calc(var(--ck-balloon-fake-panel-offset-horizontal) * 3);\n\tmargin-top: calc(var(--ck-balloon-fake-panel-offset-vertical) * 3);\n}\n\n.ck .ck-fake-panel {\n\tposition: absolute;\n\n\t/* Fake panels should be placed under main balloon content. */\n\tz-index: calc(var(--ck-z-panel) - 1);\n}\n\n/* If balloon is positioned above element, we need to move fake panel to the top. */\n\n.ck .ck-balloon-panel_arrow_s + .ck-fake-panel,\n.ck .ck-balloon-panel_arrow_se + .ck-fake-panel,\n.ck .ck-balloon-panel_arrow_sw + .ck-fake-panel {\n\t--ck-balloon-fake-panel-offset-vertical: -6px;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-sticky-panel {\n\t& .ck-sticky-panel__content_sticky {\n\t\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\t\tborder-width: 0 1px 1px;\n\t\tborder-top-left-radius: 0;\n\t\tborder-top-right-radius: 0;\n\t\tz-index: var(--ck-z-panel); /* https://github.com/ckeditor/ckeditor5/issues/315 */\n\t\tposition: fixed;\n\t\ttop: 0;\n\t}\n\n\t& .ck-sticky-panel__content_sticky_bottom-limit {\n\t\ttop: auto;\n\t\tposition: absolute;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content .media.media_resized {\n\tdisplay: block;\n\tbox-sizing: border-box;\n\tmax-width: 100%;\n\n\t/* The wrapper should fill the figure when an explicit width is set. */\n\t& > div[data-oembed-url] {\n\t\twidth: 100%;\n\t}\n}\n\n/* Hide the resize outline and handles in the drag preview. */\n.ck .ck-widget.media:-webkit-drag > .ck-widget__resizer {\n\tdisplay: none;\n}\n\n[dir=\"ltr\"] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon {\n\tmargin-right: var(--ck-spacing-standard);\n}\n\n[dir=\"rtl\"] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon {\n\tmargin-left: var(--ck-spacing-standard);\n}\n\n.ck.ck-dropdown .ck-button.ck-resize-media-embed-button .ck-button__label {\n\twidth: 4em;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-search-field-view-horizontal-spacing: calc(var(--ck-icon-size) + var(--ck-spacing-medium));\n}\n\n.ck.ck-search {\n\t& > .ck-labeled-field-view {\n\t\t& .ck-input {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t& > .ck-labeled-field-view__input-wrapper > .ck-icon {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\ttransform: translateY(-50%);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tleft: var(--ck-spacing-medium);\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tright: var(--ck-spacing-medium);\n\t\t\t}\n\t\t}\n\n\t\t& .ck-search__reset {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\ttransform: translateY(-50%);\n\t\t}\n\n\t\t&.ck-search__query_with-icon {\n\t\t\t--ck-labeled-field-label-default-position-x: var(--ck-search-field-view-horizontal-spacing);\n\n\t\t\t& > .ck-labeled-field-view__input-wrapper > .ck-icon {\n\t\t\t\topacity: .5;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\n\t\t\t& .ck-input {\n\t\t\t\twidth: 100%;\n\n\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\tpadding-left: var(--ck-search-field-view-horizontal-spacing);\n\t\t\t\t}\n\n\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\t&:not(.ck-input-text_empty) {\n\t\t\t\t\t\tpadding-left: var(--ck-search-field-view-horizontal-spacing);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.ck-search__query_with-reset {\n\t\t\t--ck-labeled-field-empty-unfocused-max-width: 100% - 2 * var(--ck-search-field-view-horizontal-spacing);\n\n\t\t\t&.ck-labeled-field-view_empty {\n\t\t\t\t--ck-labeled-field-empty-unfocused-max-width: 100% - var(--ck-search-field-view-horizontal-spacing) - var(--ck-spacing-medium);\n\t\t\t}\n\n\t\t\t& .ck-search__reset {\n\t\t\t\tmin-width: auto;\n\t\t\t\tmin-height: auto;\n\n\t\t\t\tbackground: none;\n\t\t\t\topacity: .5;\n\t\t\t\tpadding: 0;\n\n\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\tright: var(--ck-spacing-medium);\n\t\t\t\t}\n\n\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\tleft: var(--ck-spacing-medium);\n\t\t\t\t}\n\n\t\t\t\t&:hover {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck-input {\n\t\t\t\twidth: 100%;\n\n\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\t&:not(.ck-input-text_empty) {\n\t\t\t\t\t\tpadding-right: var(--ck-search-field-view-horizontal-spacing);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\tpadding-right: var(--ck-search-field-view-horizontal-spacing);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t& > .ck-search__results {\n\t\tmin-width: 100%;\n\n\t\t& > .ck-search__info {\n\t\t\twidth: 100%;\n\t\t\tpadding: var(--ck-spacing-medium) var(--ck-spacing-large);\n\n\t\t\t& * {\n\t\t\t\twhite-space: normal;\n\t\t\t}\n\n\t\t\t& > span:first-child {\n\t\t\t\tfont-weight: bold;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t& > span:last-child {\n\t\t\t\tmargin-top: var(--ck-spacing-medium);\n\t\t\t}\n\n\t\t\t/* Hide the filtered view when nothing was found */\n\t\t\t&:not(.ck-hidden) ~ * {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-highlighted-text mark {\n\tbackground: var(--ck-color-highlight-background);\n\tvertical-align: initial;\n\tfont-weight: inherit;\n\tline-height: inherit;\n\tfont-size: inherit;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-media-form {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\twidth: 400px;\n\n\t& .ck-labeled-field-view {\n\t\tdisplay: inline-block;\n\t\twidth: 100%;\n\t}\n\n\t& .ck-label {\n\t\tdisplay: none;\n\t}\n\n\t& .ck-input {\n\t\twidth: 100%;\n\t}\n\n\t@media screen and (max-width: 600px) {\n\t\tflex-wrap: wrap;\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t& .ck-button {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-table-selected-cell-background: hsla(208, 90%, 80%, .3);\n}\n\n.ck.ck-editor__editable .table table {\n\t& :where(td, th).ck-editor__editable_selected {\n\t\tposition: relative;\n\t\tcaret-color: transparent;\n\t\tbox-shadow: unset;\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/6446 */\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tpointer-events: none;\n\t\t\tbackground-color: var(--ck-table-selected-cell-background);\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t\tbottom: 0;\n\t\t}\n\n\t\t& ::selection,\n\t\t&:focus {\n\t\t\tbackground-color: transparent;\n\t\t}\n\n\t\t/*\n\t\t * To reduce the amount of noise, all widgets in the table selection have no outline and no selection handle.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9491.\n\t\t */\n\t\t& .ck-widget {\n\t\t\toutline: unset;\n\n\t\t\t& > .ck-widget__selection-handle {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-toolbar {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbackground: var(--ck-color-toolbar-background);\n\tpadding: 0 var(--ck-spacing-small);\n\tborder: 1px solid var(--ck-color-toolbar-border);\n\t-webkit-user-select: none;\n\tuser-select: none;\n\n\tdisplay: flex;\n\tflex-flow: row nowrap;\n\talign-items: center;\n\n\t& .ck.ck-toolbar__separator {\n\t\theight: var(--ck-icon-size);\n\t\twidth: 1px;\n\t\tmin-width: 1px;\n\t\tbackground: var(--ck-color-toolbar-border);\n\n\t\t/*\n\t\t * These margins make the separators look better in balloon toolbars (when aligned with the \"tip\").\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/7493.\n\t\t */\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t\tdisplay: inline-block;\n\n\t\t/*\n\t\t * A leading or trailing separator makes no sense (separates from nothing on one side).\n\t\t * For instance, it can happen when toolbar items (also separators) are getting grouped one by one and\n\t\t * moved to another toolbar in the dropdown.\n\t\t */\n\t\t&:first-child,\n\t\t&:last-child {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t& .ck-toolbar__line-break {\n\t\theight: 0;\n\t\tflex-basis: 100%;\n\t}\n\n\t& > .ck-toolbar__items {\n\t\t& > *:not(.ck-toolbar__line-break) {\n\t\t\t/* (https://github.com/ckeditor/ckeditor5/issues/11) Separate toolbar items. */\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\n\t\t/* Don't display a separator after an empty items container, for instance,\n\t\twhen all items were grouped */\n\t\t&:empty + .ck.ck-toolbar__separator {\n\t\t\tdisplay: none;\n\t\t}\n\t\tdisplay: flex;\n\t\tflex-flow: row wrap;\n\t\talign-items: center;\n\t\tflex-grow: 1\n\t}\n\n\t& > .ck-toolbar__items > *:not(.ck-toolbar__line-break),\n\t& > .ck.ck-toolbar__grouped-dropdown {\n\t\t/* Make sure items wrapped to the next line have v-spacing */\n\t\tmargin-top: var(--ck-spacing-small);\n\t\tmargin-bottom: var(--ck-spacing-small);\n\t}\n\n\t&.ck-toolbar_vertical {\n\t\t/* Items in a vertical toolbar span the entire width. */\n\t\tpadding: 0;\n\n\t\t/* Specificity matters here. See https://github.com/ckeditor/ckeditor5/issues/3408. */\n\t\t& > .ck-toolbar__items > .ck {\n\t\t\t/* Items in a vertical toolbar should span the horizontal space. */\n\t\t\twidth: 100%;\n\n\t\t\t/* Items in a vertical toolbar should have no margin. */\n\t\t\tmargin: 0;\n\n\t\t\t/* Items in a vertical toolbar span the entire width so rounded corners are pointless. */\n\t\t\tborder-radius: 0;\n\t\t}\n\t}\n\n\t&.ck-toolbar_compact {\n\t\t/* No spacing around items. */\n\t\tpadding: 0;\n\n\t\t& > .ck-toolbar__items > * {\n\t\t\t/* Compact toolbar items have no spacing between them. */\n\t\t\tmargin: 0;\n\n\t\t\t/* \"Middle\" children should have no rounded corners. */\n\t\t\t&:not(:first-child):not(:last-child) {\n\t\t\t\tborder-radius: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t& > .ck.ck-toolbar__grouped-dropdown {\n\t\t/*\n\t\t * Dropdown button has asymmetric padding to fit the arrow.\n\t\t * This button has no arrow so let's revert that padding back to normal.\n\t\t */\n\t\t& > .ck.ck-button.ck-dropdown__button {\n\t\t\tpadding-left: var(--ck-spacing-tiny);\n\t\t}\n\t\t& > .ck-dropdown__button .ck-dropdown__arrow {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t/* A drop-down containing the nested toolbar with configured items. */\n\t& .ck-toolbar__nested-toolbar-dropdown {\n\t\t/* Prevent empty space in the panel when the dropdown label is visible and long but the toolbar has few items. */\n\t\t& > .ck-dropdown__panel {\n\t\t\tmin-width: auto;\n\t\t}\n\n\t\t& > .ck-button > .ck-button__label {\n\t\t\tmax-width: 7em;\n\t\t\twidth: auto;\n\t\t}\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t.ck-toolbar-container & {\n\t\tborder: 0;\n\t}\n\n\t&.ck-toolbar_grouping > .ck-toolbar__items {\n\t\tflex-wrap: nowrap;\n\t}\n\n\t&.ck-toolbar_vertical > .ck-toolbar__items {\n\t\tflex-direction: column;\n\t}\n\n\t&.ck-toolbar_floating > .ck-toolbar__items {\n\t\tflex-wrap: nowrap;\n\t}\n}\n\n\n/*\n * Styles for RTL toolbars.\n *\n * Note: In some cases (e.g. a decoupled editor), the toolbar has its own \"dir\"\n * because its parent is not controlled by the editor framework.\n */\n\n[dir=\"rtl\"] .ck.ck-toolbar,\n.ck.ck-toolbar[dir=\"rtl\"] {\n\t& > .ck-toolbar__items > .ck {\n\t\tmargin-right: 0;\n\t}\n\n\t&:not(.ck-toolbar_compact) > .ck-toolbar__items > .ck {\n\t\t/* (https://github.com/ckeditor/ckeditor5/issues/11) Separate toolbar items. */\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n\n\t& > .ck-toolbar__items > .ck:last-child {\n\t\tmargin-left: 0;\n\t}\n\n\t&.ck-toolbar_compact > .ck-toolbar__items > .ck {\n\t\t/* No rounded corners on the right side of the first child. */\n\t\t&:first-child {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\n\t\t/* No rounded corners on the left side of the last child. */\n\t\t&:last-child {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\t}\n\n\t/* Separate the the separator form the grouping dropdown when some items are grouped. */\n\t& > .ck.ck-toolbar__separator {\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n\n\t/* Some spacing between the items and the separator before the grouped items dropdown. */\n\t&.ck-toolbar_grouping > .ck-toolbar__items:not(:empty):not(:only-child) {\n\t\tmargin-left: var(--ck-spacing-small);\n\t}\n}\n\n/*\n * Styles for LTR toolbars.\n *\n * Note: In some cases (e.g. a decoupled editor), the toolbar has its own \"dir\"\n * because its parent is not controlled by the editor framework.\n */\n\n[dir=\"ltr\"] .ck.ck-toolbar,\n.ck.ck-toolbar[dir=\"ltr\"] {\n\t& > .ck-toolbar__items > .ck:last-child {\n\t\tmargin-right: 0;\n\t}\n\n\t&.ck-toolbar_compact > .ck-toolbar__items > .ck {\n\t\t/* No rounded corners on the right side of the first child. */\n\t\t&:first-child {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t/* No rounded corners on the left side of the last child. */\n\t\t&:last-child {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\t}\n\n\t/* Separate the the separator form the grouping dropdown when some items are grouped. */\n\t& > .ck.ck-toolbar__separator {\n\t\tmargin-right: var(--ck-spacing-small);\n\t}\n\n\t/* Some spacing between the items and the separator before the grouped items dropdown. */\n\t&.ck-toolbar_grouping > .ck-toolbar__items:not(:empty):not(:only-child) {\n\t\tmargin-right: var(--ck-spacing-small);\n\t}\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-html-object-embed-unfocused-outline-width: 1px;\n}\n\n.ck-widget.html-object-embed {\n\tfont-size: var(--ck-font-size-base);\n\tbackground-color: var(--ck-color-base-foreground);\n\tpadding: var(--ck-spacing-small);\n\t/* Leave space for label */\n\tpadding-top: calc(var(--ck-font-size-tiny) + var(--ck-spacing-large));\n\tmin-width: calc(76px + var(--ck-spacing-standard));\n\n\t&:not(.ck-widget_selected):not(:hover) {\n\t\toutline: var(--ck-html-object-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border);\n\t}\n\n\t&::before {\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tposition: absolute;\n\t\tcontent: attr(data-html-object-embed-label);\n\t\ttop: 0;\n\t\tleft: var(--ck-spacing-standard);\n\t\tbackground: hsl(0deg 0% 60%);\n\t\ttransition: background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\t\tpadding: calc(var(--ck-spacing-tiny) + var(--ck-html-object-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);\n\t\tborder-radius: 0 0 var(--ck-border-radius) var(--ck-border-radius);\n\t\tcolor: var(--ck-color-base-background);\n\t\tfont-size: var(--ck-font-size-tiny);\n\t\tfont-family: var(--ck-font-face);\n\t}\n\n\t/* Make space for label. */\n\t& .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before {\n\t\tmargin-left: 50px;\n\t}\n\n\t& .html-object-embed__content {\n\t\t/* Disable user interaction with embed content */\n\t\tpointer-events: none;\n\t}\n}\n\ndiv.ck-widget.html-object-embed {\n\tmargin: 1em auto;\n}\n\nspan.ck-widget.html-object-embed {\n\tdisplay: inline-block;\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-menu-bar {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: flex-start;\n\tbackground: var(--ck-color-base-background);\n\tpadding: var(--ck-spacing-small);\n\tgap: var(--ck-spacing-small);\n\tborder: 1px solid var(--ck-color-toolbar-border);\n\twidth: 100%;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-menu-bar__menu {\n\t/*\n\t * All menu buttons.\n\t */\n\t& > .ck-menu-bar__menu__button {\n\t\twidth: 100%;\n\n\t\t& > .ck-button__label {\n\t\t\tflex-grow: 1;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t}\n\n\t\t&.ck-disabled > .ck-button__label {\n\t\t\topacity: var(--ck-disabled-opacity);\n\t\t}\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\tpadding-left: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t&:not(.ck-button_with-text) {\n\t\t\t\tpadding-right: var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * Top-level menu buttons only.\n\t */\n\t&.ck-menu-bar__menu_top-level > .ck-menu-bar__menu__button {\n\t\tpadding: var(--ck-spacing-small) var(--ck-spacing-medium);\n\t\tmin-height: unset;\n\n\t\t& .ck-button__label {\n\t\t\twidth: unset;\n\t\t\tline-height: unset;\n\n\t\t\t/*\n\t\t\t * Top-level buttons don't use ellipsis and overflow: hidden clips descenders.\n\t\t\t * See https://github.com/ckeditor/ckeditor5/issues/17422.\n\t\t\t */\n\t\t\toverflow: visible;\n\t\t}\n\n\t\t&.ck-on {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t& .ck-icon {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t& > .ck-menu-bar__menu__button > .ck-menu-bar__menu__button__arrow {\n\t\tpointer-events: none;\n\t\tz-index: var(--ck-z-default);\n\t}\n\n\t/*\n\t * Sub-menu buttons.\n\t */\n\t&:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button {\n\t\tborder-radius: 0;\n\n\t\t& > .ck-menu-bar__menu__button__arrow {\n\t\t\twidth: var(--ck-dropdown-arrow-size);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\ttransform: rotate(-90deg);\n\n\t\t\t\t/* A space to accommodate the triangle. */\n\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\n\t\t\t\t/* Nudge the arrow gently to the right because its center of gravity is to the left */\n\t\t\t\tmargin-right: calc(-1 * var(--ck-spacing-small));\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\ttransform: rotate(90deg);\n\n\t\t\t\tleft: var(--ck-spacing-standard);\n\n\t\t\t\t/* A space to accommodate the triangle. */\n\t\t\t\tmargin-right: var(--ck-spacing-small);\n\n\t\t\t\t/* Nudge the arrow gently to the left because its center of gravity is to the right (after rotation). */\n\t\t\t\tmargin-left: calc(-1 * var(--ck-spacing-small));\n\t\t\t}\n\t\t}\n\n\t\t&.ck-disabled > .ck-menu-bar__menu__button__arrow {\n\t\t\topacity: var(--ck-disabled-opacity);\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-character-grid-tile-size: 24px;\n}\n\n.ck.ck-character-grid {\n\toverflow-y: auto;\n\toverflow-x: hidden;\n\n\t& .ck-character-grid__tiles {\n\t\tgrid-template-columns: repeat(auto-fill, minmax(var(--ck-character-grid-tile-size), 1fr));\n\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-large);\n\t\tgrid-gap: var(--ck-spacing-standard);\n\t\tdisplay: grid;\n\t}\n\n\t& .ck-character-grid__tile {\n\t\twidth: var(--ck-character-grid-tile-size);\n\t\theight: var(--ck-character-grid-tile-size);\n\t\tmin-width: var(--ck-character-grid-tile-size);\n\t\tmin-height: var(--ck-character-grid-tile-size);\n\t\tfont-size: 1.5em;\n\t\tpadding: 0;\n\t\ttransition: .2s ease box-shadow;\n\t\tborder: 0;\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\ttransition: none;\n\t\t}\n\n\t\t&:focus:not( .ck-disabled ),\n\t\t&:hover:not( .ck-disabled ) {\n\t\t\t/* Disable the default .ck-button's border ring. */\n\t\t\tborder: 0;\n\t\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);\n\t\t}\n\n\t\t/* Make sure the glyph is rendered in the center of the button */\n\t\t& .ck-button__label {\n\t\t\tline-height: var(--ck-character-grid-tile-size);\n\t\t\twidth: 100%;\n\t\t\ttext-align: center;\n\t\t}\n\t}\n\tmax-width: 100%\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-labeled-input .ck-labeled-input__status {\n\tfont-size: var(--ck-font-size-small);\n\tmargin-top: var(--ck-spacing-small);\n\n\t/* Let the info wrap to the next line to avoid stretching the layout horizontally.\n\tThe status could be very long. */\n\twhite-space: normal;\n}\n\n.ck.ck-labeled-input .ck-labeled-input__status_error {\n\tcolor: var(--ck-color-base-error);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-spacing-unit: \t\t\t\t\t\t0.6em;\n\t--ck-spacing-extra-large:\t\t\t\tcalc(var(--ck-spacing-unit) * 2);\n\t--ck-spacing-large: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 1.5);\n\t--ck-spacing-standard: \t\t\t\t\tvar(--ck-spacing-unit);\n\t--ck-spacing-medium: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.8);\n\t--ck-spacing-medium-small:\t\t\t\tcalc(var(--ck-spacing-unit) * 0.667);\n\t--ck-spacing-small: \t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.5);\n\t--ck-spacing-tiny: \t\t\t\t\t\tcalc(var(--ck-spacing-unit) * 0.3);\n\t--ck-spacing-extra-tiny: \t\t\t\tcalc(var(--ck-spacing-unit) * 0.16);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-menu-bar__menu {\n\t/*\n\t * List item buttons.\n\t */\n\t& .ck-button.ck-menu-bar__menu__item__button {\n\t\tborder-radius: 0;\n\n\t\t& > .ck-spinner-container,\n\t\t& > .ck-spinner-container .ck-spinner {\n\t\t\t/* These styles correspond to .ck-icon so that the spinner seamlessly replaces the icon. */\n\t\t\t--ck-toolbar-spinner-size: 20px;\n\t\t}\n\n\t\t& > .ck-spinner-container {\n\t\t\t/* This ensures margins corresponding to the .ck-icon. */\n\t\t\tfont-size: var(--ck-icon-font-size);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tmargin-right: var(--ck-spacing-medium);\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tmargin-left: var(--ck-spacing-medium);\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-emoji-grid-tile-size: 27px;\n}\n\n.ck.ck-emoji {\n\t& .ck.ck-emoji__tiles {\n\t\tmax-width: 100%;\n\t\tmax-height: min(265px, 40vh);\n\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t\tborder-top: 1px solid var(--ck-color-base-border);\n\n\t\t& .ck-emoji__grid {\n\t\t\tdisplay: grid;\n\t\t\tgrid-template-columns: repeat(auto-fill, minmax(var(--ck-emoji-grid-tile-size), 1fr));\n\t\t\tmargin: var(--ck-spacing-standard) var(--ck-spacing-large);\n\t\t\tgrid-gap: var(--ck-spacing-small);\n\t\t}\n\n\t\t& .ck-emoji__tile {\n\t\t\twidth: var(--ck-emoji-grid-tile-size);\n\t\t\theight: var(--ck-emoji-grid-tile-size);\n\t\t\tmin-width: var(--ck-emoji-grid-tile-size);\n\t\t\tmin-height: var(--ck-emoji-grid-tile-size);\n\t\t\tfont-size: 1.5em;\n\t\t\tpadding: 0;\n\t\t\ttransition: .2s ease box-shadow;\n\t\t\tborder: 0;\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\ttransition: none;\n\t\t\t}\n\n\t\t\t&:focus:not(.ck-disabled),\n\t\t\t&:hover:not(.ck-disabled) {\n\t\t\t\t/* Disable the default .ck-button's border ring. */\n\t\t\t\tborder: 0;\n\t\t\t\tbox-shadow: inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);\n\t\t\t}\n\n\t\t\t/* Make sure the glyph is rendered in the center of the button */\n\t\t\t& .ck-button__label {\n\t\t\t\tline-height: var(--ck-emoji-grid-tile-size);\n\t\t\t\twidth: 100%;\n\t\t\t\ttext-align: center;\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content blockquote {\n\t/* See https://github.com/ckeditor/ckeditor5-block-quote/issues/12 */\n\toverflow: hidden;\n\n\t/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */\n\tpadding-right: 1.5em;\n\tpadding-left: 1.5em;\n\n\tmargin-left: 0;\n\tmargin-right: 0;\n\tfont-style: italic;\n\tborder-left: solid 5px hsl(0, 0%, 80%);\n}\n\n.ck-content[dir=\"rtl\"] blockquote {\n\tborder-left: 0;\n\tborder-right: solid 5px hsl(0, 0%, 80%);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-bookmark-icon-hover-fill-color: var(--ck-color-widget-hover-border);\n\t--ck-bookmark-icon-selected-fill-color: var(--ck-color-focus-border);\n\t--ck-bookmark-icon-animation-duration: var(--ck-widget-handler-animation-duration);\n\t--ck-bookmark-icon-animation-curve: var(--ck-widget-handler-animation-curve);\n}\n\n.ck .ck-bookmark {\n\t&.ck-widget {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\n\t\t& .ck-bookmark__icon .ck-icon__fill {\n\t\t\ttransition: fill var(--ck-bookmark-icon-animation-duration) var(--ck-bookmark-icon-animation-curve);\n\t\t}\n\n\t\t&:hover {\n\t\t\t& .ck-bookmark__icon .ck-icon__fill {\n\t\t\t\tfill: var(--ck-bookmark-icon-hover-fill-color);\n\t\t\t}\n\t\t}\n\n\t\t&.ck-widget_selected {\n\t\t\t.ck-bookmark__icon .ck-icon__fill {\n\t\t\t\tfill: var(--ck-bookmark-icon-selected-fill-color);\n\t\t\t}\n\t\t}\n\n\t\t&.ck-widget_selected,\n\t\t&.ck-widget_selected:hover {\n\t\t\toutline: none;\n\t\t}\n\n\t\t& .ck-bookmark__icon {\n\t\t\tposition: relative;\n\t\t\tdisplay: block;\n\t\t\t/* To make it align with text baseline. */\n\t\t\ttop: -0.1em;\n\n\t\t\t& .ck-icon {\n\t\t\t\theight: 1.2em;\n\t\t\t\twidth: auto;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * Classes used by the \"fake visual selection\" displayed in the content when an input\n * in the bookmark UI has focus (the browser does not render the native selection in this state).\n */\n\n.ck .ck-fake-bookmark-selection {\n\tbackground: var(--ck-color-link-fake-selection);\n}\n\n/* A collapsed fake visual selection. */\n\n.ck .ck-fake-bookmark-selection_collapsed {\n\theight: 100%;\n\tborder-right: 1px solid var(--ck-color-base-text);\n\tmargin-right: -1px;\n\toutline: solid 1px hsla(0, 0%, 100%, .5);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-form__row {\n\t/* Ignore labels that work as fieldset legends */\n\t& > *:not(.ck-label) {\n\t\t& + * {\n\t\t\tmargin-inline-start: var(--ck-spacing-large);\n\t\t}\n\t}\n\n\t& > .ck-label {\n\t\twidth: 100%;\n\t\tmin-width: 100%;\n\t}\n\n\t&.ck-table-form__action-row {\n\t\tmargin-top: var(--ck-spacing-large);\n\t\tjustify-content: flex-end;\n\n\t\t& .ck-button-save,\n\t\t& .ck-button-cancel {\n\t\t\tjustify-content: center;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-bookmark-form-width: 340px;\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-bookmark-form-width: 300px;\n\t}\n}\n\n.ck.ck-bookmark-form {\n\twidth: var(--ck-bookmark-form-width);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* Based on default CKBox theme colors */\n\t--ck-image-processing-highlight-color: hsl(220, 10%, 98%);\n\t--ck-image-processing-background-color: hsl(220, 10%, 90%);\n}\n\n.ck.ck-editor__editable {\n\t& .image {\n\t\t&.image-processing {\n\t\t\tposition: relative;\n\n\t\t\t&:before {\n\t\t\t\tcontent: '';\n\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\tz-index: 1;\n\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 100%;\n\n\t\t\t\tbackground: linear-gradient(\n\t\t\t\t\t90deg,\n\t\t\t\t\tvar(--ck-image-processing-background-color),\n\t\t\t\t\tvar(--ck-image-processing-highlight-color),\n\t\t\t\t\tvar(--ck-image-processing-background-color)\n\t\t\t\t);\n\t\t\t\tbackground-size: 200% 100%;\n\n\t\t\t\tanimation: ck-image-processing-animation 2s linear infinite;\n\t\t\t}\n\n\t\t\t& img {\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@keyframes ck-image-processing-animation {\n\t0% {\n\t\tbackground-position: 200% 0;\n\t}\n\t100% {\n\t\tbackground-position: -200% 0;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-clipboard-drop-target-dot-width: 12px;\n\t--ck-clipboard-drop-target-dot-height: 8px;\n\t--ck-clipboard-drop-target-color: var(--ck-color-focus-border);\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\t& .ck.ck-clipboard-drop-target-position {\n\t\t& span {\n\t\t\tbottom: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\t\t\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\t\t\tbackground: var(--ck-clipboard-drop-target-color);\n\t\t\tmargin-left: -1px;\n\t\t\tposition: absolute;\n\n\t\t\t/* The triangle above the marker */\n\t\t\t&::after {\n\t\t\t\tcontent: '';\n\t\t\t\twidth: 0;\n\t\t\t\theight: 0;\n\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-height));\n\n\t\t\t\ttransform: translateX(-50%);\n\t\t\t\tborder-color: var(--ck-clipboard-drop-target-color) transparent transparent transparent;\n\t\t\t\tborder-width: calc(var(--ck-clipboard-drop-target-dot-height)) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width));\n\t\t\t\tborder-style: solid;\n\t\t\t}\n\t\t\twidth: 0\n\t\t}\n\t\tdisplay: inline;\n\t\tposition: relative;\n\t\tpointer-events: none\n\t}\n\n\t/*\n\t * Styles of the widget that it a drop target.\n\t */\n\t& .ck-widget.ck-clipboard-drop-target-range {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color) !important;\n\t}\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n\t& .ck-widget:-webkit-drag {\n\t\tzoom: 0.6;\n\t\toutline: none !important;\n\t\t& > .ck-widget__selection-handle {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t& > .ck-widget__type-around {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\t/*\n\t * Vertical drop target (in text).\n\t */\n\n\t/*\n\t * Styles of the widget being dragged (its preview).\n\t */\n}\n\n.ck.ck-clipboard-drop-target-line {\n\theight: 0;\n\tborder: 1px solid var(--ck-clipboard-drop-target-color);\n\tbackground: var(--ck-clipboard-drop-target-color);\n\tmargin-top: -1px;\n\tposition: absolute;\n\tz-index: var(--ck-z-default);\n\n\t&::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\ttop: calc(-.5 * var(--ck-clipboard-drop-target-dot-width));\n\t\twidth: 0;\n\t\theight: 0;\n\t\tborder-style: solid;\n\t}\n\n\tpointer-events: none\n}\n\n[dir=\"ltr\"] .ck.ck-clipboard-drop-target-line::before {\n\tleft: -1px;\n\tborder-width: calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height);\n\tborder-color: transparent transparent transparent var(--ck-clipboard-drop-target-color);\n}\n\n[dir=\"rtl\"] .ck.ck-clipboard-drop-target-line::before {\n\tright: -1px;\n\tborder-width: calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0;\n\tborder-color: transparent var(--ck-clipboard-drop-target-color) transparent transparent;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-code-block-label-background: hsl(0, 0%, 46%);\n}\n\n.ck.ck-editor__editable pre[data-language]::after {\n\tcontent: attr(data-language);\n\tposition: absolute;\n\ttop: -1px;\n\tright: 10px;\n\tbackground: var(--ck-color-code-block-label-background);\n\n\tfont-size: 10px;\n\tfont-family: var(--ck-font-face);\n\tline-height: 16px;\n\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-medium);\n\tcolor: hsl(0, 0%, 100%);\n\twhite-space: nowrap;\n}\n\n.ck.ck-code-block-dropdown .ck-dropdown__panel {\n\t/* There could be dozens of languages available. Use scroll to prevent a 10e6px dropdown. */\n\tmax-height: 250px;\n\toverflow-y: auto;\n\toverflow-x: hidden;\n}\n\n.ck-content pre {\n\tpadding: 1em;\n\tcolor: hsl(0, 0%, 20.8%);\n\tbackground: hsla(0, 0%, 78%, 0.3);\n\tborder: 1px solid hsl(0, 0%, 77%);\n\tborder-radius: 2px;\n\n\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\tmargin: 0.9em 0;\n\n\t/* Code block are language direction–agnostic. */\n\ttext-align: left;\n\tdirection: ltr;\n\n\ttab-size: 4;\n\twhite-space: pre-wrap;\n\n\t/* Don't inherit the style, e.g. when in a block quote. */\n\tfont-style: normal;\n\n\t/* Don't let the code be squashed e.g. when in a table cell. */\n\tmin-width: 200px;\n\n\t& code {\n\t\tbackground: unset;\n\t\tpadding: 0;\n\t\tborder-radius: 0;\n\t}\n}\n\n.ck.ck-editor__editable pre {\n\tposition: relative;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif;\n\t--ck-content-font-size: medium;\n\t/* See https://github.com/ckeditor/ckeditor5-commercial/commit/b167b86bf4a669758ff401e4b9a6c94413d76196 */\n\t/* eslint-disable-next-line ckeditor5-rules/no-disallowed-color-formats */\n\t--ck-content-font-color: #000;\n\t--ck-content-line-height: 1.5;\n\t--ck-content-word-break: normal;\n\t--ck-content-overflow-wrap: break-word;\n}\n\n.ck-content {\n\tfont-family: var(--ck-content-font-family);\n\tfont-size: var(--ck-content-font-size);\n\tcolor: var(--ck-content-font-color);\n\tline-height: var(--ck-content-line-height);\n\tword-break: var(--ck-content-word-break);\n\toverflow-wrap: var(--ck-content-overflow-wrap);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* Note: Use ck-editor__main to make sure these styles don't apply to other editor types */\n\n.ck.ck-editor__main > .ck-editor__editable {\n\t/* https://github.com/ckeditor/ckeditor5/issues/3384 */\n\tbackground: var(--ck-color-base-background);\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 0;\n\n\t&:not(.ck-focused) {\n\t\tborder-color: var(--ck-color-base-border);\n\t}\n}\n\n.ck.ck-editor {\n\t/* All the elements within `.ck-editor` are positioned relatively to it.\n\t If any element needs to be positioned with respect to the , etc.,\n\t it must land outside of the `.ck-editor` in DOM. */\n\tposition: relative;\n\n\t& .ck-editor__top .ck-sticky-panel .ck-toolbar {\n\t\t/* https://github.com/ckeditor/ckeditor5-editor-classic/issues/62 */\n\t\tz-index: var(--ck-z-panel);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-menu-bar {\n\tborder: none;\n\tborder-bottom: 1px solid var(--ck-color-toolbar-border);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-emoji {\n\twidth: 320px;\n}\n\n.ck .ck.ck-emoji__search {\n\tdisplay: flex;\n\tpadding: var(--ck-spacing-large);\n\tpadding-bottom: var(--ck-spacing-medium);\n\tjustify-content: space-between;\n\talign-items: center;\n\n\t& > .ck.ck-search {\n\t\tflex: 1;\n\t}\n}\n\n/*\n * Classes used by the \"fake visual selection\" displayed in the content when an input\n * in the emoji picker UI has focus (the browser does not render the native selection in this state).\n */\n.ck .ck-fake-emoji-selection {\n\tbackground: var(--ck-color-link-fake-selection);\n}\n\n/* A collapsed fake visual selection. */\n.ck .ck-fake-emoji-selection_collapsed {\n\theight: 100%;\n\tborder-right: 1px solid var(--ck-color-base-text);\n\tmargin-right: -1px;\n\toutline: solid 1px hsla(0, 0%, 100%, .5);\n}\n\ndiv.ck.ck-balloon-panel.ck-emoji-picker-balloon {\n\tz-index: calc( var( --ck-z-dialog ) + 1 );\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-emoji__categories-list {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\tmargin: 0 var(--ck-spacing-large);\n\n\t> .ck.ck-button.ck-button_with-text {\n\t\tborder-width: 0;\n\t\tborder-bottom-width: 2px;\n\t\tborder-bottom-style: solid;\n\t\tborder-bottom-color: transparent;\n\t\tpadding: 0;\n\t\tfont-size: var(--ck-font-size-big);\n\t\tmin-width: var(--ck-font-size-big);\n\t\tmin-height: var(--ck-font-size-big);\n\n\t\t&.ck-emoji__category-item.ck-on {\n\t\t\tborder-bottom-color: var(--ck-color-base-active);\n\t\t}\n\n\t\t> span {\n\t\t\tmargin: auto;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-image-upload-icon: hsl(0, 0%, 100%);\n\t--ck-color-image-upload-icon-background: hsl(120, 100%, 27%);\n\n\t/* Match the icon size with the linked image indicator brought by the link image feature. */\n\t--ck-image-upload-icon-size: 20;\n\t--ck-image-upload-icon-width: 2px;\n\t--ck-image-upload-icon-is-visible: clamp(0px, 100% - 50px, 1px);\n}\n\n.ck-image-upload-complete-icon {\n\topacity: 0;\n\tbackground: var(--ck-color-image-upload-icon-background);\n\tanimation-name: ck-upload-complete-icon-show, ck-upload-complete-icon-hide;\n\tanimation-fill-mode: forwards, forwards;\n\tanimation-duration: 500ms, 500ms;\n\n\t/* To make animation scalable. */\n\tfont-size: calc(1px * var(--ck-image-upload-icon-size));\n\n\t/* Hide completed upload icon after 3 seconds. */\n\tanimation-delay: 0ms, 3000ms;\n\n\t/*\n\t * Use CSS math to simulate container queries.\n\t * https://css-tricks.com/the-raven-technique-one-step-closer-to-container-queries/#what-about-showing-and-hiding-things\n\t */\n\toverflow: hidden;\n\twidth: calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));\n\theight: calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));\n\tdisplay: block;\n\tposition: absolute;\n\n\t/*\n\t * Smaller images should have the icon closer to the border.\n\t * Match the icon position with the linked image indicator brought by the link image feature.\n\t */\n\ttop: min(var(--ck-spacing-medium), 6%);\n\tright: min(var(--ck-spacing-medium), 6%);\n\tborder-radius: 50%;\n\n\t/* This is check icon element made from border-width mixed with animations. */\n\t&::after {\n\t\t/* Because of border transformation we need to \"hard code\" left position. */\n\t\tleft: 25%;\n\n\t\ttop: 50%;\n\t\topacity: 0;\n\t\theight: 0;\n\t\twidth: 0;\n\n\t\ttransform: scaleX(-1) rotate(135deg);\n\t\ttransform-origin: left top;\n\t\tborder-top: var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);\n\t\tborder-right: var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);\n\n\t\tanimation-name: ck-upload-complete-icon-check;\n\t\tanimation-duration: 500ms;\n\t\tanimation-delay: 500ms;\n\t\tanimation-fill-mode: forwards;\n\n\t\t/* https://github.com/ckeditor/ckeditor5/issues/1095. While reset is not providing proper box-sizing for pseudoelements, we need to handle it. */\n\t\tbox-sizing: border-box;\n\t\tcontent: \"\";\n\t\tposition: absolute;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\tanimation-duration: 0ms;\n\n\t\t&::after {\n\t\t\tanimation: none;\n\t\t\topacity: 1;\n\t\t\twidth: 0.3em;\n\t\t\theight: 0.45em;\n\t\t}\n\t}\n\tz-index: 1\n}\n\n@keyframes ck-upload-complete-icon-show {\n\tfrom {\n\t\topacity: 0;\n\t}\n\n\tto {\n\t\topacity: 1;\n\t}\n}\n\n@keyframes ck-upload-complete-icon-hide {\n\tfrom {\n\t\topacity: 1;\n\t}\n\n\tto {\n\t\topacity: 0;\n\t}\n}\n\n@keyframes ck-upload-complete-icon-check {\n\t0% {\n\t\topacity: 1;\n\t\twidth: 0;\n\t\theight: 0;\n\t}\n\t33% {\n\t\twidth: 0.3em;\n\t\theight: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t\twidth: 0.3em;\n\t\theight: 0.45em;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-form.ck-emoji-picker-form {\n\tpadding-bottom: 0;\n\n\t/*\n\t * `.ck-form` overrides styling of all dropdowns by adding border around them.\n\t * The border is not needed in the emoji picker form so try to remove it keeping\n\t * specificity high enough to override the form styling.\n\t */\n\t& .ck.ck-dropdown .ck-dropdown__button:not(:focus) {\n\t\tborder-color: transparent;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-emoji__skin-tone {\n\tmargin-left: var(--ck-spacing-standard);\n\n\t> .ck.ck-dropdown {\n\n\t\t.ck.ck-list__item {\n\t\t\tmin-width: 1em;\n\t\t}\n\n\t\t.ck-button.ck-dropdown__button {\n\t\t\t.ck-button__label {\n\t\t\t\twidth: initial;\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-placeholder, .ck .ck-placeholder {\n\tposition: relative;\n\n\t@media (forced-colors: active) {\n\t\t/*\n\t\t * This is needed for Edge on Windows to use the right color for the placeholder content (::before).\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t */\n\t\tforced-color-adjust: preserve-parent-color;\n\t}\n\n\t&::before {\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tcontent: attr(data-placeholder);\n\n\t\tcursor: text;\n\n\t\t/* See https://github.com/ckeditor/ckeditor5/issues/469. */\n\t\tpointer-events: none;\n\n\t\t/*\n\t\t * Inherit the content styles padding of the placeholder host.\n\t\t * This ensures the placeholder stays at the padding just like the native caret does, and not at the edge of editable.\n\t\t */\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * The padding should not expand element width when some other style set width to 100%.\n\t\t */\n\t\tbox-sizing: border-box;\n\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\n\t\t@media (forced-colors: none) {\n\t\t\tcolor: var(--ck-color-engine-placeholder-text);\n\t\t}\n\n\t\t@media (forced-colors: active) {\n\t\t\t/*\n\t\t\t * In the high contrast mode there is no telling between regular and placeholder text. Using\n\t\t\t * italic text to address that issue. See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t\t */\n\t\t\tfont-style: italic;\n\n\t\t\t/*\n\t\t\t * Without this margin, the caret will not show up and blink when the user puts the selection\n\t\t\t * in the placeholder (Edge on Windows). See https://github.com/ckeditor/ckeditor5/issues/14907.\n\t\t\t */\n\t\t\tmargin-left: 1px;\n\t\t}\n\t}\n}\n\n/* See https://github.com/ckeditor/ckeditor5/issues/1987. */\n.ck.ck-read-only .ck-placeholder {\n\t&::before {\n\t\tdisplay: none;\n\t}\n}\n/*\n * Rules for the `ck-placeholder` are loaded before the rules for `ck-reset_all` in the base CKEditor 5 DLL build.\n * This fix overwrites the incorrectly set `position: static` from `ck-reset_all`.\n * See https://github.com/ckeditor/ckeditor5/issues/11418.\n */\n.ck.ck-reset_all .ck-placeholder {\n\tposition: relative;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* Elements marked by the Renderer as hidden should be invisible in the editor. */\n.ck.ck-editor__editable span[data-ck-unsafe-element] {\n\tdisplay: none;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-find-result {\n\tbackground: var(--ck-color-highlight-background);\n\tcolor: var(--ck-color-text);\n}\n\n.ck-find-result_selected {\n\tbackground: hsl(29, 100%, 60%);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-find-and-replace-form {\n\twidth: 400px;\n\tmax-width: 100%;\n\n\t/*\n\t * The
    needs tabindex=\"-1\" for proper Esc handling after being clicked\n\t * but the side effect is that this creates a nasty focus outline in some browsers.\n\t */\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t/* Generic styles for the form inputs and actions. */\n\t& .ck-find-and-replace-form__inputs,\n\t& .ck-find-and-replace-form__actions {\n\t\tdisplay: flex;\n\t\tflex: 1 1 auto;\n\t\tflex-direction: row;\n\t\tflex-wrap: wrap;\n\t\talign-items: center;\n\t\talign-content: stretch;\n\n\t\tpadding: var(--ck-spacing-large);\n\t\tmargin: 0;\n\n\t\t& > .ck-button {\n\t\t\tflex: 0 0 auto;\n\t\t}\n\n\t\t[dir=\"ltr\"] & {\n\t\t\t& > * + * {\n\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\t& > * + * {\n\t\t\t\tmargin-right: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\n\t\t& .ck-labeled-field-view {\n\t\t\tflex: 1 1 auto;\n\n\t\t\t& .ck-input {\n\t\t\t\twidth: 100%;\n\t\t\t\tmin-width: 50px;\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/* Styles specific for inputs area. */\n\t& .ck-find-and-replace-form__inputs {\n\t\t/* To display all controls in line when there's an error under the input */\n\t\talign-items: flex-start;\n\n\t\t& > .ck-button-prev > .ck-icon {\n\t\t\ttransform: rotate(90deg);\n\t\t}\n\n\t\t& > .ck-button-next > .ck-icon {\n\t\t\ttransform: rotate(-90deg);\n\t\t}\n\n\t\t& .ck-results-counter {\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\ttransform: translateY(-50%);\n\n\t\t\tcolor: var(--ck-color-base-border);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tright: var(--ck-spacing-standard);\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tleft: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\n\t\t& > .ck-labeled-field-replace {\n\t\t\tflex: 0 0 100%;\n\t\t\tpadding-top: var(--ck-spacing-standard);\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tmargin-right: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Styles specific for actions area. */\n\t& .ck-find-and-replace-form__actions {\n\t\tflex-wrap: wrap;\n\t\tjustify-content: flex-end;\n\t\tmargin-top: calc( -1 * var(--ck-spacing-large) );\n\n\t\t& > .ck-button-find {\n\t\t\tfont-weight: bold;\n\n\t\t\t/* Beef the find button up a little. It's the main action button in the form */\n\t\t\t& .ck-button__label {\n\t\t\t\tpadding-left: var(--ck-spacing-large);\n\t\t\t\tpadding-right: var(--ck-spacing-large);\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck-switchbutton {\n\t\twidth: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tflex-wrap: nowrap;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t}\n}\n\n@media screen and (max-width: 600px) {\n\t.ck.ck-find-and-replace-form {\n\t\twidth: 300px;\n\n\t\t/* Don't let the form overflow from the dialog (https://github.com/ckeditor/ckeditor5-commercial/issues/5913) */\n\t\tmax-width: 100%;\n\n\t\t/* Styles specific for inputs area. */\n\t\t&.ck-find-and-replace-form__input {\n\t\t\tflex-wrap: wrap;\n\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\tflex: 1 0 auto;\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin-bottom: var(--ck-spacing-standard);\n\t\t\t}\n\n\t\t\t& > .ck-button {\n\t\t\t\ttext-align: center;\n\n\t\t\t\t&:first-of-type {\n\t\t\t\t\tflex: 1 1 auto;\n\n\t\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t& .ck-button__label {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Styles specific for actions area. */\n\t\t&.ck-find-and-replace-form__actions > :not(.ck-labeled-field-view) {\n\t\t\tflex-wrap: wrap;\n\t\t\tflex: 1 1 auto;\n\n\t\t\t& > .ck-button {\n\t\t\t\ttext-align: center;\n\n\t\t\t\t&:first-of-type {\n\t\t\t\t\tflex: 1 1 auto;\n\n\t\t\t\t\t[dir=\"ltr\"] & {\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t[dir=\"rtl\"] & {\n\t\t\t\t\t\tmargin-right: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t& .ck-button__label {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* The values should be synchronized with the \"FONT_SIZE_PRESET_UNITS\" object in the \"/src/fontsize/utils.js\" file. */\n\n:root {\n\t--ck-content-font-size-tiny: 0.7em;\n\t--ck-content-font-size-small: 0.85em;\n\t--ck-content-font-size-big: 1.4em;\n\t--ck-content-font-size-huge: 1.8em;\n}\n\n/* Styles should be prefixed with the `.ck-content` class.\nSee https://github.com/ckeditor/ckeditor5/issues/6636 */\n.ck-content {\n\t& .text-tiny {\n\t\tfont-size: var(--ck-content-font-size-tiny);\n\t}\n\n\t& .text-small {\n\t\tfont-size: var(--ck-content-font-size-small);\n\t}\n\n\t& .text-big {\n\t\tfont-size: var(--ck-content-font-size-big);\n\t}\n\n\t& .text-huge {\n\t\tfont-size: var(--ck-content-font-size-huge);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-dropdown > .ck-dropdown__panel > .ck-list {\n\t/* Disabled radius of top-left border to be consistent with .dropdown__button\n\thttps://github.com/ckeditor/ckeditor5/issues/816 */\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tborder-top-left-radius: 0;\n\n\t/* Make sure the button belonging to the first/last child of the list goes well with the\n\tborder radius of the entire panel. */\n\t& .ck-list__item {\n\t\t&:first-child > .ck-button {\n\t\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t&:last-child > .ck-button {\n\t\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-top-right-radius: 0;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-heading_heading1 .ck-button__label {\n\tfont-size: 20px;\n}\n\n.ck.ck-heading_heading2 .ck-button__label {\n\tfont-size: 17px;\n}\n\n.ck.ck-heading_heading3 .ck-button__label {\n\tfont-size: 14px;\n}\n\n.ck[class*=\"ck-heading_heading\"] {\n\tfont-weight: bold;\n}\n\n.ck.ck-dropdown.ck-heading-dropdown {\n\t& .ck-dropdown__button .ck-button__label {\n\t\twidth: 8em;\n\t}\n\n\t& .ck-dropdown__panel .ck-list__item {\n\t\tmin-width: 18em;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-color-mention-background: hsla(341, 100%, 30%, 0.1);\n\t--ck-content-color-mention-text: hsl(341, 100%, 30%);\n}\n\n.ck-content .mention {\n\tbackground: var(--ck-content-color-mention-background);\n\tcolor: var(--ck-content-color-mention-text);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-table-layout-widget-type-around-button-size: 16px;\n\t--ck-table-layout-widget-type-around-icon-width: 10px;\n\t--ck-table-layout-widget-type-around-icon-height: 8px;\n\t--ck-table-layout-widget-handler-icon-size: 10px;\n\t--ck-table-layout-default-border-color: hsl(0, 0%, 83%);\n\n}\n\n.ck-content {\n\t& table.table.layout-table,\n\t& figure.table.layout-table {\n\t\t/* Do not reserve space above and below the layout table. */\n\t\tmargin-top: 0;\n\t\tmargin-bottom: 0;\n\t}\n\n\t& table.table.layout-table {\n\t\tborder-spacing: 0;\n\t}\n\n\t& figure.table.layout-table > table {\n\t\tborder-spacing: 0;\n\t}\n}\n\n.ck-editor__editable {\n\t& .table.layout-table {\n\t\t& > table {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\n\t\t\t/* Resetting `border-collapse` property to the user agent styles. */\n\t\t\tborder-collapse: revert;\n\n\t\t\t/* The default table layout style in the editing view when the border is unset. */\n\t\t\t&:not(\n\t\t\t\t[style*=\"border:\"],\n\t\t\t\t[style*=\"border-top\"],\n\t\t\t\t[style*=\"border-bottom\"],\n\t\t\t\t[style*=\"border-left\"],\n\t\t\t\t[style*=\"border-right\"],\n\t\t\t\t[style*=\"border-width\"],\n\t\t\t\t[style*=\"border-style\"],\n\t\t\t\t[style*=\"border-color\"]\n\t\t\t) {\n\t\t\t\tborder-color: transparent;\n\t\t\t\tborder-width: 0;\n\t\t\t\toutline: none;\n\t\t\t}\n\t\t}\n\n\t\t& > table > tbody > tr > td {\n\t\t\tbox-shadow: revert;\n\t\t\tpadding: revert;\n\t\t\tmin-width: 2em;\n\t\t\t/* To make the caret visible. */\n\t\t\ttext-indent: 1px;\n\n\t\t\t/* The default table layout cell style in the editing view when the border is unset. */\n\t\t\tborder-color: var(--ck-table-layout-default-border-color);\n\t\t\tborder-style: dashed;\n\n\t\t\t/* Resets the `min-width` style attribute that was added by the content table style. */\n\t\t\t&[style^=\"width:\"],\n\t\t\t&[style*=\" width:\"],\n\t\t\t&[style*=\";width:\"] {\n\t\t\t\tmin-width: auto;\n\t\t\t}\n\n\t\t\t/* Remove the default background color from the focused table cell. */\n\t\t\t&:focus {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n\t\t\t/* The default table layout cell style in the editing view when the border is unset.\n\t\t\tBut it need to be more strict cause of style attributes like `border-image`, `border-radius`, etc. */\n\t\t\t&:not(\n\t\t\t\t[style*=\"border:\"],\n\t\t\t\t[style*=\"border-top\"],\n\t\t\t\t[style*=\"border-bottom\"],\n\t\t\t\t[style*=\"border-left\"],\n\t\t\t\t[style*=\"border-right\"],\n\t\t\t\t[style*=\"border-width\"],\n\t\t\t\t[style*=\"border-style\"],\n\t\t\t\t[style*=\"border-color\"]\n\t\t\t) {\n\t\t\t\tborder-color: transparent;\n\t\t\t\t/* Resetting `border-width` property to the user agent styles. */\n\t\t\t\tborder-width: 0;\n\t\t\t\toutline: var(--ck-table-layout-default-border-color) 1px dashed;\n\t\t\t\toutline-offset: -1px;\n\n\t\t\t\t&:focus {\n\t\t\t\t\toutline: var(--ck-color-focus-border) 1px solid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Reset the `width` and `text-indent` of the bogus paragraph because has 1px text indent. */\n\t\t\t& > .ck-table-bogus-paragraph {\n\t\t\t\twidth: calc(100% - 1px);\n\t\t\t\ttext-indent: 0;\n\t\t\t}\n\t\t}\n\n\t\t/* Widget type around overrides. */\n\t\t&.ck-widget {\n\t\t\t& > .ck-widget__type-around {\n\t\t\t\t--ck-widget-type-around-button-size: var(--ck-table-layout-widget-type-around-button-size);\n\n\t\t\t\t& > .ck-widget__type-around__button {\n\t\t\t\t\t&.ck-widget__type-around__button_before,\n\t\t\t\t\t&.ck-widget__type-around__button_after {\n\t\t\t\t\t\ttransform: translateY(0);\n\t\t\t\t\t\t/* Same value as inline-image widget because it is after the inline-image in HTML structure */\n\t\t\t\t\t\tz-index: 2;\n\t\t\t\t\t}\n\n\t\t\t\t\t&.ck-widget__type-around__button_before {\n\t\t\t\t\t\tmargin-left: var(--ck-table-layout-widget-type-around-button-size);\n\t\t\t\t\t\tleft: min(10%, 30px);\n\t\t\t\t\t\tborder-radius: 0 0 100px 100px;\n\n\t\t\t\t\t\t&::after {\n\t\t\t\t\t\t\tborder-radius: 0 0 100px 100px;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t&.ck-widget__type-around__button_after {\n\t\t\t\t\t\tborder-radius: 100px 100px 0 0;\n\n\t\t\t\t\t\t&::after {\n\t\t\t\t\t\t\tborder-radius: 100px 100px 0 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t& svg {\n\t\t\t\t\t\twidth: var(--ck-table-layout-widget-type-around-icon-width);\n\t\t\t\t\t\theight: var(--ck-table-layout-widget-type-around-icon-height);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.ck-widget_with-selection-handle {\n\t\t\t\t& > .ck-widget__selection-handle {\n\t\t\t\t\t--ck-widget-handler-icon-size: var(--ck-table-layout-widget-handler-icon-size);\n\n\t\t\t\t\ttransform: translateY(calc(0px - var(--ck-widget-outline-thickness)));\n\t\t\t\t\t/* Value increased by 1 as in selected inline-image widget\n\t\t\t\t\tbecause it is before the inline-image in HTML structure. */\n\t\t\t\t\tz-index: 3;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Show fake caret on border not above. */\n\t\t\t&.ck-widget_type-around_show-fake-caret_before {\n\t\t\t\t& > .ck-widget__type-around {\n\t\t\t\t\t& > .ck-widget__type-around__fake-caret {\n\t\t\t\t\t\ttop: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Show fake caret on border not below. */\n\t\t\t&.ck-widget_type-around_show-fake-caret_after {\n\t\t\t\t& > .ck-widget__type-around {\n\t\t\t\t\t& > .ck-widget__type-around__fake-caret {\n\t\t\t\t\t\tbottom: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t&:hover {\n\t\t\t\t/* To prevent the widget outline from being cut off at the bottom\n\t\t\t\twhen the next cell or table has a background color, for example. */\n\t\t\t\tz-index: var(--ck-z-default);\n\t\t\t}\n\n\t\t\t&:hover > .ck-widget__selection-handle {\n\t\t\t\topacity: 0.75;\n\t\t\t\tvisibility: visible;\n\n\t\t\t\t&:hover {\n\t\t\t\t\topacity: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Because of setting the opacity to 0.75 to the selection handle for the layout table,\n\t\t\tit overrides the similar selector in widget (specificity is higher),\n\t\t\tthats why we must override it here also. */\n\t\t\t&:has( .ck-widget.table:hover ) > .ck-widget__selection-handle {\n\t\t\t\topacity: 0;\n\t\t\t\tvisibility: hidden;\n\t\t\t}\n\n\t\t\t&.ck-widget_selected {\n\t\t\t\t/* To prevent the widget outline from being cut off at the bottom\n\t\t\t\twhen the next cell or table has a background color, for example. */\n\t\t\t\tz-index: var(--ck-z-default);\n\t\t\t}\n\t\t}\n\t\tdisplay: table;\n\t\tmargin: 0\n\n\t\t/* Widget type around overrides. */\n\t}\n\t&.ck-editor__editable_inline {\n\t\t& > .ck-widget.ck-widget_with-selection-handle.layout-table {\n\t\t\t&:first-child {\n\t\t\t\tmargin-top: var(--ck-spacing-large);\n\t\t\t}\n\t\t\t/*\n\t\t\t* This value should match with the default margins of the block elements (like .media, .image or .table)\n\t\t\t* to avoid a content jumping when the fake selection container shows up (See https://github.com/ckeditor/ckeditor5/issues/9825).\n\t\t\t*/\n\t\t\t&:last-child,\n\t\t\t/* Fallback for hidden fake selection div */\n\t\t\t&:nth-last-child(2):has( + .ck-fake-selection-container) {\n\t\t\t\tmargin-bottom: var(--ck-spacing-large);\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-html-embed-content-width: calc(100% - 1.5 * var(--ck-icon-size));\n\t--ck-html-embed-source-height: 10em;\n\t--ck-html-embed-unfocused-outline-width: 1px;\n\t--ck-html-embed-content-min-height: calc(var(--ck-icon-size) + var(--ck-spacing-standard));\n\n\t--ck-html-embed-source-disabled-background: var(--ck-color-base-foreground);\n\t--ck-html-embed-source-disabled-color: hsl(0deg 0% 45%);\n}\n\n/* The feature container. */\n\n.ck-widget.raw-html-embed {\n\tfont-size: var(--ck-font-size-base);\n\tbackground-color: var(--ck-color-base-foreground);\n\t/* Give the embed some air. */\n\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\tmargin: 0.9em auto;\n\tposition: relative;\n\tdisplay: flow-root;\n\n\t/* Give the html embed some minimal width in the content to prevent them\n\tfrom being \"squashed\" in tight spaces, e.g. in table cells (https://github.com/ckeditor/ckeditor5/issues/8331) */\n\tmin-width: 15em;\n\n\t&:not(.ck-widget_selected):not(:hover) {\n\t\toutline: var(--ck-html-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border);\n\t}\n\n\t/* HTML embed widget itself should respect UI language direction */\n\t&[dir=\"ltr\"] {\n\t\ttext-align: left;\n\t}\n\n\t&[dir=\"rtl\"] {\n\t\ttext-align: right;\n\t}\n\n\t/* ----- Embed label in the upper left corner ----------------------------------------------- */\n\n\t&::before {\n\t\tcontent: attr(data-html-embed-label);\n\t\ttop: calc(-1 * var(--ck-html-embed-unfocused-outline-width));\n\t\tleft: var(--ck-spacing-standard);\n\t\tbackground: hsl(0deg 0% 60%);\n\t\ttransition: background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\t\tpadding: calc(var(--ck-spacing-tiny) + var(--ck-html-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);\n\t\tborder-radius: 0 0 var(--ck-border-radius) var(--ck-border-radius);\n\t\tcolor: var(--ck-color-base-background);\n\t\tfont-size: var(--ck-font-size-tiny);\n\t\tfont-family: var(--ck-font-face);\n\t\tposition: absolute;\n\n\t\t/* Make sure the content does not cover the label. */\n\t\tz-index: 1;\n\t}\n\n\t&[dir=\"rtl\"]::before {\n\t\tleft: auto;\n\t\tright: var(--ck-spacing-standard);\n\t}\n\n\t/* Make space for label but it only collides in LTR languages */\n\t&[dir=\"ltr\"] .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before {\n\t\tmargin-left: 50px;\n\t}\n\n\t.ck.ck-editor__editable.ck-blurred &.ck-widget_selected::before {\n\t\ttop: 0px;\n\t\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-small);\n\t}\n\n\t.ck.ck-editor__editable:not(.ck-blurred) &.ck-widget_selected::before {\n\t\ttop: 0;\n\t\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-small);\n\t\tbackground: var(--ck-color-focus-border);\n\t}\n\n\t.ck.ck-editor__editable &:not(.ck-widget_selected):hover::before {\n\t\ttop: 0px;\n\t\tpadding: var(--ck-spacing-tiny) var(--ck-spacing-small);\n\t}\n\n\t/* ----- Emebed internals --------------------------------------------------------------------- */\n\n\t& .raw-html-embed__content-wrapper {\n\t\tpadding: var(--ck-spacing-standard);\n\t}\n\n\t/* The switch mode button wrapper. */\n\t& .raw-html-embed__buttons-wrapper {\n\t\ttop: var(--ck-spacing-standard);\n\t\tright: var(--ck-spacing-standard);\n\t\tposition: absolute;\n\t\tdisplay: flex;\n\n\t\t& .ck-button.raw-html-embed__save-button {\n\t\t\tcolor: var(--ck-color-button-save);\n\t\t}\n\n\t\t& .ck-button.raw-html-embed__cancel-button {\n\t\t\tcolor: var(--ck-color-button-cancel);\n\t\t}\n\n\t\t& .ck-button:not(:first-child) {\n\t\t\tmargin-top: var(--ck-spacing-small);\n\t\t}\n\t\tflex-direction: column\n\t}\n\n\t&[dir=\"rtl\"] .raw-html-embed__buttons-wrapper {\n\t\tleft: var(--ck-spacing-standard);\n\t\tright: auto;\n\t}\n\n\t/* The edit source element. */\n\t& .raw-html-embed__source {\n\t\tbox-sizing: border-box;\n\t\theight: var(--ck-html-embed-source-height);\n\t\twidth: var(--ck-html-embed-content-width);\n\t\tresize: none;\n\t\tmin-width: 0;\n\t\tpadding: var(--ck-spacing-standard);\n\n\t\tfont-family: monospace;\n\t\ttab-size: 4;\n\t\twhite-space: pre-wrap;\n\t\tfont-size: var(--ck-font-size-base); /* Safari needs this. */\n\n\t\t/* HTML code is direction–agnostic. */\n\t\ttext-align: left;\n\t\tdirection: ltr;\n\n\t\t&[disabled] {\n\t\t\tbackground: var(--ck-html-embed-source-disabled-background);\n\t\t\tcolor: var(--ck-html-embed-source-disabled-color);\n\n\t\t\t/* Safari needs this for the proper text color in disabled input (https://github.com/ckeditor/ckeditor5/issues/8320). */\n\t\t\t-webkit-text-fill-color: var(--ck-html-embed-source-disabled-color);\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t/* The preview data container. */\n\t& .raw-html-embed__preview {\n\t\tmin-height: var(--ck-html-embed-content-min-height);\n\t\twidth: var(--ck-html-embed-content-width);\n\t\tposition: relative;\n\t\toverflow: hidden;\n\n\t\t/* Disable all mouse interaction as long as the editor is not read–only. */\n\t\t.ck-editor__editable:not(.ck-read-only) & {\n\t\t\tpointer-events: none;\n\t\t}\n\t\tdisplay: flex\n\t}\n\n\t& .raw-html-embed__preview-content {\n\t\tbox-sizing: border-box;\n\t\tbackground-color: var(--ck-color-base-foreground);\n\t\twidth: 100%;\n\t\tposition: relative;\n\t\tmargin: auto;\n\n\t\t/* Gives spacing to the small renderable elements, so they always cover the placeholder. */\n\t\tdisplay: table;\n\t\tborder-collapse: separate;\n\n\t\t& > * {\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: auto;\n\t\t}\n\t\tborder-spacing: 7px\n\t}\n\n\t& .raw-html-embed__preview-placeholder {\n\t\tcolor: var(--ck-html-embed-source-disabled-color);\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center\n\t}\n\n\t/* Don't inherit the style, e.g. when in a block quote. */\n\tfont-style: normal\n\n\t/* ----- Emebed label in the upper left corner ----------------------------------------------- */\n\n\t/* ----- Emebed internals --------------------------------------------------------------------- */\n\n\t/* The switch mode button wrapper. */\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-block-toolbar-button: var(--ck-color-text);\n\t--ck-block-toolbar-button-size: var(--ck-font-size-normal);\n}\n\n.ck.ck-block-toolbar-button {\n\tcolor: var(--ck-color-block-toolbar-button);\n\tfont-size: var(--ck-block-toolbar-size);\n\tposition: absolute;\n\tz-index: var(--ck-z-default);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-insert-table-dropdown-padding: 10px;\n\t--ck-insert-table-dropdown-box-height: 11px;\n\t--ck-insert-table-dropdown-box-width: 12px;\n\t--ck-insert-table-dropdown-box-margin: 1px;\n}\n\n.ck .ck-insert-table-dropdown__grid {\n\t/* The width of a container should match 10 items in a row so there will be a 10x10 grid. */\n\twidth: calc(var(--ck-insert-table-dropdown-box-width) * 10 + var(--ck-insert-table-dropdown-box-margin) * 20 + var(--ck-insert-table-dropdown-padding) * 2);\n\tpadding: var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: wrap;\n}\n\n.ck .ck-insert-table-dropdown__label,\n.ck[dir=rtl] .ck-insert-table-dropdown__label {\n\ttext-align: center;\n}\n\n.ck .ck-insert-table-dropdown-grid-box {\n\tmin-width: var(--ck-insert-table-dropdown-box-width);\n\tmin-height: var(--ck-insert-table-dropdown-box-height);\n\tmargin: var(--ck-insert-table-dropdown-box-margin);\n\tborder: 1px solid var(--ck-color-base-border);\n\tborder-radius: 1px;\n\toutline: none;\n\ttransition: none;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&:focus {\n\t\tbox-shadow: none;\n\t}\n\n\t&.ck-on {\n\t\tborder-color: var(--ck-color-focus-border);\n\t\tbackground: var(--ck-color-focus-outer-shadow);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/* Preserve aspect ratio of the resized image after introducing image height attribute. */\n.ck-content img.image_resized {\n\theight: auto;\n}\n\n.ck-content .image.image_resized {\n\tmax-width: 100%;\n\t/*\n\tThe `
    ` element for resized images must not use `display:table` as browsers do not support `max-width` for it well.\n\tSee https://stackoverflow.com/questions/4019604/chrome-safari-ignoring-max-width-in-table/14420691#14420691 for more.\n\tFortunately, since we control the width, there is no risk that the image will look bad.\n\t*/\n\tdisplay: block;\n\tbox-sizing: border-box;\n\n\t& img {\n\t\t/* For resized images it is the `
    ` element that determines the image width. */\n\t\twidth: 100%;\n\t}\n\n\t& > figcaption {\n\t\t/* The `
    ` element uses `display:block`, so `
    ` also has to. */\n\t\tdisplay: block;\n\t}\n}\n\n.ck.ck-editor__editable {\n\t/* The resized inline image nested in the table should respect its parent size.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9117. */\n\t& td,\n\t& th {\n\t\t& .image-inline.image_resized img {\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n[dir=\"ltr\"] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon {\n\tmargin-right: var(--ck-spacing-standard);\n}\n\n[dir=\"rtl\"] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon {\n\tmargin-left: var(--ck-spacing-standard);\n}\n\n.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label {\n\twidth: 4em;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-image-style-spacing: 1.5em;\n\t--ck-content-inline-image-style-spacing: calc(var(--ck-content-image-style-spacing) / 2);\n}\n\n.ck-content {\n\t/* See: https://github.com/ckeditor/ckeditor5/issues/16317 */\n\t& .image {\n\t\t/* Provides a minimal side margin for the left and right aligned images, so that the user has a visual feedback\n\t\tconfirming successful application of the style if image width exceeds the editor's size.\n\t\tSee https://github.com/ckeditor/ckeditor5/issues/9342 */\n\t\t&.image-style-block-align-left,\n\t\t&.image-style-block-align-right {\n\t\t\tmax-width: calc(100% - var(--ck-content-image-style-spacing));\n\t\t}\n\n\t\t/* Allows displaying multiple floating images in the same line.\n\t\tSee https://github.com/ckeditor/ckeditor5/issues/9183#issuecomment-804988132 */\n\t\t&.image-style-align-left,\n\t\t&.image-style-align-right {\n\t\t\tclear: none;\n\t\t}\n\n\t\t&.image-style-side {\n\t\t\tfloat: right;\n\t\t\tmargin-left: var(--ck-content-image-style-spacing);\n\t\t\tmax-width: 50%;\n\t\t}\n\n\t\t&.image-style-align-left {\n\t\t\tfloat: left;\n\t\t\tmargin-right: var(--ck-content-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-align-right {\n\t\t\tfloat: right;\n\t\t\tmargin-left: var(--ck-content-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-block-align-right {\n\t\t\tmargin-right: 0;\n\t\t\tmargin-left: auto;\n\t\t}\n\n\t\t&.image-style-block-align-left {\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: auto;\n\t\t}\n\t}\n\n\t& .image-style-align-center {\n\t\tmargin-left: auto;\n\t\tmargin-right: auto;\n\t}\n\n\t& .image-style-align-left {\n\t\tfloat: left;\n\t\tmargin-right: var(--ck-content-image-style-spacing);\n\t}\n\n\t& .image-style-align-right {\n\t\tfloat: right;\n\t\tmargin-left: var(--ck-content-image-style-spacing);\n\t}\n\n\t/* Simulates margin collapsing with the preceding paragraph, which does not work for the floating elements. */\n\t& p + .image.image-style-align-left,\n\t& p + .image.image-style-align-right,\n\t& p + .image.image-style-side {\n\t\tmargin-top: 0;\n\t}\n\n\t& .image-inline {\n\t\t&.image-style-align-left,\n\t\t&.image-style-align-right {\n\t\t\tmargin-top: var(--ck-content-inline-image-style-spacing);\n\t\t\tmargin-bottom: var(--ck-content-inline-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-align-left {\n\t\t\tmargin-right: var(--ck-content-inline-image-style-spacing);\n\t\t}\n\n\t\t&.image-style-align-right {\n\t\t\tmargin-left: var(--ck-content-inline-image-style-spacing);\n\t\t}\n\t}\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-editor__editable {\n\t& .image,\n\t& .image-inline {\n\t\t/* Showing animation. */\n\t\t&.ck-appear {\n\t\t\tanimation: fadeIn 700ms;\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\topacity: 1;\n\t\t\t\tanimation: none;\n\t\t\t}\n\t\t}\n\t\tposition: relative\n\t}\n\n\t/* Upload progress bar. */\n\t& .image .ck-progress-bar,\n\t& .image-inline .ck-progress-bar {\n\t\theight: 2px;\n\t\twidth: 0;\n\t\tbackground: var(--ck-color-upload-bar-background);\n\t\ttransition: width 100ms;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t}\n\n\t/* Upload progress bar. */\n}\n\n@keyframes fadeIn {\n\tfrom { opacity: 0; }\n\tto { opacity: 1; }\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content code {\n\tbackground-color: hsla(0, 0%, 78%, 0.3);\n\tpadding: .15em;\n\tborder-radius: 2px;\n}\n\n.ck.ck-editor__editable .ck-code_selected {\n\tbackground-color: hsla(0, 0%, 78%, 0.5);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-upload-placeholder-loader: hsl(0, 0%, 70%);\n\t--ck-upload-placeholder-loader-size: 32px;\n\t--ck-upload-placeholder-image-aspect-ratio: 2.8;\n}\n\n.ck .ck-image-upload-placeholder {\n\t/* We need to control the full width of the SVG gray background. */\n\twidth: 100%;\n\tmargin: 0;\n\n\t&.image-inline {\n\t\twidth: calc( 2 * var(--ck-upload-placeholder-loader-size) * var(--ck-upload-placeholder-image-aspect-ratio) );\n\t}\n\n\t& img {\n\t\t/*\n\t\t * This is an arbitrary aspect for a 1x1 px GIF to display to the user. Not too tall, not too short.\n\t\t * There's nothing special about this number except that it should make the image placeholder look like\n\t\t * a real image during this short period after the upload started and before the image was read from the\n\t\t * file system (and a rich preview was loaded).\n\t\t */\n\t\taspect-ratio: var(--ck-upload-placeholder-image-aspect-ratio);\n\t}\n}\n\n.ck .ck-upload-placeholder-loader {\n\twidth: 100%;\n\theight: 100%;\n\tposition: absolute;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\ttop: 0;\n\n\t&::before {\n\t\twidth: var(--ck-upload-placeholder-loader-size);\n\t\theight: var(--ck-upload-placeholder-loader-size);\n\t\tborder-radius: 50%;\n\t\tborder-top: 3px solid var(--ck-color-upload-placeholder-loader);\n\t\tborder-right: 2px solid transparent;\n\t\tanimation: ck-upload-placeholder-loader 1s linear infinite;\n\t\tcontent: '';\n\t\tposition: relative;\n\t}\n\tleft: 0\n}\n\n@keyframes ck-upload-placeholder-loader {\n\tto {\n\t\ttransform: rotate( 360deg );\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content {\n\t& .image {\n\t\tdisplay: table;\n\t\tclear: both;\n\t\ttext-align: center;\n\n\t\t/* Make sure there is some space between the content and the image. Center image by default. */\n\t\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\t \tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\t\tmargin: 0.9em auto;\n\n\t\t/* Make sure the caption will be displayed properly (See: https://github.com/ckeditor/ckeditor5/issues/1870). */\n\t\tmin-width: 50px;\n\n\t\t& img {\n\t\t\t/* Prevent unnecessary margins caused by line-height (see https://github.com/ckeditor/ckeditor5/issues/44). */\n\t\t\tdisplay: block;\n\n\t\t\t/* Center the image if its width is smaller than the content's width. */\n\t\t\tmargin: 0 auto;\n\n\t\t\t/* Make sure the image never exceeds the size of the parent container (ckeditor/ckeditor5-ui#67). */\n\t\t\tmax-width: 100%;\n\n\t\t\t/* Make sure the image is never smaller than the parent container (See: https://github.com/ckeditor/ckeditor5/issues/9300). */\n\t\t\tmin-width: 100%;\n\n\t\t\t/* Keep proportions of the block image if the height is set and the image is wider than the editor width.\n\t\t\tSee https://github.com/ckeditor/ckeditor5/issues/14542. */\n\t\t\theight: auto;\n\t\t}\n\t}\n\n\t& .image-inline {\n\t\t/*\n\t\t * Normally, the .image-inline would have \"display: inline-block\" and \"img { width: 100% }\" (to follow the wrapper while resizing).\n\t\t * Unfortunately, together with \"srcset\", it gets automatically stretched up to the width of the editing root.\n\t\t * This strange behavior does not happen with inline-flex.\n\t\t */\n\t\tdisplay: inline-flex;\n\n\t\t/* While being resized, don't allow the image to exceed the width of the editing root. */\n\t\tmax-width: 100%;\n\n\t\t/* This is required by Safari to resize images in a sensible way. Without this, the browser breaks the ratio. */\n\t\talign-items: flex-start;\n\n\t\t/* When the picture is present it must act as a flex container to let the img resize properly */\n\t\t& picture {\n\t\t\tdisplay: flex;\n\t\t}\n\n\t\t/* When the picture is present, it must act like a resizable img. */\n\t\t& picture,\n\t\t& img {\n\t\t\t/* This is necessary for the img to span the entire .image-inline wrapper and to resize properly. */\n\t\t\tflex-grow: 1;\n\t\t\tflex-shrink: 1;\n\n\t\t\t/* Prevents overflowing the editing root boundaries when an inline image is very wide. */\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable {\n\t/*\n\t * Inhertit the content styles padding of the
    in case the integration overrides `text-align: center`\n\t * of `.image` (e.g. to the left/right). This ensures the placeholder stays at the padding just like the native\n\t * caret does, and not at the edge of
    .\n\t */\n\t& .image > figcaption.ck-placeholder::before {\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * Make sure the image caption placeholder doesn't overflow the placeholder area.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9162.\n\t\t */\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t/*\n\t * See https://github.com/ckeditor/ckeditor5/issues/15115.\n\t */\n\t& .image {\n\t\tz-index: 1;\n\n\t\t/*\n\t\t * Make sure the selected image always stays on top of its siblings.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9108.\n\t\t */\n\t\t&.ck-widget_selected {\n\t\t\tz-index: 2;\n\t\t}\n\t}\n\n\t/*\n\t * See https://github.com/ckeditor/ckeditor5/issues/15115.\n\t */\n\t& .image-inline {\n\t\tz-index: 1;\n\n\t\t/*\n\t\t * Make sure the selected inline image always stays on top of its siblings.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9108.\n\t\t */\n\t\t&.ck-widget_selected {\n\t\t\tz-index: 2;\n\n\t\t\t/*\n\t\t\t * Make sure the native browser selection style is not displayed.\n\t\t\t * Inline image widgets have their own styles for the selected state and\n\t\t\t * leaving this up to the browser is asking for a visual collision.\n\t\t\t */\n\t\t\t& ::selection {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Keep proportions of the inline image if the height is set and the image is wider than the editor width.\n\tSee https://github.com/ckeditor/ckeditor5/issues/14542. */\n\t& .image-inline img {\n\t\theight: auto;\n\t}\n\n\t/* The inline image nested in the table should have its original size if not resized.\n\tSee https://github.com/ckeditor/ckeditor5/issues/9117. */\n\t& td,\n\t& th {\n\t\t& .image-inline img {\n\t\t\tmax-width: none;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-editor__editable {\n\t& img.image_placeholder {\n\t\tbackground-size: 100% 100%;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-image-insert-insert-by-url-width: 250px;\n}\n\n.ck.ck-image-insert-url {\n\t--ck-input-width: 100%;\n\twidth: 400px;\n\n\t& .ck-image-insert-url__action-row {\n\t\tgrid-column-gap: var(--ck-spacing-large);\n\t\tmargin-top: var(--ck-spacing-large);\n\t\tdisplay: grid;\n\n\t\t& .ck-button-save,\n\t\t& .ck-button-cancel {\n\t\t\tjustify-content: center;\n\t\t\tmin-width: auto;\n\t\t}\n\n\t\t& .ck-button .ck-button__label {\n\t\t\tcolor: var(--ck-color-text);\n\t\t}\n\t\tgrid-template-columns: repeat(2, 1fr)\n\t}\n\tpadding: var(--ck-spacing-large) var(--ck-spacing-large) 0\n}\n\n.ck.ck-image-insert-form {\n\t& > .ck.ck-button {\n\t\tdisplay: block;\n\t\twidth: 100%;\n\n\t\t[dir=\"ltr\"] & {\n\t\t\ttext-align: left;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n\n\t& > .ck.ck-collapsible {\n\t\t&:not(:first-child) {\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\t&:not(:last-child) {\n\t\t\tborder-bottom: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\tmin-width: var(--ck-image-insert-insert-by-url-width);\n\t}\n\n\t/* This is the case when there are no other integrations configured than insert by URL */\n\t& > .ck.ck-image-insert-url {\n\t\tmin-width: var(--ck-image-insert-insert-by-url-width);\n\t\tpadding: var(--ck-spacing-large);\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-image-custom-resize-form-width: 340px;\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-image-custom-resize-form-width: 300px;\n\t}\n}\n\n.ck.ck-image-custom-resize-form {\n\t&.ck-responsive-form {\n\t\twidth: var(--ck-image-custom-resize-form-width);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-text-alternative-form-width: 340px;\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-text-alternative-form-width: 300px;\n\t}\n}\n\n.ck.ck-text-alternative-form {\n\t&.ck-responsive-form {\n\t\twidth: var(--ck-text-alternative-form-width);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck .ck-link_selected {\n\tbackground: var(--ck-color-link-selected-background);\n\n\t/* Give linked inline images some outline to let the user know they are also part of the link. */\n\t& span.image-inline {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background);\n\t}\n}\n\n/*\n * Classes used by the \"fake visual selection\" displayed in the content when an input\n * in the link UI has focus (the browser does not render the native selection in this state).\n */\n\n.ck .ck-fake-link-selection {\n\tbackground: var(--ck-color-link-fake-selection);\n}\n\n/* A collapsed fake visual selection. */\n\n.ck .ck-fake-link-selection_collapsed {\n\theight: 100%;\n\tborder-right: 1px solid var(--ck-color-base-text);\n\tmargin-right: -1px;\n\toutline: solid 1px hsla(0, 0%, 100%, .5);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-link-bookmark-icon-size: calc( var(--ck-icon-size) * 0.7); /* 0.7 = 14/20 cause default the icon size is 20px */\n}\n\n.ck.ck-toolbar.ck-link-toolbar {\n\t& > .ck-toolbar__items {\n\t\tflex-wrap: nowrap;\n\t}\n}\n\na.ck.ck-button.ck-link-toolbar__preview {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0 var(--ck-spacing-medium);\n\tcolor: var(--ck-color-link-default);\n\tcursor: pointer;\n\n\t& .ck.ck-button__label {\n\t\ttext-overflow: ellipsis;\n\n\t\t/* Match the box model of the link editor form's input so the balloon\n\t\tdoes not change width when moving between actions and the form. */\n\t\tmax-width: var(--ck-input-width);\n\t}\n\n\t&,\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\tbackground: none;\n\t}\n\n\t&:active {\n\t\tbox-shadow: none;\n\t}\n\n\t&:hover,\n\t&:focus {\n\t\ttext-decoration: underline;\n\t}\n\n\t&.ck-button_with-text .ck.ck-icon.ck-button__icon {\n\t\twidth: var(--ck-link-bookmark-icon-size);\n\t\theight: var(--ck-link-bookmark-icon-size);\n\n\t\t[dir=\"ltr\"] & {\n\t\t\tmargin-right: var(--ck-spacing-tiny);\n\t\t\tmargin-left: var(--ck-spacing-small);\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tmargin-left: var(--ck-spacing-tiny);\n\t\t\tmargin-right: var(--ck-spacing-small);\n\t\t}\n\t}\n\n\t&:has( .ck-icon ) {\n\t\tpadding-left: var(--ck-spacing-extra-tiny );\n\t}\n}\n\n.ck.ck-link-toolbar__preview {\n\tdisplay: inline-block;\n\n\t& .ck-button__label {\n\t\toverflow: hidden;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-todo-list-checkmark-size: 16px;\n}\n\n.ck-content .todo-list .todo-list__label > input,\n.ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input {\n\t-webkit-appearance: none;\n\tdisplay: inline-block;\n\tposition: relative;\n\twidth: var(--ck-content-todo-list-checkmark-size);\n\theight: var(--ck-content-todo-list-checkmark-size);\n\tvertical-align: middle;\n\n\t/* Needed on iOS */\n\tborder: 0;\n\n\t/* LTR styles */\n\tleft: -25px;\n\tmargin-right: -15px;\n\tright: 0;\n\tmargin-left: 0;\n\n\t/* RTL styles */\n\t[dir=rtl]& {\n\t\tleft: 0;\n\t\tmargin-right: 0;\n\t\tright: -25px;\n\t\tmargin-left: -15px;\n\t}\n\n\t&::before {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tbox-sizing: border-box;\n\t\tcontent: '';\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tborder: 1px solid hsl(0, 0%, 20%);\n\t\tborder-radius: 2px;\n\t\ttransition: 250ms ease-in-out box-shadow;\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\ttransition: none;\n\t\t}\n\t}\n\n\t&::after {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tbox-sizing: content-box;\n\t\tpointer-events: none;\n\t\tcontent: '';\n\n\t\t/* Calculate tick position, size and border-width proportional to the checkmark size. */\n\t\tleft: calc( var(--ck-content-todo-list-checkmark-size) / 3 );\n\t\ttop: calc( var(--ck-content-todo-list-checkmark-size) / 5.3 );\n\t\twidth: calc( var(--ck-content-todo-list-checkmark-size) / 5.3 );\n\t\theight: calc( var(--ck-content-todo-list-checkmark-size) / 2.6 );\n\t\tborder-style: solid;\n\t\tborder-color: transparent;\n\t\tborder-width: 0 calc( var(--ck-content-todo-list-checkmark-size) / 8 ) calc( var(--ck-content-todo-list-checkmark-size) / 8 ) 0;\n\t\ttransform: rotate(45deg);\n\t}\n\n\t&[checked] {\n\t\t&::before {\n\t\t\tbackground: hsl(126, 64%, 41%);\n\t\t\tborder-color: hsl(126, 64%, 41%);\n\t\t}\n\n\t\t&::after {\n\t\t\tborder-color: hsl(0, 0%, 100%);\n\t\t}\n\t}\n}\n\n/*\n * To-do list content styles.\n */\n.ck-content .todo-list {\n\tlist-style: none;\n\n\t& li {\n\t\tposition: relative;\n\t\tmargin-bottom: 5px;\n\n\t\t& .todo-list {\n\t\t\tmargin-top: 5px;\n\t\t}\n\t}\n\n\t& .todo-list__label {\n\t\t& .todo-list__label__description {\n\t\t\tvertical-align: middle;\n\t\t}\n\n\t\t&.todo-list__label_without-description input[type=checkbox] {\n\t\t\tposition: absolute;\n\t\t}\n\t}\n}\n\n/*\n * To-do list editing view styles.\n */\n.ck-editor__editable.ck-content .todo-list .todo-list__label {\n\t/*\n\t * To-do list should be interactive only during the editing\n\t * (https://github.com/ckeditor/ckeditor5/issues/2090).\n\t */\n\t& > input,\n\t& > span[contenteditable=false] > input {\n\t\tcursor: pointer;\n\n\t\t&:hover::before {\n\t\t\tbox-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1);\n\t\t}\n\t}\n\n\t/*\n\t * Document Lists - editing view has an additional span around checkbox.\n\t */\n\t&.todo-list__label_without-description {\n\t\t& input[type=checkbox] {\n\t\t\tposition: absolute;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-link-panel-width: 340px;\n\t/* The height of the text inside the link providers list button. */\n\t--ck-link-provider-list-item-text-height: calc(var(--ck-line-height-base) * var(--ck-font-size-base));\n\t/* The height of the link providers list item contained paddings. */\n\t--ck-link-provider-list-item-height: calc(var(--ck-link-provider-list-item-text-height) + var(--ck-spacing-small) + var(--ck-spacing-small));\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-link-panel-width: 300px;\n\t}\n}\n\n/* Generic class that wraps each link balloon view. */\n\n.ck.ck-form.ck-link-form {\n\twidth: var(--ck-link-panel-width);\n\tpadding-bottom: 0;\n\n\t&.ck-responsive-form {\n\t\t& .ck-labeled-field-view {\n\t\t\t@media screen and (max-width: 600px) {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck-link-form__providers-list {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tborder-top: 1px solid var(--ck-color-base-border);\n\n\t\t/* The list should be scrollable when there are more than 4 items. */\n\t\t&:has(.ck-list__item:nth-child(n + 5)) {\n\t\t\toverflow: auto;\n\t\t\t/* Scroll should appear when there are more than 5 item on the list.\n\t\t\t* var(--ck-spacing-large) - is a form padding.\n\t\t\t* 1px - is a border width. */\n\t\t\tmax-height: calc(var(--ck-link-provider-list-item-height) * 4 + var(--ck-spacing-large) + 1px);\n\t\t}\n\n\t\t& .ck-link__button {\n\t\t\tpadding: var(--ck-spacing-small) var(--ck-spacing-large);\n\t\t\tborder-radius: 0;\n\n\t\t\t& > .ck-button__label {\n\t\t\t\tflex-grow: 1;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-link-form {\n\t& .ck-link__items:empty {\n\t\tdisplay: none;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-link-properties-width: 340px;\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-link-properties-width: 300px;\n\t}\n}\n\n.ck.ck-link-properties {\n\twidth: var(--ck-link-properties-width);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-link-providers-width: 340px;\n\t--ck-link-list-view-max-height: 240px;\n\t--ck-link-list-view-icon-size: calc( var(--ck-icon-size) * 0.8); /* 0.8 = 16/20 cause default the icon size is 20px */\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-link-providers-width: 300px;\n\t}\n}\n\n.ck.ck-link-providers {\n\twidth: var(--ck-link-providers-width);\n\n\t& .ck-form__header__label {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t& > .ck-link-providers__list {\n\t\tmax-height: min( var(--ck-link-list-view-max-height), 40vh );\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\n\t\t& .ck-button {\n\t\t\t& > .ck-icon {\n\t\t\t\twidth: var(--ck-link-list-view-icon-size);\n\t\t\t\theight: var(--ck-link-list-view-icon-size);\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t& > .ck-button__label {\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\t\t}\n\t\toverscroll-behavior: contain\n\t}\n\n\t& .ck-link__empty-list-info {\n\t\tpadding: calc( 2 * var(--ck-spacing-large) ) var(--ck-spacing-medium);\n\t\ttext-align: center;\n\t\tfont-style: italic;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-editor__editable .ck-list-bogus-paragraph {\n\tdisplay: block;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-list-style-button-size: 44px;\n}\n\n.ck.ck-list-styles-list {\n\tgrid-template-columns: repeat( 3, auto );\n\trow-gap: var(--ck-spacing-medium);\n\tcolumn-gap: var(--ck-spacing-medium);\n\tpadding: var(--ck-spacing-large);\n\n\t& .ck-button {\n\t\t/* Make the button look like a thumbnail (the icon \"takes it all\"). */\n\t\twidth: var(--ck-list-style-button-size);\n\t\theight: var(--ck-list-style-button-size);\n\t\tpadding: 0;\n\n\t\t/*\n\t\t * Buttons are aligned by the grid so disable default button margins to not collide with the\n\t\t * gaps in the grid.\n\t\t */\n\t\tmargin: 0;\n\n\t\t/*\n\t\t * Make sure the button border (which is displayed on focus, BTW) does not steal pixels\n\t\t * from the button dimensions and, as a result, decrease the size of the icon\n\t\t * (which becomes blurry as it scales down).\n\t\t */\n\t\tbox-sizing: content-box;\n\n\t\t& .ck-icon {\n\t\t\twidth: var(--ck-list-style-button-size);\n\t\t\theight: var(--ck-list-style-button-size);\n\t\t}\n\t}\n\tdisplay: grid\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-list-properties {\n\t/* When there are no list styles and there is no collapsible. */\n\t&.ck-list-properties_without-styles {\n\t\tpadding: var(--ck-spacing-large);\n\n\t\t& > * {\n\t\t\tmin-width: 14em;\n\n\t\t\t& + * {\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * When the numbered list property fields (start at, reversed) should be displayed,\n\t * more horizontal space is needed. Reconfigure the style grid to create that space.\n\t */\n\t&.ck-list-properties_with-numbered-properties {\n\t\t& > .ck-list-styles-list {\n\t\t\tgrid-template-columns: repeat( 4, auto );\n\t\t}\n\n\t\t/* When list styles are rendered and property fields are in a collapsible. */\n\t\t& > .ck-collapsible {\n\t\t\tborder-top: 1px solid var(--ck-color-base-border);\n\n\t\t\t& > .ck-collapsible__children {\n\t\t\t\t& > * {\n\t\t\t\t\twidth: 100%;\n\n\t\t\t\t\t& + * {\n\t\t\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-numbered-list-properties__start-index .ck-input {\n\t\tmin-width: auto;\n\t\twidth: 100%;\n\t}\n\n\t& .ck.ck-numbered-list-properties__reversed-order {\n\t\tbackground: transparent;\n\t\tpadding-left: 0;\n\t\tpadding-right: 0;\n\t\tmargin-bottom: calc(-1 * var(--ck-spacing-tiny));\n\n\t\t&:active, &:hover {\n\t\t\tbox-shadow: none;\n\t\t\tborder-color: transparent;\n\t\t\tbackground: none;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-list-marker-color: var(--ck-content-font-color);\n\t--ck-content-list-marker-font-family: var(--ck-content-font-family);\n\t--ck-content-list-marker-font-size: var(--ck-content-font-size);\n}\n\n.ck-content li {\n\t/* Opinionated list content styling: prevents content shift\n\t * when a list becomes multi-block (Enter + Backspace scenario).\n\t * See: https://github.com/ckeditor/ckeditor5/pull/18801\n\t */\n\t& > p:first-of-type {\n\t\tmargin-top: 0;\n\t}\n\n\t/* Prevents margins from appearing when a bogus paragraph\n\t * receives line height or text alignment.\n\t * Ensures a consistent experience with the first paragraph.\n\t * See: https://github.com/ckeditor/ckeditor5/pull/18801\n\t */\n\t& > p:only-of-type {\n\t\tmargin-top: 0;\n\t\tmargin-bottom: 0;\n\t}\n\n\t&.ck-list-marker-bold::marker {\n\t\tfont-weight: bold;\n\t}\n\n\t&.ck-list-marker-italic::marker {\n\t\tfont-style: italic;\n\t}\n\n\t&.ck-list-marker-color::marker {\n\t\tcolor: var(--ck-content-list-marker-color);\n\t}\n\n\t&.ck-list-marker-font-family::marker {\n\t\tfont-family: var(--ck-content-list-marker-font-family);\n\t}\n\n\t&.ck-list-marker-font-size::marker {\n\t\tfont-size: var(--ck-content-list-marker-font-size);\n\t}\n\n\t&.ck-list-marker-font-size-tiny::marker {\n\t\tfont-size: var(--ck-content-font-size-tiny);\n\t}\n\n\t&.ck-list-marker-font-size-small::marker {\n\t\tfont-size: var(--ck-content-font-size-small);\n\t}\n\n\t&.ck-list-marker-font-size-big::marker {\n\t\tfont-size: var(--ck-content-font-size-big);\n\t}\n\n\t&.ck-list-marker-font-size-huge::marker {\n\t\tfont-size: var(--ck-content-font-size-huge);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content ol {\n\tlist-style-type: decimal;\n\n\t& ol {\n\t\tlist-style-type: lower-latin;\n\n\t\t& ol {\n\t\t\tlist-style-type: lower-roman;\n\n\t\t\t& ol {\n\t\t\t\tlist-style-type: upper-latin;\n\n\t\t\t\t& ol {\n\t\t\t\t\tlist-style-type: upper-roman;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck-content ul {\n\tlist-style-type: disc;\n\n\t& ul {\n\t\tlist-style-type: circle;\n\n\t\t& ul {\n\t\t\tlist-style-type: square;\n\n\t\t\t& ul {\n\t\t\t\tlist-style-type: square;\n\t\t\t}\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* Match the icon size with the upload indicator brought by the image upload feature. */\n\t--ck-link-image-indicator-icon-size: 20;\n\t--ck-link-image-indicator-icon-is-visible: clamp(0px, 100% - 50px, 1px);\n}\n\n.ck.ck-editor__editable {\n\t/* Linked image indicator */\n\t& figure.image > a,\n\t& a span.image-inline {\n\t\t&::after {\n\t\t\tcontent: \"\";\n\n\t\t\t/*\n\t\t\t * Smaller images should have the icon closer to the border.\n\t\t\t * Match the icon position with the upload indicator brought by the image upload feature.\n\t\t\t */\n\t\t\ttop: min(var(--ck-spacing-medium), 6%);\n\t\t\tright: min(var(--ck-spacing-medium), 6%);\n\n\t\t\tbackground-color: hsla(0, 0%, 0%, .4);\n\t\t\tbackground-image: url(\"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzQ4Ljc0OCAwIDAgMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAgMS04LjUwMy01Ljk1NS43NDEuNzQxIDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NGwuMDA2LjAwNHptNS40OTQtNS4zMzVhLjc0OC43NDggMCAwIDEtLjEyLjI3NGwtMS4xNDcgMS42MzlhLjc1Ljc1IDAgMSAxLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwIDAtNi4xNDQtNC4zMDFsLS44NiAxLjIyOWEuNzUuNzUgMCAwIDEtMS4yMjktLjg2bDEuMTQ4LTEuNjRhLjc0OC43NDggMCAwIDEgLjIxNy0uMjA2IDUuMjUxIDUuMjUxIDAgMCAxIDguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMCAxIC4xODQgMS4wNDVsLTMuMTU1IDQuNTA1YS43NS43NSAwIDEgMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMCAxIDEuMDQ1LS4xODR6Ii8+PC9zdmc+\");\n\t\t\tbackground-size: 14px;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tborder-radius: 100%;\n\n\t\t\t/*\n\t\t\t* Use CSS math to simulate container queries.\n\t\t\t* https://css-tricks.com/the-raven-technique-one-step-closer-to-container-queries/#what-about-showing-and-hiding-things\n\t\t\t*/\n\t\t\toverflow: hidden;\n\t\t\twidth: calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));\n\t\t\theight: calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t}\n\t}\n\t/* Linked image indicator */\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content .media {\n\t/* Don't allow floated content overlap the media.\n\thttps://github.com/ckeditor/ckeditor5-media-embed/issues/53 */\n\tclear: both;\n\n\t/* Make sure there is some space between the content and the media. */\n\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\tmargin: 0.9em auto;\n\n\t/* Make sure media is not overriden with Bootstrap default `flex` value.\n\tSee: https://github.com/ckeditor/ckeditor5/issues/1373. */\n\tdisplay: block;\n\n\t/* Give the media some minimal width in the content to prevent them\n\tfrom being \"squashed\" in tight spaces, e.g. in table cells (https://github.com/ckeditor/ckeditor5-media-embed/issues/44) */\n\tmin-width: 15em;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-media-embed-placeholder-icon-size: 3em;\n\n\t--ck-color-media-embed-placeholder-url-text: hsl(0, 0%, 46%);\n\t--ck-color-media-embed-placeholder-url-text-hover: var(--ck-color-base-text);\n}\n\n.ck-media__wrapper {\n\tmargin: 0 auto;\n\n\t& .ck-media__placeholder {\n\t\tpadding: calc(3 * var(--ck-spacing-standard));\n\t\tbackground: var(--ck-color-base-foreground);\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\n\t\t& .ck-media__placeholder__icon {\n\t\t\tmin-width: var(--ck-media-embed-placeholder-icon-size);\n\t\t\theight: var(--ck-media-embed-placeholder-icon-size);\n\t\t\tmargin-bottom: var(--ck-spacing-large);\n\t\t\tbackground-position: center;\n\t\t\tbackground-size: cover;\n\n\t\t\t& .ck-icon {\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t}\n\t\t}\n\n\t\t& .ck-media__placeholder__url__text {\n\t\t\tcolor: var(--ck-color-media-embed-placeholder-url-text);\n\t\t\twhite-space: nowrap;\n\t\t\ttext-align: center;\n\t\t\tfont-style: italic;\n\t\t\ttext-overflow: ellipsis;\n\n\t\t\t&:hover {\n\t\t\t\tcolor: var(--ck-color-media-embed-placeholder-url-text-hover);\n\t\t\t\tcursor: pointer;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\n\t\t& .ck-media__placeholder__url {\n\t\t\t/* Otherwise the URL will overflow when the content is very narrow. */\n\t\t\tmax-width: 100%;\n\n\t\t\tposition: relative;\n\n\t\t\t& .ck-media__placeholder__url__text {\n\t\t\t\toverflow: hidden;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t}\n\t}\n\n\t&[data-oembed-url*=\"google.com/maps\"] .ck-media__placeholder__icon,\n\t&[data-oembed-url*=\"goo.gl/maps\"] .ck-media__placeholder__icon,\n\t&[data-oembed-url*=\"maps.google.com\"] .ck-media__placeholder__icon,\n\t&[data-oembed-url*=\"maps.app.goo.gl\"] .ck-media__placeholder__icon {\n\t\tbackground-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMCAwIDMuNzggMS42MWg0OS42MjFjMS42OTQgMCAzLjE5LS43OTggNC4xNDYtMi4wMzd6IiBmaWxsPSIjNWM4OGM1Ii8+PHBhdGggZD0iTTIyNi43NDIgMjIyLjk4OGMtOS4yNjYgMC0xNi43NzcgNy4xNy0xNi43NzcgMTYuMDE0LjAwNyAyLjc2Mi42NjMgNS40NzQgMi4wOTMgNy44NzUuNDMuNzAzLjgzIDEuNDA4IDEuMTkgMi4xMDcuMzMzLjUwMi42NSAxLjAwNS45NSAxLjUwOC4zNDMuNDc3LjY3My45NTcuOTg4IDEuNDQgMS4zMSAxLjc2OSAyLjUgMy41MDIgMy42MzcgNS4xNjguNzkzIDEuMjc1IDEuNjgzIDIuNjQgMi40NjYgMy45OSAyLjM2MyA0LjA5NCA0LjAwNyA4LjA5MiA0LjYgMTMuOTE0di4wMTJjLjE4Mi40MTIuNTE2LjY2Ni44NzkuNjY3LjQwMy0uMDAxLjc2OC0uMzE0LjkzLS43OTkuNjAzLTUuNzU2IDIuMjM4LTkuNzI5IDQuNTg1LTEzLjc5NC43ODItMS4zNSAxLjY3My0yLjcxNSAyLjQ2NS0zLjk5IDEuMTM3LTEuNjY2IDIuMzI4LTMuNCAzLjYzOC01LjE2OS4zMTUtLjQ4Mi42NDUtLjk2Mi45ODgtMS40MzkuMy0uNTAzLjYxNy0xLjAwNi45NS0xLjUwOC4zNTktLjcuNzYtMS40MDQgMS4xOS0yLjEwNyAxLjQyNi0yLjQwMiAyLTUuMTE0IDIuMDA0LTcuODc1IDAtOC44NDQtNy41MTEtMTYuMDE0LTE2Ljc3Ni0xNi4wMTR6IiBmaWxsPSIjZGQ0YjNlIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxlbGxpcHNlIHJ5PSI1LjU2NCIgcng9IjUuODI4IiBjeT0iMjM5LjAwMiIgY3g9IjIyNi43NDIiIGZpbGw9IiM4MDJkMjciIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTE5MC4zMDEgMjM3LjI4M2MtNC42NyAwLTguNDU3IDMuODUzLTguNDU3IDguNjA2czMuNzg2IDguNjA3IDguNDU3IDguNjA3YzMuMDQzIDAgNC44MDYtLjk1OCA2LjMzNy0yLjUxNiAxLjUzLTEuNTU3IDIuMDg3LTMuOTEzIDIuMDg3LTYuMjkgMC0uMzYyLS4wMjMtLjcyMi0uMDY0LTEuMDc5aC04LjI1N3YzLjA0M2g0Ljg1Yy0uMTk3Ljc1OS0uNTMxIDEuNDUtMS4wNTggMS45ODYtLjk0Mi45NTgtMi4wMjggMS41NDgtMy45MDEgMS41NDgtMi44NzYgMC01LjIwOC0yLjM3Mi01LjIwOC01LjI5OSAwLTIuOTI2IDIuMzMyLTUuMjk5IDUuMjA4LTUuMjk5IDEuMzk5IDAgMi42MTguNDA3IDMuNTg0IDEuMjkzbDIuMzgxLTIuMzhjMC0uMDAyLS4wMDMtLjAwNC0uMDA0LS4wMDUtMS41ODgtMS41MjQtMy42Mi0yLjIxNS01Ljk1NS0yLjIxNXptNC40MyA1LjY2bC4wMDMuMDA2di0uMDAzeiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjE1LjE4NCAyNTEuOTI5bC03Ljk4IDcuOTc5IDI4LjQ3NyAyOC40NzVjLjI4Ny0uNjQ5LjQ0OS0xLjM2Ni40NDktMi4xMjN2LTMxLjE2NWMtLjQ2OS42NzUtLjkzNCAxLjM0OS0xLjM4MiAyLjAwNS0uNzkyIDEuMjc1LTEuNjgyIDIuNjQtMi40NjUgMy45OS0yLjM0NyA0LjA2NS0zLjk4MiA4LjAzOC00LjU4NSAxMy43OTQtLjE2Mi40ODUtLjUyNy43OTgtLjkzLjc5OS0uMzYzLS4wMDEtLjY5Ny0uMjU1LS44NzktLjY2N3YtLjAxMmMtLjU5My01LjgyMi0yLjIzNy05LjgyLTQuNi0xMy45MTQtLjc4My0xLjM1LTEuNjczLTIuNzE1LTIuNDY2LTMuOTktMS4xMzctMS42NjYtMi4zMjctMy40LTMuNjM3LTUuMTY5bC0uMDAyLS4wMDN6IiBmaWxsPSIjYzNjM2MzIi8+PHBhdGggZD0iTTIxMi45ODMgMjQ4LjQ5NWwtMzYuOTUyIDM2Ljk1M3YuODEyYTUuMjI3IDUuMjI3IDAgMCAwIDUuMjM4IDUuMjM4aDEuMDE1bDM1LjY2Ni0zNS42NjZhMTM2LjI3NSAxMzYuMjc1IDAgMCAwLTIuNzY0LTMuOSAzNy41NzUgMzcuNTc1IDAgMCAwLS45ODktMS40NGMtLjI5OS0uNTAzLS42MTYtMS4wMDYtLjk1LTEuNTA4LS4wODMtLjE2Mi0uMTc2LS4zMjYtLjI2NC0uNDg5eiIgZmlsbD0iI2ZkZGM0ZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjExLjk5OCAyNjEuMDgzbC02LjE1MiA2LjE1MSAyNC4yNjQgMjQuMjY0aC43ODFhNS4yMjcgNS4yMjcgMCAwIDAgNS4yMzktNS4yMzh2LTEuMDQ1eiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48L2c+PC9zdmc+);\n\t}\n\n\t&[data-oembed-url*=\"facebook.com\"] .ck-media__placeholder {\n\t\tbackground: hsl(220, 46%, 48%);\n\n\t\t& .ck-media__placeholder__icon {\n\t\t\tbackground-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIxMDI0cHgiIGhlaWdodD0iMTAyNHB4IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiAgICAgICAgPHRpdGxlPkZpbGwgMTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZGVmcz48L2RlZnM+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9ImZMb2dvX1doaXRlIiBmaWxsPSIjRkZGRkZFIj4gICAgICAgICAgICA8cGF0aCBkPSJNOTY3LjQ4NCwwIEw1Ni41MTcsMCBDMjUuMzA0LDAgMCwyNS4zMDQgMCw1Ni41MTcgTDAsOTY3LjQ4MyBDMCw5OTguNjk0IDI1LjI5NywxMDI0IDU2LjUyMiwxMDI0IEw1NDcsMTAyNCBMNTQ3LDYyOCBMNDE0LDYyOCBMNDE0LDQ3MyBMNTQ3LDQ3MyBMNTQ3LDM1OS4wMjkgQzU0NywyMjYuNzY3IDYyNy43NzMsMTU0Ljc0NyA3NDUuNzU2LDE1NC43NDcgQzgwMi4yNjksMTU0Ljc0NyA4NTAuODQyLDE1OC45NTUgODY1LDE2MC44MzYgTDg2NSwyOTkgTDc4My4zODQsMjk5LjAzNyBDNzE5LjM5MSwyOTkuMDM3IDcwNywzMjkuNTI5IDcwNywzNzQuMjczIEw3MDcsNDczIEw4NjAuNDg3LDQ3MyBMODQwLjUwMSw2MjggTDcwNyw2MjggTDcwNywxMDI0IEw5NjcuNDg0LDEwMjQgQzk5OC42OTcsMTAyNCAxMDI0LDk5OC42OTcgMTAyNCw5NjcuNDg0IEwxMDI0LDU2LjUxNSBDMTAyNCwyNS4zMDMgOTk4LjY5NywwIDk2Ny40ODQsMCIgaWQ9IkZpbGwtMSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+);\n\t\t}\n\n\t\t& .ck-media__placeholder__url__text {\n\t\t\tcolor: hsl(220, 100%, 90%);\n\n\t\t\t&:hover {\n\t\t\t\tcolor: hsl(0, 0%, 100%);\n\t\t\t}\n\t\t}\n\t}\n\n\t&[data-oembed-url*=\"instagram.com\"] .ck-media__placeholder {\n\t\tbackground: linear-gradient(-135deg, hsl(246, 100%, 39%), hsl(302, 100%, 36%), hsl(0, 100%, 48%));\n\n\t\t& .ck-media__placeholder__icon {\n\t\t\tbackground-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI1MDRweCIgaGVpZ2h0PSI1MDRweCIgdmlld0JveD0iMCAwIDUwNCA1MDQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+Z2x5cGgtbG9nb19NYXkyMDE2PC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPiAgICAgICAgPHBvbHlnb24gaWQ9InBhdGgtMSIgcG9pbnRzPSIwIDAuMTU5IDUwMy44NDEgMC4xNTkgNTAzLjg0MSA1MDMuOTQgMCA1MDMuOTQiPjwvcG9seWdvbj4gICAgPC9kZWZzPiAgICA8ZyBpZD0iZ2x5cGgtbG9nb19NYXkyMDE2IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJHcm91cC0zIj4gICAgICAgICAgICA8bWFzayBpZD0ibWFzay0yIiBmaWxsPSJ3aGl0ZSI+ICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+ICAgICAgICAgICAgPC9tYXNrPiAgICAgICAgICAgIDxnIGlkPSJDbGlwLTIiPjwvZz4gICAgICAgICAgICA8cGF0aCBkPSJNMjUxLjkyMSwwLjE1OSBDMTgzLjUwMywwLjE1OSAxNzQuOTI0LDAuNDQ5IDE0OC4wNTQsMS42NzUgQzEyMS4yNCwyLjg5OCAxMDIuOTI3LDcuMTU3IDg2LjkwMywxMy4zODUgQzcwLjMzNywxOS44MjIgNTYuMjg4LDI4LjQzNiA0Mi4yODIsNDIuNDQxIEMyOC4yNzcsNTYuNDQ3IDE5LjY2Myw3MC40OTYgMTMuMjI2LDg3LjA2MiBDNi45OTgsMTAzLjA4NiAyLjczOSwxMjEuMzk5IDEuNTE2LDE0OC4yMTMgQzAuMjksMTc1LjA4MyAwLDE4My42NjIgMCwyNTIuMDggQzAsMzIwLjQ5NyAwLjI5LDMyOS4wNzYgMS41MTYsMzU1Ljk0NiBDMi43MzksMzgyLjc2IDYuOTk4LDQwMS4wNzMgMTMuMjI2LDQxNy4wOTcgQzE5LjY2Myw0MzMuNjYzIDI4LjI3Nyw0NDcuNzEyIDQyLjI4Miw0NjEuNzE4IEM1Ni4yODgsNDc1LjcyMyA3MC4zMzcsNDg0LjMzNyA4Ni45MDMsNDkwLjc3NSBDMTAyLjkyNyw0OTcuMDAyIDEyMS4yNCw1MDEuMjYxIDE0OC4wNTQsNTAyLjQ4NCBDMTc0LjkyNCw1MDMuNzEgMTgzLjUwMyw1MDQgMjUxLjkyMSw1MDQgQzMyMC4zMzgsNTA0IDMyOC45MTcsNTAzLjcxIDM1NS43ODcsNTAyLjQ4NCBDMzgyLjYwMSw1MDEuMjYxIDQwMC45MTQsNDk3LjAwMiA0MTYuOTM4LDQ5MC43NzUgQzQzMy41MDQsNDg0LjMzNyA0NDcuNTUzLDQ3NS43MjMgNDYxLjU1OSw0NjEuNzE4IEM0NzUuNTY0LDQ0Ny43MTIgNDg0LjE3OCw0MzMuNjYzIDQ5MC42MTYsNDE3LjA5NyBDNDk2Ljg0Myw0MDEuMDczIDUwMS4xMDIsMzgyLjc2IDUwMi4zMjUsMzU1Ljk0NiBDNTAzLjU1MSwzMjkuMDc2IDUwMy44NDEsMzIwLjQ5NyA1MDMuODQxLDI1Mi4wOCBDNTAzLjg0MSwxODMuNjYyIDUwMy41NTEsMTc1LjA4MyA1MDIuMzI1LDE0OC4yMTMgQzUwMS4xMDIsMTIxLjM5OSA0OTYuODQzLDEwMy4wODYgNDkwLjYxNiw4Ny4wNjIgQzQ4NC4xNzgsNzAuNDk2IDQ3NS41NjQsNTYuNDQ3IDQ2MS41NTksNDIuNDQxIEM0NDcuNTUzLDI4LjQzNiA0MzMuNTA0LDE5LjgyMiA0MTYuOTM4LDEzLjM4NSBDNDAwLjkxNCw3LjE1NyAzODIuNjAxLDIuODk4IDM1NS43ODcsMS42NzUgQzMyOC45MTcsMC40NDkgMzIwLjMzOCwwLjE1OSAyNTEuOTIxLDAuMTU5IFogTTI1MS45MjEsNDUuNTUgQzMxOS4xODYsNDUuNTUgMzI3LjE1NCw0NS44MDcgMzUzLjcxOCw0Ny4wMTkgQzM3OC4yOCw0OC4xMzkgMzkxLjYxOSw1Mi4yNDMgNDAwLjQ5Niw1NS42OTMgQzQxMi4yNTUsNjAuMjYzIDQyMC42NDcsNjUuNzIyIDQyOS40NjIsNzQuNTM4IEM0MzguMjc4LDgzLjM1MyA0NDMuNzM3LDkxLjc0NSA0NDguMzA3LDEwMy41MDQgQzQ1MS43NTcsMTEyLjM4MSA0NTUuODYxLDEyNS43MiA0NTYuOTgxLDE1MC4yODIgQzQ1OC4xOTMsMTc2Ljg0NiA0NTguNDUsMTg0LjgxNCA0NTguNDUsMjUyLjA4IEM0NTguNDUsMzE5LjM0NSA0NTguMTkzLDMyNy4zMTMgNDU2Ljk4MSwzNTMuODc3IEM0NTUuODYxLDM3OC40MzkgNDUxLjc1NywzOTEuNzc4IDQ0OC4zMDcsNDAwLjY1NSBDNDQzLjczNyw0MTIuNDE0IDQzOC4yNzgsNDIwLjgwNiA0MjkuNDYyLDQyOS42MjEgQzQyMC42NDcsNDM4LjQzNyA0MTIuMjU1LDQ0My44OTYgNDAwLjQ5Niw0NDguNDY2IEMzOTEuNjE5LDQ1MS45MTYgMzc4LjI4LDQ1Ni4wMiAzNTMuNzE4LDQ1Ny4xNCBDMzI3LjE1OCw0NTguMzUyIDMxOS4xOTEsNDU4LjYwOSAyNTEuOTIxLDQ1OC42MDkgQzE4NC42NSw0NTguNjA5IDE3Ni42ODQsNDU4LjM1MiAxNTAuMTIzLDQ1Ny4xNCBDMTI1LjU2MSw0NTYuMDIgMTEyLjIyMiw0NTEuOTE2IDEwMy4zNDUsNDQ4LjQ2NiBDOTEuNTg2LDQ0My44OTYgODMuMTk0LDQzOC40MzcgNzQuMzc5LDQyOS42MjEgQzY1LjU2NCw0MjAuODA2IDYwLjEwNCw0MTIuNDE0IDU1LjUzNCw0MDAuNjU1IEM1Mi4wODQsMzkxLjc3OCA0Ny45OCwzNzguNDM5IDQ2Ljg2LDM1My44NzcgQzQ1LjY0OCwzMjcuMzEzIDQ1LjM5MSwzMTkuMzQ1IDQ1LjM5MSwyNTIuMDggQzQ1LjM5MSwxODQuODE0IDQ1LjY0OCwxNzYuODQ2IDQ2Ljg2LDE1MC4yODIgQzQ3Ljk4LDEyNS43MiA1Mi4wODQsMTEyLjM4MSA1NS41MzQsMTAzLjUwNCBDNjAuMTA0LDkxLjc0NSA2NS41NjMsODMuMzUzIDc0LjM3OSw3NC41MzggQzgzLjE5NCw2NS43MjIgOTEuNTg2LDYwLjI2MyAxMDMuMzQ1LDU1LjY5MyBDMTEyLjIyMiw1Mi4yNDMgMTI1LjU2MSw0OC4xMzkgMTUwLjEyMyw0Ny4wMTkgQzE3Ni42ODcsNDUuODA3IDE4NC42NTUsNDUuNTUgMjUxLjkyMSw0NS41NSBaIiBpZD0iRmlsbC0xIiBmaWxsPSIjRkZGRkZGIiBtYXNrPSJ1cmwoI21hc2stMikiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgICAgIDxwYXRoIGQ9Ik0yNTEuOTIxLDMzNi4wNTMgQzIwNS41NDMsMzM2LjA1MyAxNjcuOTQ3LDI5OC40NTcgMTY3Ljk0NywyNTIuMDggQzE2Ny45NDcsMjA1LjcwMiAyMDUuNTQzLDE2OC4xMDYgMjUxLjkyMSwxNjguMTA2IEMyOTguMjk4LDE2OC4xMDYgMzM1Ljg5NCwyMDUuNzAyIDMzNS44OTQsMjUyLjA4IEMzMzUuODk0LDI5OC40NTcgMjk4LjI5OCwzMzYuMDUzIDI1MS45MjEsMzM2LjA1MyBaIE0yNTEuOTIxLDEyMi43MTUgQzE4MC40NzQsMTIyLjcxNSAxMjIuNTU2LDE4MC42MzMgMTIyLjU1NiwyNTIuMDggQzEyMi41NTYsMzIzLjUyNiAxODAuNDc0LDM4MS40NDQgMjUxLjkyMSwzODEuNDQ0IEMzMjMuMzY3LDM4MS40NDQgMzgxLjI4NSwzMjMuNTI2IDM4MS4yODUsMjUyLjA4IEMzODEuMjg1LDE4MC42MzMgMzIzLjM2NywxMjIuNzE1IDI1MS45MjEsMTIyLjcxNSBaIiBpZD0iRmlsbC00IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgICAgICA8cGF0aCBkPSJNNDE2LjYyNywxMTcuNjA0IEM0MTYuNjI3LDEzNC4zIDQwMy4wOTIsMTQ3LjgzNCAzODYuMzk2LDE0Ny44MzQgQzM2OS43MDEsMTQ3LjgzNCAzNTYuMTY2LDEzNC4zIDM1Ni4xNjYsMTE3LjYwNCBDMzU2LjE2NiwxMDAuOTA4IDM2OS43MDEsODcuMzczIDM4Ni4zOTYsODcuMzczIEM0MDMuMDkyLDg3LjM3MyA0MTYuNjI3LDEwMC45MDggNDE2LjYyNywxMTcuNjA0IiBpZD0iRmlsbC01IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgIDwvZz48L3N2Zz4=);\n\t\t}\n\n\t\t& .ck-media__placeholder__url__text {\n\t\t\tcolor: hsl(302, 100%, 94%);\n\n\t\t\t&:hover {\n\t\t\t\tcolor: hsl(0, 0%, 100%);\n\t\t\t}\n\t\t}\n\t}\n\n\t&[data-oembed-url*=\"twitter.com\"] .ck.ck-media__placeholder {\n\t\t/* Use gradient to contrast with focused widget (ckeditor/ckeditor5-media-embed#22). */\n\t\tbackground: linear-gradient(to right, hsl(201, 85%, 70%), hsl(201, 85%, 35%));\n\n\t\t& .ck-media__placeholder__icon {\n\t\t\tbackground-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IldoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQwMCA0MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5zdDB7ZmlsbDojRkZGRkZGO308L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAsMjAwYzAsMTEwLjUtODkuNSwyMDAtMjAwLDIwMFMwLDMxMC41LDAsMjAwUzg5LjUsMCwyMDAsMFM0MDAsODkuNSw0MDAsMjAweiBNMTYzLjQsMzA1LjVjODguNywwLDEzNy4yLTczLjUsMTM3LjItMTM3LjJjMC0yLjEsMC00LjItMC4xLTYuMmM5LjQtNi44LDE3LjYtMTUuMywyNC4xLTI1Yy04LjYsMy44LTE3LjksNi40LTI3LjcsNy42YzEwLTYsMTcuNi0xNS40LDIxLjItMjYuN2MtOS4zLDUuNS0xOS42LDkuNS0zMC42LDExLjdjLTguOC05LjQtMjEuMy0xNS4yLTM1LjItMTUuMmMtMjYuNiwwLTQ4LjIsMjEuNi00OC4yLDQ4LjJjMCwzLjgsMC40LDcuNSwxLjMsMTFjLTQwLjEtMi03NS42LTIxLjItOTkuNC01MC40Yy00LjEsNy4xLTYuNSwxNS40LTYuNSwyNC4yYzAsMTYuNyw4LjUsMzEuNSwyMS41LDQwLjFjLTcuOS0wLjItMTUuMy0yLjQtMjEuOC02YzAsMC4yLDAsMC40LDAsMC42YzAsMjMuNCwxNi42LDQyLjgsMzguNyw0Ny4zYy00LDEuMS04LjMsMS43LTEyLjcsMS43Yy0zLjEsMC02LjEtMC4zLTkuMS0wLjljNi4xLDE5LjIsMjMuOSwzMy4xLDQ1LDMzLjVjLTE2LjUsMTIuOS0zNy4zLDIwLjYtNTkuOSwyMC42Yy0zLjksMC03LjctMC4yLTExLjUtMC43QzExMC44LDI5Ny41LDEzNi4yLDMwNS41LDE2My40LDMwNS41Ii8+PC9zdmc+);\n\t\t}\n\n\t\t& .ck-media__placeholder__url__text {\n\t\t\tcolor: hsl(201, 100%, 86%);\n\n\t\t\t&:hover {\n\t\t\t\tcolor: hsl(0, 0%, 100%);\n\t\t\t}\n\t\t}\n\t}\n\n\t&[data-oembed-url*=\"twitter.com\"],\n\t&[data-oembed-url*=\"google.com/maps\"],\n\t&[data-oembed-url*=\"goo.gl/maps\"],\n\t&[data-oembed-url*=\"maps.google.com\"],\n\t&[data-oembed-url*=\"maps.app.goo.gl\"],\n\t&[data-oembed-url*=\"facebook.com\"],\n\t&[data-oembed-url*=\"instagram.com\"] {\n\t\t& .ck-media__placeholder__icon * {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n/* Preserve the historical 300px default size for unresized Spotify embeds (backward\n compatibility). Set on the figure so the selection outline hugs the embed; an inline\n `style=\"width: X%\"` from resize beats this rule.\n Spotify's responsive breakpoint is 280px — below it the embed's internal layout\n switches and the iframe's declared aspect ratio no longer matches. The 286px min-width\n reserves 3px per side for the widget border that track changes suggestion markers\n (insertion, deletion, formatInline) paint on the figure, so the iframe interior stays\n at or above 280px even with an active marker. */\n.ck-content .media:has(> div[data-oembed-url*=\"open.spotify.com\"]) {\n\twidth: 300px;\n\tmin-width: 286px;\n}\n\n/* Disable all mouse interaction as long as the editor is not read–only.\n https://github.com/ckeditor/ckeditor5-media-embed/issues/58 */\n\n.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>*:not(.ck-media__placeholder) {\n\tpointer-events: none;\n}\n\n/* Disable all mouse interaction when the widget is not selected (e.g. to avoid opening links by accident).\n https://github.com/ckeditor/ckeditor5-media-embed/issues/18 */\n\n.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder {\n\tpointer-events: none;\n}","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-autocomplete {\n\t& > .ck-search__results {\n\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\t\tmax-height: 200px;\n\t\toverflow-y: auto;\n\t\tbackground: var(--ck-color-base-background);\n\t\tborder: 1px solid var(--ck-color-dropdown-panel-border);\n\t\tmin-width: auto;\n\t\tposition: absolute;\n\n\t\t&.ck-search__results_n {\n\t\t\tborder-bottom-left-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\n\t\t\t/* Prevent duplicated borders between the input and the results pane. */\n\t\t\tmargin-bottom: -1px;\n\t\t\tbottom: 100%;\n\t\t}\n\n\t\t&.ck-search__results_s {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-top-right-radius: 0;\n\n\t\t\t/* Prevent duplicated borders between the input and the results pane. */\n\t\t\tmargin-top: -1px;\n\t\t\ttop: 100%;\n\t\t\tbottom: auto;\n\t\t}\n\t\tz-index: var(--ck-z-panel)\n\t}\n\tposition: relative\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-media-embed-custom-resize-form-width: 340px;\n}\n\n@media screen and (max-width: 600px) {\n\t:root {\n\t\t--ck-media-embed-custom-resize-form-width: 300px;\n\t}\n}\n\n.ck.ck-media-embed-custom-resize-form {\n\t&.ck-responsive-form {\n\t\twidth: var(--ck-media-embed-custom-resize-form-width);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t/* Side spacing between a floated media and surrounding text. */\n\t--ck-content-media-style-spacing: 1.5em;\n}\n\n.ck-content {\n\t/* `clear: none` lets multiple floats stack horizontally. `width: 100%` keeps float\n\t from collapsing the iframe to its 300×150 default; resize's inline `style=\"width: …\"`\n\t and Spotify's `:has()` rule in mediaembedediting.css both win on specificity. */\n\t& .media.media-style-align-left,\n\t& .media.media-style-align-right {\n\t\tclear: none;\n\t\twidth: 100%;\n\t}\n\n\t& .media.media-style-align-left {\n\t\tfloat: left;\n\t\tmargin-right: var(--ck-content-media-style-spacing);\n\t}\n\n\t& .media.media-style-align-right {\n\t\tfloat: right;\n\t\tmargin-left: var(--ck-content-media-style-spacing);\n\t}\n\n\t/* Margin-auto shifts a width-constrained figure within its line — a no-op for full-width\n\t figures, visible once a width constraint applies (resize's inline width, or Spotify's\n\t backward-compat 300px). */\n\t& .media.media-style-block-align-left {\n\t\tmargin-left: 0;\n\t\tmargin-right: auto;\n\t}\n\n\t& .media.media-style-block-align-right {\n\t\tmargin-left: auto;\n\t\tmargin-right: 0;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-balloon-panel.ck-tooltip {\n\t--ck-balloon-border-width: 0px;\n\t--ck-balloon-arrow-offset: 0px;\n\t--ck-balloon-arrow-half-width: 4px;\n\t--ck-balloon-arrow-height: 4px;\n\t--ck-tooltip-text-padding: 4px;\n\t--ck-color-panel-background: var(--ck-color-tooltip-background);\n\n\tpadding: 0 var(--ck-spacing-medium);\n\n\t/* Reset balloon panel styles */\n\tbox-shadow: none;\n\t-webkit-user-select: none;\n\tuser-select: none;\n\n\t& .ck-tooltip__text {\n\t\tfont-size: .9em;\n\t\tline-height: 1.5;\n\t\tcolor: var(--ck-color-tooltip-text);\n\t}\n\n\t&.ck-tooltip_multi-line .ck-tooltip__text {\n\t\twhite-space: break-spaces;\n\t\tdisplay: inline-block;\n\t\tpadding: var(--ck-tooltip-text-padding) 0;\n\t\tmax-width: 200px;\n\t}\n\n\t/* Hide the default shadow of the .ck-balloon-panel tip */\n\t&::before {\n\t\tdisplay: none;\n\t}\n\n\tz-index: calc( var(--ck-z-dialog) + 100 )\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-content-highlight-marker-yellow: hsl(60, 97%, 73%);\n\t--ck-content-highlight-marker-green: hsl(120, 93%, 68%);\n\t--ck-content-highlight-marker-pink: hsl(345, 96%, 73%);\n\t--ck-content-highlight-marker-blue: hsl(201, 97%, 72%);\n\t--ck-content-highlight-pen-red: hsl(0, 85%, 49%);\n\t--ck-content-highlight-pen-green: hsl(112, 100%, 27%);\n}\n\n.ck-content .marker-yellow {\n\tbackground-color: var(--ck-content-highlight-marker-yellow);\n}\n\n.ck-content .marker-green {\n\tbackground-color: var(--ck-content-highlight-marker-green);\n}\n\n.ck-content .marker-pink {\n\tbackground-color: var(--ck-content-highlight-marker-pink);\n}\n\n.ck-content .marker-blue {\n\tbackground-color: var(--ck-content-highlight-marker-blue);\n}\n\n.ck-content .pen-red {\n\tcolor: var(--ck-content-highlight-pen-red);\n\n\t/* Override default yellow background of `` from user agent stylesheet */\n\tbackground-color: transparent;\n}\n\n.ck-content .pen-green {\n\tcolor: var(--ck-content-highlight-pen-green);\n\n\t/* Override default yellow background of `` from user agent stylesheet */\n\tbackground-color: transparent;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-mention-list-max-height: 300px;\n}\n\n.ck.ck-mentions {\n\tmax-height: var(--ck-mention-list-max-height);\n\n\toverflow-y: auto;\n\n\t/* Prevent unnecessary horizontal scrollbar in Safari\n\thttps://github.com/ckeditor/ckeditor5-mention/issues/41 */\n\toverflow-x: hidden;\n\n\toverscroll-behavior: contain;\n\n\t/* Prevent unnecessary vertical scrollbar in Safari\n\thttps://github.com/ckeditor/ckeditor5-mention/issues/41 */\n\t& > .ck-list__item {\n\t\toverflow: hidden;\n\t\tflex-shrink: 0;\n\t}\n}\n\ndiv.ck.ck-balloon-panel.ck-mention-balloon {\n\tz-index: calc( var( --ck-z-dialog ) + 1 );\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-minimap-tracker-background: 208, 0%, 51%;\n\t--ck-color-minimap-iframe-outline: hsl(0deg 0% 75%);\n\t--ck-color-minimap-iframe-shadow: hsl(0deg 0% 0% / 11%);\n\t--ck-color-minimap-progress-background: hsl(0,0%,40%);\n}\n\n.ck.ck-minimap {\n\tposition: absolute;\n\tuser-select: none;\n\tbackground: var(--ck-color-base-background);\n\n\t&,\n\t& iframe {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t& iframe {\n\t\tborder: 0;\n\t\tpointer-events: none;\n\t\tposition: relative;\n\t\toutline: 1px solid var(--ck-color-minimap-iframe-outline);\n\t\tbox-shadow: 0 2px 5px var(--ck-color-minimap-iframe-shadow);\n\t\tmargin: 0;\n\t}\n\n\t& .ck.ck-minimap__position-tracker {\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\ttop: 0;\n\t\tbackground: hsla( var(--ck-color-minimap-tracker-background), .2 );\n\t\tz-index: 1;\n\t\ttransition: background 100ms ease-in-out;\n\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\ttransition: none;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground:hsla( var(--ck-color-minimap-tracker-background), .3 );\n\t\t}\n\n\t\t&.ck-minimap__position-tracker_dragging,\n\t\t&.ck-minimap__position-tracker_dragging:hover {\n\t\t\tbackground:hsla( var(--ck-color-minimap-tracker-background), .4 );\n\n\t\t\t&::after {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\n\t\t&::after {\n\t\t\tcontent: attr(data-progress) \"%\";\n\t\t\tposition: absolute;\n\t\t\ttop: 5px;\n\t\t\tright: 5px;\n\t\t\tbackground: var(--ck-color-minimap-progress-background);\n\t\t\tcolor: var(--ck-color-base-background);\n\t\t\tborder: 1px solid var(--ck-color-base-background);\n\t\t\tpadding: 2px 4px;\n\t\t\tfont-size: 10px;\n\t\t\tborder-radius: 3px;\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 100ms ease-in-out;\n\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\ttransition: none;\n\t\t\t}\n\t\t}\n\t}\n}\n\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content .page-break {\n\tposition: relative;\n\tclear: both;\n\tpadding: 5px 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\t&::after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tborder-bottom: 2px dashed hsl(0, 0%, 77%);\n\t\twidth: 100%;\n\t}\n}\n\n.ck-content .page-break__label {\n\tposition: relative;\n\tz-index: 1;\n\tpadding: .3em .6em;\n\tdisplay: block;\n\ttext-transform: uppercase;\n\tborder: 1px solid hsl(0, 0%, 77%);\n\tborder-radius: 2px;\n\tfont-size: 0.75em;\n\tfont-weight: bold;\n\tcolor: hsl(0, 0%, 20%);\n\tbackground: hsl(0, 0%, 100%);\n\tbox-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15);\n\n\t/* Disable the possibility to select the label text by the user. */\n\t-webkit-user-select: none;\n\tuser-select: none;\n}\n\n/* Do not show the page break element inside the print preview window. */\n@media print {\n\t.ck-content .page-break {\n\t\tpadding: 0;\n\n\t\t&::after {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t/*\n\t * From time to time placing page-break directly after a block element with margin causes appending a new blank page in pagination mode.\n\t * Removing margin-bottom from the block element fixes that issue and the margin is not being moved to the next blank page.\n\t *\n\t * Keep this in sync with the pagination plugins.\n\t */\n\t.ck-content *:has(+ .page-break) {\n\t\tmargin-bottom: 0;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-restricted-editing-exception-background: hsla(31, 100%, 65%, .2);\n\t--ck-color-restricted-editing-exception-hover-background: hsla(31, 100%, 65%, .35);\n\t--ck-color-restricted-editing-exception-brackets: hsla(31, 100%, 40%, .4);\n\t--ck-color-restricted-editing-selected-exception-background: hsla(31, 100%, 65%, .5);\n\t--ck-color-restricted-editing-selected-exception-brackets: hsla(31, 100%, 40%, .6);\n}\n\n.ck-editor__editable .restricted-editing-exception {\n\ttransition: .2s ease-in-out background;\n\tbackground-color: var(--ck-color-restricted-editing-exception-background);\n\tborder: 1px solid;\n\tborder-image: linear-gradient(\n\t\tto right,\n\t\tvar(--ck-color-restricted-editing-exception-brackets) 0%,\n\t\tvar(--ck-color-restricted-editing-exception-brackets) 5px,\n\t\thsla(0, 0%, 0%, 0) 6px,\n\t\thsla(0, 0%, 0%, 0) calc(100% - 6px),\n\t\tvar(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),\n\t\tvar(--ck-color-restricted-editing-exception-brackets) 100%\n\t) 1;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&.restricted-editing-exception_selected {\n\t\tbackground-color: var(--ck-color-restricted-editing-selected-exception-background);\n\t\tborder-image: linear-gradient(\n\t\t\tto right,\n\t\t\tvar(--ck-color-restricted-editing-selected-exception-brackets) 0%,\n\t\t\tvar(--ck-color-restricted-editing-selected-exception-brackets) 5px,\n\t\t\tvar(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),\n\t\t\tvar(--ck-color-restricted-editing-selected-exception-brackets) 100%\n\t\t) 1;\n\t}\n\n\t&.restricted-editing-exception_collapsed {\n\t\t/* Empty exception should have the same width as exception with at least 1 char */\n\t\tpadding-left: 1ch;\n\t}\n}\n\n.ck-restricted-editing_mode_restricted {\n\tcursor: default;\n\n\t/* We also have to override all elements inside the restricted editable to prevent cursor switching between default and text\n\tduring the pointer movement. */\n\t& * {\n\t\tcursor: default;\n\t}\n\n\t& .restricted-editing-exception {\n\t\tcursor: text;\n\n\t\t& * {\n\t\t\tcursor: text;\n\t\t}\n\n\t\t&:hover {\n\t\t\tbackground: var(--ck-color-restricted-editing-exception-hover-background);\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-show-blocks-border-color: hsl(0, 0%, 46%);\n}\n\n.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) {\n\taddress {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-address-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-address-rtl);\n\t}\n\n\taside {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-aside-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-aside-rtl);\n\t}\n\n\tblockquote {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-blockquote-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-blockquote-rtl);\n\t}\n\n\tdetails {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-details-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-details-rtl);\n\t}\n\n\tdiv:not(.ck-widget, .ck-widget *) {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-div-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-div-rtl);\n\t}\n\n\tfooter {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-footer-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-footer-rtl);\n\t}\n\n\th1 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h1-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h1-rtl);\n\t}\n\n\th2 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h2-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h2-rtl);\n\t}\n\n\th3 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h3-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h3-rtl);\n\t}\n\n\th4 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h4-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h4-rtl);\n\t}\n\n\th5 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h5-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h5-rtl);\n\t}\n\n\th6 {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-h6-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-h6-rtl);\n\t}\n\n\theader {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-header-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-header-rtl);\n\t}\n\n\tmain {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-main-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-main-rtl);\n\t}\n\n\tnav {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-nav-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-nav-rtl);\n\t}\n\n\tpre {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-pre-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-pre-rtl);\n\t}\n\n\tol {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-ol-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-ol-rtl);\n\t}\n\n\tul {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-ul-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-ul-rtl);\n\t}\n\n\tp {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-p-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-p-rtl);\n\t}\n\n\tsection {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-section-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-section-rtl);\n\t}\n\n\t:where(figure.image, figure.table) figcaption {\n\t\t--ck-show-blocks-label-ltr: var(--ck-show-blocks-label-figcaption-ltr);\n\t\t--ck-show-blocks-label-rtl: var(--ck-show-blocks-label-figcaption-rtl);\n\t}\n\n\t:where(\n\t\taddress,\n\t\taside,\n\t\tblockquote,\n\t\tdetails,\n\t\tdiv:not(.ck-widget, .ck-widget *),\n\t\tfooter,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6,\n\t\theader,\n\t\tmain,\n\t\tnav,\n\t\tpre,\n\t\tol,\n\t\tul,\n\t\tp,\n\t\tsection,\n\t\t:where(figure.image, figure.table) figcaption\n\t) {\n\t\tbackground-repeat: no-repeat;\n\t\tpadding-top: 15px;\n\t}\n\n\t:where(\n\t\taddress,\n\t\taside,\n\t\tblockquote,\n\t\tdetails,\n\t\tdiv:not(.ck-widget, .ck-widget *),\n\t\tfooter,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6,\n\t\theader,\n\t\tmain,\n\t\tnav,\n\t\tpre,\n\t\tol,\n\t\tul,\n\t\tp,\n\t\tsection,\n\t\t:where(figure.image, figure.table) figcaption\n\t):where(:not(.ck-widget_selected):not(.ck-widget:hover)) {\n\t\toutline: 1px dashed var(--ck-show-blocks-border-color);\n\t}\n\n\t/*\n\t * `:dir()` resolves the effective direction of the editable, so this also works when the `dir`\n\t * attribute is inherited from an ancestor wrapper.\n\t * See: https://github.com/ckeditor/ckeditor5/issues/15969.\n\t */\n\t&:dir(ltr) :where(\n\t\taddress,\n\t\taside,\n\t\tblockquote,\n\t\tdetails,\n\t\tdiv:not(.ck-widget, .ck-widget *),\n\t\tfooter,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6,\n\t\theader,\n\t\tmain,\n\t\tnav,\n\t\tpre,\n\t\tol,\n\t\tul,\n\t\tp,\n\t\tsection,\n\t\t:where(figure.image, figure.table) figcaption\n\t) {\n\t\tbackground-image: var(--ck-show-blocks-label-ltr);\n\t\tbackground-position: 1px 1px;\n\t}\n\n\t&:dir(rtl) :where(\n\t\taddress,\n\t\taside,\n\t\tblockquote,\n\t\tdetails,\n\t\tdiv:not(.ck-widget, .ck-widget *),\n\t\tfooter,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6,\n\t\theader,\n\t\tmain,\n\t\tnav,\n\t\tpre,\n\t\tol,\n\t\tul,\n\t\tp,\n\t\tsection,\n\t\t:where(figure.image, figure.table) figcaption\n\t) {\n\t\tbackground-image: var(--ck-show-blocks-label-rtl);\n\t\tbackground-position: calc(100% - 1px) 1px;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-source-editing-area {\n\tposition: relative;\n\toverflow: hidden;\n}\n\n.ck-source-editing-area::after,\n.ck-source-editing-area textarea {\n\tpadding: var(--ck-spacing-large);\n\tmargin: 0;\n\tborder: 1px solid transparent;\n\tline-height: var(--ck-line-height-base);\n\tfont-size: var(--ck-font-size-normal);\n\tfont-family: monospace;\n\twhite-space: pre-wrap;\n}\n\n.ck-source-editing-area::after {\n\tcontent: attr(data-value) \" \";\n\tvisibility: hidden;\n\tdisplay: block;\n}\n\n.ck-source-editing-area textarea {\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tresize: none;\n\toutline: none;\n\toverflow: hidden;\n\tbox-sizing: border-box;\n\tborder-color: var(--ck-color-base-border);\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 0;\n\n\t&:not([readonly]):focus {\n\t\toutline: none;\n\t\tborder: var(--ck-focus-ring);\n\t\tbox-shadow: var(--ck-inner-shadow), 0 0;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-special-characters-navigation {\n\n\t& > .ck-label {\n\t\tmax-width: 160px;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t& > .ck-dropdown .ck-dropdown__panel {\n\t\t/* There could be dozens of categories available. Use scroll to prevent a 10e6px dropdown. */\n\t\tmax-height: 250px;\n\t\toverflow-y: auto;\n\t\toverflow-x: hidden;\n\t}\n\n\t@media screen and (max-width: 600px) {\n\t\tmax-width: 190px;\n\n\t\t& > .ck-form__header__label {\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t}\n\t}\n}\n\n.ck.ck-special-characters {\n\t& > .ck-dialog__content > div {\n\t\twidth: 350px;\n\t\tmax-width: 100%;\n\t\theight: 100%;\n\n\t\tdisplay: grid;\n\t\tgrid-column-gap: 0px;\n\t\tgrid-row-gap: 0px;\n\t\tgrid-template-columns: 1fr;\n\t\tgrid-template-rows: auto 1fr auto;\n\n\t\t& > .ck-character-categories {\n\t\t\tgrid-area: 1 / 1 / 2 / 2;\n\t\t\tpadding: var(--ck-spacing-medium) var(--ck-spacing-large);\n\n\t\t\t& > .ck-labeled-field-view {\n\t\t\t\tpadding-top: var(--ck-spacing-standard);\n\t\t\t\twidth: 100%;\n\n\t\t\t\t& .ck.ck-labeled-field-view__status {\n\t\t\t\t\tbackground: var(--ck-color-base-error);\n\t\t\t\t\tcolor: var(--ck-color-base-background);\n\t\t\t\t\tpadding: var(--ck-spacing-small) var(--ck-spacing-medium);\n\t\t\t\t\tmin-width: var(--ck-table-properties-min-error-width);\n\t\t\t\t\ttext-align: center;\n\n\t\t\t\t\tanimation: ck-table-form-labeled-view-status-appear .15s ease both;\n\n\t\t\t\t\t/* The arrow pointing towards the field. */\n\t\t\t\t\t&::after {\n\t\t\t\t\t\tborder-color: transparent transparent var(--ck-color-base-error) transparent;\n\t\t\t\t\t\tborder-width: 0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);\n\t\t\t\t\t\tborder-style: solid;\n\t\t\t\t\t}\n\n\t\t\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\t\t\tanimation: none;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Hide the error balloon when the field is blurred. Makes the experience much more clear. */\n\t\t\t\t& .ck-input.ck-error:not(:focus) + .ck.ck-labeled-field-view__status {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t& > .ck-label {\n\t\t\t\t\tfont-size: var(--ck-font-size-tiny);\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.ck-dropdown {\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 100%;\n\n\t\t\t\t& > button {\n\t\t\t\t\t&:not(:focus) {\n\t\t\t\t\t\tborder: 1px solid var(--ck-color-base-border);\n\t\t\t\t\t}\n\n\t\t\t\t\t& > span {\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t& > .ck-character-grid {\n\t\t\tgrid-area: 2 / 1 / 3 / 2;\n\t\t\tmax-height: 200px;\n\t\t}\n\n\t\t& > .ck-character-info {\n\t\t\tgrid-area: 3 / 1 / 4 / 2;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-resizer-size: 10px;\n\n\t/* Set the resizer with a 50% offset. */\n\t--ck-resizer-offset: calc( ( var(--ck-resizer-size) / -2 ) - 2px);\n\t--ck-resizer-border-width: 1px;\n}\n\n.ck .ck-widget__resizer {\n\toutline: 1px solid var(--ck-color-resizer);\n\tdisplay: none;\n\tposition: absolute;\n\n\t/* The wrapper itself should not interfere with the pointer device, only the handles should. */\n\tpointer-events: none;\n\n\tleft: 0;\n\ttop: 0;\n}\n\n.ck .ck-widget__resizer__handle {\n\twidth: var(--ck-resizer-size);\n\theight: var(--ck-resizer-size);\n\tbackground: var(--ck-color-focus-border);\n\tborder: var(--ck-resizer-border-width) solid hsl(0, 0%, 100%);\n\tborder-radius: var(--ck-resizer-border-radius);\n\tposition: absolute;\n\n\t/* Resizers are the only UI elements that should interfere with a pointer device. */\n\tpointer-events: all;\n\n\t&.ck-widget__resizer__handle-top-left {\n\t\ttop: var(--ck-resizer-offset);\n\t\tleft: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-top-right {\n\t\ttop: var(--ck-resizer-offset);\n\t\tright: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-bottom-right {\n\t\tbottom: var(--ck-resizer-offset);\n\t\tright: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-bottom-left {\n\t\tbottom: var(--ck-resizer-offset);\n\t\tleft: var(--ck-resizer-offset);\n\t}\n\n\t&.ck-widget__resizer__handle-top-left,\n\t&.ck-widget__resizer__handle-bottom-right {\n\t\tcursor: nwse-resize;\n\t}\n\n\t&.ck-widget__resizer__handle-top-right,\n\t&.ck-widget__resizer__handle-bottom-left {\n\t\tcursor: nesw-resize;\n\t}\n}\n\n.ck .ck-widget_with-resizer {\n\t/* Make the widget wrapper a relative positioning container for the drag handle. */\n\tposition: relative;\n}\n\n.ck-focused .ck-widget_with-resizer.ck-widget_selected {\n\t& > .ck-widget__resizer {\n\t\tdisplay: block;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-character-info {\n\tpadding: var(--ck-spacing-small) var(--ck-spacing-large);\n\tborder-top: 1px solid var(--ck-color-base-border);\n\tdisplay: flex;\n\n\t& > * {\n\t\ttext-transform: uppercase;\n\t\tfont-size: var(--ck-font-size-small);\n\t}\n\n\t& .ck-character-info__name {\n\t\tmax-width: 280px;\n\t\ttext-overflow: ellipsis;\n\t\toverflow: hidden;\n\t}\n\n\t& .ck-character-info__code {\n\t\topacity: .6;\n\t}\n\tjustify-content: space-between\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-dropdown.ck-style-dropdown.ck-style-dropdown_multiple-active > .ck-button > .ck-button__label {\n\tfont-style: italic;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-style-panel-button-width: 120px;\n\t--ck-style-panel-button-height: 80px;\n\t--ck-style-panel-button-label-background: hsl(0, 0%, 94.1%);\n\t--ck-style-panel-button-hover-label-background: hsl(0, 0%, 92.1%);\n\t--ck-style-panel-button-hover-border-color: hsl(0, 0%, 70%);\n\t--ck-style-panel-columns: 3;\n}\n\n.ck.ck-style-panel .ck-style-grid {\n\trow-gap: var(--ck-spacing-large);\n\tcolumn-gap: var(--ck-spacing-large);\n\tdisplay: grid;\n\tgrid-template-columns: repeat(var(--ck-style-panel-columns),auto);\n\n\t& .ck-style-grid__button {\n\t\t--ck-color-button-default-hover-background: var(--ck-color-base-background);\n\t\t--ck-color-button-default-active-background: var(--ck-color-base-background);\n\n\t\tpadding: 0;\n\t\twidth: var(--ck-style-panel-button-width);\n\t\theight: var(--ck-style-panel-button-height);\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\n\t\t/* Let default .ck-button :focus styles apply */\n\t\t&:not(:focus) {\n\t\t\tborder: 1px solid var(--ck-color-base-border);\n\t\t}\n\n\t\t& .ck-button__label {\n\t\t\theight: 22px;\n\t\t\tline-height: 22px;\n\t\t\twidth: 100%;\n\t\t\tpadding: 0 var(--ck-spacing-medium);\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tflex-shrink: 0;\n\t\t}\n\n\t\t& .ck-style-grid__button__preview {\n\t\t\twidth: 100%;\n\t\t\toverflow: hidden;\n\t\t\topacity: .9;\n\n\t\t\tpadding: var(--ck-spacing-medium);\n\t\t\tbackground: var(--ck-color-base-background);\n\t\t\tborder: 2px solid var(--ck-color-base-background);\n\t\t\tdisplay: flex;\n\t\t\talign-content: center;\n\t\t\tjustify-content: flex-start;\n\t\t\talign-items: center;\n\t\t\tflex-grow: 1;\n\t\t\tflex-basis: 100%;\n\t\t}\n\n\t\t&.ck-disabled {\n\t\t\t--ck-color-button-default-disabled-background: var(--ck-color-base-foreground);\n\n\t\t\t/* Let default .ck-button :focus styles apply */\n\t\t\t&:not(:focus) {\n\t\t\t\tborder-color: var(--ck-style-panel-button-label-background);\n\t\t\t}\n\n\t\t\t& .ck-style-grid__button__preview {\n\t\t\t\topacity: .4;\n\n\t\t\t\tborder-color: var(--ck-color-base-foreground);\n\t\t\t\tfilter: saturate(.3);\n\t\t\t}\n\t\t}\n\n\t\t&.ck-on {\n\t\t\tborder-color: var(--ck-color-base-active);\n\n\t\t\t& .ck-button__label {\n\t\t\t\tbox-shadow: 0 -1px 0 var(--ck-color-base-active);\n\t\t\t\tz-index: 1; /* Stay on top of the preview with the shadow. */\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--ck-color-base-active-focus);\n\t\t\t}\n\t\t}\n\n\t\t&:not(.ck-on) {\n\t\t\t& .ck-button__label {\n\t\t\t\tbackground: var(--ck-style-panel-button-label-background);\n\t\t\t}\n\n\t\t\t&:hover .ck-button__label {\n\t\t\t\tbackground: var(--ck-style-panel-button-hover-label-background);\n\t\t\t}\n\t\t}\n\n\t\t&:hover:not(.ck-disabled):not(.ck-on) {\n\t\t\tborder-color: var(--ck-style-panel-button-hover-border-color);\n\n\t\t\t& .ck-style-grid__button__preview {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t\tflex-direction: column\n\t}\n\tjustify-content: start\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-style-panel .ck-style-panel__style-group {\n\t& > .ck-label {\n\t\tmargin: var(--ck-spacing-large) 0;\n\t}\n\n\t&:first-child {\n\t\t& > .ck-label {\n\t\t\tmargin-top: 0;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-style-panel-max-height: 470px;\n}\n\n.ck.ck-style-panel {\n\tpadding: var(--ck-spacing-large);\n\toverflow-y: auto;\n\tmax-height: var(--ck-style-panel-max-height);\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck-content {\n\t/* Ensure that table header text is aligned to the start by default. See https://github.com/ckeditor/ckeditor5/issues/19454. */\n\t& .table th {\n\t\ttext-align: start;\n\t}\n\n\t/* Text alignment of the table header should match the editor settings and override the native browser styling,\n\twhen content is available outside the editor. See https://github.com/ckeditor/ckeditor5/issues/6638. */\n\t&[dir=\"rtl\"] .table th {\n\t\ttext-align: right;\n\t}\n\n\t&[dir=\"ltr\"] .table th {\n\t\ttext-align: left;\n\t}\n\n\t& figure.table:not(.layout-table) {\n\t\tdisplay: table;\n\n\t\t& > table {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t}\n\n\t& .table:not(.layout-table) {\n\t\t/* Give the table widget some air and center it horizontally */\n\t\t/* The first value should be equal to --ck-spacing-large variable if used in the editor context\n\t\tto avoid the content jumping (See https://github.com/ckeditor/ckeditor5/issues/9825). */\n\t\tmargin: 0.9em auto;\n\t}\n\n\t& table.table:not(.layout-table),\n\t& figure.table:not(.layout-table) > table {\n\t\t/* The table cells should have slight borders */\n\t\tborder-collapse: collapse;\n\t\tborder-spacing: 0;\n\n\t\t/* The outer border of the table should be slightly darker than the inner lines.\n\t\tAlso see https://github.com/ckeditor/ckeditor5-table/issues/50. */\n\t\tborder: 1px double hsl(0, 0%, 70%);\n\n\t\t& > thead,\n\t\t& > tfoot,\n\t\t& > tbody {\n\t\t\t/* The linter is disabled here because linter is confused when resolving the `table.table:not(.layout-table)`\n\t\t\tand `figure.table:not(.layout-table) > table` selectors combined with below selectors.\n\t\t\tThere is no need to split it into two large structures with same code just to make linter happy. */\n\t\t\t& > tr {\n\t\t\t\t& > th {\n\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\tbackground: hsla(0, 0%, 0%, 5%);\n\t\t\t\t}\n\n\t\t\t\t& > td,\n\t\t\t\t& > th {\n\t\t\t\t\t/* Opinionated table content styling: prevents content from shifting\n\t\t\t\t\t * when Enter is pressed in the first cell.\n\t\t\t\t\t * See: https://github.com/ckeditor/ckeditor5/pull/18801\n\t\t\t\t\t */\n\t\t\t\t\t& > p:first-of-type {\n\t\t\t\t\t\tmargin-top: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Mirrors the rule above for the last paragraph to keep the\n\t\t\t\t\t * experience consistent with the first paragraph.\n\t\t\t\t\t *\n\t\t\t\t\t * Together, these rules prevent margins from appearing when a\n\t\t\t\t\t * bogus paragraph becomes a real paragraph after it receives line\n\t\t\t\t\t * height, text alignment, or other block style.\n\t\t\t\t\t *\n\t\t\t\t\t * See: https://github.com/ckeditor/ckeditor5/pull/18801\n\t\t\t\t\t */\n\t\t\t\t\t& > p:last-of-type {\n\t\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tmin-width: 2em;\n\t\t\t\t\tpadding: 0.4em;\n\n\t\t\t\t\t/* The border is inherited from .ck-editor__nested-editable styles, so theoretically it's not necessary here.\n\t\t\t\t\tHowever, the border is a content style, so it should use .ck-content (so it works outside the editor).\n\t\t\t\t\tHence, the duplication. See https://github.com/ckeditor/ckeditor5/issues/6314 */\n\t\t\t\t\tborder: 1px solid hsl(0, 0%, 75%);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n@media print {\n\t.ck-content figure.table {\n\t\t/**\n\t\t * Sometimes Chrome incorrectly calculates the height of the last table row and some\n\t\t * of the content overlaps the paragraph that is placed directly after the table. It affects\n\t\t * the column split mode pagination calculation which causes mismatch between the print mode and\n\t\t * the preview mode.\n\t\t *\n\t\t * This issue happens only if:\n\t\t *\n\t\t * \t* The table is inside a figure element.\n\t\t * \t* The table has `display: table` style set.\n\t\t * \t* The block element is placed directly after the table.\n\t\t */\n\t\t&:not(.layout-table) {\n\t\t\twidth: fit-content;\n\t\t\theight: fit-content;\n\t\t}\n\n\t\t/**\n\t\t * Expanding the table to the full height of the parent container is necessary because tables\n\t\t * are rendered inside
    elements, which is kinda buggy in table height calculation.\n\t\t * While setting `height: 100%` fixes the issue in the editing mode described here:\n\t\t * https://github.com/ckeditor/ckeditor5/issues/6186\n\t\t *\n\t\t * it's causing another issue with the table height in the print preview mode here:\n\t\t * https://github.com/ckeditor/ckeditor5/issues/16856\n\t\t *\n\t\t * For now, resetting the height to `initial` in the print mode works as a workaround.\n\t\t */\n\t\t&:not(.layout-table) > table {\n\t\t\theight: initial;\n\t\t}\n\t}\n}\n\n.ck-editor__editable .ck-table-bogus-paragraph {\n\t/*\n\t * Use display:inline-block to force Chrome/Safari to limit text mutations to this element.\n\t * See https://github.com/ckeditor/ckeditor5/issues/6062.\n\t */\n\tdisplay: inline-block;\n\n\t/*\n\t * Inline HTML elements nested in the span should always be dimensioned in relation to the whole cell width.\n\t * See https://github.com/ckeditor/ckeditor5/issues/9117.\n\t */\n\twidth: 100%;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-table-focused-cell-background: hsla(212, 90%, 80%, .3);\n\t--ck-table-content-default-border-color: hsl(0, 0%, 83%);\n\t--ck-table-border-none-helper-line-color: hsl(0, 0%, 83%);\n\t--ck-table-border-none-helper-line-style: dashed;\n\t--ck-table-border-none-helper-line-width: 1px;\n}\n\n.ck-widget.table {\n\t/* Dashed outline for table without any border. */\n\t& table[style*=\"border:none\"],\n\t& table[style*=\"border-style:none\"],\n\t& table[style*=\"border:0\"],\n\t& table[style*=\"border-width:0\"] {\n\t\toutline: var(--ck-table-content-default-border-color) 1px dashed;\n\t}\n\n\t& td,\n\t& th {\n\t\t/**\n\t\t * While setting outline is fine, the border should not be modified here\n\t\t * because it overrides the default table cell border color which is not expected.\n\t\t * So do not use focus-ring border styling here, or any other border styles.\n\t\t * See more: https://github.com/ckeditor/ckeditor5/issues/16979\n\t\t */\n\t\t&.ck-editor__nested-editable {\n\t\t\toutline: unset;\n\n\t\t\t&:not(.ck-editor__editable_selected) {\n\t\t\t\t&.ck-editor__nested-editable_focused,\n\t\t\t\t&:focus {\n\t\t\t\t\t/* A very slight background to highlight the focused cell */\n\t\t\t\t\tbackground: var(--ck-color-table-focused-cell-background);\n\t\t\t\t\toutline: 1px solid var(--ck-color-focus-border);\n\t\t\t\t\toutline-offset: -1px; /* progressive enhancement - no IE support */\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\nBy using `:where` we set the specificity to 0, but we need to override the inline styles that's why we must use `!important`.\nThis way it will be easier to override it in custom themes if needed.\n*/\n:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) {\n\t--ck-table-border-none-helper-line:\n\t\tvar(--ck-table-border-none-helper-line-width)\n\t\tvar(--ck-table-border-none-helper-line-style)\n\t\tvar(--ck-table-border-none-helper-line-color);\n\n\t/* Any fully removed border */\n\t& :where(td, th):where([style*=\"border:none\"], [style*=\"border:0\"], [style*=\"border-style:none\"], [style*=\"border-width:0\"]) {\n\t\tborder: var(--ck-table-border-none-helper-line) !important;\n\t}\n\n\t/* Side-specific removed borders */\n\t& :where(table, td, th) {\n\t\t&:where([style*=\"border-top-style:none\"], [style*=\"border-top-width:0\"]) {\n\t\t\tborder-top: var(--ck-table-border-none-helper-line) !important;\n\t\t}\n\n\t\t&:where([style*=\"border-right-style:none\"], [style*=\"border-right-width:0\"]) {\n\t\t\tborder-right: var(--ck-table-border-none-helper-line) !important;\n\t\t}\n\n\t\t&:where([style*=\"border-bottom-style:none\"], [style*=\"border-bottom-width:0\"]) {\n\t\t\tborder-bottom: var(--ck-table-border-none-helper-line) !important;\n\t\t}\n\n\t\t&:where([style*=\"border-left-style:none\"], [style*=\"border-left-width:0\"]) {\n\t\t\tborder-left: var(--ck-table-border-none-helper-line) !important;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-table-cell-properties-form {\n\twidth: 320px;\n\n\t& .ck-form__row {\n\t\t&.ck-table-cell-properties-form__padding-row {\n\t\t\talign-self: flex-end;\n\t\t\tpadding: 0;\n\t\t\twidth: 25%;\n\t\t}\n\n\t\t&.ck-table-cell-properties-form__alignment-row {\n\t\t\t& .ck.ck-toolbar {\n\t\t\t\tbackground: none;\n\n\t\t\t\t/* Compensate for missing input label that would push the margin (toolbar has no inputs). */\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\n\t\t\t\t&.ck-table-cell-properties-form__horizontal-alignment-toolbar {\n\t\t\t\t\t--ck-table-form-dimensions-input-width: calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));\n\n\t\t\t\t\twidth: var(--ck-table-form-dimensions-input-width);\n\t\t\t\t\tmax-width: var(--ck-table-form-dimensions-input-width);\n\t\t\t\t\tmin-width: var(--ck-table-form-dimensions-input-width);\n\t\t\t\t\tpadding: 0;\n\t\t\t\t}\n\n\t\t\t\t&.ck-table-cell-properties-form__vertical-alignment-toolbar {\n\t\t\t\t\tflex-grow: 1;\n\t\t\t\t}\n\t\t\t\t&:first-of-type {\n\t\t\t\t\t/* 4 buttons out of 7 (h-alignment + v-alignment) = 0.57 */\n\t\t\t\t\tflex-grow: 0.57;\n\t\t\t\t}\n\n\t\t\t\t&:last-of-type {\n\t\t\t\t\t/* 3 buttons out of 7 (h-alignment + v-alignment) = 0.43 */\n\t\t\t\t\tflex-grow: 0.43;\n\t\t\t\t}\n\n\t\t\t\t& .ck-button {\n\t\t\t\t\tflex-grow: 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tflex-wrap: wrap\n\t\t}\n\n\t\t&.ck-table-form__border-row {\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\t& > .ck-label {\n\t\t\t\t\tfont-size: var(--ck-font-size-tiny);\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck-table-form__border-style,\n\t\t\t& .ck-table-form__border-width {\n\t\t\t\twidth: 80px;\n\t\t\t\tmin-width: 80px;\n\t\t\t\tmax-width: 80px;\n\t\t\t}\n\t\t}\n\n\t\t&.ck-table-form__dimensions-row {\n\t\t\t--ck-table-form-dimensions-input-width: calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));\n\n\t\t\twidth: var(--ck-table-form-dimensions-input-width);\n\t\t\tmax-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tmin-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tpadding: 0;\n\n\t\t\t& .ck-table-form__dimensions-row__width,\n\t\t\t& .ck-table-form__dimensions-row__height {\n\t\t\t\twidth: var(--ck-table-form-default-input-width);\n\t\t\t\tmin-width: var(--ck-table-form-default-input-width);\n\t\t\t\tmax-width: var(--ck-table-form-default-input-width);\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t& .ck-table-form__dimension-operator {\n\t\t\t\tposition: relative;\n\t\t\t\tleft: -0.5ch;\n\t\t\t\twidth: 0;\n\t\t\t\toverflow: visible;\n\t\t\t\talign-self: flex-end;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: var(--ck-ui-component-min-height);\n\t\t\t\tline-height: var(--ck-ui-component-min-height);\n\t\t\t\tmargin: 0 var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\n\t\t&.ck-form__row.ck-table-form__action-row {\n\t\t\t& > .ck.ck-button {\n\t\t\t\tflex-grow: initial;\n\n\t\t\t\t& .ck-button__label {\n\t\t\t\t\tcolor: currentColor;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.ck-table-form__cell-type-row {\n\t\t\t--ck-table-form-dimensions-input-width: calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));\n\n\t\t\twidth: var(--ck-table-form-dimensions-input-width);\n\t\t\tmax-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tmin-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tpadding: 0;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-toolbar-spinner-size: 18px;\n}\n\n.ck.ck-spinner-container {\n\twidth: var(--ck-toolbar-spinner-size);\n\theight: var(--ck-toolbar-spinner-size);\n\tanimation: 1.5s infinite ck-spinner-rotate linear;\n\tdisplay: block;\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\tanimation-duration: 3s;\n\t}\n\tposition: relative\n}\n\n.ck.ck-spinner {\n\twidth: var(--ck-toolbar-spinner-size);\n\theight: var(--ck-toolbar-spinner-size);\n\tborder-radius: 50%;\n\tborder: 2px solid var(--ck-color-text);\n\tborder-top-color: transparent;\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 0;\n\tright: 0;\n\tmargin: 0 auto;\n\ttransform: translateY(-50%);\n\tz-index: 1;\n}\n\n@keyframes ck-spinner-rotate {\n\tto {\n\t\ttransform: rotate(360deg)\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-bookmark-balloon {\n\t& .ck.ck-toolbar {\n\t\t& > .ck-toolbar__items {\n\t\t\tflex-wrap: nowrap;\n\t\t}\n\t}\n}\n\n.ck.ck-bookmark-toolbar__preview {\n\tpadding: 0 var(--ck-spacing-medium);\n\tmax-width: var(--ck-input-width);\n\tmin-width: 3em;\n\tfont-weight: normal;\n\ttext-overflow: ellipsis;\n\ttext-align: center;\n\toverflow: hidden;\n\n\t-webkit-user-select: none;\n\tuser-select: none;\n\tcursor: default;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-table-properties-error-arrow-size: 6px;\n\t--ck-table-properties-min-error-width: 150px;\n}\n\n.ck.ck-table-form {\n\t--ck-table-form-default-input-width: 80px;\n\n\t& .ck-form__row {\n\t\t&.ck-table-form__border-row {\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\t& > .ck-label {\n\t\t\t\t\tfont-size: var(--ck-font-size-tiny);\n\t\t\t\t\ttext-align: center;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck-table-form__border-style,\n\t\t\t& .ck-table-form__border-width {\n\t\t\t\twidth: var(--ck-table-form-default-input-width);\n\t\t\t\tmin-width: var(--ck-table-form-default-input-width);\n\t\t\t\tmax-width: var(--ck-table-form-default-input-width);\n\t\t\t}\n\t\t}\n\n\t\t&.ck-table-form__dimensions-row {\n\t\t\t--ck-table-form-dimensions-input-width: calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));\n\n\t\t\twidth: var(--ck-table-form-dimensions-input-width);\n\t\t\tmax-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tmin-width: var(--ck-table-form-dimensions-input-width);\n\t\t\tpadding: 0;\n\n\t\t\t& .ck-table-form__dimensions-row__width,\n\t\t\t& .ck-table-form__dimensions-row__height {\n\t\t\t\twidth: var(--ck-table-form-default-input-width);\n\t\t\t\tmin-width: var(--ck-table-form-default-input-width);\n\t\t\t\tmax-width: var(--ck-table-form-default-input-width);\n\t\t\t\tmargin: 0\n\t\t\t}\n\n\t\t\t& .ck-table-form__dimension-operator {\n\t\t\t\tposition: relative;\n\t\t\t\tleft: -0.5ch;\n\t\t\t\twidth: 0;\n\t\t\t\toverflow: visible;\n\t\t\t\talign-self: flex-end;\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: var(--ck-ui-component-min-height);\n\t\t\t\tline-height: var(--ck-ui-component-min-height);\n\t\t\t\tmargin: 0 var(--ck-spacing-small);\n\t\t\t}\n\t\t}\n\t\t&.ck-table-form__border-row,\n\t\t&.ck-table-form__background-row,\n\t\t&.ck-table-form__cell-type-row {\n\t\t\tflex-wrap: wrap;\n\t\t}\n\n\t\t&.ck-table-form__dimensions-row,\n\t\t&.ck-table-form__cell-type-row {\n\t\t\tflex-wrap: wrap;\n\t\t\talign-items: center;\n\n\t\t\t& .ck-labeled-field-view {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column-reverse;\n\t\t\t\talign-items: center;\n\n\t\t\t\t& .ck.ck-dropdown {\n\t\t\t\t\tflex-grow: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/* Ignore labels that work as fieldset legends */\n\t\t/* Fallback for table dimension operator */\n\t\t&:not(.ck-table-form__action-row) > *:not(.ck-label, .ck-table-form__dimension-operator) {\n\t\t\tflex-grow: 1;\n\t\t}\n\t}\n\n\t& .ck.ck-labeled-field-view {\n\t\tpadding-top: var(--ck-spacing-standard);\n\n\t\t& .ck.ck-labeled-field-view__status {\n\t\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\t\tbackground: var(--ck-color-base-error);\n\t\t\tcolor: var(--ck-color-base-background);\n\t\t\tpadding: var(--ck-spacing-small) var(--ck-spacing-medium);\n\t\t\tmin-width: var(--ck-table-properties-min-error-width);\n\t\t\ttext-align: center;\n\n\t\t\tanimation: ck-table-form-labeled-view-status-appear .15s ease both;\n\t\t\tposition: absolute;\n\t\t\tleft: 50%;\n\t\t\tbottom: calc( -1 * var(--ck-table-properties-error-arrow-size) );\n\t\t\ttransform: translate(-50%,100%);\n\n\t\t\t/* The arrow pointing towards the field. */\n\t\t\t&::after {\n\t\t\t\tborder-color: transparent transparent var(--ck-color-base-error) transparent;\n\t\t\t\tborder-width: 0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);\n\t\t\t\tborder-style: solid;\n\t\t\t\tcontent: \"\";\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: calc( -1 * var(--ck-table-properties-error-arrow-size) );\n\t\t\t\tleft: 50%;\n\t\t\t\ttransform: translateX( -50% );\n\t\t\t}\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\tanimation: none;\n\t\t\t}\n\n\t\t\t/* Make sure the balloon status stays on top of other form elements. */\n\t\t\tz-index: 1\n\n\t\t\t/* The arrow pointing towards the field. */\n\t\t}\n\n\t\t/* Hide the error balloon when the field is blurred. Makes the experience much more clear. */\n\t\t& .ck-input.ck-error:not(:focus) + .ck.ck-labeled-field-view__status {\n\t\t\tdisplay: none;\n\t\t}\n\t\t/* Allow absolute positioning of the status (error) balloons. */\n\t\tposition: relative\n\t}\n}\n\n@keyframes ck-table-form-labeled-view-status-appear {\n\t0% {\n\t\topacity: 0;\n\t}\n\n\t100% {\n\t\topacity: 1;\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n.ck.ck-table-properties-form {\n\twidth: 320px;\n\n\t& .ck-form__row {\n\t\t&.ck-table-properties-form__alignment-row {\n\t\t\talign-self: flex-end;\n\t\t\tflex-wrap: wrap;\n\t\t\tflex-basis: 0;\n\t\t\talign-content: baseline;\n\n\t\t\t& .ck.ck-toolbar {\n\t\t\t\tbackground: none;\n\n\t\t\t\t/* Compensate for missing input label that would push the margin (toolbar has no inputs). */\n\t\t\t\tmargin-top: var(--ck-spacing-standard);\n\n\t\t\t\t& .ck-toolbar__items > * {\n\t\t\t\t\tflex: 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t& .ck.ck-toolbar .ck-toolbar__items {\n\t\t\t\tflex-wrap: nowrap;\n\t\t\t}\n\t\t}\n\t}\n}\n\n:root {\n\t--ck-content-table-style-spacing: 1.5em;\n}\n\n.ck-content {\n\t& .table {\n\t\t&.table-style-align-left {\n\t\t\tfloat: left;\n\t\t\tmargin-right: var(--ck-content-table-style-spacing);\n\t\t}\n\n\t\t&.table-style-align-right {\n\t\t\tfloat: right;\n\t\t\tmargin-left: var(--ck-content-table-style-spacing);\n\t\t}\n\n\t\t&.table-style-align-center {\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t&.table-style-block-align-left {\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t&.table-style-block-align-right {\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: 0;\n\t\t}\n\t}\n}\n\n.ck-editor__editable {\n\t& .table.layout-table {\n\t\t&.table-style-align-center {\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t&.table-style-align-left {\n\t\t\tmargin-right: var(--ck-content-table-style-spacing);\n\t\t}\n\n\t\t&.table-style-align-right {\n\t\t\tmargin-left: var(--ck-content-table-style-spacing);\n\t\t}\n\n\t\t&.table-style-block-align-left {\n\t\t\tmargin-left: 0;\n\t\t\tmargin-right: auto;\n\t\t}\n\n\t\t&.table-style-block-align-right {\n\t\t\tmargin-left: auto;\n\t\t\tmargin-right: 0;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-content-color-table-caption-background: hsl(0, 0%, 97%);\n\t--ck-content-color-table-caption-text: hsl(0, 0%, 20%);\n\t--ck-color-table-caption-highlighted-background: hsl(52deg 100% 50%);\n}\n\n/* Content styles */\n.ck-content .table > figcaption,\n.ck-content figure.table > table > caption {\n\tdisplay: table-caption;\n\tcaption-side: top;\n\tword-break: normal;\n\toverflow-wrap: anywhere;\n\ttext-align: center;\n\tcolor: var(--ck-content-color-table-caption-text);\n\tbackground-color: var(--ck-content-color-table-caption-background);\n\tpadding: .6em;\n\tfont-size: .75em;\n\toutline-offset: -1px;\n\n\t/* Improve placeholder rendering in high-constrast mode (https://github.com/ckeditor/ckeditor5/issues/14907). */\n\t@media (forced-colors: active) {\n\t\tbackground-color: unset;\n\t\tcolor: unset;\n\t}\n}\n\n/* Editing styles */\n.ck.ck-editor__editable .table > figcaption,\n.ck.ck-editor__editable figure.table > table > caption {\n\t@media (forced-colors: none) {\n\t\t&.table__caption_highlighted {\n\t\t\tanimation: ck-table-caption-highlight .6s ease-out;\n\t\t}\n\t}\n\n\t&.ck-placeholder::before {\n\t\tpadding-left: inherit;\n\t\tpadding-right: inherit;\n\n\t\t/*\n\t\t * Make sure the table caption placeholder doesn't overflow the placeholder area.\n\t\t * See https://github.com/ckeditor/ckeditor5/issues/9162.\n\t\t */\n\t\twhite-space: nowrap;\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t}\n}\n\n@keyframes ck-table-caption-highlight {\n\t0% {\n\t\tbackground-color: var(--ck-color-table-caption-highlighted-background);\n\t}\n\n\t100% {\n\t\tbackground-color: var(--ck-content-color-table-caption-background);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck-editor__editable .ck-horizontal-line {\n\t/* Necessary to render properly next to floated objects, e.g. side image case. */\n\tdisplay: flow-root;\n}\n\n.ck-content hr {\n\tdisplay: inline-block;\n\twidth: 100%;\n\tmargin: 15px 0;\n\theight: 4px;\n\tbackground: hsl(0, 0%, 87%);\n\tborder: 0;\n\tvertical-align: middle;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-color-table-column-resizer-hover: var(--ck-color-base-active);\n\t--ck-table-column-resizer-width: 7px;\n\n\t/* The offset used for absolute positioning of the resizer element, so that it is placed exactly above the cell border.\n\t The value is: minus half the width of the resizer decreased additionaly by the half the width of the border (0.5px). */\n\t--ck-table-column-resizer-position-offset: calc(var(--ck-table-column-resizer-width) * -0.5 - 0.5px);\n}\n\n.ck-content .table .ck-table-resized {\n\ttable-layout: fixed;\n}\n\n.ck-content .table td,\n.ck-content .table th {\n\t/* To prevent text overflowing beyond its cell when columns are resized by resize handler\n\t(https://github.com/ckeditor/ckeditor5/pull/14379#issuecomment-1589460978). */\n\toverflow-wrap: break-word;\n}\n\n.ck.ck-editor__editable .table td,\n.ck.ck-editor__editable .table th {\n\t/* The resizer element is placed inside each cell, so it must be positioned relatively to the cell. */\n\tposition: relative;\n}\n\n.ck.ck-editor__editable .table .ck-table-column-resizer {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tright: var(--ck-table-column-resizer-position-offset);\n\twidth: var(--ck-table-column-resizer-width);\n\tcursor: col-resize;\n\tuser-select: none;\n\tz-index: var(--ck-z-default);\n}\n\n.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer {\n\tdisplay: none;\n}\n\n/* The resizer elements, which are extended to an extremely high height, break the drag & drop feature in Chrome. To make it work again,\n all resizers must be hidden while the table is dragged. */\n.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer {\n\tdisplay: none;\n}\n\n.ck.ck-editor__editable .table .ck-table-column-resizer:hover,\n.ck.ck-editor__editable .table .ck-table-column-resizer__active {\n\tbackground-color: var(--ck-color-table-column-resizer-hover);\n\topacity: 0.25;\n}\n\n.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer {\n\tleft: var(--ck-table-column-resizer-position-offset);\n\tright: unset;\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n.ck.ck-input-color {\n\t& > .ck.ck-input-text {\n\t\t[dir=\"ltr\"] & {\n\t\t\tborder-top-right-radius: 0;\n\t\t\tborder-bottom-right-radius: 0;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tborder-top-left-radius: 0;\n\t\t\tborder-bottom-left-radius: 0;\n\t\t}\n\n\t\t/* Make sure the focused input is always on top of the dropdown button so its\n\t\t outline and border are never cropped (also when the input is read-only). */\n\t\t&:focus {\n\t\t\tz-index: 0;\n\t\t}\n\t}\n\n\t& > .ck.ck-dropdown {\n\t\t& > .ck.ck-button.ck-input-color__button {\n\t\t\tpadding: 0;\n\t\t\t/* Resolving issue with misaligned buttons on Safari (see https://github.com/ckeditor/ckeditor5/issues/10589) */\n\t\t\tdisplay: flex;\n\n\t\t\t[dir=\"ltr\"] & {\n\t\t\t\tborder-top-left-radius: 0;\n\t\t\t\tborder-bottom-left-radius: 0;\n\n\t\t\t\t&:not(:focus) {\n\t\t\t\t\tborder-left: 1px solid transparent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tborder-top-right-radius: 0;\n\t\t\t\tborder-bottom-right-radius: 0;\n\n\t\t\t\t&:not(:focus) {\n\t\t\t\t\tborder-right: 1px solid transparent;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&.ck-disabled {\n\t\t\t\tbackground: var(--ck-color-input-disabled-background);\n\t\t\t}\n\n\t\t\t& > .ck.ck-input-color__button__preview {\n\t\t\t\tborder-radius: var(--ck-rounded-corners-radius);\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tborder: 1px solid var(--ck-color-input-border);\n\t\t\t\tposition: relative;\n\t\t\t\toverflow: hidden;\n\n\t\t\t\t& > .ck.ck-input-color__button__preview__no-color-indicator {\n\t\t\t\t\ttop: -30%;\n\t\t\t\t\tleft: 50%;\n\t\t\t\t\theight: 150%;\n\t\t\t\t\twidth: 8%;\n\t\t\t\t\tbackground: hsl(0, 100%, 50%);\n\t\t\t\t\tborder-radius: 2px;\n\t\t\t\t\ttransform: rotate(45deg);\n\t\t\t\t\ttransform-origin: 50%;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t& .ck.ck-input-color__remove-color {\n\t\twidth: 100%;\n\t\tpadding: calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);\n\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\n\t\t&:not(:focus) {\n\t\t\tborder-bottom: 1px solid var(--ck-color-input-border);\n\t\t}\n\n\t\t[dir=\"ltr\"] & {\n\t\t\tborder-top-right-radius: 0;\n\t\t}\n\n\t\t[dir=\"rtl\"] & {\n\t\t\tborder-top-left-radius: 0;\n\t\t}\n\n\t\t& .ck.ck-icon {\n\t\t\tmargin-right: var(--ck-spacing-standard);\n\n\t\t\t[dir=\"rtl\"] & {\n\t\t\t\tmargin-right: 0;\n\t\t\t\tmargin-left: var(--ck-spacing-standard);\n\t\t\t}\n\t\t}\n\t}\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\n\t& > input.ck.ck-input-text {\n\t\tmin-width: auto;\n\t\tflex-grow: 1;\n\t}\n\n\t& > div.ck.ck-dropdown {\n\t\tmin-width: auto;\n\n\t\t/* This dropdown has no arrow but a color preview instead. */\n\t\t& > .ck-input-color__button .ck-dropdown__arrow {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-content-color-image-caption-background: hsl(0, 0%, 97%);\n\t--ck-content-color-image-caption-text: hsl(0, 0%, 20%);\n\t--ck-color-image-caption-highlighted-background: hsl(52deg 100% 50%);\n}\n\n/* Content styles */\n.ck-content .image > figcaption {\n\tdisplay: table-caption;\n\tcaption-side: bottom;\n\tword-break: normal;\n\toverflow-wrap: anywhere;\n\tbreak-before: avoid;\n\tcolor: var(--ck-content-color-image-caption-text);\n\tbackground-color: var(--ck-content-color-image-caption-background);\n\tpadding: .6em;\n\tfont-size: .75em;\n\toutline-offset: -1px;\n\n\t/* Improve placeholder rendering in high-constrast mode (https://github.com/ckeditor/ckeditor5/issues/14907). */\n\t@media (forced-colors: active) {\n\t\tbackground-color: unset;\n\t\tcolor: unset;\n\t}\n}\n\n/* Editing styles */\n.ck.ck-editor__editable .image > figcaption.image__caption_highlighted {\n\t@media (forced-colors: none) {\n\t\tanimation: ck-image-caption-highlight .6s ease-out;\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\tanimation: none;\n\t}\n}\n\n@keyframes ck-image-caption-highlight {\n\t0% {\n\t\tbackground-color: var(--ck-color-image-caption-highlighted-background);\n\t}\n\n\t100% {\n\t\tbackground-color: var(--ck-content-color-image-caption-background);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n\n:root {\n\t--ck-widget-outline-thickness: 3px;\n\t--ck-widget-handler-icon-size: 16px;\n\t--ck-widget-handler-animation-duration: 200ms;\n\t--ck-widget-handler-animation-curve: ease;\n\n\t--ck-color-widget-blurred-border: hsl(0, 0%, 87%);\n\t--ck-color-widget-hover-border: hsl(43, 100%, 62%);\n\t--ck-color-widget-editable-focus-background: var(--ck-color-base-background);\n\t--ck-color-widget-drag-handler-icon-color: var(--ck-color-base-background);\n\t--ck-color-resizer: var(--ck-color-focus-border);\n\t--ck-color-resizer-tooltip-background: hsl(0, 0%, 15%);\n\t--ck-color-resizer-tooltip-text: hsl(0, 0%, 95%);\n\n\t--ck-resizer-border-radius: var(--ck-border-radius);\n\t--ck-resizer-tooltip-offset: 10px;\n\t--ck-resizer-tooltip-height: calc(var(--ck-spacing-small) * 2 + 10px);\n}\n\n.ck .ck-widget {\n\toutline-width: var(--ck-widget-outline-thickness);\n\toutline-style: solid;\n\toutline-color: transparent;\n\ttransition: outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\ttransition: none;\n\t}\n\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\toutline: var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border);\n\t}\n\n\t&:hover {\n\t\toutline-color: var(--ck-color-widget-hover-border);\n\t}\n\t/* This is neccessary for type around UI to be positioned properly. */\n\tposition: relative\n}\n\n.ck .ck-editor__nested-editable {\n\tborder: 1px solid transparent;\n\n\t/* The :focus style is applied before .ck-editor__nested-editable_focused class is rendered in the view.\n\tThese styles show a different border for a blink of an eye, so `:focus` need to have same styles applied. */\n\t&.ck-editor__nested-editable_focused,\n\t&:focus {\n\t\tbox-shadow: var(--ck-inner-shadow), 0 0;\n\n\t\t@media (forced-colors: none) {\n\t\t\tbackground-color: var(--ck-color-widget-editable-focus-background);\n\t\t}\n\n\t\t/**\n\t\t * Focus border should not be applied to table cells because it overrides the default table cell border color.\n\t\t * In other words - in some scenarios, the part of the table cell border has focus color style, which is not expected behavior\n\t\t * because it should be the same as the table cell border color.\n\t\t */\n\t\t&:not(td, th) {\n\t\t\toutline: none;\n\t\t\tborder: var(--ck-focus-ring);\n\t\t}\n\t}\n}\n\n.ck .ck-widget.ck-widget_with-selection-handle {\n\t& .ck-widget__selection-handle {\n\t\tpadding: 4px;\n\t\tbox-sizing: border-box;\n\n\t\t/* Background and opacity will be animated as the handler shows up or the widget gets selected. */\n\t\tbackground-color: transparent;\n\t\topacity: 0;\n\n\t\t/* Transition:\n\t\t * background-color for the .ck-widget_selected state change,\n\t\t * visibility for hiding the handler,\n\t\t * opacity for the proper look of the icon when the handler disappears. */\n\t\ttransition:\n\t\t\tbackground-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),\n\t\t\tvisibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve),\n\t\t\topacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t\t/* Make only top corners round. */\n\t\tborder-radius: var(--ck-border-radius) var(--ck-border-radius) 0 0;\n\n\t\t/* Place the drag handler outside the widget wrapper. */\n\t\ttransform: translateY(-100%);\n\t\tleft: calc(0px - var(--ck-widget-outline-thickness));\n\t\ttop: 0;\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\ttransition: none;\n\t\t}\n\n\t\t& .ck-icon {\n\t\t\t/* Make sure the dimensions of the icon are independent of the fon-size of the content. */\n\t\t\twidth: var(--ck-widget-handler-icon-size);\n\t\t\theight: var(--ck-widget-handler-icon-size);\n\t\t\tcolor: var(--ck-color-widget-drag-handler-icon-color);\n\n\t\t\t/* The \"selected\" part of the icon is invisible by default */\n\t\t\t& .ck-icon__selected-indicator {\n\t\t\t\topacity: 0;\n\n\t\t\t\t/* Note: The animation is longer on purpose. Simply feels better. */\n\t\t\t\ttransition: opacity 300ms var(--ck-widget-handler-animation-curve);\n\n\t\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\t\ttransition: none;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* Make sure the icon in not a subject to font-size or line-height to avoid\n\t\t\tunnecessary spacing around it. */\n\t\t\tdisplay: block\n\t\t}\n\n\t\t/* Advertise using the look of the icon that once clicked the handler, the widget will be selected. */\n\t\t&:hover .ck-icon .ck-icon__selected-indicator {\n\t\t\topacity: 1;\n\t\t}\n\t\tposition: absolute\n\t}\n\n\t/* Show the selection handler on mouse hover over the widget, but not for nested widgets. */\n\t&:hover > .ck-widget__selection-handle {\n\t\topacity: 1;\n\t\tbackground-color: var(--ck-color-widget-hover-border);\n\t\tvisibility: visible;\n\t}\n\n\t/* Show the selection handler when the widget is selected, but not for nested widgets. */\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\t& > .ck-widget__selection-handle {\n\t\t\topacity: 1;\n\t\t\tbackground-color: var(--ck-color-focus-border);\n\t\t\tvisibility: visible;\n\n\t\t\t/* When the widget is selected, notify the user using the proper look of the icon. */\n\t\t\t& .ck-icon .ck-icon__selected-indicator {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n\t/* Make the widget wrapper a relative positioning container for the drag handle. */\n\tposition: relative;\n}\n\n/* In a RTL environment, align the selection handler to the right side of the widget */\n.ck[dir=\"rtl\"] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle {\n\tleft: auto;\n\tright: calc(0px - var(--ck-widget-outline-thickness));\n}\n\n/* https://github.com/ckeditor/ckeditor5/issues/6415 */\n\n.ck.ck-editor__editable.ck-read-only .ck-widget {\n\t/* Prevent the :hover outline from showing up because of the used outline-color transition. */\n\ttransition: none;\n\n\t&:not(.ck-widget_selected) {\n\t\t/* Disable visual effects of hover/active widget when CKEditor is in readOnly mode.\n\t\t * See: https://github.com/ckeditor/ckeditor5/issues/1261\n\t\t *\n\t\t * Leave the unit because this custom property is used in calc() by other features.\n\t\t * See: https://github.com/ckeditor/ckeditor5/issues/6775\n\t\t */\n\t\t--ck-widget-outline-thickness: 0px;\n\t}\n\n\t&.ck-widget_with-selection-handle {\n\t\t& .ck-widget__selection-handle,\n\t\t& .ck-widget__selection-handle:hover {\n\t\t\tbackground: var(--ck-color-widget-blurred-border);\n\t\t}\n\t}\n}\n\n/*\n* Hide the outline of all widget parents when the widget is being hovered.\n*/\n\n.ck .ck-widget:has( .ck-widget.table:hover ) {\n\toutline-color: transparent;\n}\n\n/* Hide the selection handle on mouse hover over the widget of all the widget parents. */\n\n.ck .ck-widget.ck-widget_with-selection-handle:has( .ck-widget.table:hover ) > .ck-widget__selection-handle {\n\topacity: 0;\n\tvisibility: hidden;\n}\n\n/* Style the widget when it's selected but the editable it belongs to lost focus. */\n\n\n.ck.ck-editor__editable.ck-blurred .ck-widget {\n\t&.ck-widget_selected,\n\t&.ck-widget_selected:hover {\n\t\toutline-color: var(--ck-color-widget-blurred-border);\n\n\t\t&.ck-widget_with-selection-handle {\n\t\t\t& > .ck-widget__selection-handle,\n\t\t\t& > .ck-widget__selection-handle:hover {\n\t\t\t\tbackground: var(--ck-color-widget-blurred-border);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.ck.ck-editor__editable:not(.ck-pagination-view) > .ck-widget.ck-widget_with-selection-handle:first-child,\n.ck.ck-editor__editable:not(.ck-pagination-view) blockquote > .ck-widget.ck-widget_with-selection-handle:first-child {\n\t/* Do not crop selection handler if a widget is a first-child in the blockquote or in the root editable.\n\tIn fact, anything with overflow: hidden.\n\thttps://github.com/ckeditor/ckeditor5-block-quote/issues/28\n\thttps://github.com/ckeditor/ckeditor5-widget/issues/44\n\thttps://github.com/ckeditor/ckeditor5-widget/issues/66 */\n\tmargin-top: calc(1em + var(--ck-widget-handler-icon-size));\n}\n\n.ck .ck-size-view {\n\tbackground: var(--ck-color-resizer-tooltip-background);\n\tcolor: var(--ck-color-resizer-tooltip-text);\n\tborder: 1px solid var(--ck-color-resizer-tooltip-text);\n\tborder-radius: var(--ck-resizer-border-radius);\n\tfont-size: var(--ck-font-size-tiny);\n\tdisplay: block;\n\tpadding: 0 var(--ck-spacing-small);\n\theight: var(--ck-resizer-tooltip-height);\n\tline-height: var(--ck-resizer-tooltip-height);\n\n\t&.ck-orientation-top-left,\n\t&.ck-orientation-top-right,\n\t&.ck-orientation-bottom-right,\n\t&.ck-orientation-bottom-left,\n\t&.ck-orientation-above-center {\n\t\tposition: absolute;\n\t}\n\n\t&.ck-orientation-top-left {\n\t\ttop: var(--ck-resizer-tooltip-offset);\n\t\tleft: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-top-right {\n\t\ttop: var(--ck-resizer-tooltip-offset);\n\t\tright: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-bottom-right {\n\t\tbottom: var(--ck-resizer-tooltip-offset);\n\t\tright: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t&.ck-orientation-bottom-left {\n\t\tbottom: var(--ck-resizer-tooltip-offset);\n\t\tleft: var(--ck-resizer-tooltip-offset);\n\t}\n\n\t/* Class applied if the widget is too small to contain the size label */\n\t&.ck-orientation-above-center {\n\t\ttop: calc(var(--ck-resizer-tooltip-height) * -1);\n\t\tleft: 50%;\n\t\ttransform: translate(-50%);\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-menu-bar-menu-max-width: 75vw;\n\t--ck-menu-bar-nested-menu-horizontal-offset: 5px;\n}\n\n.ck.ck-menu-bar__menu > .ck.ck-menu-bar__menu__panel {\n\tborder-radius: var(--ck-rounded-corners-radius);\n\tbox-shadow: var(--ck-drop-shadow), 0 0;\n\n\tbackground: var(--ck-color-dropdown-panel-background);\n\tborder: 1px solid var(--ck-color-dropdown-panel-border);\n\tbottom: 0;\n\theight: fit-content;\n\n\tz-index: var(--ck-z-panel);\n\tmax-width: var(--ck-menu-bar-menu-max-width);\n\tposition: absolute;\n\n\t/* Corner border radius consistent with the button. */\n\t&.ck-menu-bar__menu__panel_position_es,\n\t&.ck-menu-bar__menu__panel_position_se {\n\t\tborder-top-left-radius: 0;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_ws,\n\t&.ck-menu-bar__menu__panel_position_sw {\n\t\tborder-top-right-radius: 0;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_en,\n\t&.ck-menu-bar__menu__panel_position_ne {\n\t\tborder-bottom-left-radius: 0;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_wn,\n\t&.ck-menu-bar__menu__panel_position_nw {\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t&:focus {\n\t\toutline: none;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_ne,\n\t&.ck-menu-bar__menu__panel_position_nw {\n\t\tbottom: 100%;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_se,\n\t&.ck-menu-bar__menu__panel_position_sw {\n\t\ttop: 100%;\n\t\tbottom: auto;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_ne,\n\t&.ck-menu-bar__menu__panel_position_se {\n\t\tleft: 0px;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_nw,\n\t&.ck-menu-bar__menu__panel_position_sw {\n\t\tright: 0px;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_es,\n\t&.ck-menu-bar__menu__panel_position_en {\n\t\tleft: calc( 100% - var(--ck-menu-bar-nested-menu-horizontal-offset) );\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_es {\n\t\ttop: 0px;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_en {\n\t\tbottom: 0px;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_ws,\n\t&.ck-menu-bar__menu__panel_position_wn {\n\t\tright: calc( 100% - var(--ck-menu-bar-nested-menu-horizontal-offset) );\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_ws {\n\t\ttop: 0px;\n\t}\n\n\t&.ck-menu-bar__menu__panel_position_wn {\n\t\tbottom: 0px;\n\t}\n}\n\n.ck.ck-menu-bar {\n\t& .ck-list-item-button {\n\t\t&:focus,\n\t\t&:active {\n\t\t\tborder-color: transparent;\n\t\t\tbox-shadow: none;\n\t\t}\n\t}\n\n\t&.ck-menu-bar_focus-border-enabled .ck-list-item-button {\n\t\t&:focus,\n\t\t&:active {\n\t\t\t/* Fix truncated shadows due to rendering order. */\n\t\t\tposition: relative;\n\t\t\tz-index: 2;\n\n\t\t\toutline: none;\n\t\t\tborder: var(--ck-focus-ring);\n\t\t\tbox-shadow: var(--ck-focus-outer-shadow), 0 0;\n\t\t}\n\t}\n}\n","/*\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n:root {\n\t--ck-widget-type-around-button-size: 20px;\n\t--ck-color-widget-type-around-button-active: var(--ck-color-focus-border);\n\t--ck-color-widget-type-around-button-hover: var(--ck-color-widget-hover-border);\n\t--ck-color-widget-type-around-button-blurred-editable: var(--ck-color-widget-blurred-border);\n\t--ck-color-widget-type-around-button-radar-start-alpha: 0;\n\t--ck-color-widget-type-around-button-radar-end-alpha: .3;\n\t--ck-color-widget-type-around-button-icon: var(--ck-color-base-background);\n}\n\n.ck .ck-widget {\n\t/*\n\t * Styles of the type around buttons\n\t */\n\t& .ck-widget__type-around__button {\n\t\twidth: var(--ck-widget-type-around-button-size);\n\t\theight: var(--ck-widget-type-around-button-size);\n\t\tbackground: var(--ck-color-widget-type-around-button);\n\t\tborder-radius: 100px;\n\t\ttransition: opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);\n\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\toverflow: hidden;\n\t\tz-index: var(--ck-z-default);\n\n\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\ttransition: none;\n\t\t}\n\n\t\t& svg {\n\t\t\twidth: 10px;\n\t\t\theight: 8px;\n\t\t\ttransform: translate(-50%,-50%);\n\t\t\ttransition: transform .5s ease;\n\t\t\tmargin-top: 1px;\n\t\t\tposition: absolute;\n\t\t\ttop: 50%;\n\t\t\tleft: 50%;\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\ttransition: none;\n\t\t\t}\n\n\t\t\t& * {\n\t\t\t\tstroke-dasharray: 10;\n\t\t\t\tstroke-dashoffset: 0;\n\n\t\t\t\tfill: none;\n\t\t\t\tstroke: var(--ck-color-widget-type-around-button-icon);\n\t\t\t\tstroke-width: 1.5px;\n\t\t\t\tstroke-linecap: round;\n\t\t\t\tstroke-linejoin: round;\n\t\t\t}\n\n\t\t\t& line {\n\t\t\t\tstroke-dasharray: 7;\n\t\t\t}\n\t\t\tz-index: calc(var(--ck-z-default) + 2)\n\t\t}\n\n\t\t&:hover {\n\t\t\t/*\n\t\t\t * Display the \"sonar\" around the button when hovered.\n\t\t\t */\n\t\t\tanimation: ck-widget-type-around-button-sonar 1s ease infinite;\n\n\t\t\t/*\n\t\t\t * Animate active button's icon.\n\t\t\t */\n\t\t\t& svg {\n\t\t\t\t& polyline {\n\t\t\t\t\tanimation: ck-widget-type-around-arrow-dash 2s linear;\n\t\t\t\t}\n\n\t\t\t\t& line {\n\t\t\t\t\tanimation: ck-widget-type-around-arrow-tip-dash 2s linear;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\tanimation: none;\n\n\t\t\t\t& svg {\n\t\t\t\t\t& polyline {\n\t\t\t\t\t\tanimation: none;\n\t\t\t\t\t}\n\n\t\t\t\t\t& line {\n\t\t\t\t\t\tanimation: none;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.ck-widget__type-around__button_before {\n\t\t\t/* Place it in the middle of the outline */\n\t\t\ttop: calc(-0.5 * var(--ck-widget-outline-thickness));\n\t\t\tleft: min(10%, 30px);\n\n\t\t\ttransform: translateY(-50%);\n\t\t}\n\n\t\t&.ck-widget__type-around__button_after {\n\t\t\t/* Place it in the middle of the outline */\n\t\t\tbottom: calc(-0.5 * var(--ck-widget-outline-thickness));\n\t\t\tright: min(10%, 30px);\n\n\t\t\ttransform: translateY(50%);\n\t\t}\n\t}\n\n\t/*\n\t * Show type around buttons when the widget is being hovered.\n\t */\n\t&:hover {\n\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\topacity: 1;\n\t\t\tpointer-events: auto;\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the buttons when the widget is NOT selected (but the buttons are visible\n\t * and still can be hovered).\n\t */\n\t&:not(.ck-widget_selected) > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\tbackground: var(--ck-color-widget-type-around-button-hover);\n\t}\n\n\t/*\n\t * Styles for the buttons when:\n\t * - the widget is selected,\n\t * - or the button is being hovered (regardless of the widget state).\n\t */\n\t&.ck-widget_selected > .ck-widget__type-around > .ck-widget__type-around__button,\n\t& > .ck-widget__type-around > .ck-widget__type-around__button:hover {\n\t\tbackground: var(--ck-color-widget-type-around-button-active);\n\n\t\t&::after {\n\t\t\twidth: calc(var(--ck-widget-type-around-button-size) - 2px);\n\t\t\theight: calc(var(--ck-widget-type-around-button-size) - 2px);\n\t\t\tborder-radius: 100px;\n\t\t\tbackground: linear-gradient(135deg, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,.3) 100%);\n\t\t\tcontent: \"\";\n\t\t\tdisplay: block;\n\t\t\tposition: absolute;\n\t\t\ttop: 1px;\n\t\t\tleft: 1px;\n\t\t\tz-index: calc(var(--ck-z-default) + 1);\n\t\t}\n\t}\n\n\t&.ck-widget_selected {\n\t\t/*\n\t\t* Styles of the widget when the \"fake caret\" is blinking (e.g. upon keyboard navigation).\n\t\t* Despite the widget being physically selected in the model, its outline should disappear.\n\t\t*/\n\t\t&.ck-widget_type-around_show-fake-caret_before,\n\t\t&.ck-widget_type-around_show-fake-caret_after {\n\t\t\toutline-color: transparent;\n\t\t}\n\n\t\t/*\n\t\t* Show type around buttons when the widget gets selected.\n\t\t*/\n\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\topacity: 1;\n\t\t\tpointer-events: auto;\n\t\t}\n\t}\n\n\t/*\n\t * Styles for the \"before\" button when the widget has a selection handle. Because some space\n\t * is consumed by the handle, the button must be moved slightly to the right to let it breathe.\n\t */\n\t&.ck-widget_with-selection-handle > .ck-widget__type-around > .ck-widget__type-around__button_before {\n\t\tmargin-left: 20px;\n\t}\n\n\t/*\n\t * Styles for the horizontal \"fake caret\" which is displayed when the user navigates using the keyboard.\n\t */\n\t& .ck-widget__type-around__fake-caret {\n\t\tpointer-events: none;\n\t\theight: 1px;\n\t\tanimation: ck-widget-type-around-fake-caret-pulse linear 1s infinite normal forwards;\n\n\t\t/*\n\t\t * The semi-transparent-outline+background combo improves the contrast\n\t\t * when the background underneath the fake caret is dark.\n\t\t */\n\t\toutline: solid 1px hsla(0, 0%, 100%, .5);\n\t\tbackground: var(--ck-color-base-text);\n\t}\n\n\t&.ck-widget_type-around_show-fake-caret_before,\n\t&.ck-widget_type-around_show-fake-caret_after {\n\t\t/*\n\t\t * When the \"fake caret\" is visible we simulate that the widget is not selected\n\t\t * (despite being physically selected), so the outline color should be for the\n\t\t * unselected widget.\n\t\t */\n\t\t&.ck-widget_selected:hover {\n\t\t\toutline-color: var(--ck-color-widget-hover-border);\n\t\t}\n\n\t\t/*\n\t\t * Styles of the type around buttons when the \"fake caret\" is blinking (e.g. upon keyboard navigation).\n\t\t * In this state, the type around buttons would collide with the fake carets so they should disappear.\n\t\t */\n\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\topacity: 0;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\t/*\n\t\t * Fake horizontal caret integration with the selection handle. When the caret is visible, simply\n\t\t * hide the handle because it intersects with the caret (and does not make much sense anyway).\n\t\t */\n\t\t&.ck-widget_with-selection-handle {\n\t\t\t&.ck-widget_selected,\n\t\t\t&.ck-widget_selected:hover {\n\t\t\t\t& > .ck-widget__selection-handle {\n\t\t\t\t\topacity: 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Fake horizontal caret integration with the resize UI. When the caret is visible, simply\n\t\t * hide the resize UI because it creates too much noise. It can be visible when the user\n\t\t * hovers the widget, though.\n\t\t */\n\t\t&.ck-widget_selected.ck-widget_with-resizer > .ck-widget__resizer {\n\t\t\topacity: 0\n\t\t}\n\t}\n\t/*\n\t * Styles of the type around buttons\n\t */\n\n\t/*\n\t * Styles for the buttons when:\n\t * - the widget is selected,\n\t * - or the button is being hovered (regardless of the widget state).\n\t */\n\n\t/*\n\t * Styles for the horizontal \"fake caret\" which is displayed when the user navigates using the keyboard.\n\t */\n\t& > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tdisplay: none;\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\tright: 0;\n\t}\n\n\t/*\n\t * When the widget is hovered the \"fake caret\" would normally be narrower than the\n\t * extra outline displayed around the widget. Let's extend the \"fake caret\" to match\n\t * the full width of the widget.\n\t */\n\t&:hover > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tleft: calc( -1 * var(--ck-widget-outline-thickness) );\n\t\tright: calc( -1 * var(--ck-widget-outline-thickness) );\n\t}\n\n\t/*\n\t * Styles for the horizontal \"fake caret\" when it should be displayed before the widget (backward keyboard navigation).\n\t */\n\t&.ck-widget_type-around_show-fake-caret_before > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\ttop: calc( -1 * var(--ck-widget-outline-thickness) - 1px );\n\t\tdisplay: block;\n\t}\n\n\t/*\n\t * Styles for the horizontal \"fake caret\" when it should be displayed after the widget (forward keyboard navigation).\n\t */\n\t&.ck-widget_type-around_show-fake-caret_after > .ck-widget__type-around > .ck-widget__type-around__fake-caret {\n\t\tbottom: calc( -1 * var(--ck-widget-outline-thickness) - 1px );\n\t\tdisplay: block;\n\t}\n}\n\n/*\n * Styles for the \"before\" button when the widget has a selection handle in an RTL environment.\n * The selection handler is aligned to the right side of the widget so there is no need to create\n * additional space for it next to the \"before\" button.\n */\n\n.ck[dir=\"rtl\"] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around > .ck-widget__type-around__button_before {\n\tmargin-left: 0;\n\tmargin-right: 20px;\n}\n\n/*\n * Hide type around buttons when the widget is selected as a child of a selected\n * nested editable (e.g. mulit-cell table selection).\n *\n * See https://github.com/ckeditor/ckeditor5/issues/7263.\n */\n\n.ck-editor__nested-editable.ck-editor__editable_selected {\n\t& .ck-widget {\n\t\t&.ck-widget_selected,\n\t\t&:hover {\n\t\t\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\t\t\topacity: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/*\n * Hide type around buttons of all widget parents when the widget is being hovered.\n */\n\n.ck .ck-widget:has( .ck-widget.table:hover ) {\n\t& > .ck-widget__type-around > .ck-widget__type-around__button {\n\t\topacity: 0;\n\t\tpointer-events: none;\n\t}\n}\n\n/*\n * Styles for the buttons when the widget is selected but the user clicked outside of the editor (blurred the editor).\n */\n\n.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected > .ck-widget__type-around > .ck-widget__type-around__button:not(:hover) {\n\tbackground: var(--ck-color-widget-type-around-button-blurred-editable);\n\n\t& svg * {\n\t\tstroke: hsl(0,0%,60%);\n\t}\n}\n\n@keyframes ck-widget-type-around-arrow-dash {\n\t0% {\n\t\tstroke-dashoffset: 10;\n\t}\n\t20%, 100% {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes ck-widget-type-around-arrow-tip-dash {\n\t0%, 20% {\n\t\tstroke-dashoffset: 7;\n\t}\n\t40%, 100% {\n\t\tstroke-dashoffset: 0;\n\t}\n}\n\n@keyframes ck-widget-type-around-button-sonar {\n\t0% {\n\t\tbox-shadow: 0 0 0 0 hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha));\n\t}\n\t50% {\n\t\tbox-shadow: 0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-end-alpha));\n\t}\n\t100% {\n\t\tbox-shadow: 0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha));\n\t}\n}\n\n@keyframes ck-widget-type-around-fake-caret-pulse {\n\t0% {\n\t\topacity: 1;\n\t}\n\t49% {\n\t\topacity: 1;\n\t}\n\t50% {\n\t\topacity: 0;\n\t}\n\t99% {\n\t\topacity: 0;\n\t}\n\t100% {\n\t\topacity: 1;\n\t}\n}\n\n/*\n * Integration with the read-only mode of the editor.\n */\n\n.ck.ck-editor__editable.ck-read-only .ck-widget__type-around {\n\tdisplay: none;\n}\n\n/*\n * Integration with the #isEnabled property of the WidgetTypeAround plugin.\n */\n\n.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around {\n\tdisplay: none;\n}\n\n/*\n * Integration with the restricted editing mode (feature) of the editor.\n */\n\n.ck.ck-editor__editable.ck-restricted-editing_mode_restricted {\n\t& .ck-widget__type-around {\n\t\tdisplay: none;\n\t}\n\n\t& div.restricted-editing-exception .ck-widget__type-around {\n\t\tdisplay: initial;\n\t}\n}\n",":root{--ck-color-base-foreground:#fafafa;--ck-color-base-background:#fff;--ck-color-base-border:#ccced1;--ck-color-base-action:#53a336;--ck-color-base-focus:#6cb5f9;--ck-color-base-text:#333;--ck-color-base-active:#2977ff;--ck-color-base-active-focus:#0d65ff;--ck-color-base-error:#db3700;--ck-color-focus-border-coordinates:218, 81.8%, 56.9%;--ck-color-focus-border:hsl(var(--ck-color-focus-border-coordinates));--ck-color-focus-outer-shadow:#cae1fc;--ck-color-focus-disabled-shadow:#77baf84d;--ck-color-focus-error-shadow:#ff401f4d;--ck-color-text:var(--ck-color-base-text);--ck-color-shadow-drop:#00000026;--ck-color-shadow-drop-active:#0003;--ck-color-shadow-inner:#0000001a;--ck-color-button-default-background:transparent;--ck-color-button-default-hover-background:#f0f0f0;--ck-color-button-default-active-background:#f0f0f0;--ck-color-button-default-disabled-background:transparent;--ck-color-button-on-background:#f0f7ff;--ck-color-button-on-hover-background:#dbecff;--ck-color-button-on-active-background:#dbecff;--ck-color-button-on-disabled-background:#f0f2f4;--ck-color-button-on-color:#2977ff;--ck-color-button-action-background:var(--ck-color-base-action);--ck-color-button-action-hover-background:#4d9d30;--ck-color-button-action-active-background:#4d9d30;--ck-color-button-action-disabled-background:#7ec365;--ck-color-button-action-text:var(--ck-color-base-background);--ck-color-button-save:#008a00;--ck-color-button-cancel:#db3700;--ck-color-switch-button-off-background:#939393;--ck-color-switch-button-off-hover-background:#7d7d7d;--ck-color-switch-button-on-background:var(--ck-color-button-action-background);--ck-color-switch-button-on-hover-background:#4d9d30;--ck-color-switch-button-inner-background:var(--ck-color-base-background);--ck-color-switch-button-inner-shadow:#0000001a;--ck-color-dropdown-panel-background:var(--ck-color-base-background);--ck-color-dropdown-panel-border:var(--ck-color-base-border);--ck-color-dialog-background:var(--ck-custom-background);--ck-color-dialog-form-header-border:var(--ck-custom-border);--ck-color-input-background:var(--ck-color-base-background);--ck-color-input-border:var(--ck-color-base-border);--ck-color-input-error-border:var(--ck-color-base-error);--ck-color-input-text:var(--ck-color-base-text);--ck-color-input-disabled-background:#f2f2f2;--ck-color-input-disabled-border:var(--ck-color-base-border);--ck-color-input-disabled-text:#757575;--ck-color-list-background:var(--ck-color-base-background);--ck-color-list-button-hover-background:var(--ck-color-button-default-hover-background);--ck-color-list-button-on-background:var(--ck-color-button-on-color);--ck-color-list-button-on-background-focus:var(--ck-color-button-on-color);--ck-color-list-button-on-text:var(--ck-color-base-background);--ck-color-panel-background:var(--ck-color-base-background);--ck-color-panel-border:var(--ck-color-base-border);--ck-color-toolbar-background:var(--ck-color-base-background);--ck-color-toolbar-border:var(--ck-color-base-border);--ck-color-tooltip-background:var(--ck-color-base-text);--ck-color-tooltip-text:var(--ck-color-base-background);--ck-color-engine-placeholder-text:#707070;--ck-color-upload-bar-background:#6cb5f9;--ck-color-link-default:#0000f0;--ck-color-link-selected-background:#1fb0ff1a;--ck-color-link-fake-selection:#1fb0ff4d;--ck-color-highlight-background:#ff0;--ck-color-light-red:#fcc;--ck-disabled-opacity:.5;--ck-focus-outer-shadow-geometry:0 0 0 3px;--ck-focus-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-outer-shadow);--ck-focus-disabled-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-disabled-shadow);--ck-focus-error-outer-shadow:var(--ck-focus-outer-shadow-geometry) var(--ck-color-focus-error-shadow);--ck-focus-ring:1px solid var(--ck-color-focus-border);--ck-font-size-base:13px;--ck-line-height-base:1.84615;--ck-font-face:Helvetica, Arial, Tahoma, Verdana, Sans-Serif;--ck-font-size-tiny:.7em;--ck-font-size-small:.75em;--ck-font-size-normal:1em;--ck-font-size-big:1.4em;--ck-font-size-large:1.8em;--ck-ui-component-min-height:2.3em}.ck.ck-reset,.ck.ck-reset_all,.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){box-sizing:border-box;vertical-align:middle;word-wrap:break-word;background:0 0;border:0;width:auto;height:auto;margin:0;padding:0;text-decoration:none;transition:none;position:static}.ck.ck-reset_all,.ck-reset_all :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){border-collapse:collapse;font:normal normal normal var(--ck-font-size-base)/var(--ck-line-height-base) var(--ck-font-face);color:var(--ck-color-text);text-align:left;white-space:nowrap;cursor:auto;float:none}.ck-reset_all .ck-rtl :not(.ck-reset_all-excluded,.ck-reset_all-excluded *){text-align:right}.ck-reset_all iframe:not(.ck-reset_all-excluded *){vertical-align:inherit}.ck-reset_all textarea:not(.ck-reset_all-excluded *){white-space:pre-wrap}.ck-reset_all textarea:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=password]:not(.ck-reset_all-excluded *){cursor:text}.ck-reset_all textarea[disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=text][disabled]:not(.ck-reset_all-excluded *),.ck-reset_all input[type=password][disabled]:not(.ck-reset_all-excluded *){cursor:default}.ck-reset_all fieldset:not(.ck-reset_all-excluded *){border:2px groove #dfdee3;padding:10px}.ck-reset_all button:not(.ck-reset_all-excluded *)::-moz-focus-inner{border:0;padding:0}.ck[dir=rtl],.ck[dir=rtl] .ck{text-align:right}:root{--ck-border-radius:2px;--ck-rounded-corners-radius:0}.ck-rounded-corners{--ck-rounded-corners-radius:var(--ck-border-radius)}:root{--ck-inner-shadow:2px 2px 3px var(--ck-color-shadow-inner) inset;--ck-drop-shadow:0 1px 2px 1px var(--ck-color-shadow-drop);--ck-drop-shadow-active:0 3px 6px 1px var(--ck-color-shadow-drop-active);--ck-spacing-unit:.6em;--ck-spacing-extra-large:calc(var(--ck-spacing-unit) * 2);--ck-spacing-large:calc(var(--ck-spacing-unit) * 1.5);--ck-spacing-standard:var(--ck-spacing-unit);--ck-spacing-medium:calc(var(--ck-spacing-unit) * .8);--ck-spacing-medium-small:calc(var(--ck-spacing-unit) * .667);--ck-spacing-small:calc(var(--ck-spacing-unit) * .5);--ck-spacing-tiny:calc(var(--ck-spacing-unit) * .3);--ck-spacing-extra-tiny:calc(var(--ck-spacing-unit) * .16)}.ck-hidden{display:none!important}:root{--ck-z-default:1;--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:9999}.ck-transitions-disabled,.ck-transitions-disabled *{transition:none!important}:root{--ck-powered-by-font-size:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-powered-by-line-height:calc(var(--ck-font-size-base) * 10 / 13);--ck-powered-by-letter-spacing:calc(var(--ck-font-size-base) * -.2 / 13);--ck-powered-by-padding-vertical:2px;--ck-powered-by-padding-horizontal:4px;--ck-powered-by-text-color:#4f4f4f;--ck-powered-by-border-radius:var(--ck-border-radius);--ck-powered-by-background:#fff;--ck-powered-by-border-color:var(--ck-color-focus-border);--ck-powered-by-svg-width:53;--ck-powered-by-svg-height:10;--ck-powered-by-icon-width:calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-width) / 13);--ck-powered-by-icon-height:calc(var(--ck-font-size-base) * var(--ck-powered-by-svg-height) / 13)}.ck.ck-balloon-panel.ck-powered-by-balloon{--ck-border-radius:var(--ck-powered-by-border-radius);box-shadow:none;background:var(--ck-powered-by-background);min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by{line-height:var(--ck-powered-by-line-height)}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by a{cursor:pointer;opacity:.66;filter:grayscale(80%);line-height:var(--ck-powered-by-line-height);padding:var(--ck-powered-by-padding-vertical) var(--ck-powered-by-padding-horizontal);align-items:center;display:flex}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-powered-by__label{font-size:var(--ck-powered-by-font-size);letter-spacing:var(--ck-powered-by-letter-spacing);text-transform:uppercase;cursor:pointer;color:var(--ck-powered-by-text-color);margin-right:4px;padding-left:2px;font-weight:700;line-height:normal}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by .ck-icon{cursor:pointer;width:var(--ck-powered-by-icon-width);height:var(--ck-powered-by-icon-height);display:block}.ck.ck-balloon-panel.ck-powered-by-balloon .ck.ck-powered-by:hover a{filter:grayscale(0%);opacity:1}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-powered-by-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-powered-by-border-color)}:root{--ck-evaluation-badge-font-size:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-evaluation-badge-line-height:calc(var(--ck-font-size-base) * 7.5 / 13);--ck-evaluation-badge-letter-spacing:calc(var(--ck-font-size-base) * -.2 / 13);--ck-evaluation-badge-padding-vertical:2px;--ck-evaluation-badge-padding-horizontal:4px;--ck-evaluation-badge-text-color:#4f4f4f;--ck-evaluation-badge-border-radius:var(--ck-border-radius);--ck-evaluation-badge-background:#fff;--ck-evaluation-badge-border-color:var(--ck-color-focus-border)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon{--ck-border-radius:var(--ck-evaluation-badge-border-radius);box-shadow:none;background:var(--ck-evaluation-badge-background);min-height:unset;z-index:calc(var(--ck-z-panel) - 1)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge{line-height:var(--ck-evaluation-badge-line-height);padding:var(--ck-evaluation-badge-padding-vertical) var(--ck-evaluation-badge-padding-horizontal)}.ck.ck-balloon-panel.ck-evaluation-badge-balloon .ck.ck-evaluation-badge .ck-evaluation-badge__label{font-size:var(--ck-evaluation-badge-font-size);letter-spacing:var(--ck-evaluation-badge-letter-spacing);text-transform:uppercase;color:var(--ck-evaluation-badge-text-color);padding:0 2px;font-weight:700;line-height:normal;display:block}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_inside]{border-color:#0000}.ck.ck-balloon-panel.ck-evaluation-badge-balloon[class*=position_border]{border:var(--ck-focus-ring);border-color:var(--ck-evaluation-badge-border-color)}.ck.ck-responsive-form{padding:var(--ck-spacing-large)}.ck.ck-responsive-form:focus{outline:none}[dir=ltr] .ck.ck-responsive-form>:not(:first-child){margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-responsive-form>:not(:last-child){margin-left:var(--ck-spacing-standard)}@media screen and (width<=600px){.ck.ck-responsive-form{width:calc(.8 * var(--ck-input-width));padding:0}.ck.ck-responsive-form .ck-labeled-field-view{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-responsive-form .ck-labeled-field-view .ck-input-text,.ck.ck-responsive-form .ck-labeled-field-view .ck-input-number{width:100%;min-width:0}.ck.ck-responsive-form .ck-labeled-field-view .ck-labeled-field-view__error{white-space:normal}.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2){padding:var(--ck-spacing-standard);margin-top:var(--ck-spacing-large);border-radius:0}:is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)){margin-left:0}[dir=rtl] :is(.ck.ck-responsive-form>.ck-button:last-child,.ck.ck-responsive-form>.ck-button:nth-last-child(2)):last-of-type{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:after{content:\"\";z-index:1;width:0;position:absolute;top:-1px;bottom:-1px;right:-1px}.ck.ck-responsive-form .ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck.ck-responsive-form .ck-button:focus:after{display:none}}.ck-vertical-form>.ck-button:nth-last-child(2):after{border-right:1px solid var(--ck-color-base-border)}.ck-vertical-form .ck-button:after{content:\"\";z-index:1;width:0;position:absolute;top:-1px;bottom:-1px;right:-1px}.ck-vertical-form .ck-button:focus:after{display:none}:root{--ck-form-default-width:340px}.ck.ck-form{padding:0 0 var(--ck-spacing-large)}.ck.ck-form.ck-form_default-width{width:var(--ck-form-default-width)}.ck.ck-form:focus{outline:none}.ck.ck-form .ck.ck-input-text,.ck.ck-form .ck.ck-input-number{width:0;min-width:100%}.ck.ck-form .ck.ck-dropdown{min-width:100%}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-form .ck.ck-dropdown .ck-dropdown__button .ck-button__label{width:100%}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit{flex-direction:column;align-items:stretch;padding:0}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit>.ck{margin:var(--ck-spacing-large) var(--ck-spacing-large) 0}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_with-submit .ck-button_with-text{justify-content:center}}@media screen and (width<=600px){.ck.ck-form.ck-responsive-form .ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}}[dir=ltr] .ck.ck-form.ck-responsive-form>:not(:first-child){margin-left:0}[dir=rtl] .ck.ck-form.ck-responsive-form>:not(:last-child){margin-left:0}.ck.ck-aria-live-announcer{position:absolute;top:-10000px;left:-10000px}.ck.ck-aria-live-region-list{list-style-type:none}:root{--ck-accessibility-help-dialog-max-width:600px;--ck-accessibility-help-dialog-max-height:400px;--ck-accessibility-help-dialog-border-color:#ccced1;--ck-accessibility-help-dialog-code-background-color:#ededed;--ck-accessibility-help-dialog-kbd-shadow-color:#9c9c9c}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content{padding:var(--ck-spacing-large);max-width:var(--ck-accessibility-help-dialog-max-width);max-height:var(--ck-accessibility-help-dialog-max-height);user-select:text;border:1px solid #0000;overflow:auto}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content *{white-space:normal}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content .ck-label{display:none}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3{font-size:1.2em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4{font-size:1em;font-weight:700}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content p,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h3,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content h4,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content table{margin:1em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl{border-top:1px solid var(--ck-accessibility-help-dialog-border-color);border-bottom:none;grid-template-columns:2fr 1fr;display:grid}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd{border-bottom:1px solid var(--ck-accessibility-help-dialog-border-color);padding:.4em 0}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dt{grid-column-start:1}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content dl dd{text-align:right;grid-column-start:2}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd,.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code{background:var(--ck-accessibility-help-dialog-code-background-color);vertical-align:middle;text-align:center;border-radius:2px;padding:.4em;font-size:.9em;line-height:1;display:inline-block}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content code{font-family:monospace}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd{min-width:1.8em;box-shadow:0px 1px 1px var(--ck-accessibility-help-dialog-kbd-shadow-color);margin:0 1px}.ck.ck-accessibility-help-dialog .ck-accessibility-help-dialog__content kbd+kbd{margin-left:2px}.ck.ck-button,:where(a).ck.ck-button{--ck-button-background:var(--ck-color-button-default-background);--ck-button-hover-background:var(--ck-color-button-default-hover-background);--ck-button-active-background:var(--ck-color-button-default-active-background);--ck-button-disabled-background:var(--ck-color-button-default-disabled-background);background:var(--ck-button-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):hover{background:var(--ck-button-hover-background)}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-disabled):active{background:var(--ck-button-active-background)}.ck.ck-button,:where(a).ck.ck-button{border-radius:var(--ck-rounded-corners-radius);white-space:nowrap;cursor:default;vertical-align:middle;padding:var(--ck-spacing-tiny);text-align:center;min-width:var(--ck-ui-component-min-height);min-height:var(--ck-ui-component-min-height);line-height:1;font-size:inherit;-webkit-appearance:none;-webkit-user-select:none;user-select:none;border:1px solid #0000;align-items:center;transition:box-shadow .2s ease-in-out,border .2s ease-in-out;display:inline-flex;position:relative}@media (prefers-reduced-motion:reduce){.ck.ck-button,:where(a).ck.ck-button{transition:none}}:is(.ck.ck-button,:where(a).ck.ck-button):active,:is(.ck.ck-button,:where(a).ck.ck-button):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use,:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__icon use *{color:inherit}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{font-size:inherit;font-weight:inherit;color:inherit;cursor:inherit;vertical-align:middle}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:left}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label){text-align:right}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__label{display:none}:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke{color:inherit;opacity:.5}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-left:var(--ck-spacing-large)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button) .ck-button__keystroke){margin-right:var(--ck-spacing-large)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled{background:var(--ck-button-disabled-background)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:active,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled:focus{box-shadow:var(--ck-focus-disabled-outer-shadow), 0 0}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__icon,:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-disabled .ck-button__keystroke{opacity:.3}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text{padding:var(--ck-spacing-tiny) var(--ck-spacing-standard)}[dir=ltr] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__icon){margin-left:var(--ck-spacing-medium)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-text .ck-button__label{display:inline-block}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button_with-keystroke .ck-button__label{flex-grow:1}:is(.ck.ck-button,:where(a).ck.ck-button).ck-on{--ck-button-background:var(--ck-color-button-on-background);--ck-button-hover-background:var(--ck-color-button-on-hover-background);--ck-button-active-background:var(--ck-color-button-on-active-background);--ck-button-disabled-background:var(--ck-color-button-on-disabled-background);color:var(--ck-color-button-on-color)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-save{color:var(--ck-color-button-save)}:is(.ck.ck-button,:where(a).ck.ck-button).ck-button-cancel{color:var(--ck-color-button-cancel)}[dir=ltr] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:left}[dir=rtl] :is(.ck.ck-button,:where(a).ck.ck-button){justify-content:right}:is(.ck.ck-button,:where(a).ck.ck-button):not(.ck-button_with-text){justify-content:center}.ck.ck-button-action,a.ck.ck-button-action{--ck-button-background:var(--ck-color-button-action-background);--ck-button-hover-background:var(--ck-color-button-action-hover-background);--ck-button-active-background:var(--ck-color-button-action-active-background);--ck-button-disabled-background:var(--ck-color-button-action-disabled-background);color:var(--ck-color-button-action-text)}.ck.ck-button-bold,a.ck.ck-button-bold{font-weight:700}:root{--ck-switch-button-toggle-width:2.61538em;--ck-switch-button-toggle-inner-size:calc(1.07692em + 1px);--ck-switch-button-translation:calc(var(--ck-switch-button-toggle-width) - var(--ck-switch-button-toggle-inner-size) - 2px );--ck-switch-button-inner-hover-shadow:0 0 0 5px var(--ck-color-switch-button-inner-shadow)}.ck.ck-button.ck-switchbutton,.ck.ck-button.ck-switchbutton:hover,.ck.ck-button.ck-switchbutton:focus,.ck.ck-button.ck-switchbutton:active,.ck.ck-button.ck-switchbutton.ck-on:hover,.ck.ck-button.ck-switchbutton.ck-on:focus,.ck.ck-button.ck-switchbutton.ck-on:active{color:inherit;background:0 0}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-right:calc(2 * var(--ck-spacing-large))}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__label){margin-left:calc(2 * var(--ck-spacing-large))}.ck.ck-button.ck-switchbutton .ck-button__toggle{border-radius:var(--ck-rounded-corners-radius);width:var(--ck-switch-button-toggle-width);background:var(--ck-color-switch-button-off-background);border:1px solid #0000;transition:background .4s,box-shadow .2s ease-in-out,outline .2s ease-in-out}[dir=ltr] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-left:auto}[dir=rtl] :is(.ck.ck-button.ck-switchbutton .ck-button__toggle){margin-right:auto}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{border-radius:calc(.5 * var(--ck-rounded-corners-radius));width:var(--ck-switch-button-toggle-inner-size);height:var(--ck-switch-button-toggle-inner-size);background:var(--ck-color-switch-button-inner-background);transition:all .3s}@media (prefers-reduced-motion:reduce){.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{transition:none}}.ck.ck-button.ck-switchbutton .ck-button__toggle .ck-button__toggle__inner{display:block}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover{background:var(--ck-color-switch-button-off-hover-background)}.ck.ck-button.ck-switchbutton .ck-button__toggle:hover .ck-button__toggle__inner{box-shadow:var(--ck-switch-button-inner-hover-shadow)}.ck.ck-button.ck-switchbutton .ck-button__toggle{display:block}.ck.ck-button.ck-switchbutton.ck-disabled .ck-button__toggle{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-switchbutton:focus{box-shadow:none;border-color:#0000;outline:none}.ck.ck-button.ck-switchbutton:focus .ck-button__toggle{box-shadow:0 0 0 1px var(--ck-color-base-background), 0 0 0 5px var(--ck-color-focus-outer-shadow);outline-offset:1px;outline:var(--ck-focus-ring)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle{background:var(--ck-color-switch-button-on-background)}.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle:hover{background:var(--ck-color-switch-button-on-hover-background)}[dir=ltr] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(var(--ck-switch-button-translation))}[dir=rtl] :is(.ck.ck-button.ck-switchbutton.ck-on .ck-button__toggle .ck-button__toggle__inner){transform:translateX(calc(-1 * var(--ck-switch-button-translation)))}.ck.ck-button.ck-list-item-button{padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard))}.ck.ck-button.ck-list-item-button,.ck.ck-button.ck-list-item-button.ck-on{background:var(--ck-color-list-background);color:var(--ck-color-text)}[dir=ltr] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-list-item-button:has(.ck-list-item-button__check-holder){padding-right:var(--ck-spacing-small)}.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled),.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button.ck-on:hover{background:var(--ck-color-list-button-hover-background)}:is(.ck.ck-button.ck-list-item-button:hover:not(.ck-disabled),.ck.ck-button.ck-list-item-button.ck-button.ck-on:hover,.ck.ck-button.ck-list-item-button.ck-on:not(.ck-list-item-button_toggleable),.ck.ck-button.ck-list-item-button.ck-on:hover):not(.ck-disabled){color:var(--ck-color-text)}.ck.ck-list-item-button{min-height:unset;border-radius:0;width:100%}[dir=ltr] .ck.ck-list-item-button{text-align:left}[dir=rtl] .ck.ck-list-item-button{text-align:right}[dir=ltr] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-list-item-button.ck-list-item-button_toggleable{padding-right:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-holder{width:.9em;height:.9em;display:inline-flex}[dir=ltr] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-right:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-list-item-button .ck-list-item-button__check-holder){margin-left:var(--ck-spacing-small)}.ck.ck-list-item-button .ck-list-item-button__check-icon{height:100%}:root{--ck-collapsible-arrow-size:calc(.5 * var(--ck-icon-size))}.ck.ck-collapsible>.ck.ck-button{width:100%;color:inherit;border-radius:0;font-weight:700}.ck.ck-collapsible>.ck.ck-button:focus{background:0 0}.ck.ck-collapsible>.ck.ck-button:active,.ck.ck-collapsible>.ck.ck-button:not(:focus),.ck.ck-collapsible>.ck.ck-button:hover:not(:focus){box-shadow:none;background:0 0;border-color:#0000}.ck.ck-collapsible>.ck.ck-button>.ck-icon{margin-right:var(--ck-spacing-medium);width:var(--ck-collapsible-arrow-size)}.ck.ck-collapsible>.ck-collapsible__children{padding:var(--ck-spacing-medium) var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck.ck-button .ck-icon{transform:rotate(-90deg)}.ck.ck-collapsible.ck-collapsible_collapsed>.ck-collapsible__children{display:none}:root{--ck-color-grid-tile-size:24px;--ck-color-color-grid-check-icon:#166fd4}.ck.ck-color-grid{grid-gap:5px;padding:8px;display:grid}.ck.ck-color-grid__tile{transition:box-shadow .2s}@media (forced-colors:none){.ck.ck-color-grid__tile{width:var(--ck-color-grid-tile-size);height:var(--ck-color-grid-tile-size);min-width:var(--ck-color-grid-tile-size);min-height:var(--ck-color-grid-tile-size);border:0;padding:0}.ck.ck-color-grid__tile.ck-on,.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){border:0}.ck.ck-color-grid__tile.ck-color-selector__color-tile_bordered{box-shadow:0 0 0 1px var(--ck-color-base-border)}.ck.ck-color-grid__tile.ck-on{box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-base-text)}.ck.ck-color-grid__tile:focus:not(.ck-disabled),.ck.ck-color-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border)}}@media (forced-colors:active){.ck.ck-color-grid__tile{width:unset;height:unset;min-width:unset;min-height:unset;padding:0 var(--ck-spacing-small)}.ck.ck-color-grid__tile .ck-button__label{display:inline-block}}@media (prefers-reduced-motion:reduce){.ck.ck-color-grid__tile{transition:none}}.ck.ck-color-grid__tile.ck-disabled{cursor:unset;transition:unset}.ck.ck-color-grid__tile .ck.ck-icon{color:var(--ck-color-color-grid-check-icon);display:none}.ck.ck-color-grid__tile.ck-on .ck.ck-icon{display:block}.ck.ck-color-grid__label{padding:0 var(--ck-spacing-standard)}.color-picker-hex-input{width:max-content}.color-picker-hex-input .ck.ck-input{min-width:unset}.ck.ck-color-picker__row{margin:var(--ck-spacing-large) 0 0;width:unset;flex-flow:row;justify-content:space-between;display:flex}.ck.ck-color-picker__row .ck.ck-labeled-field-view{padding-top:unset}.ck.ck-color-picker__row .ck.ck-input-text{width:unset}.ck.ck-color-picker__row .ck-color-picker__hash-view{padding-top:var(--ck-spacing-tiny);padding-right:var(--ck-spacing-medium)}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker{align-items:center;width:100%;display:flex}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__remove-color,.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker){justify-content:flex-start}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker{padding:calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker:not(:focus){border-top:1px solid var(--ck-color-base-border)}[dir=ltr] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-color-selector .ck-color-grids-fragment .ck-button.ck-color-selector__color-picker .ck.ck-icon){margin-left:var(--ck-spacing-standard)}.ck.ck-color-selector .ck-color-grids-fragment label.ck.ck-color-grid__label{font-weight:unset}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker{padding:8px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker{min-width:180px;height:100px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation){border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue){border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius)}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(saturation-pointer),.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-picker .hex-color-picker::part(hue-pointer){width:15px;height:15px}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar{flex-direction:row;justify-content:space-around;padding:0 8px 8px;display:flex}.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-save,.ck.ck-color-selector .ck-color-picker-fragment .ck.ck-color-selector_action-bar .ck-button-cancel{flex:1}:root{--ck-dialog-overlay-background-color:#00000080;--ck-dialog-drop-shadow:0px 0px 6px 2px #00000026;--ck-dialog-max-width:100vw;--ck-dialog-max-height:90vh;--ck-color-dialog-background:var(--ck-color-base-background);--ck-color-dialog-form-header-border:var(--ck-color-base-border)}.ck.ck-dialog-overlay{background:var(--ck-dialog-overlay-background-color);z-index:var(--ck-z-dialog);user-select:none;overscroll-behavior:none;animation:.3s ck-dialog-fade-in;position:fixed;inset:0}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent{pointer-events:none;background:0 0;animation:none}.ck.ck-dialog{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;--ck-drop-shadow:var(--ck-dialog-drop-shadow);background:var(--ck-color-dialog-background);max-height:var(--ck-dialog-max-height);max-width:var(--ck-dialog-max-width);border:1px solid var(--ck-color-base-border);overscroll-behavior:contain;overscroll-behavior:none;width:fit-content;position:absolute}.ck.ck-dialog .ck.ck-form__header{border-bottom:1px solid var(--ck-color-dialog-form-header-border);flex-shrink:0}.ck.ck-dialog:not(.ck-dialog_modal) .ck.ck-form__header .ck-form__header__label{cursor:grab}.ck.ck-dialog-overlay.ck-dialog-overlay__transparent .ck.ck-dialog{pointer-events:all}.ck-dialog-scroll-locked{overflow:hidden}@keyframes ck-dialog-fade-in{0%{background:0 0}to{background:var(--ck-dialog-overlay-background-color)}}.ck.ck-dialog .ck.ck-dialog__actions{padding:var(--ck-spacing-large);display:flex}.ck.ck-dialog .ck.ck-dialog__actions>*+*{margin-left:var(--ck-spacing-large)}.ck.ck-dialog .ck.ck-dialog__actions{justify-content:flex-end}:root{--ck-dropdown-arrow-size:calc(.5 * var(--ck-icon-size));--ck-dropdown-max-width:75vw}.ck.ck-dropdown{font-size:inherit;display:inline-block;position:relative}.ck.ck-dropdown .ck-dropdown__arrow{width:var(--ck-dropdown-arrow-size);pointer-events:none;z-index:var(--ck-z-default)}[dir=ltr] .ck.ck-dropdown .ck-dropdown__arrow{right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-dropdown .ck-dropdown__arrow{left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small)}.ck.ck-dropdown.ck-disabled .ck-dropdown__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-dropdown .ck-button.ck-dropdown__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{text-overflow:ellipsis;width:7em;overflow:hidden}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-disabled .ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on{border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-dropdown__button_label-width_auto .ck-button__label{width:auto}.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active{box-shadow:none}:is(.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-off:active,.ck.ck-dropdown .ck-button.ck-dropdown__button.ck-on:active):focus{box-shadow:var(--ck-focus-outer-shadow), 0 0}.ck.ck-dropdown .ck-button.ck-dropdown__button{width:100%}.ck.ck-dropdown .ck-dropdown__panel{z-index:var(--ck-z-panel);max-width:var(--ck-dropdown-max-width);display:none;position:absolute}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel-visible{display:inline-block}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme{bottom:100%}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s{top:100%;bottom:auto}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_ne,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_se{left:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sw{right:0}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_s,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_n{left:50%;transform:translate(-50%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nmw,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_smw{left:75%;transform:translate(-75%)}.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_nme,.ck.ck-dropdown .ck-dropdown__panel.ck-dropdown__panel_sme{left:25%;transform:translate(-25%)}.ck.ck-dropdown__panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);min-width:100%;bottom:0}.ck.ck-dropdown__panel.ck-dropdown__panel_se{border-top-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_sw{border-top-right-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_ne{border-bottom-left-radius:0}.ck.ck-dropdown__panel.ck-dropdown__panel_nw{border-bottom-right-radius:0}.ck.ck-dropdown__panel:focus{outline:none}.ck.ck-toolbar .ck-dropdown__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-split-button-hover-background:#ebebeb;--ck-color-split-button-hover-border:#b3b3b3}.ck.ck-splitbutton .ck-splitbutton__action:focus{z-index:calc(var(--ck-z-default) + 1)}[dir=ltr] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-top-right-radius:unset;border-bottom-right-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton:hover>.ck-splitbutton__action,.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action){border-top-left-radius:unset;border-bottom-left-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow{min-width:unset}[dir=ltr] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-top-left-radius:unset;border-bottom-left-radius:unset}[dir=rtl] :is(.ck.ck-splitbutton>.ck-splitbutton__arrow){border-top-right-radius:unset;border-bottom-right-radius:unset}.ck.ck-splitbutton>.ck-splitbutton__arrow svg{width:var(--ck-dropdown-arrow-size)}.ck.ck-splitbutton>.ck-splitbutton__arrow:not(:focus){border-top-width:0;border-bottom-width:0}.ck.ck-splitbutton.ck-splitbutton_open{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__action{border-bottom-left-radius:0}.ck.ck-splitbutton.ck-splitbutton_open>.ck-splitbutton__arrow{border-bottom-right-radius:0}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-button:not(.ck-on):not(.ck-disabled):not(:hover){background:var(--ck-color-split-button-hover-background)}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{content:\"\";background-color:var(--ck-color-split-button-hover-border);width:1px;height:100%;position:absolute}:is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:focus:after{--ck-color-split-button-hover-border:var(--ck-color-focus-border)}[dir=ltr] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{left:-1px}[dir=rtl] :is(.ck.ck-splitbutton.ck-splitbutton_open,.ck.ck-splitbutton:hover)>.ck-splitbutton__arrow:not(.ck-disabled):after{right:-1px}:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-background)}:is(:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__action:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled),:is(.ck.ck-splitbutton.ck-splitbutton_flatten:hover,.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open)>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover)):after{display:none}.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__action:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled),.ck.ck-splitbutton.ck-splitbutton_flatten.ck-splitbutton_open:hover>.ck-splitbutton__arrow:not(.ck-disabled):not(:hover){background-color:var(--ck-color-button-on-hover-background)}.ck.ck-splitbutton{font-size:inherit}.ck.ck-toolbar-dropdown .ck-toolbar{border:0}:root{--ck-toolbar-dropdown-max-width:60vw}.ck.ck-toolbar-dropdown>.ck-dropdown__panel{width:max-content;max-width:var(--ck-toolbar-dropdown-max-width)}.ck.ck-toolbar-dropdown>.ck-dropdown__panel .ck-button:focus{z-index:calc(var(--ck-z-default) + 1)}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:first-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-dropdown>.ck-dropdown__panel>.ck-list .ck-list__item:last-child>.ck-button{border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-dropdown-menu-list__nested-menu{display:block}:root{--ck-dropdown-menu-menu-item-min-width:18em}.ck.ck-dropdown-menu-list__nested-menu__item{min-width:var(--ck-dropdown-menu-menu-item-min-width)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button{border-radius:0}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container,.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck-button.ck-dropdown-menu-list__nested-menu__item__button>.ck-spinner-container{margin-left:calc(-1 * var(--ck-spacing-small));margin-right:var(--ck-spacing-small)}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus{box-shadow:none;border-color:#0000}.ck-button.ck-dropdown-menu-list__nested-menu__item__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button{width:100%;padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));border-radius:0}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus{box-shadow:none;border-color:#0000}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button:focus:not(.ck-on){background:var(--ck-color-button-default-hover-background)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-icon-spacing:not(:has(.ck-button__icon))>.ck-button__label{margin-left:calc(var(--ck-icon-size) - var(--ck-spacing-small))}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow{width:var(--ck-dropdown-arrow-size);pointer-events:none;z-index:var(--ck-z-default)}[dir=ltr] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-standard);margin-right:calc(-1 * var(--ck-spacing-small));transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-button.ck-dropdown-menu-list__nested-menu__button>.ck-dropdown-menu-list__nested-menu__button__arrow){left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small);margin-left:calc(-1 * var(--ck-spacing-small));transform:rotate(90deg)}.ck.ck-button.ck-dropdown-menu-list__nested-menu__button.ck-disabled>.ck-dropdown-menu-list__nested-menu__button__arrow{opacity:var(--ck-disabled-opacity)}[dir=ltr] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] .ck.ck-button.ck-dropdown-menu-list__nested-menu__button:not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}:root{--ck-dropdown-menu-menu-panel-max-width:75vw}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);height:fit-content;max-width:var(--ck-dropdown-menu-menu-panel-max-width);max-height:314px;position:absolute;bottom:0;overflow-y:auto}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:after,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:before{display:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_es,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_se{border-top-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ws,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_sw{border-top-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_en,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_ne{border-bottom-left-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_wn,.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel.ck-balloon-panel_nw{border-bottom-right-radius:0}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel:focus{outline:none}.ck.ck-balloon-panel.ck-dropdown-menu__nested-menu__panel{z-index:calc(var(--ck-z-panel) + 1)}:root{--ck-color-editable-blur-selection:#d9d9d9}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content{border-radius:var(--ck-rounded-corners-radius);border:1px solid var(--ck-color-base-border);border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content.ck-sticky-panel__content_sticky{border-bottom-width:1px}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-menu-bar{border:0;border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-editor__top .ck-sticky-panel .ck-sticky-panel__content .ck-toolbar{border:0}.ck.ck-editor__editable:not(.ck-editor__nested-editable){border-radius:var(--ck-rounded-corners-radius)}.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow), 0 0;outline:none}.ck.ck-editor__editable_inline{padding:0 var(--ck-spacing-standard);border:1px solid #0000;overflow:auto}.ck.ck-editor__editable_inline[dir=ltr]{text-align:left}.ck.ck-editor__editable_inline[dir=rtl]{text-align:right}.ck.ck-editor__editable_inline>:first-child{margin-top:var(--ck-spacing-large)}.ck.ck-editor__editable_inline>:last-child{margin-bottom:var(--ck-spacing-large)}.ck.ck-editor__editable_inline.ck-blurred ::selection{background:var(--ck-color-editable-blur-selection)}.ck.ck-editor__editable_inline.ck-editor__editable_inline-root br{margin-top:0;margin-bottom:0}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_n]:after{border-bottom-color:var(--ck-color-panel-background)}.ck.ck-balloon-panel.ck-toolbar-container[class*=arrow_s]:after{border-top-color:var(--ck-color-panel-background)}.ck.ck-form__row{padding:var(--ck-spacing-standard) var(--ck-spacing-large) 0;flex-direction:row;justify-content:space-between;align-items:flex-start;display:flex}.ck.ck-form__row.ck-form__row_large-top-padding{padding-top:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_large-bottom-padding{padding-bottom:var(--ck-spacing-large)}.ck.ck-form__row.ck-form__row_with-submit{flex-wrap:nowrap}.ck.ck-form__row.ck-form__row_with-submit>:not(:first-child){margin-inline-start:var(--ck-spacing-standard)}.ck.ck-form__row>.ck.ck-form__row{padding:0}:root{--ck-form-header-height:3.384em}.ck.ck-form__header{padding:var(--ck-spacing-small) var(--ck-spacing-large);height:var(--ck-form-header-height);line-height:var(--ck-form-header-height);border-bottom:1px solid var(--ck-color-base-border);flex-flow:row;flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.ck.ck-form__header>.ck-icon{flex-shrink:0;margin-inline-end:var(--ck-spacing-medium)}.ck.ck-form__header .ck-form__header__label{--ck-font-size-base:1.153em;font-weight:700}.ck.ck-form__header:has(.ck-button-back.ck-hidden){padding-inline:var(--ck-spacing-large) var(--ck-spacing-large)}.ck.ck-form__header:has(.ck-button-back:not(.ck-hidden)){padding-inline:var(--ck-spacing-small) var(--ck-spacing-small)}.ck.ck-form__header>.ck-button-back{margin-inline-end:var(--ck-spacing-small)}.ck.ck-form__header>.ck.ck-button{flex-shrink:0}.ck.ck-form__header h2.ck-form__header__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}:root{--ck-icon-size:calc(var(--ck-line-height-base) * var(--ck-font-size-normal));--ck-icon-font-size:.833335em}.ck.ck-icon{width:var(--ck-icon-size);height:var(--ck-icon-size);font-size:var(--ck-icon-font-size);cursor:inherit}.ck.ck-icon *{cursor:inherit}.ck.ck-icon.ck-icon_inherit-color{color:inherit}.ck.ck-icon.ck-icon_inherit-color *{color:inherit}.ck.ck-icon.ck-icon_inherit-color *:not([fill]){fill:currentColor}.ck.ck-icon{vertical-align:middle}:root{--ck-input-width:18em;--ck-input-text-width:var(--ck-input-width)}.ck.ck-input{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-input-background);border:1px solid var(--ck-color-input-border);padding:var(--ck-spacing-extra-tiny) var(--ck-spacing-medium);min-width:var(--ck-input-width);min-height:var(--ck-ui-component-min-height);transition:box-shadow .1s ease-in-out,border .1s ease-in-out}@media (prefers-reduced-motion:reduce){.ck.ck-input{transition:none}}.ck.ck-input:focus{border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none}.ck.ck-input[readonly]{border:1px solid var(--ck-color-input-disabled-border);background:var(--ck-color-input-disabled-background);color:var(--ck-color-input-disabled-text)}.ck.ck-input[readonly]:focus{box-shadow:var(--ck-focus-disabled-outer-shadow), 0 0}.ck.ck-input.ck-error{border-color:var(--ck-color-input-error-border);animation:.3s both ck-input-shake}@media (prefers-reduced-motion:reduce){.ck.ck-input.ck-error{animation:none}}.ck.ck-input.ck-error:focus{box-shadow:var(--ck-focus-error-outer-shadow), 0 0}@keyframes ck-input-shake{20%{transform:translate(-2px)}40%{transform:translate(2px)}60%{transform:translate(-1px)}80%{transform:translate(1px)}}.ck-textarea{overflow-x:hidden}.ck.ck-label{font-weight:700;display:block}.ck.ck-voice-label{display:none}:root{--ck-labeled-field-view-transition:.1s cubic-bezier(0, 0, .24, .95);--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-spacing-medium);--ck-labeled-field-label-default-position-x:var(--ck-spacing-medium);--ck-labeled-field-label-default-position-y:calc(.6 * var(--ck-font-size-base));--ck-color-labeled-field-label-background:var(--ck-color-base-background)}.ck.ck-labeled-field-view{border-radius:var(--ck-rounded-corners-radius)}.ck.ck-labeled-field-view .ck.ck-label{display:block;position:absolute}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{width:100%;display:flex}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{pointer-events:none;background:var(--ck-color-labeled-field-label-background);padding:0 calc(.5 * var(--ck-font-size-tiny));line-height:initial;text-overflow:ellipsis;max-width:100%;transition:transform var(--ck-labeled-field-view-transition), padding var(--ck-labeled-field-view-transition), background var(--ck-labeled-field-view-transition);font-weight:400;top:0;overflow:hidden}[dir=ltr] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform-origin:0 0;transform:translate(var(--ck-spacing-medium), -6px) scale(.75);left:0}[dir=rtl] :is(.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform-origin:100% 0;transform:translate(calc(-1 * var(--ck-spacing-medium)), -6px) scale(.75);right:0}@media (prefers-reduced-motion:reduce){.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{transition:none}}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper{position:relative}.ck.ck-labeled-field-view.ck-error>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-error .ck-input:not([readonly])+.ck.ck-label{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view .ck-labeled-field-view__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-field-view .ck-labeled-field-view__status.ck-labeled-field-view__status_error{color:var(--ck-color-base-error)}.ck.ck-labeled-field-view.ck-disabled>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{color:var(--ck-color-input-disabled-text)}[dir=ltr] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(var(--ck-labeled-field-label-default-position-x), var(--ck-labeled-field-label-default-position-y)) scale(1)}[dir=rtl] :is(.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label){transform:translate(calc(-1 * var(--ck-labeled-field-label-default-position-x)), var(--ck-labeled-field-label-default-position-y)) scale(1)}.ck.ck-labeled-field-view.ck-disabled.ck-labeled-field-view_empty:not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label,.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder):not(.ck-error)>.ck.ck-labeled-field-view__input-wrapper>.ck.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width));background:0 0;padding:0}.ck.ck-labeled-field-view>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck.ck-button{background:0 0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown>.ck-button>.ck-button__label{opacity:0}.ck.ck-labeled-field-view.ck-labeled-field-view_empty:not(.ck-labeled-field-view_focused):not(.ck-labeled-field-view_placeholder)>.ck.ck-labeled-field-view__input-wrapper>.ck-dropdown+.ck-label{max-width:calc(var(--ck-labeled-field-empty-unfocused-max-width) - var(--ck-dropdown-arrow-size) - var(--ck-spacing-standard))}.ck.ck-labeled-field-view.ck-labeled-field-view_full-width{flex-grow:1}.ck.ck-labeled-input .ck-labeled-input__status{font-size:var(--ck-font-size-small);margin-top:var(--ck-spacing-small);white-space:normal}.ck.ck-labeled-input .ck-labeled-input__status_error{color:var(--ck-color-base-error)}.ck.ck-list{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-list-background);padding:var(--ck-spacing-small) 0;-webkit-user-select:none;user-select:none;flex-direction:column;list-style-type:none;display:flex}.ck.ck-list .ck-list__item,.ck.ck-list .ck-list__separator{display:block}.ck.ck-list .ck-list__item>:focus{z-index:var(--ck-z-default);position:relative}.ck.ck-list__item{cursor:default;min-width:15em}.ck.ck-list__item>.ck-button:not(.ck-list-item-button){padding:var(--ck-spacing-tiny) calc(2 * var(--ck-spacing-standard));min-height:unset;border-radius:0;width:100%}[dir=ltr] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:left}[dir=rtl] :is(.ck.ck-list__item>.ck-button:not(.ck-list-item-button)){text-align:right}.ck.ck-list__item>.ck-button:not(.ck-list-item-button) .ck-button__label{line-height:calc(var(--ck-line-height-base) * var(--ck-font-size-base))}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on{background:var(--ck-color-list-button-on-background);color:var(--ck-color-list-button-on-text)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:active{box-shadow:none}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-on-background-focus)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button).ck-on:focus:not(.ck-disabled){border-color:var(--ck-color-base-background)}.ck.ck-list__item>.ck-button:not(.ck-list-item-button):hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background)}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on{background:var(--ck-color-list-background);color:inherit}.ck.ck-list__item>.ck-button.ck-switchbutton.ck-on:hover:not(.ck-disabled){background:var(--ck-color-list-button-hover-background);color:inherit}.ck-list .ck-list__group{padding-top:var(--ck-spacing-medium)}.ck-list .ck-list__group:first-child{padding-top:0}:not(.ck-hidden)~:is(.ck-list .ck-list__group){border-top:1px solid var(--ck-color-base-border)}.ck-list .ck-list__group>.ck-label{padding:var(--ck-spacing-medium) var(--ck-spacing-large) 0;font-size:11px;font-weight:700}.ck.ck-list__separator{background:var(--ck-color-base-border);width:100%;height:1px;margin:var(--ck-spacing-small) 0}:root{--ck-balloon-border-width:1px;--ck-balloon-arrow-offset:2px;--ck-balloon-arrow-height:10px;--ck-balloon-arrow-half-width:8px;--ck-balloon-arrow-drop-shadow:0 2px 2px var(--ck-color-shadow-drop);--ck-balloon-panel-arrow-z-index:calc(var(--ck-z-default) - 3)}.ck.ck-balloon-panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-panel-background);border:var(--ck-balloon-border-width) solid var(--ck-color-panel-border);min-height:15px;z-index:var(--ck-z-panel);display:none;position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before,.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{content:\"\";border-style:solid;width:0;height:0;position:absolute}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:before{z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel.ck-balloon-panel_with-arrow:after{z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_n]:before,.ck.ck-balloon-panel[class*=arrow_n]:after{border-width:0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_n]:before{border-color:transparent transparent var(--ck-color-panel-border) transparent;margin-top:calc(-1 * var(--ck-balloon-border-width));z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_n]:after{border-color:transparent transparent var(--ck-color-panel-background) transparent;margin-top:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_s]:before,.ck.ck-balloon-panel[class*=arrow_s]:after{border-width:var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width)}.ck.ck-balloon-panel[class*=arrow_s]:before{border-color:var(--ck-color-panel-border) transparent transparent;filter:drop-shadow(var(--ck-balloon-arrow-drop-shadow));margin-bottom:calc(-1 * var(--ck-balloon-border-width));z-index:var(--ck-balloon-panel-arrow-z-index)}.ck.ck-balloon-panel[class*=arrow_s]:after{border-color:var(--ck-color-panel-background) transparent transparent transparent;margin-bottom:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width));z-index:calc(var(--ck-balloon-panel-arrow-z-index) + 1)}.ck.ck-balloon-panel[class*=arrow_e]:before,.ck.ck-balloon-panel[class*=arrow_e]:after{border-width:var(--ck-balloon-arrow-half-width) 0 var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height)}.ck.ck-balloon-panel[class*=arrow_e]:before{border-color:transparent transparent transparent var(--ck-color-panel-border);margin-right:calc(-1 * var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_e]:after{border-color:transparent transparent transparent var(--ck-color-panel-background);margin-right:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:before,.ck.ck-balloon-panel[class*=arrow_w]:after{border-width:var(--ck-balloon-arrow-half-width) var(--ck-balloon-arrow-height) var(--ck-balloon-arrow-half-width) 0}.ck.ck-balloon-panel[class*=arrow_w]:before{border-color:transparent var(--ck-color-panel-border) transparent transparent;margin-left:calc(-1 * var(--ck-balloon-border-width))}.ck.ck-balloon-panel[class*=arrow_w]:after{border-color:transparent var(--ck-color-panel-background) transparent transparent;margin-left:calc(var(--ck-balloon-arrow-offset) - var(--ck-balloon-border-width))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_n:after{margin-left:calc(-1 * var(--ck-balloon-arrow-half-width));left:50%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nw:after{left:calc(2 * var(--ck-balloon-arrow-half-width));top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_ne:after{right:calc(2 * var(--ck-balloon-arrow-half-width));top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_s:after{margin-left:calc(-1 * var(--ck-balloon-arrow-half-width));left:50%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sw:after{left:calc(2 * var(--ck-balloon-arrow-half-width));bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_se:after{right:calc(2 * var(--ck-balloon-arrow-half-width));bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_sme:after{margin-right:calc(2 * var(--ck-balloon-arrow-half-width));right:25%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_smw:after{margin-left:calc(2 * var(--ck-balloon-arrow-half-width));left:25%;bottom:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nme:after{margin-right:calc(2 * var(--ck-balloon-arrow-half-width));right:25%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_nmw:after{margin-left:calc(2 * var(--ck-balloon-arrow-half-width));left:25%;top:calc(-1 * var(--ck-balloon-arrow-height))}.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_e:after{right:calc(-1 * var(--ck-balloon-arrow-height));margin-top:calc(-1 * var(--ck-balloon-arrow-half-width));top:50%}.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:before,.ck.ck-balloon-panel.ck-balloon-panel_arrow_w:after{left:calc(-1 * var(--ck-balloon-arrow-height));margin-top:calc(-1 * var(--ck-balloon-arrow-half-width));top:50%}.ck.ck-balloon-panel.ck-balloon-panel_visible{display:block}.ck .ck-balloon-rotator__navigation{background:var(--ck-color-toolbar-background);border-bottom:1px solid var(--ck-color-toolbar-border);padding:0 var(--ck-spacing-small);align-items:center;display:flex}.ck .ck-balloon-rotator__navigation>*{margin-right:var(--ck-spacing-small);margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation .ck-balloon-rotator__counter{margin-right:var(--ck-spacing-standard);margin-left:var(--ck-spacing-small)}.ck .ck-balloon-rotator__navigation{justify-content:center}.ck .ck-balloon-rotator__content .ck.ck-annotation-wrapper{box-shadow:none}.ck .ck-balloon-rotator__content .ck-toolbar{justify-content:center}:root{--ck-balloon-fake-panel-offset-horizontal:6px;--ck-balloon-fake-panel-offset-vertical:6px}.ck .ck-fake-panel div{box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-panel-background);border:1px solid var(--ck-color-panel-border);border-radius:var(--ck-border-radius);width:100%;height:100%;min-height:15px;position:absolute}.ck .ck-fake-panel div:first-child{margin-left:var(--ck-balloon-fake-panel-offset-horizontal);margin-top:var(--ck-balloon-fake-panel-offset-vertical);z-index:2}.ck .ck-fake-panel div:nth-child(2){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal) * 2);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical) * 2);z-index:1}.ck .ck-fake-panel div:nth-child(3){margin-left:calc(var(--ck-balloon-fake-panel-offset-horizontal) * 3);margin-top:calc(var(--ck-balloon-fake-panel-offset-vertical) * 3)}.ck .ck-fake-panel{z-index:calc(var(--ck-z-panel) - 1);position:absolute}.ck .ck-balloon-panel_arrow_s+.ck-fake-panel,.ck .ck-balloon-panel_arrow_se+.ck-fake-panel,.ck .ck-balloon-panel_arrow_sw+.ck-fake-panel{--ck-balloon-fake-panel-offset-vertical:-6px}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky{box-shadow:var(--ck-drop-shadow), 0 0;z-index:var(--ck-z-panel);border-width:0 1px 1px;border-top-left-radius:0;border-top-right-radius:0;position:fixed;top:0}.ck.ck-sticky-panel .ck-sticky-panel__content_sticky_bottom-limit{position:absolute;top:auto}.ck.ck-autocomplete>.ck-search__results{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-base-background);border:1px solid var(--ck-color-dropdown-panel-border);min-width:auto;max-height:200px;position:absolute;overflow-y:auto}.ck.ck-autocomplete>.ck-search__results.ck-search__results_n{border-bottom-right-radius:0;border-bottom-left-radius:0;margin-bottom:-1px;bottom:100%}.ck.ck-autocomplete>.ck-search__results.ck-search__results_s{border-top-left-radius:0;border-top-right-radius:0;margin-top:-1px;top:100%;bottom:auto}.ck.ck-autocomplete>.ck-search__results{z-index:var(--ck-z-panel)}.ck.ck-autocomplete{position:relative}:root{--ck-search-field-view-horizontal-spacing:calc(var(--ck-icon-size) + var(--ck-spacing-medium))}.ck.ck-search>.ck-labeled-field-view .ck-input{width:100%}.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon{position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){left:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view>.ck-labeled-field-view__input-wrapper>.ck-icon){right:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view .ck-search__reset{position:absolute;top:50%;transform:translateY(-50%)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon{--ck-labeled-field-label-default-position-x:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon>.ck-labeled-field-view__input-wrapper>.ck-icon{opacity:.5;pointer-events:none}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input){padding-left:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-icon .ck-input):not(.ck-input-text_empty){padding-left:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset{--ck-labeled-field-empty-unfocused-max-width:100% - 2 * var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset.ck-labeled-field-view_empty{--ck-labeled-field-empty-unfocused-max-width:100% - var(--ck-search-field-view-horizontal-spacing) - var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset{opacity:.5;background:0 0;min-width:auto;min-height:auto;padding:0}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset){left:var(--ck-spacing-medium)}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-search__reset:hover{opacity:1}.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input{width:100%}[dir=ltr] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input):not(.ck-input-text_empty){padding-right:var(--ck-search-field-view-horizontal-spacing)}[dir=rtl] :is(.ck.ck-search>.ck-labeled-field-view.ck-search__query_with-reset .ck-input){padding-right:var(--ck-search-field-view-horizontal-spacing)}.ck.ck-search>.ck-search__results{min-width:100%}.ck.ck-search>.ck-search__results>.ck-search__info{width:100%;padding:var(--ck-spacing-medium) var(--ck-spacing-large)}.ck.ck-search>.ck-search__results>.ck-search__info *{white-space:normal}.ck.ck-search>.ck-search__results>.ck-search__info>span:first-child{font-weight:700;display:block}.ck.ck-search>.ck-search__results>.ck-search__info>span:last-child{margin-top:var(--ck-spacing-medium)}.ck.ck-search>.ck-search__results>.ck-search__info:not(.ck-hidden)~*{display:none}.ck.ck-highlighted-text mark{background:var(--ck-color-highlight-background);vertical-align:initial;font-weight:inherit;line-height:inherit;font-size:inherit}.ck.ck-balloon-panel.ck-tooltip{--ck-balloon-border-width:0px;--ck-balloon-arrow-offset:0px;--ck-balloon-arrow-half-width:4px;--ck-balloon-arrow-height:4px;--ck-tooltip-text-padding:4px;--ck-color-panel-background:var(--ck-color-tooltip-background);padding:0 var(--ck-spacing-medium);box-shadow:none;-webkit-user-select:none;user-select:none}.ck.ck-balloon-panel.ck-tooltip .ck-tooltip__text{color:var(--ck-color-tooltip-text);font-size:.9em;line-height:1.5}.ck.ck-balloon-panel.ck-tooltip.ck-tooltip_multi-line .ck-tooltip__text{white-space:break-spaces;padding:var(--ck-tooltip-text-padding) 0;max-width:200px;display:inline-block}.ck.ck-balloon-panel.ck-tooltip:before{display:none}.ck.ck-balloon-panel.ck-tooltip{z-index:calc(var(--ck-z-dialog) + 100)}:root{--ck-toolbar-spinner-size:18px}.ck.ck-spinner-container{width:var(--ck-toolbar-spinner-size);height:var(--ck-toolbar-spinner-size);animation:1.5s linear infinite ck-spinner-rotate;display:block}@media (prefers-reduced-motion:reduce){.ck.ck-spinner-container{animation-duration:3s}}.ck.ck-spinner-container{position:relative}.ck.ck-spinner{width:var(--ck-toolbar-spinner-size);height:var(--ck-toolbar-spinner-size);border:2px solid var(--ck-color-text);z-index:1;border-top-color:#0000;border-radius:50%;margin:0 auto;position:absolute;top:50%;left:0;right:0;transform:translateY(-50%)}@keyframes ck-spinner-rotate{to{transform:rotate(360deg)}}.ck.ck-toolbar{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-toolbar-background);padding:0 var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border);-webkit-user-select:none;user-select:none;flex-flow:row;align-items:center;display:flex}.ck.ck-toolbar .ck.ck-toolbar__separator{height:var(--ck-icon-size);background:var(--ck-color-toolbar-border);width:1px;min-width:1px;margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small);display:inline-block}.ck.ck-toolbar .ck.ck-toolbar__separator:first-child,.ck.ck-toolbar .ck.ck-toolbar__separator:last-child{display:none}.ck.ck-toolbar .ck-toolbar__line-break{flex-basis:100%;height:0}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break){margin-right:var(--ck-spacing-small)}.ck.ck-toolbar>.ck-toolbar__items:empty+.ck.ck-toolbar__separator{display:none}.ck.ck-toolbar>.ck-toolbar__items{flex-flow:wrap;flex-grow:1;align-items:center;display:flex}.ck.ck-toolbar>.ck-toolbar__items>:not(.ck-toolbar__line-break),.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown{margin-top:var(--ck-spacing-small);margin-bottom:var(--ck-spacing-small)}.ck.ck-toolbar.ck-toolbar_vertical{padding:0}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items>.ck{border-radius:0;width:100%;margin:0}.ck.ck-toolbar.ck-toolbar_compact{padding:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*{margin:0}.ck.ck-toolbar.ck-toolbar_compact>.ck-toolbar__items>*:not(:first-child):not(:last-child){border-radius:0}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck.ck-button.ck-dropdown__button{padding-left:var(--ck-spacing-tiny)}.ck.ck-toolbar>.ck.ck-toolbar__grouped-dropdown>.ck-dropdown__button .ck-dropdown__arrow{display:none}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-dropdown__panel{min-width:auto}.ck.ck-toolbar .ck-toolbar__nested-toolbar-dropdown>.ck-button>.ck-button__label{width:auto;max-width:7em}.ck.ck-toolbar:focus{outline:none}.ck-toolbar-container .ck.ck-toolbar{border:0}.ck.ck-toolbar.ck-toolbar_grouping>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-toolbar.ck-toolbar_vertical>.ck-toolbar__items{flex-direction:column}.ck.ck-toolbar.ck-toolbar_floating>.ck-toolbar__items{flex-wrap:nowrap}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck{margin-right:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]):not(.ck-toolbar_compact)>.ck-toolbar__items>.ck{margin-left:var(--ck-spacing-small)}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck-toolbar__items>.ck:last-child{margin-left:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-left-radius:0;border-bottom-left-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-right-radius:0;border-bottom-right-radius:0}:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl])>.ck.ck-toolbar__separator,:is([dir=rtl] .ck.ck-toolbar,.ck.ck-toolbar[dir=rtl]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-left:var(--ck-spacing-small)}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck-toolbar__items>.ck:last-child{margin-right:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:first-child{border-top-right-radius:0;border-bottom-right-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_compact>.ck-toolbar__items>.ck:last-child{border-top-left-radius:0;border-bottom-left-radius:0}:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr])>.ck.ck-toolbar__separator,:is([dir=ltr] .ck.ck-toolbar,.ck.ck-toolbar[dir=ltr]).ck-toolbar_grouping>.ck-toolbar__items:not(:empty):not(:only-child){margin-right:var(--ck-spacing-small)}:root{--ck-color-block-toolbar-button:var(--ck-color-text);--ck-block-toolbar-button-size:var(--ck-font-size-normal)}.ck.ck-block-toolbar-button{color:var(--ck-color-block-toolbar-button);font-size:var(--ck-block-toolbar-size);z-index:var(--ck-z-default);position:absolute}.ck.ck-menu-bar{background:var(--ck-color-base-background);padding:var(--ck-spacing-small);justify-content:flex-start;gap:var(--ck-spacing-small);border:1px solid var(--ck-color-toolbar-border);flex-wrap:wrap;width:100%;display:flex}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button{width:100%}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button.ck-disabled>.ck-button__label{opacity:var(--ck-disabled-opacity)}[dir=ltr] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-left:var(--ck-spacing-small)}[dir=rtl] :is(.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button):not(.ck-button_with-text){padding-right:var(--ck-spacing-small)}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button{padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-height:unset}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-button__label{width:unset;line-height:unset;overflow:visible}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button.ck-on{border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level>.ck-menu-bar__menu__button .ck-icon{display:none}.ck.ck-menu-bar__menu>.ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{pointer-events:none;z-index:var(--ck-z-default)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button{border-radius:0}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow{width:var(--ck-dropdown-arrow-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){margin-left:var(--ck-spacing-standard);margin-right:calc(-1 * var(--ck-spacing-small));transform:rotate(-90deg)}[dir=rtl] :is(.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button>.ck-menu-bar__menu__button__arrow){left:var(--ck-spacing-standard);margin-right:var(--ck-spacing-small);margin-left:calc(-1 * var(--ck-spacing-small));transform:rotate(90deg)}.ck.ck-menu-bar__menu:not(.ck-menu-bar__menu_top-level) .ck-menu-bar__menu__button.ck-disabled>.ck-menu-bar__menu__button__arrow{opacity:var(--ck-disabled-opacity)}:root{--ck-menu-bar-menu-max-width:75vw;--ck-menu-bar-nested-menu-horizontal-offset:5px}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel{border-radius:var(--ck-rounded-corners-radius);box-shadow:var(--ck-drop-shadow), 0 0;background:var(--ck-color-dropdown-panel-background);border:1px solid var(--ck-color-dropdown-panel-border);height:fit-content;z-index:var(--ck-z-panel);max-width:var(--ck-menu-bar-menu-max-width);position:absolute;bottom:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{border-top-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{border-top-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne{border-bottom-left-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw{border-bottom-right-radius:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel:focus{outline:none}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw{bottom:100%}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{top:100%;bottom:auto}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ne,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_se{left:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_nw,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_sw{right:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en{left:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_es{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_en{bottom:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws,.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{right:calc(100% - var(--ck-menu-bar-nested-menu-horizontal-offset))}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_ws{top:0}.ck.ck-menu-bar__menu>.ck.ck-menu-bar__menu__panel.ck-menu-bar__menu__panel_position_wn{bottom:0}.ck.ck-menu-bar .ck-list-item-button:focus,.ck.ck-menu-bar .ck-list-item-button:active{box-shadow:none;border-color:#0000}.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:focus,.ck.ck-menu-bar.ck-menu-bar_focus-border-enabled .ck-list-item-button:active{z-index:2;border:var(--ck-focus-ring);box-shadow:var(--ck-focus-outer-shadow), 0 0;outline:none;position:relative}.ck.ck-menu-bar__menu{font-size:inherit;display:block}.ck.ck-menu-bar__menu.ck-menu-bar__menu_top-level{max-width:100%}.ck.ck-menu-bar__menu{position:relative}:root{--ck-menu-bar-menu-item-min-width:18em}.ck.ck-menu-bar__menu .ck.ck-menu-bar__menu__item{min-width:var(--ck-menu-bar-menu-item-min-width)}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button{border-radius:0}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container,.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container .ck-spinner{--ck-toolbar-spinner-size:20px}.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container{font-size:var(--ck-icon-font-size)}[dir=ltr] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-right:var(--ck-spacing-medium)}[dir=rtl] :is(.ck.ck-menu-bar__menu .ck-button.ck-menu-bar__menu__item__button>.ck-spinner-container){margin-left:var(--ck-spacing-medium)}.ck-content code{background-color:#c7c7c74d;border-radius:2px;padding:.15em}.ck.ck-editor__editable .ck-code_selected{background-color:#c7c7c780}.ck-content blockquote{border-left:5px solid #ccc;margin-left:0;margin-right:0;padding-left:1.5em;padding-right:1.5em;font-style:italic;overflow:hidden}.ck-content[dir=rtl] blockquote{border-left:0;border-right:5px solid #ccc}:root{--ck-bookmark-icon-hover-fill-color:var(--ck-color-widget-hover-border);--ck-bookmark-icon-selected-fill-color:var(--ck-color-focus-border);--ck-bookmark-icon-animation-duration:var(--ck-widget-handler-animation-duration);--ck-bookmark-icon-animation-curve:var(--ck-widget-handler-animation-curve)}.ck .ck-bookmark.ck-widget{outline:none;display:inline-block}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon__fill{transition:fill var(--ck-bookmark-icon-animation-duration) var(--ck-bookmark-icon-animation-curve)}.ck .ck-bookmark.ck-widget:hover .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-hover-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected .ck-bookmark__icon .ck-icon__fill{fill:var(--ck-bookmark-icon-selected-fill-color)}.ck .ck-bookmark.ck-widget.ck-widget_selected,.ck .ck-bookmark.ck-widget.ck-widget_selected:hover{outline:none}.ck .ck-bookmark.ck-widget .ck-bookmark__icon{display:block;position:relative;top:-.1em}.ck .ck-bookmark.ck-widget .ck-bookmark__icon .ck-icon{vertical-align:middle;width:auto;height:1.2em}.ck .ck-fake-bookmark-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-bookmark-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}.ck.ck-bookmark-balloon .ck.ck-toolbar>.ck-toolbar__items{flex-wrap:nowrap}.ck.ck-bookmark-toolbar__preview{padding:0 var(--ck-spacing-medium);max-width:var(--ck-input-width);text-overflow:ellipsis;text-align:center;-webkit-user-select:none;user-select:none;cursor:default;min-width:3em;font-weight:400;overflow:hidden}:root{--ck-bookmark-form-width:340px}@media screen and (width<=600px){:root{--ck-bookmark-form-width:300px}}.ck.ck-bookmark-form{width:var(--ck-bookmark-form-width)}:root{--ck-image-processing-highlight-color:#f9fafa;--ck-image-processing-background-color:#e3e5e8}.ck.ck-editor__editable .image.image-processing{position:relative}.ck.ck-editor__editable .image.image-processing:before{content:\"\";z-index:1;background:linear-gradient(90deg, var(--ck-image-processing-background-color), var(--ck-image-processing-highlight-color), var(--ck-image-processing-background-color));background-size:200% 100%;width:100%;height:100%;animation:2s linear infinite ck-image-processing-animation;position:absolute;top:0;left:0}.ck.ck-editor__editable .image.image-processing img{height:100%}@keyframes ck-image-processing-animation{0%{background-position:200% 0}to{background-position:-200% 0}}:root{--ck-clipboard-drop-target-dot-width:12px;--ck-clipboard-drop-target-dot-height:8px;--ck-clipboard-drop-target-color:var(--ck-color-focus-border)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{bottom:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));top:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));border:1px solid var(--ck-clipboard-drop-target-color);background:var(--ck-clipboard-drop-target-color);margin-left:-1px;position:absolute}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span:after{content:\"\";width:0;height:0;left:50%;top:calc(-.5 * var(--ck-clipboard-drop-target-dot-height));border-color:var(--ck-clipboard-drop-target-color) transparent transparent transparent;border-width:calc(var(--ck-clipboard-drop-target-dot-height)) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width));border-style:solid;display:block;position:absolute;transform:translate(-50%)}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position span{width:0}.ck.ck-editor__editable .ck.ck-clipboard-drop-target-position{pointer-events:none;display:inline;position:relative}.ck.ck-editor__editable .ck-widget.ck-clipboard-drop-target-range{outline:var(--ck-widget-outline-thickness) solid var(--ck-clipboard-drop-target-color)!important}.ck.ck-editor__editable .ck-widget:-webkit-drag{zoom:.6;outline:none!important}.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__selection-handle,.ck.ck-editor__editable .ck-widget:-webkit-drag>.ck-widget__type-around{display:none}.ck.ck-clipboard-drop-target-line{border:1px solid var(--ck-clipboard-drop-target-color);background:var(--ck-clipboard-drop-target-color);height:0;z-index:var(--ck-z-default);margin-top:-1px;position:absolute}.ck.ck-clipboard-drop-target-line:before{content:\"\";top:calc(-.5 * var(--ck-clipboard-drop-target-dot-width));border-style:solid;width:0;height:0;position:absolute}.ck.ck-clipboard-drop-target-line{pointer-events:none}[dir=ltr] .ck.ck-clipboard-drop-target-line:before{border-width:calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0 calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height);border-color:transparent transparent transparent var(--ck-clipboard-drop-target-color);left:-1px}[dir=rtl] .ck.ck-clipboard-drop-target-line:before{border-width:calc(.5 * var(--ck-clipboard-drop-target-dot-width)) var(--ck-clipboard-drop-target-dot-height) calc(.5 * var(--ck-clipboard-drop-target-dot-width)) 0;border-color:transparent var(--ck-clipboard-drop-target-color) transparent transparent;right:-1px}:root{--ck-color-code-block-label-background:#757575}.ck.ck-editor__editable pre[data-language]:after{content:attr(data-language);background:var(--ck-color-code-block-label-background);font-size:10px;font-family:var(--ck-font-face);padding:var(--ck-spacing-tiny) var(--ck-spacing-medium);color:#fff;white-space:nowrap;line-height:16px;position:absolute;top:-1px;right:10px}.ck.ck-code-block-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}.ck-content pre{color:#353535;text-align:left;tab-size:4;white-space:pre-wrap;direction:ltr;background:#c7c7c74d;border:1px solid #c4c4c4;border-radius:2px;min-width:200px;margin:.9em 0;padding:1em;font-style:normal}.ck-content pre code{background:unset;border-radius:0;padding:0}.ck.ck-editor__editable pre{position:relative}:root{--ck-content-font-family:Helvetica, Arial, Tahoma, Verdana, Sans-Serif;--ck-content-font-size:medium;--ck-content-font-color:#000;--ck-content-line-height:1.5;--ck-content-word-break:normal;--ck-content-overflow-wrap:break-word}.ck-content{font-family:var(--ck-content-font-family);font-size:var(--ck-content-font-size);color:var(--ck-content-font-color);line-height:var(--ck-content-line-height);word-break:var(--ck-content-word-break);overflow-wrap:var(--ck-content-overflow-wrap)}.ck.ck-editor__main>.ck-editor__editable{background:var(--ck-color-base-background);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0}.ck.ck-editor__main>.ck-editor__editable:not(.ck-focused){border-color:var(--ck-color-base-border)}.ck.ck-editor{position:relative}.ck.ck-editor .ck-editor__top .ck-sticky-panel .ck-toolbar{z-index:var(--ck-z-panel)}.ck.ck-menu-bar{border:none;border-bottom:1px solid var(--ck-color-toolbar-border)}.ck.ck-emoji{width:320px}.ck .ck.ck-emoji__search{padding:var(--ck-spacing-large);padding-bottom:var(--ck-spacing-medium);justify-content:space-between;align-items:center;display:flex}.ck .ck.ck-emoji__search>.ck.ck-search{flex:1}.ck .ck-fake-emoji-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-emoji-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}div.ck.ck-balloon-panel.ck-emoji-picker-balloon{z-index:calc(var(--ck-z-dialog) + 1)}.ck.ck-emoji__categories-list{margin:0 var(--ck-spacing-large);justify-content:space-between;display:flex}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text{font-size:var(--ck-font-size-big);min-width:var(--ck-font-size-big);min-height:var(--ck-font-size-big);border-width:0 0 2px;border-bottom-style:solid;border-bottom-color:#0000;padding:0}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text.ck-emoji__category-item.ck-on{border-bottom-color:var(--ck-color-base-active)}.ck.ck-emoji__categories-list>.ck.ck-button.ck-button_with-text>span{margin:auto}:root{--ck-emoji-grid-tile-size:27px}.ck.ck-emoji .ck.ck-emoji__tiles{border-top:1px solid var(--ck-color-base-border);max-width:100%;max-height:min(265px,40vh);overflow:hidden auto}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__grid{grid-template-columns:repeat(auto-fill, minmax(var(--ck-emoji-grid-tile-size), 1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-small);display:grid}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{width:var(--ck-emoji-grid-tile-size);height:var(--ck-emoji-grid-tile-size);min-width:var(--ck-emoji-grid-tile-size);min-height:var(--ck-emoji-grid-tile-size);border:0;padding:0;font-size:1.5em;transition:box-shadow .2s}@media (prefers-reduced-motion:reduce){.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile{transition:none}}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:focus:not(.ck-disabled),.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);border:0}.ck.ck-emoji .ck.ck-emoji__tiles .ck-emoji__tile .ck-button__label{line-height:var(--ck-emoji-grid-tile-size);text-align:center;width:100%}.ck.ck-form.ck-emoji-picker-form{padding-bottom:0}.ck.ck-form.ck-emoji-picker-form .ck.ck-dropdown .ck-dropdown__button:not(:focus){border-color:#0000}.ck.ck-emoji__skin-tone{margin-left:var(--ck-spacing-standard)}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck.ck-list__item{min-width:1em}.ck.ck-emoji__skin-tone>.ck.ck-dropdown .ck-button.ck-dropdown__button .ck-button__label{width:initial}.ck.ck-placeholder,.ck .ck-placeholder{position:relative}@media (forced-colors:active){.ck.ck-placeholder,.ck .ck-placeholder{forced-color-adjust:preserve-parent-color}}:is(.ck.ck-placeholder,.ck .ck-placeholder):before{content:attr(data-placeholder);cursor:text;pointer-events:none;padding-left:inherit;padding-right:inherit;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;position:absolute;left:0;right:0;overflow:hidden}@media (forced-colors:none){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{color:var(--ck-color-engine-placeholder-text)}}@media (forced-colors:active){:is(.ck.ck-placeholder,.ck .ck-placeholder):before{margin-left:1px;font-style:italic}}.ck.ck-read-only .ck-placeholder:before{display:none}.ck.ck-reset_all .ck-placeholder{position:relative}.ck.ck-editor__editable span[data-ck-unsafe-element]{display:none}.ck-find-result{background:var(--ck-color-highlight-background);color:var(--ck-color-text)}.ck-find-result_selected{background:#ff9633}.ck.ck-find-and-replace-form{width:400px;max-width:100%}.ck.ck-find-and-replace-form:focus{outline:none}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions{padding:var(--ck-spacing-large);flex-flow:wrap;flex:auto;align-content:stretch;align-items:center;margin:0;display:flex}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>.ck-button{flex:none}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-left:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions)>*+*{margin-right:var(--ck-spacing-standard)}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view{flex:auto}:is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs,.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions) .ck-labeled-field-view .ck-input{width:100%;min-width:50px}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs{align-items:flex-start}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-prev>.ck-icon{transform:rotate(90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-button-next>.ck-icon{transform:rotate(-90deg)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter{color:var(--ck-color-base-border);position:absolute;top:50%;transform:translateY(-50%)}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs .ck-results-counter){left:var(--ck-spacing-standard)}.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace{padding-top:var(--ck-spacing-standard);flex:0 0 100%}[dir=ltr] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-left:0}[dir=rtl] :is(.ck.ck-find-and-replace-form .ck-find-and-replace-form__inputs>.ck-labeled-field-replace){margin-right:0}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions{margin-top:calc(-1 * var(--ck-spacing-large));flex-wrap:wrap;justify-content:flex-end}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find{font-weight:700}.ck.ck-find-and-replace-form .ck-find-and-replace-form__actions>.ck-button-find .ck-button__label{padding-left:var(--ck-spacing-large);padding-right:var(--ck-spacing-large)}.ck.ck-find-and-replace-form .ck-switchbutton{flex-flow:row;justify-content:space-between;align-items:center;width:100%;display:flex}@media screen and (width<=600px){.ck.ck-find-and-replace-form{width:300px;max-width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input{flex-wrap:wrap}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input .ck-labeled-field-view{width:100%;margin-bottom:var(--ck-spacing-standard);flex:1 0 auto}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__input>.ck-button:first-of-type .ck-button__label{text-align:center;width:100%}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view){flex-wrap:wrap;flex:auto}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button{text-align:center}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{flex:auto}[dir=ltr] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-left:0}[dir=rtl] .ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button:first-of-type{margin-right:0}.ck.ck-find-and-replace-form.ck-find-and-replace-form__actions>:not(.ck-labeled-field-view)>.ck-button .ck-button__label{text-align:center;width:100%}}:root{--ck-content-font-size-tiny:.7em;--ck-content-font-size-small:.85em;--ck-content-font-size-big:1.4em;--ck-content-font-size-huge:1.8em}.ck-content .text-tiny{font-size:var(--ck-content-font-size-tiny)}.ck-content .text-small{font-size:var(--ck-content-font-size-small)}.ck-content .text-big{font-size:var(--ck-content-font-size-big)}.ck-content .text-huge{font-size:var(--ck-content-font-size-huge)}html.ck-fullscreen,body.ck-fullscreen{--ck-z-fullscreen:10000;--ck-z-default:calc(var(--ck-z-fullscreen) + 1);--ck-z-panel:calc(var(--ck-z-default) + 999);--ck-z-dialog:100000;overflow:hidden}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n){--ckbox-z-index-root:calc(var(--ck-z-dialog) + 1);position:absolute}:is(html.ck-fullscreen,body.ck-fullscreen) .ckbox:not(#n) .ckbox-img-editor{--ckbox-z-index-preview:calc(var(--ck-z-dialog) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .ck-pagination-view-line{z-index:calc(var(--ck-z-fullscreen) + 1)}:is(html.ck-fullscreen,body.ck-fullscreen) .page-break__label{z-index:calc(var(--ck-z-fullscreen) + 2)}.ck.ck-fullscreen__main-wrapper{width:100%;height:100%;z-index:var(--ck-z-fullscreen);background:var(--ck-color-base-foreground);flex-direction:column;display:flex;position:fixed;top:0;left:0}.ck.ck-fullscreen__main-wrapper .ck.ck-revision-history-ui__changes-navigation{margin-top:0;margin-bottom:0}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper{position:absolute}:not(body>.ck-fullscreen__main-wrapper).ck-fullscreen__main-wrapper .ck-fullscreen__top-wrapper{border-top:1px solid var(--ck-color-base-border);border-left:1px solid var(--ck-color-base-border);border-right:1px solid var(--ck-color-base-border);border-radius:var(--ck-border-radius) 0}.ck-fullscreen__menu-bar .ck.ck-menu-bar{border:none}.ck.ck-fullscreen__toolbar .ck-toolbar{border-left:0;border-right:0;border-radius:0}.ck-fullscreen__main-wrapper .ck-fullscreen__editable-wrapper{--ck-fullscreen-editor-top-margin:28px;--ck-fullscreen-editor-bottom-margin:28px;justify-content:flex-start;max-height:100%;display:flex;overflow:auto}.ck-fullscreen__main-wrapper .ck-fullscreen__editable{margin-top:var(--ck-fullscreen-editor-top-margin);height:100%;margin-left:auto}.ck-fullscreen__main-wrapper .ck-fullscreen__editable:after{content:\"\";height:var(--ck-fullscreen-editor-bottom-margin);display:block}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck.ck-editor__editable:not(.ck-editor__nested-editable){box-sizing:border-box;border:1px var(--ck-color-base-border) solid;background:#fff;width:795.701px;max-width:795.701px;height:fit-content;min-height:297mm;margin:0;padding:20mm 12mm;box-shadow:0 2px 3px #00000014}.ck-fullscreen__main-wrapper .ck-fullscreen__editable .ck-source-editing-area{width:795.701px}.ck-fullscreen__sidebar{width:270px;margin-top:var(--ck-fullscreen-editor-top-margin);margin-left:10px}.ck-fullscreen__left-sidebar{--ck-user-avatar-size:28px;box-sizing:border-box;background-color:#0000;flex-direction:column;align-self:flex-start;height:100%;margin-top:0;margin-right:10px;font-family:Helvetica,Arial,sans-serif;display:flex;position:sticky;top:0}.ck-fullscreen__left-sidebar .ck-button.ck-fullscreen__left-sidebar-toggle-button{--ck-icon-size:20px;--ck-ui-component-min-height:0px;margin-top:var(--ck-fullscreen-editor-top-margin);margin-bottom:var(--ck-spacing-large);opacity:.5;border-radius:100%;align-self:flex-start;padding-top:0}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky{min-width:270px}.ck-fullscreen__left-sidebar>.ck-fullscreen__left-sidebar-sticky:first-child{padding-top:var(--ck-fullscreen-editor-top-margin)}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed{width:65px}.ck-fullscreen__left-sidebar.ck-fullscreen__left-sidebar--collapsed>:not(.ck-fullscreen__left-sidebar-toggle-button){display:none}.ck-fullscreen__left-sidebar .ck.ck-presence-list--collapsed{--ck-user-avatar-size:32px}.ck-fullscreen__left-sidebar .ck-user,.ck-fullscreen__left-sidebar .ck-presence-list__users-counter__text{font-size:.85em}.ck-fullscreen__left-sidebar-item{padding:var(--ck-spacing-medium);margin-bottom:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item:first-child{padding-top:0}.ck-fullscreen__left-sidebar-item:last-child{margin-bottom:0}.ck-fullscreen__left-sidebar-header{--ck-fullscreen-presence-list-header-font-size:.875em;font-size:var(--ck-fullscreen-presence-list-header-font-size);color:var(--ck-document-outline-item-default-color);white-space:nowrap;text-overflow:ellipsis;font-weight:700;overflow:hidden}.ck-fullscreen__left-sidebar--sticky{position:sticky;top:0}.ck-fullscreen__left-sidebar--sticky>:first-child{padding-top:0}.ck-fullscreen__presence-list{margin-top:var(--ck-spacing-medium)}.ck-fullscreen__left-sidebar-item--no-margin{margin:0}.ck-fullscreen__left-sidebar .ck.ck-document-outline{padding-top:0;padding-left:0;padding-right:0}.ck-fullscreen__document-outline-wrapper{padding-top:0;overflow-y:auto}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar{margin-top:var(--ck-fullscreen-editor-top-margin);margin-right:auto}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar:not(.ck-fullscreen__right-sidebar--collapsed)>:first-child{min-width:270px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed{width:65px}.ck-fullscreen__sidebar.ck-fullscreen__right-sidebar.ck-fullscreen__right-sidebar--collapsed>:first-child{min-width:65px}.ck.ck-fullscreen__right-edge{margin-top:0;margin-left:10px;position:sticky;top:0}.ck.ck-fullscreen__right-edge>:first-child{border-top:none;border-bottom:none;border-right:none;width:495px;height:100%}.ck.ck-heading_heading1 .ck-button__label{font-size:20px}.ck.ck-heading_heading2 .ck-button__label{font-size:17px}.ck.ck-heading_heading3 .ck-button__label{font-size:14px}.ck[class*=ck-heading_heading]{font-weight:700}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__button .ck-button__label{width:8em}.ck.ck-dropdown.ck-heading-dropdown .ck-dropdown__panel .ck-list__item{min-width:18em}:root{--ck-content-highlight-marker-yellow:#fdfd77;--ck-content-highlight-marker-green:#62f962;--ck-content-highlight-marker-pink:#fc7899;--ck-content-highlight-marker-blue:#72ccfd;--ck-content-highlight-pen-red:#e71313;--ck-content-highlight-pen-green:#128a00}.ck-content .marker-yellow{background-color:var(--ck-content-highlight-marker-yellow)}.ck-content .marker-green{background-color:var(--ck-content-highlight-marker-green)}.ck-content .marker-pink{background-color:var(--ck-content-highlight-marker-pink)}.ck-content .marker-blue{background-color:var(--ck-content-highlight-marker-blue)}.ck-content .pen-red{color:var(--ck-content-highlight-pen-red);background-color:#0000}.ck-content .pen-green{color:var(--ck-content-highlight-pen-green);background-color:#0000}.ck-editor__editable .ck-horizontal-line{display:flow-root}.ck-content hr{vertical-align:middle;background:#dedede;border:0;width:100%;height:4px;margin:15px 0;display:inline-block}:root{--ck-html-embed-content-width:calc(100% - 1.5 * var(--ck-icon-size));--ck-html-embed-source-height:10em;--ck-html-embed-unfocused-outline-width:1px;--ck-html-embed-content-min-height:calc(var(--ck-icon-size) + var(--ck-spacing-standard));--ck-html-embed-source-disabled-background:var(--ck-color-base-foreground);--ck-html-embed-source-disabled-color:#737373}.ck-widget.raw-html-embed{font-size:var(--ck-font-size-base);background-color:var(--ck-color-base-foreground);min-width:15em;margin:.9em auto;display:flow-root;position:relative}.ck-widget.raw-html-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.raw-html-embed[dir=ltr]{text-align:left}.ck-widget.raw-html-embed[dir=rtl]{text-align:right}.ck-widget.raw-html-embed:before{content:attr(data-html-embed-label);top:calc(-1 * var(--ck-html-embed-unfocused-outline-width));left:var(--ck-spacing-standard);transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);font-size:var(--ck-font-size-tiny);font-family:var(--ck-font-face);z-index:1;background:#999;position:absolute}.ck-widget.raw-html-embed[dir=rtl]:before{left:auto;right:var(--ck-spacing-standard)}.ck-widget.raw-html-embed[dir=ltr] .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck.ck-editor__editable.ck-blurred .ck-widget.raw-html-embed.ck-widget_selected:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck.ck-editor__editable:not(.ck-blurred) .ck-widget.raw-html-embed.ck-widget_selected:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);background:var(--ck-color-focus-border);top:0}.ck.ck-editor__editable .ck-widget.raw-html-embed:not(.ck-widget_selected):hover:before{padding:var(--ck-spacing-tiny) var(--ck-spacing-small);top:0}.ck-widget.raw-html-embed .raw-html-embed__content-wrapper{padding:var(--ck-spacing-standard)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{top:var(--ck-spacing-standard);right:var(--ck-spacing-standard);display:flex;position:absolute}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__save-button{color:var(--ck-color-button-save)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button.raw-html-embed__cancel-button{color:var(--ck-color-button-cancel)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper .ck-button:not(:first-child){margin-top:var(--ck-spacing-small)}.ck-widget.raw-html-embed .raw-html-embed__buttons-wrapper{flex-direction:column}.ck-widget.raw-html-embed[dir=rtl] .raw-html-embed__buttons-wrapper{left:var(--ck-spacing-standard);right:auto}.ck-widget.raw-html-embed .raw-html-embed__source{box-sizing:border-box;height:var(--ck-html-embed-source-height);width:var(--ck-html-embed-content-width);resize:none;min-width:0;padding:var(--ck-spacing-standard);tab-size:4;white-space:pre-wrap;font-family:monospace;font-size:var(--ck-font-size-base);text-align:left;direction:ltr}.ck-widget.raw-html-embed .raw-html-embed__source[disabled]{background:var(--ck-html-embed-source-disabled-background);color:var(--ck-html-embed-source-disabled-color);-webkit-text-fill-color:var(--ck-html-embed-source-disabled-color);opacity:1}.ck-widget.raw-html-embed .raw-html-embed__preview{min-height:var(--ck-html-embed-content-min-height);width:var(--ck-html-embed-content-width);position:relative;overflow:hidden}.ck-editor__editable:not(.ck-read-only) :is(.ck-widget.raw-html-embed .raw-html-embed__preview){pointer-events:none}.ck-widget.raw-html-embed .raw-html-embed__preview{display:flex}.ck-widget.raw-html-embed .raw-html-embed__preview-content{box-sizing:border-box;background-color:var(--ck-color-base-foreground);border-collapse:separate;width:100%;margin:auto;display:table;position:relative}.ck-widget.raw-html-embed .raw-html-embed__preview-content>*{margin-left:auto;margin-right:auto}.ck-widget.raw-html-embed .raw-html-embed__preview-content{border-spacing:7px}.ck-widget.raw-html-embed .raw-html-embed__preview-placeholder{color:var(--ck-html-embed-source-disabled-color);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.ck-widget.raw-html-embed{font-style:normal}:root{--ck-html-object-embed-unfocused-outline-width:1px}.ck-widget.html-object-embed{font-size:var(--ck-font-size-base);background-color:var(--ck-color-base-foreground);padding:var(--ck-spacing-small);padding-top:calc(var(--ck-font-size-tiny) + var(--ck-spacing-large));min-width:calc(76px + var(--ck-spacing-standard))}.ck-widget.html-object-embed:not(.ck-widget_selected):not(:hover){outline:var(--ck-html-object-embed-unfocused-outline-width) dashed var(--ck-color-widget-blurred-border)}.ck-widget.html-object-embed:before{content:attr(data-html-object-embed-label);top:0;left:var(--ck-spacing-standard);transition:background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);padding:calc(var(--ck-spacing-tiny) + var(--ck-html-object-embed-unfocused-outline-width)) var(--ck-spacing-small) var(--ck-spacing-tiny);border-radius:0 0 var(--ck-border-radius) var(--ck-border-radius);color:var(--ck-color-base-background);font-style:normal;font-weight:400;font-size:var(--ck-font-size-tiny);font-family:var(--ck-font-face);background:#999;position:absolute}.ck-widget.html-object-embed .ck-widget__type-around .ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:50px}.ck-widget.html-object-embed .html-object-embed__content{pointer-events:none}div.ck-widget.html-object-embed{margin:1em auto}span.ck-widget.html-object-embed{display:inline-block}:root{--ck-content-color-image-caption-background:#f7f7f7;--ck-content-color-image-caption-text:#333;--ck-color-image-caption-highlighted-background:#fd0}.ck-content .image>figcaption{caption-side:bottom;word-break:normal;overflow-wrap:anywhere;break-before:avoid;color:var(--ck-content-color-image-caption-text);background-color:var(--ck-content-color-image-caption-background);outline-offset:-1px;padding:.6em;font-size:.75em;display:table-caption}@media (forced-colors:active){.ck-content .image>figcaption{background-color:unset;color:unset}}@media (forced-colors:none){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:.6s ease-out ck-image-caption-highlight}}@media (prefers-reduced-motion:reduce){.ck.ck-editor__editable .image>figcaption.image__caption_highlighted{animation:none}}@keyframes ck-image-caption-highlight{0%{background-color:var(--ck-color-image-caption-highlighted-background)}to{background-color:var(--ck-content-color-image-caption-background)}}.ck-content img.image_resized{height:auto}.ck-content .image.image_resized{box-sizing:border-box;max-width:100%;display:block}.ck-content .image.image_resized img{width:100%}.ck-content .image.image_resized>figcaption{display:block}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline.image_resized img{max-width:100%}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-image-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-image-button .ck-button__label{width:4em}:root{--ck-content-image-style-spacing:1.5em;--ck-content-inline-image-style-spacing:calc(var(--ck-content-image-style-spacing) / 2)}.ck-content .image.image-style-block-align-left,.ck-content .image.image-style-block-align-right{max-width:calc(100% - var(--ck-content-image-style-spacing))}.ck-content .image.image-style-align-left,.ck-content .image.image-style-align-right{clear:none}.ck-content .image.image-style-side{float:right;margin-left:var(--ck-content-image-style-spacing);max-width:50%}.ck-content .image.image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content .image.image-style-block-align-right{margin-left:auto;margin-right:0}.ck-content .image.image-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .image-style-align-center{margin-left:auto;margin-right:auto}.ck-content .image-style-align-left{float:left;margin-right:var(--ck-content-image-style-spacing)}.ck-content .image-style-align-right{float:right;margin-left:var(--ck-content-image-style-spacing)}.ck-content p+.image.image-style-align-left,.ck-content p+.image.image-style-align-right,.ck-content p+.image.image-style-side{margin-top:0}.ck-content .image-inline.image-style-align-left,.ck-content .image-inline.image-style-align-right{margin-top:var(--ck-content-inline-image-style-spacing);margin-bottom:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-left{margin-right:var(--ck-content-inline-image-style-spacing)}.ck-content .image-inline.image-style-align-right{margin-left:var(--ck-content-inline-image-style-spacing)}:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{animation:.7s fadeIn}@media (prefers-reduced-motion:reduce){:is(.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline).ck-appear{opacity:1;animation:none}}.ck.ck-editor__editable .image,.ck.ck-editor__editable .image-inline{position:relative}.ck.ck-editor__editable .image .ck-progress-bar,.ck.ck-editor__editable .image-inline .ck-progress-bar{background:var(--ck-color-upload-bar-background);width:0;height:2px;transition:width .1s;position:absolute;top:0;left:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}:root{--ck-color-image-upload-icon:#fff;--ck-color-image-upload-icon-background:#008a00;--ck-image-upload-icon-size:20;--ck-image-upload-icon-width:2px;--ck-image-upload-icon-is-visible:clamp(0px, 100% - 50px, 1px)}.ck-image-upload-complete-icon{opacity:0;background:var(--ck-color-image-upload-icon-background);font-size:calc(1px * var(--ck-image-upload-icon-size));width:calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));height:calc(var(--ck-image-upload-icon-is-visible) * var(--ck-image-upload-icon-size));top:min(var(--ck-spacing-medium), 6%);right:min(var(--ck-spacing-medium), 6%);border-radius:50%;animation-name:ck-upload-complete-icon-show,ck-upload-complete-icon-hide;animation-duration:.5s,.5s;animation-delay:0s,3s;animation-fill-mode:forwards,forwards;display:block;position:absolute;overflow:hidden}.ck-image-upload-complete-icon:after{opacity:0;transform-origin:0 0;border-top:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);border-right:var(--ck-image-upload-icon-width) solid var(--ck-color-image-upload-icon);box-sizing:border-box;content:\"\";width:0;height:0;animation-name:ck-upload-complete-icon-check;animation-duration:.5s;animation-delay:.5s;animation-fill-mode:forwards;position:absolute;top:50%;left:25%;transform:scaleX(-1)rotate(135deg)}@media (prefers-reduced-motion:reduce){.ck-image-upload-complete-icon{animation-duration:0s}.ck-image-upload-complete-icon:after{opacity:1;width:.3em;height:.45em;animation:none}}.ck-image-upload-complete-icon{z-index:1}@keyframes ck-upload-complete-icon-show{0%{opacity:0}to{opacity:1}}@keyframes ck-upload-complete-icon-hide{0%{opacity:1}to{opacity:0}}@keyframes ck-upload-complete-icon-check{0%{opacity:1;width:0;height:0}33%{width:.3em;height:0}to{opacity:1;width:.3em;height:.45em}}:root{--ck-color-upload-placeholder-loader:#b3b3b3;--ck-upload-placeholder-loader-size:32px;--ck-upload-placeholder-image-aspect-ratio:2.8}.ck .ck-image-upload-placeholder{width:100%;margin:0}.ck .ck-image-upload-placeholder.image-inline{width:calc(2 * var(--ck-upload-placeholder-loader-size) * var(--ck-upload-placeholder-image-aspect-ratio))}.ck .ck-image-upload-placeholder img{aspect-ratio:var(--ck-upload-placeholder-image-aspect-ratio)}.ck .ck-upload-placeholder-loader{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;top:0}.ck .ck-upload-placeholder-loader:before{width:var(--ck-upload-placeholder-loader-size);height:var(--ck-upload-placeholder-loader-size);border-top:3px solid var(--ck-color-upload-placeholder-loader);content:\"\";border-right:2px solid #0000;border-radius:50%;animation:1s linear infinite ck-upload-placeholder-loader;position:relative}.ck .ck-upload-placeholder-loader{left:0}@keyframes ck-upload-placeholder-loader{to{transform:rotate(360deg)}}.ck-content .image{clear:both;text-align:center;min-width:50px;margin:.9em auto;display:table}.ck-content .image img{min-width:100%;max-width:100%;height:auto;margin:0 auto;display:block}.ck-content .image-inline{align-items:flex-start;max-width:100%;display:inline-flex}.ck-content .image-inline picture{display:flex}.ck-content .image-inline picture,.ck-content .image-inline img{flex-grow:1;flex-shrink:1;max-width:100%}.ck.ck-editor__editable .image>figcaption.ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ck.ck-editor__editable .image{z-index:1}.ck.ck-editor__editable .image.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline{z-index:1}.ck.ck-editor__editable .image-inline.ck-widget_selected{z-index:2}.ck.ck-editor__editable .image-inline.ck-widget_selected ::selection{display:none}.ck.ck-editor__editable .image-inline img{height:auto}:is(.ck.ck-editor__editable td,.ck.ck-editor__editable th) .image-inline img{max-width:none}.ck.ck-editor__editable img.image_placeholder{background-size:100% 100%}:root{--ck-image-insert-insert-by-url-width:250px}.ck.ck-image-insert-url{--ck-input-width:100%;width:400px}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-column-gap:var(--ck-spacing-large);margin-top:var(--ck-spacing-large);display:grid}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-save,.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button-cancel{justify-content:center;min-width:auto}.ck.ck-image-insert-url .ck-image-insert-url__action-row .ck-button .ck-button__label{color:var(--ck-color-text)}.ck.ck-image-insert-url .ck-image-insert-url__action-row{grid-template-columns:repeat(2,1fr)}.ck.ck-image-insert-url{padding:var(--ck-spacing-large) var(--ck-spacing-large) 0}.ck.ck-image-insert-form>.ck.ck-button{width:100%;display:block}[dir=ltr] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:left}[dir=rtl] :is(.ck.ck-image-insert-form>.ck.ck-button){text-align:right}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:first-child){border-top:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible:not(:last-child){border-bottom:1px solid var(--ck-color-base-border)}.ck.ck-image-insert-form>.ck.ck-collapsible{min-width:var(--ck-image-insert-insert-by-url-width)}.ck.ck-image-insert-form>.ck.ck-image-insert-url{min-width:var(--ck-image-insert-insert-by-url-width);padding:var(--ck-spacing-large)}.ck.ck-image-insert-form:focus{outline:none}:root{--ck-image-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-image-custom-resize-form-width:300px}}.ck.ck-image-custom-resize-form.ck-responsive-form{width:var(--ck-image-custom-resize-form-width)}:root{--ck-text-alternative-form-width:340px}@media screen and (width<=600px){:root{--ck-text-alternative-form-width:300px}}.ck.ck-text-alternative-form.ck-responsive-form{width:var(--ck-text-alternative-form-width)}.ck .ck-link_selected{background:var(--ck-color-link-selected-background)}.ck .ck-link_selected span.image-inline{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-link-selected-background)}.ck .ck-fake-link-selection{background:var(--ck-color-link-fake-selection)}.ck .ck-fake-link-selection_collapsed{border-right:1px solid var(--ck-color-base-text);outline:1px solid #ffffff80;height:100%;margin-right:-1px}:root{--ck-link-bookmark-icon-size:calc(var(--ck-icon-size) * .7)}.ck.ck-toolbar.ck-link-toolbar>.ck-toolbar__items{flex-wrap:nowrap}a.ck.ck-button.ck-link-toolbar__preview{padding:0 var(--ck-spacing-medium);color:var(--ck-color-link-default);cursor:pointer;flex-direction:row;justify-content:center;align-items:center;display:flex}a.ck.ck-button.ck-link-toolbar__preview .ck.ck-button__label{text-overflow:ellipsis;max-width:var(--ck-input-width)}a.ck.ck-button.ck-link-toolbar__preview,a.ck.ck-button.ck-link-toolbar__preview:hover,a.ck.ck-button.ck-link-toolbar__preview:focus,a.ck.ck-button.ck-link-toolbar__preview:active{background:0 0}a.ck.ck-button.ck-link-toolbar__preview:active{box-shadow:none}a.ck.ck-button.ck-link-toolbar__preview:hover,a.ck.ck-button.ck-link-toolbar__preview:focus{text-decoration:underline}a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon{width:var(--ck-link-bookmark-icon-size);height:var(--ck-link-bookmark-icon-size)}[dir=ltr] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-right:var(--ck-spacing-tiny);margin-left:var(--ck-spacing-small)}[dir=rtl] :is(a.ck.ck-button.ck-link-toolbar__preview.ck-button_with-text .ck.ck-icon.ck-button__icon){margin-left:var(--ck-spacing-tiny);margin-right:var(--ck-spacing-small)}a.ck.ck-button.ck-link-toolbar__preview:has(.ck-icon){padding-left:var(--ck-spacing-extra-tiny)}.ck.ck-link-toolbar__preview{display:inline-block}.ck.ck-link-toolbar__preview .ck-button__label{overflow:hidden}:root{--ck-link-image-indicator-icon-size:20;--ck-link-image-indicator-icon-is-visible:clamp(0px, 100% - 50px, 1px)}:is(.ck.ck-editor__editable figure.image>a,.ck.ck-editor__editable a span.image-inline):after{content:\"\";top:min(var(--ck-spacing-medium), 6%);right:min(var(--ck-spacing-medium), 6%);width:calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));height:calc(var(--ck-link-image-indicator-icon-is-visible) * var(--ck-link-image-indicator-icon-size));background-color:#0006;background-image:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTExLjA3NyAxNSAuOTkxLTEuNDE2YS43NS43NSAwIDEgMSAxLjIyOS44NmwtMS4xNDggMS42NGEuNzQ4Ljc0OCAwIDAgMS0uMjE3LjIwNiA1LjI1MSA1LjI1MSAwIDAgMS04LjUwMy01Ljk1NS43NDEuNzQxIDAgMCAxIC4xMi0uMjc0bDEuMTQ3LTEuNjM5YS43NS43NSAwIDEgMSAxLjIyOC44Nkw0LjkzMyAxMC43bC4wMDYuMDAzYTMuNzUgMy43NSAwIDAgMCA2LjEzMiA0LjI5NGwuMDA2LjAwNHptNS40OTQtNS4zMzVhLjc0OC43NDggMCAwIDEtLjEyLjI3NGwtMS4xNDcgMS42MzlhLjc1Ljc1IDAgMSAxLTEuMjI4LS44NmwuODYtMS4yM2EzLjc1IDMuNzUgMCAwIDAtNi4xNDQtNC4zMDFsLS44NiAxLjIyOWEuNzUuNzUgMCAwIDEtMS4yMjktLjg2bDEuMTQ4LTEuNjRhLjc0OC43NDggMCAwIDEgLjIxNy0uMjA2IDUuMjUxIDUuMjUxIDAgMCAxIDguNTAzIDUuOTU1em0tNC41NjMtMi41MzJhLjc1Ljc1IDAgMCAxIC4xODQgMS4wNDVsLTMuMTU1IDQuNTA1YS43NS43NSAwIDEgMS0xLjIyOS0uODZsMy4xNTUtNC41MDZhLjc1Ljc1IDAgMCAxIDEuMDQ1LS4xODR6Ii8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:14px;border-radius:100%;display:block;position:absolute;overflow:hidden}:root{--ck-link-panel-width:340px;--ck-link-provider-list-item-text-height:calc(var(--ck-line-height-base) * var(--ck-font-size-base));--ck-link-provider-list-item-height:calc(var(--ck-link-provider-list-item-text-height) + var(--ck-spacing-small) + var(--ck-spacing-small))}@media screen and (width<=600px){:root{--ck-link-panel-width:300px}}.ck.ck-form.ck-link-form{width:var(--ck-link-panel-width);padding-bottom:0}@media screen and (width<=600px){.ck.ck-form.ck-link-form.ck-responsive-form .ck-labeled-field-view{margin:0}}.ck.ck-form.ck-link-form .ck-link-form__providers-list{border-top:1px solid var(--ck-color-base-border);flex-direction:column;display:flex}.ck.ck-form.ck-link-form .ck-link-form__providers-list:has(.ck-list__item:nth-child(n+5)){max-height:calc(var(--ck-link-provider-list-item-height) * 4 + var(--ck-spacing-large) + 1px);overflow:auto}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button{padding:var(--ck-spacing-small) var(--ck-spacing-large);border-radius:0}.ck.ck-form.ck-link-form .ck-link-form__providers-list .ck-link__button>.ck-button__label{text-overflow:ellipsis;flex-grow:1;overflow:hidden}.ck.ck-link-form .ck-link__items:empty{display:none}:root{--ck-link-properties-width:340px}@media screen and (width<=600px){:root{--ck-link-properties-width:300px}}.ck.ck-link-properties{width:var(--ck-link-properties-width)}:root{--ck-link-providers-width:340px;--ck-link-list-view-max-height:240px;--ck-link-list-view-icon-size:calc(var(--ck-icon-size) * .8)}@media screen and (width<=600px){:root{--ck-link-providers-width:300px}}.ck.ck-link-providers{width:var(--ck-link-providers-width)}.ck.ck-link-providers .ck-form__header__label{text-overflow:ellipsis;overflow:hidden}.ck.ck-link-providers>.ck-link-providers__list{max-height:min(var(--ck-link-list-view-max-height), 40vh);overflow:hidden auto}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-icon{width:var(--ck-link-list-view-icon-size);height:var(--ck-link-list-view-icon-size);flex-shrink:0}.ck.ck-link-providers>.ck-link-providers__list .ck-button>.ck-button__label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ck.ck-link-providers>.ck-link-providers__list{overscroll-behavior:contain}.ck.ck-link-providers .ck-link__empty-list-info{padding:calc(2 * var(--ck-spacing-large)) var(--ck-spacing-medium);text-align:center;font-style:italic}.ck-editor__editable .ck-list-bogus-paragraph{display:block}:root{--ck-list-style-button-size:44px}.ck.ck-list-styles-list{row-gap:var(--ck-spacing-medium);column-gap:var(--ck-spacing-medium);padding:var(--ck-spacing-large);grid-template-columns:repeat(3,auto)}.ck.ck-list-styles-list .ck-button{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size);box-sizing:content-box;margin:0;padding:0}.ck.ck-list-styles-list .ck-button .ck-icon{width:var(--ck-list-style-button-size);height:var(--ck-list-style-button-size)}.ck.ck-list-styles-list{display:grid}.ck.ck-list-properties.ck-list-properties_without-styles{padding:var(--ck-spacing-large)}.ck.ck-list-properties.ck-list-properties_without-styles>*{min-width:14em}.ck.ck-list-properties.ck-list-properties_without-styles>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-list-styles-list{grid-template-columns:repeat(4,auto)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible{border-top:1px solid var(--ck-color-base-border)}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*{width:100%}.ck.ck-list-properties.ck-list-properties_with-numbered-properties>.ck-collapsible>.ck-collapsible__children>*+*{margin-top:var(--ck-spacing-standard)}.ck.ck-list-properties .ck.ck-numbered-list-properties__start-index .ck-input{width:100%;min-width:auto}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order{margin-bottom:calc(-1 * var(--ck-spacing-tiny));background:0 0;padding-left:0;padding-right:0}.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:active,.ck.ck-list-properties .ck.ck-numbered-list-properties__reversed-order:hover{box-shadow:none;background:0 0;border-color:#0000}:root{--ck-content-list-marker-color:var(--ck-content-font-color);--ck-content-list-marker-font-family:var(--ck-content-font-family);--ck-content-list-marker-font-size:var(--ck-content-font-size)}.ck-content li>p:first-of-type{margin-top:0}.ck-content li>p:only-of-type{margin-top:0;margin-bottom:0}.ck-content li.ck-list-marker-bold::marker{font-weight:700}.ck-content li.ck-list-marker-italic::marker{font-style:italic}.ck-content li.ck-list-marker-color::marker{color:var(--ck-content-list-marker-color)}.ck-content li.ck-list-marker-font-family::marker{font-family:var(--ck-content-list-marker-font-family)}.ck-content li.ck-list-marker-font-size::marker{font-size:var(--ck-content-list-marker-font-size)}.ck-content li.ck-list-marker-font-size-tiny::marker{font-size:var(--ck-content-font-size-tiny)}.ck-content li.ck-list-marker-font-size-small::marker{font-size:var(--ck-content-font-size-small)}.ck-content li.ck-list-marker-font-size-big::marker{font-size:var(--ck-content-font-size-big)}.ck-content li.ck-list-marker-font-size-huge::marker{font-size:var(--ck-content-font-size-huge)}.ck-content ol{list-style-type:decimal}.ck-content ol ol{list-style-type:lower-latin}.ck-content ol ol ol{list-style-type:lower-roman}.ck-content ol ol ol ol{list-style-type:upper-latin}.ck-content ol ol ol ol ol{list-style-type:upper-roman}.ck-content ul{list-style-type:disc}.ck-content ul ul{list-style-type:circle}.ck-content ul ul ul{list-style-type:square}.ck-content ul ul ul ul{list-style-type:square}:root{--ck-content-todo-list-checkmark-size:16px}.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{-webkit-appearance:none;width:var(--ck-content-todo-list-checkmark-size);height:var(--ck-content-todo-list-checkmark-size);vertical-align:middle;border:0;margin-left:0;margin-right:-15px;display:inline-block;position:relative;left:-25px;right:0}[dir=rtl]:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input){margin-left:-15px;margin-right:0;left:0;right:-25px}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{box-sizing:border-box;content:\"\";border:1px solid #333;border-radius:2px;width:100%;height:100%;transition:box-shadow .25s ease-in-out;display:block;position:absolute}@media (prefers-reduced-motion:reduce){:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):before{transition:none}}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):after{box-sizing:content-box;pointer-events:none;content:\"\";left:calc(var(--ck-content-todo-list-checkmark-size) / 3);top:calc(var(--ck-content-todo-list-checkmark-size) / 5.3);width:calc(var(--ck-content-todo-list-checkmark-size) / 5.3);height:calc(var(--ck-content-todo-list-checkmark-size) / 2.6);border-style:solid;border-color:#0000;border-width:0 calc(var(--ck-content-todo-list-checkmark-size) / 8) calc(var(--ck-content-todo-list-checkmark-size) / 8) 0;display:block;position:absolute;transform:rotate(45deg)}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:before{background:#26ab33;border-color:#26ab33}:is(.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input)[checked]:after{border-color:#fff}.ck-content .todo-list{list-style:none}.ck-content .todo-list li{margin-bottom:5px;position:relative}.ck-content .todo-list li .todo-list{margin-top:5px}.ck-content .todo-list .todo-list__label .todo-list__label__description{vertical-align:middle}.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input{cursor:pointer}:is(.ck-editor__editable.ck-content .todo-list .todo-list__label>input,.ck-editor__editable.ck-content .todo-list .todo-list__label>span[contenteditable=false]>input):hover:before{box-shadow:0 0 0 5px #0000001a}.ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox]{position:absolute}.ck-content .media{clear:both;min-width:15em;margin:.9em auto;display:block}:root{--ck-media-embed-placeholder-icon-size:3em;--ck-color-media-embed-placeholder-url-text:#757575;--ck-color-media-embed-placeholder-url-text-hover:var(--ck-color-base-text)}.ck-media__wrapper{margin:0 auto}.ck-media__wrapper .ck-media__placeholder{padding:calc(3 * var(--ck-spacing-standard));background:var(--ck-color-base-foreground);flex-direction:column;align-items:center;display:flex}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon{min-width:var(--ck-media-embed-placeholder-icon-size);height:var(--ck-media-embed-placeholder-icon-size);margin-bottom:var(--ck-spacing-large);background-position:50%;background-size:cover}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__icon .ck-icon{width:100%;height:100%}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text{color:var(--ck-color-media-embed-placeholder-url-text);white-space:nowrap;text-align:center;text-overflow:ellipsis;font-style:italic}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:var(--ck-color-media-embed-placeholder-url-text-hover);cursor:pointer;text-decoration:underline}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url{max-width:100%;position:relative}.ck-media__wrapper .ck-media__placeholder .ck-media__placeholder__url .ck-media__placeholder__url__text{display:block;overflow:hidden}.ck-media__wrapper[data-oembed-url*=\"google.com/maps\"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*=\"goo.gl/maps\"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*=\"maps.google.com\"] .ck-media__placeholder__icon,.ck-media__wrapper[data-oembed-url*=\"maps.app.goo.gl\"] .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTAuMzc4IiBoZWlnaHQ9IjI1NC4xNjciIHZpZXdCb3g9IjAgMCA2Ni4yNDYgNjcuMjQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTcyLjUzMSAtMjE4LjQ1NSkgc2NhbGUoLjk4MDEyKSI+PHJlY3Qgcnk9IjUuMjM4IiByeD0iNS4yMzgiIHk9IjIzMS4zOTkiIHg9IjE3Ni4wMzEiIGhlaWdodD0iNjAuMDk5IiB3aWR0aD0iNjAuMDk5IiBmaWxsPSIjMzRhNjY4IiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxwYXRoIGQ9Ik0yMDYuNDc3IDI2MC45bC0yOC45ODcgMjguOTg3YTUuMjE4IDUuMjE4IDAgMCAwIDMuNzggMS42MWg0OS42MjFjMS42OTQgMCAzLjE5LS43OTggNC4xNDYtMi4wMzd6IiBmaWxsPSIjNWM4OGM1Ii8+PHBhdGggZD0iTTIyNi43NDIgMjIyLjk4OGMtOS4yNjYgMC0xNi43NzcgNy4xNy0xNi43NzcgMTYuMDE0LjAwNyAyLjc2Mi42NjMgNS40NzQgMi4wOTMgNy44NzUuNDMuNzAzLjgzIDEuNDA4IDEuMTkgMi4xMDcuMzMzLjUwMi42NSAxLjAwNS45NSAxLjUwOC4zNDMuNDc3LjY3My45NTcuOTg4IDEuNDQgMS4zMSAxLjc2OSAyLjUgMy41MDIgMy42MzcgNS4xNjguNzkzIDEuMjc1IDEuNjgzIDIuNjQgMi40NjYgMy45OSAyLjM2MyA0LjA5NCA0LjAwNyA4LjA5MiA0LjYgMTMuOTE0di4wMTJjLjE4Mi40MTIuNTE2LjY2Ni44NzkuNjY3LjQwMy0uMDAxLjc2OC0uMzE0LjkzLS43OTkuNjAzLTUuNzU2IDIuMjM4LTkuNzI5IDQuNTg1LTEzLjc5NC43ODItMS4zNSAxLjY3My0yLjcxNSAyLjQ2NS0zLjk5IDEuMTM3LTEuNjY2IDIuMzI4LTMuNCAzLjYzOC01LjE2OS4zMTUtLjQ4Mi42NDUtLjk2Mi45ODgtMS40MzkuMy0uNTAzLjYxNy0xLjAwNi45NS0xLjUwOC4zNTktLjcuNzYtMS40MDQgMS4xOS0yLjEwNyAxLjQyNi0yLjQwMiAyLTUuMTE0IDIuMDA0LTcuODc1IDAtOC44NDQtNy41MTEtMTYuMDE0LTE2Ljc3Ni0xNi4wMTR6IiBmaWxsPSIjZGQ0YjNlIiBwYWludC1vcmRlcj0ibWFya2VycyBzdHJva2UgZmlsbCIvPjxlbGxpcHNlIHJ5PSI1LjU2NCIgcng9IjUuODI4IiBjeT0iMjM5LjAwMiIgY3g9IjIyNi43NDIiIGZpbGw9IiM4MDJkMjciIHBhaW50LW9yZGVyPSJtYXJrZXJzIHN0cm9rZSBmaWxsIi8+PHBhdGggZD0iTTE5MC4zMDEgMjM3LjI4M2MtNC42NyAwLTguNDU3IDMuODUzLTguNDU3IDguNjA2czMuNzg2IDguNjA3IDguNDU3IDguNjA3YzMuMDQzIDAgNC44MDYtLjk1OCA2LjMzNy0yLjUxNiAxLjUzLTEuNTU3IDIuMDg3LTMuOTEzIDIuMDg3LTYuMjkgMC0uMzYyLS4wMjMtLjcyMi0uMDY0LTEuMDc5aC04LjI1N3YzLjA0M2g0Ljg1Yy0uMTk3Ljc1OS0uNTMxIDEuNDUtMS4wNTggMS45ODYtLjk0Mi45NTgtMi4wMjggMS41NDgtMy45MDEgMS41NDgtMi44NzYgMC01LjIwOC0yLjM3Mi01LjIwOC01LjI5OSAwLTIuOTI2IDIuMzMyLTUuMjk5IDUuMjA4LTUuMjk5IDEuMzk5IDAgMi42MTguNDA3IDMuNTg0IDEuMjkzbDIuMzgxLTIuMzhjMC0uMDAyLS4wMDMtLjAwNC0uMDA0LS4wMDUtMS41ODgtMS41MjQtMy42Mi0yLjIxNS01Ljk1NS0yLjIxNXptNC40MyA1LjY2bC4wMDMuMDA2di0uMDAzeiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjE1LjE4NCAyNTEuOTI5bC03Ljk4IDcuOTc5IDI4LjQ3NyAyOC40NzVjLjI4Ny0uNjQ5LjQ0OS0xLjM2Ni40NDktMi4xMjN2LTMxLjE2NWMtLjQ2OS42NzUtLjkzNCAxLjM0OS0xLjM4MiAyLjAwNS0uNzkyIDEuMjc1LTEuNjgyIDIuNjQtMi40NjUgMy45OS0yLjM0NyA0LjA2NS0zLjk4MiA4LjAzOC00LjU4NSAxMy43OTQtLjE2Mi40ODUtLjUyNy43OTgtLjkzLjc5OS0uMzYzLS4wMDEtLjY5Ny0uMjU1LS44NzktLjY2N3YtLjAxMmMtLjU5My01LjgyMi0yLjIzNy05LjgyLTQuNi0xMy45MTQtLjc4My0xLjM1LTEuNjczLTIuNzE1LTIuNDY2LTMuOTktMS4xMzctMS42NjYtMi4zMjctMy40LTMuNjM3LTUuMTY5bC0uMDAyLS4wMDN6IiBmaWxsPSIjYzNjM2MzIi8+PHBhdGggZD0iTTIxMi45ODMgMjQ4LjQ5NWwtMzYuOTUyIDM2Ljk1M3YuODEyYTUuMjI3IDUuMjI3IDAgMCAwIDUuMjM4IDUuMjM4aDEuMDE1bDM1LjY2Ni0zNS42NjZhMTM2LjI3NSAxMzYuMjc1IDAgMCAwLTIuNzY0LTMuOSAzNy41NzUgMzcuNTc1IDAgMCAwLS45ODktMS40NGMtLjI5OS0uNTAzLS42MTYtMS4wMDYtLjk1LTEuNTA4LS4wODMtLjE2Mi0uMTc2LS4zMjYtLjI2NC0uNDg5eiIgZmlsbD0iI2ZkZGM0ZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48cGF0aCBkPSJNMjExLjk5OCAyNjEuMDgzbC02LjE1MiA2LjE1MSAyNC4yNjQgMjQuMjY0aC43ODFhNS4yMjcgNS4yMjcgMCAwIDAgNS4yMzktNS4yMzh2LTEuMDQ1eiIgZmlsbD0iI2ZmZiIgcGFpbnQtb3JkZXI9Im1hcmtlcnMgc3Ryb2tlIGZpbGwiLz48L2c+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=facebook\\.com] .ck-media__placeholder{background:#4268b3}.ck-media__wrapper[data-oembed-url*=facebook\\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSIxMDI0cHgiIGhlaWdodD0iMTAyNHB4IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiAgICAgICAgPHRpdGxlPkZpbGwgMTwvdGl0bGU+ICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiAgICA8ZGVmcz48L2RlZnM+ICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPiAgICAgICAgPGcgaWQ9ImZMb2dvX1doaXRlIiBmaWxsPSIjRkZGRkZFIj4gICAgICAgICAgICA8cGF0aCBkPSJNOTY3LjQ4NCwwIEw1Ni41MTcsMCBDMjUuMzA0LDAgMCwyNS4zMDQgMCw1Ni41MTcgTDAsOTY3LjQ4MyBDMCw5OTguNjk0IDI1LjI5NywxMDI0IDU2LjUyMiwxMDI0IEw1NDcsMTAyNCBMNTQ3LDYyOCBMNDE0LDYyOCBMNDE0LDQ3MyBMNTQ3LDQ3MyBMNTQ3LDM1OS4wMjkgQzU0NywyMjYuNzY3IDYyNy43NzMsMTU0Ljc0NyA3NDUuNzU2LDE1NC43NDcgQzgwMi4yNjksMTU0Ljc0NyA4NTAuODQyLDE1OC45NTUgODY1LDE2MC44MzYgTDg2NSwyOTkgTDc4My4zODQsMjk5LjAzNyBDNzE5LjM5MSwyOTkuMDM3IDcwNywzMjkuNTI5IDcwNywzNzQuMjczIEw3MDcsNDczIEw4NjAuNDg3LDQ3MyBMODQwLjUwMSw2MjggTDcwNyw2MjggTDcwNywxMDI0IEw5NjcuNDg0LDEwMjQgQzk5OC42OTcsMTAyNCAxMDI0LDk5OC42OTcgMTAyNCw5NjcuNDg0IEwxMDI0LDU2LjUxNSBDMTAyNCwyNS4zMDMgOTk4LjY5NywwIDk2Ny40ODQsMCIgaWQ9IkZpbGwtMSI+PC9wYXRoPiAgICAgICAgPC9nPiAgICA8L2c+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=facebook\\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#cdf}.ck-media__wrapper[data-oembed-url*=facebook\\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=instagram\\.com] .ck-media__placeholder{background:linear-gradient(-135deg,#1400c7,#b800b1,#f50000)}.ck-media__wrapper[data-oembed-url*=instagram\\.com] .ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI1MDRweCIgaGVpZ2h0PSI1MDRweCIgdmlld0JveD0iMCAwIDUwNCA1MDQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+ICAgICAgICA8dGl0bGU+Z2x5cGgtbG9nb19NYXkyMDE2PC90aXRsZT4gICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+ICAgIDxkZWZzPiAgICAgICAgPHBvbHlnb24gaWQ9InBhdGgtMSIgcG9pbnRzPSIwIDAuMTU5IDUwMy44NDEgMC4xNTkgNTAzLjg0MSA1MDMuOTQgMCA1MDMuOTQiPjwvcG9seWdvbj4gICAgPC9kZWZzPiAgICA8ZyBpZD0iZ2x5cGgtbG9nb19NYXkyMDE2IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4gICAgICAgIDxnIGlkPSJHcm91cC0zIj4gICAgICAgICAgICA8bWFzayBpZD0ibWFzay0yIiBmaWxsPSJ3aGl0ZSI+ICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+ICAgICAgICAgICAgPC9tYXNrPiAgICAgICAgICAgIDxnIGlkPSJDbGlwLTIiPjwvZz4gICAgICAgICAgICA8cGF0aCBkPSJNMjUxLjkyMSwwLjE1OSBDMTgzLjUwMywwLjE1OSAxNzQuOTI0LDAuNDQ5IDE0OC4wNTQsMS42NzUgQzEyMS4yNCwyLjg5OCAxMDIuOTI3LDcuMTU3IDg2LjkwMywxMy4zODUgQzcwLjMzNywxOS44MjIgNTYuMjg4LDI4LjQzNiA0Mi4yODIsNDIuNDQxIEMyOC4yNzcsNTYuNDQ3IDE5LjY2Myw3MC40OTYgMTMuMjI2LDg3LjA2MiBDNi45OTgsMTAzLjA4NiAyLjczOSwxMjEuMzk5IDEuNTE2LDE0OC4yMTMgQzAuMjksMTc1LjA4MyAwLDE4My42NjIgMCwyNTIuMDggQzAsMzIwLjQ5NyAwLjI5LDMyOS4wNzYgMS41MTYsMzU1Ljk0NiBDMi43MzksMzgyLjc2IDYuOTk4LDQwMS4wNzMgMTMuMjI2LDQxNy4wOTcgQzE5LjY2Myw0MzMuNjYzIDI4LjI3Nyw0NDcuNzEyIDQyLjI4Miw0NjEuNzE4IEM1Ni4yODgsNDc1LjcyMyA3MC4zMzcsNDg0LjMzNyA4Ni45MDMsNDkwLjc3NSBDMTAyLjkyNyw0OTcuMDAyIDEyMS4yNCw1MDEuMjYxIDE0OC4wNTQsNTAyLjQ4NCBDMTc0LjkyNCw1MDMuNzEgMTgzLjUwMyw1MDQgMjUxLjkyMSw1MDQgQzMyMC4zMzgsNTA0IDMyOC45MTcsNTAzLjcxIDM1NS43ODcsNTAyLjQ4NCBDMzgyLjYwMSw1MDEuMjYxIDQwMC45MTQsNDk3LjAwMiA0MTYuOTM4LDQ5MC43NzUgQzQzMy41MDQsNDg0LjMzNyA0NDcuNTUzLDQ3NS43MjMgNDYxLjU1OSw0NjEuNzE4IEM0NzUuNTY0LDQ0Ny43MTIgNDg0LjE3OCw0MzMuNjYzIDQ5MC42MTYsNDE3LjA5NyBDNDk2Ljg0Myw0MDEuMDczIDUwMS4xMDIsMzgyLjc2IDUwMi4zMjUsMzU1Ljk0NiBDNTAzLjU1MSwzMjkuMDc2IDUwMy44NDEsMzIwLjQ5NyA1MDMuODQxLDI1Mi4wOCBDNTAzLjg0MSwxODMuNjYyIDUwMy41NTEsMTc1LjA4MyA1MDIuMzI1LDE0OC4yMTMgQzUwMS4xMDIsMTIxLjM5OSA0OTYuODQzLDEwMy4wODYgNDkwLjYxNiw4Ny4wNjIgQzQ4NC4xNzgsNzAuNDk2IDQ3NS41NjQsNTYuNDQ3IDQ2MS41NTksNDIuNDQxIEM0NDcuNTUzLDI4LjQzNiA0MzMuNTA0LDE5LjgyMiA0MTYuOTM4LDEzLjM4NSBDNDAwLjkxNCw3LjE1NyAzODIuNjAxLDIuODk4IDM1NS43ODcsMS42NzUgQzMyOC45MTcsMC40NDkgMzIwLjMzOCwwLjE1OSAyNTEuOTIxLDAuMTU5IFogTTI1MS45MjEsNDUuNTUgQzMxOS4xODYsNDUuNTUgMzI3LjE1NCw0NS44MDcgMzUzLjcxOCw0Ny4wMTkgQzM3OC4yOCw0OC4xMzkgMzkxLjYxOSw1Mi4yNDMgNDAwLjQ5Niw1NS42OTMgQzQxMi4yNTUsNjAuMjYzIDQyMC42NDcsNjUuNzIyIDQyOS40NjIsNzQuNTM4IEM0MzguMjc4LDgzLjM1MyA0NDMuNzM3LDkxLjc0NSA0NDguMzA3LDEwMy41MDQgQzQ1MS43NTcsMTEyLjM4MSA0NTUuODYxLDEyNS43MiA0NTYuOTgxLDE1MC4yODIgQzQ1OC4xOTMsMTc2Ljg0NiA0NTguNDUsMTg0LjgxNCA0NTguNDUsMjUyLjA4IEM0NTguNDUsMzE5LjM0NSA0NTguMTkzLDMyNy4zMTMgNDU2Ljk4MSwzNTMuODc3IEM0NTUuODYxLDM3OC40MzkgNDUxLjc1NywzOTEuNzc4IDQ0OC4zMDcsNDAwLjY1NSBDNDQzLjczNyw0MTIuNDE0IDQzOC4yNzgsNDIwLjgwNiA0MjkuNDYyLDQyOS42MjEgQzQyMC42NDcsNDM4LjQzNyA0MTIuMjU1LDQ0My44OTYgNDAwLjQ5Niw0NDguNDY2IEMzOTEuNjE5LDQ1MS45MTYgMzc4LjI4LDQ1Ni4wMiAzNTMuNzE4LDQ1Ny4xNCBDMzI3LjE1OCw0NTguMzUyIDMxOS4xOTEsNDU4LjYwOSAyNTEuOTIxLDQ1OC42MDkgQzE4NC42NSw0NTguNjA5IDE3Ni42ODQsNDU4LjM1MiAxNTAuMTIzLDQ1Ny4xNCBDMTI1LjU2MSw0NTYuMDIgMTEyLjIyMiw0NTEuOTE2IDEwMy4zNDUsNDQ4LjQ2NiBDOTEuNTg2LDQ0My44OTYgODMuMTk0LDQzOC40MzcgNzQuMzc5LDQyOS42MjEgQzY1LjU2NCw0MjAuODA2IDYwLjEwNCw0MTIuNDE0IDU1LjUzNCw0MDAuNjU1IEM1Mi4wODQsMzkxLjc3OCA0Ny45OCwzNzguNDM5IDQ2Ljg2LDM1My44NzcgQzQ1LjY0OCwzMjcuMzEzIDQ1LjM5MSwzMTkuMzQ1IDQ1LjM5MSwyNTIuMDggQzQ1LjM5MSwxODQuODE0IDQ1LjY0OCwxNzYuODQ2IDQ2Ljg2LDE1MC4yODIgQzQ3Ljk4LDEyNS43MiA1Mi4wODQsMTEyLjM4MSA1NS41MzQsMTAzLjUwNCBDNjAuMTA0LDkxLjc0NSA2NS41NjMsODMuMzUzIDc0LjM3OSw3NC41MzggQzgzLjE5NCw2NS43MjIgOTEuNTg2LDYwLjI2MyAxMDMuMzQ1LDU1LjY5MyBDMTEyLjIyMiw1Mi4yNDMgMTI1LjU2MSw0OC4xMzkgMTUwLjEyMyw0Ny4wMTkgQzE3Ni42ODcsNDUuODA3IDE4NC42NTUsNDUuNTUgMjUxLjkyMSw0NS41NSBaIiBpZD0iRmlsbC0xIiBmaWxsPSIjRkZGRkZGIiBtYXNrPSJ1cmwoI21hc2stMikiPjwvcGF0aD4gICAgICAgIDwvZz4gICAgICAgIDxwYXRoIGQ9Ik0yNTEuOTIxLDMzNi4wNTMgQzIwNS41NDMsMzM2LjA1MyAxNjcuOTQ3LDI5OC40NTcgMTY3Ljk0NywyNTIuMDggQzE2Ny45NDcsMjA1LjcwMiAyMDUuNTQzLDE2OC4xMDYgMjUxLjkyMSwxNjguMTA2IEMyOTguMjk4LDE2OC4xMDYgMzM1Ljg5NCwyMDUuNzAyIDMzNS44OTQsMjUyLjA4IEMzMzUuODk0LDI5OC40NTcgMjk4LjI5OCwzMzYuMDUzIDI1MS45MjEsMzM2LjA1MyBaIE0yNTEuOTIxLDEyMi43MTUgQzE4MC40NzQsMTIyLjcxNSAxMjIuNTU2LDE4MC42MzMgMTIyLjU1NiwyNTIuMDggQzEyMi41NTYsMzIzLjUyNiAxODAuNDc0LDM4MS40NDQgMjUxLjkyMSwzODEuNDQ0IEMzMjMuMzY3LDM4MS40NDQgMzgxLjI4NSwzMjMuNTI2IDM4MS4yODUsMjUyLjA4IEMzODEuMjg1LDE4MC42MzMgMzIzLjM2NywxMjIuNzE1IDI1MS45MjEsMTIyLjcxNSBaIiBpZD0iRmlsbC00IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgICAgICA8cGF0aCBkPSJNNDE2LjYyNywxMTcuNjA0IEM0MTYuNjI3LDEzNC4zIDQwMy4wOTIsMTQ3LjgzNCAzODYuMzk2LDE0Ny44MzQgQzM2OS43MDEsMTQ3LjgzNCAzNTYuMTY2LDEzNC4zIDM1Ni4xNjYsMTE3LjYwNCBDMzU2LjE2NiwxMDAuOTA4IDM2OS43MDEsODcuMzczIDM4Ni4zOTYsODcuMzczIEM0MDMuMDkyLDg3LjM3MyA0MTYuNjI3LDEwMC45MDggNDE2LjYyNywxMTcuNjA0IiBpZD0iRmlsbC01IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+ICAgIDwvZz48L3N2Zz4=)}.ck-media__wrapper[data-oembed-url*=instagram\\.com] .ck-media__placeholder .ck-media__placeholder__url__text{color:#ffe0fe}.ck-media__wrapper[data-oembed-url*=instagram\\.com] .ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}.ck-media__wrapper[data-oembed-url*=twitter\\.com] .ck.ck-media__placeholder{background:linear-gradient(90deg,#71c6f4,#0d70a5)}.ck-media__wrapper[data-oembed-url*=twitter\\.com] .ck.ck-media__placeholder .ck-media__placeholder__icon{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IldoaXRlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQwMCA0MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5zdDB7ZmlsbDojRkZGRkZGO308L3N0eWxlPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MDAsMjAwYzAsMTEwLjUtODkuNSwyMDAtMjAwLDIwMFMwLDMxMC41LDAsMjAwUzg5LjUsMCwyMDAsMFM0MDAsODkuNSw0MDAsMjAweiBNMTYzLjQsMzA1LjVjODguNywwLDEzNy4yLTczLjUsMTM3LjItMTM3LjJjMC0yLjEsMC00LjItMC4xLTYuMmM5LjQtNi44LDE3LjYtMTUuMywyNC4xLTI1Yy04LjYsMy44LTE3LjksNi40LTI3LjcsNy42YzEwLTYsMTcuNi0xNS40LDIxLjItMjYuN2MtOS4zLDUuNS0xOS42LDkuNS0zMC42LDExLjdjLTguOC05LjQtMjEuMy0xNS4yLTM1LjItMTUuMmMtMjYuNiwwLTQ4LjIsMjEuNi00OC4yLDQ4LjJjMCwzLjgsMC40LDcuNSwxLjMsMTFjLTQwLjEtMi03NS42LTIxLjItOTkuNC01MC40Yy00LjEsNy4xLTYuNSwxNS40LTYuNSwyNC4yYzAsMTYuNyw4LjUsMzEuNSwyMS41LDQwLjFjLTcuOS0wLjItMTUuMy0yLjQtMjEuOC02YzAsMC4yLDAsMC40LDAsMC42YzAsMjMuNCwxNi42LDQyLjgsMzguNyw0Ny4zYy00LDEuMS04LjMsMS43LTEyLjcsMS43Yy0zLjEsMC02LjEtMC4zLTkuMS0wLjljNi4xLDE5LjIsMjMuOSwzMy4xLDQ1LDMzLjVjLTE2LjUsMTIuOS0zNy4zLDIwLjYtNTkuOSwyMC42Yy0zLjksMC03LjctMC4yLTExLjUtMC43QzExMC44LDI5Ny41LDEzNi4yLDMwNS41LDE2My40LDMwNS41Ii8+PC9zdmc+)}.ck-media__wrapper[data-oembed-url*=twitter\\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text{color:#b8e6ff}.ck-media__wrapper[data-oembed-url*=twitter\\.com] .ck.ck-media__placeholder .ck-media__placeholder__url__text:hover{color:#fff}:is(.ck-media__wrapper[data-oembed-url*=twitter\\.com],.ck-media__wrapper[data-oembed-url*=\"google.com/maps\"],.ck-media__wrapper[data-oembed-url*=\"goo.gl/maps\"],.ck-media__wrapper[data-oembed-url*=\"maps.google.com\"],.ck-media__wrapper[data-oembed-url*=\"maps.app.goo.gl\"],.ck-media__wrapper[data-oembed-url*=facebook\\.com],.ck-media__wrapper[data-oembed-url*=instagram\\.com]) .ck-media__placeholder__icon *{display:none}.ck-content .media:has(>div[data-oembed-url*=\"open.spotify.com\"]){width:300px;min-width:286px}.ck-editor__editable:not(.ck-read-only) .ck-media__wrapper>:not(.ck-media__placeholder),.ck-editor__editable:not(.ck-read-only) .ck-widget:not(.ck-widget_selected) .ck-media__placeholder{pointer-events:none}.ck-content .media.media_resized{box-sizing:border-box;max-width:100%;display:block}.ck-content .media.media_resized>div[data-oembed-url]{width:100%}.ck .ck-widget.media:-webkit-drag>.ck-widget__resizer{display:none}[dir=ltr] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] .ck.ck-button.ck-button_with-text.ck-resize-media-embed-button .ck-button__icon{margin-left:var(--ck-spacing-standard)}.ck.ck-dropdown .ck-button.ck-resize-media-embed-button .ck-button__label{width:4em}:root{--ck-media-embed-custom-resize-form-width:340px}@media screen and (width<=600px){:root{--ck-media-embed-custom-resize-form-width:300px}}.ck.ck-media-embed-custom-resize-form.ck-responsive-form{width:var(--ck-media-embed-custom-resize-form-width)}:root{--ck-content-media-style-spacing:1.5em}.ck-content .media.media-style-align-left,.ck-content .media.media-style-align-right{clear:none;width:100%}.ck-content .media.media-style-align-left{float:left;margin-right:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-align-right{float:right;margin-left:var(--ck-content-media-style-spacing)}.ck-content .media.media-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .media.media-style-block-align-right{margin-left:auto;margin-right:0}.ck.ck-media-form{flex-flow:row;align-items:flex-start;width:400px;display:flex}.ck.ck-media-form .ck-labeled-field-view{width:100%;display:inline-block}.ck.ck-media-form .ck-label{display:none}.ck.ck-media-form .ck-input{width:100%}@media screen and (width<=600px){.ck.ck-media-form{flex-wrap:wrap}.ck.ck-media-form .ck-labeled-field-view{flex-basis:100%}.ck.ck-media-form .ck-button{flex-basis:50%}}:root{--ck-content-color-mention-background:#9900301a;--ck-content-color-mention-text:#990030}.ck-content .mention{background:var(--ck-content-color-mention-background);color:var(--ck-content-color-mention-text)}:root{--ck-mention-list-max-height:300px}.ck.ck-mentions{max-height:var(--ck-mention-list-max-height);overscroll-behavior:contain;overflow:hidden auto}.ck.ck-mentions>.ck-list__item{flex-shrink:0;overflow:hidden}div.ck.ck-balloon-panel.ck-mention-balloon{z-index:calc(var(--ck-z-dialog) + 1)}:root{--ck-color-minimap-tracker-background:208, 0%, 51%;--ck-color-minimap-iframe-outline:#bfbfbf;--ck-color-minimap-iframe-shadow:#0000001c;--ck-color-minimap-progress-background:#666}.ck.ck-minimap{user-select:none;background:var(--ck-color-base-background);position:absolute}.ck.ck-minimap,.ck.ck-minimap iframe{width:100%;height:100%}.ck.ck-minimap iframe{pointer-events:none;outline:1px solid var(--ck-color-minimap-iframe-outline);box-shadow:0 2px 5px var(--ck-color-minimap-iframe-shadow);border:0;margin:0;position:relative}.ck.ck-minimap .ck.ck-minimap__position-tracker{background:hsla(var(--ck-color-minimap-tracker-background), .2);z-index:1;width:100%;transition:background .1s ease-in-out;position:absolute;top:0}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker{transition:none}}.ck.ck-minimap .ck.ck-minimap__position-tracker:hover{background:hsla(var(--ck-color-minimap-tracker-background), .3)}.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover{background:hsla(var(--ck-color-minimap-tracker-background), .4)}:is(.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging,.ck.ck-minimap .ck.ck-minimap__position-tracker.ck-minimap__position-tracker_dragging:hover):after{opacity:1}.ck.ck-minimap .ck.ck-minimap__position-tracker:after{content:attr(data-progress) \"%\";background:var(--ck-color-minimap-progress-background);color:var(--ck-color-base-background);border:1px solid var(--ck-color-base-background);opacity:0;border-radius:3px;padding:2px 4px;font-size:10px;transition:opacity .1s ease-in-out;position:absolute;top:5px;right:5px}@media (prefers-reduced-motion:reduce){.ck.ck-minimap .ck.ck-minimap__position-tracker:after{transition:none}}.ck-content .page-break{clear:both;justify-content:center;align-items:center;padding:5px 0;display:flex;position:relative}.ck-content .page-break:after{content:\"\";border-bottom:2px dashed #c4c4c4;width:100%;position:absolute}.ck-content .page-break__label{z-index:1;text-transform:uppercase;color:#333;-webkit-user-select:none;user-select:none;background:#fff;border:1px solid #c4c4c4;border-radius:2px;padding:.3em .6em;font-size:.75em;font-weight:700;display:block;position:relative;box-shadow:2px 2px 1px #00000026}@media print{.ck-content .page-break{padding:0}.ck-content .page-break:after{display:none}.ck-content :has(+.page-break){margin-bottom:0}}:root{--ck-color-restricted-editing-exception-background:#ffa94c33;--ck-color-restricted-editing-exception-hover-background:#ffa94c59;--ck-color-restricted-editing-exception-brackets:#cc690066;--ck-color-restricted-editing-selected-exception-background:#ffa94c80;--ck-color-restricted-editing-selected-exception-brackets:#cc690099}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right, var(--ck-color-restricted-editing-exception-brackets) 0%, var(--ck-color-restricted-editing-exception-brackets) 5px, #0000 6px, #0000 calc(100% - 6px), var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px), var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}@media (prefers-reduced-motion:reduce){.ck-editor__editable .restricted-editing-exception{transition:none}}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right, var(--ck-color-restricted-editing-selected-exception-brackets) 0%, var(--ck-color-restricted-editing-selected-exception-brackets) 5px, var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px), var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted{cursor:default}.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}:root{--ck-show-blocks-border-color:#757575}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) address{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-address-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-address-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) aside{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-aside-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-aside-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) blockquote{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-blockquote-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-blockquote-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) details{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-details-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-details-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) div:not(.ck-widget,.ck-widget *){--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-div-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-div-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) footer{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-footer-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-footer-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h1{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h1-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h1-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h2{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h2-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h2-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h3{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h3-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h3-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h4{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h4-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h4-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h5{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h5-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h5-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) h6{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-h6-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-h6-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) header{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-header-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-header-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) main{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-main-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-main-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) nav{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-nav-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-nav-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) pre{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-pre-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-pre-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ol{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ol-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ol-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) ul{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-ul-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-ul-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) p{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-p-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-p-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) section{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-section-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-section-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(figure.image,figure.table) figcaption{--ck-show-blocks-label-ltr:var(--ck-show-blocks-label-figcaption-ltr);--ck-show-blocks-label-rtl:var(--ck-show-blocks-label-figcaption-rtl)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-repeat:no-repeat;padding-top:15px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption):where(:not(.ck-widget_selected):not(.ck-widget:hover)){outline:1px dashed var(--ck-show-blocks-border-color)}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(ltr) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-ltr);background-position:1px 1px}.ck.ck-editor__editable.ck-editor__editable_inline.ck-show-blocks:not(.ck-widget):dir(rtl) :where(address,aside,blockquote,details,div:not(.ck-widget,.ck-widget *),footer,h1,h2,h3,h4,h5,h6,header,main,nav,pre,ol,ul,p,section,:where(figure.image,figure.table) figcaption){background-image:var(--ck-show-blocks-label-rtl);background-position:calc(100% - 1px) 1px}.ck-source-editing-area{position:relative;overflow:hidden}.ck-source-editing-area:after,.ck-source-editing-area textarea{padding:var(--ck-spacing-large);line-height:var(--ck-line-height-base);font-size:var(--ck-font-size-normal);white-space:pre-wrap;border:1px solid #0000;margin:0;font-family:monospace}.ck-source-editing-area:after{content:attr(data-value) \" \";visibility:hidden;display:block}.ck-source-editing-area textarea{resize:none;box-sizing:border-box;border-color:var(--ck-color-base-border);border-radius:var(--ck-rounded-corners-radius);border-top-left-radius:0;border-top-right-radius:0;outline:none;width:100%;height:100%;position:absolute;overflow:hidden}.ck-source-editing-area textarea:not([readonly]):focus{border:var(--ck-focus-ring);box-shadow:var(--ck-inner-shadow), 0 0;outline:none}.ck.ck-special-characters-navigation>.ck-label{text-overflow:ellipsis;max-width:160px;overflow:hidden}.ck.ck-special-characters-navigation>.ck-dropdown .ck-dropdown__panel{max-height:250px;overflow:hidden auto}@media screen and (width<=600px){.ck.ck-special-characters-navigation{max-width:190px}.ck.ck-special-characters-navigation>.ck-form__header__label{text-overflow:ellipsis;overflow:hidden}}.ck.ck-special-characters>.ck-dialog__content>div{grid-column-gap:0px;grid-row-gap:0px;grid-template-rows:auto 1fr auto;grid-template-columns:1fr;width:350px;max-width:100%;height:100%;display:grid}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories{padding:var(--ck-spacing-medium) var(--ck-spacing-large);grid-area:1/1/2/2}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view{padding-top:var(--ck-spacing-standard);width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center;animation:.15s both ck-table-form-labeled-view-status-appear}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);border-style:solid}@media (prefers-reduced-motion:reduce){.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories>.ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown{width:100%;display:block}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-categories .ck-dropdown>button>span{width:100%}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-grid{grid-area:2/1/3/2;max-height:200px}.ck.ck-special-characters>.ck-dialog__content>div>.ck-character-info{grid-area:3/1/4/2}:root{--ck-character-grid-tile-size:24px}.ck.ck-character-grid{overflow:hidden auto}.ck.ck-character-grid .ck-character-grid__tiles{grid-template-columns:repeat(auto-fill, minmax(var(--ck-character-grid-tile-size), 1fr));margin:var(--ck-spacing-standard) var(--ck-spacing-large);grid-gap:var(--ck-spacing-standard);display:grid}.ck.ck-character-grid .ck-character-grid__tile{width:var(--ck-character-grid-tile-size);height:var(--ck-character-grid-tile-size);min-width:var(--ck-character-grid-tile-size);min-height:var(--ck-character-grid-tile-size);border:0;padding:0;font-size:1.5em;transition:box-shadow .2s}@media (prefers-reduced-motion:reduce){.ck.ck-character-grid .ck-character-grid__tile{transition:none}}.ck.ck-character-grid .ck-character-grid__tile:focus:not(.ck-disabled),.ck.ck-character-grid .ck-character-grid__tile:hover:not(.ck-disabled){box-shadow:inset 0 0 0 1px var(--ck-color-base-background), 0 0 0 2px var(--ck-color-focus-border);border:0}.ck.ck-character-grid .ck-character-grid__tile .ck-button__label{line-height:var(--ck-character-grid-tile-size);text-align:center;width:100%}.ck.ck-character-grid{max-width:100%}.ck.ck-character-info{padding:var(--ck-spacing-small) var(--ck-spacing-large);border-top:1px solid var(--ck-color-base-border);display:flex}.ck.ck-character-info>*{text-transform:uppercase;font-size:var(--ck-font-size-small)}.ck.ck-character-info .ck-character-info__name{text-overflow:ellipsis;max-width:280px;overflow:hidden}.ck.ck-character-info .ck-character-info__code{opacity:.6}.ck.ck-character-info{justify-content:space-between}.ck.ck-dropdown.ck-style-dropdown.ck-style-dropdown_multiple-active>.ck-button>.ck-button__label{font-style:italic}:root{--ck-style-panel-button-width:120px;--ck-style-panel-button-height:80px;--ck-style-panel-button-label-background:#f0f0f0;--ck-style-panel-button-hover-label-background:#ebebeb;--ck-style-panel-button-hover-border-color:#b3b3b3;--ck-style-panel-columns:3}.ck.ck-style-panel .ck-style-grid{row-gap:var(--ck-spacing-large);column-gap:var(--ck-spacing-large);grid-template-columns:repeat(var(--ck-style-panel-columns),auto);display:grid}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{--ck-color-button-default-hover-background:var(--ck-color-base-background);--ck-color-button-default-active-background:var(--ck-color-base-background);width:var(--ck-style-panel-button-width);height:var(--ck-style-panel-button-height);justify-content:space-between;padding:0;display:flex}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(:focus){border:1px solid var(--ck-color-base-border)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-button__label{width:100%;height:22px;padding:0 var(--ck-spacing-medium);text-overflow:ellipsis;flex-shrink:0;line-height:22px;overflow:hidden}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button .ck-style-grid__button__preview{opacity:.9;width:100%;padding:var(--ck-spacing-medium);background:var(--ck-color-base-background);border:2px solid var(--ck-color-base-background);flex-grow:1;flex-basis:100%;place-content:center flex-start;align-items:center;display:flex;overflow:hidden}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled{--ck-color-button-default-disabled-background:var(--ck-color-base-foreground)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled:not(:focus){border-color:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-disabled .ck-style-grid__button__preview{opacity:.4;border-color:var(--ck-color-base-foreground);filter:saturate(.3)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on{border-color:var(--ck-color-base-active)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on .ck-button__label{box-shadow:0 -1px 0 var(--ck-color-base-active);z-index:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button.ck-on:hover{border-color:var(--ck-color-base-active-focus)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on) .ck-button__label{background:var(--ck-style-panel-button-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:not(.ck-on):hover .ck-button__label{background:var(--ck-style-panel-button-hover-label-background)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on){border-color:var(--ck-style-panel-button-hover-border-color)}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button:hover:not(.ck-disabled):not(.ck-on) .ck-style-grid__button__preview{opacity:1}.ck.ck-style-panel .ck-style-grid .ck-style-grid__button{flex-direction:column}.ck.ck-style-panel .ck-style-grid{justify-content:start}.ck.ck-style-panel .ck-style-panel__style-group>.ck-label{margin:var(--ck-spacing-large) 0}.ck.ck-style-panel .ck-style-panel__style-group:first-child>.ck-label{margin-top:0}:root{--ck-style-panel-max-height:470px}.ck.ck-style-panel{padding:var(--ck-spacing-large);max-height:var(--ck-style-panel-max-height);overflow-y:auto}.ck-content .table th{text-align:start}.ck-content[dir=rtl] .table th{text-align:right}.ck-content[dir=ltr] .table th{text-align:left}.ck-content figure.table:not(.layout-table){display:table}.ck-content figure.table:not(.layout-table)>table{width:100%;height:100%}.ck-content .table:not(.layout-table){margin:.9em auto}.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table{border-collapse:collapse;border-spacing:0;border:1px double #b3b3b3}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{background:#0000000d;font-weight:700}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:first-of-type{margin-top:0}:is(:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th)>p:last-of-type{margin-bottom:0}:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>td,:is(:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>thead,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tfoot,:is(.ck-content table.table:not(.layout-table),.ck-content figure.table:not(.layout-table)>table)>tbody)>tr>th{border:1px solid #bfbfbf;min-width:2em;padding:.4em}@media print{.ck-content figure.table:not(.layout-table){width:fit-content;height:fit-content}.ck-content figure.table:not(.layout-table)>table{height:initial}}.ck-editor__editable .ck-table-bogus-paragraph{width:100%;display:inline-block}:root{--ck-color-table-focused-cell-background:#9ec9fa4d;--ck-table-content-default-border-color:#d4d4d4;--ck-table-border-none-helper-line-color:#d4d4d4;--ck-table-border-none-helper-line-style:dashed;--ck-table-border-none-helper-line-width:1px}.ck-widget.table table[style*=border\\:none],.ck-widget.table table[style*=border-style\\:none],.ck-widget.table table[style*=border\\:0],.ck-widget.table table[style*=border-width\\:0]{outline:var(--ck-table-content-default-border-color) 1px dashed}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable{outline:unset}:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected).ck-editor__nested-editable_focused,:is(.ck-widget.table td,.ck-widget.table th).ck-editor__nested-editable:not(.ck-editor__editable_selected):focus{background:var(--ck-color-table-focused-cell-background);outline:1px solid var(--ck-color-focus-border);outline-offset:-1px}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table){--ck-table-border-none-helper-line:var(--ck-table-border-none-helper-line-width) var(--ck-table-border-none-helper-line-style) var(--ck-table-border-none-helper-line-color)}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(td,th):where([style*=border\\:none],[style*=border\\:0],[style*=border-style\\:none],[style*=border-width\\:0]){border:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-top-style\\:none],[style*=border-top-width\\:0]){border-top:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-right-style\\:none],[style*=border-right-width\\:0]){border-right:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-bottom-style\\:none],[style*=border-bottom-width\\:0]){border-bottom:var(--ck-table-border-none-helper-line)!important}:where(.ck.ck-editor__editable.ck-table-show-hidden-borders .ck-widget.table) :where(table,td,th):where([style*=border-left-style\\:none],[style*=border-left-width\\:0]){border-left:var(--ck-table-border-none-helper-line)!important}.ck.ck-table-cell-properties-form{width:320px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__padding-row{align-self:flex-end;width:25%;padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar{margin-top:var(--ck-spacing-standard);background:0 0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__horizontal-alignment-toolbar{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar.ck-table-cell-properties-form__vertical-alignment-toolbar{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:first-of-type{flex-grow:.57}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar:last-of-type{flex-grow:.43}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row .ck.ck-toolbar .ck-button{flex-grow:1}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-cell-properties-form__alignment-row{flex-wrap:wrap}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:80px;min-width:80px;max-width:80px}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width,.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width);margin:0}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{width:0;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);align-self:flex-end;display:inline-block;position:relative;left:-.5ch;overflow:visible}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button{flex-grow:initial}.ck.ck-table-cell-properties-form .ck-form__row.ck-form__row.ck-table-form__action-row>.ck.ck-button .ck-button__label{color:currentColor}.ck.ck-table-cell-properties-form .ck-form__row.ck-table-form__cell-type-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}:root{--ck-table-layout-widget-type-around-button-size:16px;--ck-table-layout-widget-type-around-icon-width:10px;--ck-table-layout-widget-type-around-icon-height:8px;--ck-table-layout-widget-handler-icon-size:10px;--ck-table-layout-default-border-color:#d4d4d4}.ck-content table.table.layout-table,.ck-content figure.table.layout-table{margin-top:0;margin-bottom:0}.ck-content table.table.layout-table,.ck-content figure.table.layout-table>table{border-spacing:0}.ck-editor__editable .table.layout-table>table{border-collapse:revert;width:100%;height:100%}.ck-editor__editable .table.layout-table>table:not([style*=border\\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){border-width:0;border-color:#0000;outline:none}.ck-editor__editable .table.layout-table>table>tbody>tr>td{box-shadow:revert;padding:revert;text-indent:1px;border-color:var(--ck-table-layout-default-border-color);border-style:dashed;min-width:2em}.ck-editor__editable .table.layout-table>table>tbody>tr>td[style^=width\\:],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=\" width:\"],.ck-editor__editable .table.layout-table>table>tbody>tr>td[style*=\";width:\"]{min-width:auto}.ck-editor__editable .table.layout-table>table>tbody>tr>td:focus{background-color:#0000}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]){outline:var(--ck-table-layout-default-border-color) 1px dashed;outline-offset:-1px;border-width:0;border-color:#0000}.ck-editor__editable .table.layout-table>table>tbody>tr>td:not([style*=border\\:],[style*=border-top],[style*=border-bottom],[style*=border-left],[style*=border-right],[style*=border-width],[style*=border-style],[style*=border-color]):focus{outline:var(--ck-color-focus-border) 1px solid}.ck-editor__editable .table.layout-table>table>tbody>tr>td>.ck-table-bogus-paragraph{text-indent:0;width:calc(100% - 1px)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around{--ck-widget-type-around-button-size:var(--ck-table-layout-widget-type-around-button-size)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before,.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after{z-index:2;transform:translateY(0)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before{margin-left:var(--ck-table-layout-widget-type-around-button-size);border-radius:0 0 100px 100px;left:min(10%,30px)}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_before:after{border-radius:0 0 100px 100px}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after{border-radius:100px 100px 0 0}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button.ck-widget__type-around__button_after:after{border-radius:100px 100px 0 0}.ck-editor__editable .table.layout-table.ck-widget>.ck-widget__type-around>.ck-widget__type-around__button svg{width:var(--ck-table-layout-widget-type-around-icon-width);height:var(--ck-table-layout-widget-type-around-icon-height)}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_with-selection-handle>.ck-widget__selection-handle{--ck-widget-handler-icon-size:var(--ck-table-layout-widget-handler-icon-size);transform:translateY(calc(0px - var(--ck-widget-outline-thickness)));z-index:3}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:0}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:0}.ck-editor__editable .table.layout-table.ck-widget:hover{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle{opacity:.75;visibility:visible}.ck-editor__editable .table.layout-table.ck-widget:hover>.ck-widget__selection-handle:hover{opacity:1}.ck-editor__editable .table.layout-table.ck-widget:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck-editor__editable .table.layout-table.ck-widget.ck-widget_selected{z-index:var(--ck-z-default)}.ck-editor__editable .table.layout-table{margin:0;display:table}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:first-child{margin-top:var(--ck-spacing-large)}.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:last-child,.ck-editor__editable.ck-editor__editable_inline>.ck-widget.ck-widget_with-selection-handle.layout-table:nth-last-child(2):has(+.ck-fake-selection-container){margin-bottom:var(--ck-spacing-large)}.ck.ck-form__row>:not(.ck-label)+*{margin-inline-start:var(--ck-spacing-large)}.ck.ck-form__row>.ck-label{width:100%;min-width:100%}.ck.ck-form__row.ck-table-form__action-row{margin-top:var(--ck-spacing-large);justify-content:flex-end}.ck.ck-form__row.ck-table-form__action-row .ck-button-save,.ck.ck-form__row.ck-table-form__action-row .ck-button-cancel{justify-content:center}:root{--ck-table-properties-error-arrow-size:6px;--ck-table-properties-min-error-width:150px}.ck.ck-table-form{--ck-table-form-default-input-width:80px}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-labeled-field-view>.ck-label{font-size:var(--ck-font-size-tiny);text-align:center}.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-style,.ck.ck-table-form .ck-form__row.ck-table-form__border-row .ck-table-form__border-width{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width)}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row{--ck-table-form-dimensions-input-width:calc(var(--ck-table-form-default-input-width) * 2 + var(--ck-spacing-large));width:var(--ck-table-form-dimensions-input-width);max-width:var(--ck-table-form-dimensions-input-width);min-width:var(--ck-table-form-dimensions-input-width);padding:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__width,.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimensions-row__height{width:var(--ck-table-form-default-input-width);min-width:var(--ck-table-form-default-input-width);max-width:var(--ck-table-form-default-input-width);margin:0}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row .ck-table-form__dimension-operator{width:0;height:var(--ck-ui-component-min-height);line-height:var(--ck-ui-component-min-height);margin:0 var(--ck-spacing-small);align-self:flex-end;display:inline-block;position:relative;left:-.5ch;overflow:visible}.ck.ck-table-form .ck-form__row.ck-table-form__border-row,.ck.ck-table-form .ck-form__row.ck-table-form__background-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row{flex-wrap:wrap}.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row{flex-wrap:wrap;align-items:center}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view{flex-direction:column-reverse;align-items:center;display:flex}:is(.ck.ck-table-form .ck-form__row.ck-table-form__dimensions-row,.ck.ck-table-form .ck-form__row.ck-table-form__cell-type-row) .ck-labeled-field-view .ck.ck-dropdown{flex-grow:0}.ck.ck-table-form .ck-form__row:not(.ck-table-form__action-row)>:not(.ck-label,.ck-table-form__dimension-operator){flex-grow:1}.ck.ck-table-form .ck.ck-labeled-field-view{padding-top:var(--ck-spacing-standard)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{border-radius:var(--ck-rounded-corners-radius);background:var(--ck-color-base-error);color:var(--ck-color-base-background);padding:var(--ck-spacing-small) var(--ck-spacing-medium);min-width:var(--ck-table-properties-min-error-width);text-align:center;left:50%;bottom:calc(-1 * var(--ck-table-properties-error-arrow-size));animation:.15s both ck-table-form-labeled-view-status-appear;position:absolute;transform:translate(-50%,100%)}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status:after{border-color:transparent transparent var(--ck-color-base-error) transparent;border-width:0 var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size) var(--ck-table-properties-error-arrow-size);content:\"\";top:calc(-1 * var(--ck-table-properties-error-arrow-size));border-style:solid;position:absolute;left:50%;transform:translate(-50%)}@media (prefers-reduced-motion:reduce){.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{animation:none}}.ck.ck-table-form .ck.ck-labeled-field-view .ck.ck-labeled-field-view__status{z-index:1}.ck.ck-table-form .ck.ck-labeled-field-view .ck-input.ck-error:not(:focus)+.ck.ck-labeled-field-view__status{display:none}.ck.ck-table-form .ck.ck-labeled-field-view{position:relative}@keyframes ck-table-form-labeled-view-status-appear{0%{opacity:0}to{opacity:1}}.ck.ck-table-properties-form{width:320px}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row{flex-wrap:wrap;flex-basis:0;align-content:baseline;align-self:flex-end}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar{margin-top:var(--ck-spacing-standard);background:0 0}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items>*{flex:1}.ck.ck-table-properties-form .ck-form__row.ck-table-properties-form__alignment-row .ck.ck-toolbar .ck-toolbar__items{flex-wrap:nowrap}:root{--ck-content-table-style-spacing:1.5em}.ck-content .table.table-style-align-left{float:left;margin-right:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-right{float:right;margin-left:var(--ck-content-table-style-spacing)}.ck-content .table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-content .table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-content .table.table-style-block-align-right{margin-left:auto;margin-right:0}.ck-editor__editable .table.layout-table.table-style-align-center{margin-left:auto;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-align-left{margin-right:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-align-right{margin-left:var(--ck-content-table-style-spacing)}.ck-editor__editable .table.layout-table.table-style-block-align-left{margin-left:0;margin-right:auto}.ck-editor__editable .table.layout-table.table-style-block-align-right{margin-left:auto;margin-right:0}:root{--ck-content-color-table-caption-background:#f7f7f7;--ck-content-color-table-caption-text:#333;--ck-color-table-caption-highlighted-background:#fd0}.ck-content .table>figcaption,.ck-content figure.table>table>caption{caption-side:top;word-break:normal;overflow-wrap:anywhere;text-align:center;color:var(--ck-content-color-table-caption-text);background-color:var(--ck-content-color-table-caption-background);outline-offset:-1px;padding:.6em;font-size:.75em;display:table-caption}@media (forced-colors:active){.ck-content .table>figcaption,.ck-content figure.table>table>caption{background-color:unset;color:unset}}@media (forced-colors:none){:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).table__caption_highlighted{animation:.6s ease-out ck-table-caption-highlight}}:is(.ck.ck-editor__editable .table>figcaption,.ck.ck-editor__editable figure.table>table>caption).ck-placeholder:before{padding-left:inherit;padding-right:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@keyframes ck-table-caption-highlight{0%{background-color:var(--ck-color-table-caption-highlighted-background)}to{background-color:var(--ck-content-color-table-caption-background)}}:root{--ck-table-selected-cell-background:#9ecffa4d}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected{caret-color:#0000;box-shadow:unset;position:relative}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:after{content:\"\";pointer-events:none;background-color:var(--ck-table-selected-cell-background);position:absolute;inset:0}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected ::selection,.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected:focus{background-color:#0000}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget{outline:unset}.ck.ck-editor__editable .table table :where(td,th).ck-editor__editable_selected .ck-widget>.ck-widget__selection-handle{display:none}:root{--ck-color-table-column-resizer-hover:var(--ck-color-base-active);--ck-table-column-resizer-width:7px;--ck-table-column-resizer-position-offset:calc(var(--ck-table-column-resizer-width) * -.5 - .5px)}.ck-content .table .ck-table-resized{table-layout:fixed}.ck-content .table td,.ck-content .table th{overflow-wrap:break-word}.ck.ck-editor__editable .table td,.ck.ck-editor__editable .table th{position:relative}.ck.ck-editor__editable .table .ck-table-column-resizer{top:0;bottom:0;right:var(--ck-table-column-resizer-position-offset);width:var(--ck-table-column-resizer-width);cursor:col-resize;user-select:none;z-index:var(--ck-z-default);position:absolute}.ck.ck-editor__editable.ck-column-resize_disabled .table .ck-table-column-resizer,.ck.ck-editor__editable .table[draggable] .ck-table-column-resizer{display:none}.ck.ck-editor__editable .table .ck-table-column-resizer:hover,.ck.ck-editor__editable .table .ck-table-column-resizer__active{background-color:var(--ck-color-table-column-resizer-hover);opacity:.25}.ck.ck-editor__editable[dir=rtl] .table .ck-table-column-resizer{left:var(--ck-table-column-resizer-position-offset);right:unset}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-input-text){border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-input-text){border-top-left-radius:0;border-bottom-left-radius:0}.ck.ck-input-color>.ck.ck-input-text:focus{z-index:0}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button{padding:0;display:flex}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-left:1px solid #0000}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button){border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] :is(.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button):not(:focus){border-right:1px solid #0000}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button.ck-disabled{background:var(--ck-color-input-disabled-background)}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview{border-radius:var(--ck-rounded-corners-radius);border:1px solid var(--ck-color-input-border);width:20px;height:20px;position:relative;overflow:hidden}.ck.ck-input-color>.ck.ck-dropdown>.ck.ck-button.ck-input-color__button>.ck.ck-input-color__button__preview>.ck.ck-input-color__button__preview__no-color-indicator{transform-origin:50%;background:red;border-radius:2px;width:8%;height:150%;display:block;position:absolute;top:-30%;left:50%;transform:rotate(45deg)}.ck.ck-input-color .ck.ck-input-color__remove-color{width:100%;padding:calc(var(--ck-spacing-standard) / 2) var(--ck-spacing-standard);border-bottom-right-radius:0;border-bottom-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color:not(:focus){border-bottom:1px solid var(--ck-color-input-border)}[dir=ltr] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-right-radius:0}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color){border-top-left-radius:0}.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon{margin-right:var(--ck-spacing-standard)}[dir=rtl] :is(.ck.ck-input-color .ck.ck-input-color__remove-color .ck.ck-icon){margin-right:0;margin-left:var(--ck-spacing-standard)}.ck.ck-input-color{flex-direction:row-reverse;width:100%;display:flex}.ck.ck-input-color>input.ck.ck-input-text{flex-grow:1;min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown{min-width:auto}.ck.ck-input-color>div.ck.ck-dropdown>.ck-input-color__button .ck-dropdown__arrow{display:none}:root{--ck-insert-table-dropdown-padding:10px;--ck-insert-table-dropdown-box-height:11px;--ck-insert-table-dropdown-box-width:12px;--ck-insert-table-dropdown-box-margin:1px}.ck .ck-insert-table-dropdown__grid{width:calc(var(--ck-insert-table-dropdown-box-width) * 10 + var(--ck-insert-table-dropdown-box-margin) * 20 + var(--ck-insert-table-dropdown-padding) * 2);padding:var(--ck-insert-table-dropdown-padding) var(--ck-insert-table-dropdown-padding) 0;flex-flow:wrap;display:flex}.ck .ck-insert-table-dropdown__label,.ck[dir=rtl] .ck-insert-table-dropdown__label{text-align:center}.ck .ck-insert-table-dropdown-grid-box{min-width:var(--ck-insert-table-dropdown-box-width);min-height:var(--ck-insert-table-dropdown-box-height);margin:var(--ck-insert-table-dropdown-box-margin);border:1px solid var(--ck-color-base-border);border-radius:1px;outline:none;transition:none}@media (prefers-reduced-motion:reduce){.ck .ck-insert-table-dropdown-grid-box{transition:none}}.ck .ck-insert-table-dropdown-grid-box:focus{box-shadow:none}.ck .ck-insert-table-dropdown-grid-box.ck-on{border-color:var(--ck-color-focus-border);background:var(--ck-color-focus-outer-shadow)}:root{--ck-widget-outline-thickness:3px;--ck-widget-handler-icon-size:16px;--ck-widget-handler-animation-duration:.2s;--ck-widget-handler-animation-curve:ease;--ck-color-widget-blurred-border:#dedede;--ck-color-widget-hover-border:#ffc83d;--ck-color-widget-editable-focus-background:var(--ck-color-base-background);--ck-color-widget-drag-handler-icon-color:var(--ck-color-base-background);--ck-color-resizer:var(--ck-color-focus-border);--ck-color-resizer-tooltip-background:#262626;--ck-color-resizer-tooltip-text:#f2f2f2;--ck-resizer-border-radius:var(--ck-border-radius);--ck-resizer-tooltip-offset:10px;--ck-resizer-tooltip-height:calc(var(--ck-spacing-small) * 2 + 10px)}.ck .ck-widget{outline-width:var(--ck-widget-outline-thickness);transition:outline-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);outline-style:solid;outline-color:#0000}@media (prefers-reduced-motion:reduce){.ck .ck-widget{transition:none}}.ck .ck-widget.ck-widget_selected,.ck .ck-widget.ck-widget_selected:hover{outline:var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border)}.ck .ck-widget:hover{outline-color:var(--ck-color-widget-hover-border)}.ck .ck-widget{position:relative}.ck .ck-editor__nested-editable{border:1px solid #0000}.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{box-shadow:var(--ck-inner-shadow), 0 0}@media (forced-colors:none){.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus{background-color:var(--ck-color-widget-editable-focus-background)}}:is(.ck .ck-editor__nested-editable.ck-editor__nested-editable_focused,.ck .ck-editor__nested-editable:focus):not(td,th){border:var(--ck-focus-ring);outline:none}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{box-sizing:border-box;opacity:0;transition:background-color var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), visibility var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);border-radius:var(--ck-border-radius) var(--ck-border-radius) 0 0;left:calc(0px - var(--ck-widget-outline-thickness));background-color:#0000;padding:4px;top:0;transform:translateY(-100%)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{width:var(--ck-widget-handler-icon-size);height:var(--ck-widget-handler-icon-size);color:var(--ck-color-widget-drag-handler-icon-color)}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:0;transition:opacity .3s var(--ck-widget-handler-animation-curve)}@media (prefers-reduced-motion:reduce){.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{transition:none}}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle .ck-icon{display:block}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{position:absolute}.ck .ck-widget.ck-widget_with-selection-handle:hover>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-widget-hover-border);visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{opacity:1;background-color:var(--ck-color-focus-border);visibility:visible}:is(.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected,.ck .ck-widget.ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle .ck-icon .ck-icon__selected-indicator{opacity:1}.ck .ck-widget.ck-widget_with-selection-handle{position:relative}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle{left:auto;right:calc(0px - var(--ck-widget-outline-thickness))}.ck.ck-editor__editable.ck-read-only .ck-widget{transition:none}.ck.ck-editor__editable.ck-read-only .ck-widget:not(.ck-widget_selected){--ck-widget-outline-thickness:0px}.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle,.ck.ck-editor__editable.ck-read-only .ck-widget.ck-widget_with-selection-handle .ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck .ck-widget:has(.ck-widget.table:hover){outline-color:#0000}.ck .ck-widget.ck-widget_with-selection-handle:has(.ck-widget.table:hover)>.ck-widget__selection-handle{opacity:0;visibility:hidden}.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover{outline-color:var(--ck-color-widget-blurred-border)}:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle,:is(.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected,.ck.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected:hover).ck-widget_with-selection-handle>.ck-widget__selection-handle:hover{background:var(--ck-color-widget-blurred-border)}.ck.ck-editor__editable:not(.ck-pagination-view)>.ck-widget.ck-widget_with-selection-handle:first-child,.ck.ck-editor__editable:not(.ck-pagination-view) blockquote>.ck-widget.ck-widget_with-selection-handle:first-child{margin-top:calc(1em + var(--ck-widget-handler-icon-size))}.ck .ck-size-view{background:var(--ck-color-resizer-tooltip-background);color:var(--ck-color-resizer-tooltip-text);border:1px solid var(--ck-color-resizer-tooltip-text);border-radius:var(--ck-resizer-border-radius);font-size:var(--ck-font-size-tiny);padding:0 var(--ck-spacing-small);height:var(--ck-resizer-tooltip-height);line-height:var(--ck-resizer-tooltip-height);display:block}.ck .ck-size-view.ck-orientation-top-left,.ck .ck-size-view.ck-orientation-top-right,.ck .ck-size-view.ck-orientation-bottom-right,.ck .ck-size-view.ck-orientation-bottom-left,.ck .ck-size-view.ck-orientation-above-center{position:absolute}.ck .ck-size-view.ck-orientation-top-left{top:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-top-right{top:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-right{bottom:var(--ck-resizer-tooltip-offset);right:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-bottom-left{bottom:var(--ck-resizer-tooltip-offset);left:var(--ck-resizer-tooltip-offset)}.ck .ck-size-view.ck-orientation-above-center{top:calc(var(--ck-resizer-tooltip-height) * -1);left:50%;transform:translate(-50%)}:root{--ck-resizer-size:10px;--ck-resizer-offset:calc(( var(--ck-resizer-size) / -2 ) - 2px);--ck-resizer-border-width:1px}.ck .ck-widget__resizer{outline:1px solid var(--ck-color-resizer);pointer-events:none;display:none;position:absolute;top:0;left:0}.ck .ck-widget__resizer__handle{width:var(--ck-resizer-size);height:var(--ck-resizer-size);background:var(--ck-color-focus-border);border:var(--ck-resizer-border-width) solid #fff;border-radius:var(--ck-resizer-border-radius);pointer-events:all;position:absolute}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left{top:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right{top:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{bottom:var(--ck-resizer-offset);right:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{bottom:var(--ck-resizer-offset);left:var(--ck-resizer-offset)}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-left,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-right{cursor:nwse-resize}.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-top-right,.ck .ck-widget__resizer__handle.ck-widget__resizer__handle-bottom-left{cursor:nesw-resize}.ck .ck-widget_with-resizer{position:relative}.ck-focused .ck-widget_with-resizer.ck-widget_selected>.ck-widget__resizer{display:block}:root{--ck-widget-type-around-button-size:20px;--ck-color-widget-type-around-button-active:var(--ck-color-focus-border);--ck-color-widget-type-around-button-hover:var(--ck-color-widget-hover-border);--ck-color-widget-type-around-button-blurred-editable:var(--ck-color-widget-blurred-border);--ck-color-widget-type-around-button-radar-start-alpha:0;--ck-color-widget-type-around-button-radar-end-alpha:.3;--ck-color-widget-type-around-button-icon:var(--ck-color-base-background)}.ck .ck-widget .ck-widget__type-around__button{width:var(--ck-widget-type-around-button-size);height:var(--ck-widget-type-around-button-size);background:var(--ck-color-widget-type-around-button);transition:opacity var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve), background var(--ck-widget-handler-animation-duration) var(--ck-widget-handler-animation-curve);opacity:0;pointer-events:none;z-index:var(--ck-z-default);border-radius:100px;display:block;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg{width:10px;height:8px;margin-top:1px;transition:transform .5s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button svg{transition:none}}.ck .ck-widget .ck-widget__type-around__button svg *{stroke-dasharray:10;stroke-dashoffset:0;fill:none;stroke:var(--ck-color-widget-type-around-button-icon);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.ck .ck-widget .ck-widget__type-around__button svg line{stroke-dasharray:7}.ck .ck-widget .ck-widget__type-around__button svg{z-index:calc(var(--ck-z-default) + 2)}.ck .ck-widget .ck-widget__type-around__button:hover{animation:1s infinite ck-widget-type-around-button-sonar}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline{animation:2s linear ck-widget-type-around-arrow-dash}.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:2s linear ck-widget-type-around-arrow-tip-dash}@media (prefers-reduced-motion:reduce){.ck .ck-widget .ck-widget__type-around__button:hover{animation:none}.ck .ck-widget .ck-widget__type-around__button:hover svg polyline,.ck .ck-widget .ck-widget__type-around__button:hover svg line{animation:none}}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_before{top:calc(-.5 * var(--ck-widget-outline-thickness));left:min(10%,30px);transform:translateY(-50%)}.ck .ck-widget .ck-widget__type-around__button.ck-widget__type-around__button_after{bottom:calc(-.5 * var(--ck-widget-outline-thickness));right:min(10%,30px);transform:translateY(50%)}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget:not(.ck-widget_selected)>.ck-widget__type-around>.ck-widget__type-around__button{background:var(--ck-color-widget-type-around-button-hover)}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover{background:var(--ck-color-widget-type-around-button-active)}:is(.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button,.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__button:hover):after{width:calc(var(--ck-widget-type-around-button-size) - 2px);height:calc(var(--ck-widget-type-around-button-size) - 2px);content:\"\";z-index:calc(var(--ck-z-default) + 1);background:linear-gradient(135deg,#fff0 0%,#ffffff4d 100%);border-radius:100px;display:block;position:absolute;top:1px;left:1px}.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_selected.ck-widget_type-around_show-fake-caret_after{outline-color:#0000}.ck .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button{opacity:1;pointer-events:auto}.ck .ck-widget.ck-widget_with-selection-handle>.ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:20px}.ck .ck-widget .ck-widget__type-around__fake-caret{pointer-events:none;background:var(--ck-color-base-text);outline:1px solid #ffffff80;height:1px;animation:1s linear infinite forwards ck-widget-type-around-fake-caret-pulse}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected:hover{outline-color:var(--ck-color-widget-hover-border)}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}:is(:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected,:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_with-selection-handle.ck-widget_selected:hover)>.ck-widget__selection-handle{opacity:0}:is(.ck .ck-widget.ck-widget_type-around_show-fake-caret_before,.ck .ck-widget.ck-widget_type-around_show-fake-caret_after).ck-widget_selected.ck-widget_with-resizer>.ck-widget__resizer{opacity:0}.ck .ck-widget>.ck-widget__type-around>.ck-widget__type-around__fake-caret{display:none;position:absolute;left:0;right:0}.ck .ck-widget:hover>.ck-widget__type-around>.ck-widget__type-around__fake-caret{left:calc(-1 * var(--ck-widget-outline-thickness));right:calc(-1 * var(--ck-widget-outline-thickness))}.ck .ck-widget.ck-widget_type-around_show-fake-caret_before>.ck-widget__type-around>.ck-widget__type-around__fake-caret{top:calc(-1 * var(--ck-widget-outline-thickness) - 1px);display:block}.ck .ck-widget.ck-widget_type-around_show-fake-caret_after>.ck-widget__type-around>.ck-widget__type-around__fake-caret{bottom:calc(-1 * var(--ck-widget-outline-thickness) - 1px);display:block}.ck[dir=rtl] .ck-widget.ck-widget_with-selection-handle .ck-widget__type-around>.ck-widget__type-around__button_before{margin-left:0;margin-right:20px}:is(.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget.ck-widget_selected,.ck-editor__nested-editable.ck-editor__editable_selected .ck-widget:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck .ck-widget:has(.ck-widget.table:hover)>.ck-widget__type-around>.ck-widget__type-around__button{opacity:0;pointer-events:none}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover){background:var(--ck-color-widget-type-around-button-blurred-editable)}.ck-editor__editable.ck-blurred .ck-widget.ck-widget_selected>.ck-widget__type-around>.ck-widget__type-around__button:not(:hover) svg *{stroke:#999}@keyframes ck-widget-type-around-arrow-dash{0%{stroke-dashoffset:10px}20%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-arrow-tip-dash{0%,20%{stroke-dashoffset:7px}40%,to{stroke-dashoffset:0}}@keyframes ck-widget-type-around-button-sonar{0%{box-shadow:0 0 0 0 hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha))}50%{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-end-alpha))}to{box-shadow:0 0 0 5px hsla(var(--ck-color-focus-border-coordinates), var(--ck-color-widget-type-around-button-radar-start-alpha))}}@keyframes ck-widget-type-around-fake-caret-pulse{0%{opacity:1}49%{opacity:1}50%{opacity:0}99%{opacity:0}to{opacity:1}}.ck.ck-editor__editable.ck-read-only .ck-widget__type-around,.ck.ck-editor__editable.ck-widget__type-around_disabled .ck-widget__type-around{display:none}.ck.ck-editor__editable.ck-restricted-editing_mode_restricted .ck-widget__type-around{display:none}.ck.ck-editor__editable.ck-restricted-editing_mode_restricted div.restricted-editing-exception .ck-widget__type-around{display:initial}\n/*# sourceMappingURL=ckeditor5.css.map */"]} \ No newline at end of file diff --git a/src/web/public/js/vendor/ckeditor5/ckeditor5.js b/src/web/public/js/vendor/ckeditor5/ckeditor5.js deleted file mode 100644 index 894be76..0000000 --- a/src/web/public/js/vendor/ckeditor5/ckeditor5.js +++ /dev/null @@ -1,188 +0,0 @@ -/** - * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options - */ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let u;try{u={window,document}}catch{u={window:{},document:{}}}function d(){try{return navigator.userAgent.toLowerCase()}catch{return``}}const f=d(),p={isMac:m(f),isWindows:h(f),isGecko:g(f),isSafari:_(f),isiOS:v(f),isAndroid:y(f),isBlink:ee(f),get isMediaForcedColors(){return x()},get isMotionReduced(){return te()},features:{isRegExpUnicodePropertySupported:b()}};function m(e){return e.indexOf(`macintosh`)>-1}function h(e){return e.indexOf(`windows`)>-1}function g(e){return!!e.match(/gecko\/\d+/)}function _(e){return e.indexOf(` applewebkit/`)>-1&&e.indexOf(`chrome`)===-1}function v(e){return!!e.match(/iphone|ipad/i)||m(e)&&navigator.maxTouchPoints>0}function y(e){return e.indexOf(`android`)>-1}function ee(e){return e.indexOf(`chrome/`)>-1&&e.indexOf(`edge/`)<0}function b(){let e=!1;try{e=`ć`.search(RegExp(`[\\p{L}]`,`u`))===0}catch{}return e}function x(){return u.window.matchMedia?u.window.matchMedia(`(forced-colors: active)`).matches:!1}function te(){return u.window.matchMedia?u.window.matchMedia(`(prefers-reduced-motion)`).matches:!1}function ne(e,t,n,r){n||=function(e,t){return e===t};let i=Array.isArray(e)?e:Array.prototype.slice.call(e),a=Array.isArray(t)?t:Array.prototype.slice.call(t),o=re(i,a,n);return r?ae(o,a.length):ie(a,o)}function re(e,t,n){let r=S(e,t,n);if(r===-1)return{firstIndex:-1,lastIndexOld:-1,lastIndexNew:-1};let i=S(C(e,r),C(t,r),n);return{firstIndex:r,lastIndexOld:e.length-i,lastIndexNew:t.length-i}}function S(e,t,n){for(let r=0;r0&&n.push({index:r,type:`insert`,values:e.slice(r,a)}),i-r>0&&n.push({index:r+(a-r),type:`delete`,howMany:i-r}),n}function ae(e,t){let{firstIndex:n,lastIndexOld:r,lastIndexNew:i}=e;if(n===-1)return Array(t).fill(`equal`);let a=[];return n>0&&(a=a.concat(Array(n).fill(`equal`))),i-n>0&&(a=a.concat(Array(i-n).fill(`insert`))),r-n>0&&(a=a.concat(Array(r-n).fill(`delete`))),i200||i>200||r+i>300)return oe.fastDiff(e,t,n,!0);let a,o;if(il?-1:1;u[r+f]&&(u[r]=u[r+f].slice(0)),u[r]||(u[r]=[]),u[r].push(i>l?a:o);let p=Math.max(i,l),m=p-r;for(;ml;m--)d[m]=f(m);d[l]=f(l),p++}while(d[l]!==c);return u[l].slice(1)};oe.fastDiff=ne;function se(e,t){let n=[],r=0,i=null;return e.forEach(e=>{e==`equal`?(a(),r++):e==`insert`?(i&&i.type==`insert`?i.values.push(t[r]):(a(),i={type:`insert`,index:r,values:[t[r]]}),r++):i&&i.type==`delete`?i.howMany++:(a(),i={type:`delete`,index:r,howMany:1})}),a(),n;function a(){i&&=(n.push(i),null)}}function ce(e,t){if(e===t&&de(e))return!0;let n=le(e),r=le(t);for(let e of n)if(r.has(e))return!0;return!1}function le(e){let t=[e],n=new Set;for(;t.length>0;){let e=t.shift();if(!(n.has(e)||ue(e)))if(n.add(e),e[Symbol.iterator])try{t.push(...e)}catch{}else t.push(...Object.values(e))}return n}function ue(e){let t=Object.prototype.toString.call(e);return t===`[object Number]`||t===`[object Boolean]`||t===`[object String]`||t===`[object Symbol]`||t===`[object Function]`||t===`[object Date]`||t===`[object RegExp]`||e==null||e instanceof EventTarget||e instanceof Event}function de(e){return typeof e==`object`&&!!e}function fe(){return function e(){e.called=!0}}var pe=class{source;name;path;stop;off;return;constructor(e,t){this.source=e,this.name=t,this.path=[],this.stop=fe(),this.off=fe()}};const me=Array(256).fill(``).map((e,t)=>(`0`+t.toString(16)).slice(-2));function he(){let[e,t,n,r]=crypto.getRandomValues(new Uint32Array(4));return`e`+me[e>>0&255]+me[e>>8&255]+me[e>>16&255]+me[e>>24&255]+me[t>>0&255]+me[t>>8&255]+me[t>>16&255]+me[t>>24&255]+me[n>>0&255]+me[n>>8&255]+me[n>>16&255]+me[n>>24&255]+me[r>>0&255]+me[r>>8&255]+me[r>>16&255]+me[r>>24&255]}const ge={get(e=`normal`){return typeof e==`number`?e:this[e]||this.normal},highest:1e5,high:1e3,normal:0,low:-1e3,lowest:-1e5};function _e(e,t){let n=ge.get(t.priority),r=0,i=e.length;for(;r>1;ge.get(e[t].priority){if(typeof t==`object`&&t){if(r.has(t))return`[object ${t.constructor.name}]`;r.add(t)}return t})}`:``,a=be(e),o=n?`\nOriginal error: ${n.name}: ${n.message}`:``;return e+i+a+o}function Se(e,t){let n=be(e);return t?[e,t,n]:[e,n]}const Ce=`48.3.1`,we=new Date(2026,5,2);if(globalThis.CKEDITOR_VERSION)throw new w(`ckeditor-duplicated-modules`,null);globalThis.CKEDITOR_VERSION=Ce;const Te=Symbol(`listeningTo`),Ee=Symbol(`emitterId`),De=Symbol(`delegations`),Oe=E(Object);function E(e){if(!e)return Oe;class t extends e{on(e,t,n){this.listenTo(this,e,t,n)}once(e,t,n){let r=!1;this.listenTo(this,e,(e,...n)=>{r||(r=!0,e.off(),t.call(this,e,...n))},n)}off(e,t){this.stopListening(this,e,t)}listenTo(e,t,n,r={}){let i,a;this[Te]||(this[Te]={});let o=this[Te];je(e)||Ae(e);let s=je(e);(i=o[s])||(i=o[s]={emitter:e,callbacks:{}}),(a=i.callbacks[t])||(a=i.callbacks[t]=[]),a.push(n),Re(this,e,t,n,r)}stopListening(e,t,n){let r=this[Te],i=e&&je(e),a=r&&i?r[i]:void 0,o=a&&t?a.callbacks[t]:void 0;if(!(!r||e&&!a||t&&!o))if(n)ze(this,e,t,n),o.indexOf(n)!==-1&&(o.length===1?delete a.callbacks[t]:ze(this,e,t,n));else if(o){for(;n=o.pop();)ze(this,e,t,n);delete a.callbacks[t]}else if(a){for(t in a.callbacks)this.stopListening(e,t);delete r[i]}else{for(i in r)this.stopListening(r[i].emitter);delete this[Te]}}fire(e,...t){try{let n=e instanceof pe?e:new pe(this,e),r=n.name,i=Ie(this,r);if(n.path.push(this),i){i=i.slice();for(let e=0;e{this[De]||(this[De]=new Map),e.forEach(e=>{let r=this[De].get(e);r?r.set(t,n):this[De].set(e,new Map([[t,n]]))})}}}stopDelegating(e,t){if(this[De])if(!e)this[De].clear();else if(!t)this[De].delete(e);else{let n=this[De].get(e);n&&n.delete(t)}}_addEventListener(e,t,n){Pe(this,e);let r=Fe(this,e),i={callback:t,priority:ge.get(n.priority)};for(let e of r)_e(e,i)}_removeEventListener(e,t){let n=Fe(this,e);for(let e of n)for(let n=0;n-1?n.substring(0,r):``}while(n);return null}function Le(e,t,n){for(let[r,i]of e){i?typeof i==`function`&&(i=i(t.name)):i=t.name;let e=new pe(t.source,i);e.path=[...t.path],r.fire(e,...n)}}function Re(e,t,n,r,i){t._addEventListener?t._addEventListener(n,r,i):e._addEventListener.call(t,n,r,i)}function ze(e,t,n,r){t._removeEventListener?t._removeEventListener(n,r):e._removeEventListener.call(t,n,r)}function Be(e,t){let n={};for(let r=0;r=0}function He(e){return e!=null&&typeof e!=`function`&&eee(e.length)}function Ue(e){return e===`__proto__`}function We(e){switch(typeof e){case`number`:case`symbol`:return!1;case`string`:return e.includes(`.`)||e.includes(`[`)||e.includes(`]`)}}function Ge(e){return typeof e==`string`||typeof e==`symbol`?e:Object.is(e?.valueOf?.(),-0)?`-0`:String(e)}function Ke(e){if(e==null)return``;if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(Ke).join(`,`);let t=String(e);return t===`0`&&Object.is(Number(e),-0)?`-0`:t}function qe(e){if(Array.isArray(e))return e.map(Ge);if(typeof e==`symbol`)return[e];e=Ke(e);let t=[],n=e.length;if(n===0)return t;let r=0,i=``,a=``,o=!1;for(e.charCodeAt(0)===46&&(t.push(``),r++);rvoid 0)}function et(e,t,n,r){if(t===e)return!0;switch(typeof t){case`object`:return tt(e,t,n,r);case`function`:return Object.keys(t).length>0?et(e,{...t},n,r):Qe(e,t);default:return Xe(e)?typeof t==`string`?t===``:!0:Qe(e,t)}}function tt(e,t,n,r){if(t==null)return!0;if(Array.isArray(t))return rt(e,t,n,r);if(t instanceof Map)return nt(e,t,n,r);if(t instanceof Set)return it(e,t,n,r);let i=Object.keys(t);if(e==null||Ze(e))return i.length===0;if(i.length===0)return!0;if(r?.has(t))return r.get(t)===e;r?.set(t,e);try{for(let a=0;avoid 0)}function ot(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function st(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}const ct=`[object RegExp]`,lt=`[object String]`,ut=`[object Number]`,dt=`[object Boolean]`,ft=`[object Arguments]`,pt=`[object Symbol]`,mt=`[object Date]`,ht=`[object Map]`,gt=`[object Set]`,_t=`[object Array]`,vt=`[object ArrayBuffer]`,yt=`[object Object]`,bt=`[object DataView]`,xt=`[object Uint8Array]`,St=`[object Uint8ClampedArray]`,Ct=`[object Uint16Array]`,wt=`[object Uint32Array]`,Tt=`[object Int8Array]`,Et=`[object Int16Array]`,Dt=`[object Int32Array]`,Ot=`[object Float32Array]`,kt=`[object Float64Array]`;function At(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function jt(e,t){return Mt(e,void 0,e,new Map,t)}function Mt(e,t,n,r=new Map,i=void 0){let a=i?.(e,t,n,r);if(a!==void 0)return a;if(Ze(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){let t=Array(e.length);r.set(e,t);for(let a=0;aat(t,e)}function Lt(e,t){return jt(e,(n,r,i,a)=>{let o=t?.(n,r,i,a);if(o!==void 0)return o;if(typeof e==`object`){if(st(e)===`[object Object]`&&typeof e.constructor!=`function`){let t={};return a.set(e,t),Nt(t,e,i,a),t}switch(Object.prototype.toString.call(e)){case ut:case lt:case dt:{let t=new e.constructor(e?.valueOf());return Nt(t,e),t}case ft:{let t={};return Nt(t,e),t.length=e.length,t[Symbol.iterator]=e[Symbol.iterator],t}default:return}}})}function Rt(e){return Lt(e)}const zt=/^(?:0|[1-9]\d*)$/;function Bt(e,t=2**53-1){switch(typeof e){case`number`:return Number.isInteger(e)&&e>=0&&e{a!==null&&(e.apply(i,a),i=void 0,a=null)},l=()=>{s&&c(),p()},u=null,d=()=>{u!=null&&clearTimeout(u),u=setTimeout(()=>{u=null,l()},t)},f=()=>{u!==null&&(clearTimeout(u),u=null)},p=()=>{f(),i=void 0,a=null},m=()=>{c()},h=function(...e){if(n?.aborted)return;i=this,a=e;let t=u==null;d(),o&&t&&c()};return h.schedule=d,h.cancel=p,h.flush=m,n?.addEventListener(`abort`,p,{once:!0}),h}function Kt(e,t=0,n={}){typeof n!=`object`&&(n={});let{leading:r=!1,trailing:i=!0,maxWait:a}=n,o=[,,];r&&(o[0]=`leading`),i&&(o[1]=`trailing`);let s,c=null,l=Gt(function(...t){s=e.apply(this,t),c=null},t,{edges:o}),u=function(...t){return a!=null&&(c===null&&(c=Date.now()),Date.now()-c>=a)?(s=e.apply(this,t),c=Date.now(),l.cancel(),l.schedule(),s):(l.apply(this,t),s)};return u.cancel=l.cancel,u.flush=()=>(l.flush(),s),u}function qt(e,t=0,n={}){let{leading:r=!0,trailing:i=!0}=n;return Kt(e,t,{leading:r,maxWait:t,trailing:i})}function Jt(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null?Object.prototype.toString.call(e)===`[object Object]`:!1}function Yt(e,t,n){return Xt(e,t,void 0,void 0,void 0,void 0,n)}function Xt(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return Zt(e,t,a,o)}return Zt(e,t,a,o)}function Zt(e,t,n,r){if(Object.is(e,t))return!0;let i=st(e),a=st(t);if(i===`[object Arguments]`&&(i=yt),a===`[object Arguments]`&&(a=yt),i!==a)return!1;switch(i){case lt:return e.toString()===t.toString();case ut:return Qe(e.valueOf(),t.valueOf());case dt:case mt:case pt:return Object.is(e.valueOf(),t.valueOf());case ct:return e.source===t.source&&e.flags===t.flags;case`[object Function]`:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case ht:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!Xt(a,t.get(i),i,e,t,n,r))return!1;return!0;case gt:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;oXt(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case _t:case xt:case St:case Ct:case wt:case`[object BigUint64Array]`:case Tt:case Et:case Dt:case`[object BigInt64Array]`:case Ot:case kt:if(typeof Buffer<`u`&&Buffer.isBuffer(e)!==Buffer.isBuffer(t)||e.length!==t.length)return!1;for(let i=0;ie!==`constructor`)}function iee(e){let t=ln(e.length,e=>`${e}`),n=new Set(t);tn(e)&&(n.add(`offset`),n.add(`parent`)),rn(e)&&(n.add(`buffer`),n.add(`byteLength`),n.add(`byteOffset`));let r=dn(e).filter(e=>!n.has(e));return Array.isArray(e)?[...t,...r]:[...t.filter(t=>Object.hasOwn(e,t)),...r]}function fn(e,...t){for(let n=0;n0&&typeof e[0]==`string`&&Object.hasOwn(e,`index`)&&(t.index=e.index,t.input=e.input),t}if(rn(e)){let t=e,n=t.constructor;return new n(t.buffer,t.byteOffset,t.length)}if(t===`[object ArrayBuffer]`)return new ArrayBuffer(e.byteLength);if(t===`[object DataView]`){let t=e,n=t.buffer,r=t.byteOffset,i=t.byteLength,a=new ArrayBuffer(i),o=new Uint8Array(n,r,i);return new Uint8Array(a).set(o),new DataView(a)}if(t===`[object Boolean]`||t===`[object Number]`||t===`[object String]`){let n=e.constructor,r=new n(e.valueOf());return t===`[object String]`?hn(r,e):pn(r,e),r}if(t===`[object Date]`)return new Date(Number(e));if(t===`[object RegExp]`){let t=e,n=new RegExp(t.source,t.flags);return n.lastIndex=t.lastIndex,n}if(t===`[object Symbol]`)return Object(Symbol.prototype.valueOf.call(e));if(t===`[object Map]`){let t=e,n=new Map;return t.forEach((e,t)=>{n.set(t,e)}),n}if(t===`[object Set]`){let t=e,n=new Set;return t.forEach(e=>{n.add(e)}),n}if(t===`[object Arguments]`){let t=e,n={};return pn(n,t),n.length=t.length,n[Symbol.iterator]=t[Symbol.iterator],n}let n={};return gn(n,e),pn(n,e),mn(n,e),n}function cee(e){switch(st(e)){case ft:case _t:case vt:case bt:case dt:case mt:case Ot:case kt:case Tt:case Et:case Dt:case ht:case ut:case yt:case ct:case gt:case lt:case pt:case xt:case St:case Ct:case wt:return!0;default:return!1}}function pn(e,t){for(let n in t)Object.hasOwn(t,n)&&(e[n]=t[n])}function mn(e,t){let n=Object.getOwnPropertySymbols(t);for(let r=0;r=n)&&(e[r]=t[r])}function gn(e,t){let n=Object.getPrototypeOf(t);n!==null&&typeof t.constructor==`function`&&Object.setPrototypeOf(e,n)}function _n(e,t){let n={},r=Object.keys(e);for(let i=0;i{let r=e[t];(!(Object.hasOwn(e,t)&&Qe(r,n))||n===void 0&&!(t in e))&&(e[t]=n)},En=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Dn=/^\w*$/;function uee(e,t){return Array.isArray(e)?!1:typeof e==`number`||typeof e==`boolean`||e==null||an(e)?!0:typeof e==`string`&&(Dn.test(e)||!En.test(e))||t!=null&&Object.hasOwn(t,e)}function dee(e,t,n,r){if(e==null&&!Xe(e))return e;let i;i=uee(t,e)?[t]:Array.isArray(t)?t:qe(t);let a=n(Je(e,i)),o=e;for(let t=0;tn,()=>void 0)}function fee(e){return e==null}function kn(e,...t){if(fee(e))return{};let n={};for(let r=0;r`u`||!Buffer.isBuffer(e))&&!rn(e)&&!Vt(e)?!1:e.length===0;if(typeof e==`object`){if(e instanceof Map||e instanceof Set)return e.size===0;let t=Object.keys(e);return nn(e)?t.filter(e=>e!==`constructor`).length===0:t.length===0}return!0}function Nn(e,t){if(!Number.isInteger(e)||e<0)throw Error(`n must be a non-negative integer.`);let n=0;return(...r)=>{if(++n>=e)return t(...r)}}function Pn(e,t,n){return typeof n!=`function`&&(n=()=>void 0),Yt(e,t,(...r)=>{let i=n(...r);if(i!==void 0)return!!i;if(e instanceof Map&&t instanceof Map||e instanceof Set&&t instanceof Set)return Pn(Array.from(e),Array.from(t),Nn(2,n))})}function Fn(e){return typeof e==`string`||e instanceof String}const In={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`};function Ln(e){return e.replace(/[&<>"']/g,e=>In[e])}function Rn(e){return Ln(Ke(e))}function zn(e){return e.replace(/[\\^$.*+?()[\]{}|]/g,`\\$&`)}function Bn(e){return zn(Ke(e))}const Vn=new Map([[`Æ`,`Ae`],[`Ð`,`D`],[`Ø`,`O`],[`Þ`,`Th`],[`ß`,`ss`],[`æ`,`ae`],[`ð`,`d`],[`ø`,`o`],[`þ`,`th`],[`Đ`,`D`],[`đ`,`d`],[`Ħ`,`H`],[`ħ`,`h`],[`ı`,`i`],[`IJ`,`IJ`],[`ij`,`ij`],[`ĸ`,`k`],[`Ŀ`,`L`],[`ŀ`,`l`],[`Ł`,`L`],[`ł`,`l`],[`ʼn`,`'n`],[`Ŋ`,`N`],[`ŋ`,`n`],[`Œ`,`Oe`],[`œ`,`oe`],[`Ŧ`,`T`],[`ŧ`,`t`],[`ſ`,`s`]]);function Hn(e){e=e.normalize(`NFD`);let t=``;for(let n=0;n=`̀`&&r<=`ͯ`||r>=`︠`&&r<=`︣`||(t+=Vn.get(r)??r)}return t}function Un(e){return Hn(Ke(e))}const Wn=/\p{Lu}?\p{Ll}+|[0-9]+|\p{Lu}+(?!\p{Ll})|\p{Emoji_Presentation}|\p{Extended_Pictographic}|\p{L}+/gu;function Gn(e){return Array.from(e.match(Wn)??[])}function Kn(e){return typeof e!=`string`&&(e=Ke(e)),e.replace(/['\u2019]/g,``)}function qn(e){let t=Gn(Kn(Un(e)).trim()),n=``;for(let e=0;e{this.set(t,e[t])},this);return}nr(this);let n=this[Xn];if(e in this&&!n.has(e))throw new w(`observable-set-cannot-override`,this);Object.defineProperty(this,e,{enumerable:!0,configurable:!0,get(){return n.get(e)},set(t){let r=n.get(e),i=this.fire(`set:${e}`,e,t,r);i===void 0&&(i=t),(r!==i||!n.has(e))&&(n.set(e,i),this.fire(`change:${e}`,e,i,r))}}),this[e]=t}bind(...e){if(!e.length||!or(e))throw new w(`observable-bind-wrong-properties`,this);if(new Set(e).size!==e.length)throw new w(`observable-bind-duplicate-properties`,this);nr(this);let t=this[Qn];e.forEach(e=>{if(t.has(e))throw new w(`observable-bind-rebind`,this)});let n=new Map;return e.forEach(e=>{let r={property:e,to:[]};t.set(e,r),n.set(e,r)}),{to:rr,toMany:ir,_observable:this,_bindProperties:e,_to:[],_bindings:n}}unbind(...e){if(!this[Xn])return;let t=this[Qn],n=this[Zn];if(e.length){if(!or(e))throw new w(`observable-unbind-wrong-properties`,this);e.forEach(e=>{let r=t.get(e);r&&(r.to.forEach(([e,t])=>{let i=n.get(e),a=i[t];a.delete(r),a.size||delete i[t],Object.keys(i).length||(n.delete(e),this.stopListening(e,`change`))}),t.delete(e))})}else n.forEach((e,t)=>{this.stopListening(t,`change`)}),n.clear(),t.clear()}decorate(e){nr(this);let t=this[e];if(!t)throw new w(`observablemixin-cannot-decorate-undefined`,this,{object:this,methodName:e});this.on(e,(e,n)=>{e.return=t.apply(this,n)}),this[e]=function(...t){return this.fire(e,t)},this[e][er]=t,this[$n]||(this[$n]=[]),this[$n].push(e)}stopListening(e,t,n){if(!e&&this[$n]){for(let e of this[$n])this[e]=this[e][er];delete this[$n]}super.stopListening(e,t,n)}[Xn];[$n];[Qn];[Zn]}return t}function nr(e){e[Xn]||(Object.defineProperty(e,Xn,{value:new Map}),Object.defineProperty(e,Zn,{value:new Map}),Object.defineProperty(e,Qn,{value:new Map}))}function rr(...e){let t=sr(...e),n=Array.from(this._bindings.keys()),r=n.length;if(!t.callback&&t.to.length>1)throw new w(`observable-bind-to-no-callback`,this);if(r>1&&t.callback)throw new w(`observable-bind-to-extra-callback`,this);t.to.forEach(e=>{if(e.properties.length&&e.properties.length!==r)throw new w(`observable-bind-to-properties-length`,this);e.properties.length||(e.properties=this._bindProperties)}),this._to=t.to,t.callback&&(this._bindings.get(n[0]).callback=t.callback),hee(this._observable,this._to),mee(this),this._bindProperties.forEach(e=>{cr(this._observable,e)})}function ir(e,t,n){if(this._bindings.size>1)throw new w(`observable-bind-to-many-not-one-binding`,this);this.to(...ar(e,t),n)}function ar(e,t){let n=e.map(e=>[e,t]);return Array.prototype.concat.apply([],n)}function or(e){return e.every(e=>typeof e==`string`)}function sr(...e){if(!e.length)throw new w(`observable-bind-to-parse-error`,null);let t={to:[]},n;return typeof e[e.length-1]==`function`&&(t.callback=e.pop()),e.forEach(e=>{if(typeof e==`string`)n.properties.push(e);else if(typeof e==`object`)n={observable:e,properties:[]},t.to.push(n);else throw new w(`observable-bind-to-parse-error`,null)}),t}function pee(e,t,n,r){let i=e[Zn],a=i.get(n),o=a||{};o[r]||(o[r]=new Set),o[r].add(t),a||i.set(n,o)}function mee(e){let t;e._bindings.forEach((n,r)=>{e._to.forEach(i=>{t=i.properties[n.callback?0:e._bindProperties.indexOf(r)],n.to.push([i.observable,t]),pee(e._observable,n,i.observable,t)})})}function cr(e,t){let n=e[Qn].get(t),r;n.callback?r=n.callback.apply(e,n.to.map(e=>e[0][e[1]])):(r=n.to[0],r=r[0][r[1]]),Object.prototype.hasOwnProperty.call(e,t)?e[t]=r:e.set(t,r)}function hee(e,t){t.forEach(t=>{let n=e[Zn],r;n.get(t.observable)||e.listenTo(t.observable,`change`,(i,a)=>{r=n.get(t.observable)[a],r&&r.forEach(t=>{cr(e,t.property)})})})}var lr=class{_replacedElements;constructor(){this._replacedElements=[]}replace(e,t){this._replacedElements.push({element:e,newElement:t}),e.style.display=`none`,t&&e.parentNode.insertBefore(t,e.nextSibling)}restore(){this._replacedElements.forEach(({element:e,newElement:t})=>{e.style.display=``,t&&t.remove()}),this._replacedElements=[]}};function ur(e){let t=new AbortController;function n(...n){return t.abort(),t=new AbortController,e(t.signal,...n)}return n.abort=()=>t.abort(),n}function dr(e){let t=0;for(let n of e)t++;return t}function fr(e,t){let n=Math.min(e.length,t.length);for(let r=0;r{this._setToTarget(e,r,t[r],n)})}};function gr(e){return Lt(e,_r)}function _r(e){return jn(e)||typeof e==`function`?e:void 0}function vr(e){if(e){if(e.defaultView)return e instanceof e.defaultView.Document;if(e.ownerDocument&&e.ownerDocument.defaultView)return e instanceof e.ownerDocument.defaultView.Node}return!1}function yr(e){let t=Object.prototype.toString.apply(e);return t==`[object Window]`||t==`[object global]`}const gee=br(E()),_ee=E();function br(e){if(!e)return gee;class t extends e{listenTo(e,t,n,r={}){if(vr(e)||yr(e)||e instanceof u.window.EventTarget){let i={capture:!!r.useCapture,passive:!!r.usePassive},a=this._getProxyEmitter(e,i)||new xr(e,i);this.listenTo(a,t,n,r)}else super.listenTo(e,t,n,r)}stopListening(e,t,n){if(vr(e)||yr(e)||e instanceof u.window.EventTarget){let r=this._getAllProxyEmitters(e);for(let e of r)this.stopListening(e,t,n)}else super.stopListening(e,t,n)}_getProxyEmitter(e,t){return ke(this,Cr(e,t))}_getAllProxyEmitters(e){return[{capture:!1,passive:!1},{capture:!1,passive:!0},{capture:!0,passive:!1},{capture:!0,passive:!0}].map(t=>this._getProxyEmitter(e,t)).filter(e=>!!e)}}return t}var xr=class extends _ee{_domNode;_options;constructor(e,t){super(),Ae(this,Cr(e,t)),this._domNode=e,this._options=t}_domListeners;attach(e){if(this._domListeners&&this._domListeners[e])return;let t=this._createDomListener(e);this._domNode.addEventListener(e,t,this._options),this._domListeners||={},this._domListeners[e]=t}detach(e){let t;this._domListeners[e]&&(!(t=this._events[e])||!t.callbacks.length)&&this._domListeners[e].removeListener()}_addEventListener(e,t,n){this.attach(e),E().prototype._addEventListener.call(this,e,t,n)}_removeEventListener(e,t){E().prototype._removeEventListener.call(this,e,t),this.detach(e)}_createDomListener(e){let t=t=>{this.fire(e,t)};return t.removeListener=()=>{this._domNode.removeEventListener(e,t,this._options),delete this._domListeners[e]},t}};function Sr(e){return e[`data-ck-expando`]||=he()}function Cr(e,t){let n=Sr(e);for(let e of Object.keys(t).sort())t[e]&&(n+=`-`+e);return n}function wr(e){let t=e.parentElement;if(!t)return null;for(;t.tagName!=`BODY`;){let e=t.style.overflowY||u.window.getComputedStyle(t).overflowY;if(e===`auto`||e===`scroll`)break;if(t=t.parentElement,!t)return null}return t}function Tr(e){let t=[],n=e;for(;n&&n.nodeType!=Node.DOCUMENT_NODE;)t.unshift(n),n=n.parentNode;return t}function Er(e){return e instanceof HTMLTextAreaElement?e.value:e.innerHTML}function Dr(e){let t=e.ownerDocument.defaultView.getComputedStyle(e);return{top:parseInt(t.borderTopWidth,10),right:parseInt(t.borderRightWidth,10),bottom:parseInt(t.borderBottomWidth,10),left:parseInt(t.borderLeftWidth,10)}}function Or(e){if(!e.target)return null;let t=e.target.ownerDocument,n=e.clientX,r=e.clientY,i=null;return t.caretRangeFromPoint&&t.caretRangeFromPoint(n,r)?i=t.caretRangeFromPoint(n,r):e.rangeParent&&(i=t.createRange(),i.setStart(e.rangeParent,e.rangeOffset),i.collapse(!0)),i}function kr(e,t){let n=Tr(e),r=Tr(t),i=0;for(;n[i]==r[i]&&n[i];)i++;return i===0?null:n[i-1]}function Ar(e){return!e||!e.parentNode||e.offsetParent===u.document.body?null:e.offsetParent}function jr(e){return Object.prototype.toString.call(e)==`[object Text]`}function Mr(e){return Object.prototype.toString.apply(e)==`[object Range]`}const Nr=[`top`,`right`,`bottom`,`left`,`width`,`height`],Pr=new Set([`relative`,`absolute`,`fixed`,`sticky`]);var O=class e{top;right;bottom;left;width;height;_source;constructor(t){let n=Mr(t);if(Object.defineProperty(this,"_source",{value:t._source||t,writable:!0,enumerable:!1}),Lr(t)||n)if(n){let n=e.getDomRangeRects(t);Fr(this,e.getBoundingRect(n))}else Fr(this,t.getBoundingClientRect());else if(yr(t)){let{innerWidth:e,innerHeight:n}=t;Fr(this,{top:0,right:e,bottom:n,left:0,width:e,height:n})}else Fr(this,t)}clone(){return new e(this)}moveTo(e,t){return this.top=t,this.right=e+this.width,this.bottom=t+this.height,this.left=e,this}moveBy(e,t){return this.top+=t,this.right+=e,this.left+=e,this.bottom+=t,this}getIntersection(t){let n={top:Math.max(this.top,t.top),right:Math.min(this.right,t.right),bottom:Math.min(this.bottom,t.bottom),left:Math.max(this.left,t.left),width:0,height:0};if(n.width=n.right-n.left,n.height=n.bottom-n.top,n.width<0||n.height<0)return null;{let t=new e(n);return t._source=this._source,t}}getIntersectionArea(e){let t=this.getIntersection(e);return t?t.getArea():0}getArea(){return this.width*this.height}getVisible(){let t=this._source,n=this.clone();if(Ir(t))return n;let r=t,i=t.parentNode||t.commonAncestorContainer,a;for(;i&&!Ir(i);){let t=zr(i)===`visible`;if(Br(r)&&(a=r),t||a&&Rr(a)===`absolute`&&!Br(i)){r=i,i=i.parentNode;continue}let o=new e(i),s=n.getIntersection(o);if(s)s.getArea(){let r=new e(n);return r._source=t,r})}static getBoundingRect(t){let n={left:1/0,top:1/0,right:-1/0,bottom:-1/0,width:0,height:0},r=0;for(let e of t)r++,n.left=Math.min(n.left,e.left),n.top=Math.min(n.top,e.top),n.right=Math.max(n.right,e.right),n.bottom=Math.max(n.bottom,e.bottom);return r==0?null:(n.width=n.right-n.left,n.height=n.bottom-n.top,new e(n))}};function Fr(e,t){for(let n of Nr)e[n]=t[n]}function Ir(e){return Lr(e)?e===e.ownerDocument.body:!1}function Lr(e){return typeof e==`object`&&!!e&&e.nodeType===1&&typeof e.getBoundingClientRect==`function`}function Rr(e){return e.ownerDocument.defaultView.getComputedStyle(e).position}function zr(e){return e instanceof HTMLElement?e.ownerDocument.defaultView.getComputedStyle(e).overflow:`visible`}function Br(e){return e instanceof HTMLElement&&Pr.has(Rr(e))}function Vr(e,t){let n=new O(t),r=Dr(t),i=0,a=0;i-=n.left,a-=n.top,i+=t.scrollLeft,a+=t.scrollTop,i-=r.left,a-=r.top,e.moveBy(i,a)}var Hr=class e{_element;_callback;static _observerInstance=null;static _elementCallbacks=null;constructor(t,n){e._observerInstance||e._createObserver(),this._element=t,this._callback=n,e._addElementCallback(t,n),e._observerInstance.observe(t)}get element(){return this._element}destroy(){e._deleteElementCallback(this._element,this._callback)}static _addElementCallback(t,n){e._elementCallbacks||=new Map;let r=e._elementCallbacks.get(t);r||(r=new Set,e._elementCallbacks.set(t,r)),r.add(n)}static _deleteElementCallback(t,n){let r=e._getElementCallbacks(t);r&&(r.delete(n),r.size||(e._elementCallbacks.delete(t),e._observerInstance.unobserve(t))),e._elementCallbacks&&!e._elementCallbacks.size&&(e._observerInstance=null,e._elementCallbacks=null)}static _getElementCallbacks(t){return e._elementCallbacks?e._elementCallbacks.get(t):null}static _createObserver(){e._observerInstance=new u.window.ResizeObserver(t=>{for(let n of t){let t=e._getElementCallbacks(n.target);if(t)for(let e of t)e(n)}})}};function Ur(e,t){e instanceof HTMLTextAreaElement&&(e.value=t),e.innerHTML=t}function Wr(e){return t=>t+e}function Gr(e){let t=0;for(;e.previousSibling;)e=e.previousSibling,t++;return t}function Kr(e,t,n){e.insertBefore(n,e.childNodes[t]||null)}function qr(e){return e&&e.nodeType===Node.COMMENT_NODE}function Jr(e){try{u.document.createAttribute(e)}catch{return!1}return!0}function Yr(e){return e?jr(e)?Yr(e.parentElement):e.getClientRects?!!e.getClientRects().length:!1:!1}function Xr({element:e,target:t,positions:n,limiter:r,fitInViewport:i,viewportOffsetConfig:a}){An(t)&&(t=t()),An(r)&&(r=r());let o=Ar(e),s=Qr(a),c=new O(e),l=Zr(t,s),u;if(!l||!s.getIntersection(l))return null;let d={targetRect:l,elementRect:c,positionedElementAncestor:o,viewportRect:s};if(!r&&!i)u=new $r(n[0],d);else{if(r){let e=Zr(r,s);e&&(d.limiterRect=e)}u=vee(n,d)}return u}function Zr(e,t){let n=new O(e).getVisible();return n?n.getIntersection(t):null}function Qr(e){e=Object.assign({top:0,bottom:0,left:0,right:0},e);let t=new O(u.window);return t.top+=e.top,t.height-=e.top,t.bottom-=e.bottom,t.height-=e.bottom,t.left+=e.left,t.right-=e.right,t.width-=e.left+e.right,t}function vee(e,t){let{elementRect:n}=t,r=n.getArea(),i=e.map(e=>new $r(e,t)).filter(e=>!!e.name),a=0,o=null;for(let e of i){let{limiterIntersectionArea:t,viewportIntersectionArea:n}=e;if(t===r)return e;let i=n**2+t**2;i>a&&(a=i,o=e)}return o}var $r=class{name;config;_positioningFunctionCoordinates;_options;_cachedRect;_cachedAbsoluteRect;constructor(e,t){let n=e(t.targetRect,t.elementRect,t.viewportRect,t.limiterRect);if(!n)return;let{left:r,top:i,name:a,config:o}=n;this.name=a,this.config=o,this._positioningFunctionCoordinates={left:r,top:i},this._options=t}get left(){return this._absoluteRect.left}get top(){return this._absoluteRect.top}get limiterIntersectionArea(){let e=this._options.limiterRect;return e?e.getIntersectionArea(this._rect):0}get viewportIntersectionArea(){return this._options.viewportRect.getIntersectionArea(this._rect)}get _rect(){return this._cachedRect||=this._options.elementRect.clone().moveTo(this._positioningFunctionCoordinates.left,this._positioningFunctionCoordinates.top),this._cachedRect}get _absoluteRect(){return this._cachedAbsoluteRect||=this._rect.toAbsoluteRect(),this._cachedAbsoluteRect}};function ei(e){let t=e.parentNode;t&&t.removeChild(e)}function ti(){let e=u.window.visualViewport;return!e||!(p.isiOS||p.isSafari)?{left:0,top:0}:{left:Math.max(Math.round(e.offsetLeft),0),top:Math.max(Math.round(e.offsetTop),0)}}function ni({target:e,viewportOffset:t=0,ancestorOffset:n=0,alignToTop:r,forceScroll:i}){let a=ui(e),o=a,s=null;for(t=pi(t);o;){let c;c=di(o==a?e:s),ai({parent:c,getRect:()=>fi(e,o),alignToTop:r,ancestorOffset:n,forceScroll:i});let l=fi(e,o),u=fi(c,o);if(l.height>u.height){let e=l.getIntersection(u);e&&(l=e)}if(ii({window:o,rect:l,viewportOffset:t,alignToTop:r,forceScroll:i}),o.parent!=o){if(s=o.frameElement,o=o.parent,!s)return}else o=null}}function ri(e,t,n,r,i){ai({parent:di(e),getRect:()=>new O(e),ancestorOffset:t,limiterElement:n,alignToTop:r,forceScroll:i})}function ii({window:e,rect:t,alignToTop:n,forceScroll:r,viewportOffset:i}){let a=t.clone().moveBy(0,i.bottom),o=t.clone().moveBy(0,-i.top),s=new O(e).excludeScrollbarsAndBorders(),c=[o,a],l=n&&r,u=c.every(e=>s.contains(e)),{scrollX:d,scrollY:f}=e,p=d,m=f;l?f-=s.top-t.top+i.top:u||(si(o,s)?f-=s.top-t.top+i.top:oi(a,s)&&(n?f+=t.top-s.top-i.top:f+=t.bottom-s.bottom+i.bottom)),u||(ci(t,s)?d-=s.left-t.left+i.left:li(t,s)&&(d+=t.right-s.right+i.right)),(d!=p||f!==m)&&e.scrollTo(d,f)}function ai({parent:e,getRect:t,alignToTop:n,forceScroll:r,ancestorOffset:i=0,limiterElement:a}){let o=ui(e),s=n&&r,c,l,u,d=a||o.document.body;for(;e!=d;)l=t(),c=new O(e).excludeScrollbarsAndBorders(),u=c.contains(l),s?e.scrollTop-=c.top-l.top+i:u||(si(l,c)?e.scrollTop-=c.top-l.top+i:oi(l,c)&&(n?e.scrollTop+=l.top-c.top-i:e.scrollTop+=l.bottom-c.bottom+i)),u||(ci(l,c)?e.scrollLeft-=c.left-l.left+i:li(l,c)&&(e.scrollLeft+=l.right-c.right+i)),e=e.parentNode}function oi(e,t){return e.bottom>t.bottom}function si(e,t){return e.topt.right}function ui(e){return Mr(e)?e.startContainer.ownerDocument.defaultView:e.ownerDocument.defaultView}function di(e){if(Mr(e)){let t=e.commonAncestorContainer;return jr(t)&&(t=t.parentNode),t}else return e.parentNode}function fi(e,t){let n=ui(e),r=new O(e);if(n===t)return r;{let e=n;for(;e!=t;){let t=e.frameElement,n=new O(t).excludeScrollbarsAndBorders();r.moveBy(n.left,n.top),e=e.parent}}return r}function pi(e){return typeof e==`number`?{top:e,bottom:e,left:e,right:e}:e}const mi={ctrl:`⌃`,cmd:`⌘`,alt:`⌥`,shift:`⇧`},hi={ctrl:`Ctrl+`,alt:`Alt+`,shift:`Shift+`},gi={37:`←`,38:`↑`,39:`→`,40:`↓`,9:`⇥`,33:`Page Up`,34:`Page Down`},k=yee(),_i=Object.fromEntries(Object.entries(k).map(([e,t])=>{let n;return n=t in gi?gi[t]:e.charAt(0).toUpperCase()+e.slice(1),[t,n]}));function vi(e){let t;if(typeof e==`string`){if(t=k[e.toLowerCase()],!t)throw new w(`keyboard-unknown-key`,null,{key:e})}else t=e.keyCode+(e.altKey?k.alt:0)+(e.ctrlKey?k.ctrl:0)+(e.shiftKey?k.shift:0)+(e.metaKey?k.cmd:0);return t}function yi(e){return typeof e==`string`&&(e=bee(e)),e.map(e=>typeof e==`string`?Ci(e):e).reduce((e,t)=>t+e,0)}function bi(e,t){let n=yi(e),r=t?t===`Mac`:p.isMac||p.isiOS;return Object.entries(r?mi:hi).reduce((e,[t,r])=>((n&k[t])!=0&&(n&=~k[t],e+=r),e),``)+(n?_i[n]:``)}function xi(e){return e==k.arrowright||e==k.arrowleft||e==k.arrowup||e==k.arrowdown}function Si(e,t){let n=t===`ltr`;switch(e){case k.arrowleft:return n?`left`:`right`;case k.arrowright:return n?`right`:`left`;case k.arrowup:return`up`;case k.arrowdown:return`down`}}function Ci(e){if(e.endsWith(`!`))return vi(e.slice(0,-1));let t=vi(e);return(p.isMac||p.isiOS)&&t==k.ctrl?k.cmd:t}function wi(e,t){let n=Si(e,t);return n===`down`||n===`right`}function yee(){let e={pageup:33,pagedown:34,end:35,home:36,arrowleft:37,arrowup:38,arrowright:39,arrowdown:40,backspace:8,delete:46,enter:13,space:32,esc:27,tab:9,ctrl:1114112,shift:2228224,alt:4456448,cmd:8912896};for(let t=65;t<=90;t++){let n=String.fromCharCode(t);e[n.toLowerCase()]=t}for(let t=48;t<=57;t++)e[t-48]=t;for(let t=112;t<=123;t++)e[`f`+(t-111)]=t;return Object.assign(e,{"'":222,",":108,"-":109,".":110,"/":111,";":186,"=":187,"[":219,"\\":220,"]":221,"`":223}),e}function bee(e){return e.split(`+`).map(e=>e.trim())}const xee=[`ar`,`ara`,`dv`,`div`,`fa`,`per`,`fas`,`he`,`heb`,`ku`,`kur`,`ug`,`uig`,`ur`,`urd`];function Ti(e){return xee.includes(e)?`rtl`:`ltr`}function A(e){return Array.isArray(e)?e:[e]}u.window.CKEDITOR_TRANSLATIONS||(u.window.CKEDITOR_TRANSLATIONS={});function Ei(e,t,n){u.window.CKEDITOR_TRANSLATIONS[e]||(u.window.CKEDITOR_TRANSLATIONS[e]={});let r=u.window.CKEDITOR_TRANSLATIONS[e];r.dictionary=r.dictionary||{},r.getPluralForm=n||r.getPluralForm,Object.assign(r.dictionary,t)}function Di(e,t,n=1,r){if(typeof n!=`number`)throw new w(`translation-service-quantity-not-a-number`,null,{quantity:n});let i=r||u.window.CKEDITOR_TRANSLATIONS,a=ji(i);a===1&&(e=Object.keys(i)[0]);let o=t.id||t.string;if(a===0||!Ai(e,o,i))return n===1?t.string:t.plural;let s=i[e].dictionary,c=i[e].getPluralForm||(e=>e===1?0:1),l=s[o];return typeof l==`string`?l:l[Number(c(n))]}function Oi(){u.window.CKEDITOR_TRANSLATIONS&&(u.window.CKEDITOR_TRANSLATIONS={})}function ki(e){return Array.isArray(e)?e.reduce((e,t)=>wn(e,t)):e}function Ai(e,t,n){return!!n[e]&&!!n[e].dictionary[t]}function ji(e){return Object.keys(e).length}var Mi=class{uiLanguage;uiLanguageDirection;contentLanguage;contentLanguageDirection;t;translations;constructor({uiLanguage:e=`en`,contentLanguage:t,translations:n}={}){this.uiLanguage=e,this.contentLanguage=t||this.uiLanguage,this.uiLanguageDirection=Ti(this.uiLanguage),this.contentLanguageDirection=Ti(this.contentLanguage),this.translations=ki(n),this.t=(e,t)=>this._t(e,t)}_t(e,t=[]){t=A(t),typeof e==`string`&&(e={string:e});let n=e.plural?t[0]:1;return Ni(Di(this.uiLanguage,e,n,this.translations),t)}};function Ni(e,t){return e.replace(/%(\d+)/g,(e,n)=>nthis._items.length||t<0)throw new w(`collection-add-item-invalid-index`,this);let n=0;for(let r of e){let e=this._getItemIdBeforeAdding(r),i=t+n;this._items.splice(i,0,r),this._itemMap.set(e,r),this.fire(`add`,r,i),n++}return this.fire(`change`,{added:e,removed:[],index:t}),this}get(e){let t;if(typeof e==`string`)t=this._itemMap.get(e);else if(typeof e==`number`)t=this._items[e];else throw new w(`collection-get-invalid-arg`,this);return t||null}has(e){if(typeof e==`string`)return this._itemMap.has(e);{let t=e[this._idProperty];return t&&this._itemMap.has(t)}}getIndex(e){let t;return t=typeof e==`string`?this._itemMap.get(e):e,t?this._items.indexOf(t):-1}remove(e){let[t,n]=this._remove(e);return this.fire(`change`,{added:[],removed:[t],index:n}),t}map(e,t){return this._items.map(e,t)}forEach(e,t){this._items.forEach(e,t)}find(e,t){return this._items.find(e,t)}filter(e,t){return this._items.filter(e,t)}clear(){this._bindToCollection&&=(this.stopListening(this._bindToCollection),null);let e=Array.from(this._items);for(;this.length;)this._remove(0);this.fire(`change`,{added:[],removed:e,index:0})}bindTo(e){if(this._bindToCollection)throw new w(`collection-bind-to-rebind`,this);return this._bindToCollection=e,{as:e=>{this._setUpBindToBinding(t=>new e(t))},using:e=>{typeof e==`function`?this._setUpBindToBinding(e):this._setUpBindToBinding(t=>t[e])}}}_setUpBindToBinding(e){let t=this._bindToCollection,n=(n,r,i)=>{let a=t._bindToCollection==this,o=t._bindToInternalToExternalMap.get(r);if(a&&o)this._bindToExternalToInternalMap.set(r,o),this._bindToInternalToExternalMap.set(o,r);else{let n=e(r);if(!n){this._skippedIndexesFromExternal.push(i);return}let a=i;for(let e of this._skippedIndexesFromExternal)i>e&&a--;for(let e of t._skippedIndexesFromExternal)a>=e&&a++;this._bindToExternalToInternalMap.set(r,n),this._bindToInternalToExternalMap.set(n,r),this.add(n,a);for(let e=0;e{let r=this._bindToExternalToInternalMap.get(t);r&&this.remove(r),this._skippedIndexesFromExternal=this._skippedIndexesFromExternal.reduce((e,t)=>(nt&&e.push(t),e),[])})}_getItemIdBeforeAdding(e){let t=this._idProperty,n;if(t in e){if(n=e[t],typeof n!=`string`)throw new w(`collection-add-invalid-id`,this);if(this.get(n))throw new w(`collection-add-item-already-exists`,this)}else e[t]=n=he();return n}_remove(e){let t,n,r,i=!1,a=this._idProperty;if(typeof e==`string`?(n=e,r=this._itemMap.get(n),i=!r,r&&(t=this._items.indexOf(r))):typeof e==`number`?(t=e,r=this._items[t],i=!r,r&&(n=r[a])):(r=e,n=r[a],t=this._items.indexOf(r),i=t==-1||!this._itemMap.get(n)),i)throw new w(`collection-remove-404`,this);this._items.splice(t,1),this._itemMap.delete(n);let o=this._bindToInternalToExternalMap.get(r);return this._bindToInternalToExternalMap.delete(r),this._bindToExternalToInternalMap.delete(o),this.fire(`remove`,r,t),[r,t]}[Symbol.iterator](){return this._items[Symbol.iterator]()}};function j(e){let t=e.next();return t.done?null:t.value}function Ii(e,t){for(let n of t){if(e===0)return n;--e}return null}const Li=br(D());var M=class extends Li{_elements=new Set;_externalViews=new Set;_blurTimeout=null;constructor(){super(),this.set(`isFocused`,!1),this.set(`focusedElement`,null)}get elements(){return Array.from(this._elements.values())}get externalViews(){return Array.from(this._externalViews.values())}add(e){if(zi(e))this._addElement(e);else if(Ri(e))this._addView(e);else{if(!e.element)throw new w(`focustracker-add-view-missing-element`,{focusTracker:this,view:e});this._addElement(e.element)}}remove(e){zi(e)?this._removeElement(e):Ri(e)?this._removeView(e):this._removeElement(e.element)}_addElement(e){if(this._elements.has(e))throw new w(`focustracker-add-element-already-exist`,this);this.listenTo(e,`focus`,()=>{let t=this.externalViews.find(t=>Bi(e,t));t?this._focus(t.element):this._focus(e)},{useCapture:!0}),this.listenTo(e,`blur`,()=>{this._blur()},{useCapture:!0}),this._elements.add(e)}_removeElement(e){this._elements.has(e)&&(this.stopListening(e),this._elements.delete(e)),e===this.focusedElement&&this._blur()}_addView(e){e.element&&this._addElement(e.element),this.listenTo(e.focusTracker,`change:focusedElement`,()=>{e.focusTracker.focusedElement?e.element&&this._focus(e.element):this._blur()}),this._externalViews.add(e)}_removeView(e){e.element&&this._removeElement(e.element),this.stopListening(e.focusTracker),this._externalViews.delete(e)}destroy(){this.stopListening(),this._elements.clear(),this._externalViews.clear(),this.isFocused=!1,this.focusedElement=null}_focus(e){this._clearBlurTimeout(),this.focusedElement=e,this.isFocused=!0}_blur(){this.elements.find(e=>e.contains(document.activeElement))||this.externalViews.find(e=>e.focusTracker.isFocused&&!e.focusTracker._blurTimeout)||(this._clearBlurTimeout(),this._blurTimeout=setTimeout(()=>{this.focusedElement=null,this.isFocused=!1},0))}_clearBlurTimeout(){clearTimeout(this._blurTimeout),this._blurTimeout=null}};function Ri(e){return`focusTracker`in e&&e.focusTracker instanceof M}function zi(e){return jn(e)}function Bi(e,t){return Vi(e,t)?!0:!!t.focusTracker.externalViews.find(t=>Vi(e,t))}function Vi(e,t){return!!t.element&&t.element.contains(document.activeElement)&&e.contains(t.element)}var N=class{_listener;constructor(){this._listener=new(br())}listenTo(e){this._listener.listenTo(e,`keydown`,(e,t)=>{this._listener.fire(`_keydown:`+vi(t),t)})}set(e,t,n={}){let r=yi(e),i=n.priority;this._listener.listenTo(this._listener,`_keydown:`+r,(e,r)=>{n.filter&&!n.filter(r)||(t(r,()=>{r.preventDefault(),r.stopPropagation(),e.stop()}),e.return=!0)},{priority:i})}press(e){return!!this._listener.fire(`_keydown:`+vi(e),e)}stopListening(e){this._listener.stopListening(e)}destroy(){this.stopListening()}};function Hi(e){let t=new Map;for(let n in e)t.set(n,e[n]);return t}function Ui(e){return pr(e)?new Map(e):Hi(e)}function Wi(e,t){if(e.size!=t.size)return!1;for(let n of e.entries())if(JSON.stringify(n[1])!==JSON.stringify(t.get(n[0])))return!1;return!0}function Gi(e,t={}){return new Promise((n,r)=>{let i=t.signal||new AbortController().signal;i.throwIfAborted();let a=setTimeout(o,e);i.addEventListener(`abort`,s,{once:!0});function o(){i.removeEventListener(`abort`,s),n()}function s(){clearTimeout(a),r(i.reason)}})}async function Ki(e,t={}){let{maxAttempts:n=4,retryDelay:r=qi(),signal:i=new AbortController().signal}=t;i.throwIfAborted();for(let t=0;;t++){try{return await e()}catch(e){if(t+1>=n)throw e}await Gi(r(t),{signal:i})}}function qi(e={}){let{delay:t=1e3,factor:n=2,maxDelay:r=1e4}=e;return e=>Math.min(n**e*t,r)}function Ji(e,t,n){let r=e.length,i=t.length;for(let t=r-1;t>=n;t--)e[t+i]=e[t];for(let r=0;re(...i),t)}return r.cancel=()=>{clearTimeout(n)},r}function Xi(e){try{if(!e.startsWith(`ey`))return null;let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`));return JSON.parse(t)}catch{return null}}function See(){let e=[];for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n&1?n=3988292384^n>>>1:n>>>=1;e[t]=n}return e}function Zi(e){let t=Array.isArray(e)?e:[e],n=See(),r=-1,i=t.map(e=>Array.isArray(e)?e.join(``):String(e)).join(``);for(let e=0;e>>8^n[(r^t)&255]}return r=(r^-1)>>>0,r.toString(16).padStart(8,`0`)}async function Cee(e){return e?(await Promise.all(e.map(async e=>e===`EDITOR_STYLES`?wee():(await window.fetch(e)).text()))).join(` `).trim():``}function wee(){let e=[],t=[];for(let n of Array.from(document.styleSheets))if(n.ownerNode.hasAttribute(`data-cke`))for(let r of Array.from(n.cssRules))r.cssText.indexOf(`.ck-content`)===-1?r.cssText.indexOf(`:root`)!==-1&&t.push(r.cssText):e.push(r.cssText);return e.length||console.warn(`The editor stylesheet could not be found in the document. Check your webpack config - style-loader should use data-cke=true attribute for the editor stylesheet.`),[...t,...e].join(` `).trim()}function Qi(e){let t=[{name:`address`,isVoid:!1},{name:`article`,isVoid:!1},{name:`aside`,isVoid:!1},{name:`blockquote`,isVoid:!1},{name:`details`,isVoid:!1},{name:`dialog`,isVoid:!1},{name:`dd`,isVoid:!1},{name:`div`,isVoid:!1},{name:`dl`,isVoid:!1},{name:`dt`,isVoid:!1},{name:`fieldset`,isVoid:!1},{name:`figcaption`,isVoid:!1},{name:`figure`,isVoid:!1},{name:`footer`,isVoid:!1},{name:`form`,isVoid:!1},{name:`h1`,isVoid:!1},{name:`h2`,isVoid:!1},{name:`h3`,isVoid:!1},{name:`h4`,isVoid:!1},{name:`h5`,isVoid:!1},{name:`h6`,isVoid:!1},{name:`header`,isVoid:!1},{name:`hgroup`,isVoid:!1},{name:`hr`,isVoid:!0},{name:`li`,isVoid:!1},{name:`main`,isVoid:!1},{name:`nav`,isVoid:!1},{name:`ol`,isVoid:!1},{name:`p`,isVoid:!1},{name:`section`,isVoid:!1},{name:`table`,isVoid:!1},{name:`tbody`,isVoid:!1},{name:`td`,isVoid:!1},{name:`th`,isVoid:!1},{name:`thead`,isVoid:!1},{name:`tfoot`,isVoid:!1},{name:`tr`,isVoid:!1},{name:`ul`,isVoid:!1}],n=t.map(e=>e.name).join(`|`),r=e.replace(RegExp(``,`g`),` -$& -`).replace(/]*>/g,`$& -`).split(` -`),i=0,a=!1;return r.map(e=>(a=Dee(e,a),!e.length&&!a?``:Tee(e,t)?$i(e,i++):Eee(e,t)?$i(e,--i):a===`middle`||a===`last`?$i(e,0):$i(e,i))).join(``).trimEnd()}function Tee(e,t){return t.some(t=>!(t.isVoid||!RegExp(`<${t.name}( .*?)?>`).test(e)))}function Eee(e,t){return t.some(t=>RegExp(``).test(e))}function $i(e,t,n=` `){return`${n.repeat(Math.max(0,t))}${e}\n`}function Dee(e,t){let n=//.test(e),r=/<\/pre>/.test(e);return n&&r?!1:n?`first`:r?`last`:t===`first`||t===`middle`?`middle`:!1}function ea(e){return!!e&&e.length==1&&/[\u0300-\u036f\u1ab0-\u1aff\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]/.test(e)}function ta(e){return!!e&&e.length==1&&/[\ud800-\udbff]/.test(e)}function na(e){return!!e&&e.length==1&&/[\udc00-\udfff]/.test(e)}function ra(e,t){return ta(e.charAt(t-1))&&na(e.charAt(t))}function ia(e,t){return ea(e.charAt(t))}const aa=sa();function oa(e,t){let n=String(e).matchAll(aa);return Array.from(n).some(e=>e.indexe.source).join(`|`)+`)`,r=`${t}|${n}(?:\u{200D}${n})*`;return new RegExp(r,`ug`)}function ca(e){if(!e)return null;let t=la(e);return t?Xi(t):null}function la(e){let t=e.split(`.`);return t.length==3?t[1]:null}function ua(e,t){return(e.removeFeatures||[]).includes(t)}function da(e){if(!e)return null;let[,t,n]=e.trim().match(/([.,\d]+)(%|px)$/)||[],r=Number.parseFloat(t);return Number.isNaN(r)?null:{value:r,unit:n}}function fa(e,t,n){return n===`px`?{value:t.value,unit:`px`}:{value:t.value/e*100,unit:`%`}}var pa=class extends Fi{_parentElement;constructor(e=[]){super(e,{idProperty:`viewUid`}),this.on(`add`,(e,t,n)=>{this._renderViewIntoCollectionParent(t,n)}),this.on(`remove`,(e,t)=>{t.element&&this._parentElement&&t.element.remove()}),this._parentElement=null}destroy(){this.map(e=>e.destroy())}setParent(e){this._parentElement=e;for(let e of this)this._renderViewIntoCollectionParent(e)}delegate(...e){if(!e.length||!ma(e))throw new w(`ui-viewcollection-delegate-wrong-events`,this);return{to:t=>{for(let n of this)for(let r of e)n.delegate(r).to(t);this.on(`add`,(n,r)=>{for(let n of e)r.delegate(n).to(t)}),this.on(`remove`,(n,r)=>{for(let n of e)r.stopDelegating(n,t)})}}}_renderViewIntoCollectionParent(e,t){e.isRendered||e.render(),e.element&&this._parentElement&&this._parentElement.insertBefore(e.element,this._parentElement.children[t])}remove(e){return super.remove(e)}};function ma(e){return e.every(e=>typeof e==`string`)}const ha=E();var ga=class extends ha{ns;tag;text;attributes;children;eventListeners;_isRendered;_revertData;constructor(e){super(),Object.assign(this,Oa(Da(e))),this._isRendered=!1,this._revertData=null}render(){let e=this._renderNode({intoFragment:!0});return this._isRendered=!0,e}apply(e){return this._revertData=Ha(),this._renderNode({node:e,intoFragment:!1,isApplying:!0,revertData:this._revertData}),e}revert(e){if(!this._revertData)throw new w(`ui-template-revert-not-applied`,[this,e]);this._revertTemplateFromNode(e,this._revertData)}*getViews(){function*e(t){if(t.children)for(let n of t.children)Ra(n)?yield n:za(n)&&(yield*e(n))}yield*e(this)}static bind(e,t){return{to(n,r){return new va({eventNameOrFunction:n,attribute:n,observable:e,emitter:t,callback:r})},if(n,r,i){return new ya({observable:e,emitter:t,attribute:n,valueIfTrue:r,callback:i})}}}static extend(e,t){if(e._isRendered)throw new w(`template-extend-render`,[this,e]);Ia(e,Oa(Da(t)))}_renderNode(e){let t;if(t=e.node?this.tag&&this.text:this.tag?this.text:!this.text,t)throw new w(`ui-template-wrong-syntax`,this);return this.text?this._renderText(e):this._renderElement(e)}_renderElement(e){let t=e.node;return t||=e.node=document.createElementNS(this.ns||`http://www.w3.org/1999/xhtml`,this.tag),this._renderAttributes(e),this._renderElementChildren(e),this._setUpListeners(e),t}_renderText(e){let t=e.node;return t?e.revertData.text=t.textContent:t=e.node=document.createTextNode(``),ba(this.text)?this._bindToObservable({schema:this.text,updater:wa(t),data:e}):t.textContent=this.text.join(``),t}_renderAttributes(e){if(!this.attributes)return;let t=e.node,n=e.revertData;for(let r in this.attributes){let i=t.getAttribute(r),a=this.attributes[r];n&&(n.attributes[r]=i);let o=Va(a)?a[0].ns:null;if(ba(a)){let s=Va(a)?a[0].value:a;n&&Ua(r)&&s.unshift(i),this._bindToObservable({schema:s,updater:Ta(t,r,o),data:e})}else if(r==`style`&&typeof a[0]!=`string`)this._renderStyleAttribute(a[0],e);else{n&&i&&Ua(r)&&a.unshift(i);let e=a.map(e=>e&&(e.value||e)).reduce((e,t)=>e.concat(t),[]).reduce(Pa,``);La(e)||t.setAttributeNS(o,r,e)}}}_renderStyleAttribute(e,t){let n=t.node;for(let r in e){let i=e[r];ba(i)?this._bindToObservable({schema:[i],updater:Ea(n,r),data:t}):xa(r)?n.style.setProperty(r,i):n.style[r]=i}}_renderElementChildren(e){let t=e.node,n=e.intoFragment?document.createDocumentFragment():t,r=e.isApplying,i=0;for(let a of this.children)if(Ba(a)){if(!r){a.setParent(t);for(let e of a)n.appendChild(e.element)}}else if(Ra(a))r||(a.isRendered||a.render(),n.appendChild(a.element));else if(vr(a))n.appendChild(a);else if(r){let t=e.revertData,r=Ha();t.children.push(r),a._renderNode({intoFragment:!1,node:n.childNodes[i++],isApplying:!0,revertData:r})}else n.appendChild(a.render());e.intoFragment&&t.appendChild(n)}_setUpListeners(e){if(this.eventListeners)for(let t in this.eventListeners){let n=this.eventListeners[t].map(n=>{let[r,i]=t.split(`@`);return n.activateDomEventListener(r,i,e)});e.revertData&&e.revertData.bindings.push(n)}}_bindToObservable({schema:e,updater:t,data:n}){let r=n.revertData;Ca(e,t,n);let i=e.filter(e=>!La(e)).filter(e=>e.observable).map(r=>r.activateAttributeListener(e,t,n));r&&r.bindings.push(i)}_revertTemplateFromNode(e,t){for(let e of t.bindings)for(let t of e)t();if(t.text){e.textContent=t.text;return}let n=e;for(let e in t.attributes){let r=t.attributes[e];r===null?n.removeAttribute(e):n.setAttribute(e,r)}for(let e=0;eCa(e,t,n);return this.emitter.listenTo(this.observable,`change:${this.attribute}`,r),()=>{this.emitter.stopListening(this.observable,`change:${this.attribute}`,r)}}},va=class extends _a{eventNameOrFunction;constructor(e){super(e),this.eventNameOrFunction=e.eventNameOrFunction}activateDomEventListener(e,t,n){let r=(e,n)=>{(!t||n.target.matches(t))&&(typeof this.eventNameOrFunction==`function`?this.eventNameOrFunction(n):this.observable.fire(this.eventNameOrFunction,n))};return this.emitter.listenTo(n.node,e,r),()=>{this.emitter.stopListening(n.node,e,r)}}},ya=class extends _a{valueIfTrue;constructor(e){super(e),this.valueIfTrue=e.valueIfTrue}getValue(e){return La(super.getValue(e))?!1:this.valueIfTrue||!0}};function ba(e){return e?(e.value&&(e=e.value),Array.isArray(e)?e.some(ba):e instanceof _a):!1}function xa(e){return/^--[a-zA-Z_-][\w-]*$/.test(e)}function Sa(e,t){return e.map(e=>e instanceof _a?e.getValue(t):e)}function Ca(e,t,{node:n}){let r=Sa(e,n),i;i=e.length==1&&e[0]instanceof ya?r[0]:r.reduce(Pa,``),La(i)?t.remove():t.set(i)}function wa(e){return{set(t){e.textContent=t},remove(){e.textContent=``}}}function Ta(e,t,n){return{set(r){e.setAttributeNS(n,t,r)},remove(){e.removeAttributeNS(n,t)}}}function Ea(e,t){return{set(n){xa(t)?e.style.setProperty(t,n):e.style[t]=n},remove(){xa(t)?e.style.removeProperty(t):e.style[t]=null}}}function Da(e){return Lt(e,e=>{if(e&&(e instanceof _a||za(e)||Ra(e)||Ba(e)))return e})}function Oa(e){if(typeof e==`string`?e=ja(e):e.text&&Ma(e),e.on&&(e.eventListeners=Aa(e.on),delete e.on),!e.text){e.attributes&&ka(e.attributes);let t=[];if(e.children)if(Ba(e.children))t.push(e.children);else for(let n of e.children)za(n)||Ra(n)||vr(n)?t.push(n):t.push(new ga(n));e.children=t}return e}function ka(e){for(let t in e)e[t].value&&(e[t].value=A(e[t].value)),Na(e,t)}function Aa(e){for(let t in e)Na(e,t);return e}function ja(e){return{text:[e]}}function Ma(e){e.text=A(e.text)}function Na(e,t){e[t]=A(e[t])}function Pa(e,t){return La(t)?e:La(e)?t:`${e} ${t}`}function Fa(e,t){for(let n in t)e[n]?e[n].push(...t[n]):e[n]=t[n]}function Ia(e,t){if(t.attributes&&(e.attributes||={},Fa(e.attributes,t.attributes)),t.eventListeners&&(e.eventListeners||={},Fa(e.eventListeners,t.eventListeners)),t.text&&e.text.push(...t.text),t.children&&t.children.length){if(e.children.length!=t.children.length)throw new w(`ui-template-extend-children-mismatch`,e);let n=0;for(let r of t.children)Ia(e.children[n++],r)}}function La(e){return!e&&e!==0}function Ra(e){return e instanceof P}function za(e){return e instanceof ga}function Ba(e){return e instanceof pa}function Va(e){return Xe(e[0])&&e[0].ns}function Ha(){return{children:[],bindings:[],attributes:{}}}function Ua(e){return e==`class`||e==`style`}const Wa=br(D());var P=class extends Wa{element;isRendered;locale;t;template;_viewCollections;_unboundChildren;_bindTemplate;constructor(e){super(),this.element=null,this.isRendered=!1,this.locale=e,this.t=e&&e.t,this._viewCollections=new Fi,this._unboundChildren=this.createCollection(),this._viewCollections.on(`add`,(t,n)=>{n.locale=e,n.t=e&&e.t}),this.decorate(`render`)}get bindTemplate(){return this._bindTemplate?this._bindTemplate:this._bindTemplate=ga.bind(this,this)}createCollection(e){let t=new pa(e);return this._viewCollections.add(t),t}registerChild(e){pr(e)||(e=[e]);for(let t of e)this._unboundChildren.add(t)}deregisterChild(e){pr(e)||(e=[e]);for(let t of e)this._unboundChildren.remove(t)}setTemplate(e){this.template=new ga(e)}extendTemplate(e){ga.extend(this.template,e)}render(){if(this.isRendered)throw new w(`ui-view-render-already-rendered`,this);this.template&&(this.element=this.template.render(),this.registerChild(this.template.getViews())),this.isRendered=!0}destroy(){this.stopListening(),this._viewCollections.map(e=>e.destroy()),this.template&&this.template._revertData&&this.template.revert(this.element)}};const Ga={POLITE:`polite`,ASSERTIVE:`assertive`};var Ka=class{editor;view;constructor(e){this.editor=e,e.once(`ready`,()=>{for(let e of Object.values(Ga))this.announce(``,e)})}announce(e,t=Ga.POLITE){let n=this.editor;if(!n.ui.view)return;this.view||(this.view=new qa(n.locale),n.ui.view.body.add(this.view));let{politeness:r,isUnsafeHTML:i}=typeof t==`string`?{politeness:t}:t,a=this.view.regionViews.find(e=>e.politeness===r);a||(a=new Ja(n,r),this.view.regionViews.add(a)),a.announce({announcement:e,isUnsafeHTML:i})}},qa=class extends P{regionViews;constructor(e){super(e),this.regionViews=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-aria-live-announcer`]},children:this.regionViews})}},Ja=class extends P{politeness;_domConverter;_pruneAnnouncementsInterval;constructor(e,t){super(e.locale),this.setTemplate({tag:`div`,attributes:{"aria-live":t,"aria-relevant":`additions`},children:[{tag:`ul`,attributes:{class:[`ck`,`ck-aria-live-region-list`]}}]}),e.on(`destroy`,()=>{this._pruneAnnouncementsInterval!==null&&(clearInterval(this._pruneAnnouncementsInterval),this._pruneAnnouncementsInterval=null)}),this.politeness=t,this._domConverter=e.data.htmlProcessor.domConverter,this._pruneAnnouncementsInterval=setInterval(()=>{this.element&&this._listElement.firstChild&&this._listElement.firstChild.remove()},5e3)}announce({announcement:e,isUnsafeHTML:t}){if(!e.trim().length)return;let n=document.createElement(`li`);t?this._domConverter.setContentOf(n,e):n.innerText=e,this._listElement.appendChild(n)}get _listElement(){return this.element.querySelector(`ul`)}};function Ya({emitter:e,activator:t,callback:n,contextElements:r,listenerOptions:i}){e.listenTo(document,`mousedown`,(e,i)=>{if(!t())return;let a=typeof i.composedPath==`function`?i.composedPath():[],o=typeof r==`function`?r():r;for(let e of o)if(e.contains(i.target)||a.includes(e))return;n()},i)}function Xa(e){class t extends e{disableCssTransitions(){this._isCssTransitionsDisabled=!0}enableCssTransitions(){this._isCssTransitionsDisabled=!1}constructor(...e){super(...e),this.set(`_isCssTransitionsDisabled`,!1),this.initializeCssTransitionDisablerMixin()}initializeCssTransitionDisablerMixin(){this.template&&this.extendTemplate({attributes:{class:[this.bindTemplate.if(`_isCssTransitionsDisabled`,`ck-transitions-disabled`)]}})}}return t}function Za(e){class t extends e{_onDragBound=this._onDrag.bind(this);_onDragEndBound=this._onDragEnd.bind(this);_lastDraggingCoordinates={x:0,y:0};constructor(...e){super(...e),this.on(`render`,()=>{this._attachListeners()}),this.set(`isDragging`,!1)}_attachListeners(){this.listenTo(this.element,`mousedown`,this._onDragStart.bind(this)),this.listenTo(this.element,`touchstart`,this._onDragStart.bind(this))}_attachDragListeners(){this.listenTo(u.document,`mouseup`,this._onDragEndBound),this.listenTo(u.document,`touchend`,this._onDragEndBound),this.listenTo(u.document,`mousemove`,this._onDragBound),this.listenTo(u.document,`touchmove`,this._onDragBound)}_detachDragListeners(){this.stopListening(u.document,`mouseup`,this._onDragEndBound),this.stopListening(u.document,`touchend`,this._onDragEndBound),this.stopListening(u.document,`mousemove`,this._onDragBound),this.stopListening(u.document,`touchmove`,this._onDragBound)}_onDragStart(e,t){if(!this._isHandleElementPressed(t))return;this._attachDragListeners();let n=0,r=0;t instanceof MouseEvent?(n=t.clientX,r=t.clientY):(n=t.touches[0].clientX,r=t.touches[0].clientY),this._lastDraggingCoordinates={x:n,y:r},this.isDragging=!0}_onDrag(e,t){if(!this.isDragging){this._detachDragListeners();return}let n=0,r=0;t instanceof MouseEvent?(n=t.clientX,r=t.clientY):(n=t.touches[0].clientX,r=t.touches[0].clientY),t.preventDefault(),this.fire(`drag`,{deltaX:Math.round(n-this._lastDraggingCoordinates.x),deltaY:Math.round(r-this._lastDraggingCoordinates.y)}),this._lastDraggingCoordinates={x:n,y:r}}_onDragEnd(){this._detachDragListeners(),this.isDragging=!1}_isHandleElementPressed(e){return this.dragHandleElement?this.dragHandleElement===e.target||e.target instanceof HTMLElement&&this.dragHandleElement.contains(e.target):!1}}return t}function Qa({view:e}){e.listenTo(e.element,`submit`,(t,n)=>{n.preventDefault(),e.fire(`submit`)},{useCapture:!0})}function $a({keystrokeHandler:e,focusTracker:t,gridItems:n,numberOfColumns:r,uiLanguageDirection:i}){let a=typeof r==`number`?()=>r:r;e.set(`arrowright`,o((e,t)=>i===`rtl`?c(e,t.length):s(e,t.length))),e.set(`arrowleft`,o((e,t)=>i===`rtl`?s(e,t.length):c(e,t.length))),e.set(`arrowup`,o((e,t)=>{let n=e-a();return n<0&&(n=e+a()*Math.floor(t.length/a()),n>t.length-1&&(n-=a())),n})),e.set(`arrowdown`,o((e,t)=>{let n=e+a();return n>t.length-1&&(n=e%a()),n}));function o(e){return r=>{let i=n.find(e=>e.element===t.focusedElement),a=e(n.getIndex(i),n);n.get(a).focus(),r.stopPropagation(),r.preventDefault()}}function s(e,t){return e===t-1?0:e+1}function c(e,t){return e===0?t-1:e-1}}var eo=class extends P{id;constructor(e){super(e),this.set(`text`,void 0),this.set(`for`,void 0),this.id=`ck-editor__label_${he()}`;let t=this.bindTemplate;this.setTemplate({tag:`label`,attributes:{class:[`ck`,`ck-label`],id:this.id,for:t.to(`for`)},children:[{text:t.to(`text`)}]})}},to=class extends P{constructor(e,t){super(e);let n=e.t,r=new eo;r.text=n(`Help Contents. To close this dialog press ESC.`),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-accessibility-help-dialog__content`],"aria-labelledby":r.id,role:`document`,tabindex:-1},children:[mr(document,`p`,{},n(`Below, you can find a list of keyboard shortcuts that can be used in the editor.`)),...this._createCategories(Array.from(t.values())),r]})}focus(){this.element.focus()}_createCategories(e){return e.map(e=>{let t=[mr(document,`h3`,{},e.label),...Array.from(e.groups.values()).map(e=>this._createGroup(e)).flat()];return e.description&&t.splice(1,0,mr(document,`p`,{},e.description)),mr(document,`section`,{},t)})}_createGroup(e){let t=e.keystrokes.sort((e,t)=>e.label.localeCompare(t.label)).map(e=>this._createGroupRow(e)).flat(),n=[mr(document,`dl`,{},t)];return e.label&&n.unshift(mr(document,`h4`,{},e.label)),n}_createGroupRow(e){let t=this.locale.t,n=mr(document,`dt`),r=mr(document,`dd`),i=ro(e.keystroke),a=[];for(let e of i)a.push(e.map(no).join(``));return n.innerHTML=e.label,r.innerHTML=a.join(`, `)+(e.mayRequireFn&&p.isMac?` ${t(`(may require Fn)`)}`:``),[n,r]}};function no(e){return bi(e).split(`+`).map(e=>`${e}`).join(`+`)}function ro(e){return typeof e==`string`?[[e]]:typeof e[0]==`string`?[e]:e}const io=D();var F=class extends io{editor;_disableStack=new Set;constructor(e){super(),this.editor=e,this.set(`isEnabled`,!0)}forceDisabled(e){this._disableStack.add(e),this._disableStack.size==1&&(this.on(`set:isEnabled`,ao,{priority:`highest`}),this.isEnabled=!1)}clearForceDisabled(e){this._disableStack.delete(e),this._disableStack.size==0&&(this.off(`set:isEnabled`,ao),this.isEnabled=!0)}destroy(){this.stopListening()}static get isContextPlugin(){return!1}static get isOfficialPlugin(){return!1}static get isPremiumPlugin(){return!1}};function ao(e){e.return=!1,e.stop()}const oo=D();var I=class extends oo{editor;_isEnabledBasedOnSelection;_affectsData;_disableStack;static get _throwErrorWhenUsedAsAPlugin(){return!0}constructor(e){super(),this.editor=e,this.set(`value`,void 0),this.set(`isEnabled`,!1),this._affectsData=!0,this._isEnabledBasedOnSelection=!0,this._disableStack=new Set,this.decorate(`execute`),this.listenTo(this.editor.model.document,`change`,()=>{this.refresh()}),this.listenTo(e,`change:isReadOnly`,()=>{this.refresh()}),this.on(`set:isEnabled`,t=>{if(!this.affectsData)return;let n=e.model.document.selection,r=n.getFirstPosition().root.rootName!=`$graveyard`&&e.model.canEditAt(n);(e.isReadOnly||this._isEnabledBasedOnSelection&&!r)&&(t.return=!1,t.stop())},{priority:`highest`}),this.on(`execute`,e=>{this.isEnabled||e.stop()},{priority:`high`})}get affectsData(){return this._affectsData}set affectsData(e){this._affectsData=e}refresh(){this.isEnabled=!0}forceDisabled(e){this._disableStack.add(e),this._disableStack.size==1&&(this.on(`set:isEnabled`,so,{priority:`highest`}),this.isEnabled=!1)}clearForceDisabled(e){this._disableStack.delete(e),this._disableStack.size==0&&(this.off(`set:isEnabled`,so),this.refresh())}execute(...e){}destroy(){this.stopListening()}};function so(e){e.return=!1,e.stop()}var co=class extends I{_childCommandsDefinitions=[];refresh(){}execute(...e){let t=this._getFirstEnabledCommand();return!!t&&t.execute(e)}registerChildCommand(e,t={}){_e(this._childCommandsDefinitions,{command:e,priority:t.priority||`normal`}),e.on(`change:isEnabled`,()=>this._checkEnabled()),this._checkEnabled()}_checkEnabled(){this.isEnabled=!!this._getFirstEnabledCommand()}_getFirstEnabledCommand(){let e=this._childCommandsDefinitions.find(({command:e})=>e.isEnabled);return e&&e.command}},lo=class{_commands;constructor(){this._commands=new Map}add(e,t){this._commands.set(e,t)}get(e){return this._commands.get(e)}execute(e,...t){let n=this.get(e);if(!n)throw new w(`commandcollection-command-not-found`,this,{commandName:e});return n.execute(...t)}*names(){yield*this._commands.keys()}*commands(){yield*this._commands.values()}[Symbol.iterator](){return this._commands[Symbol.iterator]()}destroy(){for(let e of this.commands())e.destroy()}};const uo=E();var fo=class extends uo{_context;_plugins=new Map;_availablePlugins;_contextPlugins;constructor(e,t=[],n=[]){super(),this._context=e,this._availablePlugins=new Map;for(let e of t)e.pluginName&&this._availablePlugins.set(e.pluginName,e);this._contextPlugins=new Map;for(let[e,t]of n)this._contextPlugins.set(e,t),this._contextPlugins.set(t,e),e.pluginName&&this._availablePlugins.set(e.pluginName,e)}*[Symbol.iterator](){for(let e of this._plugins)typeof e[0]==`function`&&(yield e)}get(e){let t=this._plugins.get(e);if(!t){let t=e;throw typeof e==`function`&&(t=e.pluginName||e.name),new w(`plugincollection-plugin-not-loaded`,this._context,{plugin:t})}return t}has(e){return this._plugins.has(e)}async init(e,t=[],n=[]){let r=this,i=this._context;d(e),p(e);let a=[...f(e.filter(e=>!l(e,t)))];ee(a,n);let o=v(a);return await y(o,`init`),await y(o,`afterInit`),o;function s(e){return typeof e==`function`}function c(e){return s(e)&&!!e.isContextPlugin}function l(e,t){return t.some(t=>t===e||u(e)===t||u(t)===e)}function u(e){return s(e)?e.pluginName||e.name:e}function d(e,t=new Set){e.forEach(e=>{s(e)&&(t.has(e)||(t.add(e),e.pluginName&&!r._availablePlugins.has(e.pluginName)&&r._availablePlugins.set(e.pluginName,e),e.requires&&d(e.requires,t)))})}function f(e,t=new Set){return e.map(e=>s(e)?e:r._availablePlugins.get(e)).reduce((e,n)=>t.has(n)?e:(t.add(n),n.requires&&(p(n.requires,n),f(n.requires,t).forEach(t=>e.add(t))),e.add(n)),new Set)}function p(e,t=null){e.map(e=>s(e)?e:r._availablePlugins.get(e)||e).forEach(e=>{m(e),h(e,t),g(e,t),_(e,t)})}function m(e){if(typeof e==`function`&&e._throwErrorWhenUsedAsAPlugin)throw new w(`plugincollection-plugin-invalid-constructor`,i,{name:e.name})}function h(e,t){if(!s(e))throw t?new w(`plugincollection-soft-required`,i,{missingPlugin:e,requiredBy:u(t)}):new w(`plugincollection-plugin-not-found`,i,{plugin:e})}function g(e,t){if(c(t)&&!c(e))throw new w(`plugincollection-context-required`,i,{plugin:u(e),requiredBy:u(t)})}function _(e,n){if(n&&l(e,t))throw new w(`plugincollection-required`,i,{plugin:u(e),requiredBy:u(n)})}function v(e){return e.map(e=>{let t=r._contextPlugins.get(e);return t||=new e(i),r._add(e,t),t})}function y(e,t){return e.reduce((e,n)=>!n[t]||r._contextPlugins.has(n)?e:e.then(n[t].bind(n)),Promise.resolve())}function ee(e,t){for(let n of t){if(typeof n!=`function`)throw new w(`plugincollection-replace-plugin-invalid-type`,null,{pluginItem:n});let t=n.pluginName;if(!t)throw new w(`plugincollection-replace-plugin-missing-name`,null,{pluginItem:n});if(n.requires&&n.requires.length)throw new w(`plugincollection-plugin-for-replacing-cannot-have-dependencies`,null,{pluginName:t});let i=r._availablePlugins.get(t);if(!i)throw new w(`plugincollection-plugin-for-replacing-not-exist`,null,{pluginName:t});let a=e.indexOf(i);if(a===-1){if(r._contextPlugins.has(i))return;throw new w(`plugincollection-plugin-for-replacing-not-loaded`,null,{pluginName:t})}if(i.requires&&i.requires.length)throw new w(`plugincollection-replaced-plugin-cannot-have-dependencies`,null,{pluginName:t});e.splice(a,1,n),r._availablePlugins.set(t,n)}}}destroy(){let e=[];for(let[,t]of this)typeof t.destroy==`function`&&!this._contextPlugins.has(t)&&e.push(t.destroy());return Promise.all(e)}_add(e,t){this._plugins.set(e,t);let n=e.pluginName;if(n){if(this._plugins.has(n))throw new w(`plugincollection-plugin-name-conflict`,null,{pluginName:n,plugin1:this._plugins.get(n).constructor,plugin2:e});this._plugins.set(n,t)}}},po=class{config;plugins;locale;t;editors;static defaultConfig;static builtinPlugins;_contextOwner=null;constructor(e){let{translations:t,...n}=e||{};this.config=new hr(n,this.constructor.defaultConfig);let r=this.constructor.builtinPlugins;this.config.define(`plugins`,r),this.plugins=new fo(this,r);let i=this.config.get(`language`)||{};this.locale=new Mi({uiLanguage:typeof i==`string`?i:i.ui,contentLanguage:this.config.get(`language.content`),translations:t}),this.t=this.locale.t,this.editors=new Fi}initPlugins(){let e=this.config.get(`plugins`)||[],t=this.config.get(`substitutePlugins`)||[];for(let n of e.concat(t)){if(typeof n!=`function`)throw new w(`context-initplugins-constructor-only`,null,{Plugin:n});if(n.isContextPlugin!==!0)throw new w(`context-initplugins-invalid-plugin`,null,{Plugin:n})}return this.plugins.init(e,[],t)}destroy(){return Promise.all(Array.from(this.editors,e=>e.destroy())).then(()=>this.plugins.destroy())}_addEditor(e,t){if(this._contextOwner)throw new w(`context-addeditor-private-context`);this.editors.add(e),t&&(this._contextOwner=e)}_removeEditor(e){return this.editors.has(e)&&this.editors.remove(e),this._contextOwner===e?this.destroy():Promise.resolve()}_getEditorConfig(){let e={};for(let t of this.config.names())[`plugins`,`removePlugins`,`extraPlugins`].includes(t)||(e[t]=this.config.get(t));return e}static create(e){return new Promise(t=>{let n=new this(e);t(n.initPlugins().then(()=>n))})}static get _throwErrorWhenUsedAsAPlugin(){return!0}};const mo=D();var ho=class extends mo{context;constructor(e){super(),this.context=e}destroy(){this.stopListening()}static get isContextPlugin(){return!0}static get isOfficialPlugin(){return!1}static get isPremiumPlugin(){return!1}},go=class extends N{editor;constructor(e){super(),this.editor=e}set(e,t,n={}){if(typeof t==`string`){let e=t;t=(t,n)=>{this.editor.execute(e),n()}}super.set(e,t,n)}};const _o=new WeakMap;let vo=!1;function yo({view:e,element:t,text:n,isDirectHost:r=!0,keepOnFocus:i=!1}){let a=e.document;_o.has(a)||(_o.set(a,new Map),a.registerPostFixer(e=>wo(_o.get(a),e)),a.on(`change:isComposing`,()=>{e.change(e=>wo(_o.get(a),e))},{priority:`high`})),t.is(`editableElement`)&&t.on(`change:placeholder`,(e,t,n)=>o(n)),t.placeholder?o(t.placeholder):n&&o(n),n&&Aee();function o(n){let o={text:n,isDirectHost:r,keepOnFocus:i,hostElement:r?t:null};_o.get(a).set(t,o),e.change(e=>wo([[t,o]],e))}}function bo(e,t){let n=t.document;_o.has(n)&&e.change(e=>{let r=_o.get(n),i=r.get(t);e.removeAttribute(`data-placeholder`,i.hostElement),So(e,i.hostElement),r.delete(t)})}function xo(e,t){return t.hasClass(`ck-placeholder`)?!1:(e.addClass(`ck-placeholder`,t),!0)}function So(e,t){return t.hasClass(`ck-placeholder`)?(e.removeClass(`ck-placeholder`,t),!0):!1}function Co(e,t){if(!e.isAttached()||Oee(e))return!1;let n=e.document,r=n.selection.anchor;return n.isComposing&&r&&r.parent===e?!1:t||!n.isFocused?!0:!!r&&r.parent!==e}function Oee(e){for(let t of e.getChildren())if(!t.is(`uiElement`))return!0;return!1}function wo(e,t){let n=[],r=!1;for(let[i,a]of e)a.isDirectHost&&(n.push(i),To(t,i,a)&&(r=!0));for(let[i,a]of e){if(a.isDirectHost)continue;let e=kee(i);e!==a.hostElement&&a.hostElement&&(t.removeAttribute(`data-placeholder`,a.hostElement),So(t,a.hostElement),a.hostElement=null,r=!0),e&&(n.includes(e)||(a.hostElement=e,To(t,i,a)&&(r=!0)))}return r}function To(e,t,n){let{text:r,isDirectHost:i,hostElement:a}=n,o=!1;return a.getAttribute(`data-placeholder`)!==r&&(e.setAttribute(`data-placeholder`,r,a),o=!0),(i||t.childCount==1)&&Co(a,n.keepOnFocus)?xo(e,a)&&(o=!0):So(e,a)&&(o=!0),o}function kee(e){if(e.childCount){let t=e.getChild(0);if(t.is(`element`)&&!t.is(`uiElement`)&&!t.is(`attributeElement`))return t}return null}function Aee(){vo||T(`enableViewPlaceholder-deprecated-text-option`),vo=!0}var Eo=class{is(){throw Error(`is() method is abstract`)}};const jee=E(Eo);var Do=class extends jee{document;parent;constructor(e){super(),this.document=e,this.parent=null}get index(){let e;if(!this.parent)return null;if((e=this.parent.getChildIndex(this))==-1)throw new w(`view-node-not-found-in-parent`,this);return e}get nextSibling(){let e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){let e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;for(;e.parent;)e=e.parent;return e}isAttached(){return this.root.is(`rootElement`)}getPath(){let e=[],t=this;for(;t.parent;)e.unshift(t.index),t=t.parent;return e}getAncestors(e={}){let t=[],n=e.includeSelf?this:this.parent;for(;n;)t[e.parentFirst?`push`:`unshift`](n),n=n.parent;return t}getCommonAncestor(e,t={}){let n=this.getAncestors(t),r=e.getAncestors(t),i=0;for(;n[i]==r[i]&&n[i];)i++;return i===0?null:n[i-1]}isBefore(e){if(this==e||this.root!==e.root)return!1;let t=this.getPath(),n=e.getPath(),r=fr(t,n);switch(r){case`prefix`:return!0;case`extension`:return!1;default:return t[r]e.data.length)throw new w(`view-textproxy-wrong-offsetintext`,this);if(n<0||t+n>e.data.length)throw new w(`view-textproxy-wrong-length`,this);this.data=e.data.substring(t,t+n),this.offsetInText=t}get offsetSize(){return this.data.length}get isPartial(){return this.data.length!==this.textNode.data.length}get parent(){return this.textNode.parent}get root(){return this.textNode.root}get document(){return this.textNode.document}getAncestors(e={}){let t=[],n=e.includeSelf?this.textNode:this.parent;for(;n!==null;)t[e.parentFirst?`push`:`unshift`](n),n=n.parent;return t}};ko.prototype.is=function(e){return e===`$textProxy`||e===`view:$textProxy`||e===`textProxy`||e===`view:textProxy`};var Ao=class e{_consumables=new Map;add(e,t){let n;if(e.is(`$text`)||e.is(`documentFragment`)){this._consumables.set(e,!0);return}this._consumables.has(e)?n=this._consumables.get(e):(n=new jo(e),this._consumables.set(e,n)),n.add(t?Mo(t):e._getConsumables())}test(e,t){let n=this._consumables.get(e);return n===void 0?null:e.is(`$text`)||e.is(`documentFragment`)?n:n.test(Mo(t))}consume(e,t){if(e.is(`$text`)||e.is(`documentFragment`))return this.test(e,t)?(this._consumables.set(e,!1),!0):!1;let n=this._consumables.get(e);return n===void 0?!1:n.consume(Mo(t))}revert(e,t){let n=this._consumables.get(e);n!==void 0&&(e.is(`$text`)||e.is(`documentFragment`)?this._consumables.set(e,!0):n.revert(Mo(t)))}static createFrom(t,n){if(n||=new e,t.is(`$text`))n.add(t);else if(t.is(`element`)||t.is(`documentFragment`)){n.add(t);for(let r of t.getChildren())e.createFrom(r,n)}return n}},jo=class{element;_canConsumeName=null;_attributes=new Map;constructor(e){this.element=e}add(e){e.name&&(this._canConsumeName=!0);for(let[t,n]of e.attributes)if(n){let e=this._attributes.get(t);(!e||typeof e==`boolean`)&&(e=new Map,this._attributes.set(t,e)),e.set(n,!0)}else if(t==`style`||t==`class`)throw new w(`viewconsumable-invalid-attribute`,this);else this._attributes.set(t,!0)}test(e){if(e.name&&!this._canConsumeName)return this._canConsumeName;for(let[t,n]of e.attributes){let e=this._attributes.get(t);if(e===void 0)return null;if(e===!1)return!1;if(e!==!0){if(n){let t=e.get(n);if(t===void 0)return null;if(!t)return!1}else for(let t of e.values())if(!t)return!1}}return!0}consume(e){if(!this.test(e))return!1;e.name&&(this._canConsumeName=!1);for(let[t,n]of e.attributes){let e=this._attributes.get(t);if(typeof e==`boolean`)for(let[e]of this.element._getConsumables(t,n).attributes)this._attributes.set(e,!1);else if(n)for(let[,r]of this.element._getConsumables(t,n).attributes)e.set(r,!1);else for(let t of e.keys())e.set(t,!1)}return!0}revert(e){e.name&&(this._canConsumeName=!0);for(let[t,n]of e.attributes){let e=this._attributes.get(t);if(e===!1){this._attributes.set(t,!0);continue}if(!(e===void 0||e===!0))if(n)e.get(n)===!1&&e.set(n,!0);else for(let t of e.keys())e.set(t,!0)}}};function Mo(e){let t=[];return`attributes`in e&&e.attributes&&No(t,e.attributes),`classes`in e&&e.classes&&No(t,e.classes,`class`),`styles`in e&&e.styles&&No(t,e.styles,`style`),{name:e.name||!1,attributes:t}}function No(e,t,n){if(typeof t==`string`){e.push(n?[n,t]:[t]);return}for(let r of t)Array.isArray(r)?e.push(r):e.push(n?[n,r]:[r])}var Po=class{_patterns=[];constructor(...e){this.add(...e)}add(...e){for(let t of e)(typeof t==`string`||t instanceof RegExp)&&(t={name:t}),this._patterns.push(t)}match(...e){for(let t of e)for(let e of this._patterns){let n=this._isElementMatching(t,e);if(n)return{element:t,pattern:e,match:n}}return null}matchAll(...e){let t=[];for(let n of e)for(let e of this._patterns){let r=this._isElementMatching(n,e);r&&t.push({element:n,pattern:e,match:r})}return t.length>0?t:null}getElementName(){if(this._patterns.length!==1)return null;let e=this._patterns[0],t=e.name;return typeof e!=`function`&&t&&!(t instanceof RegExp)?t:null}_isElementMatching(e,t){if(typeof t==`function`){let n=t(e);return!n||typeof n!=`object`?n:Mo(n)}let n={};if(t.name&&(n.name=Io(t.name,e.name),!n.name))return null;let r=[];return t.attributes&&!Ro(t.attributes,e,r)||t.classes&&!zo(t.classes,e,r)||t.styles&&!Bo(t.styles,e,r)?null:(r.length&&(n.attributes=r),n)}};function Fo(e,t){return e===!0||e===t||e instanceof RegExp&&!!String(t).match(e)}function Io(e,t){return e instanceof RegExp?!!t.match(e):e===t}function Lo(e,t){if(Array.isArray(e))return e.map(e=>typeof e!=`object`||e instanceof RegExp?t?[t,e,!0]:[e,!0]:((e.key===void 0||e.value===void 0)&&T(`matcher-pattern-missing-key-or-value`,e),t?[t,e.key,e.value]:[e.key,e.value]));if(typeof e!=`object`||e instanceof RegExp)return[t?[t,e,!0]:[e,!0]];let n=[];for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.push(t?[t,r,e[r]]:[r,e[r]]);return n}function Ro(e,t,n){let r;return typeof e==`object`&&!(e instanceof RegExp)&&!Array.isArray(e)?(e.style!==void 0&&T(`matcher-pattern-deprecated-attributes-style-key`,e),e.class!==void 0&&T(`matcher-pattern-deprecated-attributes-class-key`,e)):r=[`class`,`style`],t._collectAttributesMatch(Lo(e),n,r)}function zo(e,t,n){return t._collectAttributesMatch(Lo(e,`class`),n)}function Bo(e,t,n){return t._collectAttributesMatch(Lo(e,`style`),n)}var Vo=class{_styles;_cachedStyleNames=null;_cachedExpandedStyleNames=null;_styleProcessor;constructor(e){this._styles={},this._styleProcessor=e}get isEmpty(){return!Object.entries(this._styles).length}get size(){return this.isEmpty?0:this.getStyleNames().length}setTo(e){this.clear();let t=Uo(e);for(let[e,n]of t)this._styleProcessor.toNormalizedForm(e,n,this._styles);return this}has(e){if(this.isEmpty)return!1;let t=this._styleProcessor.getReducedForm(e,this._styles).find(([t])=>t===e);return Array.isArray(t)}set(e,t){if(this._cachedStyleNames=null,this._cachedExpandedStyleNames=null,Xe(e))for(let[t,n]of Object.entries(e))this._styleProcessor.toNormalizedForm(t,n,this._styles);else this._styleProcessor.toNormalizedForm(e,t,this._styles)}remove(e){let t={};for(let n of A(e)){let e=Wo(n),r=Je(this._styles,e);if(r)Go(t,e,r);else{let e=this.getAsString(n);e!==void 0&&this._styleProcessor.toNormalizedForm(n,e,t)}}Object.keys(t).length&&(Ko(this._styles,t),this._cachedStyleNames=null,this._cachedExpandedStyleNames=null)}getNormalized(e){return this._styleProcessor.getNormalized(e,this._styles)}toString(){return this.isEmpty?``:this.getStylesEntries().map(e=>e.join(`:`)).sort().join(`;`)+`;`}getAsString(e){if(this.isEmpty)return;if(this._styles[e]&&!Xe(this._styles[e]))return this._styles[e];let t=this._styleProcessor.getReducedForm(e,this._styles).find(([t])=>t===e);if(Array.isArray(t))return t[1]}getStyleNames(e=!1){return this.isEmpty?[]:e?(this._cachedExpandedStyleNames||=this._styleProcessor.getStyleNames(this._styles),this._cachedExpandedStyleNames):(this._cachedStyleNames||=this.getStylesEntries().map(([e])=>e),this._cachedStyleNames)}keys(){return this.getStyleNames()}clear(){this._styles={},this._cachedStyleNames=null,this._cachedExpandedStyleNames=null}isSimilar(e){if(this.size!==e.size)return!1;for(let t of this.getStyleNames())if(!e.has(t)||e.getAsString(t)!==this.getAsString(t))return!1;return!0}getStylesEntries(){let e=[],t=Object.keys(this._styles);for(let n of t)e.push(...this._styleProcessor.getReducedForm(n,this._styles));return e}_clone(){let e=new this.constructor(this._styleProcessor);return e.set(this.getNormalized()),e}_getTokensMatch(e,t){let n=[];for(let r of this.getStyleNames(!0))if(Fo(e,r)){if(t===!0){n.push(r);continue}Fo(t,this.getAsString(r))&&n.push(r)}return n.length?n:void 0}_getConsumables(e){let t=[];if(e){t.push(e);for(let n of this._styleProcessor.getRelatedStyles(e))t.push(n)}else for(let e of this.getStyleNames()){for(let n of this._styleProcessor.getRelatedStyles(e))t.push(n);t.push(e)}return t}_canMergeFrom(e){for(let t of e.getStyleNames())if(this.has(t)&&this.getAsString(t)!==e.getAsString(t))return!1;return!0}_mergeFrom(e){for(let t of e.getStyleNames())this.has(t)||this.set(t,e.getAsString(t))}_isMatching(e){for(let t of e.getStyleNames())if(!this.has(t)||this.getAsString(t)!==e.getAsString(t))return!1;return!0}},Ho=class{_normalizers;_extractors;_reducers;_consumables;constructor(){this._normalizers=new Map,this._extractors=new Map,this._reducers=new Map,this._consumables=new Map}toNormalizedForm(e,t,n){if(Xe(t)){Go(n,Wo(e),t);return}if(this._normalizers.has(e)){let{path:r,value:i}=this._normalizers.get(e)(t);Go(n,r,i)}else Go(n,e,t)}getNormalized(e,t){if(!e)return wn({},t);if(t[e]!==void 0)return t[e];if(this._extractors.has(e)){let n=this._extractors.get(e);if(typeof n==`string`)return Je(t,n);let r=n(e,t);if(r)return r}return Je(t,Wo(e))}getReducedForm(e,t){let n=this.getNormalized(e,t);return n===void 0?[]:this._reducers.has(e)?this._reducers.get(e)(n):[[e,n]]}getStyleNames(e){let t=new Set;for(let n of this._consumables.keys()){let r=this.getNormalized(n,e);r&&(typeof r!=`object`||Object.keys(r).length)&&t.add(n)}for(let n of Object.keys(e))t.add(n);return Array.from(t)}getRelatedStyles(e){return this._consumables.get(e)||[]}setNormalizer(e,t){this._normalizers.set(e,t)}setExtractor(e,t){this._extractors.set(e,t)}setReducer(e,t){this._reducers.set(e,t)}setStyleRelation(e,t){this._mapStyleNames(e,t);for(let n of t)this._mapStyleNames(n,[e])}_mapStyleNames(e,t){this._consumables.has(e)||this._consumables.set(e,[]),this._consumables.get(e).push(...t)}};function Uo(e){let t=null,n=0,r=0,i=null,a=new Map;if(e===``)return a;e.charAt(e.length-1)!=`;`&&(e+=`;`);for(let o=0;oe!=`style`&&e!=`class`).map(e=>`${e[0]}="${e[1]}"`).sort().join(` `);return this.name+(e==``?``:` class="${e}"`)+(t?` style="${t}"`:``)+(n==``?``:` ${n}`)}shouldRenderUnsafeAttribute(e){return this._unsafeAttributesToRender.includes(e)}toJSON(){let e=super.toJSON();if(e.name=this.name,e.type=`Element`,this._attrs.size&&(e.attributes=Object.fromEntries(this.getAttributes())),this._children.length>0){e.children=[];for(let t of this._children)e.children.push(t.toJSON())}return e}_clone(e=!1){let t=[];if(e)for(let n of this.getChildren())t.push(n._clone(e));let n=new this.constructor(this.document,this.name,this._attrs,t);return n._customProperties=new Map(this._customProperties),n.getFillerOffset=this.getFillerOffset,n._unsafeAttributesToRender=this._unsafeAttributesToRender,n}_appendChild(e){return this._insertChild(this.childCount,e)}_insertChild(e,t){this._fireChange(`children`,this,{index:e});let n=0,r=Yo(this.document,t);for(let t of r)t.parent!==null&&t._remove(),t.parent=this,t.document=this.document,this._children.splice(e,0,t),e++,n++;return n}_removeChildren(e,t=1){this._fireChange(`children`,this,{index:e});for(let n=e;nt&&e.selection.editableElement==this),this.listenTo(e.selection,`change`,()=>{this.isFocused=e.isFocused&&e.selection.editableElement==this})}destroy(){this.stopListening()}toJSON(){let e=super.toJSON();return e.type=`EditableElement`,e.isReadOnly=this.isReadOnly,e.isFocused=this.isFocused,e}};es.prototype.is=function(e,t){return t?t===this.name&&(e===`editableElement`||e===`view:editableElement`||e===`containerElement`||e===`view:containerElement`||e===`element`||e===`view:element`):e===`editableElement`||e===`view:editableElement`||e===`containerElement`||e===`view:containerElement`||e===`element`||e===`view:element`||e===`node`||e===`view:node`};const ts=Symbol(`rootName`);var ns=class extends es{constructor(e,t){super(e,t),this.rootName=`main`}get rootName(){return this.getCustomProperty(ts)}set rootName(e){this._setCustomProperty(ts,e)}toJSON(){return this.rootName}set _name(e){this.name=e}};ns.prototype.is=function(e,t){return t?t===this.name&&(e===`rootElement`||e===`view:rootElement`||e===`editableElement`||e===`view:editableElement`||e===`containerElement`||e===`view:containerElement`||e===`element`||e===`view:element`):e===`rootElement`||e===`view:rootElement`||e===`editableElement`||e===`view:editableElement`||e===`containerElement`||e===`view:containerElement`||e===`element`||e===`view:element`||e===`node`||e===`view:node`};var rs=class{direction;boundaries;singleCharacters;shallow;ignoreElementEnd;_position;_boundaryStartParent;_boundaryEndParent;constructor(e={}){if(!e.boundaries&&!e.startPosition)throw new w(`view-tree-walker-no-start-position`,null);if(e.direction&&e.direction!=`forward`&&e.direction!=`backward`)throw new w(`view-tree-walker-unknown-direction`,e.startPosition,{direction:e.direction});this.boundaries=e.boundaries||null,e.startPosition?this._position=L._createAt(e.startPosition):this._position=L._createAt(e.boundaries[e.direction==`backward`?`end`:`start`]),this.direction=e.direction||`forward`,this.singleCharacters=!!e.singleCharacters,this.shallow=!!e.shallow,this.ignoreElementEnd=!!e.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null}[Symbol.iterator](){return this}get position(){return this._position}skip(e){let t,n;do n=this.position,t=this.next();while(!t.done&&e(t.value));t.done||(this._position=n)}jumpTo(e){this._boundaryStartParent&&e.isBefore(this.boundaries.start)?e=this.boundaries.start:this._boundaryEndParent&&e.isAfter(this.boundaries.end)&&(e=this.boundaries.end),this._position=e.clone()}next(){return this.direction==`forward`?this._next():this._previous()}_next(){let e=this.position.clone(),t=this.position,n=e.parent;if(n.parent===null&&e.offset===n.childCount||n===this._boundaryEndParent&&e.offset==this.boundaries.end.offset)return{done:!0,value:void 0};let r;if(n&&n.is(`view:$text`)){if(e.isAtEnd)return this._position=L._createAfter(n),this._next();r=n.data[e.offset]}else r=n.getChild(e.offset);if(typeof r==`string`){let r;r=this.singleCharacters?1:(n===this._boundaryEndParent?this.boundaries.end.offset:n.data.length)-e.offset;let i=new ko(n,e.offset,r);return e.offset+=r,this._position=e,this._formatReturnValue(`text`,i,t,e,r)}if(r&&r.is(`view:element`)){if(!this.shallow)e=new L(r,0);else{if(this.boundaries&&this.boundaries.end.isBefore(e))return{done:!0,value:void 0};e.offset++}return this._position=e,this._formatReturnValue(`elementStart`,r,t,e,1)}if(r&&r.is(`view:$text`)){if(this.singleCharacters)return e=new L(r,0),this._position=e,this._next();let n=r.data.length,i;return r==this._boundaryEndParent?(n=this.boundaries.end.offset,i=new ko(r,0,n),e=L._createAfter(i)):(i=new ko(r,0,r.data.length),e.offset++),this._position=e,this._formatReturnValue(`text`,i,t,e,n)}return e=L._createAfter(n),this._position=e,this.ignoreElementEnd?this._next():this._formatReturnValue(`elementEnd`,n,t,e)}_previous(){let e=this.position.clone(),t=this.position,n=e.parent;if(n.parent===null&&e.offset===0||n==this._boundaryStartParent&&e.offset==this.boundaries.start.offset)return{done:!0,value:void 0};let r;if(n.is(`view:$text`)){if(e.isAtStart)return this._position=L._createBefore(n),this._previous();r=n.data[e.offset-1]}else r=n.getChild(e.offset-1);if(typeof r==`string`){let r;if(this.singleCharacters)r=1;else{let t=n===this._boundaryStartParent?this.boundaries.start.offset:0;r=e.offset-t}e.offset-=r;let i=new ko(n,e.offset,r);return this._position=e,this._formatReturnValue(`text`,i,t,e,r)}if(r&&r.is(`view:element`))return this.shallow?(e.offset--,this._position=e,this._formatReturnValue(`elementStart`,r,t,e,1)):(e=new L(r,r.childCount),this._position=e,this.ignoreElementEnd?this._previous():this._formatReturnValue(`elementEnd`,r,t,e));if(r&&r.is(`view:$text`)){if(this.singleCharacters)return e=new L(r,r.data.length),this._position=e,this._previous();let n=r.data.length,i;if(r==this._boundaryStartParent){let t=this.boundaries.start.offset;i=new ko(r,t,r.data.length-t),n=i.data.length,e=L._createBefore(i)}else i=new ko(r,0,r.data.length),e.offset--;return this._position=e,this._formatReturnValue(`text`,i,t,e,n)}return e=L._createBefore(n),this._position=e,this._formatReturnValue(`elementStart`,n,t,e,1)}_formatReturnValue(e,t,n,r,i){return t.is(`view:$textProxy`)&&(t.offsetInText+t.data.length==t.textNode.data.length&&(this.direction==`forward`&&!(this.boundaries&&this.boundaries.end.isEqual(this.position))?(r=L._createAfter(t.textNode),this._position=r):n=L._createAfter(t.textNode)),t.offsetInText===0&&(this.direction==`backward`&&!(this.boundaries&&this.boundaries.start.isEqual(this.position))?(r=L._createBefore(t.textNode),this._position=r):n=L._createBefore(t.textNode))),{done:!1,value:{type:e,item:t,previousPosition:n,nextPosition:r,length:i}}}},L=class e extends Eo{parent;offset;constructor(e,t){super(),this.parent=e,this.offset=t}get nodeAfter(){return this.parent.is(`$text`)?null:this.parent.getChild(this.offset)||null}get nodeBefore(){return this.parent.is(`$text`)?null:this.parent.getChild(this.offset-1)||null}get isAtStart(){return this.offset===0}get isAtEnd(){let e=this.parent.is(`$text`)?this.parent.data.length:this.parent.childCount;return this.offset===e}get root(){return this.parent.root}get editableElement(){let e=this.parent;for(;!(e instanceof es);)if(e.parent)e=e.parent;else return null;return e}getShiftedBy(t){let n=e._createAt(this),r=n.offset+t;return n.offset=r<0?0:r,n}getLastMatchingPosition(e,t={}){t.startPosition=this;let n=new rs(t);return n.skip(e),n.position}getAncestors(){return this.parent.is(`documentFragment`)?[this.parent]:this.parent.getAncestors({includeSelf:!0})}getCommonAncestor(e){let t=this.getAncestors(),n=e.getAncestors(),r=0;for(;t[r]==n[r]&&t[r];)r++;return r===0?null:t[r-1]}isEqual(e){return this.parent==e.parent&&this.offset==e.offset}isBefore(e){return this.compareWith(e)==`before`}isAfter(e){return this.compareWith(e)==`after`}compareWith(e){if(this.root!==e.root)return`different`;if(this.isEqual(e))return`same`;let t=this.parent.is(`node`)?this.parent.getPath():[],n=e.parent.is(`node`)?e.parent.getPath():[];t.push(this.offset),n.push(e.offset);let r=fr(t,n);switch(r){case`prefix`:return`before`;case`extension`:return`after`;default:return t[r]0?new this(n,r):new this(r,n)}static _createIn(e){return this._createFromParentsAndOffsets(e,0,e,e.childCount)}static _createOn(e){let t=e.is(`$textProxy`)?e.offsetSize:1;return this._createFromPositionAndShift(L._createBefore(e),t)}};R.prototype.is=function(e){return e===`range`||e===`view:range`};function is(e){return!!(e.item.is(`attributeElement`)||e.item.is(`uiElement`))}const as=E(Eo);var os=class e extends as{_ranges;_lastRangeBackward;_isFake;_fakeSelectionLabel;constructor(...e){super(),this._ranges=[],this._lastRangeBackward=!1,this._isFake=!1,this._fakeSelectionLabel=``,e.length&&this.setTo(...e)}get isFake(){return this._isFake}get fakeSelectionLabel(){return this._fakeSelectionLabel}get anchor(){if(!this._ranges.length)return null;let e=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?e.end:e.start).clone()}get focus(){if(!this._ranges.length)return null;let e=this._ranges[this._ranges.length-1];return(this._lastRangeBackward?e.start:e.end).clone()}get isCollapsed(){return this.rangeCount===1&&this._ranges[0].isCollapsed}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}get editableElement(){return this.anchor?this.anchor.editableElement:null}*getRanges(){for(let e of this._ranges)yield e.clone()}getFirstRange(){let e=null;for(let t of this._ranges)(!e||t.start.isBefore(e.start))&&(e=t);return e?e.clone():null}getLastRange(){let e=null;for(let t of this._ranges)(!e||t.end.isAfter(e.end))&&(e=t);return e?e.clone():null}getFirstPosition(){let e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){let e=this.getLastRange();return e?e.end.clone():null}isEqual(e){if(this.isFake!=e.isFake||this.isFake&&this.fakeSelectionLabel!=e.fakeSelectionLabel||this.rangeCount!=e.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus))return!1;for(let t of this._ranges){let n=!1;for(let r of e._ranges)if(t.isEqual(r)){n=!0;break}if(!n)return!1}return!0}isSimilar(e){if(this.isBackward!=e.isBackward)return!1;let t=dr(this.getRanges());if(t!=dr(e.getRanges()))return!1;if(t==0)return!0;for(let t of this.getRanges()){t=t.getTrimmed();let n=!1;for(let r of e.getRanges())if(r=r.getTrimmed(),t.start.isEqual(r.start)&&t.end.isEqual(r.end)){n=!0;break}if(!n)return!1}return!0}getSelectedElement(){return this.rangeCount===1?this.getFirstRange().getContainedElement():null}setTo(...t){let[n,r,i]=t;if(typeof r==`object`&&(i=r,r=void 0),n===null)this._setRanges([]),this._setFakeOptions(i);else if(n instanceof e||n instanceof cs)this._setRanges(n.getRanges(),n.isBackward),this._setFakeOptions({fake:n.isFake,label:n.fakeSelectionLabel});else if(n instanceof R)this._setRanges([n],i&&i.backward),this._setFakeOptions(i);else if(n instanceof L)this._setRanges([new R(n)]),this._setFakeOptions(i);else if(n instanceof Do){let e=!!i&&!!i.backward,t;if(r===void 0)throw new w(`view-selection-setto-required-second-parameter`,this);t=r==`in`?R._createIn(n):r==`on`?R._createOn(n):new R(L._createAt(n,r)),this._setRanges([t],e),this._setFakeOptions(i)}else if(pr(n))this._setRanges(n,i&&i.backward),this._setFakeOptions(i);else throw new w(`view-selection-setto-not-selectable`,this);this.fire(`change`)}setFocus(e,t){if(this.anchor===null)throw new w(`view-selection-setfocus-no-ranges`,this);let n=L._createAt(e,t);if(n.compareWith(this.focus)==`same`)return;let r=this.anchor;this._ranges.pop(),n.compareWith(r)==`before`?this._addRange(new R(n,r),!0):this._addRange(new R(r,n)),this.fire(`change`)}toJSON(){let e={ranges:Array.from(this.getRanges()).map(e=>e.toJSON())};return this.isBackward&&(e.isBackward=!0),this.isFake&&(e.isFake=!0),e}_setRanges(e,t=!1){e=Array.from(e),this._ranges=[];for(let t of e)this._addRange(t);this._lastRangeBackward=!!t}_setFakeOptions(e={}){this._isFake=!!e.fake,this._fakeSelectionLabel=e.fake&&e.label||``}_addRange(e,t=!1){if(!(e instanceof R))throw new w(`view-selection-add-range-not-range`,this);this._pushRange(e),this._lastRangeBackward=!!t}_pushRange(e){for(let t of this._ranges)if(e.isIntersecting(t))throw new w(`view-selection-range-intersects`,this,{addedRange:e,intersectingRange:t});this._ranges.push(new R(e.start,e.end))}};os.prototype.is=function(e){return e===`selection`||e===`view:selection`};const ss=E(Eo);var cs=class extends ss{_selection;constructor(...e){super(),this._selection=new os,this._selection.delegate(`change`).to(this),e.length&&this._selection.setTo(...e)}get isFake(){return this._selection.isFake}get fakeSelectionLabel(){return this._selection.fakeSelectionLabel}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get isCollapsed(){return this._selection.isCollapsed}get rangeCount(){return this._selection.rangeCount}get isBackward(){return this._selection.isBackward}get editableElement(){return this._selection.editableElement}get _ranges(){return this._selection._ranges}*getRanges(){yield*this._selection.getRanges()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getSelectedElement(){return this._selection.getSelectedElement()}isEqual(e){return this._selection.isEqual(e)}isSimilar(e){return this._selection.isSimilar(e)}toJSON(){return this._selection.toJSON()}_setTo(...e){this._selection.setTo(...e)}_setFocus(e,t){this._selection.setFocus(e,t)}};cs.prototype.is=function(e){return e===`selection`||e==`documentSelection`||e==`view:selection`||e==`view:documentSelection`};var ls=class extends pe{startRange;_eventPhase;_currentTarget;constructor(e,t,n){super(e,t),this.startRange=n,this._eventPhase=`none`,this._currentTarget=null}get eventPhase(){return this._eventPhase}get currentTarget(){return this._currentTarget}};const us=Symbol(`bubblingEmitter`),ds=Symbol(`bubblingCallbacks`),fs=Symbol(`bubblingContexts`);function ps(e){class t extends e{fire(e,...t){try{let n=e instanceof pe?e:new pe(this,e),r=_s(this),i=ys(this);if(ms(n,`capturing`,this),hs(r,`$capture`,n,...t))return n.return;let a=n.startRange||this.selection.getFirstRange(),o=a?a.getContainedElement():null,s=o?bs(i,o):!1,c=o||xs(a);if(ms(n,`atTarget`,c),!s){if(hs(r,`$text`,n,...t))return n.return;ms(n,`bubbling`,c)}for(;c;){if(c.is(`element`)&&hs(r,c,n,...t))return n.return;c=c.parent,ms(n,`bubbling`,c)}return ms(n,`bubbling`,this),hs(r,`$document`,n,...t),n.return}catch(e){w.rethrowUnexpectedError(e,this)}}_addEventListener(e,t,n){let r=A(n.context||`$document`),i=_s(this),a=vs(this);for(let e of r)typeof e==`function`&&ys(this).add(e);let o=gs(this,r,t);a.set(t,o),this.listenTo(i,e,o,n)}_removeEventListener(e,t){let n=_s(this),r=vs(this),i=r.get(t);i&&(r.delete(t),this.stopListening(n,e,i))}}return t}function ms(e,t,n){e instanceof ls&&(e._eventPhase=t,e._currentTarget=n)}function hs(e,t,n,...r){return e.fire(n,{currentTarget:t,eventArgs:r}),!!n.stop.called}function gs(e,t,n){return function(r,i){let{currentTarget:a,eventArgs:o}=i;if(typeof a==`string`){t.includes(a)&&n.call(e,r,...o);return}if(a.is(`rootElement`)&&t.includes(`$root`)){n.call(e,r,...o);return}if(t.includes(a.name)){n.call(e,r,...o);return}for(let i of t)if(typeof i==`function`&&i(a)){n.call(e,r,...o);return}}}function _s(e){return e[us]||(e[us]=new(E())),e[us]}function vs(e){return e[ds]||(e[ds]=new Map),e[ds]}function ys(e){return e[fs]||(e[fs]=new Set),e[fs]}function bs(e,t){for(let n of e)if(n(t))return!0;return!1}function xs(e){if(!e)return null;let t=e.start.parent,n=e.end.parent,r=t.getPath(),i=n.getPath();return r.length>i.length?t:n}const Ss=ps(D());var Cs=class extends Ss{selection;roots;stylesProcessor;_postFixers=new Set;constructor(e){super(),this.selection=new cs,this.roots=new Fi({idProperty:`rootName`}),this.stylesProcessor=e,this.set(`isReadOnly`,!1),this.set(`isFocused`,!1),this.set(`isSelecting`,!1),this.set(`isComposing`,!1)}getRoot(e=`main`){return this.roots.get(e)}getRoots(){return Array.from(this.roots)}registerPostFixer(e){this._postFixers.add(e)}destroy(){this.roots.forEach(e=>e.destroy()),this.stopListening()}_callPostFixers(e){let t=!1;do for(let n of this._postFixers)if(t=n(e),t)break;while(t)}},ws=class extends Jo{static DEFAULT_PRIORITY=10;_priority=10;_id=null;_clonesGroup=null;constructor(e,t,n,r){super(e,t,n,r),this.getFillerOffset=Ts}get priority(){return this._priority}get id(){return this._id}getElementsWithSameId(){if(this.id===null)throw new w(`attribute-element-get-elements-with-same-id-no-id`,this);return new Set(this._clonesGroup)}isSimilar(e){return this.id!==null||e.id!==null?this.id===e.id:super.isSimilar(e)&&this.priority==e.priority}toJSON(){let e=super.toJSON();return e.type=`AttributeElement`,e}_clone(e=!1){let t=super._clone(e);return t._priority=this._priority,t._id=this._id,t}_canMergeAttributesFrom(e){return this.id!==null||e.id!==null||this.priority!==e.priority?!1:super._canMergeAttributesFrom(e)}_canSubtractAttributesOf(e){return this.id!==null||e.id!==null||this.priority!==e.priority?!1:super._canSubtractAttributesOf(e)}};ws.prototype.is=function(e,t){return t?t===this.name&&(e===`attributeElement`||e===`view:attributeElement`||e===`element`||e===`view:element`):e===`attributeElement`||e===`view:attributeElement`||e===`element`||e===`view:element`||e===`node`||e===`view:node`};function Ts(){if(Es(this))return null;let e=this.parent;for(;e&&e.is(`attributeElement`);){if(Es(e)>1)return null;e=e.parent}return!e||Es(e)>1?null:this.childCount}function Es(e){return Array.from(e.getChildren()).filter(e=>!e.is(`uiElement`)).length}var Ds=class extends Jo{constructor(e,t,n,r){super(e,t,n,r),this.getFillerOffset=Os}toJSON(){let e=super.toJSON();return e.type=`EmptyElement`,e}_insertChild(e,t){if(t&&(t instanceof Do||Array.from(t).length>0))throw new w(`view-emptyelement-cannot-add`,[this,t]);return 0}};Ds.prototype.is=function(e,t){return t?t===this.name&&(e===`emptyElement`||e===`view:emptyElement`||e===`element`||e===`view:element`):e===`emptyElement`||e===`view:emptyElement`||e===`element`||e===`view:element`||e===`node`||e===`view:node`};function Os(){return null}var ks=class extends Jo{constructor(e,t,n,r){super(e,t,n,r),this.getFillerOffset=js}_insertChild(e,t){if(t&&(t instanceof Do||Array.from(t).length>0))throw new w(`view-uielement-cannot-add`,[this,t]);return 0}render(e,t){return this.toDomElement(e)}toDomElement(e){let t=e.createElement(this.name);for(let e of this.getAttributeKeys())t.setAttribute(e,this.getAttribute(e));return t}toJSON(){let e=super.toJSON();return e.type=`UIElement`,e}};ks.prototype.is=function(e,t){return t?t===this.name&&(e===`uiElement`||e===`view:uiElement`||e===`element`||e===`view:element`):e===`uiElement`||e===`view:uiElement`||e===`element`||e===`view:element`||e===`node`||e===`view:node`};function As(e){e.document.on(`arrowKey`,(t,n)=>Ms(t,n,e.domConverter),{priority:`low`})}function js(){return null}function Ms(e,t,n){if(t.keyCode==k.arrowright){let e=t.domTarget.ownerDocument.defaultView.getSelection(),r=e.rangeCount==1&&e.getRangeAt(0).collapsed;if(r||t.shiftKey){let t=e.focusNode,i=e.focusOffset,a=n.domPositionToView(t,i);if(a===null)return;let o=!1,s=a.getLastMatchingPosition(e=>(e.item.is(`uiElement`)&&(o=!0),!!(e.item.is(`uiElement`)||e.item.is(`attributeElement`))));if(o){let t=n.viewPositionToDom(s);r?e.collapse(t.parent,t.offset):e.extend(t.parent,t.offset)}}}}var Ns=class extends Jo{constructor(e,t,n,r){super(e,t,n,r),this.getFillerOffset=Ps}toJSON(){let e=super.toJSON();return e.type=`RawElement`,e}_insertChild(e,t){if(t&&(t instanceof Do||Array.from(t).length>0))throw new w(`view-rawelement-cannot-add`,[this,t]);return 0}render(e,t){}};Ns.prototype.is=function(e,t){return t?t===this.name&&(e===`rawElement`||e===`view:rawElement`||e===`element`||e===`view:element`):e===`rawElement`||e===`view:rawElement`||e===this.name||e===`view:`+this.name||e===`element`||e===`view:element`||e===`node`||e===`view:node`};function Ps(){return null}const Fs=E(Eo);var Is=class extends Fs{document;_children=[];_customProperties=new Map;constructor(e,t){super(),this.document=e,t&&this._insertChild(0,t)}[Symbol.iterator](){return this._children[Symbol.iterator]()}get childCount(){return this._children.length}get isEmpty(){return this.childCount===0}get root(){return this}get parent(){return null}get name(){}get getFillerOffset(){}getCustomProperty(e){return this._customProperties.get(e)}*getCustomProperties(){yield*this._customProperties.entries()}toJSON(){let e=[];for(let t of this._children)e.push(t.toJSON());return e}_appendChild(e){return this._insertChild(this.childCount,e)}getChild(e){return this._children[e]}getChildIndex(e){return this._children.indexOf(e)}getChildren(){return this._children[Symbol.iterator]()}_insertChild(e,t){this._fireChange(`children`,this,{index:e});let n=0,r=Ls(this.document,t);for(let t of r)t.parent!==null&&t._remove(),t.parent=this,this._children.splice(e,0,t),e++,n++;return n}_removeChildren(e,t=1){this._fireChange(`children`,this,{index:e});for(let n=e;ntypeof t==`string`?new Oo(e,t):t instanceof ko?new Oo(e,t.data):t))}var Rs=class{document;_cloneGroups=new Map;_slotFactory=null;constructor(e){this.document=e}setSelection(...e){this.document.selection._setTo(...e)}setSelectionFocus(e,t){this.document.selection._setFocus(e,t)}createDocumentFragment(e){return new Is(this.document,e)}createText(e){return new Oo(this.document,e)}createAttributeElement(e,t,n={}){let r=new ws(this.document,e,t);return typeof n.priority==`number`&&(r._priority=n.priority),n.id&&(r._id=n.id),n.renderUnsafeAttributes&&r._unsafeAttributesToRender.push(...n.renderUnsafeAttributes),r}createContainerElement(e,t,n={},r={}){let i;Fee(n)?r=n:i=n;let a=new Qo(this.document,e,t,i);return r.renderUnsafeAttributes&&a._unsafeAttributesToRender.push(...r.renderUnsafeAttributes),a}createEditableElement(e,t,n={}){let r=new es(this.document,e,t);return n.renderUnsafeAttributes&&r._unsafeAttributesToRender.push(...n.renderUnsafeAttributes),r}createEmptyElement(e,t,n={}){let r=new Ds(this.document,e,t);return n.renderUnsafeAttributes&&r._unsafeAttributesToRender.push(...n.renderUnsafeAttributes),r}createUIElement(e,t,n){let r=new ks(this.document,e,t);return n&&(r.render=n),r}createRawElement(e,t,n,r={}){let i=new Ns(this.document,e,t);return n&&(i.render=n),r.renderUnsafeAttributes&&i._unsafeAttributesToRender.push(...r.renderUnsafeAttributes),i}setAttribute(e,t,n,r){r===void 0?n._setAttribute(e,t):r._setAttribute(e,t,n)}removeAttribute(e,t,n){n===void 0?t._removeAttribute(e):n._removeAttribute(e,t)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,n){xn(e)&&n===void 0?t._setStyle(e):n._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,n){n._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}breakAttributes(e){return e instanceof L?this._breakAttributes(e):this._breakAttributesRange(e)}breakContainer(e){let t=e.parent;if(!t.is(`containerElement`))throw new w(`view-writer-break-non-container-element`,this.document);if(!t.parent)throw new w(`view-writer-break-root`,this.document);if(e.isAtStart)return L._createBefore(t);if(!e.isAtEnd){let n=t._clone(!1);this.insert(L._createAfter(t),n);let r=new R(e,L._createAt(t,`end`)),i=new L(n,0);this.move(r,i)}return L._createAfter(t)}mergeAttributes(e){let t=e.offset,n=e.parent;if(n.is(`$text`))return e;if(n.is(`attributeElement`)&&n.childCount===0){let e=n.parent,t=n.index;return n._remove(),this._removeFromClonedElementsGroup(n),this.mergeAttributes(new L(e,t))}let r=n.getChild(t-1),i=n.getChild(t);if(!r||!i)return e;if(r.is(`$text`)&&i.is(`$text`))return Us(r,i);if(r.is(`attributeElement`)&&i.is(`attributeElement`)&&r.isSimilar(i)){let e=r.childCount;return r._appendChild(i.getChildren()),i._remove(),this._removeFromClonedElementsGroup(i),this.mergeAttributes(new L(r,e))}return e}mergeContainers(e){let t=e.nodeBefore,n=e.nodeAfter;if(!t||!n||!t.is(`containerElement`)||!n.is(`containerElement`))throw new w(`view-writer-merge-containers-invalid-position`,this.document);let r=t.getChild(t.childCount-1),i=r instanceof Oo?L._createAt(r,`end`):L._createAt(t,`end`);return this.move(R._createIn(n),L._createAt(t,`end`)),this.remove(R._createOn(n)),i}insert(e,t){t=pr(t)?[...t]:[t],Ws(t,this.document);let n=t.reduce((e,t)=>{let n=e[e.length-1],r=!t.is(`uiElement`);return!n||n.breakAttributes!=r?e.push({breakAttributes:r,nodes:[t]}):n.nodes.push(t),e},[]),r=null,i=e;for(let{nodes:e,breakAttributes:t}of n){let n=this._insertNodes(i,e,t);r||=n.start,i=n.end}return r?new R(r,i):new R(e)}remove(e){let t=e instanceof R?e:R._createOn(e);if(Ks(t,this.document),t.isCollapsed)return new Is(this.document);let{start:n,end:r}=this._breakAttributesRange(t,!0),i=n.parent,a=r.offset-n.offset,o=i._removeChildren(n.offset,a);for(let e of o)this._removeFromClonedElementsGroup(e);let s=this.mergeAttributes(n);return t.start=s,t.end=s.clone(),new Is(this.document,o)}clear(e,t){Ks(e,this.document);let n=e.getWalker({direction:`backward`,ignoreElementEnd:!0});for(let r of n){let n=r.item,i;if(n.is(`element`)&&t.isSimilar(n))i=R._createOn(n);else if(!r.nextPosition.isAfter(e.start)&&n.is(`$textProxy`)){let e=n.getAncestors().find(e=>e.is(`element`)&&t.isSimilar(e));e&&(i=R._createIn(e))}i&&(i.end.isAfter(e.end)&&(i.end=e.end),i.start.isBefore(e.start)&&(i.start=e.start),this.remove(i))}}move(e,t){let n;if(t.isAfter(e.end)){t=this._breakAttributes(t,!0);let r=t.parent,i=r.childCount;e=this._breakAttributesRange(e,!0),n=this.remove(e),t.offset+=r.childCount-i}else n=this.remove(e);return this.insert(t,n)}wrap(e,t){if(!(t instanceof ws))throw new w(`view-writer-wrap-invalid-attribute`,this.document);if(Ks(e,this.document),e.isCollapsed){let n=e.start;n.parent.is(`element`)&&!zs(n.parent)&&(n=n.getLastMatchingPosition(e=>e.item.is(`uiElement`))),n=this._wrapPosition(n,t);let r=this.document.selection;return r.isCollapsed&&r.getFirstPosition().isEqual(e.start)&&this.setSelection(n),new R(n)}else return this._wrapRange(e,t)}unwrap(e,t){if(!(t instanceof ws))throw new w(`view-writer-unwrap-invalid-attribute`,this.document);if(Ks(e,this.document),e.isCollapsed)return e;let{start:n,end:r}=this._breakAttributesRange(e,!0),i=n.parent,a=this._unwrapChildren(i,n.offset,r.offset,t),o=this.mergeAttributes(a.start);return o.isEqual(a.start)||a.end.offset--,new R(o,this.mergeAttributes(a.end))}rename(e,t){let n=new Qo(this.document,e,t.getAttributes());return this.insert(L._createAfter(t),n),this.move(R._createIn(t),L._createAt(n,0)),this.remove(R._createOn(t)),n}clearClonedElementsGroup(e){this._cloneGroups.delete(e)}createPositionAt(e,t){return L._createAt(e,t)}createPositionAfter(e){return L._createAfter(e)}createPositionBefore(e){return L._createBefore(e)}createRange(e,t){return new R(e,t)}createRangeOn(e){return R._createOn(e)}createRangeIn(e){return R._createIn(e)}createSelection(...e){return new os(...e)}createSlot(e=`children`){if(!this._slotFactory)throw new w(`view-writer-invalid-create-slot-context`,this.document);return this._slotFactory(this,e)}_registerSlotFactory(e){this._slotFactory=e}_clearSlotFactory(){this._slotFactory=null}_insertNodes(e,t,n){let r;if(r=n?Bs(e):e.parent.is(`$text`)?e.parent.parent:e.parent,!r)throw new w(`view-writer-invalid-position-container`,this.document);let i;i=n?this._breakAttributes(e,!0):e.parent.is(`$text`)?Hs(e):e;let a=r._insertChild(i.offset,t);for(let e of t)this._addToClonedElementsGroup(e);let o=i.getShiftedBy(a),s=this.mergeAttributes(i);return s.isEqual(i)||o.offset--,new R(s,this.mergeAttributes(o))}_wrapChildren(e,t,n,r){let i=t,a=[];for(;i!1,e.parent._insertChild(e.offset,n);let r=new R(e,e.getShiftedBy(1));this.wrap(r,t);let i=new L(n.parent,n.index);n._remove();let a=i.nodeBefore,o=i.nodeAfter;return a&&a.is(`view:$text`)&&o&&o.is(`view:$text`)?Us(a,o):Vs(i)}_breakAttributesRange(e,t=!1){let n=e.start,r=e.end;if(Ks(e,this.document),e.isCollapsed){let n=this._breakAttributes(e.start,t);return new R(n,n)}let i=this._breakAttributes(r,t),a=i.parent.childCount,o=this._breakAttributes(n,t);return i.offset+=i.parent.childCount-a,new R(o,i)}_breakAttributes(e,t=!1){let n=e.offset,r=e.parent;if(e.parent.is(`emptyElement`))throw new w(`view-writer-cannot-break-empty-element`,this.document);if(e.parent.is(`uiElement`))throw new w(`view-writer-cannot-break-ui-element`,this.document);if(e.parent.is(`rawElement`))throw new w(`view-writer-cannot-break-raw-element`,this.document);if(!t&&r.is(`$text`)&&Gs(r.parent)||Gs(r))return e.clone();if(r.is(`$text`))return this._breakAttributes(Hs(e),t);if(n==r.childCount){let e=new L(r.parent,r.index+1);return this._breakAttributes(e,t)}else if(n===0){let e=new L(r.parent,r.index);return this._breakAttributes(e,t)}else{let e=r.index+1,i=r._clone();r.parent._insertChild(e,i),this._addToClonedElementsGroup(i);let a=r.childCount-n,o=r._removeChildren(n,a);i._appendChild(o);let s=new L(r.parent,e);return this._breakAttributes(s,t)}}_addToClonedElementsGroup(e){if(!e.root.is(`rootElement`))return;if(e.is(`element`))for(let t of e.getChildren())this._addToClonedElementsGroup(t);let t=e.id;if(!t)return;let n=this._cloneGroups.get(t);n||(n=new Set,this._cloneGroups.set(t,n)),n.add(e),e._clonesGroup=n}_removeFromClonedElementsGroup(e){if(e.is(`element`))for(let t of e.getChildren())this._removeFromClonedElementsGroup(t);let t=e.id;if(!t)return;let n=this._cloneGroups.get(t);n&&n.delete(e)}};function zs(e){return Array.from(e.getChildren()).some(e=>!e.is(`uiElement`))}function Bs(e){let t=e.parent;for(;!Gs(t);){if(!t)return;t=t.parent}return t}function Nee(e,t){return e.priorityt.priority?!1:e.getIdentity()n instanceof e))throw new w(`view-writer-insert-invalid-node-type`,t);n.is(`$text`)||Ws(n.getChildren(),t)}}function Gs(e){return e&&(e.is(`containerElement`)||e.is(`documentFragment`))}function Ks(e,t){let n=Bs(e.start),r=Bs(e.end);if(!n||!r||n!==r)throw new w(`view-writer-invalid-range-container`,t)}function Fee(e){return xn(e)}const qs=e=>e.createTextNode(`\xA0`),Js=e=>{let t=e.createElement(`span`);return t.dataset.ckeFiller=`true`,t.innerText=`\xA0`,t},Ys=e=>{let t=e.createElement(`br`);return t.dataset.ckeFiller=`true`,t},Iee=7,Xs=`⁠`.repeat(7);function Zs(e){return typeof e==`string`?e.substr(0,7)===Xs:jr(e)&&e.data.substr(0,7)===Xs}function Qs(e){return e.data.length==7&&Zs(e)}function $s(e){let t=typeof e==`string`?e:e.data;return Zs(e)?t.slice(7):t}function ec(e){e.document.on(`arrowKey`,tc,{priority:`low`})}function tc(e,t){if(t.keyCode==k.arrowleft){let e=t.domTarget.ownerDocument.defaultView.getSelection();if(e.rangeCount==1&&e.getRangeAt(0).collapsed){let t=e.getRangeAt(0).startContainer,n=e.getRangeAt(0).startOffset;Zs(t)&&n<=7&&e.collapse(t,0)}}}const nc=D();var rc=class extends nc{domDocuments=new Set;domConverter;markedAttributes=new Set;markedChildren=new Set;markedTexts=new Set;selection;_inlineFiller=null;_fakeSelectionContainer=null;constructor(e,t){super(),this.domConverter=e,this.selection=t,this.set(`isFocused`,!1),this.set(`isSelecting`,!1),this.set(`isComposing`,!1),p.isBlink&&!p.isAndroid&&this.on(`change:isSelecting`,()=>{this.isSelecting||this.render()})}markToSync(e,t){if(e===`text`)this.domConverter.mapViewToDom(t.parent)&&this.markedTexts.add(t);else{if(!this.domConverter.mapViewToDom(t))return;if(e===`attributes`)this.markedAttributes.add(t);else if(e===`children`)this.markedChildren.add(t);else throw new w(`view-renderer-unknown-type`,this)}}render(){if(this.isComposing&&!p.isAndroid)return;let e=null,t=p.isBlink&&!p.isAndroid?!this.isSelecting:!0;for(let e of this.markedChildren)this._updateChildrenMappings(e);t?(this._inlineFiller&&!this._isSelectionInInlineFiller()&&this._removeInlineFiller(),this._inlineFiller?e=this._getInlineFillerPosition():this._needsInlineFillerAtSelection()&&(e=this.selection.getFirstPosition(),this.markedChildren.add(e.parent))):this._inlineFiller&&this._inlineFiller.parentNode&&(e=this.domConverter.domPositionToView(this._inlineFiller),e&&e.parent.is(`$text`)&&(e=L._createBefore(e.parent)));for(let e of this.markedAttributes)this._updateAttrs(e);for(let t of this.markedChildren)this._updateChildren(t,{inlineFillerPosition:e});for(let t of this.markedTexts)!this.markedChildren.has(t.parent)&&this.domConverter.mapViewToDom(t.parent)&&this._updateText(t,{inlineFillerPosition:e});if(t)if(e){let t=this.domConverter.viewPositionToDom(e),n=t.parent.ownerDocument;Zs(t.parent)?this._inlineFiller=t.parent:this._inlineFiller=ac(n,t.parent,t.offset)}else this._inlineFiller=null;this._updateFocus(),this._updateSelection(),this.domConverter._clearTemporaryCustomProperties(),this.markedTexts.clear(),this.markedAttributes.clear(),this.markedChildren.clear()}_updateChildrenMappings(e){let t=this.domConverter.mapViewToDom(e);if(!t)return;let n=Array.from(t.childNodes),r=Array.from(this.domConverter.viewChildrenToDom(e,{withChildren:!1})),i=this._diffNodeLists(n,r),a=this._findUpdateActions(i,n,r,oc);if(a.indexOf(`update`)!==-1){let t={equal:0,insert:0,delete:0};for(let i of a)if(i===`update`){let i=t.equal+t.insert,a=t.equal+t.delete,o=e.getChild(i);o&&!o.is(`uiElement`)&&!o.is(`rawElement`)&&this._updateElementMappings(o,n[a]),ei(r[i]),t.equal++}else t[i]++}}_updateElementMappings(e,t){this.domConverter.unbindDomElement(t),this.domConverter.bindElements(t,e),this.markedChildren.add(e),this.markedAttributes.add(e)}_getInlineFillerPosition(){let e=this.selection.getFirstPosition();return e.parent.is(`$text`)?L._createBefore(e.parent):e}_isSelectionInInlineFiller(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;let e=this.selection.getFirstPosition(),t=this.domConverter.viewPositionToDom(e);return!!(t&&jr(t.parent)&&Zs(t.parent))}_removeInlineFiller(){let e=this._inlineFiller;if(!Zs(e))throw new w(`view-renderer-filler-was-lost`,this);Qs(e)?e.remove():e.data=e.data.substr(7),this._inlineFiller=null}_needsInlineFillerAtSelection(){if(this.selection.rangeCount!=1||!this.selection.isCollapsed)return!1;let e=this.selection.getFirstPosition(),t=e.parent,n=e.offset;if(!this.domConverter.mapViewToDom(t.root)||!t.is(`element`)||!ic(t))return!1;let r=e.nodeBefore,i=e.nodeAfter;return!(r instanceof Oo||i instanceof Oo||n===t.getFillerOffset()&&(!r||!r.is(`element`,`br`))||p.isAndroid&&(r||i))}_updateText(e,t){let n=this.domConverter.findCorrespondingDomText(e),r=this.domConverter.viewToDom(e).data,i=t.inlineFillerPosition;i&&i.parent==e.parent&&i.offset==e.index&&(r=Xs+r),this._updateTextNode(n,r)}_updateAttrs(e){let t=this.domConverter.mapViewToDom(e);if(t){for(let n of Array.from(t.attributes)){let r=n.name;e.hasAttribute(r)||this.domConverter.removeDomElementAttribute(t,r)}for(let n of e.getAttributeKeys())this.domConverter.setDomElementAttribute(t,n,e.getAttribute(n),e)}}_updateChildren(e,t){let n=this.domConverter.mapViewToDom(e);if(!n)return;if(p.isAndroid){let e=null;for(let t of Array.from(n.childNodes)){if(e&&jr(e)&&jr(t)){n.normalize();break}e=t}}let r=t.inlineFillerPosition,i=n.childNodes,a=Array.from(this.domConverter.viewChildrenToDom(e,{bind:!0}));r&&r.parent===e&&ac(n.ownerDocument,a,r.offset);let o=this._diffNodeLists(i,a),s=this._findUpdateActions(o,i,a,sc),c=0,l=new Set;for(let e of s)e===`delete`?(l.add(i[c]),ei(i[c])):(e===`equal`||e===`update`)&&c++;c=0;for(let e of s)e===`insert`?(Kr(n,c,a[c]),c++):e===`update`?(this._updateTextNode(i[c],a[c].data),c++):e===`equal`&&(this._markDescendantTextToSync(this.domConverter.domToView(a[c])),c++);for(let e of l)e.parentNode||this.domConverter.unbindDomElement(e)}_diffNodeLists(e,t){return e=uc(e,this._fakeSelectionContainer),oe(e,t,cc.bind(null,this.domConverter))}_findUpdateActions(e,t,n,r){if(e.indexOf(`insert`)===-1||e.indexOf(`delete`)===-1)return e;let i=[],a=[],o=[],s={equal:0,insert:0,delete:0};for(let c of e)c===`insert`?o.push(n[s.equal+s.insert]):c===`delete`?a.push(t[s.equal+s.delete]):(i=i.concat(oe(a,o,r).map(e=>e===`equal`?`update`:e)),i.push(`equal`),a=[],o=[]),s[c]++;return i.concat(oe(a,o,r).map(e=>e===`equal`?`update`:e))}_updateTextNode(e,t){let n=e.data;n!=t&&(p.isAndroid&&this.isComposing&&n.replace(/\u00A0/g,` `)==t.replace(/\u00A0/g,` `)||this._updateTextNodeInternal(e,t))}_updateTextNodeInternal(e,t){let n=ne(e.data,t);for(let t of n)t.type===`insert`?e.insertData(t.index,t.values.join(``)):e.deleteData(t.index,t.howMany)}_markDescendantTextToSync(e){if(e){if(e.is(`$text`))this.markedTexts.add(e);else if(e.is(`element`))for(let t of e.getChildren())this._markDescendantTextToSync(t)}}_updateSelection(){if(p.isBlink&&!p.isAndroid&&this.isSelecting&&!this.markedChildren.size)return;if(this.selection.rangeCount===0){this._removeDomSelection(),this._removeFakeSelection();return}let e=this.domConverter.mapViewToDom(this.selection.editableElement);if(!this.isFocused||!e){!this.selection.isFake&&this._fakeSelectionContainer&&this._fakeSelectionContainer.isConnected&&this._removeFakeSelection();return}this.selection.isFake?this._updateFakeSelection(e):this._fakeSelectionContainer&&this._fakeSelectionContainer.isConnected?(this._removeFakeSelection(),this._updateDomSelection(e)):this.isComposing&&p.isAndroid||this._updateDomSelection(e)}_updateFakeSelection(e){let t=e.ownerDocument;this._fakeSelectionContainer||=dc(t);let n=this._fakeSelectionContainer;if(this.domConverter.bindFakeSelection(n,this.selection),!this._fakeSelectionNeedsUpdate(e))return;(!n.parentElement||n.parentElement!=e)&&e.appendChild(n),n.textContent=this.selection.fakeSelectionLabel||`\xA0`;let r=t.getSelection(),i=t.createRange();r.removeAllRanges(),i.selectNodeContents(n),r.addRange(i)}_updateDomSelection(e){let t=e.ownerDocument.defaultView.getSelection();if(!this._domSelectionNeedsUpdate(t))return;let n=this.domConverter.viewPositionToDom(this.selection.anchor),r=this.domConverter.viewPositionToDom(this.selection.focus);t.setBaseAndExtent(n.parent,n.offset,r.parent,r.offset),p.isGecko&&lc(r,t)}_domSelectionNeedsUpdate(e){if(!this.domConverter.isDomSelectionCorrect(e))return!0;let t=e&&this.domConverter.domSelectionToView(e);return!(t&&this.selection.isEqual(t)||!this.selection.isCollapsed&&this.selection.isSimilar(t))}_fakeSelectionNeedsUpdate(e){let t=this._fakeSelectionContainer,n=e.ownerDocument.getSelection();return!t||t.parentElement!==e||n.anchorNode!==t&&!t.contains(n.anchorNode)?!0:t.textContent!==this.selection.fakeSelectionLabel}_removeDomSelection(){for(let e of this.domDocuments){let t=e.getSelection();if(t.rangeCount){let n=e.activeElement,r=this.domConverter.mapDomToView(n);n&&r&&t.removeAllRanges()}}}_removeFakeSelection(){let e=this._fakeSelectionContainer;e&&e.remove()}_updateFocus(){if(this.isFocused){let e=this.selection.editableElement;e&&this.domConverter.focus(e)}}};function ic(e){if(e.getAttribute(`contenteditable`)==`false`)return!1;let t=e.findAncestor(e=>e.hasAttribute(`contenteditable`));return!t||t.getAttribute(`contenteditable`)==`true`}function ac(e,t,n){let r=t instanceof Array?t:t.childNodes,i=r[n];if(jr(i))return i.data=Xs+i.data,i;{let i=e.createTextNode(Xs);return Array.isArray(t)?r.splice(n,0,i):Kr(t,n,i),i}}function oc(e,t){return vr(e)&&vr(t)&&!jr(e)&&!jr(t)&&!qr(e)&&!qr(t)&&e.tagName.toLowerCase()===t.tagName.toLowerCase()}function sc(e,t){return vr(e)&&vr(t)&&jr(e)&&jr(t)}function cc(e,t,n){return t===n?!0:jr(t)&&jr(n)?t.data===n.data:!!(e.isBlockFiller(t)&&e.isBlockFiller(n))}function lc(e,t){let n=e.parent,r=e.offset;if(jr(n)&&Qs(n)&&(r=Gr(n)+1,n=n.parentNode),n.nodeType!=Node.ELEMENT_NODE||r!=n.childNodes.length-1)return;let i=n.childNodes[r];i&&i.tagName==`BR`&&t.addRange(t.getRangeAt(0))}function uc(e,t){let n=Array.from(e);return n.length==0||!t||n[n.length-1]==t&&n.pop(),n}function dc(e){let t=e.createElement(`div`);return t.className=`ck-fake-selection-container`,Object.assign(t.style,{position:`fixed`,top:0,left:`-9999px`,width:`42px`}),t.textContent=`\xA0`,t}const fc=Ys(u.document),pc=qs(u.document),mc=Js(u.document),hc=`data-ck-unsafe-attribute-`,gc=`data-ck-unsafe-element`;var _c=class{document;renderingMode;blockFillerMode;preElements;blockElements;inlineObjectElements;unsafeElements;_domDocument;_domToViewMapping=new WeakMap;_viewToDomMapping=new WeakMap;_fakeSelectionMapping=new WeakMap;_rawContentElementMatcher=new Po;_inlineObjectElementMatcher=new Po;_elementsWithTemporaryCustomProperties=new Set;constructor(e,{blockFillerMode:t,renderingMode:n=`editing`}={}){this.document=e,this.renderingMode=n,this.blockFillerMode=t||(n===`editing`?`br`:`nbsp`),this.preElements=[`pre`,`textarea`],this.blockElements=`address.article.aside.blockquote.caption.center.dd.details.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hgroup.legend.li.main.menu.nav.ol.p.pre.section.summary.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`),this.inlineObjectElements=[`object`,`iframe`,`input`,`button`,`textarea`,`select`,`option`,`video`,`embed`,`audio`,`img`,`canvas`],this.unsafeElements=[`script`,`style`],this._domDocument=this.renderingMode===`editing`?u.document:u.document.implementation.createHTMLDocument(``)}get domDocument(){return this._domDocument}bindFakeSelection(e,t){this._fakeSelectionMapping.set(e,new os(t))}fakeSelectionToView(e){return this._fakeSelectionMapping.get(e)}bindElements(e,t){this._domToViewMapping.set(e,t),this._viewToDomMapping.set(t,e)}unbindDomElement(e){let t=this._domToViewMapping.get(e);if(t){this._domToViewMapping.delete(e),this._viewToDomMapping.delete(t);for(let t of e.children)this.unbindDomElement(t)}}bindDocumentFragments(e,t){this._domToViewMapping.set(e,t),this._viewToDomMapping.set(t,e)}shouldRenderAttribute(e,t,n){return this.renderingMode===`data`?!0:(e=e.toLowerCase(),e.startsWith(`on`)||e===`srcdoc`?!1:n===`img`&&(e===`src`||e===`srcset`)||n===`source`&&e===`srcset`?!0:!t.replace(/\s+/g,``).match(/^(javascript:|data:(image\/svg|text\/x?html))/i))}setContentOf(e,t){if(this.renderingMode===`data`){e.innerHTML=t;return}let n=new DOMParser().parseFromString(t,`text/html`),r=n.createDocumentFragment(),i=n.body.childNodes;for(;i.length>0;)r.appendChild(i[0]);let a=n.createTreeWalker(r,NodeFilter.SHOW_ELEMENT),o=[],s;for(;s=a.nextNode();)o.push(s);for(let e of o){for(let t of e.getAttributeNames())this.setDomElementAttribute(e,t,e.getAttribute(t));let t=e.tagName.toLowerCase();this._shouldRenameElement(t)&&(Ec(t),e.replaceWith(this._createReplacementDomElement(t,e)))}for(;e.firstChild;)e.firstChild.remove();e.append(r)}viewToDom(e,t={}){if(e.is(`$text`)){let t=this._processDataFromViewText(e);return this._domDocument.createTextNode(t)}else{let n=e;if(this.mapViewToDom(n))if(n.getCustomProperty(`editingPipeline:doNotReuseOnce`))this._elementsWithTemporaryCustomProperties.add(n);else return this.mapViewToDom(n);let r;if(n.is(`documentFragment`))r=this._domDocument.createDocumentFragment(),t.bind&&this.bindDocumentFragments(r,n);else if(n.is(`uiElement`))return r=n.name===`$comment`?this._domDocument.createComment(n.getCustomProperty(`$rawContent`)):n.render(this._domDocument,this),t.bind&&this.bindElements(r,n),r;else{this._shouldRenameElement(n.name)?(Ec(n.name),r=this._createReplacementDomElement(n.name)):r=n.hasAttribute(`xmlns`)?this._domDocument.createElementNS(n.getAttribute(`xmlns`),n.name):this._domDocument.createElement(n.name),n.is(`rawElement`)&&n.render(r,this),t.bind&&this.bindElements(r,n);for(let e of n.getAttributeKeys())this.setDomElementAttribute(r,e,n.getAttribute(e),n)}if(t.withChildren!==!1)for(let e of this.viewChildrenToDom(n,t))r instanceof HTMLTemplateElement?r.content.appendChild(e):r.appendChild(e);return r}}setDomElementAttribute(e,t,n,r){let i=this.shouldRenderAttribute(t,n,e.tagName.toLowerCase())||r&&r.shouldRenderUnsafeAttribute(t);if(i||T(`domconverter-unsafe-attribute-detected`,{domElement:e,key:t,value:n}),!Jr(t)){T(`domconverter-invalid-attribute-detected`,{domElement:e,key:t,value:n});return}e.hasAttribute(t)&&!i?e.removeAttribute(t):e.hasAttribute(hc+t)&&i&&e.removeAttribute(hc+t),e.setAttribute(i?t:hc+t,n)}removeDomElementAttribute(e,t){t!=gc&&(e.removeAttribute(t),e.removeAttribute(hc+t))}*viewChildrenToDom(e,t={}){let n=e.getFillerOffset&&e.getFillerOffset(),r=0;for(let i of e.getChildren()){n===r&&(yield this._getBlockFiller());let e=i.is(`element`)&&!!i.getCustomProperty(`dataPipeline:transparentRendering`)&&!j(i.getAttributes());if(e&&this.renderingMode==`data`)if(i.is(`rawElement`)){let e=this._domDocument.createElement(i.name);i.render(e,this),yield*[...e.childNodes]}else yield*this.viewChildrenToDom(i,t);else e&&T(`domconverter-transparent-rendering-unsupported-in-editing-pipeline`,{viewElement:i}),yield this.viewToDom(i,t);r++}n===r&&(yield this._getBlockFiller())}viewRangeToDom(e){let t=this.viewPositionToDom(e.start),n=this.viewPositionToDom(e.end),r=this._domDocument.createRange();return r.setStart(t.parent,t.offset),r.setEnd(n.parent,n.offset),r}viewPositionToDom(e){let t=e.parent;if(t.is(`$text`)){let n=this.findCorrespondingDomText(t);if(!n)return null;let r=e.offset;return Zs(n)&&(r+=7),n.data&&r>n.data.length&&(r=n.data.length),{parent:n,offset:r}}else{let n,r,i;if(e.offset===0){if(n=this.mapViewToDom(t),!n)return null;i=n.childNodes[0]}else{let t=e.nodeBefore;if(r=t.is(`$text`)?this.findCorrespondingDomText(t):this.mapViewToDom(t),!r)return null;n=r.parentNode,i=r.nextSibling}if(jr(i)&&Zs(i))return{parent:i,offset:7};let a=r?Gr(r)+1:0;return{parent:n,offset:a}}}domToView(e,t={}){let n=[],r=this._domToView(e,t,n),i=r.next().value;return!i||(r.next(),this._processDomInlineNodes(null,n,t),this.blockFillerMode==`br`&&wc(i))||i.is(`$text`)&&i.data.length==0?null:i}*domChildrenToView(e,t={},n=[]){let r=[];r=e instanceof HTMLTemplateElement?[...e.content.childNodes]:[...e.childNodes];for(let i=0;i{let{scrollLeft:t,scrollTop:n}=e;i.push([t,n])}),t.focus({preventScroll:!0}),yc(t,e=>{let[t,n]=i.shift();e.scrollLeft=t,e.scrollTop=n}),u.window.scrollTo(n,r)}_clearDomSelection(){let e=this.mapViewToDom(this.document.selection.editableElement);if(!e)return;let t=e.ownerDocument.defaultView.getSelection(),n=this.domSelectionToView(t);n&&n.rangeCount>0&&t.removeAllRanges()}isElement(e){return e&&e.nodeType==Node.ELEMENT_NODE}isDocumentFragment(e){return e&&e.nodeType==Node.DOCUMENT_FRAGMENT_NODE}isBlockFiller(e){return this.blockFillerMode==`br`?e.isEqualNode(fc):Tc(e,this.blockElements)?!0:e.isEqualNode(mc)||bc(e,this.blockElements)}isDomSelectionBackward(e){if(e.isCollapsed)return!1;let t=this._domDocument.createRange();try{t.setStart(e.anchorNode,e.anchorOffset),t.setEnd(e.focusNode,e.focusOffset)}catch{return!1}let n=t.collapsed;return t.detach(),n}getHostViewElement(e){let t=Tr(e);for(t.pop();t.length;){let e=t.pop(),n=this._domToViewMapping.get(e);if(n&&(n.is(`uiElement`)||n.is(`rawElement`)))return n}return null}isDomSelectionCorrect(e){return this._isDomSelectionPositionCorrect(e.anchorNode,e.anchorOffset)&&this._isDomSelectionPositionCorrect(e.focusNode,e.focusOffset)}registerRawContentMatcher(e){this._rawContentElementMatcher.add(e)}registerInlineObjectMatcher(e){this._inlineObjectElementMatcher.add(e)}_clearTemporaryCustomProperties(){for(let e of this._elementsWithTemporaryCustomProperties)e._removeCustomProperty(`editingPipeline:doNotReuseOnce`);this._elementsWithTemporaryCustomProperties.clear()}_getBlockFiller(){switch(this.blockFillerMode){case`nbsp`:return qs(this._domDocument);case`markedNbsp`:return Js(this._domDocument);case`br`:return Ys(this._domDocument)}}_isDomSelectionPositionCorrect(e,t){if(jr(e)&&Zs(e)&&t<7||this.isElement(e)&&Zs(e.childNodes[t]))return!1;let n=this.mapDomToView(e);return!(n&&(n.is(`uiElement`)||n.is(`rawElement`)))}*_domToView(e,t,n){if(this.blockFillerMode!=`br`&&Tc(e,this.blockElements))return null;let r=this.getHostViewElement(e);if(r)return r;if(qr(e)&&t.skipComments)return null;if(jr(e)){if(Qs(e))return null;{let t=e.data;if(t===``)return null;let r=new Oo(this.document,t);return n.push(r),r}}else{let r=this.mapDomToView(e);if(r)return this._isInlineObjectElement(r)&&n.push(r),r;if(this.isDocumentFragment(e))r=new Is(this.document),t.bind&&this.bindDocumentFragments(e,r);else{r=this._createViewElement(e,t),t.bind&&this.bindElements(e,r);let i=e.attributes;if(i)for(let e=i.length,t=0;t0?t[e-1]:null,c=e+1e.is(`element`)&&t.includes(e.name))}function yc(e,t){let n=e;for(;n;)t(n),n=n.parentElement}function bc(e,t){return e.isEqualNode(pc)&&xc(e,t)&&e.parentNode.childNodes.length===1}function xc(e,t){let n=e.parentNode;return!!n&&!!n.tagName&&t.includes(n.tagName.toLowerCase())}function Sc(e,t,n){return t==`\xA0`&&e&&e.is(`element`)&&e.childCount==1&&n.includes(e.name)}function Cc(e,t){return t==`\xA0`&&e&&e.is(`element`,`span`)&&e.childCount==1&&e.hasAttribute(`data-cke-filler`)}function wc(e){return e.is(`element`,`br`)&&e.hasAttribute(`data-cke-filler`)}function Tc(e,t){return e.tagName===`BR`&&xc(e,t)&&e.parentNode.childNodes.length===1}function Ec(e){e===`script`&&T(`domconverter-unsafe-script-element-detected`),e===`style`&&T(`domconverter-unsafe-style-element-detected`)}function Dc(e){if(!p.isGecko||!e.rangeCount)return!1;let t=e.getRangeAt(0).startContainer;try{Object.prototype.toString.call(t)}catch{return!0}return!1}const Oc=br();var kc=class extends Oc{view;document;_isEnabled=!1;constructor(e){super(),this.view=e,this.document=e.document}get isEnabled(){return this._isEnabled}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}destroy(){this.disable(),this.stopListening()}checkShouldIgnoreEventFromTarget(e){return e&&e.nodeType===3&&(e=e.parentNode),!e||e.nodeType!==1?!1:e.matches(`[data-cke-ignore-events], [data-cke-ignore-events] *`)}},Ac=class{view;document;domEvent;domTarget;constructor(e,t,n){this.view=e,this.document=e.document,this.domEvent=t,this.domTarget=t.target,fn(this,n)}get target(){return this.view.domConverter.mapDomToView(this.domTarget)}preventDefault(){this.domEvent.preventDefault()}stopPropagation(){this.domEvent.stopPropagation()}},jc=class extends kc{useCapture=!1;usePassive=!1;observe(e){(typeof this.domEventType==`string`?[this.domEventType]:this.domEventType).forEach(t=>{this.listenTo(e,t,(e,t)=>{this.isEnabled&&!this.checkShouldIgnoreEventFromTarget(t.target)&&this.onDomEvent(t)},{useCapture:this.useCapture,usePassive:this.usePassive})})}stopObserving(e){this.stopListening(e)}fire(e,t,n){this.isEnabled&&this.document.fire(e,new Ac(this.view,t,n))}},Mc=class extends jc{domEventType=[`keydown`,`keyup`];onDomEvent(e){let t={keyCode:e.keyCode,altKey:e.altKey,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,metaKey:e.metaKey,get keystroke(){return vi(this)}};this.fire(e.type,e,t)}},Nc=class extends kc{_fireSelectionChangeDoneDebounced;constructor(e){super(e),this._fireSelectionChangeDoneDebounced=Kt(e=>{this.document.fire(`selectionChangeDone`,e)},200)}observe(){let e=this.document;e.on(`arrowKey`,(t,n)=>{e.selection.isFake&&this.isEnabled&&n.preventDefault()},{context:`$capture`}),e.on(`arrowKey`,(t,n)=>{e.selection.isFake&&this.isEnabled&&this._handleSelectionMove(n.keyCode)},{priority:`lowest`})}stopObserving(){}destroy(){super.destroy(),this._fireSelectionChangeDoneDebounced.cancel()}_handleSelectionMove(e){let t=this.document.selection,n=new os(t.getRanges(),{backward:t.isBackward,fake:!1});(e==k.arrowleft||e==k.arrowup)&&n.setTo(n.getFirstPosition()),(e==k.arrowright||e==k.arrowdown)&&n.setTo(n.getLastPosition());let r={oldSelection:t,newSelection:n,domSelection:null};this.document.fire(`selectionChange`,r),this._fireSelectionChangeDoneDebounced(r)}},Pc=class extends kc{domConverter;_config;_domElements;_mutationObserver;constructor(e){super(e),this._config={childList:!0,characterData:!0,subtree:!0},this.domConverter=e.domConverter,this._domElements=new Set,this._mutationObserver=new window.MutationObserver(this._onMutations.bind(this))}flush(){this._onMutations(this._mutationObserver.takeRecords())}observe(e){this._domElements.add(e),this.isEnabled&&this._mutationObserver.observe(e,this._config)}stopObserving(e){if(this._domElements.delete(e),this.isEnabled){this._mutationObserver.disconnect();for(let e of this._domElements)this._mutationObserver.observe(e,this._config)}}enable(){super.enable();for(let e of this._domElements)this._mutationObserver.observe(e,this._config)}disable(){super.disable(),this._mutationObserver.disconnect()}destroy(){super.destroy(),this._mutationObserver.disconnect()}_onMutations(e){if(e.length===0)return;let t=this.domConverter,n=new Set,r=new Set;for(let n of e){let e=t.mapDomToView(n.target);e&&(e.is(`uiElement`)||e.is(`rawElement`)||n.type===`childList`&&!this._isBogusBrMutation(n)&&r.add(e))}for(let i of e){let e=t.mapDomToView(i.target);if(!(e&&(e.is(`uiElement`)||e.is(`rawElement`)))&&i.type===`characterData`){let e=t.findCorrespondingViewText(i.target);e&&!r.has(e.parent)?n.add(e):!e&&Zs(i.target)&&r.add(t.mapDomToView(i.target.parentNode))}}let i=[];for(let e of n)i.push({type:`text`,node:e});for(let e of r){let n=t.mapViewToDom(e);Pn(Array.from(e.getChildren()),Array.from(t.domChildrenToView(n,{withChildren:!1})),Fc)||i.push({type:`children`,node:e})}i.length&&this.document.fire(`mutations`,{mutations:i})}_isBogusBrMutation(e){let t=null;return e.nextSibling===null&&e.removedNodes.length===0&&e.addedNodes.length==1&&(t=this.domConverter.domToView(e.addedNodes[0],{withChildren:!1})),t&&t.is(`element`,`br`)}};function Fc(e,t){if(!Array.isArray(e))return e===t?!0:e.is(`$text`)&&t.is(`$text`)?e.data===t.data:!1}var Ic=class extends jc{_renderTimeoutId=null;_isFocusChanging=!1;domEventType=[`focus`,`blur`];constructor(e){super(e),this.useCapture=!0;let t=this.document;t.on(`focus`,()=>this._handleFocus()),t.on(`blur`,(e,t)=>this._handleBlur(t)),t.on(`beforeinput`,()=>{t.isFocused||this._handleFocus()},{priority:`highest`})}flush(){this._isFocusChanging&&(this._isFocusChanging=!1,this.document.isFocused=!0)}onDomEvent(e){this.fire(e.type,e)}destroy(){this._clearTimeout(),super.destroy()}_handleFocus(){this._clearTimeout(),this._isFocusChanging=!0,this._renderTimeoutId=setTimeout(()=>{this._renderTimeoutId=null,this.flush(),this.view.change(()=>{})},50)}_handleBlur(e){let t=this.document.selection.editableElement;(t===null||t===e.target)&&(this.document.isFocused=!1,this._isFocusChanging=!1,this.view.change(()=>{}))}_clearTimeout(){this._renderTimeoutId&&=(clearTimeout(this._renderTimeoutId),null)}},Lc=class extends kc{mutationObserver;focusObserver;selection;domConverter;_documents=new WeakSet;_fireSelectionChangeDoneDebounced;_clearInfiniteLoopInterval;_documentIsSelectingInactivityTimeoutDebounced;_loopbackCounter=0;_pendingSelectionChange=new Set;constructor(e){super(e),this.mutationObserver=e.getObserver(Pc),this.focusObserver=e.getObserver(Ic),this.selection=this.document.selection,this.domConverter=e.domConverter,this._fireSelectionChangeDoneDebounced=Kt(e=>{this.document.fire(`selectionChangeDone`,e)},200),this._clearInfiniteLoopInterval=setInterval(()=>this._clearInfiniteLoop(),1e3),this._documentIsSelectingInactivityTimeoutDebounced=Kt(()=>this.document.isSelecting=!1,5e3),this.view.document.on(`change:isFocused`,(e,t,n)=>{if(n&&this._pendingSelectionChange.size){for(let e of Array.from(this._pendingSelectionChange))this._handleSelectionChange(e);this._pendingSelectionChange.clear()}})}observe(e){let t=e.ownerDocument,n=()=>{this.document.isSelecting=!0,this._documentIsSelectingInactivityTimeoutDebounced()},r=()=>{this.document.isSelecting&&(this._handleSelectionChange(t),this.document.isSelecting=!1,this._documentIsSelectingInactivityTimeoutDebounced.cancel())};this.listenTo(e,`selectstart`,n,{priority:`highest`}),this.listenTo(e,`keydown`,r,{priority:`highest`,useCapture:!0}),this.listenTo(e,`keyup`,r,{priority:`highest`,useCapture:!0}),!this._documents.has(t)&&(this.listenTo(t,`mouseup`,r,{priority:`highest`,useCapture:!0}),this.listenTo(t,`selectionchange`,()=>{this.document.isComposing&&!p.isAndroid||(this._handleSelectionChange(t),this._documentIsSelectingInactivityTimeoutDebounced())}),this.listenTo(this.view.document,`compositionstart`,()=>{this._handleSelectionChange(t)},{priority:`lowest`}),this._documents.add(t))}stopObserving(e){this.stopListening(e)}destroy(){super.destroy(),clearInterval(this._clearInfiniteLoopInterval),this._fireSelectionChangeDoneDebounced.cancel(),this._documentIsSelectingInactivityTimeoutDebounced.cancel()}_reportInfiniteLoop(){}_handleSelectionChange(e){if(!this.isEnabled)return;let t=e.defaultView.getSelection();if(this.checkShouldIgnoreEventFromTarget(t.anchorNode))return;this.mutationObserver.flush();let n=this.domConverter.domSelectionToView(t);if(n.rangeCount==0){this.view.hasDomSelection=!1;return}if(this.view.hasDomSelection=!0,this.focusObserver.flush(),!this.view.document.isFocused&&!this.view.document.isReadOnly){this._pendingSelectionChange.add(e);return}if(this._pendingSelectionChange.delete(e),!(this.selection.isEqual(n)&&this.domConverter.isDomSelectionCorrect(t))){if(++this._loopbackCounter>60){this._reportInfiniteLoop();return}if(!Rc(n))this.view.forceRender();else if(this.selection.isSimilar(n))this.view.forceRender();else{let e={oldSelection:this.selection,newSelection:n,domSelection:t};this.document.fire(`selectionChange`,e),this._fireSelectionChangeDoneDebounced(e)}}}_clearInfiniteLoop(){this._loopbackCounter=0}};function Rc(e){return Array.from(e.getRanges()).flatMap(e=>[e.start.root,e.end.root]).every(e=>e&&e.is(`rootElement`))}var zc=class extends jc{domEventType=[`compositionstart`,`compositionupdate`,`compositionend`];constructor(e){super(e);let t=this.document;t.on(`compositionstart`,()=>{t.isComposing=!0}),t.on(`compositionend`,()=>{t.isComposing=!1})}onDomEvent(e){this.fire(e.type,e,{data:e.data})}},Bc=class{_files;_native;constructor(e,t={}){this._files=t.cacheFiles?Vc(e):null,this._native=e}get files(){return this._files||=Vc(this._native),this._files}get types(){return this._native.types}getData(e){return this._native.getData(e)}setData(e,t){this._native.setData(e,t)}set effectAllowed(e){this._native.effectAllowed=e}get effectAllowed(){return this._native.effectAllowed}set dropEffect(e){this._native.dropEffect=e}get dropEffect(){return this._native.dropEffect}setDragImage(e,t,n){this._native.setDragImage(e,t,n)}get isCanceled(){return this._native.dropEffect==`none`||!!this._native.mozUserCancelled}};function Vc(e){let t=Array.from(e.files||[]),n=Array.from(e.items||[]);return t.length?t:n.filter(e=>e.kind===`file`).map(e=>e.getAsFile())}var Hc=class extends jc{domEventType=`beforeinput`;onDomEvent(e){let t=e.getTargetRanges(),n=this.view,r=n.document,i=null,a=null,o=[];if(e.dataTransfer&&(i=new Bc(e.dataTransfer)),e.data===null?i&&(a=i.getData(`text/plain`)):a=e.data,r.selection.isFake)o=Array.from(r.selection.getRanges()),e.preventDefault();else if(t.length)o=t.map(t=>{let r=n.domConverter.domPositionToView(t.startContainer,t.startOffset),i=n.domConverter.domPositionToView(t.endContainer,t.endOffset);if(r&&Zs(t.startContainer)&&t.startOffset<7){e.preventDefault();let n=7-t.startOffset;r=r.getLastMatchingPosition(e=>!!(e.item.is(`attributeElement`)||e.item.is(`uiElement`)||e.item.is(`$textProxy`)&&n--),{direction:`backward`,singleCharacters:!0})}if(Uc(t.endContainer,t.endOffset)&&e.preventDefault(),r)return n.createRange(r,i);if(i)return n.createRange(i)}).filter(e=>!!e);else if(p.isAndroid){let t=e.target.ownerDocument.defaultView.getSelection();o=Array.from(n.domConverter.domSelectionToView(t).getRanges())}if(p.isAndroid&&e.inputType==`insertCompositionText`&&a&&a.endsWith(` -`)){this.fire(e.type,e,{inputType:`insertParagraph`,targetRanges:[n.createRange(o[0].end)]});return}if([`insertText`,`insertReplacementText`].includes(e.inputType)&&a&&a.includes(` -`)){let t=a.split(/\n{1,2}/g),n=o;e.preventDefault();for(let a=0;a{if(this.isEnabled&&xi(t.keyCode)){let n=new ls(this.document,`arrowKey`,this.document.selection.getFirstRange());this.document.fire(n,t),n.stop.called&&e.stop()}})}observe(){}stopObserving(){}},Gc=class extends kc{constructor(e){super(e);let t=this.document;t.on(`keydown`,(e,n)=>{if(!this.isEnabled||n.keyCode!=k.tab||n.ctrlKey)return;let r=new ls(t,`tab`,t.selection.getFirstRange());t.fire(r,n),r.stop.called&&e.stop()})}observe(){}stopObserving(){}};const Kc=D();var qc=class extends Kc{document;domConverter;domRoots=new Map;_renderer;_initialDomRootAttributes=new WeakMap;_observers=new Map;_writer;_ongoingChange=!1;_postFixersInProgress=!1;_renderingDisabled=!1;_hasChangedSinceTheLastRendering=!1;constructor(e){super(),this.document=new Cs(e),this.domConverter=new _c(this.document),this.set(`isRenderingInProgress`,!1),this.set(`hasDomSelection`,!1),this._renderer=new rc(this.domConverter,this.document.selection),this._renderer.bind(`isFocused`,`isSelecting`,`isComposing`).to(this.document,`isFocused`,`isSelecting`,`isComposing`),this._writer=new Rs(this.document),this.addObserver(Pc),this.addObserver(Ic),this.addObserver(Lc),this.addObserver(Mc),this.addObserver(Nc),this.addObserver(zc),this.addObserver(Wc),this.addObserver(Hc),this.addObserver(Gc),ec(this),As(this),this.on(`render`,()=>{this._render(),this.document.fire(`layoutChanged`),this._hasChangedSinceTheLastRendering=!1}),this.listenTo(this.document.selection,`change`,()=>{this._hasChangedSinceTheLastRendering=!0}),this.listenTo(this.document,`change:isFocused`,()=>{this._hasChangedSinceTheLastRendering=!0}),p.isiOS&&this.listenTo(this.document,`blur`,(e,t)=>{this.domConverter.mapDomToView(t.domEvent.relatedTarget)||this.domConverter._clearDomSelection()}),this.listenTo(this.document,`mutations`,(e,{mutations:t})=>{t.forEach(e=>this._renderer.markToSync(e.type,e.node))},{priority:`low`}),this.listenTo(this.document,`mutations`,()=>{this.forceRender()},{priority:`lowest`})}attachDomRoot(e,t=`main`){let n=this.document.getRoot(t);n._name=e.tagName.toLowerCase();let r={};for(let{name:t,value:i}of Array.from(e.attributes))r[t]=i,t===`class`?this._writer.addClass(i.split(` `),n):n.hasAttribute(t)||this._writer.setAttribute(t,i,n);this._initialDomRootAttributes.set(e,r);let i=()=>{this._writer.setAttribute(`contenteditable`,(!n.isReadOnly).toString(),n),n.isReadOnly?this._writer.addClass(`ck-read-only`,n):this._writer.removeClass(`ck-read-only`,n)};i(),this.domRoots.set(t,e),this.domConverter.bindElements(e,n),this._renderer.markToSync(`children`,n),this._renderer.markToSync(`attributes`,n),this._renderer.domDocuments.add(e.ownerDocument),n.on(`change:children`,(e,t)=>this._renderer.markToSync(`children`,t)),n.on(`change:attributes`,(e,t)=>this._renderer.markToSync(`attributes`,t)),n.on(`change:text`,(e,t)=>this._renderer.markToSync(`text`,t)),n.on(`change:isReadOnly`,()=>this.change(i)),n.on(`change`,()=>{this._hasChangedSinceTheLastRendering=!0});for(let n of this._observers.values())n.observe(e,t)}detachDomRoot(e){let t=this.domRoots.get(e);Array.from(t.attributes).forEach(({name:e})=>t.removeAttribute(e));let n=this._initialDomRootAttributes.get(t);for(let e in n)t.setAttribute(e,n[e]);this.domRoots.delete(e),this.domConverter.unbindDomElement(t);for(let e of this._observers.values())e.stopObserving(t)}getDomRoot(e=`main`){return this.domRoots.get(e)}addObserver(e){let t=this._observers.get(e);if(t)return t;t=new e(this),this._observers.set(e,t);for(let[e,n]of this.domRoots)t.observe(n,e);return t.enable(),t}getObserver(e){return this._observers.get(e)}disableObservers(){for(let e of this._observers.values())e.disable()}enableObservers(){for(let e of this._observers.values())e.enable()}scrollToTheSelection({alignToTop:e,forceScroll:t,viewportOffset:n=20,ancestorOffset:r=20}={}){let i=this.document.selection.getFirstRange();if(!i)return;let a=Rt({alignToTop:e,forceScroll:t,viewportOffset:n,ancestorOffset:r});typeof n==`number`&&(n={top:n,bottom:n,left:n,right:n});let o={target:this.domConverter.viewRangeToDom(i),viewportOffset:n,ancestorOffset:r,alignToTop:e,forceScroll:t};this.fire(`scrollToTheSelection`,o,a),ni(o)}focus(){if(!this.document.isFocused){let e=this.document.selection.editableElement;e&&(this.domConverter.focus(e),this.forceRender())}}change(e){if(this.isRenderingInProgress||this._postFixersInProgress)throw new w(`cannot-change-view-tree`,this);try{if(this._ongoingChange)return e(this._writer);this._ongoingChange=!0;let t=e(this._writer);return this._ongoingChange=!1,!this._renderingDisabled&&this._hasChangedSinceTheLastRendering&&(this._postFixersInProgress=!0,this.document._callPostFixers(this._writer),this._postFixersInProgress=!1,this.fire(`render`)),t}catch(e){w.rethrowUnexpectedError(e,this)}}forceRender(){this._hasChangedSinceTheLastRendering=!0,this.getObserver(Ic).flush(),this.change(()=>{})}destroy(){for(let e of this._observers.values())e.destroy();this.document.destroy(),this.stopListening()}createPositionAt(e,t){return L._createAt(e,t)}createPositionAfter(e){return L._createAfter(e)}createPositionBefore(e){return L._createBefore(e)}createRange(e,t){return new R(e,t)}createRangeOn(e){return R._createOn(e)}createRangeIn(e){return R._createIn(e)}createSelection(...e){return new os(...e)}_disableRendering(e){this._renderingDisabled=e,e==0&&this.change(()=>{})}_render(){this.isRenderingInProgress=!0,this.disableObservers(),this._renderer.render(),this.enableObservers(),this.isRenderingInProgress=!1}},Jc=class{is(){throw Error(`is() method is abstract`)}},Yc=class extends Jc{textNode;data;offsetInText;constructor(e,t,n){if(super(),this.textNode=e,t<0||t>e.offsetSize)throw new w(`model-textproxy-wrong-offsetintext`,this);if(n<0||t+n>e.offsetSize)throw new w(`model-textproxy-wrong-length`,this);this.data=e.data.substring(t,t+n),this.offsetInText=t}get startOffset(){return this.textNode.startOffset===null?null:this.textNode.startOffset+this.offsetInText}get offsetSize(){return this.data.length}get endOffset(){return this.startOffset===null?null:this.startOffset+this.offsetSize}get isPartial(){return this.offsetSize!==this.textNode.offsetSize}get parent(){return this.textNode.parent}get root(){return this.textNode.root}getPath(){let e=this.textNode.getPath();return e.length>0&&(e[e.length-1]+=this.offsetInText),e}getAncestors(e={}){let t=[],n=e.includeSelf?this:this.parent;for(;n;)t[e.parentFirst?`push`:`unshift`](n),n=n.parent;return t}hasAttribute(e){return this.textNode.hasAttribute(e)}getAttribute(e){return this.textNode.getAttribute(e)}getAttributes(){return this.textNode.getAttributes()}getAttributeKeys(){return this.textNode.getAttributeKeys()}};Yc.prototype.is=function(e){return e===`$textProxy`||e===`model:$textProxy`||e===`textProxy`||e===`model:textProxy`};var Xc=class{direction;boundaries;singleCharacters;shallow;ignoreElementEnd;_position;_boundaryStartParent;_boundaryEndParent;_visitedParent;constructor(e){if(!e||!e.boundaries&&!e.startPosition)throw new w(`model-tree-walker-no-start-position`,null);let t=e.direction||`forward`;if(t!=`forward`&&t!=`backward`)throw new w(`model-tree-walker-unknown-direction`,e,{direction:t});this.direction=t,this.boundaries=e.boundaries||null,e.startPosition?this._position=e.startPosition.clone():this._position=z._createAt(this.boundaries[this.direction==`backward`?`end`:`start`]),this.position.stickiness=`toNone`,this.singleCharacters=!!e.singleCharacters,this.shallow=!!e.shallow,this.ignoreElementEnd=!!e.ignoreElementEnd,this._boundaryStartParent=this.boundaries?this.boundaries.start.parent:null,this._boundaryEndParent=this.boundaries?this.boundaries.end.parent:null,this._visitedParent=this.position.parent}[Symbol.iterator](){return this}get position(){return this._position}skip(e){let t,n,r,i;do r=this.position,i=this._visitedParent,{done:t,value:n}=this.next();while(!t&&e(n));t||(this._position=r,this._visitedParent=i)}jumpTo(e){this._boundaryStartParent&&e.isBefore(this.boundaries.start)?e=this.boundaries.start:this._boundaryEndParent&&e.isAfter(this.boundaries.end)&&(e=this.boundaries.end),this._position=e.clone(),this._visitedParent=e.parent}next(){return this.direction==`forward`?this._next():this._previous()}_next(){let e=this.position,t=this.position.clone(),n=this._visitedParent;if(n.parent===null&&t.offset===n.maxOffset||n===this._boundaryEndParent&&t.offset==this.boundaries.end.offset)return{done:!0,value:void 0};let r=Qc(t,n),i=r||$c(t,n,r);if(i&&i.is(`model:element`)){if(!this.shallow)t.path.push(0),this._visitedParent=i;else{if(this.boundaries&&this.boundaries.end.isBefore(t))return{done:!0,value:void 0};t.offset++}return this._position=t,Zc(`elementStart`,i,e,t,1)}if(i&&i.is(`model:$text`)){let r;if(this.singleCharacters)r=1;else{let e=i.endOffset;this._boundaryEndParent==n&&this.boundaries.end.offsete&&(e=this.boundaries.start.offset),r=t.offset-e}let i=new Yc(a,t.offset-a.startOffset-r,r);return t.offset-=r,this._position=t,Zc(`text`,i,e,t,r)}return t.path.pop(),this._position=t,this._visitedParent=n.parent,Zc(`elementStart`,n,e,t,1)}};function Zc(e,t,n,r,i){return{done:!1,value:{type:e,item:t,previousPosition:n,nextPosition:r,length:i}}}var z=class e extends Jc{root;path;stickiness;constructor(e,t,n=`toNone`){if(super(),!e.is(`element`)&&!e.is(`documentFragment`))throw new w(`model-position-root-invalid`,e);if(!Array.isArray(t)||t.length===0)throw new w(`model-position-path-incorrect-format`,e,{path:t});e.is(`rootElement`)?t=t.slice():(t=[...e.getPath(),...t],e=e.root),this.root=e,this.path=t,this.stickiness=n}get offset(){return this.path[this.path.length-1]}set offset(e){this.path[this.path.length-1]=e}get parent(){let e=this.root;for(let t=0;t1)return!1;if(t===1)return tl(e,this,n);if(t===-1)return tl(this,e,n)}return this.path.length===e.path.length?!0:this.path.length>e.path.length?nl(this.path,t):nl(e.path,t)}hasSameParentAs(e){return this.root===e.root?fr(this.getParentPath(),e.getParentPath())==`same`:!1}getTransformedByOperation(t){let n;switch(t.type){case`insert`:n=this._getTransformedByInsertOperation(t);break;case`move`:case`remove`:case`reinsert`:n=this._getTransformedByMoveOperation(t);break;case`split`:n=this._getTransformedBySplitOperation(t);break;case`merge`:n=this._getTransformedByMergeOperation(t);break;default:n=e._createAt(this);break}return n}_getTransformedByInsertOperation(e){return this._getTransformedByInsertion(e.position,e.howMany)}_getTransformedByMoveOperation(e){return this._getTransformedByMove(e.sourcePosition,e.targetPosition,e.howMany)}_getTransformedBySplitOperation(e){let t=e.movedRange;return t.containsPosition(this)||t.start.isEqual(this)&&this.stickiness==`toNext`?this._getCombined(e.splitPosition,e.moveTargetPosition):e.graveyardPosition?this._getTransformedByMove(e.graveyardPosition,e.insertionPosition,1):this._getTransformedByInsertion(e.insertionPosition,1)}_getTransformedByMergeOperation(t){let n=t.movedRange,r=n.containsPosition(this)||n.start.isEqual(this),i;return r?(i=this._getCombined(t.sourcePosition,t.targetPosition),t.sourcePosition.isBefore(t.targetPosition)&&(i=i._getTransformedByDeletion(t.deletionPosition,1))):i=this.isEqual(t.deletionPosition)?e._createAt(t.deletionPosition):this._getTransformedByMove(t.deletionPosition,t.graveyardPosition,1),i}_getTransformedByDeletion(t,n){let r=e._createAt(this);if(this.root!=t.root)return r;if(fr(t.getParentPath(),this.getParentPath())==`same`){if(t.offsetthis.offset)return null;r.offset-=n}}else if(fr(t.getParentPath(),this.getParentPath())==`prefix`){let e=t.path.length-1;if(t.offset<=this.path[e]){if(t.offset+n>this.path[e])return null;r.path[e]-=n}}return r}_getTransformedByInsertion(t,n){let r=e._createAt(this);if(this.root!=t.root)return r;if(fr(t.getParentPath(),this.getParentPath())==`same`)(t.offset=t;){if(e.path[r]+i!==n.maxOffset)return!1;i=1,r--,n=n.parent}return!0}var B=class e extends Jc{start;end;constructor(e,t){super(),this.start=z._createAt(e),this.end=t?z._createAt(t):z._createAt(e),this.start.stickiness=this.isCollapsed?`toNone`:`toNext`,this.end.stickiness=this.isCollapsed?`toNone`:`toPrevious`}*[Symbol.iterator](){yield*new Xc({boundaries:this,ignoreElementEnd:!0})}get isCollapsed(){return this.start.isEqual(this.end)}get isFlat(){return fr(this.start.getParentPath(),this.end.getParentPath())==`same`}get root(){return this.start.root}containsPosition(e){return e.isAfter(this.start)&&e.isBefore(this.end)}containsRange(e,t=!1){e.isCollapsed&&(t=!1);let n=this.containsPosition(e.start)||t&&this.start.isEqual(e.start),r=this.containsPosition(e.end)||t&&this.end.isEqual(e.end);return n&&r}containsItem(e){let t=z._createBefore(e);return this.containsPosition(t)||this.start.isEqual(t)}isEqual(e){return this.start.isEqual(e.start)&&this.end.isEqual(e.end)}isIntersecting(e){return this.start.isBefore(e.end)&&this.end.isAfter(e.start)}getDifference(t){let n=[];return this.isIntersecting(t)?(this.containsPosition(t.start)&&n.push(new e(this.start,t.start)),this.containsPosition(t.end)&&n.push(new e(t.end,this.end))):n.push(new e(this.start,this.end)),n}getIntersection(t){if(this.isIntersecting(t)){let n=this.start,r=this.end;return this.containsPosition(t.start)&&(n=t.start),this.containsPosition(t.end)&&(r=t.end),new e(n,r)}return null}getJoined(t,n=!1){let r=this.isIntersecting(t);if(r||=this.start.isBefore(t.start)?n?this.end.isTouching(t.start):this.end.isEqual(t.start):n?t.end.isTouching(this.start):t.end.isEqual(this.start),!r)return null;let i=this.start,a=this.end;return t.start.isBefore(i)&&(i=t.start),t.end.isAfter(a)&&(a=t.end),new e(i,a)}getMinimalFlatRanges(){let t=[],n=this.start.getCommonPath(this.end).length,r=z._createAt(this.start),i=r.parent;for(;r.path.length>n+1;){let n=i.maxOffset-r.offset;n!==0&&t.push(new e(r,r.getShiftedBy(n))),r.path=r.path.slice(0,-1),r.offset++,i=i.parent}for(;r.path.length<=this.end.path.length;){let n=this.end.path[r.path.length-1],i=n-r.offset;i!==0&&t.push(new e(r,r.getShiftedBy(i))),r.offset=n,r.path.push(0)}return t}getWalker(e={}){return e.boundaries=this,new Xc(e)}*getItems(e={}){e.boundaries=this,e.ignoreElementEnd=!0;let t=new Xc(e);for(let e of t)yield e.item}*getPositions(e={}){e.boundaries=this;let t=new Xc(e);yield t.position;for(let e of t)yield e.nextPosition}getTransformedByOperation(t){switch(t.type){case`insert`:return this._getTransformedByInsertOperation(t);case`move`:case`remove`:case`reinsert`:return this._getTransformedByMoveOperation(t);case`split`:return[this._getTransformedBySplitOperation(t)];case`merge`:return[this._getTransformedByMergeOperation(t)]}return[new e(this.start,this.end)]}getTransformedByOperations(t){let n=[new e(this.start,this.end)];for(let e of t)for(let t=0;t0?new this(n,r):new this(r,n)}static _createIn(e){return new this(z._createAt(e,0),z._createAt(e,e.maxOffset))}static _createOn(e){return this._createFromPositionAndShift(z._createBefore(e),e.offsetSize)}static _createFromRanges(e){if(e.length===0)throw new w(`range-create-from-ranges-empty-array`,null);if(e.length==1)return e[0].clone();let t=e[0];e.sort((e,t)=>e.start.isAfter(t.start)?1:-1);let n=e.indexOf(t),r=new this(t.start,t.end);for(let t=n-1;t>=0&&e[t].end.isEqual(r.start);t--)r.start=z._createAt(e[t].start);for(let t=n+1;t{if(t.viewPosition)return;let n=this._modelToViewMapping.get(t.modelPosition.parent);if(!n)throw new w(`mapping-model-position-view-parent-not-found`,this,{modelPosition:t.modelPosition});t.viewPosition=this.findPositionIn(n,t.modelPosition.offset)},{priority:`low`}),this.on(`viewToModelPosition`,(e,t)=>{if(t.modelPosition)return;let n=this.findMappedViewAncestor(t.viewPosition),r=this._viewToModelMapping.get(n),i=this._toModelOffset(t.viewPosition.parent,t.viewPosition.offset,n);t.modelPosition=z._createAt(r,i)},{priority:`low`})}bindElements(e,t){this._modelToViewMapping.set(e,t),this._viewToModelMapping.set(t,e)}unbindViewElement(e,t={}){let n=this.toModelElement(e);if(this._elementToMarkerNames.has(e))for(let t of this._elementToMarkerNames.get(e))this._unboundMarkerNames.add(t);t.defer?this._deferredBindingRemovals.set(e,e.root):(this._viewToModelMapping.delete(e)&&this._cache.stopTracking(e),this._modelToViewMapping.get(n)==e&&this._modelToViewMapping.delete(n))}unbindModelElement(e){let t=this.toViewElement(e);this._modelToViewMapping.delete(e),this._viewToModelMapping.get(t)==e&&this._viewToModelMapping.delete(t)&&this._cache.stopTracking(t)}bindElementToMarker(e,t){let n=this._markerNameToElements.get(t)||new Set;n.add(e);let r=this._elementToMarkerNames.get(e)||new Set;r.add(t),this._markerNameToElements.set(t,n),this._elementToMarkerNames.set(e,r)}unbindElementFromMarkerName(e,t){let n=this._markerNameToElements.get(t);n&&(n.delete(e),n.size==0&&this._markerNameToElements.delete(t));let r=this._elementToMarkerNames.get(e);r&&(r.delete(t),r.size==0&&this._elementToMarkerNames.delete(e))}flushUnboundMarkerNames(){let e=Array.from(this._unboundMarkerNames);return this._unboundMarkerNames.clear(),e}flushDeferredBindings(){for(let[e,t]of this._deferredBindingRemovals)e.root==t&&this.unbindViewElement(e);this._deferredBindingRemovals=new Map}clearBindings(){this._modelToViewMapping=new WeakMap,this._viewToModelMapping=new WeakMap,this._markerNameToElements=new Map,this._elementToMarkerNames=new Map,this._unboundMarkerNames=new Set,this._deferredBindingRemovals=new Map}toModelElement(e){return this._viewToModelMapping.get(e)}toViewElement(e){return this._modelToViewMapping.get(e)}toModelRange(e){return new B(this.toModelPosition(e.start),this.toModelPosition(e.end))}toViewRange(e){return new R(this.toViewPosition(e.start),this.toViewPosition(e.end))}toModelPosition(e){let t={viewPosition:e,mapper:this};return this.fire(`viewToModelPosition`,t),t.modelPosition}toViewPosition(e,t={}){let n={modelPosition:e,mapper:this,isPhantom:t.isPhantom};return this.fire(`modelToViewPosition`,n),n.viewPosition}markerNameToElements(e){let t=this._markerNameToElements.get(e);if(!t)return null;let n=new Set;for(let e of t)if(e.is(`attributeElement`))for(let t of e.getElementsWithSameId())n.add(t);else n.add(e);return n}registerViewToModelLength(e,t){this._viewToModelLengthCallbacks.set(e,t)}findMappedViewAncestor(e){let t=e.parent;for(;!this._viewToModelMapping.has(t);)t=t.parent;return t}_toModelOffset(e,t,n){if(n!=e)return this._toModelOffset(e.parent,e.index,n)+this._toModelOffset(e,t,e);if(e.is(`$text`))return t;let r=0;for(let n=0;n0;){let e=t.pop(),r=e.name&&this._viewToModelLengthCallbacks.size>0&&this._viewToModelLengthCallbacks.get(e.name);if(r)n+=r(e);else if(this._viewToModelMapping.has(e))n+=1;else if(e.is(`$text`))n+=e.data.length;else if(e.is(`uiElement`))continue;else for(let n of e.getChildren())t.push(n)}return n}findPositionIn(e,t){if(t===0)return this._moveViewPositionToTextNode(new L(e,0));if(this._viewToModelLengthCallbacks.size==0&&this._viewToModelMapping.has(e)){let n=this._cache.getClosest(e,t);return this._findPositionStartingFrom(n.viewPosition,n.modelOffset,t,e,!0)}else return this._findPositionStartingFrom(new L(e,0),0,t,e,!1)}_findPositionStartingFrom(e,t,n,r,i){let a=e.parent,o=e.offset;if(a.is(`$text`))return new L(a,n-t);let s,c=t,l=0;for(;c{this._clearCacheInsideParent(t,n.index)};_invalidateOnTextChangeCallback=(e,t)=>{this._clearCacheAfter(t)};save(e,t,n,r){let i=this._cachedMapping.get(n),a=i.cacheMap.get(r);if(a){let n=e.getChild(t-1),r=a.viewPosition.nodeBefore?this._nodeToCacheListIndex.get(a.viewPosition.nodeBefore):0;this._nodeToCacheListIndex.set(n,r);return}let o={viewPosition:new L(e,t),modelOffset:r};i.maxModelOffset=r>i.maxModelOffset?r:i.maxModelOffset,i.cacheMap.set(r,o);let s=i.cacheList.length-1;for(;s>=0&&i.cacheList[s].modelOffset>r;)s--;if(i.cacheList.splice(s+1,0,o),t>0){let n=e.getChild(t-1);this._nodeToCacheListIndex.set(n,s+1)}}getClosest(e,t){let n=this._cachedMapping.get(e),r;return r=n?t>n.maxModelOffset?n.cacheList[n.cacheList.length-1]:n.cacheMap.get(t)||this._findInCacheList(n.cacheList,t):this.startTracking(e),{modelOffset:r.modelOffset,viewPosition:r.viewPosition.clone()}}startTracking(e){let t={viewPosition:new L(e,0),modelOffset:0},n={maxModelOffset:0,cacheList:[t],cacheMap:new Map([[0,t]])};return this._cachedMapping.set(e,n),e.on(`change:children`,this._invalidateOnChildrenChangeCallback),e.on(`change:text`,this._invalidateOnTextChangeCallback),t}stopTracking(e){e.off(`change:children`,this._invalidateOnChildrenChangeCallback),e.off(`change:text`,this._invalidateOnTextChangeCallback),this._cachedMapping.delete(e)}_clearCacheInsideParent(e,t){if(t==0)this._cachedMapping.has(e)?this._clearCacheAll(e):this._clearCacheInsideParent(e.parent,e.index);else{let n=e.getChild(t-1);this._clearCacheAfter(n)}}_clearCacheAll(e){let t=this._cachedMapping.get(e);t.maxModelOffset>0&&(t.maxModelOffset=0,t.cacheList.length=1,t.cacheMap.clear(),t.cacheMap.set(0,t.cacheList[0]))}_clearCacheAfter(e){let t=this._nodeToCacheListIndex.get(e);if(t===void 0){let t=e.parent;this._cachedMapping.has(t)||this._clearCacheInsideParent(t.parent,t.index);return}let n=e.parent;for(;!this._cachedMapping.has(n);)n=n.parent;this._clearCacheFromCacheIndex(n,t)}_clearCacheFromCacheIndex(e,t){t===0&&(t=1);let n=this._cachedMapping.get(e),r=n.cacheList[t-1];if(!r)return;n.maxModelOffset=r.modelOffset;let i=n.cacheList.splice(t);for(let e of i){n.cacheMap.delete(e.modelOffset);let t=e.viewPosition.nodeBefore;this._nodeToCacheListIndex.delete(t)}}_findInCacheList(e,t){let n=0,r=e.length-1,i=r-n>>1,a=e[i];for(;n>1),a=e[i];return a.modelOffset<=t?a:e[i-1]}},cl=class{_consumable=new Map;_textProxyRegistry=new Map;add(e,t){t=ll(t),e instanceof Yc&&(e=this._getSymbolForTextProxy(e)),this._consumable.has(e)||this._consumable.set(e,new Map),this._consumable.get(e).set(t,!0)}consume(e,t){return t=ll(t),e instanceof Yc&&(e=this._getSymbolForTextProxy(e)),this.test(e,t)?(this._consumable.get(e).set(t,!1),!0):!1}test(e,t){t=ll(t),e instanceof Yc&&(e=this._getSymbolForTextProxy(e));let n=this._consumable.get(e);if(n===void 0)return null;let r=n.get(t);return r===void 0?null:r}revert(e,t){t=ll(t),e instanceof Yc&&(e=this._getSymbolForTextProxy(e));let n=this.test(e,t);return n===!1?(this._consumable.get(e).set(t,!0),!0):n===!0?!1:null}verifyAllConsumed(e){let t=[];for(let[n,r]of this._consumable)for(let[i,a]of r){let r=i.split(`:`)[0];a&&e==r&&t.push({event:i,item:n.name||n.description})}if(t.length)throw new w(`conversion-model-consumable-not-consumed`,null,{items:t})}_getSymbolForTextProxy(e){let t=null,n=this._textProxyRegistry.get(e.startOffset);if(n){let r=n.get(e.endOffset);r&&(t=r.get(e.parent))}return t||=this._addSymbolForTextProxy(e),t}_addSymbolForTextProxy(e){let t=e.startOffset,n=e.endOffset,r=e.parent,i=Symbol(`$textProxy:`+e.data),a,o;return a=this._textProxyRegistry.get(t),a||(a=new Map,this._textProxyRegistry.set(t,a)),o=a.get(n),o||(o=new Map,a.set(n,o)),o.set(r,i),i}};function ll(e){let t=e.split(`:`);return t[0]==`insert`?t[0]:t[0]==`addMarker`||t[0]==`removeMarker`?e:t.length>1?t[0]+`:`+t[1]:t[0]}function ul([e,t],[n,r]){if(t.end.compareWith(r.start)!==`after`)return 1;if(t.start.compareWith(r.end)!==`before`)return-1;switch(t.start.compareWith(r.start)){case`before`:return 1;case`after`:return-1;default:switch(t.end.compareWith(r.end)){case`before`:return-1;case`after`:return 1;default:return n.localeCompare(e)}}}const dl=E();var fl=class extends dl{_conversionApi;_firedEventsMap;constructor(e){super(),this._conversionApi={dispatcher:this,...e},this._firedEventsMap=new WeakMap}convertChanges(e,t,n){let r=e.getRefreshedItems(),i=this._createConversionApi(n,r);for(let t of e.getMarkersToRemove())this._convertMarkerRemove(t.name,t.range,i);let a=this._reduceChanges(e.getChanges(),r);for(let e of a)e.type===`insert`?this._convertInsert(B._createFromPositionAndShift(e.position,e.length),i):e.type===`reinsert`?this._convertReinsert(B._createFromPositionAndShift(e.position,e.length),i):e.type===`remove`?this._convertRemove(e.position,e.length,e.name,i):this._convertAttribute(e.range,e.attributeKey,e.attributeOldValue,e.attributeNewValue,i);i.mapper.flushDeferredBindings();for(let e of i.mapper.flushUnboundMarkerNames()){let n=t.get(e).getRange();this._convertMarkerRemove(e,n,i),this._convertMarkerAdd(e,n,i)}let o=e.getMarkersToAdd().sort((e,t)=>ul([e.name,e.range],[t.name,t.range]));for(let e of o)this._convertMarkerAdd(e.name,e.range,i);i.consumable.verifyAllConsumed(`insert`)}convert(e,t,n,r={}){let i=this._createConversionApi(n,void 0,r);this._convertInsert(e,i);for(let[e,n]of Array.from(t).sort(ul))this._convertMarkerAdd(e,n,i);i.consumable.verifyAllConsumed(`insert`)}convertSelection(e,t,n){let r=this._createConversionApi(n);this.fire(`cleanSelection`,{selection:e},r);let i=e.getFirstPosition().root;if(!r.mapper.toViewElement(i))return;let a=Array.from(t.getMarkersAtPosition(e.getFirstPosition()));if(this._addConsumablesForSelection(r.consumable,e,a),this.fire(`selection`,{selection:e},r),e.isCollapsed){for(let t of a)if(r.consumable.test(e,`addMarker:`+t.name)){let n=t.getRange();if(!pl(e.getFirstPosition(),t,r.mapper))continue;let i={item:e,markerName:t.name,markerRange:n};this.fire(`addMarker:${t.name}`,i,r)}for(let t of e.getAttributeKeys())if(r.consumable.test(e,`attribute:`+t)){let n={item:e,range:e.getFirstRange(),attributeKey:t,attributeOldValue:null,attributeNewValue:e.getAttribute(t)};this.fire(`attribute:${t}:$text`,n,r)}}}_convertInsert(e,t,n={}){n.doNotAddConsumables||this._addConsumablesForInsert(t.consumable,e);for(let n of e.getWalker({shallow:!0}))this._testAndFire(`insert`,hl(n),t)}_convertRemove(e,t,n,r){this.fire(`remove:${n}`,{position:e,length:t},r)}_convertAttribute(e,t,n,r,i){this._addConsumablesForRange(i.consumable,e,`attribute:${t}`);for(let a of e){let e={item:a.item,range:B._createFromPositionAndShift(a.previousPosition,a.length),attributeKey:t,attributeOldValue:n,attributeNewValue:r};this._testAndFire(`attribute:${t}`,e,i)}}_convertReinsert(e,t){let n=Array.from(e.getWalker({shallow:!0}));this._addConsumablesForInsert(t.consumable,n);for(let e of n.map(hl))this.fire(`remove:${e.item.is(`element`)?e.item.name:`$text`}`,{position:e.range.start,length:e.item.offsetSize,reconversion:!0},t),this._testAndFire(`insert`,{...e,reconversion:!0},t)}_convertMarkerAdd(e,t,n){if(t.root.rootName==`$graveyard`)return;let r=`addMarker:${e}`;if(n.consumable.add(t,r),this.fire(r,{markerName:e,markerRange:t},n),n.consumable.consume(t,r)){this._addConsumablesForRange(n.consumable,t,r);for(let i of t.getItems()){if(!n.consumable.test(i,r))continue;let a={item:i,range:B._createOn(i),markerName:e,markerRange:t};this.fire(r,a,n)}}}_convertMarkerRemove(e,t,n){t.root.rootName!=`$graveyard`&&this.fire(`removeMarker:${e}`,{markerName:e,markerRange:t},n)}_reduceChanges(e,t){let n={changes:e,refreshedItems:t};return this.fire(`reduceChanges`,n),n.changes}_addConsumablesForInsert(e,t){for(let n of t){let t=n.item;if(e.test(t,`insert`)===null){e.add(t,`insert`);for(let n of t.getAttributeKeys())e.add(t,`attribute:`+n)}}return e}_addConsumablesForRange(e,t,n){for(let r of t.getItems())e.add(r,n);return e}_addConsumablesForSelection(e,t,n){e.add(t,`selection`);for(let r of n)e.add(t,`addMarker:`+r.name);for(let n of t.getAttributeKeys())e.add(t,`attribute:`+n);return e}_testAndFire(e,t,n){let r=ml(e,t),i=t.item.is(`$textProxy`)?n.consumable._getSymbolForTextProxy(t.item):t.item,a=this._firedEventsMap.get(n),o=a.get(i);if(!o)a.set(i,new Set([r]));else if(!o.has(r))o.add(r);else return;this.fire(r,t,n)}_testAndFireAddAttributes(e,t){let n={item:e,range:B._createOn(e)};for(let e of n.item.getAttributeKeys())n.attributeKey=e,n.attributeOldValue=null,n.attributeNewValue=n.item.getAttribute(e),this._testAndFire(`attribute:${e}`,n,t)}_createConversionApi(e,t=new Set,n={}){let r={...this._conversionApi,consumable:new cl,writer:e,options:n,convertItem:e=>this._convertInsert(B._createOn(e),r),convertChildren:e=>this._convertInsert(B._createIn(e),r,{doNotAddConsumables:!0}),convertAttributes:e=>this._testAndFireAddAttributes(e,r),canReuseView:e=>!t.has(r.mapper.toModelElement(e))};return this._firedEventsMap.set(r,new Map),r}};function pl(e,t,n){let r=t.getRange(),i=Array.from(e.getAncestors());return i.shift(),i.reverse(),!i.some(e=>{if(r.containsItem(e))return!!n.toViewElement(e).getCustomProperty(`addHighlight`)})}function ml(e,t){return`${e}:${t.item.is(`element`)?t.item.name:`$text`}`}function hl(e){return{item:e.item,range:B._createFromPositionAndShift(e.previousPosition,e.length)}}var gl=class extends Jc{parent=null;_attrs;_index=null;_startOffset=null;constructor(e){super(),this._attrs=Ui(e)}get document(){return null}get index(){return this._index}get startOffset(){return this._startOffset}get offsetSize(){return 1}get endOffset(){return this.startOffset===null?null:this.startOffset+this.offsetSize}get nextSibling(){let e=this.index;return e!==null&&this.parent.getChild(e+1)||null}get previousSibling(){let e=this.index;return e!==null&&this.parent.getChild(e-1)||null}get root(){let e=this;for(;e.parent;)e=e.parent;return e}isAttached(){return this.parent===null?!1:this.root.isAttached()}getPath(){let e=[],t=this;for(;t.parent;)e.unshift(t.startOffset),t=t.parent;return e}getAncestors(e={}){let t=[],n=e.includeSelf?this:this.parent;for(;n;)t[e.parentFirst?`push`:`unshift`](n),n=n.parent;return t}getCommonAncestor(e,t={}){let n=this.getAncestors(t),r=e.getAncestors(t),i=0;for(;n[i]==r[i]&&n[i];)i++;return i===0?null:n[i-1]}isBefore(e){if(this==e||this.root!==e.root)return!1;let t=this.getPath(),n=e.getPath(),r=fr(t,n);switch(r){case`prefix`:return!0;case`extension`:return!1;default:return t[r](e[t[0]]=t[1],e),{})),e}_clone(e){return new this.constructor(this._attrs)}_remove(){this.parent._removeChildren(this.index)}_setAttribute(e,t){this._attrs.set(e,t)}_setAttributesTo(e){this._attrs=Ui(e)}_removeAttribute(e){return this._attrs.delete(e)}_clearAttributes(){this._attrs.clear()}};gl.prototype.is=function(e){return e===`node`||e===`model:node`};const Lee=E(Jc);var _l=class e extends Lee{_lastRangeBackward=!1;_attrs=new Map;_ranges=[];constructor(...e){super(),e.length&&this.setTo(...e)}get anchor(){if(this._ranges.length>0){let e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.end:e.start}return null}get focus(){if(this._ranges.length>0){let e=this._ranges[this._ranges.length-1];return this._lastRangeBackward?e.start:e.end}return null}get isCollapsed(){return this._ranges.length===1?this._ranges[0].isCollapsed:!1}get rangeCount(){return this._ranges.length}get isBackward(){return!this.isCollapsed&&this._lastRangeBackward}isEqual(e){if(this.rangeCount!=e.rangeCount)return!1;if(this.rangeCount===0)return!0;if(!this.anchor.isEqual(e.anchor)||!this.focus.isEqual(e.focus))return!1;for(let t of this._ranges){let n=!1;for(let r of e._ranges)if(t.isEqual(r)){n=!0;break}if(!n)return!1}return!0}*getRanges(){for(let e of this._ranges)yield new B(e.start,e.end)}getFirstRange(){let e=null;for(let t of this._ranges)(!e||t.start.isBefore(e.start))&&(e=t);return e?new B(e.start,e.end):null}getLastRange(){let e=null;for(let t of this._ranges)(!e||t.end.isAfter(e.end))&&(e=t);return e?new B(e.start,e.end):null}getFirstPosition(){let e=this.getFirstRange();return e?e.start.clone():null}getLastPosition(){let e=this.getLastRange();return e?e.end.clone():null}setTo(...t){let[n,r,i]=t;if(typeof r==`object`&&(i=r,r=void 0),n===null)this._setRanges([]);else if(n instanceof e)this._setRanges(n.getRanges(),n.isBackward);else if(n&&typeof n.getRanges==`function`)this._setRanges(n.getRanges(),n.isBackward);else if(n instanceof B)this._setRanges([n],!!i&&!!i.backward);else if(n instanceof z)this._setRanges([new B(n)]);else if(n instanceof gl){let e=!!i&&!!i.backward,t;if(r==`in`)t=B._createIn(n);else if(r==`on`)t=B._createOn(n);else if(r!==void 0)t=new B(z._createAt(n,r));else throw new w(`model-selection-setto-required-second-parameter`,[this,n]);this._setRanges([t],e)}else if(pr(n))this._setRanges(n,i&&!!i.backward);else throw new w(`model-selection-setto-not-selectable`,[this,n])}_setRanges(e,t=!1){let n=Array.from(e),r=n.some(t=>{if(!(t instanceof B))throw new w(`model-selection-set-ranges-not-range`,[this,e]);return this._ranges.every(e=>!e.isEqual(t))});n.length===this._ranges.length&&!r||(this._replaceAllRanges(n),this._lastRangeBackward=!!t,this.fire(`change:range`,{directChange:!0}))}setFocus(e,t){if(this.anchor===null)throw new w(`model-selection-setfocus-no-ranges`,[this,e]);let n=z._createAt(e,t);if(n.compareWith(this.focus)==`same`)return;let r=this.anchor;this._ranges.length&&this._popRange(),n.compareWith(r)==`before`?(this._pushRange(new B(n,r)),this._lastRangeBackward=!0):(this._pushRange(new B(r,n)),this._lastRangeBackward=!1),this.fire(`change:range`,{directChange:!0})}getAttribute(e){return this._attrs.get(e)}getAttributes(){return this._attrs.entries()}getAttributeKeys(){return this._attrs.keys()}hasAttribute(e){return this._attrs.has(e)}removeAttribute(e){this.hasAttribute(e)&&(this._attrs.delete(e),this.fire(`change:attribute`,{attributeKeys:[e],directChange:!0}))}setAttribute(e,t){this.getAttribute(e)!==t&&(this._attrs.set(e,t),this.fire(`change:attribute`,{attributeKeys:[e],directChange:!0}))}getSelectedElement(){return this.rangeCount===1?this.getFirstRange().getContainedElement():null}*getSelectedBlocks(){let e=new WeakSet;for(let t of this.getRanges()){let n=yl(t.start,e);zee(n,t)&&(yield n);let r=t.getWalker();for(let n of r){let i=n.item;n.type==`elementEnd`&&Ree(i,e,t)?yield i:n.type==`elementStart`&&i.is(`model:element`)&&i.root.document.model.schema.isBlock(i)&&r.jumpTo(z._createAt(i,`end`))}let i=yl(t.end,e);Bee(i,t)&&(yield i)}}containsEntireContent(e=this.anchor.root){let t=z._createAt(e,0),n=z._createAt(e,`end`);return t.isTouching(this.getFirstPosition())&&n.isTouching(this.getLastPosition())}toJSON(){let e={ranges:Array.from(this.getRanges()).map(e=>e.toJSON())},t=Object.fromEntries(this.getAttributes());return Object.keys(t).length&&(e.attributes=t),this.isBackward&&(e.isBackward=!0),e}_pushRange(e){this._checkRange(e),this._ranges.push(new B(e.start,e.end))}_checkRange(e){for(let t=0;t0;)this._popRange()}_popRange(){this._ranges.pop()}};_l.prototype.is=function(e){return e===`selection`||e===`model:selection`};function vl(e,t){return t.has(e)?!1:(t.add(e),e.root.document.model.schema.isBlock(e)&&!!e.parent)}function Ree(e,t,n){return vl(e,t)&&bl(e,n)}function yl(e,t){let n=e.parent.root.document.model.schema,r=e.parent.getAncestors({parentFirst:!0,includeSelf:!0}),i=!1,a=r.find(e=>i?!1:(i=n.isLimit(e),!i&&vl(e,t)));return r.forEach(e=>t.add(e)),a}function bl(e,t){let n=Vee(e);return n?!t.containsRange(B._createOn(n),!0):!0}function zee(e,t){return e?t.isCollapsed||e.isEmpty?!0:t.start.isTouching(z._createAt(e,e.maxOffset))?!1:bl(e,t):!1}function Bee(e,t){return e?t.isCollapsed||e.isEmpty?!0:t.end.isTouching(z._createAt(e,0))?!1:bl(e,t):!1}function Vee(e){let t=e.root.document.model.schema,n=e.parent;for(;n;){if(t.isBlock(n))return n;n=n.parent}}const Hee=E(B);var xl=class e extends Hee{constructor(e,t){super(e,t),Uee.call(this)}detach(){this.stopListening()}toRange(){return new B(this.start,this.end)}static fromRange(t){return new e(t.start,t.end)}};xl.prototype.is=function(e){return e===`liveRange`||e===`model:liveRange`||e==`range`||e===`model:range`};function Uee(){this.listenTo(this.root.document.model,`applyOperation`,(e,t)=>{let n=t[0];n.isDocumentOperation&&Wee.call(this,n)},{priority:`low`})}function Wee(e){let t=this.getTransformedByOperation(e),n=B._createFromRanges(t),r=!n.isEqual(this),i=Gee(this,e),a=null;if(r){n.root.rootName==`$graveyard`&&(a=e.type==`remove`?e.sourcePosition:e.deletionPosition);let t=this.toRange();this.start=n.start,this.end=n.end,this.fire(`change:range`,t,{deletionPosition:a})}else i&&this.fire(`change:content`,this.toRange(),{deletionPosition:a})}function Gee(e,t){switch(t.type){case`insert`:return e.containsPosition(t.position);case`move`:case`remove`:case`reinsert`:case`merge`:return e.containsPosition(t.sourcePosition)||e.start.isEqual(t.sourcePosition)||e.containsPosition(t.targetPosition);case`split`:return e.containsPosition(t.splitPosition)||e.containsPosition(t.insertionPosition)}return!1}var Sl=class e extends gl{_data;constructor(e,t){super(t),this._data=e||``}get offsetSize(){return this.data.length}get data(){return this._data}toJSON(){let e=super.toJSON();return e.data=this.data,e}_clone(){return new e(this.data,this.getAttributes())}static fromJSON(t){return new e(t.data,t.attributes)}};Sl.prototype.is=function(e){return e===`$text`||e===`model:$text`||e===`text`||e===`model:text`||e===`node`||e===`model:node`};const Cl=`selection:`,wl=E(Jc);var Tl=class extends wl{_selection;constructor(e){super(),this._selection=new El(e),this._selection.delegate(`change:range`).to(this),this._selection.delegate(`change:attribute`).to(this),this._selection.delegate(`change:marker`).to(this)}get isCollapsed(){return this._selection.isCollapsed}get anchor(){return this._selection.anchor}get focus(){return this._selection.focus}get rangeCount(){return this._selection.rangeCount}get hasOwnRange(){return this._selection.hasOwnRange}get isBackward(){return this._selection.isBackward}get isGravityOverridden(){return this._selection.isGravityOverridden}get markers(){return this._selection.markers}get _ranges(){return this._selection._ranges}getRanges(){return this._selection.getRanges()}getFirstPosition(){return this._selection.getFirstPosition()}getLastPosition(){return this._selection.getLastPosition()}getFirstRange(){return this._selection.getFirstRange()}getLastRange(){return this._selection.getLastRange()}getSelectedBlocks(){return this._selection.getSelectedBlocks()}getSelectedElement(){return this._selection.getSelectedElement()}containsEntireContent(e){return this._selection.containsEntireContent(e)}destroy(){this._selection.destroy()}getAttributeKeys(){return this._selection.getAttributeKeys()}getAttributes(){return this._selection.getAttributes()}getAttribute(e){return this._selection.getAttribute(e)}hasAttribute(e){return this._selection.hasAttribute(e)}refresh(){this._selection.updateMarkers(),this._selection._updateAttributes(!1)}observeMarkers(e){this._selection.observeMarkers(e)}toJSON(){return this._selection.toJSON()}_setFocus(e,t){this._selection.setFocus(e,t)}_setTo(...e){this._selection.setTo(...e)}_setAttribute(e,t){this._selection.setAttribute(e,t)}_removeAttribute(e){this._selection.removeAttribute(e)}_getStoredAttributes(){return this._selection.getStoredAttributes()}_overrideGravity(){return this._selection.overrideGravity()}_restoreGravity(e){this._selection.restoreGravity(e)}static _getStoreAttributeKey(e){return Cl+e}static _isStoreAttributeKey(e){return e.startsWith(Cl)}};Tl.prototype.is=function(e){return e===`selection`||e==`model:selection`||e==`documentSelection`||e==`model:documentSelection`};var El=class extends _l{markers=new Fi({idProperty:`name`});_model;_document;_attributePriority=new Map;_selectionRestorePosition=null;_hasChangedRange=!1;_overriddenGravityRegister=new Set;_observedMarkers=new Set;constructor(e){super(),this._model=e.model,this._document=e,this.listenTo(this._model,`applyOperation`,(e,t)=>{let n=t[0];!n.isDocumentOperation||n.type==`marker`||n.type==`rename`||n.type==`noop`||(this._ranges.length==0&&this._selectionRestorePosition&&this._fixGraveyardSelection(this._selectionRestorePosition),this._selectionRestorePosition=null,this._hasChangedRange&&(this._hasChangedRange=!1,this.fire(`change:range`,{directChange:!1})))},{priority:`lowest`}),this.on(`change:range`,()=>{this._validateSelectionRanges(this.getRanges())}),this.listenTo(this._model.markers,`update`,(e,t,n,r)=>{this._updateMarker(t,r)}),this.listenTo(this._document,`change`,(e,t)=>{kl(this._model,t)})}get isCollapsed(){return this._ranges.length===0?this._document._getDefaultRange().isCollapsed:super.isCollapsed}get anchor(){return super.anchor||this._document._getDefaultRange().start}get focus(){return super.focus||this._document._getDefaultRange().end}get rangeCount(){return this._ranges.length?this._ranges.length:1}get hasOwnRange(){return this._ranges.length>0}get isGravityOverridden(){return!!this._overriddenGravityRegister.size}destroy(){for(let e=0;ee.toJSON())),e}_validateSelectionRanges(e){for(let t of e)if(!this._document._validateSelectionRange(t))throw new w(`document-selection-wrong-position`,this,{range:t})}_prepareRange(e){if(this._checkRange(e),e.root==this._document.graveyard)return;let t=xl.fromRange(e);return t.on(`change:range`,(e,n,r)=>{if(this._hasChangedRange=!0,t.root==this._document.graveyard){this._selectionRestorePosition=r.deletionPosition;let e=this._ranges.indexOf(t);this._ranges.splice(e,1),t.detach()}}),t}updateMarkers(){if(!this._observedMarkers.size)return;let e=[],t=!1;for(let t of this._model.markers){let n=t.name.split(`:`,1)[0];if(!this._observedMarkers.has(n))continue;let r=t.getRange();for(let n of this.getRanges())r.containsRange(n,!n.isCollapsed)&&e.push(t)}let n=Array.from(this.markers);for(let n of e)this.markers.has(n)||(this.markers.add(n),t=!0);for(let n of Array.from(this.markers))e.includes(n)||(this.markers.remove(n),t=!0);t&&this.fire(`change:marker`,{oldMarkers:n,directChange:!1})}_updateMarker(e,t){let n=e.name.split(`:`,1)[0];if(!this._observedMarkers.has(n))return;let r=!1,i=Array.from(this.markers),a=this.markers.has(e);if(!t)a&&(this.markers.remove(e),r=!0);else{let n=!1;for(let e of this.getRanges())if(t.containsRange(e,!e.isCollapsed)){n=!0;break}n&&!a?(this.markers.add(e),r=!0):!n&&a&&(this.markers.remove(e),r=!0)}r&&this.fire(`change:marker`,{oldMarkers:i,directChange:!1})}_updateAttributes(e){let t=Ui(this._getSurroundingAttributes()),n=Ui(this.getAttributes());if(e)this._attributePriority=new Map,this._attrs=new Map;else for(let[e,t]of this._attributePriority)t==`low`&&(this._attrs.delete(e),this._attributePriority.delete(e));this._setAttributesTo(t);let r=[];for(let[e,t]of this.getAttributes())(!n.has(e)||n.get(e)!==t)&&r.push(e);for(let[e]of n)this.hasAttribute(e)||r.push(e);r.length>0&&this.fire(`change:attribute`,{attributeKeys:r,directChange:!1})}_setAttribute(e,t,n=!0){let r=n?`normal`:`low`;return r==`low`&&this._attributePriority.get(e)==`normal`||super.getAttribute(e)===t?!1:(this._attrs.set(e,t),this._attributePriority.set(e,r),!0)}_removeAttribute(e,t=!0){let n=t?`normal`:`low`;return n==`low`&&this._attributePriority.get(e)==`normal`||(this._attributePriority.set(e,n),!super.hasAttribute(e))?!1:(this._attrs.delete(e),!0)}_setAttributesTo(e){let t=new Set;for(let[t,n]of this.getAttributes())e.get(t)!==n&&this._removeAttribute(t,!1);for(let[n,r]of e)this._setAttribute(n,r,!1)&&t.add(n);return t}*getStoredAttributes(){let e=this.getFirstPosition().parent;if(this.isCollapsed&&e.isEmpty)for(let t of e.getAttributeKeys())t.startsWith(Cl)&&(yield[t.substr(10),e.getAttribute(t)])}_getSurroundingAttributes(){let e=this.getFirstPosition(),t=this._model.schema;if(e.root.rootName==`$graveyard`)return null;let n=null;if(this.isCollapsed){let r=e.textNode?e.textNode:e.nodeBefore,i=e.textNode?e.textNode:e.nodeAfter;this.isGravityOverridden||(n=Dl(r,t)),n||=Dl(i,t),!this.isGravityOverridden&&!n&&(n=Dl(r,t,`backward`)),n||=Dl(i,t,`forward`),n||=this.getStoredAttributes()}else{let e=this.getFirstRange();for(let r of e){if(r.item.is(`element`)&&t.isObject(r.item)){n=Dl(r.item,t);break}if(r.type==`text`){n=r.item.getAttributes();break}}}return n}_fixGraveyardSelection(e){let t=this._model.schema.getNearestSelectionRange(e);t&&this._pushRange(t)}};function Dl(e,t,n=`self`){if(!e)return null;for(let r of Ol(e,n)){if(!r)return null;if(r instanceof Sl)return r.getAttributes();if(!t.isInline(r))continue;let e=t.isObject(r),n=[];for(let[i,a]of r.getAttributes())t.checkAttribute(`$text`,i)&&(!e||t.getAttributeProperties(i).copyFromObject!==!1)&&n.push([i,a]);return n}return null}function*Ol(e,t){if(t==`self`)yield e;else{let n=e;for(;n;)n=t==`backward`?n.previousSibling:n.nextSibling,yield n}return null}function kl(e,t){let n=e.document.differ;for(let r of n.getChanges()){if(r.type!=`insert`)continue;let n=r.position.parent;r.length===n.maxOffset&&e.enqueueChange(t,e=>{let t=Array.from(n.getAttributeKeys()).filter(e=>e.startsWith(Cl));for(let r of t)e.removeAttribute(r,n)})}}var Al=class{_nodes=[];_offsetToNode=[];constructor(e){e&&this._insertNodes(0,e)}[Symbol.iterator](){return this._nodes[Symbol.iterator]()}get length(){return this._nodes.length}get maxOffset(){return this._offsetToNode.length}getNode(e){return this._nodes[e]||null}getNodeAtOffset(e){return this._offsetToNode[e]||null}getNodeIndex(e){return e.index}getNodeStartOffset(e){return e.startOffset}indexToOffset(e){if(e==this._nodes.length)return this.maxOffset;let t=this._nodes[e];if(!t)throw new w(`model-nodelist-index-out-of-bounds`,this);return this.getNodeStartOffset(t)}offsetToIndex(e){if(e==this._offsetToNode.length)return this._nodes.length;let t=this._offsetToNode[e];if(!t)throw new w(`model-nodelist-offset-out-of-bounds`,this,{offset:e,nodeList:this});return this.getNodeIndex(t)}_insertNodes(e,t){let n=[];for(let e of t){if(!(e instanceof gl))throw new w(`model-nodelist-insertnodes-not-node`,this);n.push(e)}let r=this.indexToOffset(e);Ji(this._nodes,n,e),Ji(this._offsetToNode,jl(n),r);for(let t=e;te.index!==null),this._offsetToNode=this._offsetToNode.filter(e=>e.index!==null);let t=0;for(let e=0;ee.toJSON())}};function jl(e){let t=[],n=0;for(let r of e)for(let e=0;e0){e.children=[];for(let t of this._children)e.children.push(t.toJSON())}return e}_clone(t=!1){let n=t?Pl(this._children):void 0;return new e(this.name,this.getAttributes(),n)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){let n=Nl(t);for(let e of n)e.parent!==null&&e._remove(),e.parent=this;this._children._insertNodes(e,n)}_removeChildren(e,t=1){let n=this._children._removeNodes(e,t);for(let e of n)e.parent=null;return n}_removeChildrenArray(e){this._children._removeNodesArray(e);for(let t of e)t.parent=null}static fromJSON(t){let n;if(t.children){n=[];for(let r of t.children)r.name?n.push(e.fromJSON(r)):n.push(Sl.fromJSON(r))}return new e(t.name,t.attributes,n)}};Ml.prototype.is=function(e,t){return t?t===this.name&&(e===`element`||e===`model:element`):e===`element`||e===`model:element`||e===`node`||e===`model:node`};function Nl(e){if(typeof e==`string`)return[new Sl(e)];pr(e)||(e=[e]);let t=[];for(let n of e)typeof n==`string`?t.push(new Sl(n)):n instanceof Yc?t.push(new Sl(n.data,n.getAttributes())):t.push(n);return t}function Pl(e){let t=[];for(let n of e)t.push(n._clone(!0));return t}var Fl=class{_dispatchers;constructor(e){this._dispatchers=e}add(e){for(let t of this._dispatchers)e(t);return this}},Il=class extends Fl{elementToElement(e){return this.add(ou(e))}elementToStructure(e){return this.add(su(e))}attributeToElement(e){return this.add(cu(e))}attributeToAttribute(e){return this.add(lu(e))}markerToElement(e){return this.add(uu(e))}markerToHighlight(e){return this.add(fu(e))}markerToData(e){return this.add(du(e))}};function Ll(){return(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewPosition(t.range.start),a=r.createText(t.item.data);r.insert(i,a)}}function Rl(){return(e,t,n)=>{n.convertAttributes(t.item),!t.reconversion&&t.item.is(`element`)&&!t.item.isEmpty&&n.convertChildren(t.item)}}function zl(){return(e,t,n)=>{if(t.reconversion)return;let r=n.mapper.toViewPosition(t.position),i=t.position.getShiftedBy(t.length),a=n.mapper.toViewPosition(i,{isPhantom:!0});Jl(n.writer.createRange(r,a).getTrimmed(),n)}}function Bl(e,t){let n=e.createAttributeElement(`span`,t.attributes);return t.classes&&n._addClass(t.classes),typeof t.priority==`number`&&(n._priority=t.priority),n._id=t.id,n}function Vl(){return(e,t,n)=>{let r=t.selection;if(r.isCollapsed||!n.consumable.consume(r,`selection`))return;let i=[];for(let e of r.getRanges())i.push(n.mapper.toViewRange(e));n.writer.setSelection(i,{backward:r.isBackward})}}function Hl(){return(e,t,n)=>{let r=t.selection;if(!r.isCollapsed||!n.consumable.consume(r,`selection`))return;let i=n.writer,a=r.getFirstPosition(),o=n.mapper.toViewPosition(a),s=i.breakAttributes(o);i.setSelection(s)}}function Ul(){return(e,t,n)=>{let r=n.writer,i=r.document.selection;for(let e of i.getRanges())e.isCollapsed&&e.end.parent.isAttached()&&n.writer.mergeAttributes(e.start);r.setSelection(null)}}function Wl(e){return(t,n,r)=>{if(!r.consumable.test(n.item,t.name))return;let i=e(n.attributeOldValue,r,n),a=e(n.attributeNewValue,r,n);if(!i&&!a)return;r.consumable.consume(n.item,t.name);let o=r.writer,s=o.document.selection;if(n.item instanceof _l||n.item instanceof Tl)o.wrap(s.getFirstRange(),a);else{let e=r.mapper.toViewRange(n.range);n.attributeOldValue!==null&&i&&(e=o.unwrap(e,i)),n.attributeNewValue!==null&&a&&o.wrap(e,a)}}}function Gl(e,t=Du){return(n,r,i)=>{if(!t(r.item,i.consumable,{preflight:!0}))return;let a=e(r.item,i,r);if(!a)return;t(r.item,i.consumable);let o=r.reconversion&&Yl(r.item,i)||i.mapper.toViewPosition(r.range.start);i.mapper.bindElements(r.item,a),i.writer.insert(o,a),i.convertAttributes(r.item),Tu(a,r.item.getChildren(),i,{reconversion:r.reconversion})}}function Kl(e,t){return(n,r,i)=>{if(!t(r.item,i.consumable,{preflight:!0}))return;let a=new Map;i.writer._registerSlotFactory(Su(r.item,a,i));let o=e(r.item,i,r);if(i.writer._clearSlotFactory(),!o)return;Cu(r.item,a,i),t(r.item,i.consumable);let s=r.reconversion&&Yl(r.item,i)||i.mapper.toViewPosition(r.range.start);i.mapper.bindElements(r.item,o),i.writer.insert(s,o),i.convertAttributes(r.item),wu(o,a,i,{reconversion:r.reconversion})}}function ql(e){return(t,n,r)=>{n.isOpening=!0;let i=e(n,r);n.isOpening=!1;let a=e(n,r);if(!i||!a)return;let{markerRange:o,markerName:s}=n;if(o.isCollapsed&&!r.consumable.consume(o,t.name))return;for(let e of o)if(!r.consumable.consume(e.item,t.name))return;let c=r.mapper,l=r.writer;l.setCustomProperty(`markerBoundaryType`,`start`,i),l.setCustomProperty(`markerBoundaryName`,s,i),l.setCustomProperty(`markerBoundaryType`,`end`,a),l.setCustomProperty(`markerBoundaryName`,s,a);let u=(e,t)=>{let n=c.markerNameToElements(e);if(n){for(let e of n)if(e.getCustomProperty(`markerBoundaryType`)===t)return c.toModelPosition(l.createPositionBefore(e))}return null};if(!o.isCollapsed){let e=c.toViewPosition(o.end).getLastMatchingPosition(({item:e})=>{if(!e.is(`uiElement`)||e.getCustomProperty(`markerBoundaryType`)!==`end`)return!1;let t=e.getCustomProperty(`markerBoundaryName`),n=u(t,`start`);if(!n)return!1;let r=n.compareWith(o.start);return r===`same`?t.localeCompare(s)>0:r===`after`});l.insert(e,a),c.bindElementToMarker(a,s)}let d=c.toViewPosition(o.start).getLastMatchingPosition(({item:e})=>{if(!e.is(`uiElement`))return!1;let t=e.getCustomProperty(`markerBoundaryType`);if(!t)return!1;if(t===`end`)return!0;let n=e.getCustomProperty(`markerBoundaryName`),r=u(n,`end`);if(!r)return o.isCollapsed;if(o.isCollapsed)return!0;let i=r.compareWith(o.end);return i===`same`?n.localeCompare(s)<0:i===`after`});l.insert(d,i),c.bindElementToMarker(i,s),t.stop()}}function Jl(e,t){let n=t.writer.remove(e);for(let e of t.writer.createRangeIn(n).getItems())t.mapper.unbindViewElement(e,{defer:!0});return e.start}function Yl(e,t){let n=t.mapper.toViewElement(e);return n&&Jl(t.writer.createRangeOn(n),t)}function Xl(){return(e,t,n)=>{let r=n.mapper.markerNameToElements(t.markerName);if(r){for(let e of r)n.mapper.unbindElementFromMarkerName(e,t.markerName),n.writer.clear(n.writer.createRangeOn(e),e);n.writer.clearClonedElementsGroup(t.markerName),e.stop()}}}function Zl(e){return(t,n,r)=>{let i=e(n.markerName,r);if(!i)return;let a=n.markerRange;r.consumable.consume(a,t.name)&&(Ql(a,!1,r,n,i),Ql(a,!0,r,n,i),t.stop())}}function Ql(e,t,n,r,i){let a=t?e.start:e.end,o=a.nodeAfter&&a.nodeAfter.is(`element`)?a.nodeAfter:null,s=a.nodeBefore&&a.nodeBefore.is(`element`)?a.nodeBefore:null;if(o||s){let e,a;t&&o||!t&&!s?(e=o,a=!0):(e=s,a=!1);let c=n.mapper.toViewElement(e);if(c){$l(c,t,a,n,r,i);return}}eu(n.mapper.toViewPosition(a),t,n,r,i)}function $l(e,t,n,r,i,a){let o=`data-${a.group}-${t?`start`:`end`}-${n?`before`:`after`}`,s=e.hasAttribute(o)?e.getAttribute(o).split(`,`):[];s.unshift(a.name),r.writer.setAttribute(o,s.join(`,`),e),r.mapper.bindElementToMarker(e,i.markerName)}function eu(e,t,n,r,i){let a=`${i.group}-${t?`start`:`end`}`,o=i.name?{name:i.name}:null,s=n.writer.createUIElement(a,o);n.writer.insert(e,s),n.mapper.bindElementToMarker(s,r.markerName)}function tu(e){return(t,n,r)=>{let i=e(n.markerName,r);if(!i)return;let a=r.mapper.markerNameToElements(n.markerName);if(!a)return;for(let e of a)r.mapper.unbindElementFromMarkerName(e,n.markerName),e.is(`containerElement`)?(o(`data-${i.group}-start-before`,e),o(`data-${i.group}-start-after`,e),o(`data-${i.group}-end-before`,e),o(`data-${i.group}-end-after`,e)):r.writer.clear(r.writer.createRangeOn(e),e);r.writer.clearClonedElementsGroup(n.markerName),t.stop();function o(e,t){if(t.hasAttribute(e)){let n=new Set(t.getAttribute(e).split(`,`));n.delete(i.name),n.size==0?r.writer.removeAttribute(e,t):r.writer.setAttribute(e,Array.from(n).join(`,`),t)}}}}function nu(e){return(t,n,r)=>{if(!r.consumable.test(n.item,t.name))return;let i=e(n.attributeOldValue,r,n),a=e(n.attributeNewValue,r,n);if(!i&&!a)return;r.consumable.consume(n.item,t.name);let o=r.mapper.toViewElement(n.item),s=r.writer;if(!o)throw new w(`conversion-attribute-to-attribute-on-text`,r.dispatcher,n);if(n.attributeOldValue!==null&&i){let e=i.value;i.key==`style`&&(e=typeof i.value==`string`?new Vo(s.document.stylesProcessor).setTo(i.value).getStylesEntries().map(([e])=>e):Object.keys(i.value)),s.removeAttribute(i.key,e,o)}if(n.attributeNewValue!==null&&a){let e=a.value;a.key==`style`&&typeof a.value==`string`&&(e=Object.fromEntries(new Vo(s.document.stylesProcessor).setTo(a.value).getStylesEntries())),s.setAttribute(a.key,e,!1,o)}}}function ru(e){return(t,n,r)=>{if(!n.item||!(n.item instanceof _l||n.item instanceof Tl)&&!n.item.is(`$textProxy`))return;let i=vu(e,n,r);if(!i||!r.consumable.consume(n.item,t.name))return;let a=r.writer,o=Bl(a,i),s=a.document.selection;if(n.item instanceof _l||n.item instanceof Tl)a.wrap(s.getFirstRange(),o);else{let e=r.mapper.toViewRange(n.range),t=a.wrap(e,o);for(let e of t.getItems())if(e.is(`attributeElement`)&&e.isSimilar(o)){r.mapper.bindElementToMarker(e,n.markerName);break}}}}function iu(e){return(t,n,r)=>{if(!n.item||!(n.item instanceof Ml))return;let i=vu(e,n,r);if(!i||!r.consumable.test(n.item,t.name))return;let a=r.mapper.toViewElement(n.item);if(a&&a.getCustomProperty(`addHighlight`)){r.consumable.consume(n.item,t.name);for(let e of B._createIn(n.item))r.consumable.consume(e.item,t.name);a.getCustomProperty(`addHighlight`)(a,i,r.writer),r.mapper.bindElementToMarker(a,n.markerName)}}}function au(e){return(t,n,r)=>{if(n.markerRange.isCollapsed)return;let i=vu(e,n,r);if(!i)return;let a=Bl(r.writer,i),o=r.mapper.markerNameToElements(n.markerName);if(o){for(let e of o)r.mapper.unbindElementFromMarkerName(e,n.markerName),e.is(`attributeElement`)?r.writer.unwrap(r.writer.createRangeOn(e),a):e.getCustomProperty(`removeHighlight`)(e,i.id,r.writer);r.writer.clearClonedElementsGroup(n.markerName),t.stop()}}}function ou(e){let t=pu(e.model),n=mu(e.view,`container`);return t.attributes.length&&(t.children=!0),r=>{r.on(`insert:${t.name}`,Gl(n,xu(t)),{priority:e.converterPriority||`normal`}),(t.children||t.attributes.length)&&r.on(`reduceChanges`,bu(t),{priority:`low`})}}function su(e){let t=pu(e.model),n=mu(e.view,`container`);return t.children=!0,r=>{if(r._conversionApi.schema.checkChild(t.name,`$text`))throw new w(`conversion-element-to-structure-disallowed-text`,r,{elementName:t.name});r.on(`insert:${t.name}`,Kl(n,xu(t)),{priority:e.converterPriority||`normal`}),r.on(`reduceChanges`,bu(t),{priority:`low`})}}function cu(e){e=Rt(e);let t=e.model;typeof t==`string`&&(t={key:t});let n=`attribute:${t.key}`;if(t.name&&(n+=`:`+t.name),t.values)for(let n of t.values)e.view[n]=mu(e.view[n],`attribute`);else e.view=mu(e.view,`attribute`);let r=gu(e);return t=>{t.on(n,Wl(r),{priority:e.converterPriority||`normal`})}}function lu(e){e=Rt(e);let t=e.model;typeof t==`string`&&(t={key:t});let n=`attribute:${t.key}`;if(t.name&&(n+=`:`+t.name),t.values)for(let n of t.values)e.view[n]=_u(e.view[n]);else e.view=_u(e.view);let r=gu(e);return t=>{t.on(n,nu(r),{priority:e.converterPriority||`normal`})}}function uu(e){let t=mu(e.view,`ui`);return n=>{n.on(`addMarker:${e.model}`,ql(t),{priority:e.converterPriority||`normal`}),n.on(`removeMarker:${e.model}`,Xl(),{priority:e.converterPriority||`normal`})}}function du(e){e=Rt(e);let t=e.model,n=e.view;return n||=n=>({group:t,name:n.substr(e.model.length+1)}),r=>{r.on(`addMarker:${t}`,Zl(n),{priority:e.converterPriority||`normal`}),r.on(`removeMarker:${t}`,tu(n),{priority:e.converterPriority||`normal`})}}function fu(e){return t=>{t.on(`addMarker:${e.model}`,ru(e.view),{priority:e.converterPriority||`normal`}),t.on(`addMarker:${e.model}`,iu(e.view),{priority:e.converterPriority||`normal`}),t.on(`removeMarker:${e.model}`,au(e.view),{priority:e.converterPriority||`normal`})}}function pu(e){return typeof e==`string`&&(e={name:e}),{name:e.name,attributes:e.attributes?A(e.attributes):[],children:!!e.children}}function mu(e,t){return typeof e==`function`?e:((n,r)=>hu(e,r,t))}function hu(e,t,n){typeof e==`string`&&(e={name:e});let r,i=t.writer,a=Object.assign({},e.attributes);if(n==`container`)r=i.createContainerElement(e.name,a);else if(n==`attribute`){let t={priority:e.priority||ws.DEFAULT_PRIORITY};r=i.createAttributeElement(e.name,a,t)}else r=i.createUIElement(e.name,a);if(e.styles){let t=Object.keys(e.styles);for(let n of t)i.setStyle(n,e.styles[n],r)}if(e.classes){let t=e.classes;if(typeof t==`string`)i.addClass(t,r);else for(let e of t)i.addClass(e,r)}return r}function gu(e){return e.model.values?((t,n,r)=>{let i=e.view[t];return i?i(t,n,r):null}):e.view}function _u(e){return typeof e==`string`?t=>({key:e,value:t}):typeof e==`object`?e.value?()=>e:t=>({key:e.key,value:t}):e}function vu(e,t,n){let r=typeof e==`function`?e(t,n):{...e};return r?(r.priority||=10,r.id||=t.markerName,r):null}function yu(e){return(t,n)=>{if(!t.is(`element`,e.name))return!1;if(n.type==`attribute`){if(e.attributes.includes(n.attributeKey))return!0}else if(e.children)return!0;return!1}}function bu(e){let t=yu(e);return(e,n)=>{let r=[];n.reconvertedElements||=new Set;for(let e of n.changes){let i=e.type==`attribute`?e.range.start.nodeAfter:e.position.parent;if(!i||!t(i,e)||e.type==`reinsert`){r.push(e);continue}if(e.type==`insert`&&e.action==`rename`&&n.refreshedItems.add(e.position.nodeAfter),!n.reconvertedElements.has(i)){n.reconvertedElements.add(i);let e=z._createBefore(i),t=r.length;for(let n=r.length-1;n>=0;n--){let i=r[n],a=(i.type==`attribute`?i.range.start:i.position).compareWith(e);if(a==`before`||i.type==`remove`&&a==`same`)break;t=n}r.splice(t,0,{type:`reinsert`,name:i.name,position:e,length:1})}}n.changes=r}}function xu(e){return(t,n,r={})=>{let i=[`insert`];for(let n of e.attributes)t.hasAttribute(n)&&i.push(`attribute:${n}`);return i.every(e=>n.test(t,e))?(r.preflight||i.forEach(e=>n.consume(t,e)),!0):!1}}function Su(e,t,n){return(r,i)=>{let a=r.createContainerElement(`$slot`),o=null;if(i===`children`)o=Array.from(e.getChildren());else if(typeof i==`function`)o=Array.from(e.getChildren()).filter(e=>i(e));else throw new w(`conversion-slot-mode-unknown`,n.dispatcher,{modeOrFilter:i});return t.set(a,o),a}}function Cu(e,t,n){let r=Array.from(t.values()).flat(),i=new Set(r);if(i.size!=r.length)throw new w(`conversion-slot-filter-overlap`,n.dispatcher,{element:e});if(i.size!=e.childCount)throw new w(`conversion-slot-filter-incomplete`,n.dispatcher,{element:e})}function wu(e,t,n,r){n.mapper.on(`modelToViewPosition`,o,{priority:`highest`});let i=null,a=null;for([i,a]of t)Tu(e,a,n,r),n.writer.setCustomProperty(`$structureSlotParent`,!0,i.parent),n.writer.move(n.writer.createRangeIn(i),n.writer.createPositionBefore(i)),n.writer.remove(i);n.mapper.off(`modelToViewPosition`,o);function o(e,t){let n=t.modelPosition.nodeAfter,r=a.indexOf(n);r<0||(t.viewPosition=t.mapper.findPositionIn(i,r))}}function Tu(e,t,n,r){for(let i of t)Eu(e.root,i,n,r)||n.convertItem(i)}function Eu(e,t,n,r){let{writer:i,mapper:a}=n;if(!r.reconversion)return!1;let o=a.toViewElement(t);return!o||o.root==e||!n.canReuseView(o)?!1:(i.move(i.createRangeOn(o),a.toViewPosition(z._createBefore(t))),!0)}function Du(e,t,{preflight:n}={}){return n?t.test(e,`insert`):t.consume(e,`insert`)}function Ou(e){let{schema:t,document:n}=e.model;for(let r of n.getRoots())if(r.isEmpty&&!t.checkChild(r,`$text`)&&t.checkChild(r,`paragraph`))return e.insertElement(`paragraph`,r),!0;return!1}function ku(e,t,n){let r=n.createContext(e);return!(!n.checkChild(r,`paragraph`)||!n.checkChild(r.push(`paragraph`),t))}function Au(e,t){let n=t.createElement(`paragraph`);return t.insert(n,e),t.createPositionAt(n,0)}var ju=class extends Fl{elementToElement(e){return this.add(Fu(e))}elementToAttribute(e){return this.add(Iu(e))}attributeToAttribute(e){return this.add(Lu(e))}elementToMarker(e){return this.add(Ru(e))}dataToMarker(e){return this.add(zu(e))}};function Mu(){return(e,t,n)=>{if(!t.modelRange&&n.consumable.consume(t.viewItem,{name:!0})){let{modelRange:e,modelCursor:r}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=e,t.modelCursor=r}}}function Nu(){return(e,t,{schema:n,consumable:r,writer:i})=>{let a=t.modelCursor;if(!r.test(t.viewItem))return;if(!n.checkChild(a,`$text`)){if(!ku(a,`$text`,n)||t.viewItem.data.trim().length==0)return;a=Au(a,i)}r.consume(t.viewItem);let o=i.createText(t.viewItem.data);i.insert(o,a),t.modelRange=i.createRange(a,a.getShiftedBy(o.offsetSize)),t.modelCursor=t.modelRange.end}}function Pu(e,t){return(n,r)=>{let i=r.newSelection,a=[];for(let e of i.getRanges())a.push(t.toModelRange(e));let o=e.createSelection(a,{backward:i.isBackward});o.isEqual(e.document.selection)||e.change(e=>{e.setSelection(o)})}}function Fu(e){e=Rt(e);let t=Hu(e),n=Vu(e.view),r=n?`element:${n}`:`element`;return n=>{n.on(r,t,{priority:e.converterPriority||`normal`})}}function Iu(e){e=Rt(e),Gu(e);let t=Ku(e,!1),n=Vu(e.view),r=n?`element:${n}`:`element`;return n=>{n.on(r,t,{priority:e.converterPriority||`low`})}}function Lu(e){e=Rt(e);let t=null;(typeof e.view==`string`||e.view.key)&&(t=Wu(e)),Gu(e,t);let n=Ku(e,!0);return t=>{t.on(`element`,n,{priority:e.converterPriority||`low`})}}function Ru(e){let t=Yu(e.model);return Fu({...e,model:t})}function zu(e){e=Rt(e),e.model||=t=>t?e.view+`:`+t:e.view;let t={view:e.view,model:e.model},n=Hu(Xu(t,`start`)),r=Hu(Xu(t,`end`));return i=>{i.on(`element:${e.view}-start`,n,{priority:e.converterPriority||`normal`}),i.on(`element:${e.view}-end`,r,{priority:e.converterPriority||`normal`});let a=ge.low,o=ge.highest,s=ge.get(e.converterPriority)/o;i.on(`element`,Bu(t),{priority:a+s})}}function Bu(e){return(t,n,r)=>{let i=`data-${e.view}`;if(!r.consumable.test(n.viewItem,{attributes:i+`-end-after`})&&!r.consumable.test(n.viewItem,{attributes:i+`-start-after`})&&!r.consumable.test(n.viewItem,{attributes:i+`-end-before`})&&!r.consumable.test(n.viewItem,{attributes:i+`-start-before`}))return;n.modelRange||Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor)),r.consumable.consume(n.viewItem,{attributes:i+`-end-after`})&&a(n.modelRange.end,n.viewItem.getAttribute(i+`-end-after`).split(`,`)),r.consumable.consume(n.viewItem,{attributes:i+`-start-after`})&&a(n.modelRange.end,n.viewItem.getAttribute(i+`-start-after`).split(`,`)),r.consumable.consume(n.viewItem,{attributes:i+`-end-before`})&&a(n.modelRange.start,n.viewItem.getAttribute(i+`-end-before`).split(`,`)),r.consumable.consume(n.viewItem,{attributes:i+`-start-before`})&&a(n.modelRange.start,n.viewItem.getAttribute(i+`-start-before`).split(`,`));function a(t,i){for(let a of i){let i=e.model(a,r),o=r.writer.createElement(`$marker`,{"data-name":i});r.writer.insert(o,t),n.modelCursor.isEqual(t)?n.modelCursor=n.modelCursor.getShiftedBy(1):n.modelCursor=n.modelCursor._getTransformedByInsertion(t,1),n.modelRange=n.modelRange._getTransformedByInsertion(t,1)[0]}}}}function Vu(e){return typeof e==`string`?e:typeof e==`object`&&typeof e.name==`string`?e.name:null}function Hu(e){let t=new Po(e.view);return(n,r,i)=>{let a=t.match(r.viewItem);if(!a)return;let o=a.match;if(o.name=!0,!i.consumable.test(r.viewItem,o))return;let s=Uu(e.model,r.viewItem,i);s&&i.safeInsert(s,r.modelCursor)&&(i.consumable.consume(r.viewItem,o),i.convertChildren(r.viewItem,s),i.updateConversionResult(s,r))}}function Uu(e,t,n){return e instanceof Function?e(t,n):n.writer.createElement(e)}function Wu(e){typeof e.view==`string`&&(e.view={key:e.view});let t=e.view.key,n=e.view.value===void 0?/[\s\S]*/:e.view.value,r;return r=t==`class`||t==`style`?{[t==`class`?`classes`:`styles`]:n}:{attributes:{[t]:n}},e.view.name&&(r.name=e.view.name),e.view=r,t}function Gu(e,t=null){let n=t===null?!0:e=>e.getAttribute(t);e.model={key:typeof e.model==`object`?e.model.key:e.model,value:typeof e.model!=`object`||e.model.value===void 0?n:e.model.value}}function Ku(e,t){let n=new Po(e.view);return(r,i,a)=>{if(!i.modelRange&&t)return;let o=n.match(i.viewItem);if(!o||(qu(e.view,i.viewItem)?o.match.name=!0:delete o.match.name,!a.consumable.test(i.viewItem,o.match)))return;let s=e.model.key,c=typeof e.model.value==`function`?e.model.value(i.viewItem,a,i):e.model.value;c!=null&&(i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor)),Ju(i.modelRange,{key:s,value:c},t,a)&&(a.consumable.test(i.viewItem,{name:!0})&&(o.match.name=!0),a.consumable.consume(i.viewItem,o.match)))}}function qu(e,t){let n=typeof e==`function`?e(t):e;return typeof n==`object`&&!Vu(n)?!1:!n.classes&&!n.attributes&&!n.styles}function Ju(e,t,n,r){let i=!1;for(let a of Array.from(e.getItems({shallow:n})))r.schema.checkAttribute(a,t.key)&&(i=!0,!a.hasAttribute(t.key)&&r.writer.setAttribute(t.key,t.value,a));return i}function Yu(e){return(t,n)=>{let r=typeof e==`string`?e:e(t,n);return n.writer.createElement(`$marker`,{"data-name":r})}}function Xu(e,t){return{view:`${e.view}-${t}`,model:(t,n)=>{let r=t.getAttribute(`name`),i=e.model(r,n);return n.writer.createElement(`$marker`,{"data-name":i})}}}const Zu=D();var Qu=class extends Zu{model;view;mapper;downcastDispatcher;constructor(e,t){super(),this.model=e,this.view=new qc(t),this.mapper=new ol,this.downcastDispatcher=new fl({mapper:this.mapper,schema:e.schema});let n=this.model.document,r=n.selection,i=this.model.markers;this.listenTo(this.model,`_beforeChanges`,()=>{this.view._disableRendering(!0)},{priority:`highest`}),this.listenTo(this.model,`_afterChanges`,()=>{this.view._disableRendering(!1)},{priority:`lowest`}),this.listenTo(n,`change`,()=>{this.view.change(e=>{this.downcastDispatcher.convertChanges(n.differ,i,e),this.downcastDispatcher.convertSelection(r,i,e)})},{priority:`low`}),this.listenTo(this.view.document,`selectionChange`,Pu(this.model,this.mapper)),this.downcastDispatcher.on(`insert:$text`,Ll(),{priority:`lowest`}),this.downcastDispatcher.on(`insert`,Rl(),{priority:`lowest`}),this.downcastDispatcher.on(`remove`,zl(),{priority:`low`}),this.downcastDispatcher.on(`cleanSelection`,Ul()),this.downcastDispatcher.on(`selection`,Vl(),{priority:`low`}),this.downcastDispatcher.on(`selection`,Hl(),{priority:`low`}),this.view.document.roots.bindTo(this.model.document.roots).using(e=>{if(e.rootName==`$graveyard`)return null;let t=new ns(this.view.document,e.name);return t.rootName=e.rootName,this.mapper.bindElements(e,t),t})}destroy(){this.view.destroy(),this.stopListening()}reconvertMarker(e){let t=typeof e==`string`?e:e.name,n=this.model.markers.get(t);if(!n)throw new w(`editingcontroller-reconvertmarker-marker-not-exist`,this,{markerName:t});this.model.change(()=>{this.model.markers._refresh(n)})}reconvertItem(e){this.model.change(()=>{this.model.document.differ._refreshItem(e)})}};const $u=D();var ed=class extends $u{_sourceDefinitions={};_attributeProperties=Object.create(null);_customChildChecks=new Map;_customAttributeChecks=new Map;_genericCheckSymbol=Symbol(`$generic`);_compiledDefinitions;constructor(){super(),this.decorate(`checkChild`),this.decorate(`checkAttribute`),this.on(`checkAttribute`,(e,t)=>{t[0]=new td(t[0])},{priority:`highest`}),this.on(`checkChild`,(e,t)=>{t[0]=new td(t[0]),t[1]=this.getDefinition(t[1])},{priority:`highest`})}register(e,t){if(this._sourceDefinitions[e])throw new w(`schema-cannot-register-item-twice`,this,{itemName:e});this._sourceDefinitions[e]=[Object.assign({},t)],this._clearCache()}extend(e,t){if(!this._sourceDefinitions[e])throw new w(`schema-cannot-extend-missing-item`,this,{itemName:e});this._sourceDefinitions[e].push(Object.assign({},t)),this._clearCache()}getDefinitions(){return this._compiledDefinitions||this._compile(),this._compiledDefinitions}getDefinition(e){let t;return t=typeof e==`string`?e:`is`in e&&(e.is(`$text`)||e.is(`$textProxy`))?`$text`:e.name,this.getDefinitions()[t]}isRegistered(e){return!!this.getDefinition(e)}isBlock(e){let t=this.getDefinition(e);return!!(t&&t.isBlock)}isLimit(e){let t=this.getDefinition(e);return t?!!(t.isLimit||t.isObject):!1}isObject(e){let t=this.getDefinition(e);return t?!!(t.isObject||t.isLimit&&t.isSelectable&&t.isContent):!1}isInline(e){let t=this.getDefinition(e);return!!(t&&t.isInline)}isSelectable(e){let t=this.getDefinition(e);return t?!!(t.isSelectable||t.isObject):!1}isContent(e){let t=this.getDefinition(e);return t?!!(t.isContent||t.isObject):!1}checkChild(e,t){return t?this._checkContextMatch(e,t):!1}checkAttribute(e,t){let n=this.getDefinition(e.last);if(!n)return!1;let r=this._evaluateAttributeChecks(e,t);return r===void 0?n.allowAttributes.includes(t):r}checkMerge(e,t){if(e instanceof z){let t=e.nodeBefore,n=e.nodeAfter;if(!(t instanceof Ml))throw new w(`schema-check-merge-no-element-before`,this);if(!(n instanceof Ml))throw new w(`schema-check-merge-no-element-after`,this);return this.checkMerge(t,n)}if(this.isLimit(e)||this.isLimit(t))return!1;for(let n of t.getChildren())if(!this.checkChild(e,n))return!1;return!0}addChildCheck(e,t){let n=t===void 0?this._genericCheckSymbol:t,r=this._customChildChecks.get(n)||[];r.push(e),this._customChildChecks.set(n,r)}addAttributeCheck(e,t){let n=t===void 0?this._genericCheckSymbol:t,r=this._customAttributeChecks.get(n)||[];r.push(e),this._customAttributeChecks.set(n,r)}setAttributeProperties(e,t){this._attributeProperties[e]=Object.assign(this.getAttributeProperties(e),t)}getAttributeProperties(e){return this._attributeProperties[e]||Object.create(null)}getLimitElement(e){let t;for(t=e instanceof z?e.parent:(e instanceof B?[e]:Array.from(e.getRanges())).reduce((e,t)=>{let n=t.getCommonAncestor();return e?e.getCommonAncestor(n,{includeSelf:!0}):n},null);!this.isLimit(t)&&t.parent;)t=t.parent;return t}checkAttributeInSelection(e,t){if(e.isCollapsed){let n=[...e.getFirstPosition().getAncestors(),new Sl(``,e.getAttributes())];return this.checkAttribute(n,t)}else{let n=e.getRanges();for(let e of n)for(let n of e)if(this.checkAttribute(n.item,t))return!0}return!1}*getValidRanges(e,t,n={}){e=vd(e);for(let r of e)yield*this._getValidRangesForRange(r,t,n)}getNearestSelectionRange(e,t=`both`){if(e.root.rootName==`$graveyard`)return null;if(this.checkChild(e,`$text`))return new B(e);let n,r,i=e.getAncestors().reverse().find(e=>this.isLimit(e))||e.root;(t==`both`||t==`backward`)&&(n=new Xc({boundaries:B._createIn(i),startPosition:e,direction:`backward`})),(t==`both`||t==`forward`)&&(r=new Xc({boundaries:B._createIn(i),startPosition:e}));for(let e of _d(n,r)){let t=e.walker==n?`elementEnd`:`elementStart`,r=e.value;if(r.type==t&&this.isObject(r.item))return B._createOn(r.item);if(this.checkChild(r.nextPosition,`$text`))return new B(r.nextPosition)}return null}findAllowedParent(e,t){let n=e.parent;for(;n;){if(this.checkChild(n,t))return n;if(this.isLimit(n))return null;n=n.parent}return null}setAllowedAttributes(e,t,n){let r=n.model;for(let[i,a]of Object.entries(t))r.schema.checkAttribute(e,i)&&n.setAttribute(i,a,e)}removeDisallowedAttributes(e,t){for(let n of e)if(n.is(`$text`))yd(this,n,t);else{let e=B._createIn(n).getPositions();for(let n of e){let e=n.nodeBefore||n.parent;yd(this,e,t)}}}getAttributesWithProperty(e,t,n){let r={};for(let[i,a]of e.getAttributes()){let e=this.getAttributeProperties(i);e[t]!==void 0&&(n===void 0||n===e[t])&&(r[i]=a)}return r}createContext(e){return new td(e)}_clearCache(){this._compiledDefinitions=null}_compile(){let e={},t=this._sourceDefinitions,n=Object.keys(t);for(let r of n)e[r]=nd(t[r],r);let r=Object.values(e);for(let t of r)rd(e,t),id(e,t),ad(e,t),od(e,t);for(let t of r)sd(e,t);for(let t of r)cd(e,t);for(let t of r)ld(e,t);for(let t of r)dd(e,t);for(let t of r)fd(e,t);this._compiledDefinitions=ud(e)}_checkContextMatch(e,t){let n=e.last,r=this._evaluateChildChecks(e,t);if(r=r===void 0?t.allowIn.includes(n.name):r,!r)return!1;let i=this.getDefinition(n),a=e.trimLast();return i?a.length==0?!0:this._checkContextMatch(a,i):!1}_evaluateChildChecks(e,t){let n=this._customChildChecks.get(this._genericCheckSymbol)||[],r=this._customChildChecks.get(t.name)||[];for(let i of[...n,...r]){let n=i(e,t);if(n!==void 0)return n}}_evaluateAttributeChecks(e,t){let n=this._customAttributeChecks.get(this._genericCheckSymbol)||[],r=this._customAttributeChecks.get(t)||[];for(let i of[...n,...r]){let n=i(e,t);if(n!==void 0)return n}}*_getValidRangesForRange(e,t,n){let r=e.start,i=e.start;for(let a of e.getItems({shallow:!0})){if(a.is(`element`))if(n.includeEmptyRanges&&a.isEmpty){let e=this.createContext(a);this.checkChild(e,`$text`)&&this.checkAttribute(e.push(`$text`),t)&&(yield B._createIn(a))}else yield*this._getValidRangesForRange(B._createIn(a),t,n);this.checkAttribute(a,t)||(r.isEqual(i)||(yield new B(r,i)),r=z._createAfter(a)),i=z._createAfter(a)}r.isEqual(i)||(yield new B(r,i))}findOptimalInsertionRange(e,t){let n=e.getSelectedElement();if(n&&this.isObject(n)&&!this.isInline(n))return t==`before`||t==`after`?new B(z._createAt(n,t)):B._createOn(n);let r=j(e.getSelectedBlocks());if(!r)return new B(e.focus);if(r.isEmpty)return new B(z._createAt(r,0));let i=z._createAfter(r);return e.focus.isTouching(i)?new B(i):new B(z._createBefore(r))}},td=class e{_items;constructor(t){if(t instanceof e)return t;let n;n=typeof t==`string`?[t]:Array.isArray(t)?t:t.getAncestors({includeSelf:!0}),this._items=n.map(gd)}get length(){return this._items.length}get last(){return this._items[this._items.length-1]}[Symbol.iterator](){return this._items[Symbol.iterator]()}push(t){let n=new e([t]);return n._items=[...this._items,...n._items],n}trimLast(){let t=new e([]);return t._items=this._items.slice(0,-1),t}getItem(e){return this._items[e]}*getNames(){yield*this._items.map(e=>e.name)}endsWith(e){return Array.from(this.getNames()).join(` `).endsWith(e)}startsWith(e){return Array.from(this.getNames()).join(` `).startsWith(e)}};function nd(e,t){let n={name:t,allowIn:new Set,allowChildren:new Set,disallowIn:new Set,disallowChildren:new Set,allowContentOf:new Set,allowWhere:new Set,allowAttributes:new Set,disallowAttributes:new Set,allowAttributesOf:new Set,inheritTypesFrom:new Set};return pd(e,n),md(e,n,`allowIn`),md(e,n,`allowChildren`),md(e,n,`disallowIn`),md(e,n,`disallowChildren`),md(e,n,`allowContentOf`),md(e,n,`allowWhere`),md(e,n,`allowAttributes`),md(e,n,`disallowAttributes`),md(e,n,`allowAttributesOf`),md(e,n,`inheritTypesFrom`),hd(e,n),n}function rd(e,t){for(let n of t.allowIn){let r=e[n];r?r.allowChildren.add(t.name):t.allowIn.delete(n)}}function id(e,t){for(let n of t.allowChildren){let r=e[n];r?r.allowIn.add(t.name):t.allowChildren.delete(n)}}function ad(e,t){for(let n of t.disallowIn){let r=e[n];r?r.disallowChildren.add(t.name):t.disallowIn.delete(n)}}function od(e,t){for(let n of t.disallowChildren){let r=e[n];r?r.disallowIn.add(t.name):t.disallowChildren.delete(n)}}function sd(e,t){for(let e of t.disallowChildren)t.allowChildren.delete(e);for(let e of t.disallowIn)t.allowIn.delete(e);for(let e of t.disallowAttributes)t.allowAttributes.delete(e)}function cd(e,t){for(let n of t.allowContentOf){let r=e[n];r&&(r.disallowChildren.forEach(n=>{t.allowChildren.has(n)||(t.disallowChildren.add(n),e[n].disallowIn.add(t.name))}),r.allowChildren.forEach(n=>{t.disallowChildren.has(n)||(t.allowChildren.add(n),e[n].allowIn.add(t.name))}))}}function ld(e,t){for(let n of t.allowWhere){let r=e[n];r&&(r.disallowIn.forEach(n=>{t.allowIn.has(n)||(t.disallowIn.add(n),e[n].disallowChildren.add(t.name))}),r.allowIn.forEach(n=>{t.disallowIn.has(n)||(t.allowIn.add(n),e[n].allowChildren.add(t.name))}))}}function ud(e){let t={};for(let n of Object.values(e))t[n.name]={name:n.name,isBlock:!!n.isBlock,isContent:!!n.isContent,isInline:!!n.isInline,isLimit:!!n.isLimit,isObject:!!n.isObject,isSelectable:!!n.isSelectable,allowIn:Array.from(n.allowIn).filter(t=>!!e[t]),allowChildren:Array.from(n.allowChildren).filter(t=>!!e[t]),allowAttributes:Array.from(n.allowAttributes)};return t}function dd(e,t){for(let n of t.allowAttributesOf){let r=e[n];if(!r)return;r.allowAttributes.forEach(e=>{t.disallowAttributes.has(e)||t.allowAttributes.add(e)})}}function fd(e,t){for(let n of t.inheritTypesFrom){let r=e[n];if(r){let e=Object.keys(r).filter(e=>e.startsWith(`is`));for(let n of e)n in t||(t[n]=r[n])}}}function pd(e,t){for(let n of e){let e=Object.keys(n).filter(e=>e.startsWith(`is`));for(let r of e)t[r]=!!n[r]}}function md(e,t,n){for(let r of e){let e=r[n];typeof e==`string`&&(e=[e]),Array.isArray(e)&&e.forEach(e=>t[n].add(e))}}function hd(e,t){for(let n of e){let e=n.inheritAllFrom;e&&(t.allowContentOf.add(e),t.allowWhere.add(e),t.allowAttributesOf.add(e),t.inheritTypesFrom.add(e))}}function gd(e){return typeof e==`string`||e.is(`documentFragment`)?{name:typeof e==`string`?e:`$documentFragment`,*getAttributeKeys(){},getAttribute(){}}:{name:e.is(`element`)?e.name:`$text`,*getAttributeKeys(){yield*e.getAttributeKeys()},getAttribute(t){return e.getAttribute(t)}}}function*_d(e,t){let n=!1;for(;!n;){if(n=!0,e){let t=e.next();t.done||(n=!1,yield{walker:e,value:t.value})}if(t){let e=t.next();e.done||(n=!1,yield{walker:t,value:e.value})}}}function*vd(e){for(let t of e)yield*t.getMinimalFlatRanges()}function yd(e,t,n){for(let r of t.getAttributeKeys())e.checkAttribute(t,r)||n.removeAttribute(r,t)}const bd=E();var xd=class extends bd{conversionApi;_splitParts=new Map;_cursorParents=new Map;_modelCursor=null;_emptyElementsToKeep=new Set;constructor(e){super(),this.conversionApi={...e,consumable:null,writer:null,store:null,convertItem:(e,t)=>this._convertItem(e,t),convertChildren:(e,t)=>this._convertChildren(e,t),safeInsert:(e,t)=>this._safeInsert(e,t),updateConversionResult:(e,t)=>this._updateConversionResult(e,t),splitToAllowedParent:(e,t)=>this._splitToAllowedParent(e,t),getSplitParts:e=>this._getSplitParts(e),keepEmptyElement:e=>this._keepEmptyElement(e)}}convert(e,t,n=[`$root`]){this.fire(`viewCleanup`,e),this._modelCursor=Cd(n,t),this.conversionApi.writer=t,this.conversionApi.consumable=Ao.createFrom(e),this.conversionApi.store={};let{modelRange:r}=this._convertItem(e,this._modelCursor),i=t.createDocumentFragment();if(r){this._removeEmptyElements();let e=this._modelCursor.parent,n=e._removeChildren(0,e.childCount);i._insertChild(0,n),i.markers=Sd(i,t)}return this._modelCursor=null,this._splitParts.clear(),this._cursorParents.clear(),this._emptyElementsToKeep.clear(),this.conversionApi.writer=null,this.conversionApi.store=null,i}_convertItem(e,t){let n={viewItem:e,modelCursor:t,modelRange:null};if(e.is(`element`)?this.fire(`element:${e.name}`,n,this.conversionApi):e.is(`$text`)?this.fire(`text`,n,this.conversionApi):this.fire(`documentFragment`,n,this.conversionApi),n.modelRange&&!(n.modelRange instanceof B))throw new w(`view-conversion-dispatcher-incorrect-result`,this);return{modelRange:n.modelRange,modelCursor:n.modelCursor}}_convertChildren(e,t){let n=t.is(`position`)?t:z._createAt(t,0),r=new B(n);for(let t of Array.from(e.getChildren())){let e=this._convertItem(t,n);e.modelRange instanceof B&&(r.end=e.modelRange.end,n=e.modelCursor)}return{modelRange:r,modelCursor:n}}_safeInsert(e,t){let n=this._splitToAllowedParent(e,t);return n?(this.conversionApi.writer.insert(e,n.position),!0):!1}_updateConversionResult(e,t){let n=this._getSplitParts(e),r=this.conversionApi.writer;t.modelRange||=r.createRange(r.createPositionBefore(e),r.createPositionAfter(n[n.length-1]));let i=this._cursorParents.get(e);i?t.modelCursor=r.createPositionAt(i,0):t.modelCursor=t.modelRange.end}_splitToAllowedParent(e,t){let{schema:n,writer:r}=this.conversionApi,i=n.findAllowedParent(t,e);if(i){if(i===t.parent)return{position:t};this._modelCursor.parent.getAncestors().includes(i)&&(i=null)}if(!i)return ku(t,e,n)?{position:Au(t,r)}:null;let a=this.conversionApi.writer.split(t,i),o=[];for(let e of a.range.getWalker())if(e.type==`elementEnd`)o.push(e.item);else{let t=o.pop(),n=e.item;this._registerSplitPair(t,n)}let s=a.range.end.parent;return this._cursorParents.set(e,s),{position:a.position,cursorParent:s}}_registerSplitPair(e,t){this._splitParts.has(e)||this._splitParts.set(e,[e]);let n=this._splitParts.get(e);this._splitParts.set(t,n),n.push(t)}_getSplitParts(e){let t;return t=this._splitParts.has(e)?this._splitParts.get(e):[e],t}_keepEmptyElement(e){this._emptyElementsToKeep.add(e)}_removeEmptyElements(){let e=new Map;for(let t of this._splitParts.keys())if(t.isEmpty&&!this._emptyElementsToKeep.has(t)){let n=e.get(t.parent)||[];n.push(t),this._splitParts.delete(t),e.set(t.parent,n)}for(let[t,n]of e)t._removeChildrenArray(n);e.size&&this._removeEmptyElements()}};function Sd(e,t){let n=new Set,r=new Map,i=B._createIn(e).getItems();for(let e of i)e.is(`element`,`$marker`)&&n.add(e);for(let e of n){let n=e.getAttribute(`data-name`),i=t.createPositionBefore(e);r.has(n)?r.get(n).end=i.clone():r.set(n,new B(i.clone())),t.remove(e)}return r}function Cd(e,t){let n;for(let r of new td(e)){let e={};for(let t of r.getAttributeKeys())e[t]=r.getAttribute(t);let i=t.createElement(r.name,e);n&&t.insert(i,n),n=z._createAt(i,0)}return n}var wd=class{getHtml(e){let t=u.document.implementation.createHTMLDocument(``).createElement(`div`);return t.appendChild(e),t.innerHTML}},Td=class{domParser;domConverter;htmlWriter;skipComments=!0;constructor(e){this.domParser=new DOMParser,this.domConverter=new _c(e,{renderingMode:`data`}),this.htmlWriter=new wd}toData(e){let t=this.domConverter.viewToDom(e);return this.htmlWriter.getHtml(t)}toView(e){let t=this._toDom(e);return this.domConverter.domToView(t,{skipComments:this.skipComments})}registerRawContentMatcher(e){this.domConverter.registerRawContentMatcher(e)}useFillerType(e){this.domConverter.blockFillerMode=e==`marked`?`markedNbsp`:`nbsp`}_toDom(e){/<(?:html|body|head|meta)(?:\s[^>]*)?>/i.test(e.trim().slice(0,1e4))||(e=`${e}`);let t=this.domParser.parseFromString(e,`text/html`),n=t.createDocumentFragment(),r=t.body.childNodes;for(;r.length>0;)n.appendChild(r[0]);return n}};const Kee=E();var Ed=class extends Kee{model;mapper;downcastDispatcher;upcastDispatcher;viewDocument;stylesProcessor;htmlProcessor;processor;_viewWriter;constructor(e,t){super(),this.model=e,this.mapper=new ol,this.downcastDispatcher=new fl({mapper:this.mapper,schema:e.schema}),this.downcastDispatcher.on(`insert:$text`,Ll(),{priority:`lowest`}),this.downcastDispatcher.on(`insert`,Rl(),{priority:`lowest`}),this.upcastDispatcher=new xd({schema:e.schema}),this.viewDocument=new Cs(t),this.stylesProcessor=t,this.htmlProcessor=new Td(this.viewDocument),this.processor=this.htmlProcessor,this._viewWriter=new Rs(this.viewDocument),this.upcastDispatcher.on(`text`,Nu(),{priority:`lowest`}),this.upcastDispatcher.on(`element`,Mu(),{priority:`lowest`}),this.upcastDispatcher.on(`documentFragment`,Mu(),{priority:`lowest`}),D().prototype.decorate.call(this,`init`),D().prototype.decorate.call(this,`set`),D().prototype.decorate.call(this,`get`),D().prototype.decorate.call(this,`toView`),D().prototype.decorate.call(this,`toModel`),this.on(`init`,()=>{this.fire(`ready`)},{priority:`lowest`}),this.on(`ready`,()=>{this.model.enqueueChange({isUndoable:!1},Ou)},{priority:`lowest`})}get(e={}){let{rootName:t=`main`,trim:n=`empty`}=e;if(!this._checkIfRootsExists([t]))throw new w(`datacontroller-get-non-existent-root`,this);let r=this.model.document.getRoot(t);return r.isAttached()||T(`datacontroller-get-detached-root`,this),n===`empty`&&!this.model.hasContent(r,{ignoreWhitespaces:!0})?``:this.stringify(r,e)}stringify(e,t={}){let n=this.toView(e,t);return this.processor.toData(n)}toView(e,t={}){let n=this.viewDocument,r=this._viewWriter;this.mapper.clearBindings();let i=B._createIn(e),a=new Is(n);this.mapper.bindElements(e,a);let o=e.is(`documentFragment`)?e.markers:qee(e);return this.downcastDispatcher.convert(i,o,r,t),a}init(e){if(this.model.document.version)throw new w(`datacontroller-init-document-not-empty`,this);let t={};if(typeof e==`string`?t.main=e:t=e,!this._checkIfRootsExists(Object.keys(t)))throw new w(`datacontroller-init-non-existent-root`,this);return this.model.enqueueChange({isUndoable:!1},e=>{for(let n of Object.keys(t)){let r=this.model.document.getRoot(n);e.insert(this.parse(t[n],r),r,0)}}),Promise.resolve()}set(e,t={}){let n={};if(typeof e==`string`?n.main=e:n=e,!this._checkIfRootsExists(Object.keys(n)))throw new w(`datacontroller-set-non-existent-root`,this);this.model.enqueueChange(t.batchType||{},e=>{e.setSelection(null),e.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());for(let t of Object.keys(n)){let r=this.model.document.getRoot(t);e.remove(e.createRangeIn(r)),e.insert(this.parse(n[t],r),r,0)}})}parse(e,t=`$root`){let n=this.processor.toView(e);return this.toModel(n,t)}toModel(e,t=`$root`){return this.model.change(n=>this.upcastDispatcher.convert(e,n,t))}addStyleProcessorRules(e){e(this.stylesProcessor)}registerRawContentMatcher(e){this.processor&&this.processor!==this.htmlProcessor&&this.processor.registerRawContentMatcher(e),this.htmlProcessor.registerRawContentMatcher(e)}destroy(){this.stopListening()}_checkIfRootsExists(e){for(let t of e)if(!this.model.document.getRoot(t))return!1;return!0}};function qee(e){let t=[],n=e.root.document;if(!n)return new Map;let r=B._createIn(e);for(let e of n.model.markers){let n=e.getRange(),i=n.isCollapsed,a=n.start.isEqual(r.start)||n.end.isEqual(r.end);if(i&&a)t.push([e.name,n]);else{let i=r.getIntersection(n);i&&t.push([e.name,i])}}return new Map(t)}var Dd=class{_helpers=new Map;_downcast;_upcast;constructor(e,t){this._downcast=A(e),this._createConversionHelpers({name:`downcast`,dispatchers:this._downcast,isDowncast:!0}),this._upcast=A(t),this._createConversionHelpers({name:`upcast`,dispatchers:this._upcast,isDowncast:!1})}addAlias(e,t){let n=this._downcast.includes(t);if(!this._upcast.includes(t)&&!n)throw new w(`conversion-add-alias-dispatcher-not-registered`,this);this._createConversionHelpers({name:e,dispatchers:[t],isDowncast:n})}for(e){if(!this._helpers.has(e))throw new w(`conversion-for-unknown-group`,this);return this._helpers.get(e)}elementToElement(e){this.for(`downcast`).elementToElement(e);for(let{model:t,view:n}of Od(e))this.for(`upcast`).elementToElement({model:t,view:n,converterPriority:e.converterPriority})}attributeToElement(e){this.for(`downcast`).attributeToElement(e);for(let{model:t,view:n}of Od(e))this.for(`upcast`).elementToAttribute({view:n,model:t,converterPriority:e.converterPriority})}attributeToAttribute(e){this.for(`downcast`).attributeToAttribute(e);for(let{model:t,view:n}of Od(e))this.for(`upcast`).attributeToAttribute({view:n,model:t})}_createConversionHelpers({name:e,dispatchers:t,isDowncast:n}){if(this._helpers.has(e))throw new w(`conversion-group-exists`,this);let r=n?new Il(t):new ju(t);this._helpers.set(e,r)}};function*Od(e){if(e.model.values)for(let t of e.model.values){let n={key:e.model.key,value:t},r=e.view[t];yield*kd(n,r,e.upcastAlso?e.upcastAlso[t]:void 0)}else yield*kd(e.model,e.view,e.upcastAlso)}function*kd(e,t,n){if(yield{model:e,view:t},n)for(let t of A(n))yield{model:e,view:t}}var Ad=class{namespaces;domParser;domConverter;htmlWriter;skipComments=!0;constructor(e,t={}){this.namespaces=t.namespaces||[],this.domParser=new DOMParser,this.domConverter=new _c(e,{renderingMode:`data`}),this.htmlWriter=new wd}toData(e){let t=this.domConverter.viewToDom(e);return this.htmlWriter.getHtml(t)}toView(e){let t=this._toDom(e);return this.domConverter.domToView(t,{keepOriginalCase:!0,skipComments:this.skipComments})}registerRawContentMatcher(e){this.domConverter.registerRawContentMatcher(e)}useFillerType(e){this.domConverter.blockFillerMode=e==`marked`?`markedNbsp`:`nbsp`}_toDom(e){e=``xmlns:${e}="nsp"`).join(` `)}>${e}`;let t=this.domParser.parseFromString(e,`text/xml`),n=t.querySelector(`parsererror`);if(n)throw Error(`Parse error - `+n.textContent);let r=t.createDocumentFragment(),i=t.documentElement.childNodes;for(;i.length>0;)r.appendChild(i[0]);return r}},jd=class{baseVersion;isDocumentOperation;batch;constructor(e){this.baseVersion=e,this.isDocumentOperation=this.baseVersion!==null,this.batch=null}_validate(){}toJSON(){let e=Object.assign({},this);return e.__className=this.constructor.className,delete e.batch,delete e.isDocumentOperation,e}static get className(){return`Operation`}static fromJSON(e,t){return new this(e.baseVersion)}};function Md(e,t){let n=Id(t),r=n.reduce((e,t)=>e+t.offsetSize,0),i=e.parent;Rd(e);let a=e.index;return i._insertChild(a,n),Ld(i,a+n.length),Ld(i,a),new B(e,e.getShiftedBy(r))}function Nd(e){if(!e.isFlat)throw new w(`operation-utils-remove-range-not-flat`,this);let t=e.start.parent;Rd(e.start),Rd(e.end);let n=t._removeChildren(e.start.index,e.end.index-e.start.index);return Ld(t,e.start.index),n}function Pd(e,t){if(!e.isFlat)throw new w(`operation-utils-move-range-not-flat`,this);let n=Nd(e);return t=t._getTransformedByDeletion(e.start,e.end.offset-e.start.offset),Md(t,n)}function Fd(e,t,n){Rd(e.start),Rd(e.end);for(let r of e.getItems({shallow:!0})){let e=r.is(`$textProxy`)?r.textNode:r;n===null?e._removeAttribute(t):e._setAttribute(t,n),Ld(e.parent,e.index)}Ld(e.end.parent,e.end.index)}function Id(e){let t=[];function n(e){if(typeof e==`string`)t.push(new Sl(e));else if(e instanceof Yc)t.push(new Sl(e.data,e.getAttributes()));else if(e instanceof gl)t.push(e);else if(pr(e))for(let t of e)n(t)}n(e);for(let e=1;ee.maxOffset)throw new w(`move-operation-nodes-do-not-exist`,this);if(e===t&&n=n&&this.targetPosition.path[e]e._clone(!0))),n=new e(this.position,t,this.baseVersion);return n.shouldReceiveAttributes=this.shouldReceiveAttributes,n}getReversed(){let e=this.position.root.document.graveyard,t=new z(e,[0]);return new Bd(this.position,this.nodes.maxOffset,t,this.baseVersion+1)}_validate(){let e=this.position.parent;if(!e||e.maxOffsete._clone(!0))),Md(this.position,e)}toJSON(){let e=super.toJSON();return e.position=this.position.toJSON(),e.nodes=this.nodes.toJSON(),e}static get className(){return`InsertOperation`}static fromJSON(t,n){let r=[];for(let e of t.nodes)e.name?r.push(Ml.fromJSON(e)):r.push(Sl.fromJSON(e));let i=new e(z.fromJSON(t.position,n),r,t.baseVersion);return i.shouldReceiveAttributes=t.shouldReceiveAttributes,i}},Hd=class e extends jd{splitPosition;howMany;insertionPosition;graveyardPosition;constructor(e,t,n,r,i){super(i),this.splitPosition=e.clone(),this.splitPosition.stickiness=`toNext`,this.howMany=t,this.insertionPosition=n,this.graveyardPosition=r?r.clone():null,this.graveyardPosition&&(this.graveyardPosition.stickiness=`toNext`)}get type(){return`split`}get moveTargetPosition(){let e=this.insertionPosition.path.slice();return e.push(0),new z(this.insertionPosition.root,e)}get movedRange(){let e=this.splitPosition.getShiftedBy(1/0);return new B(this.splitPosition,e)}get affectedSelectable(){let e=[B._createFromPositionAndShift(this.splitPosition,0),B._createFromPositionAndShift(this.insertionPosition,0)];return this.graveyardPosition&&e.push(B._createFromPositionAndShift(this.graveyardPosition,0)),e}clone(){return new e(this.splitPosition,this.howMany,this.insertionPosition,this.graveyardPosition,this.baseVersion)}getReversed(){let e=this.splitPosition.root.document.graveyard,t=new z(e,[0]);return new Ud(this.moveTargetPosition,this.howMany,this.splitPosition,t,this.baseVersion+1)}_validate(){let e=this.splitPosition.parent,t=this.splitPosition.offset;if(!e||e.maxOffset1&&e.sourcePosition.isEqual(t.deletionPosition)?this._setRelation(e,t,`firstToMoveMerged`):e.howMany>1&&e.sourcePosition.getShiftedBy(e.howMany-1).isEqual(t.deletionPosition)&&this._setRelation(e,t,`lastToMoveMerged`):t instanceof Bd&&(e.targetPosition.isEqual(t.sourcePosition)||e.targetPosition.isBefore(t.sourcePosition)?this._setRelation(e,t,`insertBefore`):this._setRelation(e,t,`insertAfter`));else if(e instanceof Hd){if(t instanceof Ud)e.splitPosition.isBefore(t.sourcePosition)&&this._setRelation(e,t,`splitBefore`);else if(t instanceof Bd)if(e.splitPosition.isEqual(t.sourcePosition)||e.splitPosition.isBefore(t.sourcePosition))this._setRelation(e,t,`splitBefore`);else{let n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&n.containsPosition(e.splitPosition)){let r=n.end.offset-e.splitPosition.offset,i=e.splitPosition.offset-n.start.offset;this._setRelation(e,t,{howMany:r,offset:i})}}}else if(e instanceof Ud)t instanceof Ud?(e.targetPosition.isEqual(t.sourcePosition)||this._setRelation(e,t,`mergeTargetNotMoved`),e.sourcePosition.isEqual(t.targetPosition)&&this._setRelation(e,t,`mergeSourceNotMoved`),e.sourcePosition.isEqual(t.sourcePosition)&&this._setRelation(e,t,`mergeSameElement`)):t instanceof Hd?e.sourcePosition.isEqual(t.splitPosition)&&this._setRelation(e,t,`splitAtSource`):t instanceof Bd&&t.howMany>0&&(e.sourcePosition.isEqual(t.sourcePosition.getShiftedBy(t.howMany))&&this._setRelation(e,t,`mergeSourceAffected`),e.targetPosition.isEqual(t.sourcePosition)&&this._setRelation(e,t,`mergeTargetWasBefore`));else if(e instanceof Wd){let n=e.newRange;if(!n)return;if(t instanceof Ud){let r=n.start.isEqual(t.targetPosition),i=n.start.isEqual(t.deletionPosition),a=n.end.isEqual(t.deletionPosition),o=n.end.isEqual(t.sourcePosition);(r||i||a||o)&&this._setRelation(e,t,{wasInLeftElement:r,wasStartBeforeMergedElement:i,wasEndBeforeMergedElement:a,wasInRightElement:o})}}}getContext(e,t,n){return{aIsStrong:n,aWasUndone:this._wasUndone(e),bWasUndone:this._wasUndone(t),abRelation:this._useRelations?this._getRelation(e,t):null,baRelation:this._useRelations?this._getRelation(t,e):null,forceWeakRemove:this._forceWeakRemove}}_wasUndone(e){let t=this.originalOperations.get(e);return t.wasUndone||this._history.isUndoneOperation(t)}_getRelation(e,t){let n=this.originalOperations.get(t),r=this._history.getUndoneOperation(n);if(!r)return null;let i=this.originalOperations.get(e),a=this._relations.get(i);return a&&a.get(r)||null}_setRelation(e,t,n){let r=this.originalOperations.get(e),i=this.originalOperations.get(t),a=this._relations.get(r);a||(a=new Map,this._relations.set(r,a)),a.set(i,n)}};function af(e,t){for(let n of e)n.baseVersion=t++}function of(e,t){for(let n=0;n{if(e.key===t.key&&e.range.start.hasSameParentAs(t.range.start)){let r=e.range.getDifference(t.range).map(t=>new Gd(t,e.key,e.oldValue,e.newValue,0)),i=e.range.getIntersection(t.range);return i&&n.aIsStrong&&r.push(new Gd(i,t.key,t.newValue,e.newValue,0)),r.length==0?[new Kd(0)]:r}else return[e]}),V(Gd,Vd,(e,t)=>{if(e.range.start.hasSameParentAs(t.position)&&e.range.containsPosition(t.position)){let n=e.range._getTransformedByInsertion(t.position,t.howMany,!t.shouldReceiveAttributes).map(t=>new Gd(t,e.key,e.oldValue,e.newValue,e.baseVersion));if(t.shouldReceiveAttributes){let r=cf(t,e.key,e.oldValue);r&&n.unshift(r)}return n}return e.range=e.range._getTransformedByInsertion(t.position,t.howMany,!1)[0],[e]});function cf(e,t,n){let r=e.nodes.getNode(0).getAttribute(t);return r==n?null:new Gd(new B(e.position,e.position.getShiftedBy(e.howMany)),t,r,n,0)}V(Gd,Ud,(e,t)=>{let n=[];e.range.start.hasSameParentAs(t.deletionPosition)&&(e.range.containsPosition(t.deletionPosition)||e.range.start.isEqual(t.deletionPosition))&&n.push(B._createFromPositionAndShift(t.graveyardPosition,1));let r=e.range._getTransformedByMergeOperation(t);return r.isCollapsed||n.push(r),n.map(t=>new Gd(t,e.key,e.oldValue,e.newValue,e.baseVersion))}),V(Gd,Bd,(e,t)=>lf(e.range,t).map(t=>new Gd(t,e.key,e.oldValue,e.newValue,e.baseVersion)));function lf(e,t){let n=B._createFromPositionAndShift(t.sourcePosition,t.howMany),r=null,i=[];n.containsRange(e,!0)?r=e:e.start.hasSameParentAs(n.start)?(i=e.getDifference(n),r=e.getIntersection(n)):i=[e];let a=[];for(let e of i){e=e._getTransformedByDeletion(t.sourcePosition,t.howMany);let n=t.getMovedRangeStart(),r=e.start.hasSameParentAs(n),i=e._getTransformedByInsertion(n,t.howMany,r);a.push(...i)}return r&&a.push(r._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany,!1)[0]),a}V(Gd,Hd,(e,t)=>{if(e.range.end.isEqual(t.insertionPosition))return t.graveyardPosition||e.range.end.offset++,[e];if(e.range.start.hasSameParentAs(t.splitPosition)&&e.range.containsPosition(t.splitPosition)){let n=e.clone();return n.range=new B(t.moveTargetPosition.clone(),e.range.end._getCombined(t.splitPosition,t.moveTargetPosition)),e.range.end=t.splitPosition.clone(),e.range.end.stickiness=`toPrevious`,[e,n]}return e.range=e.range._getTransformedBySplitOperation(t),[e]}),V(Vd,Gd,(e,t)=>{let n=[e];if(e.shouldReceiveAttributes&&e.position.hasSameParentAs(t.range.start)&&t.range.containsPosition(e.position)){let r=cf(e,t.key,t.newValue);r&&n.push(r)}return n}),V(Vd,Vd,(e,t,n)=>(e.position.isEqual(t.position)&&n.aIsStrong||(e.position=e.position._getTransformedByInsertOperation(t)),[e])),V(Vd,Bd,(e,t)=>(e.position=e.position._getTransformedByMoveOperation(t),[e])),V(Vd,Hd,(e,t)=>(e.position=e.position._getTransformedBySplitOperation(t),[e])),V(Vd,Ud,(e,t)=>(e.position=e.position._getTransformedByMergeOperation(t),[e])),V(Wd,Vd,(e,t)=>(e.oldRange&&=e.oldRange._getTransformedByInsertOperation(t)[0],e.newRange&&=e.newRange._getTransformedByInsertOperation(t)[0],[e])),V(Wd,Wd,(e,t,n)=>{if(e.name==t.name)if(n.aIsStrong)e.oldRange=t.newRange?t.newRange.clone():null;else return[new Kd(0)];return[e]}),V(Wd,Ud,(e,t)=>(e.oldRange&&=e.oldRange._getTransformedByMergeOperation(t),e.newRange&&=e.newRange._getTransformedByMergeOperation(t),[e])),V(Wd,Bd,(e,t)=>{let n=[e];if(e.oldRange&&=B._createFromRanges(e.oldRange._getTransformedByMoveOperation(t)),e.newRange){let r=e.newRange._getTransformedByMoveOperation(t);e.newRange=r[0];for(let t=1;t{if(e.oldRange&&=e.oldRange._getTransformedBySplitOperation(t),e.newRange){if(n.abRelation){let r=e.newRange._getTransformedBySplitOperation(t);return e.newRange.start.isEqual(t.splitPosition)?n.abRelation.wasStartBeforeMergedElement?e.newRange.start=z._createAt(t.insertionPosition):n.abRelation.wasInLeftElement?e.newRange.start=z._createAt(e.newRange.start):e.newRange.start=z._createAt(t.moveTargetPosition):e.newRange.start=r.start,e.newRange.end.isEqual(t.splitPosition)?e.newRange.end.isEqual(t.splitPosition)&&n.abRelation.wasEndBeforeMergedElement?e.newRange.end=z._createAt(t.insertionPosition):n.abRelation.wasInRightElement?e.newRange.end=z._createAt(t.moveTargetPosition):e.newRange.end=z._createAt(e.newRange.end):e.newRange.end=r.end,[e]}e.newRange=e.newRange._getTransformedBySplitOperation(t)}return[e]}),V(Ud,Vd,(e,t)=>(e.sourcePosition.hasSameParentAs(t.position)&&(e.howMany+=t.howMany),e.sourcePosition=e.sourcePosition._getTransformedByInsertOperation(t),e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t),[e])),V(Ud,Ud,(e,t,n)=>{if(e.sourcePosition.isEqual(t.sourcePosition)&&e.targetPosition.isEqual(t.targetPosition))if(n.bWasUndone){let n=t.graveyardPosition.path.slice();return n.push(0),e.sourcePosition=new z(t.graveyardPosition.root,n),e.howMany=0,[e]}else return[new Kd(0)];if(e.sourcePosition.isEqual(t.sourcePosition)&&!e.targetPosition.isEqual(t.targetPosition)&&!n.bWasUndone&&n.abRelation!=`splitAtSource`){let r=e.targetPosition.root.rootName==`$graveyard`,i=t.targetPosition.root.rootName==`$graveyard`;if(i&&!r||!(r&&!i)&&n.aIsStrong){let n=t.targetPosition._getTransformedByMergeOperation(t),r=e.targetPosition._getTransformedByMergeOperation(t);return[new Bd(n,e.howMany,r,0)]}else return[new Kd(0)]}return e.sourcePosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.sourcePosition=e.sourcePosition._getTransformedByMergeOperation(t),e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),(!e.graveyardPosition.isEqual(t.graveyardPosition)||!n.aIsStrong)&&(e.graveyardPosition=e.graveyardPosition._getTransformedByMergeOperation(t)),[e]}),V(Ud,Bd,(e,t,n)=>{let r=B._createFromPositionAndShift(t.sourcePosition,t.howMany);return t.type==`remove`&&!n.bWasUndone&&e.deletionPosition.hasSameParentAs(t.sourcePosition)&&r.containsPosition(e.sourcePosition)?[new Kd(0)]:(t.sourcePosition.getShiftedBy(t.howMany).isEqual(e.sourcePosition)?e.sourcePosition.stickiness=`toNone`:t.targetPosition.isEqual(e.sourcePosition)&&n.abRelation==`mergeSourceAffected`?e.sourcePosition.stickiness=`toNext`:t.sourcePosition.isEqual(e.targetPosition)?(e.targetPosition.stickiness=`toNone`,e.howMany-=t.howMany):t.targetPosition.isEqual(e.targetPosition)&&n.abRelation==`mergeTargetWasBefore`?(e.targetPosition.stickiness=`toPrevious`,e.howMany+=t.howMany):(e.sourcePosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.sourcePosition.hasSameParentAs(t.sourcePosition)&&(e.howMany-=t.howMany)),e.sourcePosition=e.sourcePosition._getTransformedByMoveOperation(t),e.targetPosition=e.targetPosition._getTransformedByMoveOperation(t),e.sourcePosition.stickiness=`toPrevious`,e.targetPosition.stickiness=`toNext`,e.graveyardPosition.isEqual(t.targetPosition)||(e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)),[e])}),V(Ud,Hd,(e,t,n)=>{if(t.graveyardPosition&&(e.graveyardPosition=e.graveyardPosition._getTransformedByDeletion(t.graveyardPosition,1),e.deletionPosition.isEqual(t.graveyardPosition)&&(e.howMany=t.howMany)),e.targetPosition.isEqual(t.splitPosition)&&(t.graveyardPosition&&e.deletionPosition.isEqual(t.graveyardPosition)||n.abRelation==`mergeTargetNotMoved`))return e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t),[e];if(e.sourcePosition.isEqual(t.splitPosition)){if(n.abRelation==`mergeSourceNotMoved`)return e.howMany=0,e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e];if(n.abRelation==`mergeSameElement`||e.sourcePosition.offset>0)return e.sourcePosition=t.moveTargetPosition.clone(),e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e]}return e.sourcePosition.hasSameParentAs(t.splitPosition)&&(e.howMany=t.splitPosition.offset),e.sourcePosition=e.sourcePosition._getTransformedBySplitOperation(t),e.targetPosition=e.targetPosition._getTransformedBySplitOperation(t),[e]}),V(Bd,Vd,(e,t)=>{let n=B._createFromPositionAndShift(e.sourcePosition,e.howMany)._getTransformedByInsertOperation(t,!1)[0];return e.sourcePosition=n.start,e.howMany=n.end.offset-n.start.offset,e.targetPosition.isEqual(t.position)||(e.targetPosition=e.targetPosition._getTransformedByInsertOperation(t)),[e]}),V(Bd,Bd,(e,t,n)=>{let r=B._createFromPositionAndShift(e.sourcePosition,e.howMany),i=B._createFromPositionAndShift(t.sourcePosition,t.howMany),a=n.aIsStrong,o=!n.aIsStrong;n.abRelation==`insertBefore`||n.baRelation==`insertAfter`?o=!0:(n.abRelation==`insertAfter`||n.baRelation==`insertBefore`)&&(o=!1);let s;if(s=e.targetPosition.isEqual(t.targetPosition)&&o?e.targetPosition._getTransformedByDeletion(t.sourcePosition,t.howMany):e.targetPosition._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),uf(e,t)&&uf(t,e))return[t.getReversed()];if(r.containsPosition(t.targetPosition)&&r.containsRange(i,!0))return r.start=r.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),r.end=r.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),df([r],s);if(i.containsPosition(e.targetPosition)&&i.containsRange(r,!0))return r.start=r.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),r.end=r.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),df([r],s);let c=fr(e.sourcePosition.getParentPath(),t.sourcePosition.getParentPath());if(c==`prefix`||c==`extension`)return r.start=r.start._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),r.end=r.end._getTransformedByMove(t.sourcePosition,t.targetPosition,t.howMany),df([r],s);e.type==`remove`&&t.type!=`remove`&&!n.aWasUndone&&!n.forceWeakRemove?a=!0:e.type!=`remove`&&t.type==`remove`&&!n.bWasUndone&&!n.forceWeakRemove&&(a=!1);let l=[],u=r.getDifference(i);for(let e of u){e.start=e.start._getTransformedByDeletion(t.sourcePosition,t.howMany),e.end=e.end._getTransformedByDeletion(t.sourcePosition,t.howMany);let n=fr(e.start.getParentPath(),t.getMovedRangeStart().getParentPath())==`same`,r=e._getTransformedByInsertion(t.getMovedRangeStart(),t.howMany,n);l.push(...r)}let d=r.getIntersection(i);return d!==null&&a&&(d.start=d.start._getCombined(t.sourcePosition,t.getMovedRangeStart()),d.end=d.end._getCombined(t.sourcePosition,t.getMovedRangeStart()),l.length===0?l.push(d):l.length==1?i.start.isBefore(r.start)||i.start.isEqual(r.start)?l.unshift(d):l.push(d):l.splice(1,0,d)),l.length===0?[new Kd(e.baseVersion)]:df(l,s)}),V(Bd,Hd,(e,t,n)=>{let r=e.targetPosition.clone();if((!e.targetPosition.isEqual(t.insertionPosition)||!t.graveyardPosition||n.abRelation==`moveTargetAfter`)&&(r=e.targetPosition._getTransformedBySplitOperation(t)),e.sourcePosition.isEqual(t.insertionPosition)&&n.abRelation==`firstToMoveMerged`)return e.howMany++,e.targetPosition=r,[e];let i=B._createFromPositionAndShift(e.sourcePosition,e.howMany);if(i.end.isEqual(t.insertionPosition))return(!t.graveyardPosition||n.abRelation==`lastToMoveMerged`)&&e.howMany++,e.targetPosition=r,[e];if(i.start.hasSameParentAs(t.splitPosition)&&i.containsPosition(t.splitPosition)){let e=new B(t.splitPosition,i.end);return e=e._getTransformedBySplitOperation(t),df([new B(i.start,t.splitPosition),e],r)}e.targetPosition.isEqual(t.splitPosition)&&n.abRelation==`insertAtSource`&&(r=t.moveTargetPosition),e.targetPosition.isEqual(t.insertionPosition)&&n.abRelation==`insertBetween`&&(r=e.targetPosition);let a=[i._getTransformedBySplitOperation(t)];if(t.graveyardPosition){let r=i.start.isEqual(t.graveyardPosition)||i.containsPosition(t.graveyardPosition);e.howMany>1&&r&&!n.aWasUndone&&a.push(B._createFromPositionAndShift(t.insertionPosition,1))}return df(a,r)}),V(Bd,Ud,(e,t,n)=>{let r=B._createFromPositionAndShift(e.sourcePosition,e.howMany);if(t.deletionPosition.hasSameParentAs(e.sourcePosition)&&r.containsPosition(t.sourcePosition)){if(e.type==`remove`&&!n.forceWeakRemove){if(!n.aWasUndone){let n=[],r=t.graveyardPosition.clone(),i=t.targetPosition._getTransformedByMergeOperation(t),a=e.targetPosition.getTransformedByOperation(t);e.howMany>1&&(n.push(new Bd(e.sourcePosition,e.howMany-1,a,0)),r=r._getTransformedByMove(e.sourcePosition,a,e.howMany-1),i=i._getTransformedByMove(e.sourcePosition,a,e.howMany-1));let o=t.deletionPosition._getCombined(e.sourcePosition,a),s=new Bd(r,1,o,0),c=s.getMovedRangeStart().path.slice();c.push(0);let l=new z(s.targetPosition.root,c);i=i._getTransformedByMove(r,o,1);let u=new Bd(i,t.howMany,l,0);return n.push(s),n.push(u),n}}else if(e.howMany==1)return n.bWasUndone?(e.sourcePosition=t.graveyardPosition.clone(),e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),[e]):[new Kd(0)]}let i=B._createFromPositionAndShift(e.sourcePosition,e.howMany)._getTransformedByMergeOperation(t);return e.sourcePosition=i.start,e.howMany=i.end.offset-i.start.offset,e.targetPosition=e.targetPosition._getTransformedByMergeOperation(t),[e]}),V(qd,Vd,(e,t)=>(e.position=e.position._getTransformedByInsertOperation(t),[e])),V(qd,Ud,(e,t)=>e.position.isEqual(t.deletionPosition)?(e.position=t.graveyardPosition.clone(),e.position.stickiness=`toNext`,[e]):(e.position=e.position._getTransformedByMergeOperation(t),[e])),V(qd,Bd,(e,t)=>(e.position=e.position._getTransformedByMoveOperation(t),[e])),V(qd,qd,(e,t,n)=>{if(e.position.isEqual(t.position))if(n.aIsStrong)e.oldName=t.newName;else return[new Kd(0)];return[e]}),V(qd,Hd,(e,t)=>{let n=e.position.path;return fr(n,t.splitPosition.getParentPath())==`same`&&!t.graveyardPosition?[e,new qd(e.position.getShiftedBy(1),e.oldName,e.newName,0)]:(e.position=e.position._getTransformedBySplitOperation(t),[e])}),V(Jd,Jd,(e,t,n)=>{if(e.root===t.root&&e.key===t.key)if(n.aIsStrong)e.oldValue=t.newValue;else return[new Kd(0)];return[e]}),V(Yd,Yd,(e,t)=>e.rootName===t.rootName&&e.isAdd===t.isAdd?[new Kd(0)]:[e]),V(Hd,Vd,(e,t)=>(e.splitPosition.hasSameParentAs(t.position)&&e.splitPosition.offset{if(!e.graveyardPosition&&!n.bWasUndone&&e.splitPosition.hasSameParentAs(t.sourcePosition)){let n=t.graveyardPosition.path.slice();n.push(0);let r=new Hd(new z(t.graveyardPosition.root,n),0,Hd.getInsertionPosition(new z(t.graveyardPosition.root,n)),null,0);return e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t),e.insertionPosition=Hd.getInsertionPosition(e.splitPosition),e.graveyardPosition=r.insertionPosition.clone(),e.graveyardPosition.stickiness=`toNext`,[r,e]}return e.splitPosition.hasSameParentAs(t.deletionPosition)&&!e.splitPosition.isAfter(t.deletionPosition)&&e.howMany--,e.splitPosition.hasSameParentAs(t.targetPosition)&&(e.howMany+=t.howMany),e.splitPosition=e.splitPosition._getTransformedByMergeOperation(t),e.insertionPosition=Hd.getInsertionPosition(e.splitPosition),e.graveyardPosition&&=e.graveyardPosition._getTransformedByMergeOperation(t),[e]}),V(Hd,Bd,(e,t,n)=>{let r=B._createFromPositionAndShift(t.sourcePosition,t.howMany);if(e.graveyardPosition){let i=r.start.isEqual(e.graveyardPosition)||r.containsPosition(e.graveyardPosition);if(!n.bWasUndone&&i){let n=e.splitPosition._getTransformedByMoveOperation(t),r=e.graveyardPosition._getTransformedByMoveOperation(t),i=r.path.slice();i.push(0);let a=new z(r.root,i);return[new Bd(n,e.howMany,a,0)]}e.graveyardPosition=e.graveyardPosition._getTransformedByMoveOperation(t)}let i=e.splitPosition.isEqual(t.targetPosition);if(i&&(n.baRelation==`insertAtSource`||n.abRelation==`splitBefore`))return e.howMany+=t.howMany,e.splitPosition=e.splitPosition._getTransformedByDeletion(t.sourcePosition,t.howMany),e.insertionPosition=Hd.getInsertionPosition(e.splitPosition),[e];if(i&&n.abRelation&&n.abRelation.howMany){let{howMany:t,offset:r}=n.abRelation;return e.howMany+=t,e.splitPosition=e.splitPosition.getShiftedBy(r),[e]}if(e.splitPosition.hasSameParentAs(t.sourcePosition)&&r.containsPosition(e.splitPosition)){let n=t.howMany-(e.splitPosition.offset-t.sourcePosition.offset);return e.howMany-=n,e.splitPosition.hasSameParentAs(t.targetPosition)&&e.splitPosition.offset{if(e.splitPosition.isEqual(t.splitPosition)){if(!e.graveyardPosition&&!t.graveyardPosition||e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition))return[new Kd(0)];if(n.abRelation==`splitBefore`)return e.howMany=0,e.graveyardPosition=e.graveyardPosition._getTransformedBySplitOperation(t),[e]}if(e.graveyardPosition&&t.graveyardPosition&&e.graveyardPosition.isEqual(t.graveyardPosition)){let r=e.splitPosition.root.rootName==`$graveyard`,i=t.splitPosition.root.rootName==`$graveyard`;if(i&&!r||!(r&&!i)&&n.aIsStrong){let n=[];return t.howMany&&n.push(new Bd(t.moveTargetPosition,t.howMany,t.splitPosition,0)),e.howMany&&n.push(new Bd(e.splitPosition,e.howMany,e.moveTargetPosition,0)),n}else return[new Kd(0)]}if(e.graveyardPosition&&=e.graveyardPosition._getTransformedBySplitOperation(t),e.splitPosition.isEqual(t.insertionPosition)&&n.abRelation==`splitBefore`)return e.howMany++,[e];if(t.splitPosition.isEqual(e.insertionPosition)&&n.baRelation==`splitBefore`){let n=t.insertionPosition.path.slice();n.push(0);let r=new z(t.insertionPosition.root,n);return[e,new Bd(e.insertionPosition,1,r,0)]}return e.splitPosition.hasSameParentAs(t.splitPosition)&&e.splitPosition.offset{let n=t[0];n.isDocumentOperation&&hf.call(this,n)},{priority:`low`})}function hf(e){let t=this.getTransformedByOperation(e);if(!this.isEqual(t)){let e=this.toPosition();this.path=t.path,this.root=t.root,this.fire(`change`,e)}}var gf=class{operations;isUndoable;isLocal;isUndo;isTyping;constructor(e={}){typeof e==`string`&&(e=e===`transparent`?{isUndoable:!1}:{},T(`batch-constructor-deprecated-string-type`));let{isUndoable:t=!0,isLocal:n=!0,isUndo:r=!1,isTyping:i=!1}=e;this.operations=[],this.isUndoable=t,this.isLocal=n,this.isUndo=r,this.isTyping=i}get baseVersion(){for(let e of this.operations)if(e.baseVersion!==null)return e.baseVersion;return null}addOperation(e){return e.isDocumentOperation&&(e.batch=this,this.operations.push(e)),e}},_f=class e{static _statesPriority=[void 0,`refresh`,`rename`,`move`];_markerCollection;_changesInElement=new Map;_elementsSnapshots=new Map;_elementChildrenSnapshots=new Map;_elementState=new Map;_changedMarkers=new Map;_changedRoots=new Map;_changeCount=0;_cachedChanges=null;_cachedChangesWithGraveyard=null;_refreshedItems=new Set;constructor(e){this._markerCollection=e}get isEmpty(){return this._changesInElement.size==0&&this._changedMarkers.size==0&&this._changedRoots.size==0}bufferOperation(e){let t=e;switch(t.type){case`insert`:if(this._isInInsertedElement(t.position.parent))return;this._markInsert(t.position.parent,t.position.offset,t.nodes.maxOffset);break;case`addAttribute`:case`removeAttribute`:case`changeAttribute`:for(let e of t.range.getItems({shallow:!0}))this._isInInsertedElement(e.parent)||this._markAttribute(e);break;case`remove`:case`move`:case`reinsert`:{if(t.sourcePosition.isEqual(t.targetPosition)||t.sourcePosition.getShiftedBy(t.howMany).isEqual(t.targetPosition))return;let e=this._isInInsertedElement(t.sourcePosition.parent),n=this._isInInsertedElement(t.targetPosition.parent);e||this._markRemove(t.sourcePosition.parent,t.sourcePosition.offset,t.howMany),n||this._markInsert(t.targetPosition.parent,t.getMovedRangeStart().offset,t.howMany);let r=B._createFromPositionAndShift(t.sourcePosition,t.howMany);for(let e of r.getItems({shallow:!0}))this._setElementState(e,`move`);break}case`rename`:{if(this._isInInsertedElement(t.position.parent))return;this._markRemove(t.position.parent,t.position.offset,1),this._markInsert(t.position.parent,t.position.offset,1);let e=B._createFromPositionAndShift(t.position,1);for(let t of this._markerCollection.getMarkersIntersectingRange(e)){let e=t.getData();this.bufferMarkerChange(t.name,e,e)}this._setElementState(t.position.nodeAfter,`rename`);break}case`split`:{let e=t.splitPosition.parent;if(!this._isInInsertedElement(e)){this._markRemove(e,t.splitPosition.offset,t.howMany);let n=B._createFromPositionAndShift(t.splitPosition,t.howMany);for(let e of n.getItems({shallow:!0}))this._setElementState(e,`move`)}this._isInInsertedElement(t.insertionPosition.parent)||this._markInsert(t.insertionPosition.parent,t.insertionPosition.offset,1),t.graveyardPosition&&(this._markRemove(t.graveyardPosition.parent,t.graveyardPosition.offset,1),this._setElementState(t.graveyardPosition.nodeAfter,`move`));break}case`merge`:{let e=t.sourcePosition.parent;this._isInInsertedElement(e.parent)||this._markRemove(e.parent,e.startOffset,1);let n=t.graveyardPosition.parent;this._markInsert(n,t.graveyardPosition.offset,1),this._setElementState(e,`move`);let r=t.targetPosition.parent;if(!this._isInInsertedElement(r)){this._markInsert(r,t.targetPosition.offset,e.maxOffset);let n=B._createFromPositionAndShift(t.sourcePosition,t.howMany);for(let e of n.getItems({shallow:!0}))this._setElementState(e,`move`)}break}case`detachRoot`:case`addRoot`:{let e=t.affectedSelectable;if(!e._isLoaded||e.isAttached()==t.isAdd)return;this._bufferRootStateChange(t.rootName,t.isAdd);break}case`addRootAttribute`:case`removeRootAttribute`:case`changeRootAttribute`:{if(!t.root._isLoaded)return;let e=t.root.rootName;this._bufferRootAttributeChange(e,t.key,t.oldValue,t.newValue);break}}this._cachedChanges=null}bufferMarkerChange(e,t,n){t.range&&t.range.root.is(`rootElement`)&&!t.range.root._isLoaded&&(t.range=null),n.range&&n.range.root.is(`rootElement`)&&!n.range.root._isLoaded&&(n.range=null);let r=this._changedMarkers.get(e);r?r.newMarkerData=n:(r={newMarkerData:n,oldMarkerData:t},this._changedMarkers.set(e,r)),r.oldMarkerData.range==null&&n.range==null&&this._changedMarkers.delete(e)}getMarkersToRemove(){let e=[];for(let[t,n]of this._changedMarkers)n.oldMarkerData.range!=null&&e.push({name:t,range:n.oldMarkerData.range});return e}getMarkersToAdd(){let e=[];for(let[t,n]of this._changedMarkers)n.newMarkerData.range!=null&&e.push({name:t,range:n.newMarkerData.range});return e}getChangedMarkers(){return Array.from(this._changedMarkers).map(([e,t])=>({name:e,data:{oldRange:t.oldMarkerData.range,newRange:t.newMarkerData.range}}))}hasDataChanges(){if(this.getChanges().length||this._changedRoots.size>0)return!0;for(let{newMarkerData:e,oldMarkerData:t}of this._changedMarkers.values()){if(e.affectsData!==t.affectsData)return!0;if(e.affectsData){let n=e.range&&!t.range,r=!e.range&&t.range,i=e.range&&t.range&&!e.range.isEqual(t.range);if(n||r||i)return!0}}return!1}getChanges(e={}){if(this._cachedChanges)return e.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice();let t=[];for(let e of this._changesInElement.keys()){let n=this._changesInElement.get(e).sort((e,t)=>e.offset===t.offset?e.type==t.type?0:e.type==`remove`?-1:1:e.offsete.position.root==t.position.root?e.position.isEqual(t.position)?e.changeCount-t.changeCount:e.position.isBefore(t.position)?-1:1:e.position.root.rootNamee);for(let e of t)delete e.changeCount,e.type==`attribute`&&(delete e.position,delete e.length);return this._changeCount=0,this._cachedChangesWithGraveyard=t,this._cachedChanges=t.filter(xf),e.includeChangesInGraveyard?this._cachedChangesWithGraveyard.slice():this._cachedChanges.slice()}getChangedRoots(){return Array.from(this._changedRoots.values()).map(e=>{let t={...e};return t.state!==void 0&&delete t.attributes,t})}getRefreshedItems(){return new Set(this._refreshedItems)}reset(){this._changesInElement.clear(),this._elementChildrenSnapshots.clear(),this._elementsSnapshots.clear(),this._elementState.clear(),this._changedMarkers.clear(),this._changedRoots.clear(),this._refreshedItems.clear(),this._cachedChanges=null}_refreshItem(e){if(this._isInInsertedElement(e.parent))return;this._markRemove(e.parent,e.startOffset,e.offsetSize),this._markInsert(e.parent,e.startOffset,e.offsetSize),this._refreshedItems.add(e),this._setElementState(e,`refresh`);let t=B._createOn(e);for(let e of this._markerCollection.getMarkersIntersectingRange(t)){let t=e.getData();this.bufferMarkerChange(e.name,t,t)}this._cachedChanges=null}_bufferRootLoad(e){if(e.isAttached()){this._bufferRootStateChange(e.rootName,!0),this._markInsert(e,0,e.maxOffset);for(let t of e.getAttributeKeys())this._bufferRootAttributeChange(e.rootName,t,null,e.getAttribute(t));for(let t of this._markerCollection)if(t.getRange().root==e){let e=t.getData();this.bufferMarkerChange(t.name,{...e,range:null},e)}}}_bufferRootStateChange(e,t){if(!this._changedRoots.has(e)){this._changedRoots.set(e,{name:e,state:t?`attached`:`detached`});return}let n=this._changedRoots.get(e);n.state===void 0?n.state=t?`attached`:`detached`:(delete n.state,n.attributes===void 0&&this._changedRoots.delete(e))}_bufferRootAttributeChange(e,t,n,r){let i=this._changedRoots.get(e)||{name:e},a=i.attributes||{};if(a[t]){let e=a[t];r===e.oldValue?delete a[t]:e.newValue=r}else a[t]={oldValue:n,newValue:r};Object.entries(a).length===0?(delete i.attributes,i.state===void 0&&this._changedRoots.delete(e)):(i.attributes=a,this._changedRoots.set(e,i))}_markInsert(e,t,n){if(e.root.is(`rootElement`)&&!e.root._isLoaded)return;let r={type:`insert`,offset:t,howMany:n,count:this._changeCount++};this._markChange(e,r)}_markRemove(e,t,n){if(e.root.is(`rootElement`)&&!e.root._isLoaded)return;let r={type:`remove`,offset:t,howMany:n,count:this._changeCount++};this._markChange(e,r),this._removeAllNestedChanges(e,t,n)}_markAttribute(e){if(e.root.is(`rootElement`)&&!e.root._isLoaded)return;let t={type:`attribute`,offset:e.startOffset,howMany:e.offsetSize,count:this._changeCount++};this._markChange(e.parent,t)}_markChange(e,t){this._makeSnapshots(e);let n=this._getChangesForElement(e);this._handleChange(t,n),n.push(t);for(let e=0;er&&this._elementState.set(t,n)}_getDiffActionForNode(e,t){if(!e.is(`element`)||!this._elementsSnapshots.has(e))return t;let n=this._elementState.get(e);return!n||n==`move`?t:n}_getChangesForElement(e){let t;return this._changesInElement.has(e)?t=this._changesInElement.get(e):(t=[],this._changesInElement.set(e,t)),t}_makeSnapshots(e){if(this._elementChildrenSnapshots.has(e))return;let t=yf(e.getChildren());this._elementChildrenSnapshots.set(e,t);for(let e of t)this._elementsSnapshots.set(e.node,e)}_handleChange(e,t){e.nodesToHandle=e.howMany;for(let n of t){let r=e.offset+e.howMany,i=n.offset+n.howMany;if(e.type==`insert`&&(n.type==`insert`&&(e.offset<=n.offset?n.offset+=e.howMany:e.offsetn.offset){if(r>i){let e={type:`attribute`,offset:i,howMany:r-i,count:this._changeCount++};this._handleChange(e,t),t.push(e)}e.nodesToHandle=n.offset-e.offset,e.howMany=e.nodesToHandle}else e.offset>=n.offset&&e.offseti?(e.nodesToHandle=r-i,e.offset=i):e.nodesToHandle=0);if(n.type==`remove`&&e.offsetn.offset){let i={type:`attribute`,offset:n.offset,howMany:r-n.offset,count:this._changeCount++};this._handleChange(i,t),t.push(i),e.nodesToHandle=n.offset-e.offset,e.howMany=e.nodesToHandle}n.type==`attribute`&&(e.offset>=n.offset&&r<=i?(e.nodesToHandle=0,e.howMany=0,e.offset=0):e.offset<=n.offset&&r>=i&&(n.howMany=0))}}e.howMany=e.nodesToHandle,delete e.nodesToHandle}_getInsertDiff(e,t,n,r,i){let a={type:`insert`,position:z._createAt(e,t),name:r.name,attributes:new Map(r.attributes),length:1,changeCount:this._changeCount++,action:n};return n!=`insert`&&i&&(a.before={name:i.name,attributes:new Map(i.attributes)}),a}_getRemoveDiff(e,t,n,r){return{type:`remove`,action:n,position:z._createAt(e,t),name:r.name,attributes:new Map(r.attributes),length:1,changeCount:this._changeCount++}}_getAttributesDiff(e,t,n){let r=[];n=new Map(n);for(let[i,a]of t){let t=n.has(i)?n.get(i):null;t!==a&&r.push({type:`attribute`,position:e.start,range:e.clone(),length:1,attributeKey:i,attributeOldValue:a,attributeNewValue:t,changeCount:this._changeCount++}),n.delete(i)}for(let[t,i]of n)r.push({type:`attribute`,position:e.start,range:e.clone(),length:1,attributeKey:t,attributeOldValue:null,attributeNewValue:i,changeCount:this._changeCount++});return r}_isInInsertedElement(e){let t=e.parent;if(!t)return!1;let n=this._changesInElement.get(t),r=e.startOffset;if(n){for(let e of n)if(e.type==`insert`&&r>=e.offset&&rr){for(let t=0;t1500)for(let t=0;tthis._version+1&&this._gaps.set(this._version,e),this._version=e}get lastOperation(){return this._operations[this._operations.length-1]}addOperation(e){if(e.baseVersion!==this.version)throw new w(`model-document-history-addoperation-incorrect-version`,this,{operation:e,historyVersion:this.version});this._operations.push(e),this._version++,this._baseVersionToOperationIndex.set(e.baseVersion,this._operations.length-1)}getOperations(e,t=this.version){if(!this._operations.length)return[];let n=this._operations[0];e===void 0&&(e=n.baseVersion);let r=t-1;for(let[t,n]of this._gaps)e>t&&et&&rthis.lastOperation.baseVersion)return[];let i=this._baseVersionToOperationIndex.get(e);i===void 0&&(i=0);let a=this._baseVersionToOperationIndex.get(r);return a===void 0&&(a=this._operations.length-1),this._operations.slice(i,a+1)}getOperation(e){let t=this._baseVersionToOperationIndex.get(e);if(t!==void 0)return this._operations[t]}setOperationAsUndone(e,t){this._undoPairs.set(t,e),this._undoneOperations.add(e)}isUndoingOperation(e){return this._undoPairs.has(e)}isUndoneOperation(e){return this._undoneOperations.has(e)}getUndoneOperation(e){return this._undoPairs.get(e)}reset(){this._version=0,this._undoPairs=new Map,this._operations=[],this._undoneOperations=new Set,this._gaps=new Map,this._baseVersionToOperationIndex=new Map}},Cf=class extends Ml{rootName;_document;_isAttached=!0;_isLoaded=!0;constructor(e,t,n=`main`){super(t),this._document=e,this.rootName=n}get document(){return this._document}isAttached(){return this._isAttached}toJSON(){return this.rootName}};Cf.prototype.is=function(e,t){return t?t===this.name&&(e===`rootElement`||e===`model:rootElement`||e===`element`||e===`model:element`):e===`rootElement`||e===`model:rootElement`||e===`element`||e===`model:element`||e===`node`||e===`model:node`};const wf=`$graveyard`,Tf=E();var Ef=class extends Tf{model;history;selection;roots;differ;isReadOnly;_postFixers;_hasSelectionChangedFromTheLastChangeBlock;constructor(e){super(),this.model=e,this.history=new Sf,this.selection=new Tl(this),this.roots=new Fi({idProperty:`rootName`}),this.differ=new _f(e.markers),this.isReadOnly=!1,this._postFixers=new Set,this._hasSelectionChangedFromTheLastChangeBlock=!1,this.createRoot(`$root`,wf),this.listenTo(e,`applyOperation`,(e,t)=>{let n=t[0];n.isDocumentOperation&&this.differ.bufferOperation(n)},{priority:`high`}),this.listenTo(e,`applyOperation`,(e,t)=>{let n=t[0];n.isDocumentOperation&&this.history.addOperation(n)},{priority:`low`}),this.listenTo(this.selection,`change`,()=>{this._hasSelectionChangedFromTheLastChangeBlock=!0}),this.listenTo(e.markers,`update`,(e,t,n,r,i)=>{let a={...t.getData(),range:r};this.differ.bufferMarkerChange(t.name,i,a),n===null&&t.on(`change`,(e,n)=>{let r=t.getData();this.differ.bufferMarkerChange(t.name,{...r,range:n},r)})}),this.registerPostFixer(e=>{let t=!1;for(let n of this.roots)!n.isAttached()&&!n.isEmpty&&(e.remove(e.createRangeIn(n)),t=!0);for(let n of this.model.markers)n.getRange().root.isAttached()||(e.removeMarker(n),t=!0);return t})}get version(){return this.history.version}set version(e){this.history.version=e}get graveyard(){return this.getRoot(wf)}createRoot(e=`$root`,t=`main`){if(this.roots.get(t))throw new w(`model-document-createroot-name-exists`,this,{name:t});let n=new Cf(this,e,t);return this.roots.add(n),n}destroy(){this.selection.destroy(),this.stopListening()}getRoot(e=`main`){return this.roots.get(e)}getRootNames(e=!1){return this.getRoots(e).map(e=>e.rootName)}getRoots(e=!1){return this.roots.filter(t=>t!=this.graveyard&&(e||t.isAttached())&&t._isLoaded)}registerPostFixer(e){this._postFixers.add(e)}toJSON(){let e=see(this);return e.selection=`[engine.model.DocumentSelection]`,e.model=`[engine.model.Model]`,e}_handleChangeBlock(e){this._hasDocumentChangedFromTheLastChangeBlock()&&(this._callPostFixers(e),this.selection.refresh(),this.differ.hasDataChanges()?this.fire(`change:data`,e.batch):this.fire(`change`,e.batch),this.selection.refresh(),this.differ.reset()),this._hasSelectionChangedFromTheLastChangeBlock=!1}_hasDocumentChangedFromTheLastChangeBlock(){return!this.differ.isEmpty||this._hasSelectionChangedFromTheLastChangeBlock}_getDefaultRoot(){let e=this.getRoots();return e.length?e[0]:this.graveyard}_getDefaultRange(){let e=this._getDefaultRoot(),t=this.model,n=t.schema,r=t.createPositionFromPath(e,[0]);return n.getNearestSelectionRange(r)||t.createRange(r)}_validateSelectionRange(e){return e.start.isValid()&&e.end.isValid()&&Df(e.start)&&Df(e.end)}_callPostFixers(e){let t=!1;do for(let n of this._postFixers)if(this.selection.refresh(),t=n(e),t)break;while(t)}};function Df(e){let t=e.textNode;if(t){let n=t.data,r=e.offset-t.startOffset;return!ra(n,r)&&!ia(n,r)}return!0}const Of=E(),kf=E(Jc);var Af=class extends Of{_markers=new Map;[Symbol.iterator](){return this._markers.values()}has(e){let t=e instanceof jf?e.name:e;return this._markers.has(t)}get(e){return this._markers.get(e)||null}_set(e,t,n=!1,r=!1){let i=e instanceof jf?e.name:e;if(i.includes(`,`))throw new w(`markercollection-incorrect-marker-name`,this);let a=this._markers.get(i);if(a){let e=a.getData(),o=a.getRange(),s=!1;return o.isEqual(t)||(a._attachLiveRange(xl.fromRange(t)),s=!0),n!=a.managedUsingOperations&&(a._managedUsingOperations=n,s=!0),typeof r==`boolean`&&r!=a.affectsData&&(a._affectsData=r,s=!0),s&&this.fire(`update:${i}`,a,o,t,e),a}let o=new jf(i,xl.fromRange(t),n,r);return this._markers.set(i,o),this.fire(`update:${i}`,o,null,t,{...o.getData(),range:null}),o}_remove(e){let t=e instanceof jf?e.name:e,n=this._markers.get(t);return n?(this._markers.delete(t),this.fire(`update:${t}`,n,n.getRange(),null,n.getData()),this._destroyMarker(n),!0):!1}_refresh(e){let t=e instanceof jf?e.name:e,n=this._markers.get(t);if(!n)throw new w(`markercollection-refresh-marker-not-exists`,this);let r=n.getRange();this.fire(`update:${t}`,n,r,r,n.getData())}*getMarkersAtPosition(e){for(let t of this)t.getRange().containsPosition(e)&&(yield t)}*getMarkersIntersectingRange(e){for(let t of this)t.getRange().getIntersection(e)!==null&&(yield t)}destroy(){for(let e of this._markers.values())this._destroyMarker(e);this._markers=null,this.stopListening()}*getMarkersGroup(e){for(let t of this._markers.values())t.name.startsWith(e+`:`)&&(yield t)}_destroyMarker(e){e.stopListening(),e._detachLiveRange()}},jf=class extends kf{name;_managedUsingOperations;_affectsData;_liveRange;constructor(e,t,n,r){super(),this.name=e,this._liveRange=this._attachLiveRange(t),this._managedUsingOperations=n,this._affectsData=r}get managedUsingOperations(){if(!this._liveRange)throw new w(`marker-destroyed`,this);return this._managedUsingOperations}get affectsData(){if(!this._liveRange)throw new w(`marker-destroyed`,this);return this._affectsData}getData(){return{range:this.getRange(),affectsData:this.affectsData,managedUsingOperations:this.managedUsingOperations}}getStart(){if(!this._liveRange)throw new w(`marker-destroyed`,this);return this._liveRange.start.clone()}getEnd(){if(!this._liveRange)throw new w(`marker-destroyed`,this);return this._liveRange.end.clone()}getRange(){if(!this._liveRange)throw new w(`marker-destroyed`,this);return this._liveRange.toRange()}toJSON(){return{name:this.name,range:this._liveRange?.toJSON(),usingOperations:this._managedUsingOperations,affectsData:this._affectsData}}_attachLiveRange(e){return this._liveRange&&this._detachLiveRange(),e.delegate(`change:range`).to(this),e.delegate(`change:content`).to(this),this._liveRange=e,e}_detachLiveRange(){this._liveRange.stopDelegating(`change:range`,this),this._liveRange.stopDelegating(`change:content`,this),this._liveRange.detach(),this._liveRange=null}};jf.prototype.is=function(e){return e===`marker`||e===`model:marker`};var Mf=class extends jd{sourcePosition;howMany;constructor(e,t){super(null),this.sourcePosition=e.clone(),this.howMany=t}get type(){return`detach`}get affectedSelectable(){return null}toJSON(){let e=super.toJSON();return e.sourcePosition=this.sourcePosition.toJSON(),e}_validate(){if(this.sourcePosition.root.document)throw new w(`detach-operation-on-document-node`,this)}_execute(){Nd(B._createFromPositionAndShift(this.sourcePosition,this.howMany))}static get className(){return`DetachOperation`}},Nf=class e extends Jc{markers=new Map;_children=new Al;constructor(e){super(),e&&this._insertChild(0,e)}[Symbol.iterator](){return this.getChildren()}get childCount(){return this._children.length}get maxOffset(){return this._children.maxOffset}get isEmpty(){return this.childCount===0}get nextSibling(){return null}get previousSibling(){return null}get root(){return this}get parent(){return null}get document(){return null}isAttached(){return!1}getAncestors(){return[]}getChild(e){return this._children.getNode(e)}getChildAtOffset(e){return this._children.getNodeAtOffset(e)}getChildren(){return this._children[Symbol.iterator]()}getChildIndex(e){return this._children.getNodeIndex(e)}getChildStartOffset(e){return this._children.getNodeStartOffset(e)}getPath(){return[]}getNodeByPath(e){let t=this;for(let n of e)t=t.getChildAtOffset(n);return t}offsetToIndex(e){return this._children.offsetToIndex(e)}toJSON(){let e=[];for(let t of this._children)e.push(t.toJSON());return e}static fromJSON(t){let n=[];for(let e of t)e.name?n.push(Ml.fromJSON(e)):n.push(Sl.fromJSON(e));return new e(n)}_appendChild(e){this._insertChild(this.childCount,e)}_insertChild(e,t){let n=Pf(t);for(let e of n)e.parent!==null&&e._remove(),e.parent=this;this._children._insertNodes(e,n)}_removeChildren(e,t=1){let n=this._children._removeNodes(e,t);for(let e of n)e.parent=null;return n}_removeChildrenArray(e){this._children._removeNodesArray(e);for(let t of e)t.parent=null}};Nf.prototype.is=function(e){return e===`documentFragment`||e===`model:documentFragment`};function Pf(e){return typeof e==`string`?[new Sl(e)]:(pr(e)||(e=[e]),Array.from(e).map(e=>typeof e==`string`?new Sl(e):e instanceof Yc?new Sl(e.data,e.getAttributes()):e))}var Ff=class{model;batch;constructor(e,t){this.model=e,this.batch=t}createText(e,t){return new Sl(e,t)}createElement(e,t){return new Ml(e,t)}createDocumentFragment(){return new Nf}cloneElement(e,t=!0){return e._clone(t)}insert(e,t,n=0){if(this._assertWriterUsedCorrectly(),e instanceof Sl&&e.data==``)return;let r=z._createAt(t,n);if(e.parent)if(Bf(e.root,r.root)){this.move(B._createOn(e),r);return}else if(e.root.document)throw new w(`model-writer-insert-forbidden-move`,this);else this.remove(e);let i=r.root.document?r.root.document.version:null,a=new Vd(r,e instanceof Nf?e._removeChildren(0,e.childCount):e,i);if(e instanceof Sl&&(a.shouldReceiveAttributes=!0),this.batch.addOperation(a),this.model.applyOperation(a),e instanceof Nf)for(let[t,n]of e.markers){let e=z._createAt(n.root,0),i={range:new B(n.start._getCombined(e,r),n.end._getCombined(e,r)),usingOperation:!0,affectsData:!0};this.model.markers.has(t)?this.updateMarker(t,i):this.addMarker(t,i)}}insertText(e,t,n,r){t instanceof Nf||t instanceof Ml||t instanceof z?this.insert(this.createText(e),t,n):this.insert(this.createText(e,t),n,r)}insertElement(e,t,n,r){t instanceof Nf||t instanceof Ml||t instanceof z?this.insert(this.createElement(e),t,n):this.insert(this.createElement(e,t),n,r)}append(e,t){this.insert(e,t,`end`)}appendText(e,t,n){t instanceof Nf||t instanceof Ml?this.insert(this.createText(e),t,`end`):this.insert(this.createText(e,t),n,`end`)}appendElement(e,t,n){t instanceof Nf||t instanceof Ml?this.insert(this.createElement(e),t,`end`):this.insert(this.createElement(e,t),n,`end`)}setAttribute(e,t,n){if(this._assertWriterUsedCorrectly(),n instanceof B){let r=n.getMinimalFlatRanges();for(let n of r)If(this,e,t,n)}else Lf(this,e,t,n)}setAttributes(e,t){for(let[n,r]of Ui(e))this.setAttribute(n,r,t)}removeAttribute(e,t){if(this._assertWriterUsedCorrectly(),t instanceof B){let n=t.getMinimalFlatRanges();for(let t of n)If(this,e,null,t)}else Lf(this,e,null,t)}clearAttributes(e){this._assertWriterUsedCorrectly();let t=e=>{for(let t of e.getAttributeKeys())this.removeAttribute(t,e)};if(!(e instanceof B))t(e);else for(let n of e.getItems())t(n)}move(e,t,n){if(this._assertWriterUsedCorrectly(),!(e instanceof B))throw new w(`writer-move-invalid-range`,this);if(!e.isFlat)throw new w(`writer-move-range-not-flat`,this);let r=z._createAt(t,n);if(r.isEqual(e.start))return;if(this._addOperationForAffectedMarkers(`move`,e),!Bf(e.root,r.root))throw new w(`writer-move-different-document`,this);let i=e.root.document?e.root.document.version:null,a=new Bd(e.start,e.end.offset-e.start.offset,r,i);this.batch.addOperation(a),this.model.applyOperation(a)}remove(e){this._assertWriterUsedCorrectly();let t=(e instanceof B?e:B._createOn(e)).getMinimalFlatRanges().reverse();for(let e of t)this._addOperationForAffectedMarkers(`move`,e),zf(e.start,e.end.offset-e.start.offset,this.batch,this.model)}merge(e){this._assertWriterUsedCorrectly();let t=e.nodeBefore,n=e.nodeAfter;if(this._addOperationForAffectedMarkers(`merge`,e),!(t instanceof Ml))throw new w(`writer-merge-no-element-before`,this);if(!(n instanceof Ml))throw new w(`writer-merge-no-element-after`,this);e.root.document?this._merge(e):this._mergeDetached(e)}createPositionFromPath(e,t,n){return this.model.createPositionFromPath(e,t,n)}createPositionAt(e,t){return this.model.createPositionAt(e,t)}createPositionAfter(e){return this.model.createPositionAfter(e)}createPositionBefore(e){return this.model.createPositionBefore(e)}createRange(e,t){return this.model.createRange(e,t)}createRangeIn(e){return this.model.createRangeIn(e)}createRangeOn(e){return this.model.createRangeOn(e)}createSelection(...e){return this.model.createSelection(...e)}_mergeDetached(e){let t=e.nodeBefore,n=e.nodeAfter;this.move(B._createIn(n),z._createAt(t,`end`)),this.remove(n)}_merge(e){let t=z._createAt(e.nodeBefore,`end`),n=z._createAt(e.nodeAfter,0),r=e.root.document.graveyard,i=new z(r,[0]),a=e.root.document.version,o=new Ud(n,e.nodeAfter.maxOffset,t,i,a);this.batch.addOperation(o),this.model.applyOperation(o)}rename(e,t){if(this._assertWriterUsedCorrectly(),!(e instanceof Ml))throw new w(`writer-rename-not-element-instance`,this);let n=e.root.document?e.root.document.version:null,r=new qd(z._createBefore(e),e.name,t,n);this.batch.addOperation(r),this.model.applyOperation(r)}split(e,t){this._assertWriterUsedCorrectly();let n=e.parent;if(!n.parent)throw new w(`writer-split-element-no-parent`,this);if(t||=n.parent,!e.parent.getAncestors({includeSelf:!0}).includes(t))throw new w(`writer-split-invalid-limit-element`,this);let r,i;do{let t=n.root.document?n.root.document.version:null,a=n.maxOffset-e.offset,o=Hd.getInsertionPosition(e),s=new Hd(e,a,o,null,t);this.batch.addOperation(s),this.model.applyOperation(s),!r&&!i&&(r=n,i=e.parent.nextSibling),e=this.createPositionAfter(e.parent),n=e.parent}while(n!==t);return{position:e,range:new B(z._createAt(r,`end`),z._createAt(i,0))}}wrap(e,t){if(this._assertWriterUsedCorrectly(),!e.isFlat)throw new w(`writer-wrap-range-not-flat`,this);let n=t instanceof Ml?t:new Ml(t);if(n.childCount>0)throw new w(`writer-wrap-element-not-empty`,this);if(n.parent!==null)throw new w(`writer-wrap-element-attached`,this);this.insert(n,e.start);let r=new B(e.start.getShiftedBy(1),e.end.getShiftedBy(1));this.move(r,z._createAt(n,0))}unwrap(e){if(this._assertWriterUsedCorrectly(),e.parent===null)throw new w(`writer-unwrap-element-no-parent`,this);this.move(B._createIn(e),this.createPositionAfter(e)),this.remove(e)}addMarker(e,t){if(this._assertWriterUsedCorrectly(),!t||typeof t.usingOperation!=`boolean`)throw new w(`writer-addmarker-no-usingoperation`,this);let n=t.usingOperation,r=t.range,i=t.affectsData===void 0?!1:t.affectsData;if(this.model.markers.has(e))throw new w(`writer-addmarker-marker-exists`,this);if(!r)throw new w(`writer-addmarker-no-range`,this);return n?(Rf(this,e,null,r,i),this.model.markers.get(e)):this.model.markers._set(e,r,n,i)}updateMarker(e,t){this._assertWriterUsedCorrectly();let n=typeof e==`string`?e:e.name,r=this.model.markers.get(n);if(!r)throw new w(`writer-updatemarker-marker-not-exists`,this);if(!t){T(`writer-updatemarker-reconvert-using-editingcontroller`,{markerName:n}),this.model.markers._refresh(r);return}let i=typeof t.usingOperation==`boolean`,a=typeof t.affectsData==`boolean`,o=a?t.affectsData:r.affectsData;if(!i&&!t.range&&!a)throw new w(`writer-updatemarker-wrong-options`,this);let s=r.getRange(),c=t.range?t.range:s;if(i&&t.usingOperation!==r.managedUsingOperations){t.usingOperation?Rf(this,n,null,c,o):(Rf(this,n,s,null,o),this.model.markers._set(n,c,void 0,o));return}r.managedUsingOperations?Rf(this,n,s,c,o):this.model.markers._set(n,c,void 0,o)}removeMarker(e){this._assertWriterUsedCorrectly();let t=typeof e==`string`?e:e.name;if(!this.model.markers.has(t))throw new w(`writer-removemarker-no-marker`,this);let n=this.model.markers.get(t);if(!n.managedUsingOperations){this.model.markers._remove(t);return}let r=n.getRange();Rf(this,t,r,null,n.affectsData)}addRoot(e,t=`$root`){this._assertWriterUsedCorrectly();let n=this.model.document.getRoot(e);if(n&&n.isAttached())throw new w(`writer-addroot-root-exists`,this);let r=this.model.document,i=new Yd(e,t,!0,r,r.version);return this.batch.addOperation(i),this.model.applyOperation(i),this.model.document.getRoot(e)}detachRoot(e){this._assertWriterUsedCorrectly();let t=typeof e==`string`?this.model.document.getRoot(e):e;if(!t||!t.isAttached())throw new w(`writer-detachroot-no-root`,this);for(let e of this.model.markers)e.getRange().root===t&&this.removeMarker(e);for(let e of t.getAttributeKeys())this.removeAttribute(e,t);this.remove(this.createRangeIn(t));let n=this.model.document,r=new Yd(t.rootName,t.name,!1,n,n.version);this.batch.addOperation(r),this.model.applyOperation(r)}setSelection(...e){this._assertWriterUsedCorrectly(),this.model.document.selection._setTo(...e)}setSelectionFocus(e,t){this._assertWriterUsedCorrectly(),this.model.document.selection._setFocus(e,t)}setSelectionAttribute(e,t){if(this._assertWriterUsedCorrectly(),typeof e==`string`)this._setSelectionAttribute(e,t);else for(let[t,n]of Ui(e))this._setSelectionAttribute(t,n)}removeSelectionAttribute(e){if(this._assertWriterUsedCorrectly(),typeof e==`string`)this._removeSelectionAttribute(e);else for(let t of e)this._removeSelectionAttribute(t)}overrideSelectionGravity(){return this.model.document.selection._overrideGravity()}restoreSelectionGravity(e){this.model.document.selection._restoreGravity(e)}_setSelectionAttribute(e,t){let n=this.model.document.selection;if(n.isCollapsed&&n.anchor.parent.isEmpty){let r=Tl._getStoreAttributeKey(e);this.setAttribute(r,t,n.anchor.parent)}n._setAttribute(e,t)}_removeSelectionAttribute(e){let t=this.model.document.selection;if(t.isCollapsed&&t.anchor.parent.isEmpty){let n=Tl._getStoreAttributeKey(e);this.removeAttribute(n,t.anchor.parent)}t._removeAttribute(e)}_assertWriterUsedCorrectly(){if(this.model._currentWriter!==this)throw new w(`writer-incorrect-use`,this)}_addOperationForAffectedMarkers(e,t){for(let n of this.model.markers){if(!n.managedUsingOperations)continue;let r=n.getRange(),i=!1;if(e===`move`){let e=t;i=e.containsPosition(r.start)||e.start.isEqual(r.start)||e.containsPosition(r.end)||e.end.isEqual(r.end)}else{let e=t,n=e.nodeBefore,a=e.nodeAfter,o=r.start.parent==n&&r.start.isAtEnd,s=r.end.parent==a&&r.end.offset==0,c=r.end.nodeAfter==a,l=r.start.nodeAfter==a;i=o||s||c||l}i&&this.updateMarker(n.name,{range:r})}}};function If(e,t,n,r){let i=e.model,a=i.document,o=r.start,s,c,l;for(let e of r.getWalker({shallow:!0}))l=e.item.getAttribute(t),s&&c!=l&&(c!=n&&u(),o=s),s=e.nextPosition,c=l;s instanceof z&&s!=o&&c!=n&&u();function u(){let r=new B(o,s),l=r.root.document?a.version:null,u=new Gd(r,t,c,n,l);e.batch.addOperation(u),i.applyOperation(u)}}function Lf(e,t,n,r){let i=e.model,a=i.document,o=r.getAttribute(t),s,c;if(o!=n){if(r.root===r)c=new Jd(r,t,o,n,r.document?a.version:null);else{s=new B(z._createBefore(r),e.createPositionAfter(r));let i=s.root.document?a.version:null;c=new Gd(s,t,o,n,i)}e.batch.addOperation(c),i.applyOperation(c)}}function Rf(e,t,n,r,i){let a=e.model,o=a.document,s=new Wd(t,n,r,a.markers,!!i,o.version);e.batch.addOperation(s),a.applyOperation(s)}function zf(e,t,n,r){let i;if(e.root.document){let n=r.document;i=new Bd(e,t,new z(n.graveyard,[0]),n.version)}else i=new Mf(e,t);n.addOperation(i),r.applyOperation(i)}function Bf(e,t){return e===t||e instanceof Cf&&t instanceof Cf}function Vf(e){e.document.registerPostFixer(t=>Hf(t,e))}function Hf(e,t){let n=t.document.selection,r=t.schema,i=[],a=!1;for(let e of n.getRanges()){let t=Uf(e,r);t&&!t.isEqual(e)?(i.push(t),a=!0):i.push(e)}return a&&e.setSelection(Jf(i),{backward:n.isBackward}),!1}function Uf(e,t){return e.isCollapsed?Wf(e,t):Gf(e,t)}function Wf(e,t){let n=e.start,r=t.getNearestSelectionRange(n);if(!r){let e=n.getAncestors().reverse().find(e=>t.isObject(e));return e?B._createOn(e):null}if(!r.isCollapsed)return r;let i=r.start;return n.isEqual(i)?null:new B(i)}function Gf(e,t){let{start:n,end:r}=e,i=t.checkChild(n,`$text`),a=t.checkChild(r,`$text`),o=t.getLimitElement(n),s=t.getLimitElement(r);if(o===s){if(i&&a)return null;if(qf(n,r,t)){let e=n.nodeAfter&&t.isSelectable(n.nodeAfter)?null:t.getNearestSelectionRange(n,`forward`),i=r.nodeBefore&&t.isSelectable(r.nodeBefore)?null:t.getNearestSelectionRange(r,`backward`);return new B(e?e.start:n,i?i.end:r)}}let c=o&&!o.is(`rootElement`),l=s&&!s.is(`rootElement`);if(c||l){let e=n.nodeAfter&&r.nodeBefore&&n.nodeAfter.parent===r.nodeBefore.parent,i=c&&(!e||!Yf(n.nodeAfter,t)),a=l&&(!e||!Yf(r.nodeBefore,t)),u=n,d=r;return i&&(u=z._createBefore(Kf(o,t))),a&&(d=z._createAfter(Kf(s,t))),new B(u,d)}return null}function Kf(e,t){let n=e,r=n;for(;t.isLimit(r)&&r.parent;)n=r,r=r.parent;return n}function qf(e,t,n){let r=e.nodeAfter&&!n.isLimit(e.nodeAfter)||n.checkChild(e,`$text`),i=t.nodeBefore&&!n.isLimit(t.nodeBefore)||n.checkChild(t,`$text`);return r||i}function Jf(e){let t=[...e],n=new Set,r=1;for(;r!n.has(t))}function Yf(e,t){return e&&t.isSelectable(e)}function Xf(e,t,n={}){if(t.isCollapsed)return;let r=t.getFirstRange();if(r.root.rootName==`$graveyard`)return;let i=e.schema,a=e.document.selection,o=fp(t,a,r),s=Array.from(a.getAttributes()),c=!!a.getFirstRange()?.start.parent.isEmpty;e.change(e=>{if(!n.doNotResetEntireContent&&lp(i,t)){cp(e,t);return}let a={};if(!n.doNotAutoparagraph){let e=t.getSelectedElement();e&&Object.assign(a,i.getAttributesWithProperty(e,`copyOnReplace`,!0))}let l,u;n.doNotFixSelection?(l=pf.fromPosition(r.start,`toPrevious`),u=pf.fromPosition(r.end,`toNext`)):[l,u]=Zf(r),l.isTouching(u)||e.remove(e.createRange(l,u)),n.leaveUnmerged||($f(e,l,u),i.removeDisallowedAttributes(l.parent.getChildren(),e)),up(e,t,l),!n.doNotAutoparagraph&&ap(i,l)&&sp(e,l,t,a),o&&dp(e,s,c),l.detach(),u.detach()})}function Zf(e){let t=e.root.document.model,n=e.start,r=e.end;if(t.hasContent(e,{ignoreMarkers:!0})){let n=Qf(r);if(n&&r.isTouching(t.createPositionAt(n,0))){let n=t.createSelection(e);t.modifySelection(n,{direction:`backward`});let i=n.getLastPosition(),a=t.createRange(i,r);t.hasContent(a,{ignoreMarkers:!0})||(r=i)}}return[pf.fromPosition(n,`toPrevious`),pf.fromPosition(r,`toNext`)]}function Qf(e){let t=e.parent,n=t.root.document.model.schema,r=t.getAncestors({parentFirst:!0,includeSelf:!0});for(let e of r){if(n.isLimit(e))return null;if(n.isBlock(e))return e}}function $f(e,t,n){let r=e.model;if(!rp(e.model.schema,t,n))return;let[i,a]=ip(t,n);!i||!a||(!r.hasContent(i,{ignoreMarkers:!0})&&r.hasContent(a,{ignoreMarkers:!0})?tp(e,t,n,i.parent):ep(e,t,n,i.parent))}function ep(e,t,n,r){let i=t.parent,a=n.parent;if(!(i==r||a==r)){for(t=e.createPositionAfter(i),n=e.createPositionBefore(a),n.isEqual(t)||e.insert(a,t),e.merge(t);n.parent.isEmpty;){let t=n.parent;n=e.createPositionBefore(t),e.remove(t)}rp(e.model.schema,t,n)&&ep(e,t,n,r)}}function tp(e,t,n,r){let i=t.parent,a=n.parent;if(!(i==r||a==r)){for(t=e.createPositionAfter(i),n=e.createPositionBefore(a),n.isEqual(t)||e.insert(i,n);t.parent.isEmpty;){let n=t.parent;t=e.createPositionBefore(n),e.remove(n)}n=e.createPositionBefore(a),np(e,n),rp(e.model.schema,t,n)&&tp(e,t,n,r)}}function np(e,t){let n=t.nodeBefore,r=t.nodeAfter;n.name!=r.name&&e.rename(n,r.name),e.clearAttributes(n),e.setAttributes(Object.fromEntries(r.getAttributes()),n),e.merge(t)}function rp(e,t,n){let r=t.parent,i=n.parent;return r==i||e.isLimit(r)||e.isLimit(i)?!1:op(t,n,e)}function ip(e,t){let n=e.getAncestors(),r=t.getAncestors(),i=0;for(;n[i]&&n[i]==r[i];)i++;return[n[i],r[i]]}function ap(e,t){let n=e.checkChild(t,`$text`),r=e.checkChild(t,`paragraph`);return!n&&r}function op(e,t,n){let r=new B(e,t);for(let e of r.getWalker())if(n.isLimit(e.item))return!1;return!0}function sp(e,t,n,r={}){let i=e.createElement(`paragraph`);e.model.schema.setAllowedAttributes(i,r,e),e.insert(i,t),up(e,n,e.createPositionAt(i,0))}function cp(e,t){let n=e.model.schema.getLimitElement(t);e.remove(e.createRangeIn(n)),sp(e,e.createPositionAt(n,0),t)}function lp(e,t){let n=e.getLimitElement(t);if(!t.containsEntireContent(n))return!1;let r=t.getFirstRange();return r.start.parent==r.end.parent?!1:e.checkChild(n,`paragraph`)}function up(e,t,n){t instanceof Tl?e.setSelection(n):t.setTo(n)}function dp(e,t,n){if(!t.length)return;let r=e.model.document.selection;if(r.anchor.parent.isEmpty&&!n)for(let[n,i]of t)e.model.schema.getAttributeProperties(n).isFormatting&&e.model.schema.checkAttributeInSelection(r,n)&&e.setSelectionAttribute(n,i)}function fp(e,t,n){if(e instanceof Tl)return!0;if(t.isCollapsed){let e=t.getFirstPosition();return e.isEqual(n.start)||e.isEqual(n.end)}return!!t.getFirstRange()?.isIntersecting(n)}function pp(e,t){return e.change(e=>{let n=e.createDocumentFragment(),r=t.getFirstRange();if(!r||r.isCollapsed)return n;let i=r.start.root,a=r.start.getCommonPath(r.end),o=i.getNodeByPath(a),s;s=r.start.parent==r.end.parent?r:e.createRange(e.createPositionAt(o,r.start.path[a.length]),e.createPositionAt(o,r.end.path[a.length]+1));let c=s.end.offset-s.start.offset;for(let t of s.getItems({shallow:!0}))t.is(`$textProxy`)?e.appendText(t.data,t.getAttributes(),n):e.append(e.cloneElement(t,!0),n);if(s!=r){let t=r._getTransformedByMove(s.start,e.createPositionAt(n,0),c)[0],i=e.createRange(e.createPositionAt(n,0),t.start);mp(e.createRange(t.end,e.createPositionAt(n,`end`)),e),mp(i,e)}return n})}function mp(e,t){let n=[];Array.from(e.getItems({direction:`backward`})).map(e=>t.createRangeOn(e)).filter(t=>(t.start.isAfter(e.start)||t.start.isEqual(e.start))&&(t.end.isBefore(e.end)||t.end.isEqual(e.end))).forEach(e=>{n.push(e.start.parent),t.remove(e)}),n.forEach(e=>{let n=e;for(;n.parent&&n.isEmpty;){let e=t.createRangeOn(n);n=n.parent,t.remove(e)}})}function hp(e,t,n){return e.change(r=>{let i=n||e.document.selection;i.isCollapsed||e.deleteContent(i,{doNotAutoparagraph:!0});let a=new gp(e,r,i.anchor),o=[],s;if(t.is(`documentFragment`)){if(t.markers.size){let e=[];for(let[n,r]of t.markers){let{start:t,end:i}=r,a=t.isEqual(i);e.push({position:t,name:n,isCollapsed:a},{position:i,name:n,isCollapsed:a})}e.sort(({position:e},{position:t})=>e.isBefore(t)?1:-1);for(let{position:n,name:i,isCollapsed:a}of e){let e=null,s=null,c=n.parent===t&&n.isAtStart,l=n.parent===t&&n.isAtEnd;!c&&!l?(e=r.createElement(`$marker`),r.insert(e,n)):a&&(s=c?`start`:`end`),o.push({name:i,element:e,collapsed:s})}}s=t.getChildren()}else s=[t];a.handleNodes(s);let c=a.getSelectionRange();if(t.is(`documentFragment`)&&o.length){let e=c?xl.fromRange(c):null,t={};for(let e=o.length-1;e>=0;e--){let{name:n,element:i,collapsed:s}=o[e],c=!t[n];if(c&&(t[n]=[]),i){let e=r.createPositionAt(i,`before`);t[n].push(e),r.remove(i)}else{let e=a.getAffectedRange();if(!e){s&&t[n].push(a.position);continue}s?t[n].push(e[s]):t[n].push(c?e.start:e.end)}}for(let[e,[n,i]]of Object.entries(t))n&&i&&n.root===i.root&&n.root.document&&!r.model.markers.has(e)&&r.addMarker(e,{usingOperation:!0,affectsData:!0,range:new B(n,i)});e&&(c=e.toRange(),e.detach())}c&&(i instanceof Tl?r.setSelection(c):i.setTo(c));let l=a.getAffectedRange()||e.createRange(i.anchor);return a.destroy(),l})}var gp=class{model;writer;position;canMergeWith;schema;_documentFragment;_documentFragmentPosition;_firstNode=null;_lastNode=null;_lastAutoParagraph=null;_filterAttributesAndChildrenOf=[];_affectedStart=null;_affectedEnd=null;_nodeToSelect=null;constructor(e,t,n){this.model=e,this.writer=t,this.position=n,this.canMergeWith=new Set([this.position.parent]),this.schema=e.schema,this._documentFragment=t.createDocumentFragment(),this._documentFragmentPosition=t.createPositionAt(this._documentFragment,0)}handleNodes(e){for(let t of Array.from(e))t.offsetSize>0&&this._handleNode(t);this._insertPartialFragment(),this._lastAutoParagraph&&this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph),this._mergeOnRight(),this.schema.removeDisallowedAttributes(this._filterAttributesAndChildrenOf,this.writer),this.model._config?.get(`experimentalFlags.modelInsertContentDeepSchemaVerification`)!==!1&&this._removeDisallowedChildren(this._filterAttributesAndChildrenOf),this._filterAttributesAndChildrenOf=[]}_removeDisallowedChildren(e){let t=Array.from(e);for(let e of t){if(!e.is(`element`))continue;let n=[],r=[],i=this.writer.createRangeIn(e).getWalker({ignoreElementEnd:!0});for(let{item:e}of i){let a=e.parent;this.schema.checkChild(a,e)||(e.is(`element`)&&!this.schema.isObject(e)?(r.push(e),t.push(a)):n.push(e),i.jumpTo(this.writer.createPositionAfter(e)))}for(let e of r)this.writer.unwrap(e);for(let e of n)this.writer.remove(e)}}_updateLastNodeFromAutoParagraph(e){let t=this.writer.createPositionAfter(this._lastNode),n=this.writer.createPositionAfter(e);if(n.isAfter(t)){if(this._lastNode=e,this.position.parent!=e||!this.position.isAtEnd)throw new w(`insertcontent-invalid-insertion-position`,this);this.position=n,this._setAffectedBoundaries(this.position)}}getSelectionRange(){return this._nodeToSelect?B._createOn(this._nodeToSelect):this.model.schema.getNearestSelectionRange(this.position)}getAffectedRange(){return this._affectedStart?new B(this._affectedStart,this._affectedEnd):null}destroy(){this._affectedStart&&this._affectedStart.detach(),this._affectedEnd&&this._affectedEnd.detach()}_handleNode(e){if(!this._checkAndSplitToAllowedPosition(e)){this.schema.isObject(e)||this._handleDisallowedNode(e);return}e=this._appendToFragment(e),this._firstNode||=e,this._lastNode=e}_insertPartialFragment(){if(this._documentFragment.isEmpty)return;let e=pf.fromPosition(this.position,`toNext`);this._setAffectedBoundaries(this.position),this._documentFragment.getChild(0)==this._firstNode&&(this.writer.insert(this._firstNode,this.position),this._mergeOnLeft(),this.position=e.toPosition()),this._documentFragment.isEmpty||this.writer.insert(this._documentFragment,this.position),this._documentFragmentPosition=this.writer.createPositionAt(this._documentFragment,0),this.position=e.toPosition(),e.detach()}_handleDisallowedNode(e){e.is(`element`)&&this.handleNodes(e.getChildren())}_appendToFragment(e){if(!this.schema.checkChild(this.position,e))throw new w(`insertcontent-wrong-position`,this,{node:e,position:this.position});return this.writer.insert(e,this._documentFragmentPosition),this._documentFragmentPosition=this._documentFragmentPosition.getShiftedBy(e.offsetSize),e.parent||(e=this._documentFragmentPosition.nodeBefore),this.schema.isObject(e)&&!this.schema.checkChild(this.position,`$text`)?this._nodeToSelect=e:this._nodeToSelect=null,this._filterAttributesAndChildrenOf.push(e),e}_setAffectedBoundaries(e){this._affectedStart||=pf.fromPosition(e,`toPrevious`),(!this._affectedEnd||this._affectedEnd.isBefore(e))&&(this._affectedEnd&&this._affectedEnd.detach(),this._affectedEnd=pf.fromPosition(e,`toNext`))}_mergeOnLeft(){let e=this._firstNode;if(!(e instanceof Ml)||!this._canMergeLeft(e))return;let t=pf._createBefore(e);t.stickiness=`toNext`;let n=pf.fromPosition(this.position,`toNext`);this._affectedStart.isEqual(t)&&(this._affectedStart.detach(),this._affectedStart=pf._createAt(t.nodeBefore,`end`,`toPrevious`)),this._firstNode===this._lastNode&&(this._firstNode=t.nodeBefore,this._lastNode=t.nodeBefore),this.writer.merge(t),t.isEqual(this._affectedEnd)&&this._firstNode===this._lastNode&&(this._affectedEnd.detach(),this._affectedEnd=pf._createAt(t.nodeBefore,`end`,`toNext`)),this.position=n.toPosition(),n.detach(),this._filterAttributesAndChildrenOf.push(this.position.parent),t.detach()}_mergeOnRight(){let e=this._lastNode;if(!(e instanceof Ml)||!this._canMergeRight(e))return;let t=pf._createAfter(e);if(t.stickiness=`toNext`,!this.position.isEqual(t))throw new w(`insertcontent-invalid-insertion-position`,this);this.position=z._createAt(t.nodeBefore,`end`);let n=pf.fromPosition(this.position,`toPrevious`);this._affectedEnd.isEqual(t)&&(this._affectedEnd.detach(),this._affectedEnd=pf._createAt(t.nodeBefore,`end`,`toNext`)),this._firstNode===this._lastNode&&(this._firstNode=t.nodeBefore,this._lastNode=t.nodeBefore),this.writer.merge(t),t.getShiftedBy(-1).isEqual(this._affectedStart)&&this._firstNode===this._lastNode&&(this._affectedStart.detach(),this._affectedStart=pf._createAt(t.nodeBefore,0,`toPrevious`)),this.position=n.toPosition(),n.detach(),this._filterAttributesAndChildrenOf.push(this.position.parent),t.detach()}_canMergeLeft(e){let t=e.previousSibling;return t instanceof Ml&&this.canMergeWith.has(t)&&this.model.schema.checkMerge(t,e)}_canMergeRight(e){let t=e.nextSibling;return t instanceof Ml&&this.canMergeWith.has(t)&&this.model.schema.checkMerge(e,t)}_insertAutoParagraph(){this._insertPartialFragment();let e=this.writer.createElement(`paragraph`);this.writer.insert(e,this.position),this._setAffectedBoundaries(this.position),this._lastAutoParagraph=e,this.position=this.writer.createPositionAt(e,0)}_checkAndSplitToAllowedPosition(e){let t=this._getAllowedIn(this.position.parent,e);if(!t)return!1;for(t!=this.position.parent&&this._insertPartialFragment();t!=this.position.parent;)if(this.position.isAtStart){let e=this.position.parent;this.position=this.writer.createPositionBefore(e),e.isEmpty&&e.parent===t&&this.writer.remove(e)}else if(this.position.isAtEnd)this.position=this.writer.createPositionAfter(this.position.parent);else{let e=this.writer.createPositionAfter(this.position.parent);this._setAffectedBoundaries(this.position),this.writer.split(this.position),this.position=e,this.canMergeWith.add(this.position.nodeAfter)}return this.schema.checkChild(this.position.parent,e)||this._insertAutoParagraph(),!0}_getAllowedIn(e,t){let n=this.schema.createContext(e);return this.schema.checkChild(n,t)||this.schema.checkChild(n,`paragraph`)&&this.schema.checkChild(n.push(`paragraph`),t)?e:this.schema.isLimit(e)?null:this._getAllowedIn(e.parent,t)}};function _p(e,t,n,r={}){if(!e.schema.isObject(t))throw new w(`insertobject-element-not-an-object`,e,{object:t});let i=n||e.document.selection,a=i;r.findOptimalPosition&&e.schema.isBlock(t)&&(a=e.createSelection(e.schema.findOptimalInsertionRange(i,r.findOptimalPosition)));let o=j(i.getSelectedBlocks()),s={};return o&&Object.assign(s,e.schema.getAttributesWithProperty(o,`copyOnReplace`,!0)),e.change(n=>{a.isCollapsed||e.deleteContent(a,{doNotAutoparagraph:!0});let i=t,o=a.anchor.parent,c=e.schema.createContext(o);!e.schema.checkChild(c,t)&&e.schema.checkChild(c,`paragraph`)&&e.schema.checkChild(c.push(`paragraph`),t)&&(i=n.createElement(`paragraph`),n.insert(t,i)),e.schema.setAllowedAttributes(i,s,n);let l=e.insertContent(i,a);return l.isCollapsed||r.setSelection&&vp(n,t,r.setSelection,s),l})}function vp(e,t,n,r){let i=e.model;if(n==`on`){e.setSelection(t,`on`);return}if(n!=`after`)throw new w(`insertobject-invalid-place-parameter-value`,i);let a=t.nextSibling;if(i.schema.isInline(t)){e.setSelection(t,`after`);return}!(a&&i.schema.checkChild(a,`$text`))&&i.schema.checkChild(t.parent,`paragraph`)&&(a=e.createElement(`paragraph`),i.schema.setAllowedAttributes(a,r,e),i.insertContent(a,e.createPositionAfter(t))),a&&e.setSelection(a,0)}function yp(e,t,n={}){let r=e.schema,i=n.direction!=`backward`,a=n.unit?n.unit:`character`,o=!!n.treatEmojiAsSingleUnit,s=t.focus,c=new Xc({boundaries:Cp(s,i),singleCharacters:!0,direction:i?`forward`:`backward`}),l={walker:c,schema:r,isForward:i,unit:a,treatEmojiAsSingleUnit:o},u;for(;u=c.next();){if(u.done)return;let n=bp(l,u.value);if(n){t instanceof Tl?e.change(e=>{e.setSelectionFocus(n)}):t.setFocus(n);return}}}function bp(e,t){let{isForward:n,walker:r,unit:i,schema:a,treatEmojiAsSingleUnit:o}=e,{type:s,item:c,nextPosition:l}=t;if(s==`text`)return e.unit===`word`?Sp(r,n):xp(r,i,o);if(s==(n?`elementStart`:`elementEnd`)){if(a.isSelectable(c))return z._createAt(c,n?`after`:`before`);if(a.checkChild(l,`$text`))return l}else{if(a.isLimit(c)){r.skip(()=>!0);return}if(a.checkChild(l,`$text`))return l}}function xp(e,t,n){let r=e.position.textNode;if(r){let i=r.data,a=e.position.offset-r.startOffset;for(;ra(i,a)||t==`character`&&ia(i,a)||n&&oa(i,a);)e.next(),a=e.position.offset-r.startOffset}return e.position}function Sp(e,t){let n=e.position.textNode;for(n||=t?e.position.nodeAfter:e.position.nodeBefore;n&&n.is(`$text`);){let r=e.position.offset-n.startOffset;if(Tp(n,r,t))n=t?e.position.nodeAfter:e.position.nodeBefore;else if(wp(n.data,r,t))break;else e.next()}return e.position}function Cp(e,t){let n=e.root,r=z._createAt(n,t?`end`:0);return t?new B(e,r):new B(r,e)}function wp(e,t,n){let r=t+(n?0:-1);return` ,.?!:;"-()`.includes(e.charAt(r))}function Tp(e,t,n){return t===(n?e.offsetSize:0)}const Ep=D();var Dp=class extends Ep{markers;document;schema;_config;_pendingChanges;_currentWriter;constructor(e){super(),this.markers=new Af,this.document=new Ef(this),this.schema=new ed,this._config=e,this._pendingChanges=[],this._currentWriter=null,[`deleteContent`,`modifySelection`,`getSelectedContent`,`applyOperation`].forEach(e=>this.decorate(e)),this.on(`applyOperation`,(e,t)=>{t[0]._validate()},{priority:`highest`}),this.schema.register(`$root`,{isLimit:!0}),this.schema.register(`$inlineRoot`,{allowContentOf:`$block`,allowAttributesOf:`$root`,isLimit:!0}),this.schema.register(`$container`,{allowIn:[`$root`,`$container`]}),this.schema.register(`$block`,{allowIn:[`$root`,`$container`],isBlock:!0}),this.schema.register(`$blockObject`,{allowWhere:`$block`,isBlock:!0,isObject:!0}),this.schema.register(`$inlineObject`,{allowWhere:`$text`,allowAttributesOf:`$text`,isInline:!0,isObject:!0}),this.schema.register(`$text`,{allowIn:`$block`,isInline:!0,isContent:!0}),this.schema.register(`$clipboardHolder`,{allowContentOf:[`$root`,`$inlineRoot`],allowChildren:`$text`,isLimit:!0}),this.schema.register(`$documentFragment`,{allowContentOf:[`$root`,`$inlineRoot`],allowChildren:`$text`,isLimit:!0}),this.schema.register(`$marker`),this.schema.addChildCheck(()=>!0,`$marker`),Vf(this),this.document.registerPostFixer(Ou),this.on(`insertContent`,(e,[t,n])=>{e.return=hp(this,t,n)}),this.on(`insertObject`,(e,[t,n,r])=>{e.return=_p(this,t,n,r)}),this.on(`canEditAt`,e=>{let t=!this.document.isReadOnly;e.return=t,t||e.stop()})}change(e){try{return this._pendingChanges.length===0?(this._pendingChanges.push({batch:new gf,callback:e}),this._runPendingChanges()[0]):e(this._currentWriter)}catch(e){w.rethrowUnexpectedError(e,this)}}enqueueChange(e,t){try{e?typeof e==`function`?(t=e,e=new gf):e instanceof gf||(e=new gf(e)):e=new gf,this._pendingChanges.push({batch:e,callback:t}),this._pendingChanges.length==1&&this._runPendingChanges()}catch(e){w.rethrowUnexpectedError(e,this)}}applyOperation(e){e._execute()}insertContent(e,t,n,...r){let i=Op(t,n);return this.fire(`insertContent`,[e,i,n,...r])}insertObject(e,t,n,r,...i){let a=Op(t,n);return this.fire(`insertObject`,[e,a,r,r,...i])}deleteContent(e,t){Xf(this,e,t)}modifySelection(e,t){yp(this,e,t)}getSelectedContent(e){return pp(this,e)}hasContent(e,t={}){let n;n=e.is(`selection`)?Array.from(e.getRanges()):e.is(`range`)?[e]:[B._createIn(e)];for(let e of n)if(this._rangeHasContent(e,t))return!0;return!1}_rangeHasContent(e,t){if(e.isCollapsed)return!1;let{ignoreWhitespaces:n=!1,ignoreMarkers:r=!1}=t;if(!r){for(let t of this.markers.getMarkersIntersectingRange(e))if(t.affectsData)return!0}for(let t of e.getItems())if(this.schema.isContent(t))if(t.is(`$textProxy`)){if(!n||t.data.search(/\S/)!==-1)return!0}else return!0;return!1}canEditAt(e){let t=Op(e);return this.fire(`canEditAt`,[t])}createPositionFromPath(e,t,n){return new z(e,t,n)}createPositionAt(e,t){return z._createAt(e,t)}createPositionAfter(e){return z._createAfter(e)}createPositionBefore(e){return z._createBefore(e)}createRange(e,t){return new B(e,t)}createRangeIn(e){return B._createIn(e)}createRangeOn(e){return B._createOn(e)}createSelection(...e){return new _l(...e)}createBatch(e){return new gf(e)}createOperationFromJSON(e){return Zd.fromJSON(e,this.document)}destroy(){this.document.destroy(),this.stopListening()}_runPendingChanges(){let e=[];this.fire(`_beforeChanges`);try{for(;this._pendingChanges.length;){let t=this._pendingChanges[0].batch;this._currentWriter=new Ff(this,t);let n=this._pendingChanges[0].callback(this._currentWriter);e.push(n),this.document._handleChangeBlock(this._currentWriter),this._pendingChanges.shift(),this._currentWriter=null}}finally{this._pendingChanges.length=0,this._currentWriter=null,this.fire(`_afterChanges`)}return e}};function Op(e,t){if(e)return e instanceof _l||e instanceof Tl?e:e instanceof gl?t||t===0?new _l(e,t):e.is(`rootElement`)?new _l(e,`in`):new _l(e,`on`):new _l(e)}var kp=class extends jc{domEventType=`click`;onDomEvent(e){this.fire(e.type,e)}},Ap=class extends jc{domEventType=[`mousedown`,`mouseup`,`mouseover`,`mouseout`];onDomEvent(e){this.fire(e.type,e)}},jp=class extends jc{domEventType=[`touchstart`,`touchend`,`touchmove`];onDomEvent(e){this.fire(e.type,e)}},Mp=class extends jc{domEventType=[`pointerdown`,`pointerup`,`pointermove`];onDomEvent(e){this.fire(e.type,e)}},Np=class{document;constructor(e){this.document=e}createDocumentFragment(e){return new Is(this.document,e)}createElement(e,t,n){return new Jo(this.document,e,t,n)}createText(e){return new Oo(this.document,e)}clone(e,t=!1){return e._clone(t)}appendChild(e,t){return t._appendChild(e)}insertChild(e,t,n){return n._insertChild(e,t)}removeChildren(e,t,n){return n._removeChildren(e,t)}remove(e){let t=e.parent;return t?this.removeChildren(t.getChildIndex(e),1,t):[]}replace(e,t){let n=e.parent;if(n){let r=n.getChildIndex(e);return this.removeChildren(r,1,n),this.insertChild(r,t,n),!0}return!1}unwrapElement(e){let t=e.parent;if(t){let n=t.getChildIndex(e);this.remove(e),this.insertChild(n,e.getChildren(),t)}}rename(e,t){let n=new Jo(this.document,e,t.getAttributes(),t.getChildren());return this.replace(t,n)?n:null}setAttribute(e,t,n){n._setAttribute(e,t)}removeAttribute(e,t){t._removeAttribute(e)}addClass(e,t){t._addClass(e)}removeClass(e,t){t._removeClass(e)}setStyle(e,t,n){xn(e)&&n===void 0?t._setStyle(e):n._setStyle(e,t)}removeStyle(e,t){t._removeStyle(e)}setCustomProperty(e,t,n){n._setCustomProperty(e,t)}removeCustomProperty(e,t){return t._removeCustomProperty(e)}createPositionAt(e,t){return L._createAt(e,t)}createPositionAfter(e){return L._createAfter(e)}createPositionBefore(e){return L._createBefore(e)}createRange(e,t){return new R(e,t)}createRangeOn(e){return R._createOn(e)}createRangeIn(e){return R._createIn(e)}createSelection(...e){return new os(...e)}};const Pp=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,Fp=/^rgb\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\)$/i,Ip=/^rgba\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i,Lp=/^hsl\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\.?[0-9]+)?\)$/i,Rp=/^hsla\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\.?[0-9]+)\)$/i,zp=/\w+\((?:[^()]|\([^()]*\))*\)|\S+/gi,Bp=new Set(`black.silver.gray.white.maroon.red.purple.fuchsia.green.lime.olive.yellow.navy.blue.teal.aqua.orange.aliceblue.antiquewhite.aquamarine.azure.beige.bisque.blanchedalmond.blueviolet.brown.burlywood.cadetblue.chartreuse.chocolate.coral.cornflowerblue.cornsilk.crimson.cyan.darkblue.darkcyan.darkgoldenrod.darkgray.darkgreen.darkgrey.darkkhaki.darkmagenta.darkolivegreen.darkorange.darkorchid.darkred.darksalmon.darkseagreen.darkslateblue.darkslategray.darkslategrey.darkturquoise.darkviolet.deeppink.deepskyblue.dimgray.dimgrey.dodgerblue.firebrick.floralwhite.forestgreen.gainsboro.ghostwhite.gold.goldenrod.greenyellow.grey.honeydew.hotpink.indianred.indigo.ivory.khaki.lavender.lavenderblush.lawngreen.lemonchiffon.lightblue.lightcoral.lightcyan.lightgoldenrodyellow.lightgray.lightgreen.lightgrey.lightpink.lightsalmon.lightseagreen.lightskyblue.lightslategray.lightslategrey.lightsteelblue.lightyellow.limegreen.linen.magenta.mediumaquamarine.mediumblue.mediumorchid.mediumpurple.mediumseagreen.mediumslateblue.mediumspringgreen.mediumturquoise.mediumvioletred.midnightblue.mintcream.mistyrose.moccasin.navajowhite.oldlace.olivedrab.orangered.orchid.palegoldenrod.palegreen.paleturquoise.palevioletred.papayawhip.peachpuff.peru.pink.plum.powderblue.rosybrown.royalblue.saddlebrown.salmon.sandybrown.seagreen.seashell.sienna.skyblue.slateblue.slategray.slategrey.snow.springgreen.steelblue.tan.thistle.tomato.turquoise.violet.wheat.whitesmoke.yellowgreen.activeborder.activecaption.appworkspace.background.buttonface.buttonhighlight.buttonshadow.buttontext.captiontext.graytext.highlight.highlighttext.inactiveborder.inactivecaption.inactivecaptiontext.infobackground.infotext.menu.menutext.scrollbar.threeddarkshadow.threedface.threedhighlight.threedlightshadow.threedshadow.window.windowframe.windowtext.rebeccapurple.currentcolor.transparent`.split(`.`));function Vp(e){return e.startsWith(`#`)?Pp.test(e):e.startsWith(`rgb`)?Fp.test(e)||Ip.test(e):e.startsWith(`hsl`)?Lp.test(e)||Rp.test(e):Bp.has(e.toLowerCase())}const Hp=[`none`,`hidden`,`dotted`,`dashed`,`solid`,`double`,`groove`,`ridge`,`inset`,`outset`];function Up(e){return Hp.includes(e)}const Wp=/^([+-]?[0-9]*([.][0-9]+)?(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;function Gp(e){return Wp.test(e)}const Kp=/^[+-]?[0-9]*([.][0-9]+)?%$/;function qp(e){return Kp.test(e)}const Jp=[`auto`,`cover`,`contain`];function Yp(e){return Jp.includes(e)||Gp(e)||qp(e)}const Xp=[`repeat-x`,`repeat-y`,`repeat`,`space`,`round`,`no-repeat`];function Zp(e){return Xp.includes(e)}const Qp=[`center`,`top`,`bottom`,`left`,`right`];function $p(e){return Qp.includes(e)}const em=[`fixed`,`scroll`,`local`];function tm(e){return em.includes(e)}const nm=[`border-box`,`padding-box`,`content-box`];function rm(e){return nm.includes(e)}const im=[`border-box`,`padding-box`,`content-box`,`text`];function am(e){return im.includes(e)}const om=/^url\(/;function sm(e){return om.test(e)}function cm(e=``){if(e===``)return{top:void 0,right:void 0,bottom:void 0,left:void 0};let t=fm(e),n=t[0],r=t[2]||n,i=t[1]||n;return{top:n,bottom:r,right:i,left:t[3]||i}}function lm(e){return t=>{let{top:n,right:r,bottom:i,left:a}=t,o=[];return[n,r,a,i].every(e=>!!e)?o.push([e,um(t)]):(n&&o.push([e+`-top`,n]),r&&o.push([e+`-right`,r]),i&&o.push([e+`-bottom`,i]),a&&o.push([e+`-left`,a])),o}}function um({top:e,right:t,bottom:n,left:r}){let i=[];return r===t?n===e?t===e?i.push(e):i.push(e,t):i.push(e,t,n):i.push(e,t,n,r),i.join(` `)}function dm(e){return t=>({path:e,value:cm(t)})}function fm(e){let t=e.trim().slice(0,1500).matchAll(zp);return Array.from(t).map(e=>e[0])}const pm={image:`none`,repeat:`repeat`,position:`0% 0%`,size:`auto`,origin:`padding-box`,clip:`border-box`,attachment:`scroll`},mm=[`linear-gradient`,`repeating-linear-gradient`,`radial-gradient`,`repeating-radial-gradient`,`conic-gradient`,`repeating-conic-gradient`,`url`];function hm(e){e.setNormalizer(`background-color`,_m());for(let t in pm)e.setNormalizer(`background-${t}`,vm(`background.${t}`)),e.setReducer(`background-${t}`,ym(`background-${t}`));e.setNormalizer(`background`,gm()),e.setReducer(`background`,bm()),e.setStyleRelation(`background`,[`background-color`,`background-image`,`background-repeat`,`background-position`,`background-size`,`background-attachment`,`background-origin`,`background-clip`])}function gm(){return e=>{let t=Dm(e);return t.length||t.push({...km(),color:e}),{path:`background`,value:Em(t)}}}function _m(){return e=>({path:`background.color`,value:e})}function vm(e){return t=>({path:e,value:jm(t)})}function ym(e){return t=>[[e,t.join(`, `)]]}function bm(){return e=>{let t=e;return Object.keys(pm).every(e=>{let n=t[e];return n!==void 0&&(!Array.isArray(n)||n.length>0)})?xm(t):Sm(t)}}function xm(e){let t=[],n=wm(e).map(e=>Cm(e).trim()).filter(Boolean).join(`, `);return n&&t.push([`background`,n]),t}function Sm(e){let t=[];for(let n in pm){let r=e[n];Array.isArray(r)&&t.push([`background-${n}`,r.join(`, `)])}return e.color!==void 0&&t.push([`background-color`,e.color]),t}function Cm(e){let t=[];e.image&&e.image!==pm.image&&t.push(e.image);let n=e.position.join(` `),r=!n||n===pm.position;r||t.push(n);let i=e.size.join(` `);!i||i===pm.size||(r&&t.push(`0% 0%`),t.push(`/`,i));let a=e.repeat.join(` `);a&&a!==pm.repeat&&t.push(a),e.attachment&&e.attachment!==pm.attachment&&t.push(e.attachment);let o=e.origin===pm.origin,s=e.clip===pm.clip;return(!o||!s)&&(t.push(e.origin),e.clip!==e.origin&&t.push(e.clip)),e.color&&t.push(e.color),t.join(` `)}function wm(e){let t=Tm(e),n=Array.from({length:t},(t,n)=>{let r=km();return e.image?.[n]&&(r.image=e.image[n]),e.position?.[n]&&(r.position=e.position[n].split(` `)),e.size?.[n]&&(r.size=e.size[n].split(` `)),e.repeat?.[n]&&(r.repeat=e.repeat[n].split(` `)),e.attachment?.[n]&&(r.attachment=e.attachment[n]),e.origin?.[n]&&(r.origin=e.origin[n]),e.clip?.[n]&&(r.clip=e.clip[n]),r});return e.color&&(n.at(-1).color=e.color),n}function Tm(e){let t=0;for(let n of Object.values(e))Array.isArray(n)&&n.length>t&&(t=n.length);return t}function Em(e){let t={image:[],position:[],size:[],repeat:[],attachment:[],origin:[],clip:[]};for(let n of e)t.position.push(n.position.join(` `)),t.size.push(n.size.join(` `)),t.repeat.push(n.repeat.join(` `)),t.image.push(n.image),t.attachment.push(n.attachment),t.origin.push(n.origin),t.clip.push(n.clip);return e.at(-1)?.color&&(t.color=e.at(-1).color),t}function Dm(e){return jm(e).map(Om).filter(e=>e!==null)}function Om(e){let t={},{value:n,image:r}=Am(e),i=fm(n);r&&(t.image=r);for(let e=0;e{let{color:t,style:n,width:r}=Bm(e);return{path:`border`,value:{color:cm(t),style:cm(n),width:cm(r)}}}}function Pm(e){return t=>{let{color:n,style:r,width:i}=Bm(t),a={};return n!==void 0&&(a.color={[e]:n}),r!==void 0&&(a.style={[e]:r}),i!==void 0&&(a.width={[e]:i}),{path:`border`,value:a}}}function Fm(e){return t=>({path:`border`,value:Im(t,e)})}function Im(e,t){return{[t]:cm(e)}}function Lm(e,t){return n=>({path:`border`,value:{[e]:{[t]:n}}})}function Rm(e){return(t,n)=>{if(n.border)return zm(n.border,e)}}function zm(e,t){let n={};return e.width&&e.width[t]&&(n.width=e.width[t]),e.style&&e.style[t]&&(n.style=e.style[t]),e.color&&e.color[t]&&(n.color=e.color[t]),n}function Bm(e){let t={},n=fm(e);for(let e of n)Gp(e)||/thin|medium|thick/.test(e)?t.width=e:Up(e)?t.style=e:t.color=e;return t}function Vm(){return t=>{let n=zm(t,`top`),r=zm(t,`right`),i=zm(t,`bottom`),a=zm(t,`left`),o=[n,r,i,a],s={width:e(o,`width`),style:e(o,`style`),color:e(o,`color`)},c=Um(s,`all`);return c.length?c:[...Object.entries(s).reduce((e,[t,n])=>(n&&(e.push([`border-${t}`,n]),o.forEach(e=>delete e[t])),e),[]),...Um(n,`top`),...Um(r,`right`),...Um(i,`bottom`),...Um(a,`left`)]};function e(e,t){return e.map(e=>e[t]).reduce((e,t)=>e==t?e:null)}}function Hm(e){return t=>Um(t,e)}function Um(e,t){let n=[];if(e&&e.width&&n.push(`width`),e&&e.style&&n.push(`style`),e&&e.color&&n.push(`color`),n.length==3){let r=n.map(t=>e[t]).join(` `);return[t==`all`?[`border`,r]:[`border-${t}`,r]]}return t==`all`?[]:n.map(n=>[`border-${t}-${n}`,e[n]])}function Wm(e){e.setNormalizer(`margin`,dm(`margin`)),e.setNormalizer(`margin-top`,e=>({path:`margin.top`,value:e})),e.setNormalizer(`margin-right`,e=>({path:`margin.right`,value:e})),e.setNormalizer(`margin-bottom`,e=>({path:`margin.bottom`,value:e})),e.setNormalizer(`margin-left`,e=>({path:`margin.left`,value:e})),e.setReducer(`margin`,lm(`margin`)),e.setStyleRelation(`margin`,[`margin-top`,`margin-right`,`margin-bottom`,`margin-left`])}function Gm(e){e.setNormalizer(`padding`,dm(`padding`)),e.setNormalizer(`padding-top`,e=>({path:`padding.top`,value:e})),e.setNormalizer(`padding-right`,e=>({path:`padding.right`,value:e})),e.setNormalizer(`padding-bottom`,e=>({path:`padding.bottom`,value:e})),e.setNormalizer(`padding-left`,e=>({path:`padding.left`,value:e})),e.setReducer(`padding`,lm(`padding`)),e.setStyleRelation(`padding`,[`padding-top`,`padding-right`,`padding-bottom`,`padding-left`])}const Km={container:Qo,attribute:ws,empty:Ds,ui:ks,raw:Ns},qm={setContentOf:(e,t)=>{e.innerHTML=t}},Jm=(()=>{let e=function(t,n={}){if(!(t instanceof qc))throw TypeError(`View needs to be an instance of module:engine/view/view~EditingView.`);let r=t.document,i=!!n.withoutSelection,a=n.rootName||`main`,o=r.getRoot(a),s={showType:n.showType,showPriority:n.showPriority,renderUIElements:n.renderUIElements,renderRawElements:n.renderRawElements,ignoreRoot:!0,domConverter:n.domConverter,skipListItemIds:n.skipListItemIds};return i?e._stringify(o,null,s):e._stringify(o,r.selection,s)};return e._stringify=Xm,e})(),Ym=(()=>{let e=function(t,n,r={}){if(!(t instanceof qc))throw TypeError(`View needs to be an instance of module:engine/view/view~EditingView.`);let i=t.document,a=r.rootName||`main`,o=i.getRoot(a);t.change(t=>{let r=e._parse(n,{rootElement:o});r.view&&r.selection&&t.setSelection(r.selection)})};return e._parse=Zm,e})();function Xm(e,t=null,n={}){let r;return r=t instanceof L||t instanceof R?new cs(t):t,new $m(e,r,n).stringify()}function Zm(e,t={}){let n=new Cs(new Ho);t.order=t.order||[];let r=new Qm({sameSelectionCharacters:t.sameSelectionCharacters}),i=new Ad(n,{namespaces:Object.keys(Km)});t.inlineObjectElements&&i.domConverter.inlineObjectElements.push(...t.inlineObjectElements);let a=i.toView(e);if(a=eh(a),t.rootElement){let e=t.rootElement,n=a._removeChildren(0,a.childCount);e._removeChildren(0,e.childCount),e._appendChild(n),a=e}let o=r._parseView(a,t.order);if(a.is(`documentFragment`)&&a.childCount===1&&(a=a.getChild(0)),o.length){let e=new cs(o,{backward:!!t.lastRangeBackward});return{view:a,selection:e}}return a.parent&&a._remove(),a}var Qm=class{sameSelectionCharacters;_positions;constructor(e){this.sameSelectionCharacters=!!e.sameSelectionCharacters}_parseView(e,t){this._positions=[],this._getPositions(e);let n=this._createRanges();if(t.length){if(t.length!=n.length)throw Error(`Parse error - there are ${n.length} ranges found, but ranges order array contains ${t.length} elements.`);n=this._sortRanges(n,t)}return n}_getPositions(e){if(e.is(`documentFragment`)||e.is(`element`)){let t=[...e.getChildren()];for(let e of t)this._getPositions(e)}if(e.is(`$text`)){let t=RegExp(`[{}\\]\\[]`,`g`),n=e.data,r,i=0,a=[];for(;r=t.exec(n);){let e=r.index,t=r[0];a.push({bracket:t,textOffset:e-i}),i++}n=n.replace(t,``),e._data=n;let o=e.index,s=e.parent;n||e._remove();for(let t of a)if(n)if(this.sameSelectionCharacters||!this.sameSelectionCharacters&&(t.bracket==`{`||t.bracket==`}`))this._positions.push({bracket:t.bracket,position:new L(e,t.textOffset)});else{if(!this.sameSelectionCharacters&&t.textOffset!==0&&t.textOffset!==n.length)throw Error(`Parse error - range delimiter '${t.bracket}' is placed inside text node.`);let e=t.textOffset===0?o:o+1;this._positions.push({bracket:t.bracket,position:new L(s,e)})}else{if(!this.sameSelectionCharacters&&t.bracket==`{`||t.bracket==`}`)throw Error(`Parse error - text range delimiter '${t.bracket}' is placed inside empty text node. `);this._positions.push({bracket:t.bracket,position:new L(s,o)})}}}_sortRanges(e,t){let n=[],r=0;for(let i of t){if(e[i-1]===void 0)throw Error(`Parse error - provided ranges order is invalid.`);n[i-1]=e[r],r++}return n}_createRanges(){let e=[],t=null;for(let n of this._positions){if(!t&&(n.bracket==`]`||n.bracket==`}`))throw Error(`Parse error - end of range was found '${n.bracket}' but range was not started before.`);if(t&&(n.bracket==`[`||n.bracket==`{`))throw Error(`Parse error - start of range was found '${n.bracket}' but one range is already started.`);n.bracket==`[`||n.bracket==`{`?t=new R(n.position,n.position):(t.end=n.position,e.push(t),t=null)}if(t!==null)throw Error(`Parse error - range was started but no end delimiter was found.`);return e}},$m=class{root;selection;ranges;showType;showPriority;showAttributeElementId;ignoreRoot;sameSelectionCharacters;renderUIElements;renderRawElements;domConverter;skipListItemIds;constructor(e,t,n){this.root=e,this.selection=t,this.ranges=[],t&&(this.ranges=[...t.getRanges()]),this.showType=!!n.showType,this.showPriority=!!n.showPriority,this.showAttributeElementId=!!n.showAttributeElementId,this.ignoreRoot=!!n.ignoreRoot,this.sameSelectionCharacters=!!n.sameSelectionCharacters,this.renderUIElements=!!n.renderUIElements,this.renderRawElements=!!n.renderRawElements,this.domConverter=n.domConverter||qm,this.skipListItemIds=n.skipListItemIds===void 0?!0:!!n.skipListItemIds}stringify(){let e=``;return this._walkView(this.root,t=>{e+=t}),this.skipListItemIds&&(e=e.replaceAll(/ data-list-item-id="[^"]+"/g,``)),e}_walkView(e,t){let n=this.ignoreRoot&&this.root===e;if(e.is(`element`)||e.is(`documentFragment`)){if(e.is(`element`)&&!n&&t(this._stringifyElementOpen(e)),this.renderUIElements&&e.is(`uiElement`))t(e.render(document,this.domConverter).innerHTML);else if(this.renderRawElements&&e.is(`rawElement`)){let n=document.createElement(`div`);e.render(n,this.domConverter),t(n.innerHTML)}else{let n=0;t(this._stringifyElementRanges(e,n));for(let r of e.getChildren())this._walkView(r,t),n++,t(this._stringifyElementRanges(e,n))}e.is(`element`)&&!n&&t(this._stringifyElementClose(e))}e.is(`$text`)&&t(this._stringifyTextRanges(e))}_stringifyElementRanges(e,t){let n=``,r=``,i=``;for(let a of this.ranges)a.start.parent==e&&a.start.offset===t&&(a.isCollapsed?i+=`[]`:n+=`[`),a.end.parent===e&&a.end.offset===t&&!a.isCollapsed&&(r+=`]`);return r+i+n}_stringifyTextRanges(e){let t=e.data.length,n=e.data.split(``),r,i;this.sameSelectionCharacters?(r=`[`,i=`]`):(r=`{`,i=`}`),n[t]=``;let a=n.map(e=>({letter:e,start:``,end:``,collapsed:``}));for(let n of this.ranges){let o=n.start,s=n.end;o.parent==e&&o.offset>=0&&o.offset<=t&&(n.isCollapsed?a[s.offset].collapsed+=r+i:a[o.offset].start+=r),s.parent==e&&s.offset>=0&&s.offset<=t&&!n.isCollapsed&&(a[s.offset].end+=i)}return a.map(e=>e.end+e.collapsed+e.start+e.letter).join(``)}_stringifyElementOpen(e){let t=this._stringifyElementPriority(e),n=this._stringifyElementId(e);return`<${[[this._stringifyElementType(e),e.name].filter(e=>e!==``).join(`:`),t,n,this._stringifyElementAttributes(e)].filter(e=>e!==``).join(` `)}>`}_stringifyElementClose(e){return`e!==``).join(`:`)}>`}_stringifyElementType(e){if(this.showType){for(let t in Km)if(e instanceof Km[t])return t}return``}_stringifyElementPriority(e){return this.showPriority&&e.is(`attributeElement`)?`view-priority="${e.priority}"`:``}_stringifyElementId(e){return this.showAttributeElementId&&e.is(`attributeElement`)&&e.id?`view-id="${e.id}"`:``}_stringifyElementAttributes(e){let t=[],n=[...e.getAttributeKeys()].sort();for(let r of n){let n;n=r===`class`?[...e.getClassNames()].sort().join(` `):r===`style`?[...e.getStyleNames()].sort().map(t=>`${t}:${e.getStyle(t).replace(/"/g,`"`)}`).join(`;`):e.getAttribute(r),t.push(`${r}="${n}"`)}return t.join(` `)}};function eh(e){if(e.is(`element`)||e.is(`documentFragment`)){let t=e.is(`documentFragment`)?new Is(e.document):th(e.document,e);for(let n of[...e.getChildren()]){if(t.is(`emptyElement`))throw Error(`Parse error - cannot parse inside ViewEmptyElement.`);if(t.is(`uiElement`))throw Error(`Parse error - cannot parse inside UIElement.`);if(t.is(`rawElement`))throw Error(`Parse error - cannot parse inside RawElement.`);t._appendChild(eh(n))}return t}return e}function th(e,t){let n=nh(t),r=Km[n.type],i=r?new r(e,n.name):new Jo(e,n.name);i.is(`attributeElement`)&&(n.priority!==null&&(i._priority=n.priority),n.id!==null&&(i._id=n.id));for(let e of t.getAttributeKeys())i._setAttribute(e,t.getAttribute(e));return i}function nh(e){let t=e.name.split(`:`),n=ih(e.getAttribute(`view-priority`)),r=e.hasAttribute(`view-id`)?e.getAttribute(`view-id`):null;if(e._removeAttribute(`view-priority`),e._removeAttribute(`view-id`),t.length==1)return{name:t[0],type:n===null?null:`attribute`,priority:n,id:r};let i=rh(t[0]);if(i)return{name:t[1],type:i,priority:n,id:r};throw Error(`Parse error - cannot parse element's name: ${e.name}.`)}function rh(e){return e in Km?e:null}function ih(e){let t=parseInt(e,10);return isNaN(t)?null:t}const ah=(()=>{let e=function(t,n={}){if(!(t instanceof Dp))throw TypeError(`Model needs to be an instance of module:engine/model/model~Model.`);let r=n.rootName||`main`,i=t.document.getRoot(r);return e._stringify(i,n.withoutSelection?null:t.document.selection,n.convertMarkers?t.markers:null)};return e._stringify=sh,e})(),oh=(()=>{let e=function(t,n,r={}){if(!(t instanceof Dp))throw TypeError(`Model needs to be an instance of module:engine/model/model~Model.`);let i,a=null,o=t.document.getRoot(r.rootName||`main`),s=e._parse(n,t.schema,{lastRangeBackward:r.lastRangeBackward,selectionAttributes:r.selectionAttributes,context:[o.name],inlineObjectElements:r.inlineObjectElements});`model`in s?(i=s.model,a=s.selection):i=s,r.batchType===void 0?t.change(c):t.enqueueChange(r.batchType,c);function c(e){if(e.remove(e.createRangeIn(o)),e.insert(i,o),e.setSelection(null),e.removeSelectionAttribute(t.document.selection.getAttributeKeys()),a){let t=[];for(let e of a.getRanges()){let n=new z(o,e.start.path),r=new z(o,e.end.path);t.push(new B(n,r))}e.setSelection(t,{backward:a.isBackward}),r.selectionAttributes&&e.setSelectionAttribute(a.getAttributes())}}};return e._parse=ch,e})();function sh(e,t=null,n=null){let r=new Dp,i=new ol,a=null,o;if(e instanceof Cf||e instanceof Nf)o=r.createRangeIn(e);else if(e.parent)o=new B(r.createPositionBefore(e),r.createPositionAfter(e));else{let t=new Nf(e);o=r.createRangeIn(t)}t instanceof _l||t instanceof Tl?a=t:(t instanceof B||t instanceof z)&&(a=new _l(t));let s=new qc(new Ho),c=s.document,l=new ns(c,`div`);l.rootName=`main`,c.roots.add(l);let u=new fl({mapper:i,schema:r.schema});i.bindElements(e.root,l),u.on(`insert:$text`,Ll()),u.on(`insert`,Rl(),{priority:`lowest`}),u.on(`attribute`,(e,t,n)=>{(t.item instanceof _l||t.item instanceof Tl||t.item.is(`$textProxy`))&&Wl((e,{writer:n})=>n.createAttributeElement(`model-text-with-attributes`,{[t.attributeKey]:ph(e)}))(e,t,n)}),u.on(`insert`,Gl(e=>{let t=mh(e.getAttributes(),ph);return new Qo(c,e.name,t)})),u.on(`selection`,Vl()),u.on(`selection`,Hl()),u.on(`addMarker`,ql((e,{writer:t})=>{let n=e.markerName+`:`+(e.isOpening?`start`:`end`);return t.createUIElement(n)}));let d=new Map;if(n)for(let e of Array.from(n).sort((e,t)=>e.namel.convert(a.root,e,n.context||`$root`));if(r.bindElements(u,a.root),u.childCount==1&&(u=u.getChild(0)),o){let e=[];for(let t of o.getRanges())e.push(r.toModelRange(t));s=new _l(e,{backward:o.isBackward});for(let[e,t]of Ui(n.selectionAttributes||[]))s.setAttribute(e,t)}return s?{model:u,selection:s}:u}function lh(e){return(t,n,r)=>{let i=r.convertChildren(n.viewItem,n.modelCursor);e.bindElements(n.modelCursor.parent,n.viewItem),n=Object.assign(n,i),t.stop()}}function uh(e){return(t,n,r)=>{let i=n.viewItem.name;if(!r.schema.checkChild(n.modelCursor,i))throw Error(`Element '${i}' was not allowed in given position.`);let a=mh(n.viewItem.getAttributes(),fh),o=r.writer.createElement(n.viewItem.name,a);r.writer.insert(o,n.modelCursor),e.bindElements(o,n.viewItem),r.convertChildren(n.viewItem,o),n.modelRange=B._createOn(o),n.modelCursor=n.modelRange.end,t.stop()}}function dh(){return(e,t,n)=>{if(!n.schema.checkChild(t.modelCursor,`$text`))throw Error(`Text was not allowed in given position.`);let r;if(t.viewItem.is(`element`)){let e=mh(t.viewItem.getAttributes(),fh),i=t.viewItem.getChild(0);r=n.writer.createText(i.data,e)}else r=n.writer.createText(t.viewItem.data);n.writer.insert(r,t.modelCursor),t.modelRange=B._createFromPositionAndShift(t.modelCursor,r.offsetSize),t.modelCursor=t.modelRange.end,e.stop()}}function fh(e){try{return JSON.parse(e)}catch{return e}}function ph(e){return xn(e)?JSON.stringify(e):e}function*mh(e,t){for(let[n,r]of e)yield[n,t(r)]}function hh(e){let t=``;for(let n of e)t+=` ${n[0]}=${JSON.stringify(n[1])}`;return t}function gh(e){let t={};for(let n of e)t[n[0]]=n[1];return JSON.stringify(t)}const _h=Symbol(`_treeDump`);function vh(e,t){console.log(e,t);let n=``;for(let t of e.roots)n+=t.printTree()+` -`;e[_h][t]=n.substr(0,n.length-1);let r=e[_h].length-20;r>0&&(e[_h][r-1]=null)}function yh(e){e[_h]=[]}function bh(e,t){console.log(`--------------------`),e[_h][t]?console.log(e[_h][t]):console.log(`Tree log unavailable for given version: `+t)}var xh=class{_model;_logSeparator;_operationsToReplay;constructor(e,t,n){this._model=e,this._logSeparator=t,this.setStringifiedOperations(n)}setStringifiedOperations(e){if(e===``){this._operationsToReplay=[];return}this._operationsToReplay=e.split(this._logSeparator).map(e=>JSON.parse(e))}getOperationsToReplay(){return this._operationsToReplay}play(e=1e3){let t=this;return new Promise((n,r)=>{i();function i(){t.applyNextOperation().then(t=>{if(t)return n();setTimeout(i,e)}).catch(e=>{r(e)})}})}applyOperations(e){if(!(e<=0))return this.applyNextOperation().then(t=>{if(!t)return this.applyOperations(e-1)})}applyAllOperations(){return this.applyNextOperation().then(e=>{if(!e)return this.applyAllOperations()})}applyNextOperation(){let e=this._model;return new Promise(t=>{e.enqueueChange(n=>{let r=this._operationsToReplay.shift();if(!r)return t(!0);let i=Zd.fromJSON(r,e.document);n.batch.addOperation(i),e.applyOperation(i),t(!1)})})}},Sh=class{crashes=[];state=`initializing`;_crashNumberLimit;_now=Date.now;_minimumNonErrorTimePeriod;_boundErrorHandler;_listeners;constructor(e){if(this.crashes=[],this._crashNumberLimit=typeof e.crashNumberLimit==`number`?e.crashNumberLimit:3,this._minimumNonErrorTimePeriod=typeof e.minimumNonErrorTimePeriod==`number`?e.minimumNonErrorTimePeriod:5e3,this._boundErrorHandler=e=>{let t=`error`in e?e.error:e.reason;t instanceof Error&&this._handleError(t,e)},this._listeners={},!this._restart)throw Error("The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.")}destroy(){this._stopErrorHandling(),this._listeners={}}on(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)}off(e,t){this._listeners[e]=this._listeners[e].filter(e=>e!==t)}_fire(e,...t){let n=this._listeners[e]||[];for(let e of n)e.apply(this,[null,...t])}_startErrorHandling(){window.addEventListener(`error`,this._boundErrorHandler),window.addEventListener(`unhandledrejection`,this._boundErrorHandler)}_stopErrorHandling(){window.removeEventListener(`error`,this._boundErrorHandler),window.removeEventListener(`unhandledrejection`,this._boundErrorHandler)}_handleError(e,t){if(this._shouldReactToError(e)){this.crashes.push({message:e.message,stack:e.stack,filename:t instanceof ErrorEvent?t.filename:void 0,lineno:t instanceof ErrorEvent?t.lineno:void 0,colno:t instanceof ErrorEvent?t.colno:void 0,date:this._now()});let n=this._shouldRestart();this.state=`crashed`,this._fire(`stateChange`),this._fire(`error`,{error:e,causesRestart:n}),n?this._restart():(this.state=`crashedPermanently`,this._fire(`stateChange`))}}_shouldReactToError(e){return e.is&&e.is(`CKEditorError`)&&e.context!==void 0&&e.context!==null&&this.state===`ready`&&this._isErrorComingFromThisItem(e)}_shouldRestart(){return this.crashes.length<=this._crashNumberLimit?!0:(this.crashes[this.crashes.length-1].date-this.crashes[this.crashes.length-1-this._crashNumberLimit].date)/this._crashNumberLimit>this._minimumNonErrorTimePeriod}};function Ch(e,t=new Set){let n=[e],r=new Set,i=0;for(;n.length>i;){let e=n[i++];if(!(r.has(e)||!wh(e)||t.has(e)))if(r.add(e),Symbol.iterator in e)try{for(let t of e)n.push(t)}catch{}else for(let t in e)t!==`defaultValue`&&n.push(e[t])}return r}function wh(e){let t=Object.prototype.toString.call(e),n=typeof e;return!(n===`number`||n===`boolean`||n===`string`||n===`symbol`||n===`function`||t===`[object Date]`||t===`[object RegExp]`||t===`[object Module]`||e==null||e._watchdogExcluded||e instanceof EventTarget||e instanceof Event)}function Th(e,t,n=new Set){if(e===t&&Eh(e))return!0;let r=Ch(e,n),i=Ch(t,n);for(let e of r)if(i.has(e))return!0;return!1}function Eh(e){return typeof e==`object`&&!!e}function Dh(e,t,n){let r=t.root,i=t.roots||Object.create(null);n&&!i[n]&&(i[n]=r||Object.create(null));let a=Oh(e),o=kh(t,a,n),s=Array.from(new Set([...a?Object.keys(e):[],...Object.keys(i),...Object.keys(o)]));for(let e of s){let n=i[e]||Object.create(null);n.initialData=``,n.placeholder??=Ah(t,`placeholder`,e),n.label??=Ah(t,`label`,e),i[e]=n}t.roots=i}function Oh(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&!jh(e)}function kh(e,t,n){return t||!n?e.initialData||Object.create(null):{[n]:e.initialData}}function Ah(e,t,n){let r=e[t];if(r)return typeof r==`string`?r:r[n]}function jh(e){return jn(e)}var Mh=class extends Sh{_editor=null;_lifecyclePromise=null;_throttledSave;_data;_lastDocumentVersion;_elementOrData;_editorAttachTo=null;_isSingleRootEditor=!0;_isUsingConfigBasedCreator=!1;_editables={};_config;_excludedProps;constructor(e,t={}){super(t),this._throttledSave=qt(this._save.bind(this),typeof t.saveInterval==`number`?t.saveInterval:5e3),e&&(this._creator=((t,n)=>n===void 0?e.create(t):e.create(t,n))),this._destructor=e=>e.destroy()}get editor(){return this._editor}get _item(){return this._editor}setCreator(e){this._creator=e}setDestructor(e){this._destructor=e}_restart(){return Promise.resolve().then(()=>(this.state=`initializing`,this._fire(`stateChange`),this._destroy())).catch(e=>{console.error(`An error happened during the editor destroying.`,e)}).then(()=>{this._isUsingConfigBasedCreator?Dh(this._isSingleRootEditor?``:{},this._config,this._isSingleRootEditor?`main`:!1):Dh(this._isSingleRootEditor?this._editorAttachTo||``:this._editables,this._config,this._isSingleRootEditor?`main`:!1);let e={...this._config,extraPlugins:this._config.extraPlugins||[],_watchdogInitialData:this._data};e.extraPlugins.push(Nh);let t={};for(let[n,r]of Object.entries(this._data.roots)){let i=e.roots[n]||Object.create(null);i.initialData=``,i.modelElement=r.modelElement,this._isUsingConfigBasedCreator&&(this._editables[n]?.isConnected?i.element=this._editables[n]:r.isLoaded&&!i.element&&Object.assign(i,Fh(r.attributes))),r.isLoaded?i.lazyLoad=!1:delete i.modelAttributes,t[n]=i}if(e.roots=t,delete e.initialData,delete e.root,this._isUsingConfigBasedCreator)return this.create(e,e.context);let n=this._isSingleRootEditor?this._editorAttachTo||``:this._editables;return this.create(n,e,e.context)}).then(()=>{this._fire(`restart`)})}create(e=this._isUsingConfigBasedCreator?this._config:this._elementOrData,t=this._isUsingConfigBasedCreator?void 0:this._config,n){let r=this._detectConfigBasedCreator(e,t),i=r?void 0:e,a=r?e:t,o=r?t:n;return this._lifecyclePromise=Promise.resolve(this._lifecyclePromise).then(()=>{if(super._startErrorHandling(),this._isUsingConfigBasedCreator=r,this._elementOrData=i,this._config=this._cloneEditorConfiguration(a||{}),this._config.context=o,r){this._editorAttachTo=null;let e=this._config.roots?Object.keys(this._config.roots).length:0,t=this._config.initialData,n=t&&typeof t==`object`;this._isSingleRootEditor=!n&&e<=1}else this._editorAttachTo=Ph(i)?i:null,this._isSingleRootEditor=Ph(i)||typeof i==`string`;return r?this._creator(this._config):this._creator(i,this._config)}).then(e=>{this._editor=e,e.model.document.on(`change:data`,this._throttledSave),this._lastDocumentVersion=e.model.document.version,this._data=this._getData(),this._editorAttachTo||(this._editables=this._getEditables()),this.state=`ready`,this._fire(`stateChange`)}).finally(()=>{this._lifecyclePromise=null}),this._lifecyclePromise}destroy(){return this._lifecyclePromise=Promise.resolve(this._lifecyclePromise).then(()=>(this.state=`destroyed`,this._fire(`stateChange`),super.destroy(),this._destroy())).finally(()=>{this._lifecyclePromise=null}),this._lifecyclePromise}_destroy(){return Promise.resolve().then(()=>{this._stopErrorHandling(),this._throttledSave.cancel();let e=this._editor;return this._editor=null,e.model.document.off(`change:data`,this._throttledSave),this._destructor(e)})}_save(){let e=this._editor.model.document.version;try{this._data=this._getData(),this._editorAttachTo||(this._editables=this._getEditables()),this._lastDocumentVersion=e}catch(e){console.error(e,`An error happened during restoring editor data. Editor will be restored from the previously saved data.`)}}_setExcludedProperties(e){this._excludedProps=e}_getData(){let e=this._editor,t=e.model.document.roots.filter(e=>e.isAttached()&&e.rootName!=`$graveyard`),{plugins:n}=e,r=n.has(`CommentsRepository`)&&n.get(`CommentsRepository`),i=n.has(`TrackChanges`)&&n.get(`TrackChanges`),a={roots:{},markers:{},commentThreads:JSON.stringify([]),suggestions:JSON.stringify([])};t.forEach(e=>{a.roots[e.rootName]={content:JSON.stringify(Array.from(e.getChildren())),attributes:JSON.stringify(Array.from(e.getAttributes())),modelElement:e.name,isLoaded:e._isLoaded}});for(let t of e.model.markers)t._affectsData&&(a.markers[t.name]={rangeJSON:t.getRange().toJSON(),usingOperation:t._managedUsingOperations,affectsData:t._affectsData});return r&&(a.commentThreads=JSON.stringify(r.getCommentThreads({toJSON:!0,skipNotAttached:!0}))),i&&(a.suggestions=JSON.stringify(i.getSuggestions({toJSON:!0,skipNotAttached:!0}))),a}_getEditables(){let e={};for(let t of this.editor.model.document.getRootNames()){let n=this.editor.ui.getEditableElement(t);n&&(e[t]=n)}return e}_isErrorComingFromThisItem(e){return Th(this._editor,e.context,this._excludedProps)}_detectConfigBasedCreator(e,t){if(typeof e==`string`||Ph(e)||t&&typeof t==`object`&&!(`destroy`in t)&&Object.keys(t).length>0)return!1;if(e&&typeof e==`object`){let t=Object.values(e);if(t.length>0&&t.every(e=>typeof e==`string`||Ph(e)))return!1}return!0}_cloneEditorConfiguration(e){return Lt(e,(e,t)=>{if(Ph(e)||t===`context`)return e})}},Nh=class{editor;_data;constructor(e){this.editor=e,this._data=e.config.get(`_watchdogInitialData`)}init(){this.editor.data.on(`init`,e=>{e.stop(),this.editor.model.enqueueChange({isUndoable:!1},e=>{this._restoreCollaborationData(),this._restoreEditorData(e)}),this.editor.data.fire(`ready`)},{priority:999})}_createNode(e,t){if(`name`in t){let n=e.createElement(t.name,t.attributes);if(t.children)for(let r of t.children)n._appendChild(this._createNode(e,r));return n}else return e.createText(t.data,t.attributes)}_restoreEditorData(e){let t=this.editor;Object.entries(this._data.roots).forEach(([n,{content:r,attributes:i}])=>{let a=JSON.parse(r),o=JSON.parse(i),s=t.model.document.getRoot(n);for(let[t,n]of o)e.setAttribute(t,n,s);for(let t of a){let n=this._createNode(e,t);e.insert(n,s,`end`)}}),Object.entries(this._data.markers).forEach(([n,r])=>{let{document:i}=t.model,{rangeJSON:{start:a,end:o},...s}=r,c=i.getRoot(a.root),l=e.createPositionFromPath(c,a.path,a.stickiness),u=e.createPositionFromPath(c,o.path,o.stickiness),d=e.createRange(l,u);e.addMarker(n,{range:d,...s})})}_restoreCollaborationData(){let e=JSON.parse(this._data.commentThreads),t=JSON.parse(this._data.suggestions);if(this.editor.plugins.has(`CommentsRepository`)){let t=this.editor.plugins.get(`CommentsRepository`);for(let e of t.getCommentThreads())t._removeCommentThread({threadId:e.id});e.forEach(e=>{let t=this.editor.config.get(`collaboration.channelId`);this.editor.plugins.get(`CommentsRepository`).addCommentThread({channelId:t,...e})})}if(this.editor.plugins.has(`TrackChangesEditing`)){let e=this.editor.plugins.get(`TrackChangesEditing`);for(let t of e.getSuggestions())e._removeSuggestion(t);t.forEach(t=>{e.addSuggestionData(t)})}}};function Ph(e){return jn(e)}function Fh(e){let{$rootEditableOptions:t}=Object.fromEntries(JSON.parse(e));return!t||typeof t!=`object`?{}:{...t.placeholder&&{placeholder:t.placeholder},...t.label&&{label:t.label},...t.element&&{element:t.element}}}const Ih=Symbol(`MainQueueId`);var Lh=class extends Sh{_watchdogs=new Map;_watchdogConfig;_context=null;_contextProps=new Set;_actionQueues=new Rh;_contextConfig;_item;constructor(e,t={}){super(t),this._watchdogConfig=t,this._creator=t=>e.create(t),this._destructor=e=>e.destroy(),this._actionQueues.onEmpty(()=>{this.state===`initializing`&&(this.state=`ready`,this._fire(`stateChange`))})}setCreator(e){this._creator=e}setDestructor(e){this._destructor=e}get context(){return this._context}create(e={}){return this._actionQueues.enqueue(Ih,()=>(this._contextConfig=e,this._create()))}getItem(e){return this._getWatchdog(e)._item}getItemState(e){return this._getWatchdog(e).state}add(e){let t=zh(e);return Promise.all(t.map(e=>this._actionQueues.enqueue(e.id,()=>{if(this.state===`destroyed`)throw Error(`Cannot add items to destroyed watchdog.`);if(!this._context)throw Error("Context was not created yet. You should call the `ContextWatchdog#create()` method first.");let t;if(this._watchdogs.has(e.id))throw Error(`Item with the given id is already added: '${e.id}'.`);if(e.type===`editor`)return t=new Mh(null,this._watchdogConfig),t.setCreator(e.creator),t._setExcludedProperties(this._contextProps),e.destructor&&t.setDestructor(e.destructor),this._watchdogs.set(e.id,t),t.on(`error`,(n,{error:r,causesRestart:i})=>{this._fire(`itemError`,{itemId:e.id,error:r}),i&&this._actionQueues.enqueue(e.id,()=>new Promise(n=>{let r=()=>{t.off(`restart`,r),this._fire(`itemRestart`,{itemId:e.id}),n()};t.on(`restart`,r)}))}),e.sourceElementOrData===void 0?t.create(e.config,this._context):t.create(e.sourceElementOrData,e.config,this._context);throw Error(`Not supported item type: '${e.type}'.`)})))}remove(e){let t=zh(e);return Promise.all(t.map(e=>this._actionQueues.enqueue(e,()=>{let t=this._getWatchdog(e);return this._watchdogs.delete(e),t.destroy()})))}destroy(){return this._actionQueues.enqueue(Ih,()=>(this.state=`destroyed`,this._fire(`stateChange`),super.destroy(),this._destroy()))}_restart(){return this._actionQueues.enqueue(Ih,()=>(this.state=`initializing`,this._fire(`stateChange`),this._destroy().catch(e=>{console.error(`An error happened during destroying the context or items.`,e)}).then(()=>this._create()).then(()=>this._fire(`restart`))))}_create(){return Promise.resolve().then(()=>(this._startErrorHandling(),this._creator(this._contextConfig))).then(e=>(this._context=e,this._contextProps=Ch(this._context),Promise.all(Array.from(this._watchdogs.values()).map(e=>(e._setExcludedProperties(this._contextProps),e._isUsingConfigBasedCreator?e.create(void 0,this._context):e.create(void 0,void 0,this._context))))))}_destroy(){return Promise.resolve().then(()=>{this._stopErrorHandling();let e=this._context;return this._context=null,this._contextProps=new Set,Promise.all(Array.from(this._watchdogs.values()).map(e=>e.destroy())).then(()=>this._destructor(e))})}_getWatchdog(e){let t=this._watchdogs.get(e);if(!t)throw Error(`Item with the given id was not registered: ${e}.`);return t}_isErrorComingFromThisItem(e){for(let t of this._watchdogs.values())if(t._isErrorComingFromThisItem(e))return!1;return Th(this._context,e.context)}},Rh=class{_onEmptyCallbacks=[];_queues=new Map;_activeActions=0;onEmpty(e){this._onEmptyCallbacks.push(e)}enqueue(e,t){let n=e===Ih;this._activeActions++,this._queues.get(e)||this._queues.set(e,Promise.resolve());let r=(n?Promise.all(this._queues.values()):Promise.all([this._queues.get(Ih),this._queues.get(e)])).then(t),i=r.catch(()=>{});return this._queues.set(e,i),r.finally(()=>{this._activeActions--,this._queues.get(e)===i&&this._activeActions===0&&this._onEmptyCallbacks.forEach(e=>e())})}};function zh(e){return Array.isArray(e)?e:[e]}var Bh=class{editor;_entries=[];_frameStack=[];_errors=new Set;_maxEntries;_errorCallback;_filterCallback;_maxEntriesCallback;static get pluginName(){return`ActionsRecorder`}static get isOfficialPlugin(){return!0}constructor(e){this.editor=e,e.config.define(`actionsRecorder.maxEntries`,1e3);let t=e.config.get(`actionsRecorder`);this._maxEntries=t.maxEntries,this._filterCallback=t.onFilter,this._errorCallback=t.onError,this._maxEntriesCallback=t.onMaxEntries||this._maxEntriesDefaultHandler,this._tapCommands(),this._tapOperationApply(),this._tapModelMethods(),this._tapModelSelection(),this._tapComponentFactory(),this._tapViewDocumentEvents()}getEntries(){return this._entries.slice()}flushEntries(){this._entries=[]}_enterFrame(e,t){let n={timeStamp:new Date().toISOString(),...this._frameStack.length&&{parentEntry:this._frameStack.at(-1)},action:e,params:t?.map(e=>Hh(e)),before:this._buildStateSnapshot()};return(!this._filterCallback||this._filterCallback(n,this._entries))&&this._entries.push(n),this._frameStack.push(n),n}_leaveFrame(e,t,n){let r=this._frameStack.pop();!r||r!==e||(t!==void 0&&(r.result=Hh(t)),n&&(r.error=Hh(n)),r.after=this._buildStateSnapshot(),n&&this._callErrorCallback(n),this._frameStack.length==0&&this._errors.clear(),this._entries.length>=this._maxEntries&&this._maxEntriesCallback())}_buildStateSnapshot(){let{model:e,isReadOnly:t,editing:n}=this.editor;return{documentVersion:e.document.version,editorReadOnly:t,editorFocused:n.view.document.isFocused,modelSelection:Hh(e.document.selection)}}_tapCommands(){for(let[e,t]of this.editor.commands)this._tapCommand(e,t);Vh(this.editor.commands,`add`,{before:(e,[t,n])=>(this._tapCommand(t,n),!1)})}_tapOperationApply(){Vh(this.editor.model,`applyOperation`,{before:(e,[t])=>t.baseVersion===null?!1:(e.callFrame=this._enterFrame(`model.applyOperation`,[t]),!0),after:e=>{this._leaveFrame(e.callFrame)},error:(e,t)=>{this._leaveFrame(e.callFrame,void 0,t)}})}_tapModelMethods(){for(let e of[`insertContent`,`insertObject`,`deleteContent`])Vh(this.editor.model,e,{before:(t,...n)=>(t.callFrame=this._enterFrame(`model.${e}`,n),!0),after:(e,t)=>{this._leaveFrame(e.callFrame,t)},error:(e,t)=>{this._leaveFrame(e.callFrame,void 0,t)}})}_tapModelSelection(){this._tapFireMethod(this.editor.model.document.selection,[`change:range`,`change:attribute`,`change:marker`],{eventSource:`model-selection`})}_tapCommand(e,t){Vh(t,`execute`,{before:(t,n)=>(t.callFrame=this._enterFrame(`commands.${e}:execute`,n),!0),after:(e,t)=>{this._leaveFrame(e.callFrame,t)},error:(e,t)=>{this._leaveFrame(e.callFrame,void 0,t)}})}_tapComponentFactory(){Vh(this.editor.ui.componentFactory,`create`,{before:(e,[t])=>(e.componentName=t,e.callFrame=this._enterFrame(`component-factory.create:${t}`),!0),after:(e,t)=>{let n={...e,eventSource:`component.${e.componentName}`};typeof t.fire==`function`&&this._tapFireMethod(t,[`execute`],n),typeof t.panelView?.fire==`function`&&this._tapFireMethod(t.panelView,[`execute`],n),typeof t.buttonView?.actionView?.fire==`function`&&this._tapFireMethod(t.buttonView.actionView,[`execute`],n),this._leaveFrame(e.callFrame)},error:(e,t)=>{this._leaveFrame(e.callFrame,void 0,t)}})}_tapViewDocumentEvents(){this._tapFireMethod(this.editor.editing.view.document,[`click`,`mousedown`,`mouseup`,`pointerdown`,`pointerup`,`focus`,`blur`,`keydown`,`keyup`,`selectionChange`,`compositionstart`,`compositionend`,`beforeinput`,`mutations`,`enter`,`delete`,`insertText`,`paste`,`copy`,`cut`,`dragstart`,`drop`],{eventSource:`observers`})}_tapFireMethod(e,t,n={}){Vh(e,`fire`,{before:(e,[n,...r])=>{let i=typeof n==`string`?n:n.name;return t.includes(i)?(e.callFrame=this._enterFrame(`${e.eventSource}:${i}`,r),!0):!1},after:(e,t)=>{this._leaveFrame(e.callFrame,t)},error:(e,t)=>{this._leaveFrame(e.callFrame,void 0,t)}},n)}_callErrorCallback(e){if(!(!this._errorCallback||this._errors.has(e))){this._errors.add(e);try{this._errorCallback(e,this.getEntries())}catch(e){console.error(`ActionsRecorder onError callback error:`,e)}}}_maxEntriesDefaultHandler(){this._entries.shift()}};function Vh(e,t,n,r={}){let i=e[t];i[Symbol.for(`Tapped method`)]||(e[t]=(...t)=>{let a=Object.assign({},r),o;try{o=n.before?.(a,t);let r=i.apply(e,t);return o&&n.after?.(a,r),r}catch(e){throw o&&n.error?.(a,e),e}},e[t][Symbol.for(`Tapped method`)]=i)}function Hh(e,t=new WeakSet){if(!e||[`boolean`,`number`,`string`].includes(typeof e))return e;if(typeof e.toJSON==`function`){let n=e.toJSON();if(xn(n)||Array.isArray(n)||[`string`,`number`,`boolean`].includes(typeof n))return Hh(n,t)}if(e instanceof Error)return{name:e.name,message:e.message,stack:e.stack};if(Wh(e)||typeof e!=`object`)return{type:typeof e,constructor:e.constructor?.name||`unknown`,string:String(e)};if(e instanceof File||e instanceof Blob||e instanceof FormData||e instanceof DataTransfer)return String(e);if(t.has(e))return;if(t.add(e),Array.isArray(e))return e.length?e.map(e=>Hh(e,t)):void 0;let n={},r=[];e.domEvent&&(r.push(`domEvent`,`domTarget`,`view`,`document`),n.domEvent=Uh(e.domEvent),n.target=Hh(e.target),e.dataTransfer&&(n.dataTransfer={types:e.dataTransfer.types,htmlData:e.dataTransfer.getData(`text/html`),files:Hh(e.dataTransfer.files)}));for(let[i,a]of Object.entries(e)){if(i.startsWith(`_`)||r.includes(i)||typeof a==`function`)continue;let e=Hh(a,t);e!==void 0&&(n[i]=e)}if(Symbol.iterator in e){let r=Array.from(e[Symbol.iterator]()).map(e=>Hh(e,t));r.length&&(n._items=r)}return Object.keys(n).length?n:void 0}function Uh(e){let t={type:e.type,target:n(e.target)};e instanceof MouseEvent&&(t={...t,button:e.button,buttons:e.buttons,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey}),e instanceof KeyboardEvent&&(t={...t,key:e.key,code:e.code,keyCode:e.keyCode,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,repeat:e.repeat}),e instanceof InputEvent&&(t={...t,data:e.data,inputType:e.inputType,isComposing:e.isComposing}),e instanceof PointerEvent&&(t={...t,isPrimary:e.isPrimary});function n(e){return e?e instanceof Element?{tagName:e.tagName,className:e.className,id:e.id}:e instanceof Window||e instanceof Document?{type:e.constructor.name}:{}:null}return t}function Wh(e){return e&&typeof e.is==`function`}const Gh=`contentEditing`,Kh=`common`;var qh=class{keystrokeInfos=new Map;_editor;constructor(e){this._editor=e;let t=e.config.get(`menuBar.isVisible`),n=e.locale.t;this.addKeystrokeInfoCategory({id:Gh,label:n(`Content editing keystrokes`),description:n(`These keyboard shortcuts allow for quick access to content editing features.`)});let r=[{label:n(`Close contextual balloons, dropdowns, and dialogs`),keystroke:`Esc`},{label:n(`Open the accessibility help dialog`),keystroke:`Alt+0`},{label:n(`Move focus between form fields (inputs, buttons, etc.)`),keystroke:[[`Tab`],[`Shift+Tab`]]},{label:n(`Move focus to the toolbar, navigate between toolbars`),keystroke:`Alt+F10`,mayRequireFn:!0},{label:n(`Navigate through the toolbar or menu bar`),keystroke:[[`arrowup`],[`arrowright`],[`arrowdown`],[`arrowleft`]]},{label:n(`Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.`),keystroke:[[`Enter`],[`Space`]]}];t&&r.push({label:n(`Move focus to the menu bar, navigate between menu bars`),keystroke:`Alt+F9`,mayRequireFn:!0}),this.addKeystrokeInfoCategory({id:`navigation`,label:n(`User interface and content navigation keystrokes`),description:n(`Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.`),groups:[{id:`common`,keystrokes:r}]})}addKeystrokeInfoCategory({id:e,label:t,description:n,groups:r}){this.keystrokeInfos.set(e,{id:e,label:t,description:n,groups:new Map}),this.addKeystrokeInfoGroup({categoryId:e,id:Kh}),r&&r.forEach(t=>{this.addKeystrokeInfoGroup({categoryId:e,...t})})}addKeystrokeInfoGroup({categoryId:e=Gh,id:t,label:n,keystrokes:r}){let i=this.keystrokeInfos.get(e);if(!i)throw new w(`accessibility-unknown-keystroke-info-category`,this._editor,{groupId:t,categoryId:e});i.groups.set(t,{id:t,label:n,keystrokes:r||[]})}addKeystrokeInfos({categoryId:e=Gh,groupId:t=Kh,keystrokes:n}){if(!this.keystrokeInfos.has(e))throw new w(`accessibility-unknown-keystroke-info-category`,this._editor,{categoryId:e,keystrokes:n});let r=this.keystrokeInfos.get(e);if(!r.groups.has(t))throw new w(`accessibility-unknown-keystroke-info-group`,this._editor,{groupId:t,categoryId:e,keystrokes:n});r.groups.get(t).keystrokes.push(...n)}};function Jh(e){return{sessionId:eg(),pageSessionId:tg(),hostname:window.location.hostname,version:globalThis.CKEDITOR_VERSION,type:Yh(e),plugins:Xh(e.plugins),distribution:Qh(),env:$h(),integration:Object.create(null),menuBar:{isVisible:!!e.config.get(`menuBar.isVisible`)},language:{ui:e.locale.uiLanguage,content:e.locale.contentLanguage},toolbar:{main:Zh(e.config.get(`toolbar`)),block:Zh(e.config.get(`blockToolbar`)),balloon:Zh(e.config.get(`balloonToolbar`))}}}function Yh(e){return Object.getPrototypeOf(e).constructor.editorName}function Xh(e){return Array.from(e).filter(([e])=>!!e.pluginName).map(([e])=>{let{pluginName:t,isContextPlugin:n,isOfficialPlugin:r,isPremiumPlugin:i}=e;return{isContext:!!n,isOfficial:!!r,isPremium:!!i,name:t}})}function Zh(e){if(!e)return;let t=Array.isArray(e)?{items:e}:e,n=i(t.items||[]);return{isMultiline:n.includes(`-`),shouldNotGroupWhenFull:!!t.shouldNotGroupWhenFull,items:r(n)};function r(e){return e.filter(e=>e!==`|`&&e!==`-`)}function i(e){return e.flatMap(e=>typeof e==`string`?[e]:i(e.items))}}function Qh(){return{channel:window[Symbol.for(`cke distribution`)]||`sh`}}function $h(){let e=`unknown`,t=`unknown`;return p.isMac?e=`mac`:p.isWindows?e=`windows`:p.isiOS?e=`ios`:p.isAndroid&&(e=`android`),p.isGecko?t=`gecko`:p.isBlink?t=`blink`:p.isSafari&&(t=`safari`),{os:e,browser:t}}function eg(){return localStorage.getItem(`__ckeditor-session-id`)||localStorage.setItem(`__ckeditor-session-id`,he()),localStorage.getItem(`__ckeditor-session-id`)}function tg(){return u.window.CKEDITOR_PAGE_SESSION_ID=u.window.CKEDITOR_PAGE_SESSION_ID||he(),u.window.CKEDITOR_PAGE_SESSION_ID}const ng=D();var rg=class extends ng{static get editorName(){return`Editor`}accessibility;commands;config;conversion;data;editing;locale;model;plugins;keystrokes;t;static defaultConfig;static builtinPlugins;_context;_readOnlyLocks;_registeredRootsAttributesKeys=new Set;static get _throwErrorWhenUsedAsAPlugin(){return!0}constructor(e={}){if(super(),typeof e!=`object`||Array.isArray(e))throw new w(`editor-config-invalid-type`);if(`sanitizeHtml`in e)throw new w(`editor-config-sanitizehtml-not-supported`);let t=this.constructor,{translations:n,...r}=t.defaultConfig||{},{translations:i=n,...a}=e,o=e.language||r.language;this._context=e.context||new po({language:o,translations:i}),this._context._addEditor(this,!e.context);let s=Array.from(t.builtinPlugins||[]);this.config=new hr(a,r),this.config.define(`plugins`,s),this.config.define(this._context._getEditorConfig()),l(this.config),this.plugins=new fo(this,s,this._context.plugins),this.locale=this._context.locale,this.t=this.locale.t,this._readOnlyLocks=new Set,this.commands=new lo,this.set(`state`,`initializing`),this.once(`ready`,()=>this.state=`ready`,{priority:`high`}),this.once(`destroy`,()=>this.state=`destroyed`,{priority:`high`}),this.model=new Dp(this.config),this.on(`change:isReadOnly`,()=>{this.model.document.isReadOnly=this.isReadOnly});let c=new Ho;this.data=new Ed(this.model,c),this.editing=new Qu(this.model,c),this.editing.view.document.bind(`isReadOnly`).to(this),this.conversion=new Dd([this.editing.downcastDispatcher,this.data.downcastDispatcher],this.data.upcastDispatcher),this.conversion.addAlias(`dataDowncast`,this.data.downcastDispatcher),this.conversion.addAlias(`editingDowncast`,this.editing.downcastDispatcher),this.keystrokes=new go(this),this.keystrokes.listenTo(this.editing.view.document),this.accessibility=new qh(this),u(this);function l(e){let t=e.get(`licenseKey`);if(!t&&window.CKEDITOR_GLOBAL_LICENSE_KEY&&(t=window.CKEDITOR_GLOBAL_LICENSE_KEY,e.set(`licenseKey`,t)),!t)throw new w(`license-key-missing`)}function u(e){let t=e.config.get(`licenseKey`),n=window[Symbol.for(`cke distribution`)]||`sh`;function r(t,n){e.enableReadOnlyMode(Symbol(`invalidLicense`)),e._showLicenseError(t,n)}function i(e){return[`exp`,`jti`,`vc`].every(t=>t in e)}function a(e){return Object.getOwnPropertyNames(e).sort().filter(t=>t!=`vc`&&e[t]!=null).map(t=>e[t])}function o(e){let{hostname:t}=new URL(window.location.href);if(e.includes(t))return!0;let n=t.split(`.`);return e.filter(e=>e.includes(`*`)).map(e=>e.split(`.`)).filter(e=>e.length<=n.length).map(e=>Array(n.length-e.length).fill(e[0]===`*`?`*`:``).concat(e)).some(e=>n.every((t,n)=>e[n]===t||e[n]===`*`))}function s(e){let t=e[0].toUpperCase()+e.slice(1),n=e===`evaluation`?`an`:`a`;console.info(`%cCKEditor 5 ${t} License`,`color: #ffffff; background: #743CCD; font-size: 14px; padding: 4px 8px; border-radius: 4px;`),console.warn(`⚠️ You are using ${n} ${e} license of CKEditor 5${e===`trial`?` which is for evaluation purposes only`:``}. For production usage, please obtain a production license at https://portal.ckeditor.com/`)}if(t==`GPL`){n==`cloud`&&r(`distributionChannel`);return}let c=ca(t);if(!c){r(`invalid`);return}if(!i(c)){r(`invalid`);return}if(c.distributionChannel&&!A(c.distributionChannel).includes(n)){r(`distributionChannel`);return}if(Zi(a(c))!=c.vc.toLowerCase()){r(`invalid`);return}if(new Date(c.exp*1e3)0&&!o(l)){r(`domainLimit`);return}if([`evaluation`,`trial`].includes(c.licenseType)&&c.exp*1e3{r(`evaluationLimit`)},6e5);e.on(`destroy`,()=>{clearTimeout(t)})}c.usageEndpoint&&e.once(`ready`,()=>{let n={requestId:he(),requestTime:Math.round(Date.now()/1e3),license:t,editor:ig(e)};e._sendUsageRequest(c.usageEndpoint,n).then(e=>{let{status:t,message:n}=e;n&&console.warn(n),t!=`ok`&&r(`usageLimit`)},()=>{ye(`license-key-validation-endpoint-not-reachable`,{url:c.usageEndpoint})})},{priority:`high`})}}get isReadOnly(){return this._readOnlyLocks.size>0}set isReadOnly(e){throw new w(`editor-isreadonly-has-no-setter`)}enableReadOnlyMode(e){if(typeof e!=`string`&&typeof e!=`symbol`)throw new w(`editor-read-only-lock-id-invalid`,null,{lockId:e});this._readOnlyLocks.has(e)||(this._readOnlyLocks.add(e),this._readOnlyLocks.size===1&&this.fire(`change:isReadOnly`,`isReadOnly`,!0,!1))}disableReadOnlyMode(e){if(typeof e!=`string`&&typeof e!=`symbol`)throw new w(`editor-read-only-lock-id-invalid`,null,{lockId:e});this._readOnlyLocks.has(e)&&(this._readOnlyLocks.delete(e),this._readOnlyLocks.size===0&&this.fire(`change:isReadOnly`,`isReadOnly`,!1,!0))}setData(e){this.data.set(e)}getData(e){return this.data.get(e)}async initPlugins(){let e=this.config,t=e.get(`plugins`),n=e.get(`removePlugins`)||[],r=e.get(`extraPlugins`)||[],i=e.get(`substitutePlugins`)||[],a=await this.plugins.init(t.concat(r),n,i);return o(this),a;function o(e){let t=e.config.get(`licenseKey`);if(t===`GPL`)return;let n=ca(t);if(!n)return;let r=[...e.plugins].map(([e])=>e).find(e=>!e.pluginName||!e.licenseFeatureCode?!1:ua(n,e.licenseFeatureCode));r&&(e.enableReadOnlyMode(Symbol(`invalidLicense`)),e._showLicenseError(`pluginNotAllowed`,r.pluginName))}}async destroy(){this.state==`initializing`&&await new Promise(e=>this.once(`ready`,e)),this.fire(`destroy`),this.stopListening(),this.commands.destroy(),await this.plugins.destroy(),this.model.destroy(),this.data.destroy(),this.editing.destroy(),this.keystrokes.destroy(),await this._context._removeEditor(this)}execute(e,...t){try{return this.commands.execute(e,...t)}catch(e){w.rethrowUnexpectedError(e,this)}}focus(){this.editing.view.focus()}registerRootAttribute(e){this._registeredRootsAttributesKeys.has(e)||(this._registeredRootsAttributesKeys.add(e),this.editing.model.schema.extend(`$root`,{allowAttributes:e}))}getRootAttributes(e=`main`){let t=this.model.document.getRoot(e);if(!t)throw new w(`get-root-attributes-missing-root`,this,{rootName:e});let n={};for(let e of this._registeredRootsAttributesKeys)n[e]=t.hasAttribute(e)?t.getAttribute(e):null;return n}static create(...e){throw Error(`This is an abstract method.`)}static Context=po;static EditorWatchdog=Mh;static ContextWatchdog=Lh;_showLicenseError(e,t){setTimeout(()=>{if(e==`invalid`)throw new w(`invalid-license-key`);if(e==`expired`)throw new w(`license-key-expired`);if(e==`domainLimit`)throw new w(`license-key-domain-limit`);if(e==`pluginNotAllowed`){let e=t.replace(/(Editing|UI)$/,``);throw new w(`license-key-plugin-not-allowed`,null,{pluginName:this.plugins.has(e)?e:t})}if(e==`featureNotAllowed`)throw new w(`license-key-feature-not-allowed`,null,{featureName:t});if(e==`evaluationLimit`)throw new w(`license-key-evaluation-limit`);if(e==`trialLimit`)throw new w(`license-key-trial-limit`);if(e==`developmentLimit`)throw new w(`license-key-development-limit`);if(e==`usageLimit`)throw new w(`license-key-usage-limit`);if(e==`distributionChannel`)throw new w(`license-key-invalid-distribution-channel`)},0),this._showLicenseError=()=>{}}async _sendUsageRequest(e,t){let n=new Headers({"Content-Type":`application/json`}),r=await fetch(new URL(e),{method:`POST`,headers:n,body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Response: ${r.status}`);return r.json()}};function ig(e){let t=Jh(e);function n(e,n){if(Je(t,e)!==void 0)throw new w(`editor-usage-data-path-already-set`,{path:e});On(t,e,n)}return e.fire(`collectUsageData`,{setUsageData:n}),t}function ag(e){if(!An(e.updateSourceElement))throw new w(`attachtoform-missing-elementapi-interface`,e);let t=e.sourceElement;if(og(t)&&t.form){let n,r=t.form,i=()=>e.updateSourceElement();An(r.submit)&&(n=r.submit,r.submit=()=>{i(),n.apply(r)}),r.addEventListener(`submit`,i),e.on(`destroy`,()=>{r.removeEventListener(`submit`,i),n&&(r.submit=n)})}}function og(e){return!!e&&e.tagName.toLowerCase()===`textarea`}function sg(e){class t extends e{sourceElement;updateSourceElement(e){if(!this.sourceElement)throw new w(`editor-missing-sourceelement`,this);let t=this.config.get(`updateSourceElementOnDestroy`),n=this.sourceElement instanceof HTMLTextAreaElement;if(!t&&!n){Ur(this.sourceElement,``);return}let r=typeof e==`string`?e:this.data.get();Ur(this.sourceElement,r)}}return t}function cg(e,t){if(t.ckeditorInstance)throw new w(`editor-source-element-already-used`,e);t.ckeditorInstance=e,e.once(`destroy`,()=>{delete t.ckeditorInstance})}const lg=[[`description`,`$description`],[`title`,`$title`]];function ug(e){let t=e.config.get(`roots`);for(let[n,r]of Object.entries(t)){let t=null;for(let[e,n]of lg)r[e]==null||r.modelAttributes&&n in r.modelAttributes||(t||={...r.modelAttributes},t[n]=r[e]);t&&e.config.set(`roots.${n}.modelAttributes`,t)}let n=e.config.get(`roots`),r=!1;for(let t of Object.values(n))for(let n of Object.keys(t.modelAttributes||{}))e.registerRootAttribute(n),r=!0;r&&e.data.once(`init`,()=>{e.model.enqueueChange({isUndoable:!1},t=>{for(let[r,i]of Object.entries(n)){let n=e.model.document.getRoot(r);if(n)for(let[e,r]of Object.entries(i.modelAttributes||{}))r!==null&&t.setAttribute(e,r,n)}})})}function dg(e,t,n=`main`,r=!1){let i=t.get(`root`),a=t.get(`roots`)||Object.create(null);if(!xn(a))throw new w(`editor-create-roots-not-plain-object`,null);if(i){if(!n)throw new w(`editor-create-multi-root-with-main`,null);if(n in a)throw new w(`editor-create-roots-with-main`,null)}n&&!a[n]&&(a[n]=i||Object.create(null));let o=mg(e),s=gg(t,o,n),c=Array.from(new Set([...o?Object.keys(e):[],...Object.keys(a),...Object.keys(s)]));for(let n of c){let i=a[n]||Object.create(null),c=o?e[n]:e;if(!r&&xg(c)){if(i.element)throw new w(`editor-create-root-element-overspecified`,null);i.element=c}if(r&&xg(i.element)&&(T(`editor-create-root-element-not-supported`),i.element=void 0),i.initialData===void 0)if(s[n]===void 0){let e=xg(i.element)?i.element:void 0;i.initialData=hg(c||e||r&&t.get(`attachTo`)||``)}else if(c&&!xg(c))throw new w(`editor-create-initial-data-overspecified`,null);else i.initialData=s[n];else if(c&&!xg(c))throw new w(`editor-create-root-initial-data-overspecified`,null);else if(s[n]!==void 0)throw new w(`editor-create-legacy-initial-data-overspecified`,null);i.placeholder??=_g(t,`placeholder`,n),i.label??=_g(t,`label`,n),i.modelElement||=`$root`,i.element=vg(i.element),a[n]=i}if(r&&xg(e)){if(t.get(`attachTo`))throw new w(`editor-create-attachto-overspecified`,null);t.set(`attachTo`,e)}if(!r&&t.get(`attachTo`))throw new w(`editor-create-attachto-ignored`,null);t.set(`roots`,a)}function fg(e,t){return typeof e==`string`||xg(e)||t&&Object.keys(t).length?{sourceElementOrData:e,editorConfig:t}:{sourceElementOrData:``,editorConfig:e}}function pg(e,t){return t&&Object.keys(t).length||Object.keys(e).length==0||Object.values(e).every(e=>typeof e==`string`||xg(e))?{sourceElementsOrData:e,editorConfig:t}:{sourceElementsOrData:{},editorConfig:e}}function mg(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&!xg(e)}function hg(e){return xg(e)?Er(e):e}function gg(e,t,n){return t||!n?e.get(`initialData`)||Object.create(null):{[n]:e.get(`initialData`)}}function _g(e,t,n){let r=e.get(t);if(r)return typeof r==`string`?r:r[n]}function vg(e){if(e==null)return;if(xg(e))return bg(e.tagName),e;if(typeof e==`string`)return bg(e),{name:e};let{name:t,classes:n,styles:r,attributes:i}=e;t!==void 0&&bg(t);let{class:a,style:o,...s}=i||{},c=!!i&&`class`in i,l=!!r&&Object.keys(r).length>0,u=l&&!!o;u&&T(`editor-root-element-styles-overspecified`);let d=[...yg(n),...yg(a)],f={...s};return c&&(f.class=``),u?f.style=``:o&&(f.style=o),{...t!==void 0&&{name:t},...d.length&&{classes:d},...l&&{styles:r},...Object.keys(f).length&&{attributes:f}}}function yg(e){return e?A(e).flatMap(e=>e.split(/\s+/)).filter(Boolean):[]}function bg(e){if(typeof e!=`string`||!/^[A-Za-z][A-Za-z0-9_-]*$/.test(e))throw new w(`editor-wrong-element-name`,null,{name:e});if([`textarea`,`input`].includes(e.toLowerCase()))throw new w(`editor-wrong-element`,null)}function xg(e){return jn(e)}function Sg(e){let t=e.model.schema,n=e.model.document;for(let e of n.roots)if(!(e===n.graveyard||!e.isAttached())&&!t.isLimit(e))throw new w(`editor-root-element-is-not-limit`,null,{rootName:e.rootName,elementName:e.name})}function Cg(e,t){let n=e.model.document.getRoot(t);return e.model.schema.checkChild(n,`$block`)}var wg=class extends ho{_actions;static get pluginName(){return`PendingActions`}static get isOfficialPlugin(){return!0}init(){this.set(`hasAny`,!1),this._actions=new Fi({idProperty:`_id`}),this._actions.delegate(`add`,`remove`).to(this)}add(e){if(typeof e!=`string`)throw new w(`pendingactions-add-invalid-message`,this);let t=new(D());return t.set(`message`,e),this._actions.add(t),this.hasAny=!0,t}remove(e){this._actions.remove(e),this.hasAny=!!this._actions.length}get first(){return this._actions.get(0)}[Symbol.iterator](){return this._actions[Symbol.iterator]()}},Tg=``,Eg=``,Dg=``,Og=``,kg=``,Ag=``,jg=``,Mg=``,Ng=``,Pg=``,Fg=``,Ig=``,Lg=``,Rg=``,zg=``,Bg=``,Vg=``,Hg=``,Ug=``,Wg=``,Gg=``,Kg=``,qg=``,Jg=``,Yg=``,Xg=``,Zg=``,Qg=``,$g=``,e_=``,t_=``,n_=``,r_=``,i_=``,a_=``,Jee=``,o_=``,s_=``,c_=``,Yee=``,l_=``,Xee=``,Zee=``,Qee=``,u_=``,$ee=``,d_=``,f_=``,ete=``,p_=``,m_=``,tte=``,h_=``,g_=``,nte=``,rte=``,ite=``,ate=``,ote=``,ste=``,__=``,v_=``,y_=``,cte=``,b_=``,lte=``,x_=``,S_=``,ute=``,dte=``,fte=``,pte=``,mte=``,hte=``,gte=``,C_=``,w_=``,T_=``,E_=``,D_=``,_te=``,O_=``,k_=``,vte=``,yte=``,A_=``,j_=``,M_=``,N_=``,P_=``,F_=``,I_=``,L_=``,R_=``,z_=``,B_=``,V_=``,H_=``,U_=``,W_=``,G_=``,K_=``,q_=``,J_=``,Y_=``,X_=``,Z_=``,Q_=``,$_=``,ev=``,tv=``,nv=``,rv=``,iv=``,av=``,ov=``,sv=`١٢٣`,cv=``,lv=``,bte=``,xte=``,uv=``,dv=``,fv=``,pv=``,mv=``,hv=``,gv=``,_v=``,vv=``,yv=``,bv=``,xv=``,Sv=``,Cv=``,wv=``,Tv=``,Ev=``,Dv=``,Ov=``,kv=``,Av=``,Ste=``,Cte=``,jv=``,Mv=``,wte=``,Nv=``,Pv=` - - - - - - -`,Fv=``,Iv=``,Lv=``,Rv=``,zv=``,Bv=``,Vv=``,Hv=``,Uv=` - - - - - - - -`,Wv=``,Gv=``,Kv=` -`,qv=``,Jv=``,Yv=``,Xv=``,Zv=``,Qv=``,$v=``,ey=``,ty=``,ny=``,ry=``,iy=` -`,ay=``,oy=``,sy=``,cy=``,ly=``,uy=``,dy=``,fy=``,py=``,my=``,hy=``,gy=``,_y=``,vy=``,Tte=``,yy=``,by=``,xy=``,Sy=``,Ete=` - - - - - -`,Dte=``,Cy=``,wy=``,Ote=``,kte=``,Ty=``,Ate=``,jte=``,Ey=``,Mte=``,Nte=``,Pte=``,Dy=``,Oy=``,ky=``,Ay=``,jy=``,My=``,Ny=``,Py=``,Fy=` - - -`,Iy=``,Ly=class e extends P{static presentationalAttributeNames=`alignment-baseline.baseline-shift.clip-path.clip-rule.color.color-interpolation.color-interpolation-filters.color-rendering.cursor.direction.display.dominant-baseline.fill.fill-opacity.fill-rule.filter.flood-color.flood-opacity.font-family.font-size.font-size-adjust.font-stretch.font-style.font-variant.font-weight.image-rendering.letter-spacing.lighting-color.marker-end.marker-mid.marker-start.mask.opacity.overflow.paint-order.pointer-events.shape-rendering.stop-color.stop-opacity.stroke.stroke-dasharray.stroke-dashoffset.stroke-linecap.stroke-linejoin.stroke-miterlimit.stroke-opacity.stroke-width.text-anchor.text-decoration.text-overflow.text-rendering.transform.unicode-bidi.vector-effect.visibility.white-space.word-spacing.writing-mode`.split(`.`);constructor(){super();let e=this.bindTemplate;this.set(`content`,``),this.set(`viewBox`,`0 0 20 20`),this.set(`fillColor`,``),this.set(`isColorInherited`,!0),this.set(`isVisible`,!0),this.setTemplate({tag:`svg`,ns:`http://www.w3.org/2000/svg`,attributes:{class:[`ck`,`ck-icon`,e.if(`isVisible`,`ck-hidden`,e=>!e),`ck-reset_all-excluded`,e.if(`isColorInherited`,`ck-icon_inherit-color`)],viewBox:e.to(`viewBox`),"aria-hidden":!0}})}render(){super.render(),this._updateXMLContent(),this._colorFillPaths(),this.on(`change:content`,()=>{this._updateXMLContent(),this._colorFillPaths()}),this.on(`change:fillColor`,()=>{this._colorFillPaths()})}_updateXMLContent(){if(this.content){let t=new DOMParser().parseFromString(this.content.trim(),`image/svg+xml`).querySelector(`svg`);if(!t)throw new w(`ui-iconview-invalid-svg`,this);let n=t.getAttribute(`viewBox`);n&&(this.viewBox=n);for(let{name:n,value:r}of Array.from(t.attributes))e.presentationalAttributeNames.includes(n)&&this.element.setAttribute(n,r);for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);for(;t.childNodes.length>0;)this.element.appendChild(t.childNodes[0])}}_colorFillPaths(){this.fillColor&&this.element.querySelectorAll(`.ck-icon__fill`).forEach(e=>{e.style.fill=this.fillColor})}},Ry=class extends P{constructor(){super(),this.set({style:void 0,text:void 0,id:void 0});let e=this.bindTemplate;this.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-button__label`],style:e.to(`style`),id:e.to(`id`)},children:[{text:e.to(`text`)}]})}},H=class extends P{children;labelView;iconView;keystrokeView;_focusDelayed=null;constructor(e,t=new Ry){super(e);let n=this.bindTemplate,r=he();this.set(`_ariaPressed`,!1),this.set(`_ariaChecked`,!1),this.set(`ariaLabel`,void 0),this.set(`ariaLabelledBy`,`ck-editor__aria-label_${r}`),this.set(`class`,void 0),this.set(`labelStyle`,void 0),this.set(`icon`,void 0),this.set(`isEnabled`,!0),this.set(`isOn`,!1),this.set(`isVisible`,!0),this.set(`isToggleable`,!1),this.set(`keystroke`,void 0),this.set(`label`,void 0),this.set(`role`,void 0),this.set(`tabindex`,-1),this.set(`tooltip`,!1),this.set(`tooltipPosition`,`s`),this.set(`type`,`button`),this.set(`withText`,!1),this.set(`withKeystroke`,!1),this.children=this.createCollection(),this.labelView=this._setupLabelView(t),this.iconView=new Ly,this.iconView.extendTemplate({attributes:{class:`ck-button__icon`}}),this.iconView.bind(`content`).to(this,`icon`),this.keystrokeView=this._createKeystrokeView(),this.bind(`_tooltipString`).to(this,`tooltip`,this,`label`,this,`keystroke`,this._getTooltipString.bind(this));let i={tag:`button`,attributes:{class:[`ck`,`ck-button`,n.to(`class`),n.if(`isEnabled`,`ck-disabled`,e=>!e),n.if(`isVisible`,`ck-hidden`,e=>!e),n.to(`isOn`,e=>e?`ck-on`:`ck-off`),n.if(`withText`,`ck-button_with-text`),n.if(`withKeystroke`,`ck-button_with-keystroke`)],role:n.to(`role`),type:n.to(`type`,e=>e||`button`),tabindex:n.to(`tabindex`),"aria-checked":n.to(`_ariaChecked`),"aria-pressed":n.to(`_ariaPressed`),"aria-label":n.to(`ariaLabel`),"aria-labelledby":n.to(`ariaLabelledBy`),"aria-disabled":n.if(`isEnabled`,!0,e=>!e),"data-cke-tooltip-text":n.to(`_tooltipString`),"data-cke-tooltip-position":n.to(`tooltipPosition`)},children:this.children,on:{click:n.to(e=>{this.isEnabled?this.fire(`execute`):e.preventDefault()})}};this.bind(`_ariaPressed`).to(this,`isOn`,this,`isToggleable`,this,`role`,(e,t,n)=>!t||zy(n)?!1:String(!!e)),this.bind(`_ariaChecked`).to(this,`isOn`,this,`isToggleable`,this,`role`,(e,t,n)=>!t||!zy(n)?!1:String(!!e)),p.isSafari&&(this._focusDelayed||=Yi(()=>this.focus(),0),i.on.mousedown=n.to(()=>{this._focusDelayed()}),i.on.mouseup=n.to(()=>{this._focusDelayed.cancel()})),this.setTemplate(i)}render(){super.render(),this.icon&&this.children.add(this.iconView),this.on(`change:icon`,(e,t,n,r)=>{n&&!r?this.children.add(this.iconView,0):!n&&r&&this.children.remove(this.iconView)}),this.children.add(this.labelView),this.withKeystroke&&this.keystroke&&this.children.add(this.keystrokeView)}focus(){this.element.focus()}destroy(){this._focusDelayed&&this._focusDelayed.cancel(),super.destroy()}_setupLabelView(e){return e.bind(`text`,`style`,`id`).to(this,`label`,`labelStyle`,`ariaLabelledBy`),e}_createKeystrokeView(){let e=new P;return e.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-button__keystroke`]},children:[{text:this.bindTemplate.to(`keystroke`,e=>bi(e))}]}),e}_getTooltipString(e,t,n){return e?typeof e==`string`?e:(n&&=bi(n),e instanceof Function?e(t,n):`${t}${n?` (${n})`:``}`):``}};function zy(e){switch(e){case`radio`:case`checkbox`:case`option`:case`switch`:case`menuitemcheckbox`:case`menuitemradio`:return!0;default:return!1}}var By=class extends P{children;iconView;constructor(e,t={}){super(e);let n=this.bindTemplate;this.set(`label`,t.label||``),this.set(`class`,t.class||null),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-form__header`,n.to(`class`)]},children:this.children}),t.icon&&(this.iconView=new Ly,this.iconView.content=t.icon,this.children.add(this.iconView));let r=new P(e);r.setTemplate({tag:`h2`,attributes:{class:[`ck`,`ck-form__header__label`],role:`presentation`},children:[{text:n.to(`label`)}]}),this.children.add(r)}};const Vy=E();var Hy=class extends Vy{focusables;focusTracker;keystrokeHandler;actions;constructor(e){if(super(),this.focusables=e.focusables,this.focusTracker=e.focusTracker,this.keystrokeHandler=e.keystrokeHandler,this.actions=e.actions,e.actions&&e.keystrokeHandler)for(let t in e.actions){let n=e.actions[t];typeof n==`string`&&(n=[n]);for(let r of n)e.keystrokeHandler.set(r,(e,n)=>{this[t](),n()},e.keystrokeHandlerOptions)}this.on(`forwardCycle`,()=>this.focusFirst(),{priority:`low`}),this.on(`backwardCycle`,()=>this.focusLast(),{priority:`low`})}get first(){return this.focusables.find(Uy)||null}get last(){return this.focusables.filter(Uy).slice(-1)[0]||null}get next(){return this._getDomFocusableItem(1)}get previous(){return this._getDomFocusableItem(-1)}get current(){let e=null;return this.focusTracker.focusedElement===null?null:(this.focusables.find((t,n)=>{let r=t.element===this.focusTracker.focusedElement;return r&&(e=n),r}),e)}focusFirst(){this._focus(this.first,1)}focusLast(){this._focus(this.last,-1)}focusNext(){let e=this.next;if(e&&this.focusables.getIndex(e)===this.current){this.fire(`forwardCycle`);return}e===this.first?this.fire(`forwardCycle`):this._focus(e,1)}focusPrevious(){let e=this.previous;if(e&&this.focusables.getIndex(e)===this.current){this.fire(`backwardCycle`);return}e===this.last?this.fire(`backwardCycle`):this._focus(e,-1)}chain(e){let t=()=>this.current===null?null:this.focusables.get(this.current);this.listenTo(e,`forwardCycle`,e=>{let n=t();this.focusNext(),n!==t()&&e.stop()},{priority:`low`}),this.listenTo(e,`backwardCycle`,e=>{let n=t();this.focusPrevious(),n!==t()&&e.stop()},{priority:`low`})}unchain(e){this.stopListening(e)}_focus(e,t){e&&this.focusTracker.focusedElement!==e.element&&e.focus(t)}_getDomFocusableItem(e){let t=this.focusables.length;if(!t)return null;let n=this.current;if(n===null)return this[e===1?`first`:`last`];let r=this.focusables.get(n),i=(n+t+e)%t;do{let n=this.focusables.get(i);if(Uy(n)){r=n;break}i=(i+t+e)%t}while(i!==n);return r}};function Uy(e){return Wy(e)&&Yr(e.element)}function Wy(e){return`focus`in e&&typeof e.focus==`function`}function Gy(e){return Wy(e)&&`focusCycler`in e&&e.focusCycler instanceof Hy}var Ky=class extends P{children;keystrokes;focusCycler;_focusTracker;_focusables;constructor(e){super(e),this.children=this.createCollection(),this.keystrokes=new N,this._focusTracker=new M,this._focusables=new pa,this.focusCycler=new Hy({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-dialog__actions`]},children:this.children})}render(){super.render(),this.keystrokes.listenTo(this.element)}setButtons(e){for(let t of e){let e=new H(this.locale),n;for(n in e.on(`execute`,()=>t.onExecute()),t.onCreate&&t.onCreate(e),t)n!=`onExecute`&&n!=`onCreate`&&e.set(n,t[n]);this.children.add(e)}this._updateFocusCyclableItems()}focus(e){e===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}_updateFocusCyclableItems(){Array.from(this.children).forEach(e=>{this._focusables.add(e),this._focusTracker.add(e.element)})}},qy=class extends P{children;constructor(e){super(e),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-dialog__content`]},children:this.children})}reset(){for(;this.children.length;)this.children.remove(0)}};const Jy={SCREEN_CENTER:`screen-center`,EDITOR_CENTER:`editor-center`,EDITOR_TOP_SIDE:`editor-top-side`,EDITOR_TOP_CENTER:`editor-top-center`,EDITOR_BOTTOM_CENTER:`editor-bottom-center`,EDITOR_ABOVE_CENTER:`editor-above-center`,EDITOR_BELOW_CENTER:`editor-below-center`},Yy=Wr(`px`),Xy=Za(P);var Zy=class e extends Xy{parts;headerView;closeButtonView;actionsView;static defaultOffset=15;contentView;keystrokes;focusTracker;wasMoved=!1;_getDomRootElement;_getViewportOffset;_focusables;_focusCycler;constructor(e,{getDomRootElement:t,getViewportOffset:n,keystrokeHandlerOptions:r}){super(e);let i=this.bindTemplate,a=e.t;this.set(`className`,``),this.set(`ariaLabel`,a(`Editor dialog`)),this.set(`isModal`,!1),this.set(`position`,Jy.SCREEN_CENTER),this.set(`_isVisible`,!1),this.set(`_isTransparent`,!1),this.set(`_top`,0),this.set(`_left`,0),this._getDomRootElement=t,this._getViewportOffset=n,this.decorate(`moveTo`),this.parts=this.createCollection(),this.keystrokes=new N,this.focusTracker=new M,this._focusables=new pa,this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`},keystrokeHandlerOptions:r}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-dialog-overlay`,i.if(`isModal`,`ck-dialog-overlay__transparent`,e=>!e),i.if(`_isVisible`,`ck-hidden`,e=>!e)],tabindex:`-1`},children:[{tag:`div`,attributes:{tabindex:`-1`,class:[`ck`,`ck-dialog`,i.if(`isModal`,`ck-dialog_modal`),i.to(`className`)],role:`dialog`,"aria-label":i.to(`ariaLabel`),style:{top:i.to(`_top`,e=>Yy(e)),left:i.to(`_left`,e=>Yy(e)),visibility:i.if(`_isTransparent`,`hidden`)}},children:this.parts}]})}render(){super.render(),this.keystrokes.set(`Esc`,(e,t)=>{e.defaultPrevented||(this.fire(`close`,{source:`escKeyPress`}),t())}),this.on(`drag`,(e,{deltaX:t,deltaY:n})=>{this.wasMoved=!0,this.moveBy(t,n)}),this.listenTo(u.window,`resize`,()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.listenTo(u.document,`scroll`,()=>{this._isVisible&&!this.wasMoved&&this.updatePosition()}),this.on(`change:_isVisible`,(e,t,n)=>{n&&(this._isTransparent=!0,setTimeout(()=>{this.updatePosition(),this._isTransparent=!1,this.focus()},10))}),this.keystrokes.listenTo(this.element)}get dragHandleElement(){return this.headerView&&!this.isModal?this.headerView.element:null}setupParts({icon:e,title:t,hasCloseButton:n=!0,content:r,actionButtons:i}){t&&(this.headerView=new By(this.locale,{icon:e}),n&&(this.closeButtonView=this._createCloseButton(),this.headerView.children.add(this.closeButtonView)),this.headerView.label=t,this.ariaLabel=t,this.parts.add(this.headerView,0)),r&&(r instanceof P&&(r=[r]),this.contentView=new qy(this.locale),this.contentView.children.addMany(r),this.parts.add(this.contentView)),i&&(this.actionsView=new Ky(this.locale),this.actionsView.setButtons(i),this.parts.add(this.actionsView)),this._updateFocusCyclableItems()}focus(){this._focusCycler.focusFirst()}moveTo(e,t){let n=this._getViewportRect(),r=this._getDialogRect();e+r.width>n.right&&(e=n.right-r.width),e{this._focusables.add(e),this.focusTracker.add(e.element),Gy(e)&&this._focusCycler.chain(e.focusCycler)})}_createCloseButton(){let e=new H(this.locale),t=this.locale.t;return e.set({label:t(`Close`),tooltip:!0,icon:s_}),e.on(`execute`,()=>this.fire(`close`,{source:`closeButton`})),e}},Qy=class e extends F{view;static _visibleDialogPlugin;_onHide;static get pluginName(){return`Dialog`}static get isOfficialPlugin(){return!0}constructor(e){super(e);let t=e.t;this._initShowHideListeners(),this._initFocusToggler(),this._initMultiRootIntegration(),this.set({id:null,isOpen:!1}),e.accessibility.addKeystrokeInfos({categoryId:`navigation`,keystrokes:[{label:t(`Move focus in and out of an active dialog window`),keystroke:`Ctrl+F6`,mayRequireFn:!0}]})}destroy(){super.destroy(),e._visibleDialogPlugin===this&&this._unlockBodyScroll()}_initShowHideListeners(){this.on(`show`,(e,t)=>{this._show(t)}),this.on(`show`,(e,t)=>{t.onShow&&t.onShow(this)},{priority:`low`}),this.on(`hide`,()=>{e._visibleDialogPlugin&&e._visibleDialogPlugin._hide()}),this.on(`hide`,()=>{this._onHide&&=(this._onHide(this),void 0)},{priority:`low`})}_initFocusToggler(){let e=this.editor;e.keystrokes.set(`Ctrl+F6`,(t,n)=>{!this.isOpen||this.view.isModal||(this.view.focusTracker.isFocused?e.editing.view.focus():this.view.focus(),n())})}_initMultiRootIntegration(){let e=this.editor.model;e.document.on(`change:data`,()=>{if(!this.view)return;let t=e.document.differ.getChangedRoots();for(let e of t)e.state&&this.view.updatePosition()})}show(e){this.hide(),this.fire(`show:${e.id}`,e)}_show({id:t,icon:n,title:r,hasCloseButton:i=!0,content:a,actionButtons:o,className:s,isModal:c,position:l,onHide:u,getRootName:d,keystrokeHandlerOptions:f}){let p=this.editor;this.view=new Zy(p.locale,{getDomRootElement:()=>{let e=d?.()??this.editor.model.document.selection.anchor.root.rootName;return!e||!p.editing.view.domRoots.has(e)?null:p.editing.view.getDomRoot(e)??null},getViewportOffset:()=>p.ui.viewportOffset,keystrokeHandlerOptions:f});let m=this.view;m.on(`close`,()=>{this.hide()}),p.ui.view.body.add(m),p.keystrokes.listenTo(m.element),l||=c?Jy.SCREEN_CENTER:Jy.EDITOR_CENTER,c&&this._lockBodyScroll(),m.set({position:l,_isVisible:!0,className:s,isModal:c}),m.setupParts({icon:n,title:r,hasCloseButton:i,content:a,actionButtons:o}),this.id=t,u&&(this._onHide=u),this.isOpen=!0,e._visibleDialogPlugin=this}hide(){e._visibleDialogPlugin&&e._visibleDialogPlugin.fire(`hide:${e._visibleDialogPlugin.id}`)}_hide(){if(!this.view)return;let t=this.editor,n=this.view;n.isModal&&this._unlockBodyScroll(),n.contentView&&n.contentView.reset(),t.ui.view.body.remove(n),t.ui.focusTracker.remove(n.element),t.keystrokes.stopListening(n.element),n.destroy(),t.editing.view.focus(),this.id=null,this.isOpen=!1,e._visibleDialogPlugin=null}_lockBodyScroll(){document.documentElement.classList.add(`ck-dialog-scroll-locked`)}_unlockBodyScroll(){document.documentElement.classList.remove(`ck-dialog-scroll-locked`)}},$y=class extends H{_checkIconHolderView=new eb;constructor(e,t=new Ry){super(e,t),this.set({hasCheckSpace:!1,_hasCheck:this.isToggleable});let n=this.bindTemplate;this.extendTemplate({attributes:{class:[`ck-list-item-button`,n.if(`isToggleable`,`ck-list-item-button_toggleable`)]}}),this.bind(`_hasCheck`).to(this,`hasCheckSpace`,this,`isToggleable`,(e,t)=>e||t)}render(){super.render(),this._hasCheck&&this.children.add(this._checkIconHolderView,0),this._watchCheckIconHolderMount()}_watchCheckIconHolderMount(){this._checkIconHolderView.bind(`isOn`).to(this,`isOn`,e=>this.isToggleable&&e),this.on(`change:_hasCheck`,(e,t,n)=>{let{children:r,_checkIconHolderView:i}=this;n?r.add(i,0):r.remove(i)})}},eb=class extends P{children;_checkIconView=this._createCheckIconView();constructor(){super();let e=this.bindTemplate;this.children=this.createCollection(),this.set(`isOn`,!1),this.setTemplate({tag:`span`,children:this.children,attributes:{class:[`ck`,`ck-list-item-button__check-holder`,e.to(`isOn`,e=>e?`ck-on`:`ck-off`)]}})}render(){super.render(),this.isOn&&this.children.add(this._checkIconView,0),this._watchCheckIconMount()}_watchCheckIconMount(){this.on(`change:isOn`,(e,t,n)=>{let{children:r,_checkIconView:i}=this;n&&!r.has(i)?r.add(i):!n&&r.has(i)&&r.remove(i)})}_createCheckIconView(){let e=new Ly;return e.content=l_,e.extendTemplate({attributes:{class:`ck-list-item-button__check-icon`}}),e}},U=class extends $y{constructor(e){super(e),this.set({withText:!0,withKeystroke:!0,tooltip:!1,role:`menuitem`}),this.extendTemplate({attributes:{class:[`ck-menu-bar__menu__item__button`]}})}},tb=class extends F{contentView=null;static get requires(){return[Qy]}static get pluginName(){return`AccessibilityHelp`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t;e.ui.componentFactory.add(`accessibilityHelp`,()=>{let e=this._createButton(H);return e.set({tooltip:!0,withText:!1,label:t(`Accessibility help`)}),e}),e.ui.componentFactory.add(`menuBar:accessibilityHelp`,()=>{let e=this._createButton(U);return e.label=t(`Accessibility`),e}),e.keystrokes.set(`Alt+0`,(e,t)=>{this._toggleDialog(),t()}),this._setupRootLabels()}_createButton(e){let t=this.editor,n=t.plugins.get(`Dialog`),r=t.locale,i=new e(r);return i.set({keystroke:`Alt+0`,icon:Tg,isToggleable:!0}),i.on(`execute`,()=>this._toggleDialog()),i.bind(`isOn`).to(n,`id`,e=>e===`accessibilityHelp`),i}_setupRootLabels(){let e=this.editor,t=e.editing.view,n=e.t;e.ui.on(`ready`,()=>{t.change(e=>{for(let n of t.document.roots)r(e,n)}),e.on(`addRoot`,(n,i)=>{let a=e.editing.view.document.getRoot(i.rootName);t.change(e=>r(e,a))},{priority:`low`})});function r(e,t){let r=[t.getAttribute(`aria-label`),n(`Press %0 for help.`,[bi(`Alt+0`)])].filter(e=>e).join(`. `);e.setAttribute(`aria-label`,r,t)}}_toggleDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.locale.t;this.contentView||=new to(e.locale,e.accessibility.keystrokeInfos),t.id===`accessibilityHelp`?t.hide():t.show({id:`accessibilityHelp`,className:`ck-accessibility-help-dialog`,title:n(`Accessibility help`),icon:Tg,hasCloseButton:!0,content:this.contentView})}},nb=class e extends pa{locale;_bodyCollectionContainer;static _bodyWrapper;constructor(e,t=[]){super(t),this.locale=e}get bodyCollectionContainer(){return this._bodyCollectionContainer}attachToDom(){this._bodyCollectionContainer=new ga({tag:`div`,attributes:{class:[`ck`,`ck-reset_all`,`ck-body`,`ck-rounded-corners`],dir:this.locale.uiLanguageDirection,role:`application`},children:this}).render(),(!e._bodyWrapper||!e._bodyWrapper.isConnected)&&(e._bodyWrapper=mr(document,`div`,{class:`ck-body-wrapper`}),document.body.appendChild(e._bodyWrapper)),e._bodyWrapper.appendChild(this._bodyCollectionContainer)}detachFromDom(){super.destroy(),this._bodyCollectionContainer&&this._bodyCollectionContainer.remove(),e._bodyWrapper&&!e._bodyWrapper.childElementCount&&(e._bodyWrapper.remove(),delete e._bodyWrapper)}};const rb=Wr(`px`),ib={top:-99999,left:-99999,name:`arrowless`,config:{withArrow:!1}};var ab=class e extends P{content;_pinWhenIsVisibleCallback;_resizeObserver;constructor(e){super(e);let t=this.bindTemplate;this.set(`top`,0),this.set(`left`,0),this.set(`position`,`arrow_nw`),this.set(`isVisible`,!1),this.set(`withArrow`,!0),this.set(`class`,void 0),this._pinWhenIsVisibleCallback=null,this._resizeObserver=null,this.content=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-balloon-panel`,t.to(`position`,e=>`ck-balloon-panel_${e}`),t.if(`isVisible`,`ck-balloon-panel_visible`),t.if(`withArrow`,`ck-balloon-panel_with-arrow`),t.to(`class`)],style:{top:t.to(`top`,rb),left:t.to(`left`,rb)}},children:this.content})}destroy(){this.hide(),super.destroy()}show(){this.isVisible=!0}hide(){this.isVisible=!1}attachTo(t){let n=ob(t.target);if(n&&!Yr(n))return!1;this.show();let r=e.defaultPositions,i=Object.assign({},{element:this.element,positions:[r.southArrowNorth,r.southArrowNorthMiddleWest,r.southArrowNorthMiddleEast,r.southArrowNorthWest,r.southArrowNorthEast,r.northArrowSouth,r.northArrowSouthMiddleWest,r.northArrowSouthMiddleEast,r.northArrowSouthWest,r.northArrowSouthEast,r.viewportStickyNorth],limiter:u.document.body,fitInViewport:!0},t),a=e._getOptimalPosition(i)||ib,o=parseInt(a.left),s=parseInt(a.top),c=a.name,{withArrow:l=!0}=a.config||{};return this.top=s,this.left=o,this.position=c,this.withArrow=l,!0}pin(e){this.unpin(),this._startPinning(e)&&(this._pinWhenIsVisibleCallback=()=>{this.isVisible?this._startPinning(e):this._stopPinning()},this.listenTo(this,`change:isVisible`,this._pinWhenIsVisibleCallback))}unpin(){this._pinWhenIsVisibleCallback&&(this._stopPinning(),this.stopListening(this,`change:isVisible`,this._pinWhenIsVisibleCallback),this._pinWhenIsVisibleCallback=null,this.hide())}_startPinning(e){if(!this.attachTo(e))return!1;let t=ob(e.target),n=e.limiter?ob(e.limiter):u.document.body;if(this.listenTo(u.document,`scroll`,(r,i)=>{let a=i.target,o=t&&a.contains(t),s=n&&a.contains(n);(o||s||!t||!n)&&this.attachTo(e)},{useCapture:!0}),this.listenTo(u.window,`resize`,()=>{this.attachTo(e)}),!this._resizeObserver&&(t&&jr(t)&&(t=t.parentElement),t)){let e=()=>{Yr(t)||this.unpin()};this._resizeObserver=new Hr(t,e)}return!0}_stopPinning(){this.stopListening(u.document,`scroll`),this.stopListening(u.window,`resize`),this._resizeObserver&&=(this._resizeObserver.destroy(),null)}static generatePositions(t={}){let{sideOffset:n=e.arrowSideOffset,heightOffset:r=e.arrowHeightOffset,stickyVerticalOffset:i=e.stickyVerticalOffset,config:a}=t;return{northWestArrowSouthWest:(e,t)=>({top:o(e,t),left:e.left-n,name:`arrow_sw`,...a&&{config:a}}),northWestArrowSouthMiddleWest:(e,t)=>({top:o(e,t),left:e.left-t.width*.25-n,name:`arrow_smw`,...a&&{config:a}}),northWestArrowSouth:(e,t)=>({top:o(e,t),left:e.left-t.width/2,name:`arrow_s`,...a&&{config:a}}),northWestArrowSouthMiddleEast:(e,t)=>({top:o(e,t),left:e.left-t.width*.75+n,name:`arrow_sme`,...a&&{config:a}}),northWestArrowSouthEast:(e,t)=>({top:o(e,t),left:e.left-t.width+n,name:`arrow_se`,...a&&{config:a}}),northArrowSouthWest:(e,t)=>({top:o(e,t),left:e.left+e.width/2-n,name:`arrow_sw`,...a&&{config:a}}),northArrowSouthMiddleWest:(e,t)=>({top:o(e,t),left:e.left+e.width/2-t.width*.25-n,name:`arrow_smw`,...a&&{config:a}}),northArrowSouth:(e,t)=>({top:o(e,t),left:e.left+e.width/2-t.width/2,name:`arrow_s`,...a&&{config:a}}),northArrowSouthMiddleEast:(e,t)=>({top:o(e,t),left:e.left+e.width/2-t.width*.75+n,name:`arrow_sme`,...a&&{config:a}}),northArrowSouthEast:(e,t)=>({top:o(e,t),left:e.left+e.width/2-t.width+n,name:`arrow_se`,...a&&{config:a}}),northEastArrowSouthWest:(e,t)=>({top:o(e,t),left:e.right-n,name:`arrow_sw`,...a&&{config:a}}),northEastArrowSouthMiddleWest:(e,t)=>({top:o(e,t),left:e.right-t.width*.25-n,name:`arrow_smw`,...a&&{config:a}}),northEastArrowSouth:(e,t)=>({top:o(e,t),left:e.right-t.width/2,name:`arrow_s`,...a&&{config:a}}),northEastArrowSouthMiddleEast:(e,t)=>({top:o(e,t),left:e.right-t.width*.75+n,name:`arrow_sme`,...a&&{config:a}}),northEastArrowSouthEast:(e,t)=>({top:o(e,t),left:e.right-t.width+n,name:`arrow_se`,...a&&{config:a}}),southWestArrowNorthWest:e=>({top:s(e),left:e.left-n,name:`arrow_nw`,...a&&{config:a}}),southWestArrowNorthMiddleWest:(e,t)=>({top:s(e),left:e.left-t.width*.25-n,name:`arrow_nmw`,...a&&{config:a}}),southWestArrowNorth:(e,t)=>({top:s(e),left:e.left-t.width/2,name:`arrow_n`,...a&&{config:a}}),southWestArrowNorthMiddleEast:(e,t)=>({top:s(e),left:e.left-t.width*.75+n,name:`arrow_nme`,...a&&{config:a}}),southWestArrowNorthEast:(e,t)=>({top:s(e),left:e.left-t.width+n,name:`arrow_ne`,...a&&{config:a}}),southArrowNorthWest:e=>({top:s(e),left:e.left+e.width/2-n,name:`arrow_nw`,...a&&{config:a}}),southArrowNorthMiddleWest:(e,t)=>({top:s(e),left:e.left+e.width/2-t.width*.25-n,name:`arrow_nmw`,...a&&{config:a}}),southArrowNorth:(e,t)=>({top:s(e),left:e.left+e.width/2-t.width/2,name:`arrow_n`,...a&&{config:a}}),southArrowNorthMiddleEast:(e,t)=>({top:s(e),left:e.left+e.width/2-t.width*.75+n,name:`arrow_nme`,...a&&{config:a}}),southArrowNorthEast:(e,t)=>({top:s(e),left:e.left+e.width/2-t.width+n,name:`arrow_ne`,...a&&{config:a}}),southEastArrowNorthWest:e=>({top:s(e),left:e.right-n,name:`arrow_nw`,...a&&{config:a}}),southEastArrowNorthMiddleWest:(e,t)=>({top:s(e),left:e.right-t.width*.25-n,name:`arrow_nmw`,...a&&{config:a}}),southEastArrowNorth:(e,t)=>({top:s(e),left:e.right-t.width/2,name:`arrow_n`,...a&&{config:a}}),southEastArrowNorthMiddleEast:(e,t)=>({top:s(e),left:e.right-t.width*.75+n,name:`arrow_nme`,...a&&{config:a}}),southEastArrowNorthEast:(e,t)=>({top:s(e),left:e.right-t.width+n,name:`arrow_ne`,...a&&{config:a}}),westArrowEast:(e,t)=>({top:e.top+e.height/2-t.height/2,left:e.left-t.width-r,name:`arrow_e`,...a&&{config:a}}),eastArrowWest:(e,t)=>({top:e.top+e.height/2-t.height/2,left:e.right+r,name:`arrow_w`,...a&&{config:a}}),viewportStickyNorth:(e,t,n)=>{let r=new O(u.document.body).getIntersection(n.getVisible());if(!r)return null;let o=r.getVisible();return!e.getIntersection(o)||!(o.top-e.top-ithis._showBalloon(),50,{leading:!0});_lastFocusedEditableElement=null;_balloonClass;constructor(e,t={}){super(),this.editor=e,this._balloonClass=t.balloonClass,e.on(`ready`,()=>this._handleEditorReady())}destroy(){let e=this._balloonView;e&&(e.unpin(),this._balloonView=null),this._showBalloonThrottled.cancel(),this.stopListening()}_handleEditorReady(){let e=this.editor;this._isEnabled()&&e.ui.view&&(e.ui.focusTracker.on(`change:isFocused`,(e,t,n)=>{this._updateLastFocusedEditableElement(),n?this._showBalloon():this._hideBalloon()}),e.ui.focusTracker.on(`change:focusedElement`,(e,t,n)=>{this._updateLastFocusedEditableElement(),n&&this._showBalloon()}),e.ui.on(`update`,()=>{this._showBalloonThrottled()}))}_getNormalizedConfig(){return{side:this.editor.locale.contentLanguageDirection===`ltr`?`right`:`left`,position:`border`,verticalOffset:0,horizontalOffset:5}}_showBalloon(){let e=this._getBalloonAttachOptions();e&&(this._balloonView||=this._createBalloonView(),this._balloonView.pin(e))}_hideBalloon(){this._balloonView&&this._balloonView.unpin()}_createBalloonView(){let e=this.editor,t=new ab,n=this._createBadgeContent();return t.content.add(n),this._balloonClass&&(t.class=this._balloonClass),e.ui.view.body.add(t),t}_getBalloonAttachOptions(){if(!this._lastFocusedEditableElement)return null;let e=this._getNormalizedConfig(),t=e.side===`right`?lb(this._lastFocusedEditableElement,e):ub(this._lastFocusedEditableElement,e);return{target:this._lastFocusedEditableElement,positions:[t]}}_updateLastFocusedEditableElement(){let e=this.editor,t=e.ui.focusTracker.isFocused,n=e.ui.focusTracker.focusedElement;if(!t||!n){this._lastFocusedEditableElement=null;return}let r=Array.from(e.ui.getEditableElementsNames()).map(t=>e.ui.getEditableElement(t));r.includes(n)?this._lastFocusedEditableElement=n:this._lastFocusedEditableElement=r[0]}};function lb(e,t){return db(e,t,(e,n)=>e.left+e.width-n.width-t.horizontalOffset)}function ub(e,t){return db(e,t,e=>e.left+t.horizontalOffset)}function db(e,t,n){return(r,i)=>{let a=new O(e);if(a.width<350||a.height<50)return null;let o;o=t.position===`inside`?a.bottom-i.height:a.bottom-i.height/2,o-=t.verticalOffset;let s=n(a,i),c=r.clone().moveTo(s,o).getIntersection(i.clone().moveTo(s,o)).getVisible();return!c||c.getArea()e.preventDefault())}}]})}},mb=class extends H{toggleSwitchView;constructor(e){super(e),this.isToggleable=!0,this.toggleSwitchView=this._createToggleView(),this.extendTemplate({attributes:{class:`ck-switchbutton`}})}render(){super.render(),this.children.add(this.toggleSwitchView)}_createToggleView(){let e=new P;return e.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-button__toggle`]},children:[{tag:`span`,attributes:{class:[`ck`,`ck-button__toggle__inner`]}}]}),e}};const hb=yb(H),gb=yb($y);var _b=class extends hb{},vb=class extends gb{};function yb(e){class t extends e{_fileInputView;constructor(...e){super(...e),this._fileInputView=new bb(this.locale),this._fileInputView.bind(`acceptedType`).to(this),this._fileInputView.bind(`allowMultipleFiles`).to(this),this._fileInputView.delegate(`done`).to(this),this.on(`execute`,()=>{this._fileInputView.open()}),this.extendTemplate({attributes:{class:`ck-file-dialog-button`}})}render(){super.render(),this.children.add(this._fileInputView)}}return t}var bb=class extends P{constructor(e){super(e),this.set(`acceptedType`,void 0),this.set(`allowMultipleFiles`,!1);let t=this.bindTemplate;this.setTemplate({tag:`input`,attributes:{class:[`ck-hidden`],type:`file`,tabindex:`-1`,accept:t.to(`acceptedType`),multiple:t.to(`allowMultipleFiles`)},on:{change:t.to(()=>{this.element?.files?.length&&this.fire(`done`,this.element.files),this.element.value=``})}})}open(){this.element.click()}},xb=class extends P{buttonView;children;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`isCollapsed`,!1),this.set(`label`,``),this.buttonView=this._createButtonView(),this.children=this.createCollection(),this.set(`_collapsibleAriaLabelUid`,void 0),t&&this.children.addMany(t),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-collapsible`,n.if(`isCollapsed`,`ck-collapsible_collapsed`)]},children:[this.buttonView,{tag:`div`,attributes:{class:[`ck`,`ck-collapsible__children`],role:`region`,hidden:n.if(`isCollapsed`,`hidden`),"aria-labelledby":n.to(`_collapsibleAriaLabelUid`)},children:this.children}]})}render(){super.render(),this._collapsibleAriaLabelUid=this.buttonView.labelView.element.id}focus(){this.buttonView.focus()}_createButtonView(){let e=new H(this.locale),t=e.bindTemplate;return e.set({withText:!0,icon:b_}),e.extendTemplate({attributes:{"aria-expanded":t.to(`isOn`,e=>String(e))}}),e.bind(`label`).to(this),e.bind(`isOn`).to(this,`isCollapsed`,e=>!e),e.on(`execute`,()=>{this.isCollapsed=!this.isCollapsed}),e}};function Sb(e,t){let n=e.t,r={Black:n(`Black`),"Dim grey":n(`Dim grey`),Grey:n(`Grey`),"Light grey":n(`Light grey`),White:n(`White`),Red:n(`Red`),Orange:n(`Orange`),Yellow:n(`Yellow`),"Light green":n(`Light green`),Green:n(`Green`),Aquamarine:n(`Aquamarine`),Turquoise:n(`Turquoise`),"Light blue":n(`Light blue`),Blue:n(`Blue`),Purple:n(`Purple`)};return t.map(e=>{let t=r[e.label];return t&&t!=e.label&&(e.label=t),e})}function Cb(e){return e.map(wb).filter(e=>!!e)}function wb(e){return typeof e==`string`?{model:e,label:e,hasBorder:!1,view:{name:`span`,styles:{color:e}}}:{model:e.color,label:e.label||e.color,hasBorder:e.hasBorder===void 0?!1:e.hasBorder,view:{name:`span`,styles:{color:`${e.color}`}}}}var Tb=class extends H{constructor(e){super(e);let t=this.bindTemplate;this.set(`color`,void 0),this.set(`hasBorder`,!1),this.icon=m_,this.extendTemplate({attributes:{style:{backgroundColor:t.to(`color`,e=>p.isMediaForcedColors?null:e)},class:[`ck`,`ck-color-grid__tile`,t.if(`hasBorder`,`ck-color-selector__color-tile_bordered`)]}})}render(){super.render(),this.iconView.fillColor=`hsl(0, 0%, 100%)`}},Eb=class extends P{columns;items;focusTracker;keystrokes;constructor(e,t){super(e);let n=t&&t.colorDefinitions?t.colorDefinitions:[];this.columns=t?.columns||5;let r={gridTemplateColumns:`repeat( ${this.columns}, 1fr)`};this.set(`selectedColor`,void 0),this.items=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this.items.on(`add`,(e,t)=>{t.isOn=t.color===this.selectedColor}),n.forEach(e=>{let t=new Tb;t.set({color:e.color,label:e.label,tooltip:!0,hasBorder:e.options.hasBorder}),t.on(`execute`,()=>{this.fire(`execute`,{value:e.color,hasBorder:e.options.hasBorder,label:e.label})}),this.items.add(t)}),this.setTemplate({tag:`div`,children:this.items,attributes:{class:[`ck`,`ck-color-grid`],style:r}}),this.on(`change:selectedColor`,(e,t,n)=>{for(let e of this.items)e.isOn=e.color===n})}focus(){this.items.length&&this.items.first.focus()}focusLast(){this.items.length&&this.items.last.focus()}render(){super.render();for(let e of this.items)this.focusTracker.add(e.element);this.items.on(`add`,(e,t)=>{this.focusTracker.add(t.element)}),this.items.on(`remove`,(e,t)=>{this.focusTracker.remove(t.element)}),this.keystrokes.listenTo(this.element),$a({keystrokeHandler:this.keystrokes,focusTracker:this.focusTracker,gridItems:this.items,numberOfColumns:this.columns,uiLanguageDirection:this.locale?.uiLanguageDirection})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}};const Db={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};for(let e in Db)Object.freeze(Db[e]);var Ob=Object.freeze(Db),kb=jb,Ab={red:0,orange:60,yellow:120,green:180,blue:240,purple:300};function jb(e){var t,n=[],r=1,i;if(typeof e==`number`||typeof e==`number`)return{space:`rgb`,values:[e>>>16,(e&65280)>>>8,e&255],alpha:1};if(e=String(e).toLowerCase(),Ob[e])n=Ob[e].slice(),i=`rgb`;else if(e===`transparent`)r=0,i=`rgb`,n=[0,0,0];else if(e[0]===`#`){var a=e.slice(1),o=a.length,s=o<=4;r=1,s?(n=[parseInt(a[0]+a[0],16),parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16)],o===4&&(r=parseInt(a[3]+a[3],16)/255)):(n=[parseInt(a[0]+a[1],16),parseInt(a[2]+a[3],16),parseInt(a[4]+a[5],16)],o===8&&(r=parseInt(a[6]+a[7],16)/255)),n[0]||=0,n[1]||=0,n[2]||=0,i=`rgb`}else if(t=/^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\s*\(([^\)]*)\)/.exec(e)){i=t[1].replace(/a$/,``);var c=i===`cmyk`?4:i===`gray`?1:3;n=t[2].trim().split(/\s*[,\/]\s*|\s+/),i===`color`&&(i=n.shift()),n=n.map(function(e,t){if(e[e.length-1]===`%`)return e=parseFloat(e)/100,t===3?e:i===`rgb`?e*255:i[0]===`h`||i[0]===`l`&&!t?e*100:i===`lab`?e*125:i===`lch`?t<2?e*150:e*360:i[0]===`o`&&!t?e:i===`oklab`?e*.4:i===`oklch`?t<2?e*.4:e*360:e;if(i[t]===`h`||t===2&&i[i.length-1]===`h`){if(Ab[e]!==void 0)return Ab[e];if(e.endsWith(`deg`))return parseFloat(e);if(e.endsWith(`turn`))return parseFloat(e)*360;if(e.endsWith(`grad`))return parseFloat(e)*360/400;if(e.endsWith(`rad`))return parseFloat(e)*180/Math.PI}return e===`none`?0:parseFloat(e)}),r=n.length>c?n.pop():1}else/[0-9](?:\s|\/|,)/.test(e)&&(n=e.match(/([0-9]+)/g).map(function(e){return parseFloat(e)}),i=e.match(/([a-z])/gi)?.join(``)?.toLowerCase()||`rgb`);return{space:i,values:n,alpha:r}}const Mb={};for(let e of Object.keys(Ob))Mb[Ob[e]]=e;const W={rgb:{channels:3,labels:`rgb`},hsl:{channels:3,labels:`hsl`},hsv:{channels:3,labels:`hsv`},hwb:{channels:3,labels:`hwb`},cmyk:{channels:4,labels:`cmyk`},xyz:{channels:3,labels:`xyz`},lab:{channels:3,labels:`lab`},oklab:{channels:3,labels:[`okl`,`oka`,`okb`]},lch:{channels:3,labels:`lch`},oklch:{channels:3,labels:[`okl`,`okc`,`okh`]},hex:{channels:1,labels:[`hex`]},keyword:{channels:1,labels:[`keyword`]},ansi16:{channels:1,labels:[`ansi16`]},ansi256:{channels:1,labels:[`ansi256`]},hcg:{channels:3,labels:[`h`,`c`,`g`]},apple:{channels:3,labels:[`r16`,`g16`,`b16`]},gray:{channels:1,labels:[`gray`]}},Nb=(6/29)**3;function Pb(e){let t=e>.0031308?1.055*e**(1/2.4)-.055:e*12.92;return Math.min(Math.max(0,t),1)}function Fb(e){return e>.04045?((e+.055)/1.055)**2.4:e/12.92}for(let e of Object.keys(W)){if(!(`channels`in W[e]))throw Error(`missing channels property: `+e);if(!(`labels`in W[e]))throw Error(`missing channel labels property: `+e);if(W[e].labels.length!==W[e].channels)throw Error(`channel and label counts mismatch: `+e);let{channels:t,labels:n}=W[e];delete W[e].channels,delete W[e].labels,Object.defineProperty(W[e],"channels",{value:t}),Object.defineProperty(W[e],"labels",{value:n})}W.rgb.hsl=function(e){let t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=a-i,s,c;switch(a){case i:s=0;break;case t:s=(n-r)/o;break;case n:s=2+(r-t)/o;break;case r:s=4+(t-n)/o;break}s=Math.min(s*60,360),s<0&&(s+=360);let l=(i+a)/2;return c=a===i?0:l<=.5?o/(a+i):o/(2-a-i),[s,c*100,l*100]},W.rgb.hsv=function(e){let t,n,r,i,a,o=e[0]/255,s=e[1]/255,c=e[2]/255,l=Math.max(o,s,c),u=l-Math.min(o,s,c),d=function(e){return(l-e)/6/u+1/2};if(u===0)i=0,a=0;else{switch(a=u/l,t=d(o),n=d(s),r=d(c),l){case o:i=r-n;break;case s:i=1/3+t-r;break;case c:i=2/3+n-t;break}i<0?i+=1:i>1&&--i}return[i*360,a*100,l*100]},W.rgb.hwb=function(e){let t=e[0],n=e[1],r=e[2],i=W.rgb.hsl(e)[0],a=1/255*Math.min(t,Math.min(n,r));return r=1-1/255*Math.max(t,Math.max(n,r)),[i,a*100,r*100]},W.rgb.oklab=function(e){let t=Fb(e[0]/255),n=Fb(e[1]/255),r=Fb(e[2]/255),i=Math.cbrt(.4122214708*t+.5363325363*n+.0514459929*r),a=Math.cbrt(.2119034982*t+.6806995451*n+.1073969566*r),o=Math.cbrt(.0883024619*t+.2817188376*n+.6299787005*r),s=.2104542553*i+.793617785*a-.0040720468*o,c=1.9779984951*i-2.428592205*a+.4505937099*o,l=.0259040371*i+.7827717662*a-.808675766*o;return[s*100,c*100,l*100]},W.rgb.cmyk=function(e){let t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(1-t,1-n,1-r),a=(1-t-i)/(1-i)||0,o=(1-n-i)/(1-i)||0,s=(1-r-i)/(1-i)||0;return[a*100,o*100,s*100,i*100]};function Ib(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}W.rgb.keyword=function(e){let t=Mb[e];if(t)return t;let n=1/0,r;for(let t of Object.keys(Ob)){let i=Ob[t],a=Ib(e,i);aNb?n**(1/3):7.787*n+16/116,r=r>Nb?r**(1/3):7.787*r+16/116,i=i>Nb?i**(1/3):7.787*i+16/116,[116*r-16,500*(n-r),200*(r-i)]},W.hsl.rgb=function(e){let t=e[0]/360,n=e[1]/100,r=e[2]/100,i,a;if(n===0)return a=r*255,[a,a,a];let o=r<.5?r*(1+n):r+n-r*n,s=2*r-o,c=[0,0,0];for(let e=0;e<3;e++)i=t+1/3*-(e-1),i<0&&i++,i>1&&i--,a=6*i<1?s+(o-s)*6*i:2*i<1?o:3*i<2?s+(o-s)*(2/3-i)*6:s,c[e]=a*255;return c},W.hsl.hsv=function(e){let t=e[0],n=e[1]/100,r=e[2]/100,i=n,a=Math.max(r,.01);r*=2,n*=r<=1?r:2-r,i*=a<=1?a:2-a;let o=(r+n)/2;return[t,(r===0?2*i/(a+i):2*n/(r+n))*100,o*100]},W.hsv.rgb=function(e){let t=e[0]/60,n=e[1]/100,r=e[2]/100,i=Math.floor(t)%6,a=t-Math.floor(t),o=255*r*(1-n),s=255*r*(1-n*a),c=255*r*(1-n*(1-a));switch(r*=255,i){case 0:return[r,c,o];case 1:return[s,r,o];case 2:return[o,r,c];case 3:return[o,s,r];case 4:return[c,o,r];case 5:return[r,o,s]}},W.hsv.hsl=function(e){let t=e[0],n=e[1]/100,r=e[2]/100,i=Math.max(r,.01),a,o;o=(2-n)*r;let s=(2-n)*i;return a=n*i,a/=s<=1?s:2-s,a||=0,o/=2,[t,a*100,o*100]},W.hwb.rgb=function(e){let t=e[0]/360,n=e[1]/100,r=e[2]/100,i=n+r,a;i>1&&(n/=i,r/=i);let o=Math.floor(6*t),s=1-r;a=6*t-o,o&1&&(a=1-a);let c=n+a*(s-n),l,u,d;switch(o){default:case 6:case 0:l=s,u=c,d=n;break;case 1:l=c,u=s,d=n;break;case 2:l=n,u=s,d=c;break;case 3:l=n,u=c,d=s;break;case 4:l=c,u=n,d=s;break;case 5:l=s,u=n,d=c;break}return[l*255,u*255,d*255]},W.cmyk.rgb=function(e){let t=e[0]/100,n=e[1]/100,r=e[2]/100,i=e[3]/100,a=1-Math.min(1,t*(1-i)+i),o=1-Math.min(1,n*(1-i)+i),s=1-Math.min(1,r*(1-i)+i);return[a*255,o*255,s*255]},W.xyz.rgb=function(e){let t=e[0]/100,n=e[1]/100,r=e[2]/100,i,a,o;return i=t*3.2404542+n*-1.5371385+r*-.4985314,a=t*-.969266+n*1.8760108+r*.041556,o=t*.0556434+n*-.2040259+r*1.0572252,i=Pb(i),a=Pb(a),o=Pb(o),[i*255,a*255,o*255]},W.xyz.lab=function(e){let t=e[0],n=e[1],r=e[2];return t/=95.047,n/=100,r/=108.883,t=t>Nb?t**(1/3):7.787*t+16/116,n=n>Nb?n**(1/3):7.787*n+16/116,r=r>Nb?r**(1/3):7.787*r+16/116,[116*n-16,500*(t-n),200*(n-r)]},W.xyz.oklab=function(e){let t=e[0]/100,n=e[1]/100,r=e[2]/100,i=Math.cbrt(.8189330101*t+.3618667424*n-.1288597137*r),a=Math.cbrt(.0329845436*t+.9293118715*n+.0361456387*r),o=Math.cbrt(.0482003018*t+.2643662691*n+.633851707*r),s=.2104542553*i+.793617785*a-.0040720468*o,c=1.9779984951*i-2.428592205*a+.4505937099*o,l=.0259040371*i+.7827717662*a-.808675766*o;return[s*100,c*100,l*100]},W.oklab.oklch=function(e){return W.lab.lch(e)},W.oklab.xyz=function(e){let t=e[0]/100,n=e[1]/100,r=e[2]/100,i=(.999999998*t+.396337792*n+.215803758*r)**3,a=(1.000000008*t-.105561342*n-.063854175*r)**3,o=(1.000000055*t-.089484182*n-1.291485538*r)**3,s=1.227013851*i-.55779998*a+.281256149*o,c=-.040580178*i+1.11225687*a-.071676679*o,l=-.076381285*i-.421481978*a+1.58616322*o;return[s*100,c*100,l*100]},W.oklab.rgb=function(e){let t=e[0]/100,n=e[1]/100,r=e[2]/100,i=(t+.3963377774*n+.2158037573*r)**3,a=(t-.1055613458*n-.0638541728*r)**3,o=(t-.0894841775*n-1.291485548*r)**3,s=Pb(4.0767416621*i-3.3077115913*a+.2309699292*o),c=Pb(-1.2684380046*i+2.6097574011*a-.3413193965*o),l=Pb(-.0041960863*i-.7034186147*a+1.707614701*o);return[s*255,c*255,l*255]},W.oklch.oklab=function(e){return W.lch.lab(e)},W.lab.xyz=function(e){let t=e[0],n=e[1],r=e[2],i,a,o;a=(t+16)/116,i=n/500+a,o=a-r/200;let s=a**3,c=i**3,l=o**3;return a=s>Nb?s:(a-16/116)/7.787,i=c>Nb?c:(i-16/116)/7.787,o=l>Nb?l:(o-16/116)/7.787,i*=95.047,a*=100,o*=108.883,[i,a,o]},W.lab.lch=function(e){let t=e[0],n=e[1],r=e[2],i;return i=Math.atan2(r,n)*360/2/Math.PI,i<0&&(i+=360),[t,Math.sqrt(n*n+r*r),i]},W.lch.lab=function(e){let t=e[0],n=e[1],r=e[2]/360*2*Math.PI;return[t,n*Math.cos(r),n*Math.sin(r)]},W.rgb.ansi16=function(e,t=null){let[n,r,i]=e,a=t===null?W.rgb.hsv(e)[2]:t;if(a=Math.round(a/50),a===0)return 30;let o=30+(Math.round(i/255)<<2|Math.round(r/255)<<1|Math.round(n/255));return a===2&&(o+=60),o},W.hsv.ansi16=function(e){return W.rgb.ansi16(W.hsv.rgb(e),e[2])},W.rgb.ansi256=function(e){let t=e[0],n=e[1],r=e[2];return t>>4==n>>4&&n>>4==r>>4?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)},W.ansi16.rgb=function(e){e=e[0];let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let n=(Math.trunc(e>50)+1)*.5;return[(t&1)*n*255,(t>>1&1)*n*255,(t>>2&1)*n*255]},W.ansi256.rgb=function(e){if(e=e[0],e>=232){let t=(e-232)*10+8;return[t,t,t]}e-=16;let t;return[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},W.rgb.hex=function(e){let t=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return`000000`.slice(t.length)+t},W.hex.rgb=function(e){let t=e.toString(16).match(/[a-f\d]{6}|[a-f\d]{3}/i);if(!t)return[0,0,0];let n=t[0];t[0].length===3&&(n=[...n].map(e=>e+e).join(``));let r=Number.parseInt(n,16);return[r>>16&255,r>>8&255,r&255]},W.rgb.hcg=function(e){let t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.max(Math.max(t,n),r),a=Math.min(Math.min(t,n),r),o=i-a,s,c=o<1?a/(1-o):0;return s=o<=0?0:i===t?(n-r)/o%6:i===n?2+(r-t)/o:4+(t-n)/o,s/=6,s%=1,[s*360,o*100,c*100]},W.hsl.hcg=function(e){let t=e[1]/100,n=e[2]/100,r=n<.5?2*t*n:2*t*(1-n),i=0;return r<1&&(i=(n-.5*r)/(1-r)),[e[0],r*100,i*100]},W.hsv.hcg=function(e){let t=e[1]/100,n=e[2]/100,r=t*n,i=0;return r<1&&(i=(n-r)/(1-r)),[e[0],r*100,i*100]},W.hcg.rgb=function(e){let t=e[0]/360,n=e[1]/100,r=e[2]/100;if(n===0)return[r*255,r*255,r*255];let i=[0,0,0],a=t%1*6,o=a%1,s=1-o,c=0;switch(Math.floor(a)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=s,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=s,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=s}return c=(1-n)*r,[(n*i[0]+c)*255,(n*i[1]+c)*255,(n*i[2]+c)*255]},W.hcg.hsv=function(e){let t=e[1]/100,n=t+e[2]/100*(1-t),r=0;return n>0&&(r=t/n),[e[0],r*100,n*100]},W.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,r=0;return n>0&&n<.5?r=t/(2*n):n>=.5&&n<1&&(r=t/(2*(1-n))),[e[0],r*100,n*100]},W.hcg.hwb=function(e){let t=e[1]/100,n=t+e[2]/100*(1-t);return[e[0],(n-t)*100,(1-n)*100]},W.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,r=n-t,i=0;return r<1&&(i=(n-r)/(1-r)),[e[0],r*100,i*100]},W.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},W.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},W.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},W.gray.hsl=function(e){return[0,0,e[0]]},W.gray.hsv=W.gray.hsl,W.gray.hwb=function(e){return[0,100,e[0]]},W.gray.cmyk=function(e){return[0,0,0,e[0]]},W.gray.lab=function(e){return[e[0],0,0]},W.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return`000000`.slice(n.length)+n},W.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]};function Lb(){let e={},t=Object.keys(W);for(let{length:n}=t,r=0;r0;){let e=n.pop(),r=Object.keys(W[e]);for(let{length:i}=r,a=0;a1&&(t=n),e(t))};return`conversion`in e&&(t.conversion=e.conversion),t}function Gb(e){let t=function(...t){let n=t[0];if(n==null)return n;n.length>1&&(t=n);let r=e(t);if(typeof r==`object`)for(let{length:e}=r,t=0;te||t);let i=this.bindTemplate;this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-labeled-field-view`,i.to(`class`),i.if(`isEnabled`,`ck-disabled`,e=>!e),i.if(`isEmpty`,`ck-labeled-field-view_empty`),i.if(`isFocused`,`ck-labeled-field-view_focused`),i.if(`placeholder`,`ck-labeled-field-view_placeholder`),i.if(`errorText`,`ck-error`)]},children:[{tag:`div`,attributes:{class:[`ck`,`ck-labeled-field-view__input-wrapper`]},children:this.fieldWrapperChildren},this.statusView]})}_createLabelView(e){let t=new eo(this.locale);return t.for=e,t.bind(`text`).to(this,`label`),t}_createStatusView(e){let t=new P(this.locale),n=this.bindTemplate;return t.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-labeled-field-view__status`,n.if(`errorText`,`ck-labeled-field-view__status_error`),n.if(`_statusText`,`ck-hidden`,e=>!e)],id:e,role:n.if(`errorText`,`alert`)},children:[{text:n.to(`_statusText`)}]}),t}focus(e){this.fieldView.focus(e)}},$b=class extends P{focusTracker;constructor(e){super(e),this.set(`value`,void 0),this.set(`id`,void 0),this.set(`placeholder`,void 0),this.set(`tabIndex`,void 0),this.set(`isReadOnly`,!1),this.set(`hasError`,!1),this.set(`ariaDescribedById`,void 0),this.set(`ariaLabel`,void 0),this.focusTracker=new M,this.bind(`isFocused`).to(this.focusTracker),this.set(`isEmpty`,!0);let t=this.bindTemplate;this.setTemplate({tag:`input`,attributes:{class:[`ck`,`ck-input`,t.if(`isFocused`,`ck-input_focused`),t.if(`isEmpty`,`ck-input-text_empty`),t.if(`hasError`,`ck-error`)],id:t.to(`id`),placeholder:t.to(`placeholder`),tabindex:t.to(`tabIndex`),readonly:t.to(`isReadOnly`),"aria-invalid":t.if(`hasError`,!0),"aria-describedby":t.to(`ariaDescribedById`),"aria-label":t.to(`ariaLabel`)},on:{input:t.to((...e)=>{this.fire(`input`,...e),this._updateIsEmpty()}),change:t.to(this._updateIsEmpty.bind(this))}})}render(){super.render(),this.focusTracker.add(this.element),this._setDomElementValue(this.value),this._updateIsEmpty(),this.on(`change:value`,(e,t,n)=>{this._setDomElementValue(n),this._updateIsEmpty()})}destroy(){super.destroy(),this.focusTracker.destroy()}select(){this.element.select()}focus(){this.element.focus()}reset(){this.value=this.element.value=``,this._updateIsEmpty()}_updateIsEmpty(){this.isEmpty=ex(this.element)}_setDomElementValue(e){this.element.value=!e&&e!==0?``:e}};function ex(e){return!e.value}var tx=class extends $b{constructor(e){super(e),this.set(`inputMode`,`text`);let t=this.bindTemplate;this.extendTemplate({attributes:{inputmode:t.to(`inputMode`)}})}},nx=class extends tx{constructor(e){super(e),this.extendTemplate({attributes:{type:`text`,class:[`ck-input-text`]}})}},rx=class extends tx{constructor(e,{min:t,max:n,step:r}={}){super(e);let i=this.bindTemplate;this.set(`min`,t),this.set(`max`,n),this.set(`step`,r),this.extendTemplate({attributes:{type:`number`,class:[`ck-input-number`],min:i.to(`min`),max:i.to(`max`),step:i.to(`step`)}})}},ix=class extends $b{_resizeObserver;_isUpdateAutoGrowHeightPending=!1;constructor(e){super(e);let t=Wr(`px`);this.set(`minRows`,2),this.set(`maxRows`,5),this.set(`_height`,null),this.set(`resize`,`none`),this._resizeObserver=null,this.on(`change:minRows`,this._validateMinMaxRows.bind(this)),this.on(`change:maxRows`,this._validateMinMaxRows.bind(this));let n=this.bindTemplate;this.template.tag=`textarea`,this.extendTemplate({attributes:{class:[`ck-textarea`],style:{height:n.to(`_height`,e=>e?t(e):null),resize:n.to(`resize`)},rows:n.to(`minRows`)}})}render(){super.render();let e=!1;this.on(`input`,()=>{this._updateAutoGrowHeight(!0),this.fire(`update`)}),this.on(`change:value`,()=>{u.window.requestAnimationFrame(()=>{if(!Yr(this.element)){this._isUpdateAutoGrowHeightPending=!0;return}this._updateAutoGrowHeight(),this.fire(`update`)})}),this._resizeObserver=new Hr(this.element,t=>{let n=!!t.contentRect.width&&!!t.contentRect.height;!e&&n&&this._isUpdateAutoGrowHeightPending&&u.window.requestAnimationFrame(()=>{this._updateAutoGrowHeight(),this.fire(`update`)}),e=n})}destroy(){this._resizeObserver&&this._resizeObserver.destroy()}reset(){super.reset(),this._updateAutoGrowHeight(),this.fire(`update`)}_updateAutoGrowHeight(e){let t=this.element;if(!t.offsetParent){this._isUpdateAutoGrowHeightPending=!0;return}this._isUpdateAutoGrowHeightPending=!1;let n=ax(t,`1`),r=ax(t,t.value),i=n.ownerDocument.defaultView.getComputedStyle(n),a=parseFloat(i.paddingTop)+parseFloat(i.paddingBottom),o=Dr(n),s=parseFloat(i.lineHeight),c=o.top+o.bottom,l=new O(n).height,u=Math.round((r.scrollHeight-a)/s),d=this.maxRows*s+a+c,f=u===1?l:this.minRows*s+a+c;this._height=Math.min(Math.max(Math.max(u,this.minRows)*s+a+c,f),d),e&&(t.scrollTop=t.scrollHeight),n.remove(),r.remove()}_validateMinMaxRows(){if(this.minRows>this.maxRows)throw new w(`ui-textarea-view-min-rows-greater-than-max-rows`,{textareaView:this,minRows:this.minRows,maxRows:this.maxRows})}};function ax(e,t){let n=e.cloneNode();return n.style.position=`absolute`,n.style.top=`-99999px`,n.style.left=`-99999px`,n.style.height=`auto`,n.style.overflow=`hidden`,n.style.width=e.ownerDocument.defaultView.getComputedStyle(e).width,n.tabIndex=-1,n.rows=1,n.value=t,e.parentNode.insertBefore(n,e),n}var ox=class extends P{children;constructor(e){super(e);let t=this.bindTemplate;this.set(`isVisible`,!1),this.set(`position`,`se`),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-reset`,`ck-dropdown__panel`,t.to(`position`,e=>`ck-dropdown__panel_${e}`),t.if(`isVisible`,`ck-dropdown__panel-visible`)],tabindex:`-1`},children:this.children,on:{selectstart:t.to(e=>{let t=e.target;t instanceof Element&&t.tagName.toLocaleLowerCase()===`input`||e.preventDefault()})}})}focus(){if(this.children.length){let e=this.children.first;typeof e.focus==`function`?e.focus():T(`ui-dropdown-panel-focus-child-missing-focus`,{childView:this.children.first,dropdownPanel:this})}}focusLast(){if(this.children.length){let e=this.children.last;typeof e.focusLast==`function`?e.focusLast():e.focus()}}},sx=class e extends P{buttonView;panelView;focusTracker;keystrokes;listView;toolbarView;menuView;constructor(e,t,n){super(e);let r=this.bindTemplate;this.buttonView=t,this.panelView=n,this.set(`isOpen`,!1),this.set(`isEnabled`,!0),this.set(`class`,void 0),this.set(`id`,void 0),this.set(`panelPosition`,`auto`),this.panelView.bind(`isVisible`).to(this,`isOpen`),this.keystrokes=new N,this.focusTracker=new M,this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-dropdown`,r.to(`class`),r.if(`isEnabled`,`ck-disabled`,e=>!e)],id:r.to(`id`),"aria-describedby":r.to(`ariaDescribedById`)},children:[t,n]}),t.extendTemplate({attributes:{class:[`ck-dropdown__button`],"data-cke-tooltip-disabled":r.to(`isOpen`)}})}render(){super.render(),this.focusTracker.add(this.buttonView.element),this.focusTracker.add(this.panelView.element),this.listenTo(this.buttonView,`open`,()=>{this.isOpen=!this.isOpen}),this.on(`change:isOpen`,(t,n,r)=>{if(r)if(this.panelPosition===`auto`){let t=e._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions});this.panelView.position=t?t.name:this._defaultPanelPositionName}else this.panelView.position=this.panelPosition}),this.keystrokes.listenTo(this.element);let t=(e,t)=>{this.isOpen&&(this.isOpen=!1,t())};this.keystrokes.set(`arrowdown`,(e,t)=>{this.buttonView.isEnabled&&!this.isOpen&&(this.isOpen=!0,t())}),this.keystrokes.set(`arrowright`,(e,t)=>{this.isOpen&&t()}),this.keystrokes.set(`arrowleft`,t),this.keystrokes.set(`esc`,t)}focus(){this.buttonView.focus()}get _panelPositions(){let{south:t,north:n,southEast:r,southWest:i,northEast:a,northWest:o,southMiddleEast:s,southMiddleWest:c,northMiddleEast:l,northMiddleWest:u}=e.defaultPanelPositions;return this.locale.uiLanguageDirection===`rtl`?[i,r,c,s,t,o,a,u,l,n]:[r,i,s,c,t,a,o,l,u,n]}get _defaultPanelPositionName(){return this.locale.uiLanguageDirection===`rtl`?`sw`:`se`}static defaultPanelPositions={south:(e,t)=>({top:e.bottom,left:e.left-(t.width-e.width)/2,name:`s`}),southEast:e=>({top:e.bottom,left:e.left,name:`se`}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:`sw`}),southMiddleEast:(e,t)=>({top:e.bottom,left:e.left-(t.width-e.width)/4,name:`sme`}),southMiddleWest:(e,t)=>({top:e.bottom,left:e.left-(t.width-e.width)*3/4,name:`smw`}),north:(e,t)=>({top:e.top-t.height,left:e.left-(t.width-e.width)/2,name:`n`}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:`ne`}),northWest:(e,t)=>({top:e.top-t.height,left:e.left-t.width+e.width,name:`nw`}),northMiddleEast:(e,t)=>({top:e.top-t.height,left:e.left-(t.width-e.width)/4,name:`nme`}),northMiddleWest:(e,t)=>({top:e.top-t.height,left:e.left-(t.width-e.width)*3/4,name:`nmw`})};static _getOptimalPosition=Xr},cx=class extends H{arrowView;constructor(e){super(e),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{"aria-haspopup":!0,"aria-expanded":this.bindTemplate.to(`isOn`,e=>String(e))}}),this.delegate(`execute`).to(this,`open`)}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=b_,e.extendTemplate({attributes:{class:`ck-dropdown__arrow`}}),e}},lx=class extends H{id;constructor(e,t,n){super(e),this.id=t,this.set({withText:!0,withKeystroke:!0,tooltip:!1,role:`menuitem`,label:n}),this.extendTemplate({attributes:{class:[`ck-dropdown-menu-list__nested-menu__item__button`]}})}},ux=class extends $y{arrowView;constructor(e){super(e);let t=this.bindTemplate;this.set({withText:!0,role:`menuitem`}),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{class:[`ck-dropdown-menu-list__nested-menu__button`],"aria-haspopup":!0,"aria-expanded":this.bindTemplate.to(`isOn`,e=>String(e)),"data-cke-tooltip-disabled":t.to(`isOn`)},on:{mouseenter:t.to(`mouseenter`)}})}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=b_,e.extendTemplate({attributes:{class:`ck-dropdown-menu-list__nested-menu__button__arrow`}}),e}},dx=class extends P{children;constructor(e){super(e);let t=this.bindTemplate;this.set(`isVisible`,!0),this.children=this.createCollection(),this.setTemplate({tag:`li`,attributes:{class:[`ck`,`ck-list__item`,t.if(`isVisible`,`ck-hidden`,e=>!e)],role:`presentation`},children:this.children})}focus(){this.children.first&&this.children.first.focus()}},fx=class extends P{constructor(e){super(e),this.setTemplate({tag:`li`,attributes:{class:[`ck`,`ck-list__separator`]}})}},px=class extends P{labelView;items;children;constructor(e,t=new eo){super(e);let n=this.bindTemplate,r=new mx(e);this.set({label:``,isVisible:!0}),this.labelView=t,this.labelView.bind(`text`).to(this,`label`),this.children=this.createCollection(),this.children.addMany([this.labelView,r]),r.set({role:`group`,ariaLabelledBy:t.id}),r.focusTracker.destroy(),r.keystrokes.destroy(),this.items=r.items,this.setTemplate({tag:`li`,attributes:{role:`presentation`,class:[`ck`,`ck-list__group`,n.if(`isVisible`,`ck-hidden`,e=>!e)]},children:this.children})}focus(){if(this.items){let e=this.items.find(e=>!(e instanceof fx));e&&e.focus()}}},mx=class extends P{focusables;items;focusTracker;keystrokes;_focusCycler;_listItemGroupToChangeListeners=new WeakMap;constructor(e){super(e);let t=this.bindTemplate;this.focusables=new pa,this.items=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this._focusCycler=new Hy({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`arrowup`,focusNext:`arrowdown`}}),this.set(`ariaLabel`,void 0),this.set(`ariaLabelledBy`,void 0),this.set(`role`,void 0),this.setTemplate({tag:`ul`,attributes:{class:[`ck`,`ck-reset`,`ck-list`],role:t.to(`role`),"aria-label":t.to(`ariaLabel`),"aria-labelledby":t.to(`ariaLabelledBy`)},children:this.items})}render(){super.render();for(let e of this.items)e instanceof px?this._registerFocusableItemsGroup(e):e instanceof dx&&this._registerFocusableListItem(e);this.items.on(`change`,(e,t)=>{for(let e of t.removed)e instanceof px?this._deregisterFocusableItemsGroup(e):e instanceof dx&&this._deregisterFocusableListItem(e);for(let e of Array.from(t.added).reverse())e instanceof px?this._registerFocusableItemsGroup(e,t.index):this._registerFocusableListItem(e,t.index)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}focusFirst(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}_registerFocusableListItem(e,t){this.focusTracker.add(e.element),this.focusables.add(e,t)}_deregisterFocusableListItem(e){this.focusTracker.remove(e.element),this.focusables.remove(e)}_getOnGroupItemsChangeCallback(e){return(t,n)=>{for(let e of n.removed)this._deregisterFocusableListItem(e);for(let t of Array.from(n.added).reverse())this._registerFocusableListItem(t,this.items.getIndex(e)+n.index)}}_registerFocusableItemsGroup(e,t){Array.from(e.items).forEach((e,n)=>{let r=t===void 0?void 0:t+n;this._registerFocusableListItem(e,r)});let n=this._getOnGroupItemsChangeCallback(e);this._listItemGroupToChangeListeners.set(e,n),e.items.on(`change`,n)}_deregisterFocusableItemsGroup(e){for(let t of e.items)this._deregisterFocusableListItem(t);e.items.off(`change`,this._listItemGroupToChangeListeners.get(e)),this._listItemGroupToChangeListeners.delete(e)}},hx=class extends mx{constructor(e){super(e);let t=this.bindTemplate;this.role=`menu`,this.set(`isVisible`,!0),this.extendTemplate({attributes:{class:[`ck-dropdown-menu-list`,t.if(`isVisible`,`ck-hidden`,e=>!e)]}})}};const gx={eastSouth:e=>({top:e.top,left:e.right-5,name:`es`}),eastNorth:(e,t)=>({top:e.top-t.height+e.height,left:e.right-5,name:`en`}),westSouth:(e,t)=>({top:e.top,left:e.left-t.width+5,name:`ws`}),westNorth:(e,t)=>({top:e.top-t.height+e.height,left:e.left-t.width+5,name:`wn`})};var _x=class extends dx{childView;constructor(e,t,n){super(e);let r=this.bindTemplate;this.childView=n,this.children.add(n),this.extendTemplate({attributes:{class:[`ck-dropdown-menu-list__nested-menu__item`]},on:{mouseenter:r.to(`mouseenter`)}}),t&&(this.delegate(`mouseenter`).to(t),n instanceof lx&&n.delegate(`execute`).to(t))}};const vx={toggleMenusAndFocusItemsOnHover(e){e.on(`menu:mouseenter`,t=>{let[n]=t.path;t.source.focus();for(let r of e.menus){let e=n instanceof _x&&n.childView===r;r.isOpen=(t.path.includes(r)||e)&&r.isEnabled}})},closeMenuWhenAnotherOnTheSameLevelOpens(e){e.on(`menu:change:isOpen`,(t,n,r)=>{if(!r)return;let i=t.source;for(let t of e.menus)i.parentMenuView===t.parentMenuView&&i!==t&&(t.isOpen=!1)})}},yx={openOnArrowRightKey(e){let t=e.locale.uiLanguageDirection===`rtl`?`arrowleft`:`arrowright`;e.keystrokes.set(t,(t,n)=>{e.focusTracker.focusedElement!==e.buttonView.element||!e.isEnabled||(e.isOpen||=!0,e.panelView.focus(),n())})},openOnButtonClick(e){e.buttonView.on(`execute`,()=>{e.isEnabled&&(e.isOpen=!0)})},openAndFocusOnEnterKeyPress(e){e.keystrokes.set(`enter`,(t,n)=>{e.focusTracker.focusedElement===e.buttonView.element&&(e.isOpen=!0,e.panelView.focus(),n())})},closeOnArrowLeftKey(e){let t=e.locale.uiLanguageDirection===`rtl`?`arrowright`:`arrowleft`;e.keystrokes.set(t,(t,n)=>{e.isOpen&&(e.focus(),e.isOpen=!1,n())})},closeOnEscKey(e){e.keystrokes.set(`esc`,(t,n)=>{e.isOpen&&(e.focus(),e.isOpen=!1,n())})},closeOnParentClose(e,t){t.on(`change:isOpen`,(n,r,i)=>{!i&&n.source===t&&(e.isOpen=!1)})}};var bx=class extends ab{constructor(e){super(e);let t=this.bindTemplate;this.set({isVisible:!1,position:`se`,class:null,top:0,left:0}),this.extendTemplate({tag:`div`,attributes:{class:[`ck-reset`,`ck-dropdown-menu__nested-menu__panel`],tabindex:`-1`},on:{selectstart:t.to(e=>{e.target.tagName.toLocaleLowerCase()!==`input`&&e.preventDefault()})}})}focus(e=1){let{content:t}=this;t.length&&(e===1?t.first.focus():t.last.focus())}},xx=class e extends P{static DELEGATED_EVENTS=[`mouseenter`,`execute`,`change:isOpen`];id;buttonView;panelView;listView;focusTracker;keystrokes;_bodyCollection;constructor(e,t,n,r,i){super(e),this._bodyCollection=t,this.id=n,this.set({isOpen:!1,isEnabled:!0,panelPosition:`w`,class:void 0,parentMenuView:null}),this.keystrokes=new N,this.focusTracker=new M,this.buttonView=new ux(e),this.buttonView.delegate(`mouseenter`).to(this),this.buttonView.bind(`isOn`,`isEnabled`).to(this,`isOpen`,`isEnabled`),this.buttonView.label=r,this.panelView=new bx(e),this.panelView.isVisible=!0,this.listView=new hx(e),this.listView.bind(`ariaLabel`).to(this.buttonView,`label`),this.panelView.content.add(this.listView);let a=this.bindTemplate;this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-dropdown-menu-list__nested-menu`,a.to(`class`),a.if(`isEnabled`,`ck-disabled`,e=>!e)],role:`presentation`},children:[this.buttonView]}),this.parentMenuView=i,this.parentMenuView&&this._handleParentMenuView(),this._attachBehaviors()}get _panelPositions(){let{westSouth:e,eastSouth:t,westNorth:n,eastNorth:r}=gx;return this.locale.uiLanguageDirection===`ltr`?[t,r,e,n]:[e,n,t,r]}render(){super.render(),this.panelView.render(),this.focusTracker.add(this.buttonView.element),this.focusTracker.add(this.panelView.element),this.focusTracker.add(this.listView),this.keystrokes.listenTo(this.element),this._mountPanelOnOpen()}destroy(){this._removePanelFromBody(),this.panelView.destroy(),super.destroy()}focus(){this.buttonView.focus()}_handleParentMenuView(){this.delegate(...e.DELEGATED_EVENTS).to(this.parentMenuView),yx.closeOnParentClose(this,this.parentMenuView)}_attachBehaviors(){yx.openOnButtonClick(this),yx.openAndFocusOnEnterKeyPress(this),yx.openOnArrowRightKey(this),yx.closeOnEscKey(this),yx.closeOnArrowLeftKey(this)}_mountPanelOnOpen(){let{panelView:e}=this;this.on(`change:isOpen`,(t,n,r)=>{if(t.source===this){if(!r&&this._bodyCollection.has(e)){this._removePanelFromBody();return}r&&!this._bodyCollection.has(e)&&this._addPanelToBody()}})}_removePanelFromBody(){let{panelView:e,keystrokes:t}=this;this._bodyCollection.has(e)&&(this._bodyCollection.remove(e),t.stopListening(e.element))}_addPanelToBody(){let{panelView:e,buttonView:t,keystrokes:n}=this;this._bodyCollection.has(e)||(this._bodyCollection.add(e),n.listenTo(e.element),e.pin({positions:this._panelPositions,limiter:u.document.body,element:e.element,target:t.element,fitInViewport:!0}))}},Sx=class extends hx{_definition;_cachedMenus=[];_cachedButtons=[];_bodyCollection;constructor(e,t,n){super(e),this._bodyCollection=t,this._definition=n,this.set(`menuPanelClass`,void 0)}get menus(){return Array.from(this._cachedMenus.values())}get buttons(){return Array.from(this._cachedButtons.values())}render(){this._createStructure(this._definition,null),super.render(),vx.toggleMenusAndFocusItemsOnHover(this),vx.closeMenuWhenAnotherOnTheSameLevelOpens(this)}closeMenus(){this.menus.forEach(e=>{e.isOpen=!1})}_createStructure(e,t){let n=[];for(let r of e){let e;`menu`in r?(e=new xx(this.locale,this._bodyCollection,r.id,r.menu,t),e.panelView.bind(`class`).to(this,`menuPanelClass`),t||e.delegate(...xx.DELEGATED_EVENTS).to(this,e=>`menu:${e}`),this._cachedMenus.push(e),this._createStructure(r.children,e)):(e=new lx(this.locale,r.id,r.label),t||e.delegate(`execute`).to(this,`menu:execute`),this._cachedButtons.push(e));let i=new _x(this.locale,t,e);t||i.delegate(`mouseenter`).to(this,`menu:mouseenter`),n.push(i)}(t?t.listView:this).items.addMany(n)}},Cx=class extends P{constructor(e){super(e),this.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-toolbar__separator`]}})}},wx=class extends P{constructor(e){super(e),this.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-toolbar__line-break`]}})}};function Tx(e){return e.bindTemplate.to(t=>{t.target===e.element&&t.preventDefault()})}function Ex(e){if(Array.isArray(e))return{items:e,removeItems:[]};let t={items:[],removeItems:[]};return e?{...t,...e}:t}const Dx={alignLeft:Gg,bold:Zg,importExport:U_,paragraph:Lv,plus:Hv,text:wy,threeVerticalDots:Ty,pilcrow:Bv,dragIndicator:y_};var Ox=class extends P{options;items;focusTracker;keystrokes;itemsView;children;focusables;_focusCycler;_behavior;constructor(e,t){super(e);let n=this.bindTemplate,r=this.t;this.options=t||{},this.set(`ariaLabel`,r(`Editor toolbar`)),this.set(`maxWidth`,`auto`),this.set(`role`,`toolbar`),this.set(`isGrouping`,!!this.options.shouldGroupWhenFull),this.items=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this.set(`class`,void 0),this.set(`isCompact`,!1),this.set(`isVertical`,!1),this.itemsView=new kx(e),this.children=this.createCollection(),this.children.add(this.itemsView),this.focusables=this.createCollection();let i=e.uiLanguageDirection===`rtl`;this._focusCycler=new Hy({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:[i?`arrowright`:`arrowleft`,`arrowup`],focusNext:[i?`arrowleft`:`arrowright`,`arrowdown`]}});let a=[`ck`,`ck-toolbar`,n.to(`class`),n.if(`isCompact`,`ck-toolbar_compact`),n.if(`isGrouping`,`ck-toolbar_grouping`),n.if(`isVertical`,`ck-toolbar_vertical`)];this.options.shouldGroupWhenFull&&this.options.isFloating&&a.push(`ck-toolbar_floating`),this.setTemplate({tag:`div`,attributes:{class:a,role:n.to(`role`),"aria-label":n.to(`ariaLabel`),style:{maxWidth:n.to(`maxWidth`)},tabindex:-1},children:this.children,on:{mousedown:Tx(this)}}),this._behavior=this.options.shouldGroupWhenFull?new jx(this):new Ax(this)}render(){super.render(),this.focusTracker.add(this.element);for(let e of this.items)this.focusTracker.add(e);this.items.on(`add`,(e,t)=>{this.focusTracker.add(t)}),this.items.on(`remove`,(e,t)=>{this.focusTracker.remove(t)}),this.keystrokes.listenTo(this.element),this._behavior.render(this)}destroy(){return this._behavior.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),super.destroy()}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}fillFromConfig(e,t,n){this.items.addMany(this._buildItemsFromConfig(e,t,n))}switchBehavior(e){this._behavior.type!==e&&(this._behavior.destroy(),this.itemsView.children.clear(),this.focusables.clear(),e===`dynamic`?(this._behavior=new jx(this),this._behavior.render(this),this._behavior.refreshItems()):(this._behavior=new Ax(this),this._behavior.render(this)))}_buildItemsFromConfig(e,t,n){let r=Ex(e),i=n||r.removeItems;return this._cleanItemsConfiguration(r.items,t,i).map(e=>Xe(e)?this._createNestedToolbarDropdown(e,t,i):e===`|`?new Cx:e===`-`?new wx:t.create(e)).filter(e=>!!e)}_cleanItemsConfiguration(e,t,n){let r=e.filter((e,r,i)=>e===`|`?!0:n.indexOf(e)===-1?e===`-`?this.options.shouldGroupWhenFull?(T(`toolbarview-line-break-ignored-when-grouping-items`,i),!1):!0:!Xe(e)&&!t.has(e)?(T(`toolbarview-item-unavailable`,{item:e}),!1):!0:!1);return this._cleanSeparatorsAndLineBreaks(r)}_cleanSeparatorsAndLineBreaks(e){let t=e=>e!==`-`&&e!==`|`,n=e.length,r=e.findIndex(t);if(r===-1)return[];let i=n-e.slice().reverse().findIndex(t);return e.slice(r,i).filter((e,n,r)=>t(e)?!0:!(n>0&&r[n-1]===e))}_createNestedToolbarDropdown(e,t,n){let{label:r,icon:i,items:a,tooltip:o=!0,withText:s=!1}=e;if(a=this._cleanItemsConfiguration(a,t,n),!a.length)return null;let c=this.locale,l=Nx(c);return r||T(`toolbarview-nested-toolbar-dropdown-missing-label`,e),l.class=`ck-toolbar__nested-toolbar-dropdown`,l.buttonView.set({label:r,tooltip:o,withText:!!s}),i===!1?l.buttonView.withText=!0:l.buttonView.icon=Dx[i]||i||Ty,Fx(l,()=>l.toolbarView._buildItemsFromConfig(a,t,n)),l}},kx=class extends P{children;constructor(e){super(e),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-toolbar__items`]},children:this.children})}},Ax=class{type=`static`;constructor(e){e.isGrouping=!1,e.itemsView.children.bindTo(e.items).using(e=>e),e.focusables.bindTo(e.items).using(e=>Wy(e)?e:null)}render(){}destroy(){}},jx=class{type=`dynamic`;view;viewChildren;viewFocusables;viewItemsView;viewFocusTracker;viewLocale;ungroupedItems;groupedItems;groupedItemsDropdown;resizeObserver=null;cachedPadding=null;shouldUpdateGroupingOnNextResize=!1;viewElement;constructor(e){this.view=e,this.viewChildren=e.children,this.viewFocusables=e.focusables,this.viewItemsView=e.itemsView,this.viewFocusTracker=e.focusTracker,this.viewLocale=e.locale,this.view.isGrouping=!0,this.ungroupedItems=e.createCollection(),this.groupedItems=e.createCollection(),this.groupedItemsDropdown=this._createGroupedItemsDropdown(),e.itemsView.children.bindTo(this.ungroupedItems).using(e=>e),this.ungroupedItems.on(`change`,this._updateFocusCyclableItems.bind(this)),e.children.on(`change`,this._updateFocusCyclableItems.bind(this)),e.items.on(`change`,(e,t)=>{let n=t.index,r=Array.from(t.added);for(let e of t.removed)n>=this.ungroupedItems.length?this.groupedItems.remove(e):this.ungroupedItems.remove(e);for(let e=n;ethis.ungroupedItems.length?this.groupedItems.add(t,e-this.ungroupedItems.length):this.ungroupedItems.add(t,e)}this._updateGrouping()})}render(e){this.viewElement=e.element,this._enableGroupingOnResize(),this._enableGroupingOnMaxWidthChange(e)}destroy(){this.groupedItemsDropdown.destroy(),this.viewChildren.length>1&&(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last)),this.resizeObserver.destroy()}refreshItems(){let e=this.view;if(e.items.length){for(let t=0;tr.right-this.cachedPadding:n.left{(!e||e!==t.contentRect.width||this.shouldUpdateGroupingOnNextResize)&&(this.shouldUpdateGroupingOnNextResize=!1,this._updateGrouping(),e=t.contentRect.width)}),this._updateGrouping()}_enableGroupingOnMaxWidthChange(e){e.on(`change:maxWidth`,()=>{this._updateGrouping()})}_groupLastItem(){this.groupedItems.length||(this.viewChildren.add(new Cx),this.viewChildren.add(this.groupedItemsDropdown),this.viewFocusTracker.add(this.groupedItemsDropdown.element)),this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last),0)}_ungroupFirstItem(){this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first)),this.groupedItems.length||(this.viewChildren.remove(this.groupedItemsDropdown),this.viewChildren.remove(this.viewChildren.last),this.viewFocusTracker.remove(this.groupedItemsDropdown.element))}_createGroupedItemsDropdown(){let e=this.viewLocale,t=e.t,n=Nx(e);return n.class=`ck-toolbar__grouped-dropdown`,n.panelPosition=e.uiLanguageDirection===`ltr`?`sw`:`se`,Fx(n,this.groupedItems),n.buttonView.set({label:t(`Show more items`),tooltip:!0,tooltipPosition:e.uiLanguageDirection===`rtl`?`se`:`sw`,icon:Ty}),n}_updateFocusCyclableItems(){this.viewFocusables.clear(),this.ungroupedItems.map(e=>{Wy(e)&&this.viewFocusables.add(e)}),this.groupedItems.length&&this.viewFocusables.add(this.groupedItemsDropdown)}},Mx=class extends P{children;actionView;arrowView;keystrokes;focusTracker;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`class`,void 0),this.set(`labelStyle`,void 0),this.set(`icon`,void 0),this.set(`isEnabled`,!0),this.set(`isOn`,!1),this.set(`isToggleable`,!1),this.set(`isVisible`,!0),this.set(`keystroke`,void 0),this.set(`withKeystroke`,!1),this.set(`label`,void 0),this.set(`tabindex`,-1),this.set(`tooltip`,!1),this.set(`tooltipPosition`,`s`),this.set(`type`,`button`),this.set(`withText`,!1),this.children=this.createCollection(),this.actionView=this._createActionView(t),this.arrowView=this._createArrowView(),this.keystrokes=new N,this.focusTracker=new M,this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-splitbutton`,n.to(`class`),n.if(`isVisible`,`ck-hidden`,e=>!e),this.arrowView.bindTemplate.if(`isOn`,`ck-splitbutton_open`)]},children:this.children})}render(){super.render(),this.children.add(this.actionView),this.children.add(this.arrowView),this.focusTracker.add(this.actionView.element),this.focusTracker.add(this.arrowView.element),this.keystrokes.listenTo(this.element),this.keystrokes.set(`arrowright`,(e,t)=>{this.focusTracker.focusedElement===this.actionView.element&&(this.arrowView.focus(),t())}),this.keystrokes.set(`arrowleft`,(e,t)=>{this.focusTracker.focusedElement===this.arrowView.element&&(this.actionView.focus(),t())})}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.actionView.focus()}_createActionView(e){let t=e||new H;return e||t.bind(`icon`,`isEnabled`,`isOn`,`isToggleable`,`keystroke`,`label`,`tabindex`,`tooltip`,`tooltipPosition`,`type`,`withText`).to(this),t.extendTemplate({attributes:{class:`ck-splitbutton__action`}}),t.delegate(`execute`).to(this),t}_createArrowView(){let e=new H,t=e.bindTemplate;return e.icon=b_,e.extendTemplate({attributes:{class:[`ck-splitbutton__arrow`],"data-cke-tooltip-disabled":t.to(`isOn`),"aria-haspopup":!0,"aria-expanded":t.to(`isOn`,e=>String(e))}}),e.bind(`isEnabled`).to(this),e.bind(`label`).to(this),e.bind(`tooltip`).to(this),e.delegate(`execute`).to(this,`open`),e}};function Nx(e,t=cx){let n=typeof t==`function`?new t(e):t,r=new sx(e,n,new ox(e));return n.bind(`isEnabled`).to(r),n instanceof Mx?n.arrowView.bind(`isOn`).to(r,`isOpen`):n.bind(`isOn`).to(r,`isOpen`),Ite(r),r}function Fte(e,t,n,r={}){e.menuView=new Sx(e.locale,t,n),e.focusTracker.add(e.menuView),e.isOpen?Px(e,r):e.once(`change:isOpen`,()=>{Px(e,r)},{priority:`highest`})}function Px(e,t){let n=e.menuView,r=e.locale.t;n.delegate(`menu:execute`).to(e,`execute`),n.listenTo(e,`change:isOpen`,(e,t,r)=>{r||n.closeMenus()},{priority:`low`}),e.panelView.children.add(n);for(let t of n.menus)e.focusTracker.add(t);n.ariaLabel=t.ariaLabel||r(`Dropdown menu`)}function Fx(e,t,n={}){e.extendTemplate({attributes:{class:[`ck-toolbar-dropdown`]}}),e.isOpen?Ix(e,t,n):e.once(`change:isOpen`,()=>Ix(e,t,n),{priority:`highest`}),n.enableActiveItemFocusOnDropdownOpen&&zx(e,()=>e.toolbarView.items.find(e=>e.isOn))}function Ix(e,t,n){let r=e.locale,i=r.t,a=e.toolbarView=new Ox(r),o=typeof t==`function`?t():t;a.ariaLabel=n.ariaLabel||i(`Dropdown toolbar`),n.maxWidth&&(a.maxWidth=n.maxWidth),n.class&&(a.class=n.class),n.isCompact&&(a.isCompact=n.isCompact),n.isVertical&&(a.isVertical=!0),o instanceof pa?a.items.bindTo(o).using(e=>e):a.items.addMany(o),e.panelView.children.add(a),e.focusTracker.add(a),a.items.delegate(`execute`).to(e)}function Lx(e,t,n={}){e.isOpen?Rx(e,t,n):e.once(`change:isOpen`,()=>Rx(e,t,n),{priority:`highest`}),zx(e,()=>e.listView.items.find(e=>e instanceof dx?e.children.first.isOn:!1))}function Rx(e,t,n){let r=e.locale,i=e.listView=new mx(r),a=typeof t==`function`?t():t;i.ariaLabel=n.ariaLabel,i.role=n.role,Kx(e,i.items,a,r),e.panelView.children.add(i),i.items.delegate(`execute`).to(e)}function zx(e,t){e.on(`change:isOpen`,()=>{if(!e.isOpen)return;let n=t();n&&(typeof n.focus==`function`?n.focus():T(`ui-dropdown-focus-child-on-open-child-missing-focus`,{view:n}))},{priority:ge.low-10})}function Ite(e){Lte(e),Vx(e),Hx(e),Ux(e),Wx(e),Gx(e)}function Lte(e){Ya({emitter:e,activator:()=>e.isRendered&&e.isOpen,callback:()=>{e.isOpen=!1},contextElements:()=>[e.element,...Bx(e.focusTracker).filter(t=>!e.element.contains(t))]})}function Bx(e){return[...e.elements,...e.externalViews.flatMap(e=>Bx(e.focusTracker))]}function Vx(e){e.on(`execute`,t=>{t.source instanceof mb||(e.isOpen=!1)})}function Hx(e){e.focusTracker.on(`change:isFocused`,(t,n,r)=>{r||!e.isOpen||(e.isOpen=!1)})}function Ux(e){e.keystrokes.set(`arrowdown`,(t,n)=>{e.isOpen&&(e.panelView.focus(),n())}),e.keystrokes.set(`arrowup`,(t,n)=>{e.isOpen&&(e.panelView.focusLast(),n())})}function Wx(e){e.on(`change:isOpen`,(t,n,r)=>{r||e.focusTracker.elements.some(e=>e.contains(u.document.activeElement))&&e.buttonView.focus()})}function Gx(e){e.on(`change:isOpen`,(t,n,r)=>{r&&e.panelView.focus()},{priority:`low`})}function Kx(e,t,n,r){qx(t),t.bindTo(n).using(t=>{if(t.type===`separator`)return new fx(r);if(t.type===`group`){let n=new px(r);return n.set({label:t.label}),Kx(e,n.items,t.items,r),n.items.delegate(`execute`).to(e),n}else if(t.type===`button`||t.type===`switchbutton`){let e=t.model.role===`menuitemcheckbox`||t.model.role===`menuitemradio`,n=new dx(r),i;return t.type===`button`?(i=new $y(r,t.labelView),i.set({isToggleable:e})):i=new mb(r),i.bind(...Object.keys(t.model)).to(t.model),i.delegate(`execute`).to(n),n.children.add(i),n}return null})}function qx(e){let t=0,n=e=>!(e instanceof dx)||!(e.children.first instanceof $y)?null:e.children.first,r=e=>{let t=n(e);return!t||!t.isToggleable?null:t},i=t=>{for(let r of e){let e=n(r);e&&(e.hasCheckSpace=t)}};e.on(`change`,(e,a)=>{let o=t>0;for(let e of a.removed)r(e)&&t--;for(let e of a.added){let r=n(e);r&&(r.isToggleable&&t++,r.hasCheckSpace=t>0)}let s=t>0;o!==s&&i(s)})}const Jx=(e,t,n)=>{let r=new nx(e.locale);return r.set({id:t,ariaDescribedById:n}),r.bind(`isReadOnly`).to(e,`isEnabled`,e=>!e),r.bind(`hasError`).to(e,`errorText`,e=>!!e),r.on(`input`,()=>{e.errorText=null}),e.bind(`isEmpty`,`isFocused`,`placeholder`).to(r),r},Yx=(e,t,n)=>{let r=new rx(e.locale);return r.set({id:t,ariaDescribedById:n,inputMode:`numeric`}),r.bind(`isReadOnly`).to(e,`isEnabled`,e=>!e),r.bind(`hasError`).to(e,`errorText`,e=>!!e),r.on(`input`,()=>{e.errorText=null}),e.bind(`isEmpty`,`isFocused`,`placeholder`).to(r),r},Xx=(e,t,n)=>{let r=new ix(e.locale);return r.set({id:t,ariaDescribedById:n}),r.bind(`isReadOnly`).to(e,`isEnabled`,e=>!e),r.bind(`hasError`).to(e,`errorText`,e=>!!e),r.on(`input`,()=>{e.errorText=null}),e.bind(`isEmpty`,`isFocused`,`placeholder`).to(r),r},Zx=(e,t,n)=>{let r=Nx(e.locale);return r.set({id:t,ariaDescribedById:n}),r.bind(`isEnabled`).to(e),r},Qx=(e,t=0,n=1)=>e>n?n:eMath.round(n*e)/n;360/(Math.PI*2);const eS=e=>cS(tS(e)),tS=e=>(e[0]===`#`&&(e=e.substring(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:e.length===4?$x(parseInt(e[3]+e[3],16)/255,2):1}:{r:parseInt(e.substring(0,2),16),g:parseInt(e.substring(2,4),16),b:parseInt(e.substring(4,6),16),a:e.length===8?$x(parseInt(e.substring(6,8),16)/255,2):1}),nS=e=>sS(aS(e)),rS=({h:e,s:t,v:n,a:r})=>{let i=(200-t)*n/100;return{h:$x(e),s:$x(i>0&&i<200?t*n/100/(i<=100?i:200-i)*100:0),l:$x(i/2),a:$x(r,2)}},iS=e=>{let{h:t,s:n,l:r}=rS(e);return`hsl(${t}, ${n}%, ${r}%)`},aS=({h:e,s:t,v:n,a:r})=>{e=e/360*6,t/=100,n/=100;let i=Math.floor(e),a=n*(1-t),o=n*(1-(e-i)*t),s=n*(1-(1-e+i)*t),c=i%6;return{r:$x([n,o,a,a,s,n][c]*255),g:$x([s,n,n,o,a,a][c]*255),b:$x([a,a,s,n,n,o][c]*255),a:$x(r,2)}},oS=e=>{let t=e.toString(16);return t.length<2?`0`+t:t},sS=({r:e,g:t,b:n,a:r})=>{let i=r<1?oS($x(r*255)):``;return`#`+oS(e)+oS(t)+oS(n)+i},cS=({r:e,g:t,b:n,a:r})=>{let i=Math.max(e,t,n),a=i-Math.min(e,t,n),o=a?i===e?(t-n)/a:i===t?2+(n-e)/a:4+(e-t)/a:0;return{h:$x(60*(o<0?o+6:o)),s:$x(i?a/i*100:0),v:$x(i/255*100),a:r}},lS=(e,t)=>{if(e===t)return!0;for(let n in e)if(e[n]!==t[n])return!1;return!0},uS=(e,t)=>e.toLowerCase()===t.toLowerCase()?!0:lS(tS(e),tS(t)),dS={},fS=e=>{let t=dS[e];return t||(t=document.createElement(`template`),t.innerHTML=e,dS[e]=t),t},pS=(e,t,n)=>{e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:n}))};let mS=!1;const hS=e=>`touches`in e,gS=e=>mS&&!hS(e)?!1:(mS||=hS(e),!0),_S=(e,t)=>{let n=hS(t)?t.touches[0]:t,r=e.el.getBoundingClientRect();pS(e.el,`move`,e.getMove({x:Qx((n.pageX-(r.left+window.pageXOffset))/r.width),y:Qx((n.pageY-(r.top+window.pageYOffset))/r.height)}))},vS=(e,t)=>{let n=t.keyCode;n>40||e.xy&&n<37||n<33||(t.preventDefault(),pS(e.el,`move`,e.getMove({x:n===39?.01:n===37?-.01:n===34?.05:n===33?-.05:n===35?1:n===36?-1:0,y:n===40?.01:n===38?-.01:0},!0)))};var yS=class{constructor(e,t,n,r){let i=fS(`
    `);e.appendChild(i.content.cloneNode(!0));let a=e.querySelector(`[part=${t}]`);a.addEventListener(`mousedown`,this),a.addEventListener(`touchstart`,this),a.addEventListener(`keydown`,this),this.el=a,this.xy=r,this.nodes=[a.firstChild,a]}set dragging(e){let t=e?document.addEventListener:document.removeEventListener;t(mS?`touchmove`:`mousemove`,this),t(mS?`touchend`:`mouseup`,this)}handleEvent(e){switch(e.type){case`mousedown`:case`touchstart`:if(e.preventDefault(),!gS(e)||!mS&&e.button!=0)return;this.el.focus(),_S(this,e),this.dragging=!0;break;case`mousemove`:case`touchmove`:e.preventDefault(),_S(this,e);break;case`mouseup`:case`touchend`:this.dragging=!1;break;case`keydown`:vS(this,e);break}}style(e){e.forEach((e,t)=>{for(let n in e)this.nodes[t].style.setProperty(n,e[n])})}},bS=class extends yS{constructor(e){super(e,`hue`,`aria-label="Hue" aria-valuemin="0" aria-valuemax="360"`,!1)}update({h:e}){this.h=e,this.style([{left:`${e/360*100}%`,color:iS({h:e,s:100,v:100,a:1})}]),this.el.setAttribute(`aria-valuenow`,`${$x(e)}`)}getMove(e,t){return{h:t?Qx(this.h+e.x*360,0,360):360*e.x}}},xS=class extends yS{constructor(e){super(e,`saturation`,`aria-label="Color"`,!0)}update(e){this.hsva=e,this.style([{top:`${100-e.v}%`,left:`${e.s}%`,color:iS(e)},{"background-color":iS({h:e.h,s:100,v:100,a:1})}]),this.el.setAttribute(`aria-valuetext`,`Saturation ${$x(e.s)}%, Brightness ${$x(e.v)}%`)}getMove(e,t){return{s:t?Qx(this.hsva.s+e.x*100,0,100):e.x*100,v:t?Qx(this.hsva.v-e.y*100,0,100):Math.round(100-e.y*100)}}},SS=`:host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:"";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}`,CS=`[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}`,wS=`[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}`;const TS=Symbol(`same`),ES=Symbol(`color`),DS=Symbol(`hsva`),OS=Symbol(`update`),kS=Symbol(`parts`),AS=Symbol(`css`),jS=Symbol(`sliders`);var MS=class extends HTMLElement{static get observedAttributes(){return[`color`]}get[AS](){return[SS,CS,wS]}get[jS](){return[xS,bS]}get color(){return this[ES]}set color(e){if(!this[TS](e)){let t=this.colorModel.toHsva(e);this[OS](t),this[ES]=e}}constructor(){super();let e=fS(``),t=this.attachShadow({mode:`open`});t.appendChild(e.content.cloneNode(!0)),t.addEventListener(`move`,this),this[kS]=this[jS].map(e=>new e(t))}connectedCallback(){if(this.hasOwnProperty(`color`)){let e=this.color;delete this.color,this.color=e}else this.color||=this.colorModel.defaultColor}attributeChangedCallback(e,t,n){let r=this.colorModel.fromAttr(n);this[TS](r)||(this.color=r)}handleEvent(e){let t=this[DS],n={...t,...e.detail};this[OS](n);let r;!lS(n,t)&&!this[TS](r=this.colorModel.fromHsva(n))&&(this[ES]=r,pS(this,`color-changed`,{value:r}))}[TS](e){return this.color&&this.colorModel.equal(e,this.color)}[OS](e){this[DS]=e,this[kS].forEach(t=>t.update(e))}};const NS={defaultColor:`#000`,toHsva:eS,fromHsva:({h:e,s:t,v:n})=>nS({h:e,s:t,v:n,a:1}),equal:uS,fromAttr:e=>e};var PS=class extends MS{get colorModel(){return NS}},FS=class extends P{hexInputRow;_debounceColorPickerEvent;_config;constructor(e,t={}){super(e),this.set({color:``,_hexColor:``}),this.hexInputRow=this._createInputRow();let n=this.createCollection();t.hideInput||n.add(this.hexInputRow),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-color-picker`],tabindex:-1},children:n}),this._config=t,this._debounceColorPickerEvent=Kt(e=>{this.set(`color`,e),this.fire(`colorSelected`,{color:this.color})},150,{leading:!0}),this.on(`set:color`,(e,t,n)=>{e.return=Kb(n,this._config.format||`hsl`)}),this.on(`change:color`,()=>{this._hexColor=IS(this.color)}),this.on(`change:_hexColor`,()=>{document.activeElement!==this.picker&&this.picker.setAttribute(`color`,this._hexColor),IS(this.color)!=IS(this._hexColor)&&(this.color=this._hexColor)})}render(){if(super.render(),Jb(`hex-color-picker`,PS),this.picker=u.document.createElement(`hex-color-picker`),this.picker.setAttribute(`class`,`hex-color-picker`),this.picker.setAttribute(`tabindex`,`-1`),this._createSlidersView(),this.element){this.hexInputRow.element?this.element.insertBefore(this.picker,this.hexInputRow.element):this.element.appendChild(this.picker);let e=document.createElement(`style`);e.textContent=`[role="slider"]:focus [part$="pointer"] {border: 1px solid #fff;outline: 1px solid var(--ck-color-focus-border);box-shadow: 0 0 0 2px #fff;}`,this.picker.shadowRoot.appendChild(e)}this.picker.addEventListener(`color-changed`,e=>{let t=e.detail.value;this._debounceColorPickerEvent(t)})}focus(){!this._config.hideInput&&(p.isGecko||p.isiOS||p.isSafari||p.isBlink)&&this.hexInputRow.children.get(1).focus(),this.slidersView.first.focus()}_createSlidersView(){let e=[...this.picker.shadowRoot.children].filter(e=>e.getAttribute(`role`)===`slider`).map(e=>new LS(e));this.slidersView=this.createCollection(),e.forEach(e=>{this.slidersView.add(e)})}_createInputRow(){let e=this._createColorInput();return new zS(this.locale,e)}_createColorInput(){let e=new Qb(this.locale,Jx),{t}=this.locale;return e.set({label:t(`HEX`),class:`color-picker-hex-input`}),e.fieldView.bind(`value`).to(this,`_hexColor`,t=>e.isFocused?e.fieldView.value:t.startsWith(`#`)?t.substring(1):t),e.fieldView.on(`input`,()=>{let t=e.fieldView.element.value;if(t){let e=BS(t);e&&this._debounceColorPickerEvent(e)}}),e}isValid(){let{t:e}=this.locale;return this._config.hideInput?!0:(this.resetValidationStatus(),this.hexInputRow.getParsedColor()?!0:(this.hexInputRow.inputView.errorText=e(`Please enter a valid color (e.g. "ff0000").`),!1))}resetValidationStatus(){this.hexInputRow.inputView.errorText=null}};function IS(e){let t=qb(e);return t||=`#000`,t.length===4&&(t=`#`+[t[1],t[1],t[2],t[2],t[3],t[3]].join(``)),t.toLowerCase()}var LS=class extends P{constructor(e){super(),this.element=e}focus(){this.element.focus()}},RS=class extends P{constructor(e){super(e),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-color-picker__hash-view`]},children:`#`})}},zS=class extends P{children;inputView;constructor(e,t){super(e),this.inputView=t,this.children=this.createCollection([new RS,this.inputView]),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-color-picker__row`]},children:this.children})}getParsedColor(){return BS(this.inputView.fieldView.element.value)}};function BS(e){if(!e)return null;let t=e.trim().replace(/^#/,``);return![3,4,6,8].includes(t.length)||!/^(([0-9a-fA-F]{2}){3,4}|([0-9a-fA-F]){3,4})$/.test(t)?null:`#${t}`}const VS=D(Fi);var HS=class extends VS{constructor(e){super(e),this.set(`isEmpty`,!0),this.on(`change`,()=>{this.set(`isEmpty`,this.length===0)})}add(e,t){return this.find(t=>t.color===e.color)?this:super.add(e,t)}hasColor(e){return!!this.find(t=>t.color===e)}},US=class extends P{items;colorDefinitions;focusTracker;columns;documentColors;documentColorsCount;staticColorsGrid;documentColorsGrid;colorPickerButtonView;removeColorButtonView;_focusables;_documentColorsLabel;_removeButtonLabel;_colorPickerLabel;constructor(e,{colors:t,columns:n,removeButtonLabel:r,documentColorsLabel:i,documentColorsCount:a,colorPickerLabel:o,focusTracker:s,focusables:c}){super(e);let l=this.bindTemplate;this.set(`isVisible`,!0),this.focusTracker=s,this.items=this.createCollection(),this.colorDefinitions=t,this.columns=n,this.documentColors=new HS,this.documentColorsCount=a,this._focusables=c,this._removeButtonLabel=r,this._colorPickerLabel=o,this._documentColorsLabel=i,this.setTemplate({tag:`div`,attributes:{class:[`ck-color-grids-fragment`,l.if(`isVisible`,`ck-hidden`,e=>!e)]},children:this.items}),this.removeColorButtonView=this._createRemoveColorButton(),this.items.add(this.removeColorButtonView)}updateDocumentColors(e,t){let n=e.document,r=this.documentColorsCount;this.documentColors.clear();for(let i of n.getRoots()){let n=e.createRangeIn(i);for(let e of n.getItems())if(e.is(`$textProxy`)&&e.hasAttribute(t)&&(this._addColorToDocumentColors(e.getAttribute(t)),this.documentColors.length>=r))return}}updateSelectedColors(){let e=this.documentColorsGrid,t=this.staticColorsGrid,n=this.selectedColor;t.selectedColor=n,e&&(e.selectedColor=n)}render(){if(super.render(),this.staticColorsGrid=this._createStaticColorsGrid(),this.items.add(this.staticColorsGrid),this.documentColorsCount){let e=ga.bind(this.documentColors,this.documentColors),t=new P(this.locale);t.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-color-grid__label`,e.if(`isEmpty`,`ck-hidden`)]},children:[{text:this._documentColorsLabel}]}),this.items.add(t),this.documentColorsGrid=this._createDocumentColorsGrid(),this.items.add(this.documentColorsGrid)}this._createColorPickerButton(),this._addColorSelectorElementsToFocusTracker()}focus(){this.removeColorButtonView.focus()}destroy(){super.destroy()}addColorPickerButton(){this.colorPickerButtonView&&(this.items.add(this.colorPickerButtonView),this.focusTracker.add(this.colorPickerButtonView.element),this._focusables.add(this.colorPickerButtonView))}_addColorSelectorElementsToFocusTracker(){this.focusTracker.add(this.removeColorButtonView.element),this._focusables.add(this.removeColorButtonView),this.staticColorsGrid&&(this.focusTracker.add(this.staticColorsGrid.element),this._focusables.add(this.staticColorsGrid)),this.documentColorsGrid&&(this.focusTracker.add(this.documentColorsGrid.element),this._focusables.add(this.documentColorsGrid))}_createColorPickerButton(){this.colorPickerButtonView=new H,this.colorPickerButtonView.set({label:this._colorPickerLabel,withText:!0,icon:p_,class:`ck-color-selector__color-picker`}),this.colorPickerButtonView.on(`execute`,()=>{this.fire(`colorPicker:show`)})}_createRemoveColorButton(){let e=new H;return e.set({withText:!0,icon:S_,label:this._removeButtonLabel}),e.class=`ck-color-selector__remove-color`,e.on(`execute`,()=>{this.fire(`execute`,{value:null,source:`removeColorButton`})}),e.render(),e}_createStaticColorsGrid(){let e=new Eb(this.locale,{colorDefinitions:this.colorDefinitions,columns:this.columns});return e.on(`execute`,(e,t)=>{this.fire(`execute`,{value:t.value,source:`staticColorsGrid`})}),e}_createDocumentColorsGrid(){let e=ga.bind(this.documentColors,this.documentColors),t=new Eb(this.locale,{columns:this.columns});return t.extendTemplate({attributes:{class:e.if(`isEmpty`,`ck-hidden`)}}),t.items.bindTo(this.documentColors).using(e=>{let t=new Tb;return t.set({color:e.color,hasBorder:e.options?.hasBorder}),e.label&&t.set({label:e.label,tooltip:!0}),t.on(`execute`,()=>{this.fire(`execute`,{value:e.color,source:`documentColorsGrid`})}),t}),this.documentColors.on(`change:isEmpty`,(e,n,r)=>{r&&(t.selectedColor=null)}),t}_addColorToDocumentColors(e){let t=this.colorDefinitions.find(t=>t.color===e);t?this.documentColors.add(Object.assign({},t)):this.documentColors.add({color:e,label:e,options:{hasBorder:!1}})}},WS=class extends P{items;colorPickerView;saveButtonView;cancelButtonView;actionBarView;focusTracker;keystrokes;_focusables;_colorPickerViewConfig;constructor(e,{focusTracker:t,focusables:n,keystrokes:r,colorPickerViewConfig:i}){super(e),this.items=this.createCollection(),this.focusTracker=t,this.keystrokes=r,this.set(`isVisible`,!1),this.set(`selectedColor`,void 0),this._focusables=n,this._colorPickerViewConfig=i;let a=this.bindTemplate,{saveButtonView:o,cancelButtonView:s}=this._createActionButtons();this.saveButtonView=o,this.cancelButtonView=s,this.actionBarView=this._createActionBarView({saveButtonView:o,cancelButtonView:s}),this.setTemplate({tag:`div`,attributes:{class:[`ck-color-picker-fragment`,a.if(`isVisible`,`ck-hidden`,e=>!e)]},children:this.items})}render(){super.render();let e=new FS(this.locale,{...this._colorPickerViewConfig});this.colorPickerView=e,this.colorPickerView.render(),this.selectedColor&&(e.color=this.selectedColor),this.listenTo(this,`change:selectedColor`,(t,n,r)=>{e.color=r}),this.items.add(this.colorPickerView),this.items.add(this.actionBarView),this._addColorPickersElementsToFocusTracker(),this._stopPropagationOnArrowsKeys(),this._executeOnEnterPress(),this._executeUponColorChange()}destroy(){super.destroy()}focus(){this.colorPickerView.focus()}resetValidationStatus(){this.colorPickerView.resetValidationStatus()}_executeOnEnterPress(){this.keystrokes.set(`enter`,e=>{this.isVisible&&this.focusTracker.focusedElement!==this.cancelButtonView.element&&this.colorPickerView.isValid()&&(this.fire(`execute`,{value:this.selectedColor}),e.stopPropagation(),e.preventDefault())})}_stopPropagationOnArrowsKeys(){let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}_addColorPickersElementsToFocusTracker(){for(let e of this.colorPickerView.slidersView)this.focusTracker.add(e.element),this._focusables.add(e);let e=this.colorPickerView.hexInputRow.children.get(1);e.element&&(this.focusTracker.add(e.element),this._focusables.add(e)),this.focusTracker.add(this.saveButtonView.element),this._focusables.add(this.saveButtonView),this.focusTracker.add(this.cancelButtonView.element),this._focusables.add(this.cancelButtonView)}_createActionBarView({saveButtonView:e,cancelButtonView:t}){let n=new P,r=this.createCollection();return r.add(e),r.add(t),n.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-color-selector_action-bar`]},children:r}),n}_createActionButtons(){let e=this.locale,t=e.t,n=new H(e),r=new H(e);return n.set({icon:l_,class:`ck-button-save`,type:`button`,withText:!1,label:t(`Accept`)}),r.set({icon:s_,class:`ck-button-cancel`,type:`button`,withText:!1,label:t(`Cancel`)}),n.on(`execute`,()=>{this.colorPickerView.isValid()&&this.fire(`execute`,{source:`colorPickerSaveButton`,value:this.selectedColor})}),r.on(`execute`,()=>{this.fire(`colorPicker:cancel`)}),{saveButtonView:n,cancelButtonView:r}}_executeUponColorChange(){this.colorPickerView.on(`colorSelected`,(e,t)=>{this.fire(`execute`,{value:t.color,source:`colorPicker`}),this.set(`selectedColor`,t.color)})}},GS=class extends P{focusTracker;keystrokes;items;colorGridsFragmentView;colorPickerFragmentView;_focusCycler;_focusables;_colorPickerViewConfig;constructor(e,{colors:t,columns:n,removeButtonLabel:r,documentColorsLabel:i,documentColorsCount:a,colorPickerLabel:o,colorPickerViewConfig:s}){super(e),this.items=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this._focusables=new pa,this._colorPickerViewConfig=s,this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.colorGridsFragmentView=new US(e,{colors:t,columns:n,removeButtonLabel:r,documentColorsLabel:i,documentColorsCount:a,colorPickerLabel:o,focusTracker:this.focusTracker,focusables:this._focusables}),this.colorPickerFragmentView=new WS(e,{focusables:this._focusables,focusTracker:this.focusTracker,keystrokes:this.keystrokes,colorPickerViewConfig:s}),this.set(`_isColorGridsFragmentVisible`,!0),this.set(`_isColorPickerFragmentVisible`,!1),this.set(`selectedColor`,void 0),this.colorGridsFragmentView.bind(`isVisible`).to(this,`_isColorGridsFragmentVisible`),this.colorPickerFragmentView.bind(`isVisible`).to(this,`_isColorPickerFragmentVisible`),this.on(`change:selectedColor`,(e,t,n)=>{this.colorGridsFragmentView.set(`selectedColor`,n),this.colorPickerFragmentView.set(`selectedColor`,n)}),this.colorGridsFragmentView.on(`change:selectedColor`,(e,t,n)=>{this.set(`selectedColor`,n)}),this.colorPickerFragmentView.on(`change:selectedColor`,(e,t,n)=>{this.set(`selectedColor`,n)}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-color-selector`]},children:this.items})}render(){super.render(),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}appendUI(){this._appendColorGridsFragment(),this._colorPickerViewConfig&&this._appendColorPickerFragment()}showColorPickerFragment(){!this.colorPickerFragmentView.colorPickerView||this._isColorPickerFragmentVisible||(this._isColorPickerFragmentVisible=!0,this.colorPickerFragmentView.focus(),this.colorPickerFragmentView.resetValidationStatus(),this._isColorGridsFragmentVisible=!1)}showColorGridsFragment(){this._isColorGridsFragmentVisible||(this._isColorGridsFragmentVisible=!0,this.colorGridsFragmentView.focus(),this._isColorPickerFragmentVisible=!1)}focus(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}updateDocumentColors(e,t){this.colorGridsFragmentView.updateDocumentColors(e,t)}updateSelectedColors(){this.colorGridsFragmentView.updateSelectedColors()}_appendColorGridsFragment(){this.items.length||(this.items.add(this.colorGridsFragmentView),this.colorGridsFragmentView.delegate(`execute`).to(this),this.colorGridsFragmentView.delegate(`colorPicker:show`).to(this))}_appendColorPickerFragment(){this.items.length!==2&&(this.items.add(this.colorPickerFragmentView),this.colorGridsFragmentView.colorPickerButtonView&&this.colorGridsFragmentView.colorPickerButtonView.on(`execute`,()=>{this.showColorPickerFragment()}),this.colorGridsFragmentView.addColorPickerButton(),this.colorPickerFragmentView.delegate(`execute`).to(this),this.colorPickerFragmentView.delegate(`colorPicker:cancel`).to(this))}},KS=class{editor;_components=new Map;constructor(e){this.editor=e}*names(){for(let e of this._components.values())yield e.originalName}add(e,t){this._components.set(qS(e),{callback:t,originalName:e})}create(e){if(!this.has(e))throw new w(`componentfactory-item-missing`,this,{name:e});return this._components.get(qS(e)).callback(this.editor.locale)}has(e){return this._components.has(qS(e))}};function qS(e){return String(e).toLowerCase()}const JS=`ck-tooltip`,YS=br();var XS=class e extends YS{tooltipTextView;balloonPanelView;static defaultBalloonPositions=ab.generatePositions({heightOffset:5,sideOffset:13});_currentElementWithTooltip=null;_currentTooltipPosition=null;_mutationObserver=null;_pinTooltipDebounced;_unpinTooltipDebounced;_watchdogExcluded;static _editors=new Set;static _instance=null;constructor(t){if(super(),e._editors.add(t),e._instance)return e._instance;e._instance=this,this.tooltipTextView=new P(t.locale),this.tooltipTextView.set(`text`,``),this.tooltipTextView.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-tooltip__text`]},children:[{text:this.tooltipTextView.bindTemplate.to(`text`)}]}),this.balloonPanelView=new ab(t.locale),this.balloonPanelView.class=JS,this.balloonPanelView.content.add(this.tooltipTextView),this._mutationObserver=$S(()=>{this._updateTooltipPosition()}),this._pinTooltipDebounced=Kt(this._pinTooltip,600),this._unpinTooltipDebounced=Kt(this._unpinTooltip,400),this.listenTo(u.document,`keydown`,this._onKeyDown.bind(this),{useCapture:!0}),this.listenTo(u.document,`mouseenter`,this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo(u.document,`mouseleave`,this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo(u.document,`focus`,this._onEnterOrFocus.bind(this),{useCapture:!0}),this.listenTo(u.document,`blur`,this._onLeaveOrBlur.bind(this),{useCapture:!0}),this.listenTo(u.document,`scroll`,this._onScroll.bind(this),{useCapture:!0}),this._watchdogExcluded=!0}destroy(t){let n=t.ui.view&&t.ui.view.body;e._editors.delete(t),this.stopListening(t.ui),n&&n.has(this.balloonPanelView)&&n.remove(this.balloonPanelView),e._editors.size||(this._unpinTooltip(),this.balloonPanelView.destroy(),this.stopListening(),e._instance=null)}static getPositioningFunctions(t){let n=e.defaultBalloonPositions;return{s:[n.southArrowNorth,n.southArrowNorthEast,n.southArrowNorthWest],n:[n.northArrowSouth],e:[n.eastArrowWest],w:[n.westArrowEast],sw:[n.southArrowNorthEast],se:[n.southArrowNorthWest]}[t]}_onKeyDown(e,t){t.key===`Escape`&&this._currentElementWithTooltip&&(this._unpinTooltip(),t.stopPropagation())}_onEnterOrFocus(e,{target:t}){let n=ZS(t);if(!n){e.name===`focus`&&this._unpinTooltip();return}if(n===this._currentElementWithTooltip){this._unpinTooltipDebounced.cancel();return}this._unpinTooltip(),e.name===`focus`&&!n.matches(`:hover`)||n.matches(`[data-cke-tooltip-instant]`)?this._pinTooltip(n,QS(n)):this._pinTooltipDebounced(n,QS(n))}_onLeaveOrBlur(e,{target:t,relatedTarget:n}){if(e.name===`mouseleave`){if(!jn(t))return;let e=this.balloonPanelView.element,r=e&&(e===n||e.contains(n)),i=!r&&t===e;if(r){this._unpinTooltipDebounced.cancel();return}if(!i&&this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;let a=ZS(t),o=ZS(n);(i||a&&a!==o)&&(this._pinTooltipDebounced.cancel(),this._currentElementWithTooltip&&this._currentElementWithTooltip.matches(`[data-cke-tooltip-instant]`)||a&&a.matches(`[data-cke-tooltip-instant]`)?this._unpinTooltip():this._unpinTooltipDebounced())}else{if(this._currentElementWithTooltip&&t!==this._currentElementWithTooltip)return;this._pinTooltipDebounced.cancel(),this._unpinTooltipDebounced()}}_onScroll(e,{target:t}){this._currentElementWithTooltip&&(t.contains(this.balloonPanelView.element)&&t.contains(this._currentElementWithTooltip)||this._unpinTooltip())}_pinTooltip(t,{text:n,position:r,cssClass:i}){this._unpinTooltip();let a=j(e._editors.values()).ui.view.body;a.has(this.balloonPanelView)||a.add(this.balloonPanelView),this.tooltipTextView.text=n,this.balloonPanelView.class=[JS,i].filter(e=>e).join(` `),this.balloonPanelView.pin({target:t,positions:e.getPositioningFunctions(r)}),this._mutationObserver.attach(t);for(let t of e._editors)this.listenTo(t.ui,`update`,this._updateTooltipPosition.bind(this),{priority:`low`});this._currentElementWithTooltip=t,this._currentTooltipPosition=r}_unpinTooltip(){this._unpinTooltipDebounced.cancel(),this._pinTooltipDebounced.cancel(),this.balloonPanelView.unpin();for(let t of e._editors)this.stopListening(t.ui,`update`);this._currentElementWithTooltip=null,this._currentTooltipPosition=null,this.tooltipTextView.text=``,this._mutationObserver.detach()}_updateTooltipPosition(){if(!this._currentElementWithTooltip)return;let t=QS(this._currentElementWithTooltip);if(!Yr(this._currentElementWithTooltip)||!t.text){this._unpinTooltip();return}this.balloonPanelView.pin({target:this._currentElementWithTooltip,positions:e.getPositioningFunctions(t.position)})}};function ZS(e){return jn(e)?e.closest(`[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])`):null}function QS(e){return{text:e.dataset.ckeTooltipText,position:e.dataset.ckeTooltipPosition||`s`,cssClass:e.dataset.ckeTooltipClass||``}}function $S(e){let t=new MutationObserver(()=>{e()});return{attach(e){t.observe(e,{attributes:!0,attributeFilter:[`data-cke-tooltip-text`,`data-cke-tooltip-position`]})},detach(){t.disconnect()}}}var eC=class extends cb{licenseTypeMessage={evaluation:`For evaluation purposes only`,trial:`For evaluation purposes only`,development:`For development purposes only`};constructor(e){super(e,{balloonClass:`ck-evaluation-badge-balloon`})}_isEnabled(){let e=nC(this.editor.config.get(`licenseKey`));return!!(e&&this.licenseTypeMessage[e])}_createBadgeContent(){let e=nC(this.editor.config.get(`licenseKey`));return new tC(this.editor.locale,this.licenseTypeMessage[e])}_getNormalizedConfig(){let e=super._getNormalizedConfig(),t=this.editor.config.get(`ui.poweredBy`)||{};return{position:t.position||e.position,side:(t.side||e.side)===`left`?`right`:`left`,verticalOffset:e.verticalOffset,horizontalOffset:e.horizontalOffset}}},tC=class extends P{constructor(e,t){super(e),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-evaluation-badge`],"aria-hidden":!0},children:[{tag:`span`,attributes:{class:[`ck`,`ck-evaluation-badge__label`]},children:[t]}]})}};function nC(e){if(e==`GPL`)return`GPL`;let t=Xi(e.split(`.`)[1]);return t?t.licenseType||`production`:null}var rC=class extends dx{constructor(e,t){super(e);let n=this.bindTemplate;this.extendTemplate({attributes:{class:[`ck-menu-bar__menu__item`]},on:{mouseenter:n.to(`mouseenter`)}}),this.delegate(`mouseenter`).to(t)}};const iC={toggleMenusAndFocusItemsOnHover(e){e.on(`menu:mouseenter`,t=>{if(!(!e.isFocusBorderEnabled&&!e.isOpen)){if(e.isOpen)for(let n of e.menus){let e=t.path[0],r=e instanceof rC&&e.children.first===n;n.isOpen=(t.path.includes(n)||r)&&n.isEnabled}t.source.focus()}})},focusCycleMenusOnArrows(e){let t=e.locale.uiLanguageDirection===`rtl`;e.on(`menu:arrowright`,e=>{n(e.source,t?-1:1)}),e.on(`menu:arrowleft`,e=>{n(e.source,t?1:-1)});function n(t,n){let r=e.children.getIndex(t),i=t.isOpen,a=e.children.length,o=e.children.get((r+a+n)%a);t.isOpen=!1,i&&(o.isOpen=!0),o.buttonView.focus()}},closeMenusWhenTheBarCloses(e){e.on(`change:isOpen`,()=>{e.isOpen||e.menus.forEach(e=>{e.isOpen=!1})})},closeMenuWhenAnotherOnTheSameLevelOpens(e){e.on(`menu:change:isOpen`,(t,n,r)=>{r&&e.menus.filter(e=>t.source.parentMenuView===e.parentMenuView&&t.source!==e&&e.isOpen).forEach(e=>{e.isOpen=!1})})},closeOnClickOutside(e){Ya({emitter:e,activator:()=>e.isOpen,callback:()=>e.close(),contextElements:()=>e.children.map(e=>e.element)})},enableFocusHighlightOnInteraction(e){let t=!1;e.on(`change:isOpen`,(n,r,i)=>{i||(t||(e.isFocusBorderEnabled=!1),t=!1)}),e.listenTo(e.element,`keydown`,()=>{t=!0},{useCapture:!0}),e.listenTo(e.element,`keyup`,()=>{t=!1},{useCapture:!0}),e.listenTo(e.element,`focus`,()=>{t&&(e.isFocusBorderEnabled=!0)},{useCapture:!0})}},aC={openAndFocusPanelOnArrowDownKey(e){e.keystrokes.set(`arrowdown`,(t,n)=>{e.isEnabled&&e.focusTracker.focusedElement===e.buttonView.element&&(e.isOpen||=!0,e.panelView.focus(),n())})},openOnArrowRightKey(e){let t=e.locale.uiLanguageDirection===`rtl`?`arrowleft`:`arrowright`;e.keystrokes.set(t,(t,n)=>{e.focusTracker.focusedElement!==e.buttonView.element||!e.isEnabled||(e.isOpen||=!0,e.panelView.focus(),n())})},openOnButtonClick(e){e.buttonView.on(`execute`,()=>{e.isOpen=!0})},toggleOnButtonClick(e){e.buttonView.on(`execute`,()=>{e.isOpen=!e.isOpen})},openAndFocusOnEnterKeyPress(e){e.keystrokes.set(`enter`,(t,n)=>{e.focusTracker.focusedElement===e.buttonView.element&&(e.isOpen=!0,e.panelView.focus(),n())})},closeOnArrowLeftKey(e){let t=e.locale.uiLanguageDirection===`rtl`?`arrowright`:`arrowleft`;e.keystrokes.set(t,(t,n)=>{e.isOpen&&(e.isOpen=!1,e.focus(),n())})},closeOnEscKey(e){e.keystrokes.set(`esc`,(t,n)=>{e.isOpen&&(e.isOpen=!1,e.focus(),n())})},closeOnParentClose(e){e.parentMenuView.on(`change:isOpen`,(t,n,r)=>{!r&&t.source===e.parentMenuView&&(e.isOpen=!1)})}},oC={southEast:e=>({top:e.bottom,left:e.left,name:`se`}),southWest:(e,t)=>({top:e.bottom,left:e.left-t.width+e.width,name:`sw`}),northEast:(e,t)=>({top:e.top-t.height,left:e.left,name:`ne`}),northWest:(e,t)=>({top:e.top-t.height,left:e.left-t.width+e.width,name:`nw`}),eastSouth:e=>({top:e.top,left:e.right-5,name:`es`}),eastNorth:(e,t)=>({top:e.top-t.height,left:e.right-5,name:`en`}),westSouth:(e,t)=>({top:e.top,left:e.left-t.width+5,name:`ws`}),westNorth:(e,t)=>({top:e.top-t.height,left:e.left-t.width+5,name:`wn`})},sC=[{menuId:`file`,label:`File`,groups:[{groupId:`export`,items:[`menuBar:exportPdf`,`menuBar:exportWord`]},{groupId:`import`,items:[`menuBar:importWord`]},{groupId:`revisionHistory`,items:[`menuBar:revisionHistory`]}]},{menuId:`edit`,label:`Edit`,groups:[{groupId:`undo`,items:[`menuBar:undo`,`menuBar:redo`]},{groupId:`selectAll`,items:[`menuBar:selectAll`]},{groupId:`findAndReplace`,items:[`menuBar:findAndReplace`]}]},{menuId:`view`,label:`View`,groups:[{groupId:`sourceEditingEnhanced`,items:[`menuBar:sourceEditingEnhanced`]},{groupId:`sourceEditing`,items:[`menuBar:sourceEditing`]},{groupId:`showBlocks`,items:[`menuBar:showBlocks`]},{groupId:`previewMergeFields`,items:[`menuBar:previewMergeFields`]},{groupId:`fullscreen`,items:[`menuBar:fullscreen`]},{groupId:`restrictedEditing`,items:[`menuBar:restrictedEditing`]}]},{menuId:`insert`,label:`Insert`,groups:[{groupId:`insertMainWidgets`,items:[`menuBar:insertImage`,`menuBar:ckbox`,`menuBar:ckfinder`,`menuBar:insertTable`,`menuBar:insertTableLayout`]},{groupId:`insertInline`,items:[`menuBar:link`,`menuBar:insertFootnote`,`menuBar:bookmark`,`menuBar:comment`,`menuBar:insertMergeField`,`menuBar:emoji`]},{groupId:`insertMinorWidgets`,items:[`menuBar:mediaEmbed`,`menuBar:insertTemplate`,`menuBar:specialCharacters`,`menuBar:blockQuote`,`menuBar:codeBlock`,`menuBar:htmlEmbed`]},{groupId:`insertStructureWidgets`,items:[`menuBar:horizontalLine`,`menuBar:pageBreak`,`menuBar:tableOfContents`]},{groupId:`restrictedEditingException`,items:[`menuBar:restrictedEditingException:inline`,`menuBar:restrictedEditingException:block`]}]},{menuId:`format`,label:`Format`,groups:[{groupId:`textAndFont`,items:[{menuId:`text`,label:`Text`,groups:[{groupId:`basicStyles`,items:[`menuBar:bold`,`menuBar:italic`,`menuBar:underline`,`menuBar:strikethrough`,`menuBar:superscript`,`menuBar:subscript`,`menuBar:code`]},{groupId:`textPartLanguage`,items:[`menuBar:textPartLanguage`]}]},{menuId:`font`,label:`Font`,groups:[{groupId:`fontProperties`,items:[`menuBar:fontSize`,`menuBar:fontFamily`]},{groupId:`fontColors`,items:[`menuBar:fontColor`,`menuBar:fontBackgroundColor`]},{groupId:`highlight`,items:[`menuBar:highlight`]}]},`menuBar:heading`]},{groupId:`list`,items:[`menuBar:bulletedList`,`menuBar:numberedList`,`menuBar:multiLevelList`,`menuBar:todoList`]},{groupId:`indent`,items:[`menuBar:alignment`,`menuBar:lineHeight`,`menuBar:indent`,`menuBar:outdent`]},{groupId:`caseChange`,items:[`menuBar:caseChange`]},{groupId:`removeFormat`,items:[`menuBar:removeFormat`]}]},{menuId:`tools`,label:`Tools`,groups:[{groupId:`aiTools`,items:[`menuBar:aiAssistant`,`menuBar:aiCommands`,`menuBar:toggleAi`,`menuBar:aiQuickActions`]},{groupId:`tools`,items:[`menuBar:trackChanges`,`menuBar:commentsArchive`]}]},{menuId:`help`,label:`Help`,groups:[{groupId:`help`,items:[`menuBar:accessibilityHelp`]}]}];function cC(e){let t;return t=!(`items`in e)||!e.items?{items:Rt(sC),addItems:[],removeItems:[],isVisible:!0,isUsingDefaultConfig:!0,...e}:{items:e.items,removeItems:[],addItems:[],isVisible:!0,isUsingDefaultConfig:!1,...e},t}function lC({normalizedConfig:e,locale:t,componentFactory:n,extraItems:r}){let i=Rt(e);return dC(e,i,r),uC(e,i),dC(e,i,i.addItems),pC(e,i,n),mC(e,i),gC(i,t),i}function uC(e,t){let n=t.removeItems,r=[];t.items=t.items.filter(({menuId:e})=>n.includes(e)?(r.push(e),!1):!0),_C(t.items,e=>{e.groups=e.groups.filter(({groupId:e})=>n.includes(e)?(r.push(e),!1):!0);for(let t of e.groups)t.items=t.items.filter(e=>{let t=SC(e);return n.includes(t)?(r.push(t),!1):!0})});for(let t of n)r.includes(t)||T(`menu-bar-item-could-not-be-removed`,{menuBarConfig:e,itemName:t})}function dC(e,t,n){let r=[];if(n.length!=0){for(let e of n){let n=bC(e.position),i=xC(e.position);if(vC(e))if(!i)n===`start`?(t.items.unshift(e.menu),r.push(e)):n===`end`&&(t.items.push(e.menu),r.push(e));else{let a=t.items.findIndex(e=>e.menuId===i);a==-1?fC(t,e.menu,i,n)&&r.push(e):n===`before`?(t.items.splice(a,0,e.menu),r.push(e)):n===`after`&&(t.items.splice(a+1,0,e.menu),r.push(e))}else yC(e)?_C(t.items,t=>{if(t.menuId===i)n===`start`?(t.groups.unshift(e.group),r.push(e)):n===`end`&&(t.groups.push(e.group),r.push(e));else{let a=t.groups.findIndex(e=>e.groupId===i);a!==-1&&(n===`before`?(t.groups.splice(a,0,e.group),r.push(e)):n===`after`&&(t.groups.splice(a+1,0,e.group),r.push(e)))}}):fC(t,e.item,i,n)&&r.push(e)}for(let t of n)r.includes(t)||T(`menu-bar-item-could-not-be-added`,{menuBarConfig:e,addedItemConfig:t})}}function fC(e,t,n,r){let i=!1;return _C(e.items,e=>{for(let{groupId:a,items:o}of e.groups){if(i)return;if(a===n)r===`start`?(o.unshift(t),i=!0):r===`end`&&(o.push(t),i=!0);else{let e=o.findIndex(e=>SC(e)===n);e!==-1&&(r===`before`?(o.splice(e,0,t),i=!0):r===`after`&&(o.splice(e+1,0,t),i=!0))}}}),i}function pC(e,t,n){_C(t.items,r=>{for(let i of r.groups)i.items=i.items.filter(i=>{let a=typeof i==`string`&&!n.has(i);return a&&!t.isUsingDefaultConfig&&T(`menu-bar-item-unavailable`,{menuBarConfig:e,parentMenuConfig:Rt(r),componentName:i}),!a})})}function mC(e,t){let n=t.isUsingDefaultConfig,r=!1;if(t.items=t.items.filter(t=>t.groups.length?!0:(hC(e,t,n),!1)),!t.items.length){hC(e,e,n);return}_C(t.items,t=>{t.groups=t.groups.filter(e=>e.items.length?!0:(r=!0,!1));for(let i of t.groups)i.items=i.items.filter(t=>CC(t)&&!t.groups.length?(hC(e,t,n),r=!0,!1):!0)}),r&&mC(e,t)}function hC(e,t,n){n||T(`menu-bar-menu-empty`,{menuBarConfig:e,emptyMenuConfig:t})}function gC(e,t){let n=t.t,r={File:n({string:`File`,id:`MENU_BAR_MENU_FILE`}),Edit:n({string:`Edit`,id:`MENU_BAR_MENU_EDIT`}),View:n({string:`View`,id:`MENU_BAR_MENU_VIEW`}),Insert:n({string:`Insert`,id:`MENU_BAR_MENU_INSERT`}),Format:n({string:`Format`,id:`MENU_BAR_MENU_FORMAT`}),Tools:n({string:`Tools`,id:`MENU_BAR_MENU_TOOLS`}),Help:n({string:`Help`,id:`MENU_BAR_MENU_HELP`}),Text:n({string:`Text`,id:`MENU_BAR_MENU_TEXT`}),Font:n({string:`Font`,id:`MENU_BAR_MENU_FONT`})};_C(e.items,e=>{e.label in r&&(e.label=r[e.label])})}function _C(e,t){if(Array.isArray(e))for(let t of e)n(t);function n(e){t(e);for(let t of e.groups)for(let e of t.items)CC(e)&&n(e)}}function vC(e){return typeof e==`object`&&`menu`in e}function yC(e){return typeof e==`object`&&`group`in e}function bC(e){return e.startsWith(`start`)?`start`:e.startsWith(`end`)?`end`:e.startsWith(`after`)?`after`:`before`}function xC(e){let t=e.match(/^[^:]+:(.+)/);return t?t[1]:null}function SC(e){return typeof e==`string`?e:e.menuId}function CC(e){return typeof e==`object`&&`menuId`in e}const wC=D();var TC=class extends wC{editor;componentFactory;focusTracker;tooltipManager;poweredBy;evaluationBadge;ariaLiveAnnouncer;isReady=!1;_editableElementsMap=new Map;_focusableToolbarDefinitions=[];_extraMenuBarElements=[];_lastFocusedForeignElement=null;_domEmitter;constructor(e){super();let t=e.editing.view;this.editor=e,this.componentFactory=new KS(e),this.focusTracker=new M,this.tooltipManager=new XS(e),this.poweredBy=new fb(e),this.evaluationBadge=new eC(e),this.ariaLiveAnnouncer=new Ka(e),this._initViewportOffset(this._readViewportOffsetFromConfig()),this.once(`ready`,()=>{this._bindBodyCollectionWithFocusTracker(),this.isReady=!0}),this.listenTo(t.document,`layoutChanged`,this.update.bind(this)),this.listenTo(t,`scrollToTheSelection`,this._handleScrollToTheSelection.bind(this)),this._initFocusTracking(),this._initVisualViewportSupport()}get element(){return null}update(){this.fire(`update`)}destroy(){this.stopListening(),this.focusTracker.destroy(),this.tooltipManager.destroy(this.editor),this.poweredBy.destroy(),this.evaluationBadge.destroy();for(let e of this._editableElementsMap.values())e.ckeditorInstance=null,this.editor.keystrokes.stopListening(e);this._editableElementsMap=new Map,this._focusableToolbarDefinitions=[],this._domEmitter&&this._domEmitter.stopListening()}setEditableElement(e,t){this._editableElementsMap.set(e,t),t.ckeditorInstance||=this.editor,this.focusTracker.add(t);let n=()=>{this.editor.editing.view.getDomRoot(e)||this.editor.keystrokes.listenTo(t)};this.isReady?n():this.once(`ready`,n)}removeEditableElement(e){let t=this._editableElementsMap.get(e);t&&(this._editableElementsMap.delete(e),this.editor.keystrokes.stopListening(t),this.focusTracker.remove(t),t.ckeditorInstance=null)}getEditableElement(e=`main`){return this._editableElementsMap.get(e)}getEditableElementsNames(){return this._editableElementsMap.keys()}addToolbar(e,t={}){e.isRendered?(this.focusTracker.add(e),this.editor.keystrokes.listenTo(e.element)):e.once(`render`,()=>{this.focusTracker.add(e),this.editor.keystrokes.listenTo(e.element)}),this._focusableToolbarDefinitions.push({toolbarView:e,options:t})}extendMenuBar(e){this._extraMenuBarElements.push(e)}initMenuBar(e){let t=e.element;this.focusTracker.add(t),this.editor.keystrokes.listenTo(t);let n=cC(this.editor.config.get(`menuBar`)||{});e.fillFromConfig(n,this.componentFactory,this._extraMenuBarElements),this.editor.keystrokes.set(`Esc`,(e,n)=>{t.contains(this.editor.ui.focusTracker.focusedElement)&&(this._lastFocusedForeignElement?(this._lastFocusedForeignElement.focus(),this._lastFocusedForeignElement=null):this.editor.editing.view.focus(),n())}),this.editor.keystrokes.set(`Alt+F9`,(n,r)=>{t.contains(this.editor.ui.focusTracker.focusedElement)||(this._saveLastFocusedForeignElement(),e.isFocusBorderEnabled=!0,e.focus(),r())})}_readViewportOffsetFromConfig(){let e=this.editor,t=e.config.get(`ui.viewportOffset`);if(t)return t;let n=e.config.get(`toolbar.viewportTopOffset`);return n?(console.warn("editor-ui-deprecated-viewport-offset-config: The `toolbar.vieportTopOffset` configuration option is deprecated. It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead."),{top:n}):{top:0}}_initFocusTracking(){let e=this.editor,t;e.keystrokes.set(`Alt+F10`,(e,n)=>{this._saveLastFocusedForeignElement();let r=this._getCurrentFocusedToolbarDefinition();(!r||!t)&&(t=this._getFocusableCandidateToolbarDefinitions());for(let e=0;e{let r=this._getCurrentFocusedToolbarDefinition();r&&(this._lastFocusedForeignElement?(this._lastFocusedForeignElement.focus(),this._lastFocusedForeignElement=null):e.editing.view.focus(),r.options.afterBlur&&r.options.afterBlur(),n())})}_saveLastFocusedForeignElement(){let e=this.focusTracker.focusedElement;Array.from(this._editableElementsMap.values()).includes(e)&&!Array.from(this.editor.editing.view.domRoots.values()).includes(e)&&(this._lastFocusedForeignElement=e)}_getFocusableCandidateToolbarDefinitions(){let e=[];for(let t of this._focusableToolbarDefinitions){let{toolbarView:n,options:r}=t;(Yr(n.element)||r.beforeFocus)&&e.push(t)}return e.sort((e,t)=>EC(e)-EC(t)),e}_getCurrentFocusedToolbarDefinition(){for(let e of this._focusableToolbarDefinitions)if(e.toolbarView.element&&e.toolbarView.element.contains(this.focusTracker.focusedElement))return e;return null}_focusFocusableCandidateToolbar(e){let{toolbarView:t,options:{beforeFocus:n}}=e;return n&&n(),Yr(t.element)?(t.focus(),!0):!1}_handleScrollToTheSelection(e,t){let n={top:0,bottom:0,left:0,right:0,...this.viewportOffset};t.viewportOffset.top+=n.top,t.viewportOffset.bottom+=n.bottom,t.viewportOffset.left+=n.left,t.viewportOffset.right+=n.right}_bindBodyCollectionWithFocusTracker(){let e=this.view.body;for(let t of e)this.focusTracker.add(t.element);e.on(`add`,(e,t)=>{this.focusTracker.add(t.element)}),e.on(`remove`,(e,t)=>{this.focusTracker.remove(t.element)})}_initViewportOffset(e){this.on(`set:viewportOffset`,(e,t,n)=>{let r=this._getVisualViewportTopOffset(n);n.visualTop!==r&&(e.return={...n,visualTop:r})}),this.set(`viewportOffset`,e)}_initVisualViewportSupport(){if(!u.window.visualViewport)return;let e=()=>{let e=this._getVisualViewportTopOffset(this.viewportOffset);this.viewportOffset.visualTop!==e&&(this.viewportOffset={...this.viewportOffset,visualTop:e})};this._domEmitter=new(br()),this._domEmitter.listenTo(u.window.visualViewport,`scroll`,e),this._domEmitter.listenTo(u.window.visualViewport,`resize`,e)}_getVisualViewportTopOffset(e){let t=ti().top,n=e.top||0;return t>n?0:n-t}};function EC(e){let{toolbarView:t,options:n}=e,r=10;return Yr(t.element)&&r--,n.isContextual&&(r-=2),r}var DC=class extends P{body;menuBarView;toolbar;constructor(e){super(e),this.body=new nb(e)}render(){super.render(),this.body.attachToDom()}destroy(){return this.body.detachFromDom(),super.destroy()}},OC=class extends DC{top;main;_voiceLabelView;constructor(e){super(e),this.top=this.createCollection(),this.main=this.createCollection(),this._voiceLabelView=this._createVoiceLabel(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-reset`,`ck-editor`,`ck-rounded-corners`],role:`application`,dir:e.uiLanguageDirection,lang:e.uiLanguage,"aria-labelledby":this._voiceLabelView.id},children:[this._voiceLabelView,{tag:`div`,attributes:{class:[`ck`,`ck-editor__top`,`ck-reset_all`],role:`presentation`},children:this.top},{tag:`div`,attributes:{class:[`ck`,`ck-editor__main`],role:`presentation`},children:this.main}]})}_createVoiceLabel(){let e=this.t,t=new eo;return t.text=e(`Rich Text Editor`),t.extendTemplate({attributes:{class:`ck-voice-label`}}),t}},kC=class extends P{name=null;_editingView;_editableElement;_hasExternalElement;constructor(e,t,n){super(e);let{name:r,classes:i,styles:a,attributes:o}=(AC(n)?void 0:n)||{};this.set(`isFocused`,!1),this.set(`isInlineRoot`,!1),this.setTemplate({tag:r||`div`,attributes:{...o,class:[`ck`,`ck-content`,`ck-editor__editable`,`ck-rounded-corners`,this.bindTemplate.if(`isInlineRoot`,`ck-editor__editable_inline-root`),...i?A(i):[]],...a&&{style:a},lang:e.contentLanguage,dir:e.contentLanguageDirection}}),this._editableElement=AC(n)?n:void 0,this._hasExternalElement=!!this._editableElement,this._editingView=t}render(){super.render(),this._hasExternalElement?this.template.apply(this.element=this._editableElement):this._editableElement=this.element,this.on(`change:isFocused`,()=>this._updateIsFocusedClasses()),this._updateIsFocusedClasses()}destroy(){this._hasExternalElement&&this.template.revert(this._editableElement),super.destroy()}get hasExternalElement(){return this._hasExternalElement}_updateIsFocusedClasses(){let e=this._editingView;e.isRenderingInProgress?n(this):t(this);function t(t){e.change(n=>{let r=e.document.getRoot(t.name);n.addClass(t.isFocused?`ck-focused`:`ck-blurred`,r),n.removeClass(t.isFocused?`ck-blurred`:`ck-focused`,r)})}function n(r){e.once(`change:isRenderingInProgress`,(e,i,a)=>{a?n(r):t(r)})}}};function AC(e){return jn(e)}var jC=class extends kC{_options;constructor(e,t,n,r={}){super(e,t,n),this._options=r,this.extendTemplate({attributes:{role:`textbox`,class:`ck-editor__editable_inline`}})}render(){super.render();let e=this._editingView;e.change(t=>{let n=e.document.getRoot(this.name);t.setAttribute(`aria-label`,this.getEditableAriaLabel(),n)})}getEditableAriaLabel(){let e=this.locale.t,t=this._options.label,n=this._editableElement,r=this.name;if(typeof t==`string`)return t;if(typeof t==`object`)return t[r];if(typeof t==`function`)return t(this);if(n){let e=n.getAttribute(`aria-label`);if(e)return e}return e(`Rich Text Editor. Editing area: %0`,r)}},MC=class extends P{children;constructor(e,t={}){super(e);let n=this.bindTemplate;this.set(`class`,[`ck`,`ck-form__row`,...A(t.class||[])]),this.children=this.createCollection(),t.children&&t.children.forEach(e=>this.children.add(e)),this.set(`_role`,null),this.set(`_ariaLabelledBy`,null),t.labelView&&this.set({_role:`group`,_ariaLabelledBy:t.labelView.id}),this.setTemplate({tag:`div`,attributes:{class:n.to(`class`,e=>e.join(` `)),role:n.to(`_role`),"aria-labelledby":n.to(`_ariaLabelledBy`)},children:this.children})}},NC=class extends P{constructor(e){super(e);let t=this.bindTemplate;this.setTemplate({tag:`iframe`,attributes:{class:[`ck`,`ck-reset_all`],sandbox:`allow-same-origin allow-scripts`},on:{load:t.to(`loaded`)}})}render(){return new Promise(e=>(this.on(`loaded`,e),super.render()))}},PC=class extends P{labelView;inputView;statusView;constructor(e,t){super(e);let n=`ck-input-${he()}`,r=`ck-status-${he()}`;this.set(`label`,void 0),this.set(`value`,void 0),this.set(`isReadOnly`,!1),this.set(`errorText`,null),this.set(`infoText`,null),this.labelView=this._createLabelView(n),this.inputView=this._createInputView(t,n,r),this.statusView=this._createStatusView(r),this.bind(`_statusText`).to(this,`errorText`,this,`infoText`,(e,t)=>e||t);let i=this.bindTemplate;this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-labeled-input`,i.if(`isReadOnly`,`ck-disabled`)]},children:[this.labelView,this.inputView,this.statusView]})}_createLabelView(e){let t=new eo(this.locale);return t.for=e,t.bind(`text`).to(this,`label`),t}_createInputView(e,t,n){let r=new e(this.locale,n);return r.id=t,r.ariaDescribedById=n,r.bind(`value`).to(this),r.bind(`isReadOnly`).to(this),r.bind(`hasError`).to(this,`errorText`,e=>!!e),r.on(`input`,()=>{this.errorText=null}),r}_createStatusView(e){let t=new P(this.locale),n=this.bindTemplate;return t.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-labeled-input__status`,n.if(`errorText`,`ck-labeled-input__status_error`),n.if(`_statusText`,`ck-hidden`,e=>!e)],id:e,role:n.if(`errorText`,`alert`)},children:[{text:n.to(`_statusText`)}]}),t}select(){this.inputView.select()}focus(){this.inputView.focus()}};function FC(e,t){let n=0,r=0;for(let i of t){let t=i,a=t.items,o=e&&!!t.label.match(e);t.labelView.highlightText(o?e:null);for(let t of a){let n=t.children.first,r=n.labelView;if(!e)t.isVisible=!0,r.highlightText(null);else{let i=!!n.label.match(e);r.highlightText(i?e:null),t.isVisible=o||i}}let s=a.filter(e=>e.isVisible).length;n+=t.items.length,r+=o?t.items.length:s,t.isVisible=o||!!s}return{resultsCount:r,totalItemsCount:n}}var IC=class extends ho{static get pluginName(){return`Notification`}static get isOfficialPlugin(){return!0}init(){this.on(`show:warning`,(e,t)=>{window.alert(t.message)},{priority:`lowest`})}showSuccess(e,t={}){this._showNotification({message:e,type:`success`,namespace:t.namespace,title:t.title})}showInfo(e,t={}){this._showNotification({message:e,type:`info`,namespace:t.namespace,title:t.title})}showWarning(e,t={}){this._showNotification({message:e,type:`warning`,namespace:t.namespace,title:t.title})}_showNotification(e){let t=e.namespace?`show:${e.type}:${e.namespace}`:`show:${e.type}`;this.fire(t,{message:e.message,type:e.type,title:e.title||``})}};const LC=D();var RC=class extends LC{constructor(e,t){super(),t&&fn(this,t),e&&this.set(e)}};const zC=Wr(`px`);var BC=class extends F{positionLimiter;visibleStack;_viewToStack=new Map;_idToStack=new Map;_view=null;_rotatorView=null;_fakePanelsView=null;static get pluginName(){return`ContextualBalloon`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this.positionLimiter=()=>{let e=this.editor.editing.view,t=e.document.selection.editableElement;return t?e.domConverter.mapViewToDom(t.root):null},this.decorate(`getPositionOptions`),this.set(`visibleView`,null),this.set(`_numberOfStacks`,0),this.set(`_singleViewMode`,!1)}destroy(){super.destroy(),this._view&&this._view.destroy(),this._rotatorView&&this._rotatorView.destroy(),this._fakePanelsView&&this._fakePanelsView.destroy()}get view(){return this._view||this._createPanelView(),this._view}hasView(e){return Array.from(this._viewToStack.keys()).includes(e)}add(e){if(this._view||this._createPanelView(),this.hasView(e.view))throw new w(`contextualballoon-add-view-exist`,[this,e]);let t=e.stackId||`main`;if(!this._idToStack.has(t)){this._idToStack.set(t,new Map([[e.view,e]])),this._viewToStack.set(e.view,this._idToStack.get(t)),this._numberOfStacks=this._idToStack.size,(!this._visibleStack||e.singleViewMode)&&this.showStack(t);return}let n=this._idToStack.get(t);e.singleViewMode&&this.showStack(t),n.set(e.view,e),this._viewToStack.set(e.view,n),n===this._visibleStack&&this._showView(e)}remove(e){if(!this.hasView(e))throw new w(`contextualballoon-remove-view-not-exist`,[this,e]);let t=this._viewToStack.get(e);this._singleViewMode&&this.visibleView===e&&(this._singleViewMode=!1),this.visibleView===e&&(t.size===1?this._idToStack.size>1?this._showNextStack():(this.view.hide(),this.visibleView=null,this._rotatorView.hideView()):this._showView(Array.from(t.values())[t.size-2])),t.size===1?(this._idToStack.delete(this._getStackId(t)),this._numberOfStacks=this._idToStack.size):t.delete(e),this._viewToStack.delete(e)}updatePosition(e){e&&(this._visibleStack.get(this.visibleView).position=e),this.view.pin(this.getPositionOptions()),this._fakePanelsView.updatePosition()}getPositionOptions(){let e=Array.from(this._visibleStack.values()).pop().position;return e&&=(e.limiter||(e=Object.assign({},e,{limiter:this.positionLimiter})),Object.assign({},e,{viewportOffsetConfig:{...this.editor.ui.viewportOffset,top:this.editor.ui.viewportOffset.visualTop}})),e}showStack(e){this.visibleStack=e;let t=this._idToStack.get(e);if(!t)throw new w(`contextualballoon-showstack-stack-not-exist`,this);this._visibleStack!==t&&this._showView(Array.from(t.values()).pop())}_createPanelView(){this._view=new ab(this.editor.locale),this.editor.ui.view.body.add(this._view),this._rotatorView=this._createRotatorView(),this._fakePanelsView=this._createFakePanelsView()}get _visibleStack(){return this._viewToStack.get(this.visibleView)}_getStackId(e){return Array.from(this._idToStack.entries()).find(t=>t[1]===e)[0]}_showNextStack(){let e=Array.from(this._idToStack.values()),t=e.indexOf(this._visibleStack)+1;e[t]||(t=0),this.showStack(this._getStackId(e[t]))}_showPrevStack(){let e=Array.from(this._idToStack.values()),t=e.indexOf(this._visibleStack)-1;e[t]||(t=e.length-1),this.showStack(this._getStackId(e[t]))}_createRotatorView(){let e=new VC(this.editor.locale),t=this.editor.locale.t;return this.view.content.add(e),e.bind(`isNavigationVisible`).to(this,`_numberOfStacks`,this,`_singleViewMode`,(e,t)=>!t&&e>1),e.on(`change:isNavigationVisible`,()=>this.updatePosition(),{priority:`low`}),e.bind(`counter`).to(this,`visibleView`,this,`_numberOfStacks`,(e,n)=>n<2?``:t(`%0 of %1`,[Array.from(this._idToStack.values()).indexOf(this._visibleStack)+1,n])),e.buttonNextView.on(`execute`,()=>{e.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showNextStack()}),e.buttonPrevView.on(`execute`,()=>{e.focusTracker.isFocused&&this.editor.editing.view.focus(),this._showPrevStack()}),e}_createFakePanelsView(){let e=new HC(this.editor.locale,this.view);return e.bind(`numberOfPanels`).to(this,`_numberOfStacks`,this,`_singleViewMode`,(e,t)=>!t&&e>=2?Math.min(e-1,2):0),e.listenTo(this.view,`change:top`,()=>e.updatePosition()),e.listenTo(this.view,`change:left`,()=>e.updatePosition()),this.editor.ui.view.body.add(e),e}_showView({view:e,balloonClassName:t=``,withArrow:n=!0,singleViewMode:r=!1}){this.view.class=t,this.view.withArrow=n,this._rotatorView.showView(e),this.visibleView=e,this.view.pin(this.getPositionOptions()),this._fakePanelsView.updatePosition(),r&&(this._singleViewMode=!0)}},VC=class extends P{focusTracker;buttonPrevView;buttonNextView;content;constructor(e){super(e);let t=e.t,n=this.bindTemplate;this.set(`isNavigationVisible`,!0),this.focusTracker=new M,this.buttonPrevView=this._createButtonView(t(`Previous`),Wv),this.buttonNextView=this._createButtonView(t(`Next`),gv),this.content=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-balloon-rotator`],"z-index":`-1`},children:[{tag:`div`,attributes:{class:[`ck-balloon-rotator__navigation`,n.to(`isNavigationVisible`,e=>e?``:`ck-hidden`)]},children:[this.buttonPrevView,{tag:`span`,attributes:{class:[`ck-balloon-rotator__counter`]},children:[{text:n.to(`counter`)}]},this.buttonNextView]},{tag:`div`,attributes:{class:`ck-balloon-rotator__content`},children:this.content}]})}render(){super.render(),this.focusTracker.add(this.element)}destroy(){super.destroy(),this.focusTracker.destroy()}showView(e){this.hideView(),this.content.add(e)}hideView(){this.content.clear()}_createButtonView(e,t){let n=new H(this.locale);return n.set({label:e,icon:t,tooltip:!0}),n}},HC=class extends P{content;_balloonPanelView;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`top`,0),this.set(`left`,0),this.set(`height`,0),this.set(`width`,0),this.set(`numberOfPanels`,0),this.content=this.createCollection(),this._balloonPanelView=t,this.setTemplate({tag:`div`,attributes:{class:[`ck-fake-panel`,n.to(`numberOfPanels`,e=>e?``:`ck-hidden`)],style:{top:n.to(`top`,zC),left:n.to(`left`,zC),width:n.to(`width`,zC),height:n.to(`height`,zC)}},children:this.content}),this.on(`change:numberOfPanels`,(e,t,n,r)=>{n>r?this._addPanels(n-r):this._removePanels(r-n),this.updatePosition()})}_addPanels(e){for(;e--;){let e=new P;e.setTemplate({tag:`div`}),this.content.add(e),this.registerChild(e)}}_removePanels(e){for(;e--;){let e=this.content.last;this.content.remove(e),this.deregisterChild(e),e.destroy()}}updatePosition(){if(this.numberOfPanels){let{top:e,left:t}=this._balloonPanelView,{width:n,height:r}=new O(this._balloonPanelView.element);Object.assign(this,{top:e,left:t,width:n,height:r})}}};const UC=Wr(`px`);var WC=class extends P{content;contentPanelElement;_contentPanelPlaceholder;constructor(e){super(e);let t=this.bindTemplate;this.set(`isActive`,!1),this.set(`isSticky`,!1),this.set(`limiterElement`,null),this.set(`limiterBottomOffset`,50),this.set(`viewportTopOffset`,0),this.set(`_marginLeft`,null),this.set(`_isStickyToTheBottomOfLimiter`,!1),this.set(`_stickyTopOffset`,null),this.set(`_stickyBottomOffset`,null),this.content=this.createCollection(),this._contentPanelPlaceholder=new ga({tag:`div`,attributes:{class:[`ck`,`ck-sticky-panel__placeholder`],style:{display:t.to(`isSticky`,e=>e?`block`:`none`),height:t.to(`isSticky`,e=>e?UC(this._contentPanelRect.height):null)}}}).render(),this.contentPanelElement=new ga({tag:`div`,attributes:{class:[`ck`,`ck-sticky-panel__content`,t.if(`isSticky`,`ck-sticky-panel__content_sticky`),t.if(`_isStickyToTheBottomOfLimiter`,`ck-sticky-panel__content_sticky_bottom-limit`)],style:{width:t.to(`isSticky`,e=>e?UC(this._contentPanelPlaceholder.getBoundingClientRect().width):null),top:t.to(`_stickyTopOffset`,e=>e&&UC(e)),bottom:t.to(`_stickyBottomOffset`,e=>e&&UC(e)),marginLeft:t.to(`_marginLeft`)}},children:this.content}).render(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-sticky-panel`]},children:[this._contentPanelPlaceholder,this.contentPanelElement]})}render(){super.render(),this.checkIfShouldBeSticky(),this.listenTo(u.document,`scroll`,()=>{this.checkIfShouldBeSticky()},{useCapture:!0}),this.listenTo(this,`change:isActive`,()=>{this.checkIfShouldBeSticky()}),u.window.visualViewport&&(this.listenTo(u.window.visualViewport,`scroll`,()=>{this.checkIfShouldBeSticky()}),this.listenTo(u.window.visualViewport,`resize`,()=>{this.checkIfShouldBeSticky()}))}checkIfShouldBeSticky(){if(!this.limiterElement||!this.isActive){this._unstick();return}let e=new O(this.limiterElement),t=e.getVisible();if(t){let e=new O(u.window);e.top+=this.viewportTopOffset,e.height-=this.viewportTopOffset,t=t.getIntersection(e)}let{left:n,top:r}=ti();if(e.moveBy(n,r),t&&t.moveBy(n,r),t&&e.topt.height){let n=Math.max(e.bottom-t.bottom,0)+this.limiterBottomOffset;this._contentPanelRect.height+n+1{this.reset(),this.focus(),this.fire(`reset`)}),this.resetButtonView.bind(`isVisible`).to(this.fieldView,`isEmpty`,e=>!e),this.fieldWrapperChildren.add(this.resetButtonView),this.extendTemplate({attributes:{class:`ck-search__query_with-reset`}}))}reset(){this.fieldView.reset(),this._viewConfig.showResetButton&&(this.resetButtonView.isVisible=!1)}},KC=class extends P{constructor(){super();let e=this.bindTemplate;this.set({isVisible:!1,primaryText:``,secondaryText:``}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search__info`,e.if(`isVisible`,`ck-hidden`,e=>!e)],tabindex:-1},children:[{tag:`span`,children:[{text:[e.to(`primaryText`)]}]},{tag:`span`,children:[{text:[e.to(`secondaryText`)]}]}]})}focus(){this.element.focus()}},qC=class extends P{focusTracker;children;_focusCycler;constructor(e){super(e),this.children=this.createCollection(),this.focusTracker=new M,this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search__results`],tabindex:-1},children:this.children}),this._focusCycler=new Hy({focusables:this.children,focusTracker:this.focusTracker})}render(){super.render();for(let e of this.children)this.focusTracker.add(e.element)}focus(){this._focusCycler.focusFirst()}focusFirst(){this._focusCycler.focusFirst()}focusLast(){this._focusCycler.focusLast()}},JC=class extends P{focusTracker;keystrokes;resultsView;filteredView;infoView;queryView;focusCycler;_config;constructor(e,t){super(e),this._config=t,this.filteredView=t.filteredView,this.queryView=this._createSearchTextQueryView(),this.focusTracker=new M,this.keystrokes=new N,this.resultsView=new qC(e),this.children=this.createCollection(),this.focusableChildren=this.createCollection([this.queryView,this.resultsView]),this.set(`isEnabled`,!0),this.set(`resultsCount`,0),this.set(`totalItemsCount`,0),t.infoView&&t.infoView.instance?this.infoView=t.infoView.instance:(this.infoView=new KC,this._enableDefaultInfoViewBehavior(),this.on(`render`,()=>{this.search(``)})),this.resultsView.children.addMany([this.infoView,this.filteredView]),this.focusCycler=new Hy({focusables:this.focusableChildren,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.on(`search`,(e,{resultsCount:t,totalItemsCount:n})=>{this.resultsCount=t,this.totalItemsCount=n}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search`,t.class||null],tabindex:`-1`},children:this.children})}render(){super.render(),this.children.addMany([this.queryView,this.resultsView]);let e=e=>e.stopPropagation();for(let e of this.focusableChildren)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element),this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}focus(){this.queryView.focus()}reset(){this.queryView.reset(),this.search(``),this.filteredView.element.scrollTo(0,0)}search(e){let t=e?new RegExp(Bn(e),`ig`):null,n=this.filteredView.filter(t);this.fire(`search`,{query:e,...n})}_createSearchTextQueryView(){let e=new GC(this.locale,this._config.queryView);return this.listenTo(e.fieldView,`input`,()=>{this.search(e.fieldView.element.value)}),e.on(`reset`,()=>this.reset()),e.bind(`isEnabled`).to(this),e}_enableDefaultInfoViewBehavior(){let e=this.locale.t,t=this.infoView;this.on(`search`,(r,i)=>{if(i.resultsCount)t.set({isVisible:!1});else{let r=this._config.infoView&&this._config.infoView.text,a,o;i.totalItemsCount?r?.notFound?(a=r.notFound.primary,o=r.notFound.secondary):(a=e(`No results found`),o=``):r?.noSearchableItems?(a=r.noSearchableItems.primary,o=r.noSearchableItems.secondary):(a=e(`No searchable items`),o=``),t.set({primaryText:n(a,i),secondaryText:n(o,i),isVisible:!0})}});function n(e,{query:t,resultsCount:n,totalItemsCount:r}){return typeof e==`function`?e(t,n,r):e}}},YC=class e extends JC{_config;constructor(e,t){super(e,t),this._config=t;let n=Wr(`px`);this.extendTemplate({attributes:{class:[`ck-autocomplete`]}});let r=this.resultsView.bindTemplate;this.resultsView.set(`isVisible`,!1),this.resultsView.set(`_position`,`s`),this.resultsView.set(`_width`,0),this.resultsView.extendTemplate({attributes:{class:[r.if(`isVisible`,`ck-hidden`,e=>!e),r.to(`_position`,e=>`ck-search__results_${e}`)],style:{width:r.to(`_width`,n)}}}),this.focusTracker.on(`change:isFocused`,(e,n,r)=>{this._updateResultsVisibility(),r?this.resultsView.element.scrollTop=0:t.resetOnBlur&&this.queryView.reset()}),this.on(`search`,()=>{this._updateResultsVisibility(),this._updateResultsViewWidthAndPosition()}),this.keystrokes.set(`esc`,(e,t)=>{this.resultsView.isVisible&&(this.queryView.focus(),this.resultsView.isVisible=!1,t())}),this.listenTo(u.document,`scroll`,()=>{this._updateResultsViewWidthAndPosition()}),this.on(`change:isEnabled`,()=>{this._updateResultsVisibility()}),this.filteredView.on(`execute`,(e,{value:t})=>{this.focus(),this.reset(),this.queryView.fieldView.value=this.queryView.fieldView.element.value=t,this.resultsView.isVisible=!1}),this.resultsView.on(`change:isVisible`,()=>{this._updateResultsViewWidthAndPosition()})}_updateResultsViewWidthAndPosition(){if(!this.resultsView.isVisible)return;this.resultsView._width=new O(this.queryView.fieldView.element).width;let t=e._getOptimalPosition({element:this.resultsView.element,target:this.queryView.element,fitInViewport:!0,positions:e.defaultResultsPositions});this.resultsView._position=t?t.name:`s`}_updateResultsVisibility(){let e=this._config.queryMinChars===void 0?0:this._config.queryMinChars,t=this.queryView.fieldView.element.value.length;this.resultsView.isVisible=this.focusTracker.isFocused&&this.isEnabled&&t>=e}static defaultResultsPositions=[(e=>({top:e.bottom,left:e.left,name:`s`})),((e,t)=>({top:e.top-t.height,left:e.left,name:`n`}))];static _getOptimalPosition=Xr},XC=class extends P{constructor(){super(),this.set(`text`,void 0),this.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-highlighted-text`]}}),this.on(`render`,()=>{this.on(`change:text`,()=>{this._updateInnerHTML(Rn(this.text||``))}),this._updateInnerHTML(Rn(this.text||``))})}highlightText(e){this._updateInnerHTML(ZC(this.text||``,e))}_updateInnerHTML(e){this.element.innerHTML=e||``}};function ZC(e,t){if(!t)return Rn(e);let n=[],r=0,i=t.exec(e);for(;i!==null;){let a=i.index;a!==r&&n.push({text:e.substring(r,a),isMatch:!1}),n.push({text:i[0],isMatch:!0}),r=t.lastIndex,i=t.exec(e)}return r!==e.length&&n.push({text:e.substring(r),isMatch:!1}),n.map(e=>(e.text=Rn(e.text),e)).map(e=>e.isMatch?`${e.text}`:e.text).join(``)}var QC=class extends XC{constructor(){super(),this.set({style:void 0,text:void 0,id:void 0});let e=this.bindTemplate;this.extendTemplate({attributes:{class:[`ck-button__label`],style:e.to(`style`),id:e.to(`id`)}})}},$C=class extends XC{id;constructor(){super(),this.set(`for`,void 0);let e=this.bindTemplate;this.id=`ck-editor__label_${he()}`,this.extendTemplate({attributes:{class:[`ck`,`ck-label`],id:this.id,for:e.to(`for`)}})}},ew=class extends P{constructor(){super(),this.set(`isVisible`,!1);let e=this.bindTemplate;this.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-spinner-container`,e.if(`isVisible`,`ck-hidden`,e=>!e)]},children:[{tag:`span`,attributes:{class:[`ck`,`ck-spinner`]}}]})}};const tw=Wr(`px`);var nw=class extends F{toolbarView;focusTracker;_balloonConfig;_resizeObserver=null;_balloon;_fireSelectionChangeDebounced;static get pluginName(){return`BalloonToolbar`}static get isOfficialPlugin(){return!0}static get requires(){return[BC]}constructor(e){super(e),this._balloonConfig=Ex(e.config.get(`balloonToolbar`)),this.toolbarView=this._createToolbarView(),this.focusTracker=new M,this._trackFocusableEditableElements(),this.focusTracker.add(this.toolbarView),e.ui.addToolbar(this.toolbarView,{beforeFocus:()=>this.show(!0),afterBlur:()=>this.hide(),isContextual:!0}),this._balloon=e.plugins.get(BC),this._fireSelectionChangeDebounced=Kt(()=>this.fire(`_selectionChangeDebounced`),200),this.decorate(`show`)}init(){let e=this.editor,t=e.model.document.selection;this.listenTo(this.focusTracker,`change:isFocused`,(e,t,n)=>{!n&&this._isToolbarVisible?this.hide():n&&this.show()}),this.listenTo(t,`change:range`,(e,n)=>{(n.directChange||t.isCollapsed)&&this.hide(),this._fireSelectionChangeDebounced()}),this.listenTo(this,`_selectionChangeDebounced`,()=>{this.editor.editing.view.document.isFocused&&this.show()}),this._balloonConfig.shouldNotGroupWhenFull||this.listenTo(e,`ready`,()=>{let t=e.ui.view.editable.element;this._resizeObserver=new Hr(t,e=>{this.toolbarView.maxWidth=tw(e.contentRect.width*.9)})}),this.listenTo(this.toolbarView,`groupedItemsUpdate`,()=>{this._updatePosition()}),e.ui.once(`ready`,()=>{this.toolbarView.fillFromConfig(this._balloonConfig,this.editor.ui.componentFactory)})}get _isToolbarVisible(){return this._balloon.visibleView===this.toolbarView}_createToolbarView(){let e=this.editor.locale.t,t=!this._balloonConfig.shouldNotGroupWhenFull,n=new Ox(this.editor.locale,{shouldGroupWhenFull:t,isFloating:!0});return n.ariaLabel=e(`Editor contextual toolbar`),n.render(),n}show(e=!1){let t=this.editor,n=t.model.document.selection,r=t.model.schema;this._balloon.hasView(this.toolbarView)||n.isCollapsed&&!e||rw(n,r)||Array.from(this.toolbarView.items).every(e=>e.isEnabled!==void 0&&!e.isEnabled)||(this.listenTo(this.editor.ui,`update`,()=>{this._updatePosition()}),this._balloon.add({view:this.toolbarView,position:this._getBalloonPositionData(),balloonClassName:`ck-toolbar-container`}))}hide(){this._balloon.hasView(this.toolbarView)&&(this.stopListening(this.editor.ui,`update`),this._balloon.remove(this.toolbarView))}_trackFocusableEditableElements(){let{editor:e,focusTracker:t}=this,{editing:n}=e;n.view.addObserver(class extends kc{observe(e){t.add(e)}stopObserving(e){t.remove(e)}})}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document,n=t.selection,r=t.selection.isBackward;return{target:()=>{let t=r?n.getFirstRange():n.getLastRange(),i=O.getDomRangeRects(e.domConverter.viewRangeToDom(t));return r?i[0]:(i.length>1&&i[i.length-1].width===0&&i.pop(),i[i.length-1])},positions:this._getBalloonPositions(r)}}_updatePosition(){this._isToolbarVisible&&this._balloon.updatePosition(this._getBalloonPositionData())}destroy(){super.destroy(),this.stopListening(),this._fireSelectionChangeDebounced.cancel(),this.toolbarView.destroy(),this.focusTracker.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_getBalloonPositions(e){let t=p.isSafari&&p.isiOS?ab.generatePositions({heightOffset:Math.max(ab.arrowHeightOffset,Math.round(20/u.window.visualViewport.scale))}):ab.defaultPositions;return e?[t.northWestArrowSouth,t.northWestArrowSouthWest,t.northWestArrowSouthEast,t.northWestArrowSouthMiddleEast,t.northWestArrowSouthMiddleWest,t.southWestArrowNorth,t.southWestArrowNorthWest,t.southWestArrowNorthEast,t.southWestArrowNorthMiddleWest,t.southWestArrowNorthMiddleEast]:[t.southEastArrowNorth,t.southEastArrowNorthEast,t.southEastArrowNorthWest,t.southEastArrowNorthMiddleEast,t.southEastArrowNorthMiddleWest,t.northEastArrowSouth,t.northEastArrowSouthEast,t.northEastArrowSouthWest,t.northEastArrowSouthMiddleEast,t.northEastArrowSouthMiddleWest]}};function rw(e,t){return e.rangeCount===1?!1:[...e.getRanges()].every(e=>{let n=e.getContainedElement();return n&&t.isSelectable(n)})}const iw=Wr(`px`);var aw=class extends H{constructor(e){super(e);let t=this.bindTemplate;this.isVisible=!1,this.isToggleable=!0,this.set(`top`,0),this.set(`left`,0),this.extendTemplate({attributes:{class:`ck-block-toolbar-button`,style:{top:t.to(`top`,e=>iw(e)),left:t.to(`left`,e=>iw(e))}}})}};const ow=Wr(`px`);var sw=class extends F{toolbarView;panelView;buttonView;_resizeObserver=null;_blockToolbarConfig;static get pluginName(){return`BlockToolbar`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this._blockToolbarConfig=Ex(this.editor.config.get(`blockToolbar`)),this.toolbarView=this._createToolbarView(),this.panelView=this._createPanelView(),this.buttonView=this._createButtonView(),Ya({emitter:this.panelView,contextElements:[this.panelView.element,this.buttonView.element],activator:()=>this.panelView.isVisible,callback:()=>this._hidePanel()})}init(){let e=this.editor,t=e.t,n=t(`Click to edit block`),r=t(`Drag to move`),i=t(`Edit block`),a=e.plugins.has(`DragDropBlockToolbar`),o=a?`${n}\n${r}`:i;this.buttonView.label=o,a&&(this.buttonView.element.dataset.ckeTooltipClass=`ck-tooltip_multi-line`),this.listenTo(e.model.document.selection,`change:range`,(e,t)=>{t.directChange&&this._hidePanel()}),this.listenTo(e.ui,`update`,()=>this._updateButton()),this.listenTo(e,`change:isReadOnly`,()=>this._updateButton(),{priority:`low`}),this.listenTo(e.ui.focusTracker,`change:isFocused`,()=>this._updateButton()),this.listenTo(this.buttonView,`change:isVisible`,(e,t,n)=>{n?this.buttonView.listenTo(window,`resize`,()=>this._updateButton()):(this.buttonView.stopListening(window,`resize`),this._hidePanel())}),this._repositionButtonOnScroll(),e.ui.addToolbar(this.toolbarView,{beforeFocus:()=>this._showPanel(),afterBlur:()=>this._hidePanel()}),e.ui.once(`ready`,()=>{this.toolbarView.fillFromConfig(this._blockToolbarConfig,this.editor.ui.componentFactory);for(let e of this.toolbarView.items)e.on(`execute`,()=>this._hidePanel(!0),{priority:`high`})})}destroy(){super.destroy(),this.panelView.destroy(),this.buttonView.destroy(),this.toolbarView.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_createToolbarView(){let e=this.editor.locale.t,t=!this._blockToolbarConfig.shouldNotGroupWhenFull,n=new Ox(this.editor.locale,{shouldGroupWhenFull:t,isFloating:!0});return n.ariaLabel=e(`Editor block content toolbar`),n}_createPanelView(){let e=this.editor,t=new ab(e.locale);return t.content.add(this.toolbarView),t.class=`ck-toolbar-container`,e.ui.view.body.add(t),this.toolbarView.keystrokes.set(`Esc`,(e,t)=>{this._hidePanel(!0),t()}),t}_createButtonView(){let e=this.editor,t=e.t,n=new aw(e.locale),r=this._blockToolbarConfig.icon,i=Dx[r]||r||Dx.dragIndicator;return n.set({label:t(`Edit block`),icon:i,withText:!1}),n.bind(`isOn`).to(this.panelView,`isVisible`),n.bind(`tooltip`).to(this.panelView,`isVisible`,e=>!e),this.listenTo(n,`execute`,()=>{this.panelView.isVisible?this._hidePanel(!0):this._showPanel()}),this.listenTo(n,`change:isEnabled`,(e,t,n)=>{!n&&this.panelView.isVisible&&this._hidePanel(!1)}),e.ui.view.body.add(n),n}_updateButton(){let e=this.editor,t=e.model,n=e.editing.view;if(!e.ui.focusTracker.isFocused){this._hideButton();return}if(!e.model.canEditAt(e.model.document.selection)){this._hideButton();return}let r=Array.from(t.document.selection.getSelectedBlocks())[0];if(!r||Array.from(this.toolbarView.items).every(e=>!e.isEnabled)){this._hideButton();return}let i=n.domConverter.mapViewToDom(e.editing.mapper.toViewElement(r));this.buttonView.isVisible=!0,this._setupToolbarResize(),this._attachButtonToElement(i),this.panelView.isVisible&&this._showPanel()}_hideButton(){this.buttonView.isVisible=!1}_showPanel(){if(!this.buttonView.isVisible)return;let e=this.panelView.isVisible;this.panelView.show();let t=this._getSelectedEditableElement();this.toolbarView.maxWidth=this._getToolbarMaxWidth(t),this.panelView.pin({target:this.buttonView.element,limiter:t}),e||this.toolbarView.items.get(0).focus()}_getSelectedEditableElement(){let e=this.editor.model.document.selection.getFirstRange().root.rootName;return this.editor.ui.getEditableElement(e)}_hidePanel(e){this.panelView.isVisible=!1,e&&this.editor.editing.view.focus()}_repositionButtonOnScroll(){let{buttonView:e}=this,t=!1,n=(e,n)=>{if(t)return;let r=this._getSelectedEditableElement();n.target!==u.document&&!Tr(r).includes(n.target)||(t=!0,u.window.requestAnimationFrame(()=>{this._updateButton(),t=!1}))};e.on(`change:isVisible`,(t,r,i)=>{i?e.listenTo(u.document,`scroll`,n,{useCapture:!0,usePassive:!0}):e.stopListening(u.document,`scroll`,n)})}_attachButtonToElement(e){let t=this.buttonView.element,n=this._getSelectedEditableElement(),r=window.getComputedStyle(e),i=new O(n),a=parseInt(r.paddingTop,10),o=parseInt(r.lineHeight,10)||parseInt(r.fontSize,10)*1.2,s=new O(t),c=new O(e),l;l=this.editor.locale.uiLanguageDirection===`ltr`?i.left-s.width:i.right;let u=c.top+a+(o-s.height)/2;s.moveTo(l,u);let d=s.toAbsoluteRect();this.buttonView.top=d.top,this.buttonView.left=d.left,this._clipButtonToViewport(this.buttonView,n)}_clipButtonToViewport(e,t){let n=new O(e.element),r=new O(t).getVisible(),i=(...t)=>{e.element.style.clipPath=t.length?`polygon(${t.join(`,`)})`:``},a=t=>{e.isEnabled=!t,e.element.style.pointerEvents=t?`none`:``};if(r&&r.bottom=n.height),i(`0 0`,`100% 0`,`100% calc(100% - ${ow(e)})`,`0 calc(100% - ${ow(e)}`)}else if(r&&r.top>n.top){let e=Math.min(n.height,r.top-n.top);a(e>=n.height),i(`0 ${ow(e)}`,`100% ${ow(e)}`,`100% 100%`,`0 100%`)}else a(!1),i()}_setupToolbarResize(){let e=this._getSelectedEditableElement();this._blockToolbarConfig.shouldNotGroupWhenFull||(this._resizeObserver&&this._resizeObserver.element!==e&&(this._resizeObserver.destroy(),this._resizeObserver=null),this._resizeObserver||=new Hr(e,()=>{this.toolbarView.maxWidth=this._getToolbarMaxWidth(e)}))}_getToolbarMaxWidth(e){let t=new O(e),n=new O(this.buttonView.element),r=this.editor.locale.uiLanguageDirection===`rtl`?n.left-t.right+n.width:t.left-n.left;return ow(t.width+r)}},cw=class extends $y{arrowView;constructor(e){super(e);let t=this.bindTemplate;this.set({withText:!0,role:`menuitem`}),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{class:[`ck-menu-bar__menu__button`],"aria-haspopup":!0,"aria-expanded":this.bindTemplate.to(`isOn`,e=>String(e)),"data-cke-tooltip-disabled":t.to(`isOn`)},on:{mouseenter:t.to(`mouseenter`)}})}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=b_,e.extendTemplate({attributes:{class:`ck-menu-bar__menu__button__arrow`}}),e}},lw=class extends P{children;constructor(e){super(e);let t=this.bindTemplate;this.set(`isVisible`,!1),this.set(`position`,`se`),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-reset`,`ck-menu-bar__menu__panel`,t.to(`position`,e=>`ck-menu-bar__menu__panel_position_${e}`),t.if(`isVisible`,`ck-hidden`,e=>!e)],tabindex:`-1`},children:this.children,on:{selectstart:t.to(e=>{e.target.tagName.toLocaleLowerCase()!==`input`&&e.preventDefault()})}})}focus(e=1){this.children.length&&(e===1?this.children.first.focus():this.children.last.focus())}},uw=class e extends P{buttonView;panelView;focusTracker;keystrokes;constructor(e){super(e);let t=this.bindTemplate;this.buttonView=new cw(e),this.buttonView.delegate(`mouseenter`).to(this),this.buttonView.bind(`isOn`,`isEnabled`).to(this,`isOpen`,`isEnabled`),this.panelView=new lw(e),this.panelView.bind(`isVisible`).to(this,`isOpen`),this.keystrokes=new N,this.focusTracker=new M,this.set(`isOpen`,!1),this.set(`isEnabled`,!0),this.set(`panelPosition`,`w`),this.set(`class`,void 0),this.set(`parentMenuView`,null),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-menu-bar__menu`,t.to(`class`),t.if(`isEnabled`,`ck-disabled`,e=>!e),t.if(`parentMenuView`,`ck-menu-bar__menu_top-level`,e=>!e)]},children:[this.buttonView,this.panelView]})}render(){super.render(),this.focusTracker.add(this.buttonView.element),this.focusTracker.add(this.panelView.element),this.keystrokes.listenTo(this.element),aC.closeOnEscKey(this),this._closeOnDisabled(),this._repositionPanelOnOpen()}_attachBehaviors(){this.parentMenuView?(aC.openOnButtonClick(this),aC.openOnArrowRightKey(this),aC.closeOnArrowLeftKey(this),aC.openAndFocusOnEnterKeyPress(this),aC.closeOnParentClose(this)):(this._propagateArrowKeystrokeEvents(),aC.openAndFocusPanelOnArrowDownKey(this),aC.toggleOnButtonClick(this))}_propagateArrowKeystrokeEvents(){this.keystrokes.set(`arrowright`,(e,t)=>{this.fire(`arrowright`),t()}),this.keystrokes.set(`arrowleft`,(e,t)=>{this.fire(`arrowleft`),t()})}_closeOnDisabled(){this.on(`change:isEnabled`,(e,t,n)=>{n||(this.isOpen=!1)})}_repositionPanelOnOpen(){this.on(`change:isOpen`,(t,n,r)=>{if(!r)return;let i=e._getOptimalPosition({element:this.panelView.element,target:this.buttonView.element,fitInViewport:!0,positions:this._panelPositions});this.panelView.position=i?i.name:this._defaultMenuPositionName})}focus(){this.buttonView.focus()}get _panelPositions(){let{southEast:e,southWest:t,northEast:n,northWest:r,westSouth:i,eastSouth:a,westNorth:o,eastNorth:s}=oC;return this.locale.uiLanguageDirection===`ltr`?this.parentMenuView?[a,s,i,o]:[e,t,n,r]:this.parentMenuView?[i,o,a,s]:[t,e,r,n]}get _defaultMenuPositionName(){return this.locale.uiLanguageDirection===`ltr`?this.parentMenuView?`es`:`se`:this.parentMenuView?`ws`:`sw`}static _getOptimalPosition=Xr},dw=class extends mx{constructor(e){super(e),this.role=`menu`,this.items.on(`change`,this._setItemsCheckSpace.bind(this))}_setItemsCheckSpace(){let e=Array.from(this.items).some(e=>{let t=fw(e);return t&&t.isToggleable});this.items.forEach(t=>{let n=fw(t);n&&(n.hasCheckSpace=e)})}};function fw(e){return e instanceof dx?e.children.map(e=>pw(e)?e.buttonView:e).find(e=>e instanceof $y):null}function pw(e){return typeof e==`object`&&`buttonView`in e&&e.buttonView instanceof H}var mw=class extends vb{constructor(e){super(e),this.set({withText:!0,withKeystroke:!0,tooltip:!1,role:`menuitem`}),this.extendTemplate({attributes:{class:[`ck-menu-bar__menu__item__button`]}})}};const hw=[`mouseenter`,`arrowleft`,`arrowright`,`change:isOpen`];var gw=class extends P{children;menus=[];constructor(e){super(e);let t=e.t,n=this.bindTemplate;this.set({isOpen:!1,isFocusBorderEnabled:!1}),this._setupIsOpenUpdater(),this.children=this.createCollection(),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-menu-bar`,n.if(`isFocusBorderEnabled`,`ck-menu-bar_focus-border-enabled`)],"aria-label":t(`Editor menu bar`),role:`menubar`},children:this.children})}fillFromConfig(e,t,n=[]){let r=this.locale,i=lC({normalizedConfig:e,locale:r,componentFactory:t,extraItems:n}).items.map(e=>this._createMenu({componentFactory:t,menuDefinition:e}));this.children.addMany(i)}render(){super.render(),iC.toggleMenusAndFocusItemsOnHover(this),iC.closeMenusWhenTheBarCloses(this),iC.closeMenuWhenAnotherOnTheSameLevelOpens(this),iC.focusCycleMenusOnArrows(this),iC.closeOnClickOutside(this),iC.enableFocusHighlightOnInteraction(this)}focus(){this.children.first&&this.children.first.focus()}close(){for(let e of this.children)e.isOpen=!1;this.isOpen=!1}disable(){for(let e of this.children)e.isEnabled=!1}enable(){for(let e of this.children)e.isEnabled=!0}registerMenu(e,t=null){t?(e.delegate(...hw).to(t),e.parentMenuView=t):e.delegate(...hw).to(this,e=>`menu:`+e),e._attachBehaviors(),this.menus.push(e)}_createMenu({componentFactory:e,menuDefinition:t,parentMenuView:n}){let r=this.locale,i=new uw(r);return this.registerMenu(i,n),i.buttonView.set({label:t.label}),i.once(`change:isOpen`,()=>{let n=new dw(r);n.ariaLabel=t.label,i.panelView.children.add(n),n.items.addMany(this._createMenuItems({menuDefinition:t,parentMenuView:i,componentFactory:e}))}),i}_createMenuItems({menuDefinition:e,parentMenuView:t,componentFactory:n}){let r=this.locale,i=[];for(let a of e.groups){for(let e of a.items){let a=new rC(r,t);if(Xe(e))a.children.add(this._createMenu({componentFactory:n,menuDefinition:e,parentMenuView:t}));else{let r=this._createMenuItemContentFromFactory({componentName:e,componentFactory:n,parentMenuView:t});if(!r)continue;a.children.add(r)}i.push(a)}a!==e.groups[e.groups.length-1]&&i.push(new fx(r))}return i}_createMenuItemContentFromFactory({componentName:e,parentMenuView:t,componentFactory:n}){let r=n.create(e);return r instanceof uw||r instanceof U||r instanceof mw?(this._registerMenuTree(r,t),r.on(`execute`,()=>{this.close()}),r):(T(`menu-bar-component-unsupported`,{componentName:e,componentView:r}),null)}_registerMenuTree(e,t){if(!(e instanceof uw)){e.delegate(`mouseenter`).to(t);return}this.registerMenu(e,t);let n=e.panelView.children.filter(e=>e instanceof dw)[0];if(!n){e.delegate(`mouseenter`).to(t);return}let r=n.items.filter(e=>e instanceof dx);for(let t of r)this._registerMenuTree(t.children.get(0),e)}_setupIsOpenUpdater(){let e;this.on(`menu:change:isOpen`,(t,n,r)=>{clearTimeout(e),r?this.isOpen=!0:e=setTimeout(()=>{this.isOpen=Array.from(this.children).some(e=>e.isOpen)},0)})}};const _w=D();var vw=class extends _w{total;_reader;_data;constructor(){super();let e=new window.FileReader;this._reader=e,this._data=void 0,this.set(`loaded`,0),e.onprogress=e=>{this.loaded=e.loaded}}get error(){return this._reader.error}get data(){return this._data}read(e){let t=this._reader;return this.total=e.size,new Promise((n,r)=>{t.onload=()=>{let e=t.result;this._data=e,n(e)},t.onerror=()=>{r(`error`)},t.onabort=()=>{r(`aborted`)},this._reader.readAsDataURL(e)})}abort(){this._reader.abort()}};const yw=D();var bw=class extends F{loaders=new Fi;_loadersMap=new Map;_pendingAction=null;static get pluginName(){return`FileRepository`}static get isOfficialPlugin(){return!0}static get requires(){return[wg]}init(){this.loaders.on(`change`,()=>this._updatePendingAction()),this.set(`uploaded`,0),this.set(`uploadTotal`,null),this.bind(`uploadedPercent`).to(this,`uploaded`,this,`uploadTotal`,(e,t)=>t?e/t*100:0)}getLoader(e){return this._loadersMap.get(e)||null}createLoader(e){if(!this.createUploadAdapter)return T(`filerepository-no-upload-adapter`),null;let t=new xw(Promise.resolve(e),this.createUploadAdapter);return this.loaders.add(t),this._loadersMap.set(e,t),e instanceof Promise&&t.file.then(e=>{this._loadersMap.set(e,t)}).catch(()=>{}),t.on(`change:uploaded`,()=>{let e=0;for(let t of this.loaders)e+=t.uploaded;this.uploaded=e}),t.on(`change:uploadTotal`,()=>{let e=0;for(let t of this.loaders)t.uploadTotal&&(e+=t.uploadTotal);this.uploadTotal=e}),t}destroyLoader(e){let t=e instanceof xw?e:this.getLoader(e);t._destroy(),this.loaders.remove(t),this._loadersMap.forEach((e,n)=>{e===t&&this._loadersMap.delete(n)})}_updatePendingAction(){let e=this.editor.plugins.get(wg);if(this.loaders.length){if(!this._pendingAction){let t=this.editor.t,n=e=>`${t(`Upload in progress`)} ${parseInt(e)}%.`;this._pendingAction=e.add(n(this.uploadedPercent)),this._pendingAction.bind(`message`).to(this,`uploadedPercent`,n)}}else e.remove(this._pendingAction),this._pendingAction=null}},xw=class extends yw{id;_filePromiseWrapper;_adapter;_reader;constructor(e,t){super(),this.id=he(),this._filePromiseWrapper=this._createFilePromiseWrapper(e),this._adapter=t(this),this._reader=new vw,this.set(`status`,`idle`),this.set(`uploaded`,0),this.set(`uploadTotal`,null),this.bind(`uploadedPercent`).to(this,`uploaded`,this,`uploadTotal`,(e,t)=>t?e/t*100:0),this.set(`uploadResponse`,null)}get file(){return this._filePromiseWrapper?this._filePromiseWrapper.promise.then(e=>this._filePromiseWrapper?e:null):Promise.resolve(null)}get data(){return this._reader.data}read(){if(this.status!=`idle`)throw new w(`filerepository-read-wrong-status`,this);return this.status=`reading`,this.file.then(e=>this._reader.read(e)).then(e=>{if(this.status!==`reading`)throw this.status;return this.status=`idle`,e}).catch(e=>{throw e===`aborted`?(this.status=`aborted`,`aborted`):(this.status=`error`,this._reader.error?this._reader.error:e)})}upload(){if(this.status!=`idle`)throw new w(`filerepository-upload-wrong-status`,this);return this.status=`uploading`,this.file.then(()=>this._adapter.upload()).then(e=>(this.uploadResponse=e,this.status=`idle`,e)).catch(e=>{throw this.status===`aborted`?`aborted`:(this.status=`error`,e)})}abort(){let e=this.status;this.status=`aborted`,this._filePromiseWrapper.isFulfilled?e==`reading`?this._reader.abort():e==`uploading`&&this._adapter.abort&&this._adapter.abort():(this._filePromiseWrapper.promise.catch(()=>{}),this._filePromiseWrapper.rejecter(`aborted`)),this._destroy()}_destroy(){this._filePromiseWrapper=void 0,this._reader=void 0,this._adapter=void 0,this.uploadResponse=void 0}_createFilePromiseWrapper(e){let t={};return t.promise=new Promise((n,r)=>{t.rejecter=r,t.isFulfilled=!1,e.then(e=>{t.isFulfilled=!0,n(e)}).catch(e=>{t.isFulfilled=!0,r(e)})}),t}},Sw=class extends F{static get requires(){return[bw]}static get pluginName(){return`Base64UploadAdapter`}static get licenseFeatureCode(){return`B64A`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){this.editor.plugins.get(bw).createUploadAdapter=e=>new Cw(e)}},Cw=class{loader;reader;constructor(e){this.loader=e}upload(){return new Promise((e,t)=>{let n=this.reader=new window.FileReader;n.addEventListener(`load`,()=>{e({default:n.result})}),n.addEventListener(`error`,e=>{t(e)}),n.addEventListener(`abort`,()=>{t()}),this.loader.file.then(e=>{n.readAsDataURL(e)})})}abort(){this.reader.abort()}},ww=class extends F{static get requires(){return[bw]}static get pluginName(){return`SimpleUploadAdapter`}static get licenseFeatureCode(){return`SUA`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){let e=this.editor.config.get(`simpleUpload`);if(e){if(!e.uploadUrl){T(`simple-upload-adapter-missing-uploadurl`);return}this.editor.plugins.get(bw).createUploadAdapter=t=>new Tw(t,e)}}},Tw=class{loader;options;xhr;constructor(e,t){this.loader=e,this.options=t}upload(){return this.loader.file.then(e=>new Promise((t,n)=>{this._initRequest(),this._initListeners(t,n,e),this._sendRequest(e)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){let e=this.xhr=new XMLHttpRequest;e.open(`POST`,this.options.uploadUrl,!0),e.responseType=`json`}_initListeners(e,t,n){let r=this.xhr,i=this.loader,a=`Couldn't upload file: ${n.name}.`;r.addEventListener(`error`,()=>t(a)),r.addEventListener(`abort`,()=>t()),r.addEventListener(`load`,()=>{let n=r.response;if(!n||n.error)return t(n&&n.error&&n.error.message?n.error.message:a);let i=n.url?{default:n.url}:n.urls;e({...n,urls:i})}),r.upload&&r.upload.addEventListener(`progress`,e=>{e.lengthComputable&&(i.uploadTotal=e.total,i.uploaded=e.loaded)})}_sendRequest(e){let t=this.options.headers||{};typeof t==`function`&&(t=t(e));let n=this.options.withCredentials||!1;for(let e of Object.keys(t))this.xhr.setRequestHeader(e,t[e]);this.xhr.withCredentials=n;let r=new FormData;r.append(`upload`,e),this.xhr.send(r)}};const Ew=`ckCsrfToken`;function Dw(){let e=Ow(Ew);return(!e||e.length!=40)&&(e=Aw(40),kw(Ew,e)),e}function Ow(e){e=e.toLowerCase();let t=document.cookie.split(`;`);for(let n of t){let t=n.split(`=`);if(decodeURIComponent(t[0].trim().toLowerCase())===e)return decodeURIComponent(t[1])}return null}function kw(e,t){document.cookie=encodeURIComponent(e)+`=`+encodeURIComponent(t)+`;path=/`}function Aw(e){let t=``,n=new Uint8Array(e);window.crypto.getRandomValues(n);for(let e=0;e.5?r.toUpperCase():r}return t}var jw=class extends F{static get requires(){return[bw]}static get pluginName(){return`CKFinderUploadAdapter`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.config.get(`ckfinder.uploadUrl`);e&&(this.editor.plugins.get(bw).createUploadAdapter=t=>new Mw(t,e,this.editor.t))}},Mw=class{loader;url;t;xhr;constructor(e,t,n){this.loader=e,this.url=t,this.t=n}upload(){return this.loader.file.then(e=>new Promise((t,n)=>{this._initRequest(),this._initListeners(t,n,e),this._sendRequest(e)}))}abort(){this.xhr&&this.xhr.abort()}_initRequest(){let e=this.xhr=new XMLHttpRequest;e.open(`POST`,this.url,!0),e.responseType=`json`}_initListeners(e,t,n){let r=this.xhr,i=this.loader,a=this.t,o=a(`Cannot upload file:`)+` ${n.name}.`;r.addEventListener(`error`,()=>t(o)),r.addEventListener(`abort`,()=>t()),r.addEventListener(`load`,()=>{let n=r.response;if(!n||!n.uploaded)return t(n&&n.error&&n.error.message?n.error.message:o);e({default:n.url})}),r.upload&&r.upload.addEventListener(`progress`,e=>{e.lengthComputable&&(i.uploadTotal=e.total,i.uploaded=e.loaded)})}_sendRequest(e){let t=new FormData;t.append(`upload`,e),t.append(`ckCsrfToken`,Dw()),this.xhr.send(t)}};const Nw=[`left`,`right`,`center`,`justify`];function Pw(e){return Nw.includes(e)}function Fw(e,t){return t.contentLanguageDirection==`rtl`?e===`right`:e===`left`}function Iw(e){let t=e.map(e=>{let t;return t=typeof e==`string`?{name:e}:e,t}).filter(e=>{let t=Nw.includes(e.name);return t||T(`alignment-config-name-not-recognized`,{option:e}),t}),n=t.filter(e=>!!e.className).length;if(n&&n{let i=r.slice(n+1);if(i.some(e=>e.name==t.name))throw new w(`alignment-config-name-already-defined`,{option:t,configuredOptions:e});if(t.className&&i.some(e=>e.className==t.className))throw new w(`alignment-config-classname-already-defined`,{option:t,configuredOptions:e})}),t}const Lw=`alignment`;var Rw=class extends I{refresh(){let e=this.editor.locale,t=j(this.editor.model.document.selection.getSelectedBlocks());this.isEnabled=!!t&&this._canBeAligned(t),this.isEnabled&&t.hasAttribute(`alignment`)?this.value=t.getAttribute(`alignment`):this.value=e.contentLanguageDirection===`rtl`?`right`:`left`}execute(e={}){let t=this.editor,n=t.locale,r=t.model,i=r.document,a=e.value;r.change(e=>{let t=Array.from(i.selection.getSelectedBlocks()).filter(e=>this._canBeAligned(e)),r=t[0].getAttribute(`alignment`);Fw(a,n)||r===a||!a?zw(t,e):Bw(t,e,a)})}_canBeAligned(e){return this.editor.model.schema.checkAttribute(e,Lw)}};function zw(e,t){for(let n of e)t.removeAttribute(Lw,n)}function Bw(e,t,n){for(let r of e)t.setAttribute(Lw,n,r)}var Vw=class extends F{static get pluginName(){return`AlignmentEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`alignment`,{options:Nw.map(e=>({name:e}))})}init(){let e=this.editor,t=e.locale,n=e.model.schema,r=Iw(e.config.get(`alignment.options`)).filter(e=>Pw(e.name)&&!Fw(e.name,t)),i=r.some(e=>!!e.className);n.extend(`$block`,{allowAttributes:`alignment`}),e.model.schema.setAttributeProperties(`alignment`,{isFormatting:!0,blockAlignment:Hw(t)}),i?e.conversion.attributeToAttribute(Kw(r)):e.conversion.for(`downcast`).attributeToAttribute(Uw(r));let a=Ww(r);for(let t of a)e.conversion.for(`upcast`).attributeToAttribute(t);let o=Gw(r);for(let t of o)e.conversion.for(`upcast`).attributeToAttribute(t);e.commands.add(`alignment`,new Rw(e))}};function Hw(e){let t={left:{value:`left`},right:{value:`right`},center:{value:`center`},justify:{value:`justify`}},n=e.contentLanguageDirection==`rtl`?`right`:`left`;return t[n].isDefault=!0,t}function Uw(e){let t={};for(let{name:n}of e)t[n]={key:`style`,value:{"text-align":n}};return{model:{key:`alignment`,values:e.map(e=>e.name)},view:t}}function Ww(e){let t=[];for(let{name:n}of e)t.push({view:{key:`style`,value:{"text-align":n}},model:{key:`alignment`,value:n}});return t}function Gw(e){let t=[];for(let{name:n}of e)t.push({view:{key:`align`,value:n},model:{key:`alignment`,value:n}});return t}function Kw(e){let t={};for(let n of e)t[n.name]={key:`class`,value:n.className};return{model:{key:`alignment`,values:e.map(e=>e.name)},view:t}}const qw=new Map([[`left`,Gg],[`right`,qg],[`center`,Ug],[`justify`,Wg]]);var Jw=class extends F{get localizedOptionTitles(){let e=this.editor.t;return{left:e(`Align left`),right:e(`Align right`),center:e(`Align center`),justify:e(`Justify`)}}static get pluginName(){return`AlignmentUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=Iw(e.config.get(`alignment.options`));t.map(e=>e.name).filter(Pw).forEach(e=>this._addButton(e)),this._addToolbarDropdown(t),this._addMenuBarMenu(t)}_addButton(e){this.editor.ui.componentFactory.add(`alignment:${e}`,t=>this._createButton(t,e))}_createButton(e,t,n={}){let r=this.editor,i=r.commands.get(`alignment`),a=new H(e);return a.set({label:this.localizedOptionTitles[t],icon:qw.get(t),tooltip:!0,isToggleable:!0,...n}),a.bind(`isEnabled`).to(i),a.bind(`isOn`).to(i,`value`,e=>e===t),this.listenTo(a,`execute`,()=>{r.execute(`alignment`,{value:t}),r.editing.view.focus()}),a}_addToolbarDropdown(e){let t=this.editor;t.ui.componentFactory.add(`alignment`,n=>{let r=Nx(n),i=n.uiLanguageDirection===`rtl`?`w`:`e`,a=n.t;Fx(r,()=>e.map(e=>this._createButton(n,e.name,{tooltipPosition:i})),{enableActiveItemFocusOnDropdownOpen:!0,isVertical:!0,ariaLabel:a(`Text alignment toolbar`)}),r.buttonView.set({label:a(`Text alignment`),tooltip:!0}),r.extendTemplate({attributes:{class:`ck-alignment-dropdown`}});let o=n.contentLanguageDirection===`rtl`?qw.get(`right`):qw.get(`left`),s=t.commands.get(`alignment`);return r.buttonView.bind(`icon`).to(s,`value`,e=>qw.get(e)||o),r.bind(`isEnabled`).to(s,`isEnabled`),this.listenTo(r,`execute`,()=>{t.editing.view.focus()}),r})}_addMenuBarMenu(e){let t=this.editor;t.ui.componentFactory.add(`menuBar:alignment`,n=>{let r=t.commands.get(`alignment`),i=n.t,a=new uw(n),o=new dw(n);a.bind(`isEnabled`).to(r),o.set({ariaLabel:i(`Text alignment`),role:`menu`}),a.buttonView.set({label:i(`Text alignment`)});for(let i of e){let e=new rC(n,a),s=new U(n);s.delegate(`execute`).to(a),s.set({label:this.localizedOptionTitles[i.name],icon:qw.get(i.name),role:`menuitemcheckbox`,isToggleable:!0}),s.on(`execute`,()=>{t.execute(`alignment`,{value:i.name}),t.editing.view.focus()}),s.bind(`isOn`).to(r,`value`,e=>e===i.name),s.bind(`isEnabled`).to(r,`isEnabled`),e.children.add(s),o.items.add(e)}return a.panelView.children.add(o),a})}},Yw=class extends F{static get requires(){return[Vw,Jw]}static get pluginName(){return`Alignment`}static get isOfficialPlugin(){return!0}},Xw=class{model;limit;_isLocked;_size;_batch=null;_changeCallback;_selectionChangeCallback;constructor(e,t=20){this.model=e,this._size=0,this.limit=t,this._isLocked=!1,this._changeCallback=(e,t)=>{t.isLocal&&t.isUndoable&&t!==this._batch&&this._reset(!0)},this._selectionChangeCallback=()=>{this._reset()},this.model.document.on(`change`,this._changeCallback),this.model.document.selection.on(`change:range`,this._selectionChangeCallback),this.model.document.selection.on(`change:attribute`,this._selectionChangeCallback)}get batch(){return this._batch||=this.model.createBatch({isTyping:!0}),this._batch}get size(){return this._size}input(e){this._size+=e,this._size>=this.limit&&this._reset(!0)}get isLocked(){return this._isLocked}lock(){this._isLocked=!0}unlock(){this._isLocked=!1}destroy(){this.model.document.off(`change`,this._changeCallback),this.model.document.selection.off(`change:range`,this._selectionChangeCallback),this.model.document.selection.off(`change:attribute`,this._selectionChangeCallback)}_reset(e=!1){(!this.isLocked||e)&&(this._batch=null,this._size=0)}},Zw=class extends I{_buffer;constructor(e,t){super(e),this._buffer=new Xw(e.model,t),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}destroy(){super.destroy(),this._buffer.destroy()}execute(e={}){let t=this.editor.model,n=t.document,r=e.text||``,i=r.length,a=n.selection;if(e.selection?a=e.selection:e.range&&(a=t.createSelection(e.range)),!t.canEditAt(a))return;let o=e.resultRange;t.enqueueChange(this._buffer.batch,e=>{this._buffer.lock();let s=Array.from(n.selection.getAttributes());t.deleteContent(a),r&&t.insertContent(e.createText(r,s),a),o?e.setSelection(o):a.is(`documentSelection`)||e.setSelection(a),this._buffer.unlock(),this._buffer.input(i)})}};const Qw=[`insertText`,`insertReplacementText`],$w=[...Qw,`insertCompositionText`];var eT=class extends kc{focusObserver;constructor(e){super(e),this.focusObserver=e.getObserver(Ic);let t=p.isAndroid?$w:Qw,n=e.document;n.on(`beforeinput`,(r,i)=>{if(!this.isEnabled)return;let{data:a,targetRanges:o,inputType:s,domEvent:c,isComposing:l}=i;if(!t.includes(s))return;this.focusObserver.flush();let u=new pe(n,`insertText`);n.fire(u,new Ac(e,c,{text:a,selection:e.createSelection(o),isComposing:l})),u.stop.called&&r.stop()}),p.isAndroid||n.on(`compositionend`,(t,{data:r,domEvent:i})=>{this.isEnabled&&r&&n.fire(`insertText`,new Ac(e,i,{text:r,isComposing:!0}))},{priority:`low`})}observe(){}stopObserving(){}},tT=class extends F{_typingQueue;static get pluginName(){return`Input`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model,n=e.editing.view,r=e.editing.mapper,i=t.document.selection;this._typingQueue=new nT(e),n.addObserver(eT);let a=new Zw(e,e.config.get(`typing.undoStep`)||20);e.commands.add(`insertText`,a),e.commands.add(`input`,a),this.listenTo(n.document,`beforeinput`,()=>{this._typingQueue.flush(`next beforeinput`)},{priority:`high`}),this.listenTo(n.document,`insertText`,(e,o)=>{let{text:s,selection:c}=o;if(n.document.selection.isFake&&c&&n.document.selection.isSimilar(c)&&o.preventDefault(),c&&Array.from(c.getRanges()).some(e=>!e.isCollapsed)&&o.preventDefault(),!a.isEnabled){o.preventDefault();return}let l;c&&(l=Array.from(c.getRanges()).filter(e=>e.root.is(`rootElement`)).map(e=>r.toModelRange(e)).map(e=>Uf(e,t.schema)||e)),(!l||!l.length)&&(l=Array.from(i.getRanges()));let u=s;if(p.isAndroid){let e=Array.from(l[0].getItems()).reduce((e,t)=>e+(t.is(`$textProxy`)?t.data:``),``);if(e&&(e.length<=u.length?u.startsWith(e)&&(u=u.substring(e.length),l[0].start=l[0].start.getShiftedBy(e.length)):e.startsWith(u)&&(l[0].start=l[0].start.getShiftedBy(u.length),u=``)),u.length==0&&l[0].isCollapsed)return}let d={text:u,selection:t.createSelection(l)};this._typingQueue.push(d,!!o.isComposing),o.domEvent.defaultPrevented&&this._typingQueue.flush(`beforeinput default prevented`)}),p.isAndroid?this.listenTo(n.document,`keydown`,(e,r)=>{i.isCollapsed||r.keyCode!=229||!n.document.isComposing||rT(t,a)}):this.listenTo(n.document,`compositionstart`,()=>{i.isCollapsed||rT(t,a)},{priority:`high`}),this.listenTo(n.document,`mutations`,(e,{mutations:t})=>{if(this._typingQueue.hasAffectedElements())for(let{node:e}of t){let t=aT(e,r),n=r.toModelElement(t);if(this._typingQueue.isElementAffected(n)){this._typingQueue.flush(`mutations`);return}}}),this.listenTo(n.document,`compositionend`,()=>{this._typingQueue.flush(`before composition end`)},{priority:`high`}),this.listenTo(n.document,`compositionend`,()=>{this._typingQueue.flush(`after composition end`);let e=[];if(this._typingQueue.hasAffectedElements())for(let t of this._typingQueue.flushAffectedElements()){let n=r.toViewElement(t);n&&e.push({type:`children`,node:n})}(e.length||!p.isAndroid)&&n.document.fire(`mutations`,{mutations:e})},{priority:`lowest`})}destroy(){super.destroy(),this._typingQueue.destroy()}},nT=class{editor;flushDebounced=Kt(()=>this.flush(`timeout`),50);_queue=[];_isComposing=!1;_affectedElements=new Set;constructor(e){this.editor=e}destroy(){for(this.flushDebounced.cancel(),this._affectedElements.clear();this._queue.length;)this.shift()}get length(){return this._queue.length}push(e,t){let n={text:e.text};if(e.selection){n.selectionRanges=[];for(let t of e.selection.getRanges())n.selectionRanges.push(xl.fromRange(t)),this._affectedElements.add(t.start.parent)}this._queue.push(n),this._isComposing||=t,this.flushDebounced()}shift(){let e=this._queue.shift(),t={text:e.text};if(e.selectionRanges){let n=e.selectionRanges.map(e=>iT(e)).filter(e=>!!e);n.length&&(t.selection=this.editor.model.createSelection(n))}return t}flush(e){let t=this.editor,n=t.model,r=t.editing.view;if(this.flushDebounced.cancel(),!this._queue.length)return;let i=t.commands.get(`insertText`).buffer;n.enqueueChange(i.batch,()=>{for(i.lock();this._queue.length;){let e=this.shift();t.execute(`insertText`,e)}i.unlock(),this._isComposing||this._affectedElements.clear(),this._isComposing=!1}),r.scrollToTheSelection()}isElementAffected(e){return this._affectedElements.has(e)}hasAffectedElements(){return this._affectedElements.size>0}flushAffectedElements(){let e=Array.from(this._affectedElements);return this._affectedElements.clear(),e}};function rT(e,t){if(!t.isEnabled)return;let n=t.buffer;n.lock(),e.enqueueChange(n.batch,()=>{e.deleteContent(e.document.selection)}),n.unlock()}function iT(e){let t=e.toRange();return e.detach(),t.root.rootName==`$graveyard`?null:t}function aT(e,t){let n=e.is(`$text`)?e.parent:e;for(;!t.toModelElement(n);)n=n.parent;return n}var oT=class extends I{direction;_buffer;constructor(e,t){super(e),this.direction=t,this._buffer=new Xw(e.model,e.config.get(`typing.undoStep`)),this._isEnabledBasedOnSelection=!1}get buffer(){return this._buffer}execute(e={}){let t=this.editor.model,n=t.document;t.enqueueChange(this._buffer.batch,r=>{this._buffer.lock();let i=r.createSelection(e.selection||n.selection);if(!t.canEditAt(i))return;let a=e.sequence||1,o=i.isCollapsed;if(i.isCollapsed&&t.modifySelection(i,{direction:this.direction,unit:e.unit,treatEmojiAsSingleUnit:!0}),this._shouldEntireContentBeReplacedWithParagraph(a)){this._replaceEntireContentWithParagraph(r);return}if(this._shouldReplaceFirstBlockWithParagraph(i,a)){this.editor.execute(`paragraph`,{selection:i});return}if(i.isCollapsed)return;let s=0;i.getFirstRange().getMinimalFlatRanges().forEach(e=>{s+=dr(e.getWalker({singleCharacters:!0,ignoreElementEnd:!0,shallow:!0}))}),t.deleteContent(i,{doNotResetEntireContent:o,direction:this.direction}),this._buffer.input(s),r.setSelection(i),this._buffer.unlock()})}_shouldEntireContentBeReplacedWithParagraph(e){if(e>1)return!1;let t=this.editor.model,n=t.document.selection,r=t.schema.getLimitElement(n);if(!(n.isCollapsed&&n.containsEntireContent(r))||!t.schema.checkChild(r,`paragraph`))return!1;let i=r.getChild(0);return!(i&&i.is(`element`,`paragraph`))}_replaceEntireContentWithParagraph(e){let t=this.editor.model,n=t.document.selection,r=t.schema.getLimitElement(n),i=e.createElement(`paragraph`);e.remove(e.createRangeIn(r)),e.insert(i,r),e.setSelection(i,0)}_shouldReplaceFirstBlockWithParagraph(e,t){let n=this.editor.model;if(t>1||this.direction!=`backward`||!e.isCollapsed)return!1;let r=e.getFirstPosition(),i=n.schema.getLimitElement(r),a=i.getChild(0);return!(r.parent!=a||!e.containsEntireContent(a)||!n.schema.checkChild(i,`paragraph`)||a.name==`paragraph`)}};const sT=`word`,cT=`selection`,lT=`backward`,uT=`forward`,dT={deleteContent:{unit:cT,direction:lT},deleteContentBackward:{unit:`codePoint`,direction:lT},deleteWordBackward:{unit:sT,direction:lT},deleteHardLineBackward:{unit:cT,direction:lT},deleteSoftLineBackward:{unit:cT,direction:lT},deleteContentForward:{unit:`character`,direction:uT},deleteWordForward:{unit:sT,direction:uT},deleteHardLineForward:{unit:cT,direction:uT},deleteSoftLineForward:{unit:cT,direction:uT}};var fT=class extends kc{constructor(e){super(e);let t=e.document,n=0;t.on(`keydown`,()=>{n++}),t.on(`keyup`,()=>{n=0}),t.on(`beforeinput`,(r,i)=>{if(!this.isEnabled)return;let{targetRanges:a,domEvent:o,inputType:s}=i,c=dT[s];if(!c)return;let l={direction:c.direction,unit:c.unit,sequence:n};l.unit==cT&&(l.selectionToRemove=e.createSelection(a[0])),s===`deleteContentBackward`&&(p.isAndroid&&(l.sequence=1),mT(a)&&(l.unit=cT,l.selectionToRemove=e.createSelection(a)));let u=new ls(t,`delete`,a[0]);t.fire(u,new Ac(e,o,l)),u.stop.called&&r.stop()}),p.isBlink&&pT(this)}observe(){}stopObserving(){}};function pT(e){let t=e.view,n=t.document,r=null,i=!1;n.on(`keydown`,(e,{keyCode:t})=>{r=t,i=!1}),n.on(`keyup`,(s,{keyCode:c,domEvent:l})=>{let u=n.selection,d=e.isEnabled&&c==r&&a(c)&&!u.isCollapsed&&!i;if(r=null,d){let e=new ls(n,`delete`,u.getFirstRange()),r={unit:cT,direction:o(c),selectionToRemove:u};n.fire(e,new Ac(t,l,r))}}),n.on(`beforeinput`,(e,{inputType:t})=>{let n=dT[t];a(r)&&n&&n.direction==o(r)&&(i=!0)},{priority:`high`}),n.on(`beforeinput`,(e,{inputType:t,data:n})=>{r==k.delete&&t==`insertText`&&n==``&&e.stop()},{priority:`high`});function a(e){return e==k.backspace||e==k.delete}function o(e){return e==k.backspace?lT:uT}}function mT(e){if(e.length!=1||e[0].isCollapsed)return!1;let t=e[0].getWalker({direction:`backward`,singleCharacters:!0,ignoreElementEnd:!0}),n=0;for(let{nextPosition:e,item:r}of t){if(e.parent.is(`$text`)){let t=e.parent.data,r=e.offset;if(ra(t,r)||ia(t,r)||oa(t,r))continue;n++}else(r.is(`containerElement`)||r.is(`emptyElement`))&&n++;if(n>1)return!0}return!1}var hT=class extends F{_undoOnBackspace;static get pluginName(){return`Delete`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view,n=t.document,r=e.model.document;t.addObserver(fT),this._undoOnBackspace=!1;let i=new oT(e,`forward`);e.commands.add(`deleteForward`,i),e.commands.add(`forwardDelete`,i),e.commands.add(`delete`,new oT(e,`backward`)),this.listenTo(n,`delete`,(r,i)=>{n.isComposing||i.preventDefault();let{direction:a,sequence:o,selectionToRemove:s,unit:c}=i,l=a===`forward`?`deleteForward`:`delete`,u={sequence:o};if(c==`selection`){let t=Array.from(s.getRanges()).map(t=>e.editing.mapper.toModelRange(t)).map(t=>Uf(t,e.model.schema)||t);u.selection=e.model.createSelection(t)}else u.unit=c;e.execute(l,u),t.scrollToTheSelection()},{priority:`low`}),this.listenTo(n,`keydown`,(i,a)=>{if(n.isComposing||a.keyCode!=k.backspace||!r.selection.isCollapsed)return;let o=e.model.schema.getLimitElement(r.selection),s=e.model.createPositionAt(o,0);if(s.isTouching(r.selection.getFirstPosition())){a.preventDefault();let r=e.model.schema.getNearestSelectionRange(s,`forward`);if(!r)return;let i=t.createSelection(e.editing.mapper.toViewRange(r)),o=i.getFirstRange(),c=new ls(document,`delete`,o),l={unit:`selection`,direction:`backward`,selectionToRemove:i};n.fire(c,new Ac(t,a.domEvent,l))}}),this.editor.plugins.has(`UndoEditing`)&&(this.listenTo(n,`delete`,(t,n)=>{this._undoOnBackspace&&n.direction==`backward`&&n.sequence==1&&n.unit==`codePoint`&&(this._undoOnBackspace=!1,e.execute(`undo`),n.preventDefault(),t.stop())},{context:`$capture`}),this.listenTo(r,`change`,()=>{this._undoOnBackspace=!1}))}requestUndoOnBackspace(){this.editor.plugins.has(`UndoEditing`)&&(this._undoOnBackspace=!0)}},gT=class extends F{static get requires(){return[tT,hT]}static get pluginName(){return`Typing`}static get isOfficialPlugin(){return!0}};function _T(e,t){let n=e.start;return{text:Array.from(e.getWalker({ignoreElementEnd:!1})).reduce((e,{item:r})=>r.is(`$text`)||r.is(`$textProxy`)?e+r.data:(n=t.createPositionAfter(r),``),``),range:t.createRange(n,e.end)}}const vT=D();var yT=class extends vT{model;testCallback;_hasMatch;constructor(e,t){super(),this.model=e,this.testCallback=t,this._hasMatch=!1,this.set(`isEnabled`,!0),this.on(`change:isEnabled`,()=>{this.isEnabled?this._startListening():(this.stopListening(e.document.selection),this.stopListening(e.document))}),this._startListening()}get hasMatch(){return this._hasMatch}_startListening(){let e=this.model.document;this.listenTo(e.selection,`change:range`,(t,{directChange:n})=>{if(n){if(!e.selection.isCollapsed){this.hasMatch&&(this.fire(`unmatched`),this._hasMatch=!1);return}this._evaluateTextBeforeSelection(`selection`)}}),this.listenTo(e,`change:data`,(e,t)=>{t.isUndo||!t.isLocal||this._evaluateTextBeforeSelection(`data`,{batch:t})})}_evaluateTextBeforeSelection(e,t={}){let n=this.model,r=n.document.selection,{text:i,range:a}=_T(n.createRange(n.createPositionAt(r.focus.parent,0),r.focus),n),o=this.testCallback(i);if(!o&&this.hasMatch&&this.fire(`unmatched`),this._hasMatch=!!o,o){let n=Object.assign(t,{text:i,range:a});typeof o==`object`&&Object.assign(n,o),this.fire(`matched:${e}`,n)}}},bT=class extends F{attributes;_overrideUid;_isNextGravityRestorationSkipped=!1;static get pluginName(){return`TwoStepCaretMovement`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this.attributes=new Set,this._overrideUid=null}init(){let e=this.editor,t=e.model,n=e.editing.view,r=e.locale,i=t.document.selection;this.listenTo(n.document,`arrowKey`,(e,t)=>{if(!i.isCollapsed||t.shiftKey||t.altKey||t.ctrlKey)return;let n=t.keyCode==k.arrowright,a=t.keyCode==k.arrowleft;if(!n&&!a)return;let o=r.contentLanguageDirection,s=!1;s=o===`ltr`&&n||o===`rtl`&&a?this._handleForwardMovement(t):this._handleBackwardMovement(t),s===!0&&e.stop()},{context:`$text`,priority:`highest`}),this.listenTo(i,`change:range`,(e,t)=>{if(this._isNextGravityRestorationSkipped){this._isNextGravityRestorationSkipped=!1;return}this._isGravityOverridden&&(!t.directChange&&ET(i.getFirstPosition(),this.attributes)||this._restoreGravity())}),this._enableClickingAfterNode(),this._enableInsertContentSelectionAttributesFixer(),this._handleDeleteContentAfterNode()}registerAttribute(e){this.attributes.add(e)}_handleForwardMovement(e){let t=this.attributes,n=this.editor.model,r=n.document.selection,i=r.getFirstPosition();return this._isGravityOverridden||i.isAtStart&&xT(r,t)?!1:ET(i,t)?(e&&wT(e),xT(r,t)&&ET(i,t,!0)?CT(n,t):this._overrideGravity(),!0):!1}_handleBackwardMovement(e){let t=this.attributes,n=this.editor.model,r=n.document.selection,i=r.getFirstPosition();return this._isGravityOverridden?(e&&wT(e),this._restoreGravity(),ET(i,t,!0)?CT(n,t):ST(n,t,i),!0):i.isAtStart?xT(r,t)?(e&&wT(e),ST(n,t,i),!0):!1:!xT(r,t)&&ET(i,t,!0)?(e&&wT(e),ST(n,t,i),!0):TT(i,t)?i.isAtEnd&&!xT(r,t)&&ET(i,t)?(e&&wT(e),ST(n,t,i),!0):(this._isNextGravityRestorationSkipped=!0,this._overrideGravity(),!1):!1}_enableClickingAfterNode(){let e=this.editor,t=e.model,n=t.document.selection,r=e.editing.view.document;e.editing.view.addObserver(Ap),e.editing.view.addObserver(jp);let i=!1,a=!1;this.listenTo(r,`touchstart`,()=>{a=!1,i=!0}),this.listenTo(r,`mousedown`,()=>{a=!0}),this.listenTo(r,`selectionChange`,()=>{let e=this.attributes;if(!a&&!i||(a=!1,i=!1,!n.isCollapsed)||!xT(n,e))return;let r=n.getFirstPosition();ET(r,e)&&(r.isAtStart||ET(r,e,!0)?CT(t,e):this._isGravityOverridden||this._overrideGravity())})}_enableInsertContentSelectionAttributesFixer(){let e=this.editor.model,t=e.document.selection,n=this.attributes;this.listenTo(e,`insertContent`,()=>{let r=t.getFirstPosition();xT(t,n)&&ET(r,n)&&CT(e,n)},{priority:`low`})}_handleDeleteContentAfterNode(){let e=this.editor,t=e.model,n=t.document.selection,r=e.editing.view,i=!1,a=!1;this.listenTo(r.document,`delete`,(e,t)=>{i=t.direction===`backward`},{priority:`high`}),this.listenTo(t,`deleteContent`,()=>{if(!i)return;let e=n.getFirstPosition();a=xT(n,this.attributes)&&!TT(e,this.attributes)},{priority:`high`}),this.listenTo(t,`deleteContent`,()=>{i&&(i=!1,!a&&e.model.enqueueChange(()=>{let e=n.getFirstPosition();xT(n,this.attributes)&&ET(e,this.attributes)&&(e.isAtStart||ET(e,this.attributes,!0)?CT(t,this.attributes):this._isGravityOverridden||this._overrideGravity())}))},{priority:`low`})}get _isGravityOverridden(){return!!this._overrideUid}_overrideGravity(){this._overrideUid=this.editor.model.change(e=>e.overrideSelectionGravity())}_restoreGravity(){this.editor.model.change(e=>{e.restoreSelectionGravity(this._overrideUid),this._overrideUid=null})}};function xT(e,t){for(let n of t)if(e.hasAttribute(n))return!0;return!1}function ST(e,t,n){let r=n.nodeBefore;e.change(n=>{if(r){let t=[],i=e.schema.isObject(r)&&e.schema.isInline(r);for(let[n,a]of r.getAttributes())e.schema.checkAttribute(`$text`,n)&&(!i||e.schema.getAttributeProperties(n).copyFromObject!==!1)&&t.push([n,a]);n.setSelectionAttribute(t)}else n.removeSelectionAttribute(t)})}function CT(e,t){e.change(e=>{e.removeSelectionAttribute(t)})}function wT(e){e.preventDefault()}function TT(e,t){return ET(e.getShiftedBy(-1),t)}function ET(e,t,n=!1){let{nodeBefore:r,nodeAfter:i}=e;for(let e of t){let t=r?r.getAttribute(e):void 0,a=i?i.getAttribute(e):void 0;if(!(n&&(t===void 0||a===void 0))&&a!==t)return!0}return!1}const DT={copyright:{from:`(c)`,to:`©`},registeredTrademark:{from:`(r)`,to:`®`},trademark:{from:`(tm)`,to:`™`},oneHalf:{from:/(^|[^/a-z0-9])(1\/2)([^/a-z0-9])$/i,to:[null,`½`,null]},oneThird:{from:/(^|[^/a-z0-9])(1\/3)([^/a-z0-9])$/i,to:[null,`⅓`,null]},twoThirds:{from:/(^|[^/a-z0-9])(2\/3)([^/a-z0-9])$/i,to:[null,`⅔`,null]},oneForth:{from:/(^|[^/a-z0-9])(1\/4)([^/a-z0-9])$/i,to:[null,`¼`,null]},threeQuarters:{from:/(^|[^/a-z0-9])(3\/4)([^/a-z0-9])$/i,to:[null,`¾`,null]},lessThanOrEqual:{from:`<=`,to:`≤`},greaterThanOrEqual:{from:`>=`,to:`≥`},notEqual:{from:`!=`,to:`≠`},arrowLeft:{from:`<-`,to:`←`},arrowRight:{from:`->`,to:`→`},horizontalEllipsis:{from:`...`,to:`…`},enDash:{from:/(^| )(--)( )$/,to:[null,`–`,null]},emDash:{from:/(^| )(---)( )$/,to:[null,`—`,null]},quotesPrimary:{from:PT(`"`),to:[null,`“`,null,`”`]},quotesSecondary:{from:PT(`'`),to:[null,`‘`,null,`’`]},quotesPrimaryEnGb:{from:PT(`'`),to:[null,`‘`,null,`’`]},quotesSecondaryEnGb:{from:PT(`"`),to:[null,`“`,null,`”`]},quotesPrimaryPl:{from:PT(`"`),to:[null,`„`,null,`”`]},quotesSecondaryPl:{from:PT(`'`),to:[null,`‚`,null,`’`]}},OT={symbols:[`copyright`,`registeredTrademark`,`trademark`],mathematical:[`oneHalf`,`oneThird`,`twoThirds`,`oneForth`,`threeQuarters`,`lessThanOrEqual`,`greaterThanOrEqual`,`notEqual`,`arrowLeft`,`arrowRight`],typography:[`horizontalEllipsis`,`enDash`,`emDash`],quotes:[`quotesPrimary`,`quotesSecondary`]},kT=[`symbols`,`mathematical`,`typography`,`quotes`];var AT=class extends F{static get requires(){return[hT,tT]}static get pluginName(){return`TextTransformation`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`typing`,{transformations:{include:kT}})}init(){let e=this.editor.model.document.selection;e.on(`change:range`,()=>{let t=e.anchor,n=!!t&&t.parent.is(`element`,`codeBlock`),r=e.hasAttribute(`code`);this.isEnabled=!(n||r)}),this._enableTransformationWatchers()}_enableTransformationWatchers(){let e=this.editor,t=e.model,n=e.plugins.get(`Delete`),r=FT(e.config.get(`typing.transformations`)),i=new yT(e.model,e=>{for(let t of r)if(t.from.test(e))return{normalizedTransformation:t}});i.on(`matched:data`,(e,r)=>{if(!r.batch.isTyping)return;let{from:i,to:a}=r.normalizedTransformation,o=i.exec(r.text),s=a(o.slice(1)),c=r.range,l=o.index;t.enqueueChange(e=>{for(let n=1;n{n.requestUndoOnBackspace()})})}),i.bind(`isEnabled`).to(this)}};function jT(e){return typeof e==`string`?RegExp(`(${Bn(e)})$`):e}function MT(e){return typeof e==`string`?()=>[e]:e instanceof Array?()=>e:e}function NT(e){return(e.textNode?e.textNode:e.nodeAfter).getAttributes()}function PT(e){return RegExp(`(^|\\s)(${e})([^${e}]*)(${e})$`)}function FT(e){let t=e.extra||[],n=e.remove||[],r=e=>!n.includes(e);return IT(e.include.concat(t).filter(r)).filter(r).map(e=>typeof e==`string`&&DT[e]?DT[e]:e).filter(e=>typeof e==`object`).map(e=>({from:jT(e.from),to:MT(e.to)}))}function IT(e){let t=new Set;for(let n of e)if(typeof n==`string`&&OT[n])for(let e of OT[n])t.add(e);else t.add(n);return Array.from(t)}function LT(e,t,n,r){return r.createRange(RT(e,t,n,!0,r),RT(e,t,n,!1,r))}function RT(e,t,n,r,i){let a=e.textNode||(r?e.nodeBefore:e.nodeAfter),o=null;for(;a&&a.getAttribute(t)==n;)o=a,a=r?a.previousSibling:a.nextSibling;return o?i.createPositionAt(o,r?`before`:`after`):e}function zT(e,t,n,r){let i=e.editing.view,a=new Set;i.document.registerPostFixer(i=>{let o=e.model.document.selection,s=!1;if(o.hasAttribute(t)){let c=LT(o.getFirstPosition(),t,o.getAttribute(t),e.model),l=e.editing.mapper.toViewRange(c);for(let e of l.getItems())e.is(`element`,n)&&!e.hasClass(r)&&(i.addClass(r,e),a.add(e),s=!0)}return s}),e.conversion.for(`editingDowncast`).add(e=>{e.on(`insert`,t,{priority:`highest`}),e.on(`remove`,t,{priority:`highest`}),e.on(`attribute`,t,{priority:`highest`}),e.on(`selection`,t,{priority:`highest`});function t(){i.change(e=>{for(let t of a.values())e.removeClass(r,t),a.delete(t)})}})}function BT(e,t,n,r){let i,a=null;typeof r==`function`?i=r:(a=e.commands.get(r),i=()=>{e.execute(r)}),e.model.document.on(`change:data`,(o,s)=>{if(a&&!a.isEnabled||!t.isEnabled)return;let c=j(e.model.document.selection.getRanges());if(!c.isCollapsed||s.isUndo||!s.isLocal)return;let l=Array.from(e.model.document.differ.getChanges()),u=l[0];if(l.length!=1||u.type!==`insert`||u.name!=`$text`||u.length!=1)return;let d=u.position.parent;if(d.is(`element`,`codeBlock`)||d.is(`element`,`listItem`)&&typeof r!=`function`&&![`numberedList`,`bulletedList`,`todoList`].includes(r)||a&&a.value===!0)return;let f=d.getChild(0),p=e.model.createRangeOn(f);if(!p.containsRange(c)&&!c.end.isEqual(p.end))return;let m=n.exec(f.data.substr(0,c.end.offset));m&&e.model.enqueueChange(t=>{let n=e.model.document.selection,r=new xl(t.createPositionAt(d,0),t.createPositionAt(d,m[0].length));if(i({match:m})!==!1){let e=Array.from(n.getAttributes());t.remove(r);let i=n.getFirstRange(),a=t.createRangeIn(d);d.isEmpty&&!a.isEqual(i)&&!a.containsRange(i,!0)&&t.remove(d),VT(t,n,e)}r.detach(),e.model.enqueueChange(()=>{e.plugins.get(`Delete`).requestUndoOnBackspace()})})})}function VT(e,t,n){let r=e.model.schema,i=new td(t.getFirstPosition());r.checkChild(i,`$text`)&&(i=i.push(`$text`));for(let[t,a]of n)r.checkAttribute(i,t)&&e.setSelectionAttribute(t,a)}function HT(e,t,n,r){let i,a;n instanceof RegExp?i=n:a=n,a||=(e=>{let t,n=[],r=[];for(;(t=i.exec(e))!==null&&!(t&&t.length<4);){let{index:e,1:i,2:a,3:o}=t,s=i+a+o;e+=t[0].length-s.length;let c=[e,e+i.length],l=[e+i.length+a.length,e+i.length+a.length+o.length];n.push(c),n.push(l),r.push([e+i.length,e+i.length+a.length])}return{remove:n,format:r}}),e.model.document.on(`change:data`,(n,i)=>{if(i.isUndo||!i.isLocal||!t.isEnabled)return;let o=e.model,s=o.document.selection;if(!s.isCollapsed)return;let c=Array.from(o.document.differ.getChanges()),l=c[0];if(c.length!=1||l.type!==`insert`||l.name!=`$text`||l.length!=1)return;let u=s.focus,d=u.parent,{text:f,range:p}=Rte(o.createRange(o.createPositionAt(d,0),u),o),m=a(f),h=UT(p.start,m.format,o),g=UT(p.start,m.remove,o);h.length&&g.length&&o.enqueueChange(t=>{if(r(t,h)!==!1){for(let e of g.reverse())t.remove(e);o.enqueueChange(()=>{e.plugins.get(`Delete`).requestUndoOnBackspace()})}})})}function UT(e,t,n){return t.filter(e=>e[0]!==void 0&&e[1]!==void 0).map(t=>n.createRange(e.getShiftedBy(t[0]),e.getShiftedBy(t[1])))}function Rte(e,t){let n=e.start;return{text:Array.from(e.getItems()).reduce((e,r)=>!(r.is(`$text`)||r.is(`$textProxy`))||r.getAttribute(`code`)?(n=t.createPositionAfter(r),``):e+r.data,``),range:t.createRange(n,e.end)}}var zte=class extends F{static get requires(){return[hT]}static get pluginName(){return`Autoformat`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=this.editor.t;this._addListAutoformats(),this._addBasicStylesAutoformats(),this._addHeadingAutoformats(),this._addBlockQuoteAutoformats(),this._addCodeBlockAutoformats(),this._addHorizontalLineAutoformats(),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Revert autoformatting action`),keystroke:`Backspace`}]})}_addListAutoformats(){let e=this.editor.commands;if(e.get(`bulletedList`)&&BT(this.editor,this,/^[*-]\s$/,`bulletedList`),e.get(`numberedList`)){let t=e.get(`numberedList`),n=!!e.get(`listStart`);BT(this.editor,this,/^(\d+)[.|)]\s$/,({match:e})=>{if(!t.isEnabled||t.value===!0)return!1;this.editor.execute(`numberedList`,n?{additionalAttributes:{listStart:parseInt(e[1])}}:void 0)})}e.get(`todoList`)&&BT(this.editor,this,/^\[\s?\]\s$/,`todoList`),e.get(`checkTodoList`)&&BT(this.editor,this,/^\[\s?x\s?\]\s$/,()=>{this.editor.execute(`todoList`),this.editor.execute(`checkTodoList`)})}_addBasicStylesAutoformats(){let e=this.editor.commands;if(e.get(`bold`)){let e=WT(this.editor,`bold`);HT(this.editor,this,/(?:^|\s)(\*\*)([^*]+)(\*\*)$/g,e),HT(this.editor,this,/(?:^|\s)(__)([^_]+)(__)$/g,e)}if(e.get(`italic`)){let e=WT(this.editor,`italic`);HT(this.editor,this,/(?:^|\s)(\*)([^*_]+)(\*)$/g,e),HT(this.editor,this,/(?:^|\s)(_)([^_]+)(_)$/g,e)}if(e.get(`code`)){let e=WT(this.editor,`code`);HT(this.editor,this,/(`)([^`]+)(`)$/g,e)}if(e.get(`strikethrough`)){let e=WT(this.editor,`strikethrough`);HT(this.editor,this,/(~~)([^~]+)(~~)$/g,e)}}_addHeadingAutoformats(){let e=this.editor.commands.get(`heading`);e&&e.modelElements.filter(e=>e.match(/^heading[1-6]$/)).forEach(t=>{let n=t[7],r=RegExp(`^(#{${n}})\\s$`);BT(this.editor,this,r,()=>{if(!e.isEnabled||e.value===t)return!1;this.editor.execute(`heading`,{value:t})})})}_addBlockQuoteAutoformats(){this.editor.commands.get(`blockQuote`)&&BT(this.editor,this,/^>\s$/,`blockQuote`)}_addCodeBlockAutoformats(){let e=this.editor,t=e.model.document.selection;e.commands.get(`codeBlock`)&&BT(e,this,/^```$/,()=>{if(t.getFirstPosition().parent.is(`element`,`listItem`))return!1;this.editor.execute(`codeBlock`,{usePreviousLanguageChoice:!0})})}_addHorizontalLineAutoformats(){this.editor.commands.get(`horizontalLine`)&&BT(this.editor,this,/^---$/,`horizontalLine`)}};function WT(e,t){return(n,r)=>{if(!e.commands.get(t).isEnabled)return!1;let i=e.model.schema.getValidRanges(r,t);for(let e of i)n.setAttribute(t,!0,e);n.removeSelectionAttribute(t)}}var Bte=class extends F{adapter;_debouncedSave;_lastDocumentVersion;_savePromise;_domEmitter;_config;_pendingActions;_makeImmediateSave;_action=null;static get pluginName(){return`Autosave`}static get isOfficialPlugin(){return!0}static get requires(){return[wg]}constructor(e){super(e);let t=e.config.get(`autosave`)||{},n=t.waitingTime||1e3;this.set(`state`,`synchronized`),this._debouncedSave=Kt(this._save.bind(this),n),this._lastDocumentVersion=e.model.document.version,this._savePromise=null,this._domEmitter=new(br()),this._config=t,this._pendingActions=e.plugins.get(wg),this._makeImmediateSave=!1}init(){let e=this.editor,t=e.model.document;this.listenTo(e,`ready`,()=>{this.listenTo(t,`change:data`,(e,t)=>{this._saveCallbacks.length&&t.isLocal&&(this.state===`synchronized`&&(this.state=`waiting`,this._setPendingAction()),this.state===`waiting`&&this._debouncedSave())})}),this.listenTo(e,`destroy`,()=>this._flush(),{priority:`highest`}),this._domEmitter.listenTo(window,`beforeunload`,(e,t)=>{this._pendingActions.hasAny&&(t.returnValue=this._pendingActions.first.message)})}destroy(){this._domEmitter.stopListening(),super.destroy()}save(){return this._debouncedSave.cancel(),this._save()}_flush(){this._debouncedSave.flush()}_save(){return this._savePromise?(this._makeImmediateSave=this.editor.model.document.version>this._lastDocumentVersion,this._savePromise):(this._setPendingAction(),this.state=`saving`,this._lastDocumentVersion=this.editor.model.document.version,this._savePromise=Promise.resolve().then(()=>Promise.all(this._saveCallbacks.map(e=>e(this.editor)))).finally(()=>{this._savePromise=null}).then(()=>{if(this._makeImmediateSave)return this._makeImmediateSave=!1,this._save();this.editor.model.document.version>this._lastDocumentVersion?(this.state=`waiting`,this._debouncedSave()):(this.state=`synchronized`,this._pendingActions.remove(this._action),this._action=null)}).catch(e=>{throw this.state=`error`,this.state=`saving`,this._debouncedSave(),e}),this._savePromise)}_setPendingAction(){let e=this.editor.t;this._action||=this._pendingActions.add(e(`Saving changes`))}get _saveCallbacks(){let e=[];return this.adapter&&this.adapter.save&&e.push(this.adapter.save),this._config.save&&e.push(this._config.save),e}},GT=class extends I{attributeKey;constructor(e,t){super(e),this.attributeKey=t}refresh(){let e=this.editor.model,t=e.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.forceValue===void 0?!this.value:e.forceValue;t.change(e=>{if(n.isCollapsed)r?e.setSelectionAttribute(this.attributeKey,!0):e.removeSelectionAttribute(this.attributeKey);else{let i=t.schema.getValidRanges(n.getRanges(),this.attributeKey,{includeEmptyRanges:!0});for(let t of i){let n=t,i=this.attributeKey;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(this.attributeKey)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}})}_getValueFromFirstAllowedNode(){let e=this.editor.model,t=e.schema,n=e.document.selection;if(n.isCollapsed)return n.hasAttribute(this.attributeKey);for(let e of n.getRanges())for(let n of e.getItems())if(t.checkAttribute(n,this.attributeKey))return n.hasAttribute(this.attributeKey);return!1}};const KT=`bold`;var qT=class extends F{static get pluginName(){return`BoldEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;e.model.schema.extend(`$text`,{allowAttributes:KT}),e.model.schema.setAttributeProperties(KT,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:KT,view:`strong`,upcastAlso:[`b`,e=>{let t=e.getStyle(`font-weight`);return t&&(t==`bold`||Number(t)>=600)?{name:!0,styles:[`font-weight`]}:null}]}),e.commands.add(KT,new GT(e,KT)),e.keystrokes.set(`CTRL+B`,KT),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Bold text`),keystroke:`CTRL+B`}]})}};function JT({editor:e,commandName:t,plugin:n,icon:r,label:i,keystroke:a}){return o=>{let s=e.commands.get(t),c=new o(e.locale);return c.set({label:i,icon:r,keystroke:a,isToggleable:!0}),c.bind(`isEnabled`).to(s,`isEnabled`),c.bind(`isOn`).to(s,`value`),c instanceof U?c.set({role:`menuitemcheckbox`}):c.set({tooltip:!0}),n.listenTo(c,`execute`,()=>{e.execute(t),e.editing.view.focus()}),c}}const YT=`bold`;var XT=class extends F{static get pluginName(){return`BoldUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:YT,plugin:this,icon:Zg,label:t(`Bold`),keystroke:`CTRL+B`});e.ui.componentFactory.add(YT,()=>n(H)),e.ui.componentFactory.add(`menuBar:bold`,()=>n(U))}},Vte=class extends F{static get requires(){return[qT,XT]}static get pluginName(){return`Bold`}static get isOfficialPlugin(){return!0}};const ZT=`code`;var QT=class extends F{static get pluginName(){return`CodeEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[bT]}init(){let e=this.editor,t=this.editor.t;e.model.schema.extend(`$text`,{allowAttributes:ZT}),e.model.schema.setAttributeProperties(ZT,{isFormatting:!0,copyOnEnter:!1}),e.conversion.attributeToElement({model:ZT,view:`code`}),e.commands.add(ZT,new GT(e,ZT)),e.plugins.get(bT).registerAttribute(ZT),zT(e,ZT,`code`,`ck-code_selected`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Move out of an inline code style`),keystroke:[[`arrowleft`,`arrowleft`],[`arrowright`,`arrowright`]]}]})}};const $T=`code`;var eE=class extends F{static get pluginName(){return`CodeUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:$T,plugin:this,icon:f_,label:t(`Code`)});e.ui.componentFactory.add($T,()=>n(H)),e.ui.componentFactory.add(`menuBar:code`,()=>n(U))}},Hte=class extends F{static get requires(){return[QT,eE]}static get pluginName(){return`Code`}static get isOfficialPlugin(){return!0}};const tE=`italic`;var nE=class extends F{static get pluginName(){return`ItalicEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;e.model.schema.extend(`$text`,{allowAttributes:tE}),e.model.schema.setAttributeProperties(tE,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:tE,view:`i`,upcastAlso:[`em`,{styles:{"font-style":`italic`}}]}),e.commands.add(tE,new GT(e,tE)),e.keystrokes.set(`CTRL+I`,tE),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Italic text`),keystroke:`CTRL+I`}]})}};const rE=`italic`;var iE=class extends F{static get pluginName(){return`ItalicUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:rE,plugin:this,icon:J_,keystroke:`CTRL+I`,label:t(`Italic`)});e.ui.componentFactory.add(rE,()=>n(H)),e.ui.componentFactory.add(`menuBar:italic`,()=>n(U))}},Ute=class extends F{static get requires(){return[nE,iE]}static get pluginName(){return`Italic`}static get isOfficialPlugin(){return!0}};const aE=`strikethrough`;var oE=class extends F{static get pluginName(){return`StrikethroughEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;e.model.schema.extend(`$text`,{allowAttributes:aE}),e.model.schema.setAttributeProperties(aE,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:aE,view:`s`,upcastAlso:[`del`,`strike`,{styles:{"text-decoration":`line-through`}}]}),e.commands.add(aE,new GT(e,aE)),e.keystrokes.set(`CTRL+SHIFT+X`,`strikethrough`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Strikethrough text`),keystroke:`CTRL+SHIFT+X`}]})}};const sE=`strikethrough`;var cE=class extends F{static get pluginName(){return`StrikethroughUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:sE,plugin:this,icon:fy,keystroke:`CTRL+SHIFT+X`,label:t(`Strikethrough`)});e.ui.componentFactory.add(sE,()=>n(H)),e.ui.componentFactory.add(`menuBar:strikethrough`,()=>n(U))}},Wte=class extends F{static get requires(){return[oE,cE]}static get pluginName(){return`Strikethrough`}static get isOfficialPlugin(){return!0}};const lE=`subscript`;var uE=class extends F{static get pluginName(){return`SubscriptEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:lE}),e.model.schema.setAttributeProperties(lE,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:lE,view:`sub`,upcastAlso:[{styles:{"vertical-align":`sub`}}]}),e.commands.add(lE,new GT(e,lE))}};const dE=`subscript`;var fE=class extends F{static get pluginName(){return`SubscriptUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:dE,plugin:this,icon:my,label:t(`Subscript`)});e.ui.componentFactory.add(dE,()=>n(H)),e.ui.componentFactory.add(`menuBar:subscript`,()=>n(U))}},Gte=class extends F{static get requires(){return[uE,fE]}static get pluginName(){return`Subscript`}static get isOfficialPlugin(){return!0}};const pE=`superscript`;var mE=class extends F{static get pluginName(){return`SuperscriptEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:pE}),e.model.schema.setAttributeProperties(pE,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:pE,view:`sup`,upcastAlso:[{styles:{"vertical-align":`super`}}]}),e.commands.add(pE,new GT(e,pE))}};const hE=`superscript`;var gE=class extends F{static get pluginName(){return`SuperscriptUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:hE,plugin:this,icon:hy,label:t(`Superscript`)});e.ui.componentFactory.add(hE,()=>n(H)),e.ui.componentFactory.add(`menuBar:superscript`,()=>n(U))}},Kte=class extends F{static get requires(){return[mE,gE]}static get pluginName(){return`Superscript`}static get isOfficialPlugin(){return!0}};const _E=`underline`;var vE=class extends F{static get pluginName(){return`UnderlineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;e.model.schema.extend(`$text`,{allowAttributes:_E}),e.model.schema.setAttributeProperties(_E,{isFormatting:!0,copyOnEnter:!0}),e.conversion.attributeToElement({model:_E,view:`u`,upcastAlso:{styles:{"text-decoration":`underline`}}}),e.commands.add(_E,new GT(e,_E)),e.keystrokes.set(`CTRL+U`,`underline`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Underline text`),keystroke:`CTRL+U`}]})}};const yE=`underline`;var bE=class extends F{static get pluginName(){return`UnderlineUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=JT({editor:e,commandName:yE,plugin:this,icon:Dy,label:t(`Underline`),keystroke:`CTRL+U`});e.ui.componentFactory.add(yE,()=>n(H)),e.ui.componentFactory.add(`menuBar:underline`,()=>n(U))}},qte=class extends F{static get requires(){return[vE,bE]}static get pluginName(){return`Underline`}static get isOfficialPlugin(){return!0}};function*xE(e,t){for(let n of t)n&&e.getAttributeProperties(n[0]).copyOnEnter&&(yield n)}var SE=class extends I{execute(){this.editor.model.change(e=>{this.enterBlock(e),this.fire(`afterExecute`,{writer:e})})}enterBlock(e){let t=this.editor.model,n=t.document.selection,r=t.schema,i=n.isCollapsed,a=n.getFirstRange(),o=a.start.parent,s=a.end.parent;if(r.isLimit(o)||r.isLimit(s))return!i&&o==s&&t.deleteContent(n),!1;if(i){let t=xE(e.model.schema,n.getAttributes());return CE(e,a.start),e.setSelectionAttribute(t),!0}else{let r=!(a.start.isAtStart&&a.end.isAtEnd),i=o==s;if(t.deleteContent(n,{leaveUnmerged:r}),r){if(i)return CE(e,n.focus),!0;e.setSelection(s,0)}}return!1}};function CE(e,t){e.split(t),e.setSelection(t.parent.nextSibling,0)}const Jte={insertParagraph:{isSoft:!1},insertLineBreak:{isSoft:!0}};var wE=class extends kc{constructor(e){super(e);let t=this.document,n=!1;t.on(`keydown`,(e,t)=>{n=t.shiftKey}),t.on(`beforeinput`,(r,i)=>{if(!this.isEnabled)return;let a=i.inputType;p.isSafari&&n&&a==`insertParagraph`&&(a=`insertLineBreak`);let o=i.domEvent,s=Jte[a];if(!s)return;let c=new ls(t,`enter`,i.targetRanges[0]);t.fire(c,new Ac(e,o,{isSoft:s.isSoft})),c.stop.called&&r.stop()})}observe(){}stopObserving(){}},TE=class extends F{static get pluginName(){return`Enter`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view,n=t.document,r=this.editor.t;t.addObserver(wE),e.commands.add(`enter`,new SE(e)),this.listenTo(n,`enter`,(r,i)=>{n.isComposing||i.preventDefault(),!i.isSoft&&(e.execute(`enter`),t.scrollToTheSelection())},{priority:`low`}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:r(`Insert a hard break (a new paragraph)`),keystroke:`Enter`}]})}},EE=class extends I{execute(){let e=this.editor.model,t=e.document;e.change(n=>{Xte(e,n,t.selection),this.fire(`afterExecute`,{writer:n})})}refresh(){let e=this.editor.model,t=e.document;this.isEnabled=Yte(e.schema,t.selection)}};function Yte(e,t){if(t.rangeCount>1)return!1;let n=t.anchor;if(!n||!e.checkChild(n,`softBreak`))return!1;let r=t.getFirstRange(),i=r.start.parent,a=r.end.parent;return!((OE(i,e)||OE(a,e))&&i!==a)}function Xte(e,t,n){let r=n.isCollapsed,i=n.getFirstRange(),a=i.start.parent,o=i.end.parent,s=a==o;if(r)DE(e,t,i.end,n.getAttributes());else{let r=!(i.start.isAtStart&&i.end.isAtEnd);e.deleteContent(n,{leaveUnmerged:r}),s?DE(e,t,n.focus,n.getAttributes()):r&&t.setSelection(o,0)}}function DE(e,t,n,r){let i=Array.from(xE(e.schema,r)),a=t.createElement(`softBreak`,i);e.insertContent(a,n),t.setSelection(a,`after`)}function OE(e,t){return e.is(`rootElement`)?!1:t.isLimit(e)||OE(e.parent,t)}var kE=class extends F{static get pluginName(){return`ShiftEnter`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.conversion,r=e.editing.view,i=r.document,a=this.editor.t;t.register(`softBreak`,{allowWhere:`$text`,allowAttributesOf:`$text`,isInline:!0}),n.for(`upcast`).elementToElement({model:`softBreak`,view:`br`}),n.for(`downcast`).elementToElement({model:`softBreak`,view:(e,{writer:t})=>t.createEmptyElement(`br`)}),r.addObserver(wE),e.commands.add(`shiftEnter`,new EE(e)),e.model.document.registerPostFixer(e=>Zte(e)),this.listenTo(i,`enter`,(t,n)=>{i.isComposing||n.preventDefault(),n.isSoft&&(e.execute(`shiftEnter`),r.scrollToTheSelection())},{priority:`low`}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:a(`Insert a soft break (a <br> element)`),keystroke:`Shift+Enter`}]})}};function Zte(e){let t=new Set;for(let n of e.model.document.differ.getChanges())n.type==`insert`||n.type==`remove`?n.position.parent.is(`element`)&&t.add(n.position.parent):n.type==`attribute`&&n.range.start.parent.is(`element`)&&t.add(n.range.start.parent);let n=!1;for(let r of t)for(let t of r.getChildren()){if(!t.is(`element`,`softBreak`))continue;let r=t.nextSibling;if(!r||r.is(`element`))continue;let i=Array.from(t.getAttributes()).filter(([e,t])=>!Qte(r,e,t));for(let[r]of i)e.removeAttribute(r,t),n=!0}return n}function Qte(e,t,n){return e?.getAttribute(t)===n}var AE=class extends I{refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.schema,r=t.document.selection,i=Array.from(r.getSelectedBlocks()),a=e.forceValue===void 0?!this.value:e.forceValue;t.change(e=>{if(!a)this._removeQuote(e,i.filter(jE));else{let t=i.filter(e=>jE(e)||NE(n,e));this._applyQuote(e,t)}})}_getValue(){let e=this.editor.model.document.selection,t=j(e.getSelectedBlocks());return!!(t&&jE(t))}_checkEnabled(){if(this.value)return!0;let e=this.editor.model.document.selection,t=this.editor.model.schema,n=j(e.getSelectedBlocks());return n?NE(t,n):!1}_removeQuote(e,t){ME(e,t).reverse().forEach(t=>{if(t.start.isAtStart&&t.end.isAtEnd){e.unwrap(t.start.parent);return}if(t.start.isAtStart){let n=e.createPositionBefore(t.start.parent);e.move(t,n);return}t.end.isAtEnd||e.split(t.end);let n=e.createPositionAfter(t.end.parent);e.move(t,n)})}_applyQuote(e,t){let n=[];ME(e,t).reverse().forEach(t=>{let r=jE(t.start);r||(r=e.createElement(`blockQuote`),e.wrap(t,r)),n.push(r)}),n.reverse().reduce((t,n)=>t.nextSibling==n?(e.merge(e.createPositionAfter(t)),t):n)}};function jE(e){return e.parent.name==`blockQuote`?e.parent:null}function ME(e,t){let n,r=0,i=[];for(;r{let r=e.model.document.differ.getChanges();for(let e of r)if(e.type==`insert`){let r=e.position.nodeAfter;if(!r)continue;if(r.is(`element`,`blockQuote`)&&r.isEmpty)return n.remove(r),!0;if(r.is(`element`,`blockQuote`)&&!t.checkChild(e.position,r))return n.unwrap(r),!0;if(r.is(`element`)){let e=n.createRangeIn(r);for(let r of e.getItems())if(r.is(`element`,`blockQuote`)&&!t.checkChild(n.createPositionBefore(r),r))return n.unwrap(r),!0}}else if(e.type==`remove`){let t=e.position.parent;if(t.is(`element`,`blockQuote`)&&t.isEmpty)return n.remove(t),!0}return!1});let n=this.editor.editing.view.document,r=e.model.document.selection,i=e.commands.get(`blockQuote`);this.listenTo(n,`enter`,(t,n)=>{!r.isCollapsed||!i.value||r.getLastPosition().parent.isEmpty&&(e.execute(`blockQuote`),e.editing.view.scrollToTheSelection(),n.preventDefault(),t.stop())},{context:`blockquote`}),this.listenTo(n,`delete`,(t,n)=>{if(n.direction!=`backward`||!r.isCollapsed||!i.value)return;let a=r.getLastPosition().parent;a.isEmpty&&!a.previousSibling&&(e.execute(`blockQuote`),e.editing.view.scrollToTheSelection(),n.preventDefault(),t.stop())},{context:`blockquote`})}},FE=class extends F{static get pluginName(){return`BlockQuoteUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`blockQuote`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:blockQuote`,()=>{let e=this._createButton(U);return e.set({role:`menuitemcheckbox`}),e})}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`blockQuote`),i=new e(t.locale),a=n.t;return i.set({label:a(`Block quote`),icon:qv,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`),this.listenTo(i,`execute`,()=>{t.execute(`blockQuote`),t.editing.view.focus()}),i}},$te=class extends F{static get requires(){return[PE,FE]}static get pluginName(){return`BlockQuote`}static get isOfficialPlugin(){return!0}};const ene=E();var IE=class extends ene{_stack=[];add(e,t){let n=this._stack,r=n[0];this._insertDescriptor(e);let i=n[0];r!==i&&!LE(r,i)&&this.fire(`change:top`,{oldDescriptor:r,newDescriptor:i,writer:t})}remove(e,t){let n=this._stack,r=n[0];this._removeDescriptor(e);let i=n[0];r!==i&&!LE(r,i)&&this.fire(`change:top`,{oldDescriptor:r,newDescriptor:i,writer:t})}_insertDescriptor(e){let t=this._stack,n=t.findIndex(t=>t.id===e.id);if(LE(e,t[n]))return;n>-1&&t.splice(n,1);let r=0;for(;t[r]&&RE(t[r],e);)r++;t.splice(r,0,e)}_removeDescriptor(e){let t=this._stack,n=t.findIndex(t=>t.id===e);n>-1&&t.splice(n,1)}};function LE(e,t){return e&&t&&e.priority==t.priority&&zE(e.classes)==zE(t.classes)}function RE(e,t){return e.priority>t.priority?!0:e.priorityzE(t.classes)}function zE(e){return Array.isArray(e)?e.sort().join(`,`):e}const BE=`ck-widget`,VE=`ck-widget_selected`;function HE(e){return e.is(`element`)?!!e.getCustomProperty(`widget`):!1}function UE(e,t,n={}){if(!e.is(`containerElement`))throw new w(`widget-to-widget-wrong-element-type`,null,{element:e});return t.setAttribute(`contenteditable`,`false`,e),t.addClass(BE,e),t.setCustomProperty(`widget`,!0,e),e.getFillerOffset=QE,t.setCustomProperty(`widgetLabel`,[],e),n.label&&qE(e,n.label),n.hasSelectionHandle&&$E(e,t),KE(e,t),e}function WE(e,t,n){if(t.classes&&n.addClass(A(t.classes),e),t.attributes)for(let r in t.attributes)n.setAttribute(r,t.attributes[r],e)}function GE(e,t,n){if(t.classes&&n.removeClass(A(t.classes),e),t.attributes)for(let r in t.attributes)n.removeAttribute(r,e)}function KE(e,t,n=WE,r=GE){let i=new IE;i.on(`change:top`,(t,i)=>{i.oldDescriptor&&r(e,i.oldDescriptor,i.writer),i.newDescriptor&&n(e,i.newDescriptor,i.writer)}),t.setCustomProperty(`addHighlight`,(e,t,n)=>i.add(t,n),e),t.setCustomProperty(`removeHighlight`,(e,t,n)=>i.remove(t,n),e)}function qE(e,t){e.getCustomProperty(`widgetLabel`).push(t)}function JE(e){return e.getCustomProperty(`widgetLabel`).reduce((e,t)=>typeof t==`function`?e?e+`. `+t():t():e?e+`. `+t:t,``)}function YE(e,t,n={}){return t.addClass([`ck-editor__editable`,`ck-editor__nested-editable`],e),n.withAriaRole!==!1&&t.setAttribute(`role`,`textbox`,e),e.isReadOnly||t.setAttribute(`tabindex`,`-1`,e),n.label&&t.setAttribute(`aria-label`,n.label,e),t.setAttribute(`contenteditable`,e.isReadOnly?`false`:`true`,e),e.on(`change:isReadOnly`,(n,r,i)=>{t.setAttribute(`contenteditable`,i?`false`:`true`,e),i?t.removeAttribute(`tabindex`,e):t.setAttribute(`tabindex`,`-1`,e)}),e.on(`change:isFocused`,(n,r,i)=>{i?t.addClass(`ck-editor__nested-editable_focused`,e):t.removeClass(`ck-editor__nested-editable_focused`,e)}),KE(e,t),e}function XE(e,t){let n=e.getSelectedElement();if(n){let r=sD(e);if(r)return t.createRange(t.createPositionAt(n,r))}return t.schema.findOptimalInsertionRange(e)}function ZE(e,t){return(n,r)=>{let{mapper:i,viewPosition:a}=r,o=i.findMappedViewAncestor(a);if(!t(o))return;let s=i.toModelElement(o);r.modelPosition=e.createPositionAt(s,a.isAtStart?`before`:`after`)}}function QE(){return null}function $E(e,t){let n=t.createUIElement(`div`,{class:`ck ck-widget__selection-handle`},function(e){let t=this.toDomElement(e),n=new Ly;return n.set(`content`,v_),n.render(),t.appendChild(n.element),t});t.insert(t.createPositionAt(e,0),n),t.addClass([`ck-widget_with-selection-handle`],e)}function eD(e){let t=e=>{let{width:t,paddingLeft:n,paddingRight:r}=e.ownerDocument.defaultView.getComputedStyle(e);return parseFloat(t)-(parseFloat(n)||0)-(parseFloat(r)||0)},n=e.parentElement;if(!n)return 0;let r=t(n),i=0,a=n;for(;isNaN(r);){if(a=a.parentElement,++i>5)return 0;r=t(a)}return r}function tD(e,t=new O(e)){let n=eD(e);return n?t.width/n*100:0}const nD=`widget-type-around`;function rD(e,t,n){return!!e&&HE(e)&&!n.isInline(t)}function iD(e){return e.closest(`.ck-widget__type-around__button`)}function aD(e){return e.classList.contains(`ck-widget__type-around__button_before`)?`before`:`after`}function oD(e,t){let n=e.closest(`.ck-widget`);return t.mapDomToView(n)}function sD(e){return e.getAttribute(nD)}const cD=[`before`,`after`],lD=new DOMParser().parseFromString($v,`image/svg+xml`).firstChild,uD=`ck-widget__type-around_disabled`;var dD=class extends F{_currentFakeCaretModelElement=null;static get pluginName(){return`WidgetTypeAround`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT]}init(){let e=this.editor,t=e.editing.view;this.on(`change:isEnabled`,(n,r,i)=>{t.change(e=>{for(let n of t.document.roots)i?e.removeClass(uD,n):e.addClass(uD,n)}),i||e.model.change(e=>{e.removeSelectionAttribute(nD)})}),this._enableTypeAroundUIInjection(),this._enableInsertingParagraphsOnButtonClick(),this._enableInsertingParagraphsOnEnterKeypress(),this._enableInsertingParagraphsOnTypingKeystroke(),this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows(),this._enableDeleteIntegration(),this._enableInsertContentIntegration(),this._enableInsertObjectIntegration(),this._enableDeleteContentIntegration()}destroy(){super.destroy(),this._currentFakeCaretModelElement=null}_insertParagraph(e,t){let n=this.editor,r=n.editing.view,i=n.model.schema.getAttributesWithProperty(e,`copyOnReplace`,!0);n.execute(`insertParagraph`,{position:n.model.createPositionAt(e,t),attributes:i}),r.focus(),r.scrollToTheSelection()}_listenToIfEnabled(e,t,n,r){this.listenTo(e,t,(...e)=>{this.isEnabled&&n(...e)},r)}_insertParagraphAccordingToFakeCaretPosition(){let e=this.editor.model.document.selection,t=sD(e);if(!t)return!1;let n=e.getSelectedElement();return this._insertParagraph(n,t),!0}_enableTypeAroundUIInjection(){let e=this.editor,t=e.model.schema,n=e.locale.t,r={before:n(`Insert paragraph before block`),after:n(`Insert paragraph after block`)};e.editing.downcastDispatcher.on(`insert`,(e,i,a)=>{let o=a.mapper.toViewElement(i.item);o&&rD(o,i.item,t)&&(fD(a.writer,r,o),o.getCustomProperty(`widgetLabel`).push(()=>this.isEnabled?n(`Press Enter to type after or press Shift + Enter to type before the widget`):``))},{priority:`low`})}_enableTypeAroundFakeCaretActivationUsingKeyboardArrows(){let e=this.editor,t=e.model,n=t.document.selection,r=t.schema,i=e.editing.view;this._listenToIfEnabled(i.document,`arrowKey`,(e,t)=>{this._handleArrowKeyPress(e,t)},{context:[HE,`$text`],priority:`high`}),this._listenToIfEnabled(n,`change:range`,(t,n)=>{n.directChange&&e.model.change(e=>{e.removeSelectionAttribute(nD)})}),this._listenToIfEnabled(t.document,`change:data`,()=>{let t=n.getSelectedElement();t&&rD(e.editing.mapper.toViewElement(t),t,r)||e.model.change(e=>{e.removeSelectionAttribute(nD)})}),this._listenToIfEnabled(e.editing.downcastDispatcher,`selection`,(e,t,n)=>{let i=n.writer;if(this._currentFakeCaretModelElement){let e=n.mapper.toViewElement(this._currentFakeCaretModelElement);e&&(i.removeClass(cD.map(a),e),this._currentFakeCaretModelElement=null)}let o=t.selection.getSelectedElement();if(!o)return;let s=n.mapper.toViewElement(o);if(!rD(s,o,r))return;let c=sD(t.selection);c&&(i.addClass(a(c),s),this._currentFakeCaretModelElement=o)}),this._listenToIfEnabled(e.ui.focusTracker,`change:isFocused`,(t,n,r)=>{r||e.model.change(e=>{e.removeSelectionAttribute(nD)})});function a(e){return`ck-widget_type-around_show-fake-caret_${e}`}}_handleArrowKeyPress(e,t){let n=this.editor,r=n.model,i=r.document.selection,a=r.schema,o=n.editing.view;if(t.shiftKey)return;let s=t.keyCode,c=wi(s,n.locale.contentLanguageDirection),l=o.document.selection.getSelectedElement(),u=n.editing.mapper.toModelElement(l),d;rD(l,u,a)?d=this._handleArrowKeyPressOnSelectedWidget(c):i.isCollapsed?d=this._handleArrowKeyPressWhenSelectionNextToAWidget(c):t.shiftKey||(d=this._handleArrowKeyPressWhenNonCollapsedSelection(c)),d&&(t.preventDefault(),e.stop())}_handleArrowKeyPressOnSelectedWidget(e){let t=this.editor.model,n=t.document.selection,r=sD(n);return t.change(t=>{if(r){if(r!==(e?`after`:`before`))return t.removeSelectionAttribute(nD),!0}else return t.setSelectionAttribute(nD,e?`after`:`before`),!0;return!1})}_handleArrowKeyPressWhenSelectionNextToAWidget(e){let t=this.editor,n=t.model,r=n.schema,i=t.plugins.get(`Widget`),a=i._getObjectElementNextToSelection(e);return rD(t.editing.mapper.toViewElement(a),a,r)?(n.change(t=>{i._setSelectionOverElement(a),t.setSelectionAttribute(nD,e?`before`:`after`)}),!0):!1}_handleArrowKeyPressWhenNonCollapsedSelection(e){let t=this.editor,n=t.model,r=n.schema,i=t.editing.mapper,a=n.document.selection,o=e?a.getLastPosition().nodeBefore:a.getFirstPosition().nodeAfter;return rD(i.toViewElement(o),o,r)?(n.change(t=>{t.setSelection(o,`on`),t.setSelectionAttribute(nD,e?`after`:`before`)}),!0):!1}_enableInsertingParagraphsOnButtonClick(){let e=this.editor,t=e.editing.view;this._listenToIfEnabled(t.document,`mousedown`,(n,r)=>{let i=iD(r.domTarget);if(!i)return;let a=aD(i),o=oD(i,t.domConverter),s=e.editing.mapper.toModelElement(o);this._insertParagraph(s,a),r.preventDefault(),n.stop()})}_enableInsertingParagraphsOnEnterKeypress(){let e=this.editor,t=e.model.document.selection,n=e.editing.view;this._listenToIfEnabled(n.document,`enter`,(n,r)=>{if(n.eventPhase!=`atTarget`)return;let i=t.getSelectedElement(),a=e.editing.mapper.toViewElement(i),o=e.model.schema,s;this._insertParagraphAccordingToFakeCaretPosition()?s=!0:rD(a,i,o)&&(this._insertParagraph(i,r.isSoft?`before`:`after`),s=!0),s&&(r.preventDefault(),n.stop())},{context:HE})}_enableInsertingParagraphsOnTypingKeystroke(){let e=this.editor.editing.view.document;this._listenToIfEnabled(e,`insertText`,(t,n)=>{this._insertParagraphAccordingToFakeCaretPosition()&&(n.selection=e.selection)},{priority:`high`}),p.isAndroid?this._listenToIfEnabled(e,`keydown`,(e,t)=>{t.keyCode==229&&this._insertParagraphAccordingToFakeCaretPosition()}):this._listenToIfEnabled(e,`compositionstart`,()=>{this._insertParagraphAccordingToFakeCaretPosition()},{priority:`highest`})}_enableDeleteIntegration(){let e=this.editor,t=e.editing.view,n=e.model,r=n.schema;this._listenToIfEnabled(t.document,`delete`,(t,i)=>{if(t.eventPhase!=`atTarget`)return;let a=sD(n.document.selection);if(!a)return;let o=i.direction,s=n.document.selection.getSelectedElement(),c=a===`before`,l=o==`forward`;if(c===l)e.execute(`delete`,{selection:n.createSelection(s,`on`)});else{let t=r.getNearestSelectionRange(n.createPositionAt(s,a),o);if(t)if(!t.isCollapsed)n.change(n=>{n.setSelection(t),e.execute(l?`deleteForward`:`delete`)});else{let i=n.createSelection(t.start);if(n.modifySelection(i,{direction:o}),!i.focus.isEqual(t.start))n.change(n=>{n.setSelection(t),e.execute(l?`deleteForward`:`delete`)});else{let e=hD(r,t.start.parent);n.deleteContent(n.createSelection(e,`on`),{doNotAutoparagraph:!0})}}}i.preventDefault(),t.stop()},{context:HE})}_enableInsertContentIntegration(){let e=this.editor,t=this.editor.model,n=t.document.selection;this._listenToIfEnabled(e.model,`insertContent`,(e,[r,i])=>{if(i&&!i.is(`documentSelection`))return;let a=sD(n);if(a)return e.stop(),t.change(e=>{let i=n.getSelectedElement(),o=t.createPositionAt(i,a),s=e.createSelection(o),c=t.insertContent(r,s);return e.setSelection(s),c})},{priority:`high`})}_enableInsertObjectIntegration(){let e=this.editor,t=this.editor.model.document.selection;this._listenToIfEnabled(e.model,`insertObject`,(e,n)=>{let[,r,i={}]=n;if(r&&!r.is(`documentSelection`))return;let a=sD(t);a&&(i.findOptimalPosition=a,n[3]=i)},{priority:`high`})}_enableDeleteContentIntegration(){let e=this.editor,t=this.editor.model.document.selection;this._listenToIfEnabled(e.model,`deleteContent`,(e,[n])=>{n&&!n.is(`documentSelection`)||sD(t)&&e.stop()},{priority:`high`})}};function fD(e,t,n){let r=e.createUIElement(`div`,{class:`ck ck-reset_all ck-widget__type-around`},function(e){let n=this.toDomElement(e);return pD(n,t),mD(n),n});e.insert(e.createPositionAt(n,`end`),r)}function pD(e,t){for(let n of cD){let r=new ga({tag:`div`,attributes:{class:[`ck`,`ck-widget__type-around__button`,`ck-widget__type-around__button_${n}`],title:t[n],"aria-hidden":`true`},children:[e.ownerDocument.importNode(lD,!0)]});e.appendChild(r.render())}}function mD(e){let t=new ga({tag:`div`,attributes:{class:[`ck`,`ck-widget__type-around__fake-caret`]}});e.appendChild(t.render())}function hD(e,t){let n=t;for(let r of t.getAncestors({parentFirst:!0})){if(r.childCount>1||e.isLimit(r))break;n=r}return n}function gD(e){let t=e.model;return(n,r)=>{let i=r.keyCode==k.arrowup,a=r.keyCode==k.arrowdown,o=r.shiftKey,s=t.document.selection;if(!i&&!a)return;let c=a,l=_D(e,s,c);if(l){if(l.isCollapsed&&(s.isCollapsed||o))return;(l.isCollapsed||bD(e,l,c))&&(t.change(e=>{let n=c?l.end:l.start;if(o){let r=t.createSelection(s.anchor);r.setFocus(n),e.setSelection(r)}else e.setSelection(n)}),n.stop(),r.preventDefault(),r.stopPropagation())}}}function _D(e,t,n){let r=e.model;if(n){let e=t.focus,n=vD(r,e,`forward`);if(!n)return;let i=r.createRange(e,n),a=yD(r.schema,i,`backward`);if(a)return r.createRange(e,a)}else{let e=t.focus,n=vD(r,e,`backward`);if(!n)return;let i=r.createRange(n,e),a=yD(r.schema,i,`forward`);if(a)return r.createRange(a,e)}}function vD(e,t,n){let r=e.schema,i=e.createRangeIn(t.root),a=n==`forward`?`elementStart`:`elementEnd`;for(let{previousPosition:e,item:o,type:s}of i.getWalker({startPosition:t,direction:n})){if(r.isLimit(o)&&!r.isInline(o))return e;if(s==a&&r.isBlock(o))return null}return null}function yD(e,t,n){let r=n==`backward`?t.end:t.start;if(e.checkChild(r,`$text`))return r;for(let{nextPosition:r}of t.getWalker({direction:n}))if(e.checkChild(r,`$text`))return r}function bD(e,t,n){let r=e.model,i=e.view.domConverter;if(n){let e=r.createSelection(t.start);r.modifySelection(e),!e.focus.isAtEnd&&!t.start.isEqual(e.focus)&&(t=r.createRange(e.focus,t.end))}let a=e.mapper.toViewRange(t),o=i.viewRangeToDom(a),s=O.getDomRangeRects(o),c;for(let e of s){if(c===void 0){c=Math.round(e.bottom);continue}if(Math.round(e.top)>=c)return!1;c=Math.max(c,Math.round(e.bottom))}return!0}var xD=class extends F{_previouslySelected=new Set;static get pluginName(){return`Widget`}static get isOfficialPlugin(){return!0}static get requires(){return[dD,hT]}init(){let e=this.editor,t=e.editing.view,n=t.document,r=e.t;this.editor.editing.downcastDispatcher.on(`selection`,(t,n,r)=>{let i=r.writer,a=n.selection;if(a.isCollapsed)return;let o=a.getSelectedElement();if(!o)return;let s=e.editing.mapper.toViewElement(o);HE(s)&&r.consumable.consume(a,`selection`)&&i.setSelection(i.createRangeOn(s),{fake:!0,label:JE(s)})}),this.editor.editing.downcastDispatcher.on(`selection`,(e,t,n)=>{this._clearPreviouslySelectedWidgets(n.writer);let r=n.writer,i=r.document.selection,a=null;for(let e of i.getRanges())for(let t of e){let e=t.item;HE(e)&&!ED(e,a)&&(r.addClass(VE,e),this._previouslySelected.add(e),a=e)}},{priority:`low`}),t.addObserver(Ap),t.addObserver(Mp),this.listenTo(n,`mousedown`,(...e)=>this._onMousedown(...e)),this.listenTo(n,`pointerdown`,(...e)=>this._onPointerdown(...e)),this.listenTo(n,`arrowKey`,(...e)=>{this._handleSelectionChangeOnArrowKeyPress(...e)},{context:[HE,`$text`]}),this.listenTo(n,`arrowKey`,(...e)=>{this._preventDefaultOnArrowKeyPress(...e)},{context:`$root`}),this.listenTo(n,`arrowKey`,gD(this.editor.editing),{context:`$text`}),this.listenTo(n,`delete`,(e,t)=>{this._handleDelete(t.direction==`forward`)&&(t.preventDefault(),e.stop())},{context:`$root`}),this.listenTo(n,`tab`,(e,n)=>{this._selectNextEditable(n.shiftKey?`backward`:`forward`)&&(t.scrollToTheSelection(),n.preventDefault(),e.stop())},{context:e=>HE(e)||e.is(`editableElement`),priority:`low`}),this.listenTo(n,`keydown`,(e,t)=>{t.keystroke==k.esc&&this._selectAncestorWidget()&&(t.preventDefault(),e.stop())},{context:e=>e.is(`editableElement`),priority:`low`}),e.accessibility.addKeystrokeInfoGroup({id:`widget`,label:r(`Keystrokes that can be used when a widget is selected (for example: image, table, etc.)`),keystrokes:[{label:r(`Move focus from an editable area back to the parent widget`),keystroke:`Esc`},{label:r(`Insert a new paragraph directly after a widget`),keystroke:`Enter`},{label:r(`Insert a new paragraph directly before a widget`),keystroke:`Shift+Enter`},{label:r(`Move the caret to allow typing directly before a widget`),keystroke:[[`arrowup`],[`arrowleft`]]},{label:r(`Move the caret to allow typing directly after a widget`),keystroke:[[`arrowdown`],[`arrowright`]]}]})}_onMousedown(e,t){let n=t.target;n&&t.domEvent.detail>=3&&this._selectBlockContent(n)&&t.preventDefault()}_onPointerdown(e,t){if(!t.domEvent.isPrimary||iD(t.domTarget))return;let n=this.editor,r=n.editing.view,i=r.document,a=t.target;if(!a)return;if(!HE(a)){let e=wD(a);if(!e)return;if(HE(e))a=e;else{let e=TD(r,t);if(e&&HE(e))a=e;else return}}(p.isAndroid||p.isiOS)&&t.preventDefault(),i.isFocused||r.focus();let o=n.editing.mapper.toModelElement(a);this._setSelectionOverElement(o)}_selectBlockContent(e){let t=this.editor,n=t.model,r=t.editing.mapper,i=n.schema,a=r.findMappedViewAncestor(this.editor.editing.view.createPositionAt(e,0)),o=DD(r.toModelElement(a),n.schema);return o?(n.change(e=>{let t=i.isLimit(o)?null:OD(e.createPositionAfter(o),i),n=e.createPositionAt(o,0),r=t?e.createPositionAt(t,0):e.createPositionAt(o,`end`);e.setSelection(e.createRange(n,r))}),!0):!1}_handleSelectionChangeOnArrowKeyPress(e,t){let n=t.keyCode,r=this.editor.model,i=r.schema,a=r.document.selection,o=a.getSelectedElement(),s=Si(n,this.editor.locale.contentLanguageDirection),c=s==`down`||s==`right`,l=s==`up`||s==`down`;if(!t.shiftKey&&!a.isCollapsed){if(SD(a,i)){let n=c?a.getLastPosition():a.getFirstPosition(),o=i.getNearestSelectionRange(n,c?`forward`:`backward`);o&&(r.change(e=>{e.setSelection(o)}),t.preventDefault(),e.stop())}return}let u=CD(r,c),d=r.createSelection(u);if(r.modifySelection(d,{direction:c?`forward`:`backward`}),d.isEqual(u))return;d.focus.isTouching(u.focus)&&i.checkChild(d.focus.parent,`$text`)&&(c?!d.focus.isAtEnd:!d.focus.isAtStart)&&r.modifySelection(d,{direction:c?`forward`:`backward`});let f=c?u.focus.nodeBefore:u.focus.nodeAfter,p=d.focus.nodeBefore,m=d.focus.nodeAfter,h=c?p:m;if(t.shiftKey)(o&&i.isObject(o)||h&&i.isObject(h)||f&&i.isObject(f))&&(r.change(e=>{e.setSelection(d)}),t.preventDefault(),e.stop());else if(h&&i.isObject(h)){if(i.isInline(h)&&l)return;r.change(e=>{e.setSelection(h,`on`)}),t.preventDefault(),e.stop()}}_preventDefaultOnArrowKeyPress(e,t){let n=this.editor.model,r=n.schema,i=n.document.selection.getSelectedElement();i&&r.isObject(i)&&(t.preventDefault(),e.stop())}_handleDelete(e){let t=this.editor.model.document.selection;if(!this.editor.model.canEditAt(t)||!t.isCollapsed)return;let n=this._getObjectElementNextToSelection(e);if(n)return this.editor.model.change(e=>{let r=t.anchor.parent;for(;r.isEmpty;){let t=r;r=t.parent,e.remove(t)}this._setSelectionOverElement(n)}),!0}_setSelectionOverElement(e){this.editor.model.change(t=>{t.setSelection(t.createRangeOn(e))})}_getObjectElementNextToSelection(e){let t=this.editor.model,n=t.schema,r=t.document.selection,i=t.createSelection(r);if(t.modifySelection(i,{direction:e?`forward`:`backward`}),i.isEqual(r))return null;let a=e?i.focus.nodeBefore:i.focus.nodeAfter;return a&&n.isObject(a)?a:null}_clearPreviouslySelectedWidgets(e){for(let t of this._previouslySelected)e.removeClass(VE,t);this._previouslySelected.clear()}_selectNextEditable(e){let t=this.editor.editing,n=t.view,r=this.editor.model,i=n.document.selection,a=r.document.selection,o;if(a.rangeCount>1){let n=a.isBackward?a.getFirstRange():a.getLastRange();o=t.mapper.toViewPosition(e==`forward`?n.end:n.start)}else o=e==`forward`?i.getFirstPosition():i.getLastPosition();let s=this._findNextFocusRange(o,e);return s?(r.change(e=>{e.setSelection(s)}),!0):!1}_findNextFocusRange(e,t){let n=this.editor.editing,r=n.view,i=this.editor.model,a=r.document.selection,o=a.editableElement,s=o.getPath(),c=a.getSelectedElement();c&&!HE(c)&&(c=null);let l=t==`forward`?r.createRange(e,r.createPositionAt(e.root,`end`)):r.createRange(r.createPositionAt(e.root,0),e);for(let{nextPosition:e}of l.getWalker({direction:t})){let r=e.parent;if(HE(r)&&r!=c){let e=n.mapper.toModelElement(r);if(!i.schema.isBlock(e))continue;if(fr(s,r.getPath())!=`extension`)return i.createRangeOn(e)}else if(r.is(`editableElement`)){if(r==o&&!c)continue;let a=n.mapper.toModelPosition(e),l=i.schema.getNearestSelectionRange(a,t);if(!l)continue;return r==o&&c||fr(s,r.getPath())==`extension`?l:i.createRangeIn(i.schema.getLimitElement(l))}}return null}_selectAncestorWidget(){let e=this.editor,t=e.editing.mapper,n=e.editing.view.document.selection.getFirstPosition().parent,r=(n.is(`$text`)?n.parent:n).findAncestor(HE);if(!r)return!1;let i=t.toModelElement(r);return i?(e.model.change(e=>{e.setSelection(i,`on`)}),!0):!1}};function SD(e,t){let n=e.getFirstPosition(),r=e.getLastPosition(),i=n.nodeAfter,a=r.nodeBefore;return!!i&&t.isObject(i)||!!a&&t.isObject(a)}function CD(e,t){let n=e.document.selection,r=n.getSelectedElement(),i=sD(n);return r&&i==`before`?e.createSelection(r,`before`):r&&i==`after`?e.createSelection(r,`after`):e.createSelection(n.getRanges(),{backward:r&&e.schema.isObject(r)?!t:n.isBackward})}function wD(e){let t=e;for(;t;){if(t.is(`editableElement`)||HE(t))return t;t=t.parent}return null}function TD(e,t){let n=Or(t.domEvent),r=null;if(r=n?e.domConverter.domRangeToView(n):e.createRange(e.createPositionAt(t.target,0)),!r)return null;let i=r.start;if(!i.parent)return null;let a=i.parent;return i.parent.is(`editableElement`)&&(i.isAtEnd&&i.nodeBefore?a=i.nodeBefore:i.isAtStart&&i.nodeAfter&&(a=i.nodeAfter)),a.is(`$text`)?a.parent:a}function ED(e,t){return t?Array.from(e.getAncestors()).includes(t):!1}function DD(e,t){for(let n of e.getAncestors({includeSelf:!0,parentFirst:!0})){if(t.checkChild(n,`$text`))return n;if(t.isLimit(n)&&!t.isObject(n))break}return null}function OD(e,t){let n=new Xc({startPosition:e});for(let{item:e}of n){if(t.isLimit(e)||!e.is(`element`))return null;if(t.checkChild(e,`$text`))return e}return null}var kD=class extends F{_toolbarDefinitions=new Map;_balloon;static get requires(){return[BC]}static get pluginName(){return`WidgetToolbarRepository`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(e.plugins.has(`BalloonToolbar`)){let t=e.plugins.get(`BalloonToolbar`);this.listenTo(t,`show`,t=>{MD(e.editing.view.document.selection)&&t.stop()},{priority:`high`})}this._balloon=this.editor.plugins.get(`ContextualBalloon`),this.on(`change:isEnabled`,()=>{this._updateToolbarsVisibility()}),this.listenTo(e.ui,`update`,()=>{this._updateToolbarsVisibility()}),this.listenTo(e.ui.focusTracker,`change:isFocused`,()=>{this._updateToolbarsVisibility()},{priority:`low`})}destroy(){super.destroy();for(let e of this._toolbarDefinitions.values())e.view.destroy()}register(e,{ariaLabel:t,items:n,getRelatedElement:r,balloonClassName:i=`ck-toolbar-container`,positions:a}){if(!n.length){T(`widget-toolbar-no-items`,{toolbarId:e});return}let o=this.editor,s=o.t,c=new Ox(o.locale);if(c.ariaLabel=t||s(`Widget toolbar`),this._toolbarDefinitions.has(e))throw new w(`widget-toolbar-duplicated`,this,{toolbarId:e});let l={view:c,getRelatedElement:r,balloonClassName:i,itemsConfig:n,positions:a,initialized:!1};o.ui.addToolbar(c,{isContextual:!0,beforeFocus:()=>{let e=r(o.editing.view.document.selection);e&&this._showToolbar(l,e)},afterBlur:()=>{this._hideToolbar(l)}}),this._toolbarDefinitions.set(e,l)}_updateToolbarsVisibility(){let e=0,t=null,n=null;for(let r of this._toolbarDefinitions.values()){let i=r.getRelatedElement(this.editor.editing.view.document.selection);if(!this.isEnabled||!i)this._isToolbarInBalloon(r)&&this._hideToolbar(r);else if(!this.editor.ui.focusTracker.isFocused)this._isToolbarVisible(r)&&this._hideToolbar(r);else{let a=i.getAncestors().length;a>e&&(e=a,t=i,n=r)}}n&&this._showToolbar(n,t)}_hideToolbar(e){this._balloon.remove(e.view),this.stopListening(this._balloon,`change:visibleView`)}_showToolbar(e,t){this._isToolbarVisible(e)?AD(this.editor,t,e.positions):this._isToolbarInBalloon(e)||(e.initialized||(e.initialized=!0,e.view.fillFromConfig(e.itemsConfig,this.editor.ui.componentFactory)),this._balloon.add({view:e.view,position:jD(this.editor,t,e.positions),balloonClassName:e.balloonClassName}),this.listenTo(this._balloon,`change:visibleView`,()=>{for(let t of this._toolbarDefinitions.values())if(this._isToolbarVisible(t)){let n=t.getRelatedElement(this.editor.editing.view.document.selection);AD(this.editor,n,e.positions)}}))}_isToolbarVisible(e){return this._balloon.visibleView===e.view}_isToolbarInBalloon(e){return this._balloon.hasView(e.view)}};function AD(e,t,n){let r=e.plugins.get(`ContextualBalloon`),i=jD(e,t,n);r.updatePosition(i)}function jD(e,t,n){let r=e.editing.view,i=ab.defaultPositions;return{target:r.domConverter.mapViewToDom(t),positions:n||[i.northArrowSouth,i.northArrowSouthWest,i.northArrowSouthEast,i.southArrowNorth,i.southArrowNorthWest,i.southArrowNorthEast,i.viewportStickyNorth]}}function MD(e){let t=e.getSelectedElement();return!!(t&&HE(t))}const ND=D();var PD=class extends ND{_referenceCoordinates;_options;_originalWidth;_originalHeight;_originalWidthPercents;_aspectRatio;constructor(e){super(),this.set(`activeHandlePosition`,null),this.set(`proposedWidthPercents`,null),this.set(`proposedWidth`,null),this.set(`proposedHeight`,null),this.set(`proposedHandleHostWidth`,null),this.set(`proposedHandleHostHeight`,null),this._options=e,this._referenceCoordinates=null}get originalWidth(){return this._originalWidth}get originalHeight(){return this._originalHeight}get originalWidthPercents(){return this._originalWidthPercents}get aspectRatio(){return this._aspectRatio}begin(e,t,n){let r=new O(t);this.activeHandlePosition=LD(e),this._referenceCoordinates=FD(t,RD(this.activeHandlePosition)),this._originalWidth=r.width,this._originalHeight=r.height,this._aspectRatio=r.width/r.height;let i=n.style.width;i&&i.match(/^\d+(\.\d*)?%$/)?this._originalWidthPercents=parseFloat(i):this._originalWidthPercents=tD(n,r)}update(e){this.proposedWidth=e.width,this.proposedHeight=e.height,this.proposedWidthPercents=e.widthPercents,this.proposedHandleHostWidth=e.handleHostWidth,this.proposedHandleHostHeight=e.handleHostHeight}};function FD(e,t){let n=new O(e),r=t.split(`-`),i={x:r[1]==`right`?n.right:n.left,y:r[0]==`bottom`?n.bottom:n.top};return i.x+=e.ownerDocument.defaultView.scrollX,i.y+=e.ownerDocument.defaultView.scrollY,i}function ID(e){return`ck-widget__resizer__handle-${e}`}function LD(e){for(let t of[`top-left`,`top-right`,`bottom-right`,`bottom-left`])if(e.classList.contains(ID(t)))return t}function RD(e){let t=e.split(`-`),n={top:`bottom`,bottom:`top`,left:`right`,right:`left`};return`${n[t[0]]}-${n[t[1]]}`}var zD=class extends P{constructor(){super();let e=this.bindTemplate;this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-size-view`,e.to(`_viewPosition`,e=>e?`ck-orientation-${e}`:``)],style:{display:e.if(`_isVisible`,`none`,e=>!e)}},children:[{text:e.to(`_label`)}]})}_bindToState(e,t){this.bind(`_isVisible`).to(t,`proposedWidth`,t,`proposedHeight`,(e,t)=>e!==null&&t!==null),this.bind(`_label`).to(t,`proposedHandleHostWidth`,t,`proposedHandleHostHeight`,t,`proposedWidthPercents`,(t,n,r)=>e.unit===`px`?`${t}×${n}`:`${r}%`),this.bind(`_viewPosition`).to(t,`activeHandlePosition`,t,`proposedHandleHostWidth`,t,`proposedHandleHostHeight`,(e,t,n)=>t<50||n<50?`above-center`:e)}_dismiss(){this.unbind(),this._isVisible=!1}};const BD=D();var VD=class extends BD{_state;_sizeView;_options;_viewResizerWrapper=null;_initialViewWidth;constructor(e){super(),this._options=e,this.set(`isEnabled`,!0),this.set(`isSelected`,!1),this.bind(`isVisible`).to(this,`isEnabled`,this,`isSelected`,(e,t)=>e&&t),this.decorate(`begin`),this.decorate(`cancel`),this.decorate(`commit`),this.decorate(`updateSize`),this.on(`commit`,e=>{!this.state.proposedWidth&&!this.state.proposedWidthPercents&&(this._cleanup(),e.stop())},{priority:`high`})}get state(){return this._state}show(){this._options.editor.editing.view.change(e=>{e.removeClass(`ck-hidden`,this._viewResizerWrapper)})}hide(){this._options.editor.editing.view.change(e=>{e.addClass(`ck-hidden`,this._viewResizerWrapper)})}attach(){let e=this,t=this._options.viewElement;this._options.editor.editing.view.change(n=>{let r=n.createUIElement(`div`,{class:`ck ck-reset_all ck-widget__resizer`},function(t){let n=this.toDomElement(t);return e._appendHandles(n),e._appendSizeUI(n),n});n.insert(n.createPositionAt(t,`end`),r),n.addClass(`ck-widget_with-resizer`,t),this._viewResizerWrapper=r,this.isVisible||this.hide()}),this.on(`change:isVisible`,()=>{this.isVisible?(this.show(),this.redraw()):this.hide()})}begin(e){this._state=new PD(this._options),this._sizeView._bindToState(this._options,this.state),this._initialViewWidth=this._options.viewElement.getStyle(`width`),this.state.begin(e,this._getHandleHost(),this._getResizeHost())}updateSize(e){let t=this._proposeNewSize(e);this._options.editor.editing.view.change(e=>{let n=this._options.unit||`%`,r=(n===`%`?t.widthPercents:t.width)+n;e.setStyle(`width`,r,this._options.viewElement)});let n=this._getHandleHost(),r=new O(n),i=Math.round(r.width),a=Math.round(r.height),o=new O(n);t.width=Math.round(o.width),t.height=Math.round(o.height),this.redraw(r),this.state.update({...t,handleHostWidth:i,handleHostHeight:a})}commit(){let e=this._options.unit||`%`,t=(e===`%`?this.state.proposedWidthPercents:this.state.proposedWidth)+e;this._options.editor.editing.view.change(()=>{this._cleanup(),this._options.onCommit(t)})}cancel(){this._cleanup()}destroy(){this.cancel()}redraw(e){let t=this._domResizerWrapper;if(!WD(t))return;let n=t.parentElement,r=this._getHandleHost(),i=this._viewResizerWrapper,a=[i.getStyle(`width`),i.getStyle(`height`),i.getStyle(`left`),i.getStyle(`top`)],o;if(n.isSameNode(r)){let t=e||new O(r);o=[t.width+`px`,t.height+`px`,void 0,void 0]}else o=[r.offsetWidth+`px`,r.offsetHeight+`px`,r.offsetLeft+`px`,r.offsetTop+`px`];fr(a,o)!==`same`&&this._options.editor.editing.view.change(e=>{e.setStyle({width:o[0],height:o[1],left:o[2],top:o[3]},i)})}containsHandle(e){return this._domResizerWrapper.contains(e)}static isResizeHandle(e){return e.classList.contains(`ck-widget__resizer__handle`)}_cleanup(){this._sizeView._dismiss(),this._options.editor.editing.view.change(e=>{e.setStyle(`width`,this._initialViewWidth,this._options.viewElement)})}_proposeNewSize(e){let t=this.state,n=UD(e),r=this._options.isCentered?this._options.isCentered(this):!0,i={x:t._referenceCoordinates.x-(n.x+t.originalWidth),y:n.y-t.originalHeight-t._referenceCoordinates.y};r&&t.activeHandlePosition.endsWith(`-right`)&&(i.x=n.x-(t._referenceCoordinates.x+t.originalWidth)),r&&(i.x*=2);let a=Math.abs(t.originalWidth+i.x),o=Math.abs(t.originalHeight+i.y);return(a/t.aspectRatio>o?`width`:`height`)==`width`?o=a/t.aspectRatio:a=o*t.aspectRatio,{width:Math.round(a),height:Math.round(o),widthPercents:Math.min(Math.round(t.originalWidthPercents/t.originalWidth*a*100)/100,100)}}_getResizeHost(){let e=this._domResizerWrapper.parentElement;return this._options.getResizeHost(e)}_getHandleHost(){let e=this._domResizerWrapper.parentElement;return this._options.getHandleHost(e)}get _domResizerWrapper(){return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper)}_appendHandles(e){for(let t of[`top-left`,`top-right`,`bottom-right`,`bottom-left`])e.appendChild(new ga({tag:`div`,attributes:{class:`ck-widget__resizer__handle ${HD(t)}`}}).render())}_appendSizeUI(e){this._sizeView=new zD,this._sizeView.render(),e.appendChild(this._sizeView.element)}};function HD(e){return`ck-widget__resizer__handle-${e}`}function UD(e){return{x:e.pageX,y:e.pageY}}function WD(e){return e&&e.ownerDocument&&e.ownerDocument.contains(e)}var GD=class extends F{_resizers=new Map;_observer;_redrawSelectedResizerThrottled;static get pluginName(){return`WidgetResize`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.editing,t=u.window.document;this.set(`selectedResizer`,null),this.set(`_activeResizer`,null),e.view.addObserver(Ap),this._observer=new(br()),this.listenTo(e.view.document,`mousedown`,this._mouseDownListener.bind(this),{priority:`high`}),this._observer.listenTo(t,`mousemove`,this._mouseMoveListener.bind(this)),this._observer.listenTo(t,`mouseup`,this._mouseUpListener.bind(this)),this._redrawSelectedResizerThrottled=qt(()=>this.redrawSelectedResizer(),200),this.editor.ui.on(`update`,this._redrawSelectedResizerThrottled),this.editor.model.document.on(`change`,()=>{for(let[e,t]of this._resizers)e.isAttached()||(this._resizers.delete(e),t.destroy())},{priority:`lowest`}),this._observer.listenTo(u.window,`resize`,this._redrawSelectedResizerThrottled);let n=this.editor.editing.view.document.selection;n.on(`change`,()=>{let e=n.getSelectedElement(),t=this.getResizerByViewElement(e)||null;t?this.select(t):this.deselect()})}redrawSelectedResizer(){this.selectedResizer&&this.selectedResizer.isVisible&&this.selectedResizer.redraw()}destroy(){super.destroy(),this._observer.stopListening();for(let e of this._resizers.values())e.destroy();this._redrawSelectedResizerThrottled.cancel()}select(e){this.deselect(),this.selectedResizer=e,this.selectedResizer.isSelected=!0}deselect(){this.selectedResizer&&(this.selectedResizer.isSelected=!1),this.selectedResizer=null}attachTo(e){let t=new VD(e),n=this.editor.plugins;if(t.attach(),n.has(`WidgetToolbarRepository`)){let e=n.get(`WidgetToolbarRepository`);t.on(`begin`,()=>{e.forceDisabled(`resize`)},{priority:`lowest`}),t.on(`cancel`,()=>{e.clearForceDisabled(`resize`)},{priority:`highest`}),t.on(`commit`,()=>{e.clearForceDisabled(`resize`)},{priority:`highest`})}this._resizers.set(e.viewElement,t);let r=this.editor.editing.view.document.selection.getSelectedElement();return this.getResizerByViewElement(r)==t&&this.select(t),t}getResizerByViewElement(e){return this._resizers.get(e)}_getResizerByHandle(e){for(let t of this._resizers.values())if(t.containsHandle(e))return t}_mouseDownListener(e,t){let n=t.domTarget;VD.isResizeHandle(n)&&(this._activeResizer=this._getResizerByHandle(n)||null,this._activeResizer&&(this._activeResizer.begin(n),e.stop(),t.preventDefault()))}_mouseMoveListener(e,t){this._activeResizer&&this._activeResizer.updateSize(t)}_mouseUpListener(){this._activeResizer&&=(this._activeResizer.commit(),null)}},KD=class extends P{focusTracker=new M;keystrokes=new N;idInputView;backButtonView;saveButtonView;children;_validators;_focusables=new pa;_focusCycler;constructor(e,t){super(e),this._validators=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.idInputView=this._createIdInput(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.idInputView,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-bookmark-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.idInputView,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.idInputView.focus()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.idInputView.errorText=t,!1}return!0}resetFormStatus(){this.idInputView.errorText=null}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Bookmark`)});return t.children.add(this.backButtonView,0),t}_createIdInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Bookmark name`),t.infoText=e(`Enter the bookmark name without spaces.`),t.class=`ck-labeled-field-view_full-width`,t}get id(){let{element:e}=this.idInputView.fieldView;return e?e.value.trim():null}};function qD(e){return!(!e||typeof e!=`string`||/\s/.test(e))}var JD=class extends I{refresh(){let e=this.editor.model.document.selection,t=this._getPositionToInsertBookmark(e);this.isEnabled=!!t}execute(e){if(!e)return;let{bookmarkId:t}=e;if(!qD(t)){T(`insert-bookmark-command-executed-with-invalid-name`);return}let n=this.editor,r=n.model,i=r.document.selection;r.change(e=>{let a=this._getPositionToInsertBookmark(i);if(!r.schema.checkChild(a,`bookmark`)){let e=n.execute(`insertParagraph`,{position:a});if(!e)return;a=e}let o=e.createElement(`bookmark`,{...Object.fromEntries(i.getAttributes()),bookmarkId:t});r.insertObject(o,a,null,{setSelection:`on`})})}_getPositionToInsertBookmark(e){let t=this.editor.model,n=t.schema,r=e.getFirstRange(),i=r.start;if(YD(i,n))return i;for(let{previousPosition:e,item:i}of r){if(i.is(`element`)&&n.checkChild(i,`$text`)&&YD(i,n))return t.createPositionAt(i,0);if(YD(e,n))return e}return null}};function YD(e,t){return t.checkChild(e,`bookmark`)?!0:t.checkChild(e,`paragraph`)?t.checkChild(`paragraph`,`bookmark`):!1}var XD=class extends I{refresh(){let e=this.editor.model.document.selection,t=ZD(e);this.isEnabled=!!t,this.value=t?t.getAttribute(`bookmarkId`):void 0}execute(e){if(!e)return;let{bookmarkId:t}=e;if(!qD(t)){T(`update-bookmark-command-executed-with-invalid-name`);return}let n=this.editor.model,r=n.document.selection,i=ZD(r);i&&n.change(e=>{e.setAttribute(`bookmarkId`,t,i)})}};function ZD(e){let t=e.getSelectedElement();return t&&t.is(`element`,`bookmark`)?t:null}var QD=class extends F{_bookmarkElements=new Map;static get pluginName(){return`BookmarkEditing`}static get licenseFeatureCode(){return`BKM`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`bookmark`,{toolbar:[`bookmarkPreview`,`|`,`editBookmark`,`removeBookmark`]})}init(){let{editor:e}=this;this._defineSchema(),this._defineConverters(),e.commands.add(`insertBookmark`,new JD(e)),e.commands.add(`updateBookmark`,new XD(e)),this.listenTo(e.model.document,`change:data`,()=>{this._trackBookmarkElements()})}getElementForBookmarkId(e){for(let[t,n]of this._bookmarkElements)if(n==e)return t;return null}getAllBookmarkNames(){return new Set(this._bookmarkElements.values())}_defineSchema(){this.editor.model.schema.register(`bookmark`,{inheritAllFrom:`$inlineObject`,allowAttributes:`bookmarkId`,disallowAttributes:[`linkHref`,`htmlA`]})}_defineConverters(){let{editor:e}=this,{conversion:t,t:n}=e;e.data.htmlProcessor.domConverter.registerInlineObjectMatcher(e=>$D(e)),e.editing.view.domConverter.registerInlineObjectMatcher(e=>$D(e,!1)),t.for(`dataDowncast`).elementToElement({model:{name:`bookmark`,attributes:[`bookmarkId`]},view:(e,{writer:t})=>t.createEmptyElement(`a`,{id:e.getAttribute(`bookmarkId`)})}),t.for(`editingDowncast`).elementToElement({model:{name:`bookmark`,attributes:[`bookmarkId`]},view:(e,{writer:t})=>{let r=e.getAttribute(`bookmarkId`),i=t.createContainerElement(`a`,{id:r,class:`ck-bookmark`},[this._createBookmarkUIElement(t)]);return t.setCustomProperty(`bookmark`,!0,i),this._bookmarkElements.set(e,r),UE(i,t,{label:()=>`${r} ${n(`bookmark widget`)}`})}}),t.for(`upcast`).add(t=>t.on(`element:a`,eO(e)))}_createBookmarkUIElement(e){return e.createUIElement(`span`,{class:`ck-bookmark__icon`},function(e){let t=this.toDomElement(e),n=new Ly;return n.set({content:Qg,isColorInherited:!1}),n.render(),t.appendChild(n.element),t})}_trackBookmarkElements(){this._bookmarkElements.forEach((e,t)=>{t.root.rootName===`$graveyard`&&this._bookmarkElements.delete(t)})}};function $D(e,t=!0){if(e.name!==`a`||t&&!e.isEmpty)return null;let n=e.hasAttribute(`id`),r=e.hasAttribute(`name`),i=e.hasAttribute(`href`);return n&&!i?{name:!0,attributes:[`id`]}:r&&!i?{name:!0,attributes:[`name`]}:null}function eO(e){return(t,n,r)=>{let i=n.viewItem,a=$D(i,!1);if(!a||!r.consumable.test(i,a)||!tO(e)&&!i.isEmpty)return;let o=r.writer,s=i.getAttribute(`id`),c=i.getAttribute(`name`),l=s||c,u=o.createElement(`bookmark`,{bookmarkId:l});if(!r.safeInsert(u,n.modelCursor))return;r.consumable.consume(i,a),s===c&&r.consumable.consume(i,{attributes:[`name`]}),r.updateConversionResult(u,n);let{modelCursor:d,modelRange:f}=r.convertChildren(i,n.modelCursor);n.modelCursor=d,n.modelRange=o.createRange(n.modelRange.start,f.end)}}function tO(e){let t=e.config.get(`bookmark.enableNonEmptyAnchorConversion`);return t===void 0?!0:t}const nO=`bookmark-ui`;var rO=class extends F{formView=null;_balloon;static get requires(){return[QD,BC,kD]}static get pluginName(){return`BookmarkUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;this._balloon=e.plugins.get(BC),e.plugins.has(`LinkUI`)&&this._registerLinkProvider(),this._registerComponents(),e.conversion.for(`editingDowncast`).markerToHighlight({model:nO,view:{classes:[`ck-fake-bookmark-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:nO,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-bookmark-selection`,`ck-fake-bookmark-selection_collapsed`],n),n}})}afterInit(){let e=this.editor,t=e.locale.t,n=this.editor.plugins.get(kD),r=ab.defaultPositions;n.register(`bookmark`,{ariaLabel:t(`Bookmark toolbar`),items:e.config.get(`bookmark.toolbar`),getRelatedElement:aO,balloonClassName:`ck-bookmark-balloon ck-toolbar-container`,positions:[r.southArrowNorth,r.southArrowNorthMiddleWest,r.southArrowNorthMiddleEast,r.southArrowNorthWest,r.southArrowNorthEast,r.northArrowSouth,r.northArrowSouthMiddleWest,r.northArrowSouthMiddleEast,r.northArrowSouthWest,r.northArrowSouthEast,r.viewportStickyNorth]})}destroy(){super.destroy(),this.formView&&this.formView.destroy()}_createViews(){this.formView=this._createFormView(),this._enableUserBalloonInteractions()}_createFormView(){let e=this.editor,t=e.locale,n=t.t,r=e.commands.get(`insertBookmark`),i=e.commands.get(`updateBookmark`),a=[r,i],o=new(Xa(KD))(t,iO(e));return o.idInputView.fieldView.bind(`value`).to(i,`value`),o.saveButtonView.bind(`label`).to(i,`value`,e=>n(e?`Save`:`Insert`)),o.idInputView.bind(`isEnabled`).toMany(a,`isEnabled`,(...e)=>e.some(e=>e)),o.saveButtonView.bind(`isEnabled`).toMany(a,`isEnabled`,(...e)=>e.some(e=>e)),this.listenTo(o,`cancel`,()=>{this._hideFormView()}),this.listenTo(o,`submit`,()=>{if(o.isValid()){let t=o.id;this._getSelectedBookmarkElement()?e.execute(`updateBookmark`,{bookmarkId:t}):e.execute(`insertBookmark`,{bookmarkId:t}),this._hideFormView()}}),this.listenTo(o.idInputView,`change:errorText`,()=>{e.ui.update()}),o}_registerLinkProvider(){let e=this.editor.locale.t,t=this.editor.plugins.get(`LinkUI`),n=this.editor.plugins.get(QD);t.registerLinksListProvider({label:e(`Bookmarks`),emptyListPlaceholder:e(`No bookmarks available.`),navigate:({href:e})=>this._scrollToBookmark(e),getListItems:()=>Array.from(n.getAllBookmarkNames()).sort((e,t)=>e.localeCompare(t)).map(e=>({id:e,href:`#${e}`,label:e,icon:e_})),getItem:t=>{let r=[...n.getAllBookmarkNames()].find(e=>`#${e}`===t);return r?{href:t,label:r,icon:t_,tooltip:e(`Scroll to bookmark`)}:null}})}_scrollToBookmark(e){let t=this.editor.plugins.get(QD).getElementForBookmarkId(e.slice(1));return t?(this.editor.model.change(e=>{e.setSelection(t,`on`)}),this.editor.editing.view.scrollToTheSelection({alignToTop:!0,forceScroll:!0}),!0):!1}_registerComponents(){let e=this.editor;e.ui.componentFactory.add(`bookmark`,()=>{let e=this._createBookmarkButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:bookmark`,()=>this._createBookmarkButton(U)),e.ui.componentFactory.add(`bookmarkPreview`,t=>{let n=e.commands.get(`updateBookmark`),r=new eo(t);return r.extendTemplate({attributes:{class:[`ck-bookmark-toolbar__preview`]}}),r.bind(`text`).to(n,`value`),r}),e.ui.componentFactory.add(`editBookmark`,t=>{let n=e.commands.get(`updateBookmark`),r=new H(t),i=t.t;return r.set({label:i(`Edit bookmark`),icon:Rv,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{this._showFormView()}),r}),e.ui.componentFactory.add(`removeBookmark`,t=>{let n=e.commands.get(`delete`),r=new H(t),i=t.t;return r.set({label:i(`Remove bookmark`),icon:Qv,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{e.execute(`delete`),e.editing.view.focus()}),r})}_createBookmarkButton(e){let t=this.editor,n=t.locale,r=new e(n),i=t.commands.get(`insertBookmark`),a=t.commands.get(`updateBookmark`),o=n.t;return r.set({label:o(`Bookmark`),icon:$g}),this.listenTo(r,`execute`,()=>{t.editing.view.scrollToTheSelection(),this._showFormView()}),r.bind(`isEnabled`).toMany([i,a],`isEnabled`,(...e)=>e.some(e=>e)),r.bind(`isOn`).to(a,`value`,e=>!!e),r}_enableUserBalloonInteractions(){this.editor.keystrokes.set(`Esc`,(e,t)=>{this._isFormVisible&&(this._hideFormView(),t())}),Ya({emitter:this.formView,activator:()=>this._isFormInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>{this._hideFormView(!1)}})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;let e=this.editor.commands.get(`updateBookmark`);this.formView.disableCssTransitions(),this.formView.resetFormStatus(),this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.formView.backButtonView.isVisible=e.isEnabled,this.formView.idInputView.fieldView.value=e.value||``,this._balloon.visibleView===this.formView&&this.formView.idInputView.fieldView.select(),this.formView.enableCssTransitions()}_removeFormView(e=!0){this.formView.saveButtonView.focus(),this.formView.idInputView.fieldView.reset(),this._balloon.remove(this.formView),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection()}_showFormView(){this.formView||this._createViews(),this._getSelectedBookmarkElement()||this._showFakeVisualSelection(),this._addFormView(),this._balloon.showStack(`main`),this._startUpdatingUI()}_hideFormView(e=!0){if(!this._isFormInPanel)return;let t=this.editor;this.stopListening(t.ui,`update`),this.stopListening(this._balloon,`change:visibleView`),e&&t.editing.view.focus(),this._removeFormView(e),this._hideFakeVisualSelection()}_startUpdatingUI(){let e=this.editor,t=e.editing.view.document,n=this._getSelectedBookmarkElement(),r=a(),i=()=>{let e=this._getSelectedBookmarkElement(),t=a();n&&!e||!n&&t!==r?this._hideFormView():this._isFormVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=e,r=t};function a(){return t.selection.focus.getAncestors().reverse().find(e=>e.is(`element`))}this.listenTo(e.ui,`update`,i),this.listenTo(this._balloon,`change:visibleView`,i)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _isFormVisible(){return!!this.formView&&this._balloon.visibleView==this.formView}_getBalloonPositionData(){let e=this.editor.editing.view,t=this.editor.model,n,r=this._getSelectedBookmarkElement();if(t.markers.has(nO)){let t=Array.from(this.editor.editing.mapper.markerNameToElements(nO)),r=e.createRange(e.createPositionBefore(t[0]),e.createPositionAfter(t[t.length-1]));n=e.domConverter.viewRangeToDom(r)}else r&&(n=()=>{let t=this.editor.editing.mapper,n=e.domConverter,i=t.toViewElement(r);return n.mapViewToDom(i)});if(n)return{target:n}}_getSelectedBookmarkElement(){let e=this.editor.model.document.selection.getSelectedElement();return e&&e.is(`element`,`bookmark`)?e:null}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(nO))t.updateMarker(nO,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(nO,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(nO,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(nO)&&e.change(e=>{e.removeMarker(nO)})}};function iO(e){let{t}=e,n=e.plugins.get(QD);return[e=>{if(!e.id)return t(`Bookmark must not be empty.`)},e=>{if(e.id&&/\s/.test(e.id))return t(`Bookmark name cannot contain space characters.`)},r=>{let i=e.model.document.selection.getSelectedElement(),a=n.getElementForBookmarkId(r.id);if(i!==a&&a)return t(`Bookmark name already exists.`)}]}function aO(e){let t=e.getSelectedElement();return!t||!HE(t)||!t.getCustomProperty(`bookmark`)?null:t}var oO=class extends F{static get pluginName(){return`Bookmark`}static get requires(){return[QD,rO,xD]}static get isOfficialPlugin(){return!0}},sO=class extends F{static get pluginName(){return`CKBoxUI`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor;e.commands.get(`ckbox`)&&(e.ui.componentFactory.add(`ckbox`,()=>this._createFileToolbarButton()),e.ui.componentFactory.add(`menuBar:ckbox`,()=>this._createFileMenuBarButton()),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`assetManager`,observable:()=>e.commands.get(`ckbox`),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?`insertOnly`:`insertNested`)}))}_createButton(e){let t=this.editor,n=t.locale,r=new e(n),i=t.commands.get(`ckbox`);return r.bind(`isOn`,`isEnabled`).to(i,`value`,`isEnabled`),r.on(`execute`,()=>{t.execute(`ckbox`)}),r}_createFileToolbarButton(){let e=this.editor.locale.t,t=this._createButton(H);return t.icon=a_,t.label=e(`Open file manager`),t.tooltip=!0,t}_createImageToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace image with file manager`:`Insert image with file manager`)),n.tooltip=!0,n}_createImageDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace with file manager`:`Insert with file manager`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createFileMenuBarButton(){let e=this.editor.locale.t,t=this._createButton(U);return t.icon=a_,t.withText=!0,t.label=e(`File`),t}_createImageMenuBarButton(e){let t=this.editor.locale.t,n=this.editor.locale.t,r=this._createButton(U);switch(r.icon=z_,r.withText=!0,e){case`insertOnly`:r.label=t(`Image`);break;case`insertNested`:r.label=n(`With file manager`);break}return r}};function cO(e){return e=e.replace(/&/g,`&`).replace(//g,`>`).replace(/\r?\n\r?\n/g,`

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

    `)||e.includes(`
    `))&&(e=`

    ${e}

    `),e}var lO=class extends jc{domEventType=[`paste`,`copy`,`cut`,`drop`,`dragover`,`dragstart`,`dragend`,`dragenter`,`dragleave`];constructor(e){super(e);let t=this.document;this.listenTo(t,`paste`,n(`clipboardInput`),{priority:`low`}),this.listenTo(t,`drop`,n(`clipboardInput`),{priority:`low`}),this.listenTo(t,`dragover`,n(`dragging`),{priority:`low`});function n(e){return(n,r)=>{r.preventDefault();let i=r.dropRange?[r.dropRange]:null,a=r.dataTransfer,o=new pe(t,e),s=``;a.getData(`text/html`)?s=a.getData(`text/html`):a.getData(`text/plain`)&&(s=cO(a.getData(`text/plain`))),t.fire(o,{dataTransfer:a,content:s,method:n.name,targetRanges:i,target:r.target,domEvent:r.domEvent}),o.stop.called&&r.stopPropagation()}}}onDomEvent(e){let t={dataTransfer:new Bc(`clipboardData`in e?e.clipboardData:e.dataTransfer,{cacheFiles:e.type==`drop`||e.type==`paste`})};if(e.type==`drop`||e.type==`dragover`){let n=Or(e);t.dropRange=n&&this.view.domConverter.domRangeToView(n)}this.fire(e.type,e,t)}};function uO(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>t.length==1?` `:t).replace(//g,``)}const dO=[`figcaption`,`li`],fO=[`ol`,`ul`];function pO(e,t){if(t.is(`$text`)||t.is(`$textProxy`))return t.data;if(t.is(`element`,`img`)&&t.hasAttribute(`alt`))return t.getAttribute(`alt`);if(t.is(`element`,`br`))return` -`;let n=``,r=null;for(let i of t.getChildren())n+=hO(i,r)+pO(e,i),r=i;if(t.is(`rawElement`)){let r=document.implementation.createHTMLDocument(``).createElement(`div`);t.render(r,e),n+=mO(r)}return n}function mO(e){let t=``;if(e.nodeType===Node.TEXT_NODE)return e.textContent;if(e.tagName===`BR`)return` -`;for(let n of e.childNodes)t+=mO(n);return t}function hO(e,t){return t?e.is(`element`,`li`)&&!e.isEmpty&&e.getChild(0).is(`containerElement`)||fO.includes(e.name)&&fO.includes(t.name)?` - -`:!e.is(`containerElement`)&&!t.is(`containerElement`)?``:dO.includes(e.name)||dO.includes(t.name)?` -`:e.is(`element`)&&e.getCustomProperty(`dataPipeline:transparentRendering`)||t.is(`element`)&&t.getCustomProperty(`dataPipeline:transparentRendering`)?``:` - -`:``}var gO=class extends F{_markersToCopy=new Map;static get pluginName(){return`ClipboardMarkersUtils`}static get isOfficialPlugin(){return!0}_registerMarkerToCopy(e,t){this._markersToCopy.set(e,t)}_copySelectedFragmentWithMarkers(e,t,n=e=>e.model.getSelectedContent(e.model.document.selection)){return this.editor.model.change(r=>{let i=r.model.document.selection;r.setSelection(t);let a=this._insertFakeMarkersIntoSelection(r,r.model.document.selection,e),o=n(r),s=this._removeFakeMarkersInsideElement(r,o);for(let[e,t]of Object.entries(a)){s[e]||=r.createRangeIn(o);for(let e of t)r.remove(e)}o.markers.clear();for(let[e,t]of Object.entries(s))o.markers.set(e,t);return r.setSelection(i),o})}_pasteMarkersIntoTransformedElement(e,t){let n=this._getPasteMarkersFromRangeMap(e);return this.editor.model.change(e=>{let r=this._insertFakeMarkersElements(e,n),i=t(e),a=this._removeFakeMarkersInsideElement(e,i);for(let t of Object.values(r).flat())e.remove(t);for(let[t,n]of Object.entries(a))e.model.markers.has(t)||e.addMarker(t,{usingOperation:!0,affectsData:!0,range:n});return i})}_pasteFragmentWithMarkers(e){let t=this._getPasteMarkersFromRangeMap(e.markers);e.markers.clear();for(let n of t)e.markers.set(n.name,n.range);return this.editor.model.insertContent(e)}_forceMarkersCopy(e,t,n={allowedActions:`all`,copyPartiallySelected:!0,duplicateOnPaste:!0}){let r=this._markersToCopy.get(e);this._markersToCopy.set(e,n),t(),r?this._markersToCopy.set(e,r):this._markersToCopy.delete(e)}_isMarkerCopyable(e,t){let n=this._getMarkerClipboardConfig(e);if(!n)return!1;if(!t)return!0;let{allowedActions:r}=n;return r===`all`||r.includes(t)}_hasMarkerConfiguration(e){return!!this._getMarkerClipboardConfig(e)}_getMarkerClipboardConfig(e){let[t]=e.split(`:`);return this._markersToCopy.get(t)||null}_insertFakeMarkersIntoSelection(e,t,n){let r=this._getCopyableMarkersFromSelection(e,t,n);return this._insertFakeMarkersElements(e,r)}_getCopyableMarkersFromSelection(e,t,n){let r=Array.from(t.getRanges()),i=new Set(r.flatMap(t=>Array.from(e.model.markers.getMarkersIntersectingRange(t))));return Array.from(i).filter(e=>{if(!this._isMarkerCopyable(e.name,n))return!1;let{copyPartiallySelected:t}=this._getMarkerClipboardConfig(e.name);if(!t){let t=e.getRange();return r.some(e=>e.containsRange(t,!0))}return!0}).map(e=>({name:n===`dragstart`?this._getUniqueMarkerName(e.name):e.name,range:e.getRange()}))}_getPasteMarkersFromRangeMap(e,t=null){let{model:n}=this.editor;return(e instanceof Map?Array.from(e.entries()):Object.entries(e)).flatMap(([e,r])=>{if(!this._hasMarkerConfiguration(e))return[{name:e,range:r}];if(this._isMarkerCopyable(e,t)){let t=this._getMarkerClipboardConfig(e),i=n.markers.has(e)&&n.markers.get(e).getRange().root.rootName===`$graveyard`;return(t.duplicateOnPaste||i)&&(e=this._getUniqueMarkerName(e)),[{name:e,range:r}]}return[]})}_insertFakeMarkersElements(e,t){let n={},r=t.flatMap(e=>{let{start:t,end:n}=e.range;return[{position:t,marker:e,type:`start`},{position:n,marker:e,type:`end`}]}).sort(({position:e},{position:t})=>e.isBefore(t)?1:-1);for(let{position:t,marker:i,type:a}of r){let r=e.createElement(`$marker`,{"data-name":i.name,"data-type":a});n[i.name]||(n[i.name]=[]),n[i.name].push(r),e.insert(r,t)}return n}_removeFakeMarkersInsideElement(e,t){return vn(this._getAllFakeMarkersFromElement(e,t).reduce((t,n)=>{let r=n.markerElement&&e.createPositionBefore(n.markerElement),i=t[n.name],a=!1;return i?.start&&i?.end&&(this._getMarkerClipboardConfig(n.name).duplicateOnPaste?t[this._getUniqueMarkerName(n.name)]=t[n.name]:a=!0,i=null),a||(t[n.name]={...i,[n.type]:r}),n.markerElement&&e.remove(n.markerElement),t},{}),n=>new B(n.start||e.createPositionFromPath(t,[0]),n.end||e.createPositionAt(t,`end`)))}_getAllFakeMarkersFromElement(e,t){let n=Array.from(e.createRangeIn(t)).flatMap(({item:e})=>e.is(`element`,`$marker`)?[{markerElement:e,name:e.getAttribute(`data-name`),type:e.getAttribute(`data-type`)}]:[]),r=[],i=[];for(let e of n)e.type===`end`&&(n.some(t=>t.name===e.name&&t.type===`start`)||r.push({markerElement:null,name:e.name,type:`start`})),e.type===`start`&&(n.some(t=>t.name===e.name&&t.type===`end`)||i.unshift({markerElement:null,name:e.name,type:`end`}));return[...r,...n,...i]}_getUniqueMarkerName(e){let t=e.split(`:`),n=he().substring(1,6);return t.length===3?`${t.slice(0,2).join(`:`)}:${n}`:`${t.join(`:`)}:${n}`}},_O=class extends F{static get pluginName(){return`ClipboardPipeline`}static get isOfficialPlugin(){return!0}static get requires(){return[gO]}init(){this.editor.editing.view.addObserver(lO),this._setupPasteDrop(),this._setupCopyCut()}_fireOutputTransformationEvent(e,t,n){let r=this.editor.plugins.get(`ClipboardMarkersUtils`);this.editor.model.enqueueChange({isUndoable:n===`cut`},()=>{let i=r._copySelectedFragmentWithMarkers(n,t);this.fire(`outputTransformation`,{dataTransfer:e,content:i,method:n})})}_setupPasteDrop(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=this.editor.plugins.get(`ClipboardMarkersUtils`);this.listenTo(r,`clipboardInput`,(t,n)=>{n.method==`paste`&&!e.model.canEditAt(e.model.document.selection)&&t.stop()},{priority:`highest`}),this.listenTo(r,`clipboardInput`,(e,t)=>{let r=t.dataTransfer,i=new pe(this,`inputTransformation`),a=r.getData(`application/ckeditor5-editor-id`)||null,o=typeof t.content==`string`?this.editor.data.htmlProcessor.toView(uO(t.content)):t.content;this.fire(i,{content:o,dataTransfer:r,sourceEditorId:a,extraContent:t.extraContent,targetRanges:t.targetRanges,method:t.method}),i.stop.called&&e.stop(),n.scrollToTheSelection()},{priority:`low`}),this.listenTo(this,`inputTransformation`,(e,n)=>{if(n.content.isEmpty)return;let r=this.editor.data.toModel(n.content,`$clipboardHolder`);r.childCount!=0&&(e.stop(),t.change(()=>{this.fire(`contentInsertion`,{content:r,method:n.method,sourceEditorId:n.sourceEditorId,dataTransfer:n.dataTransfer,targetRanges:n.targetRanges})}))},{priority:`low`}),this.listenTo(this,`contentInsertion`,(e,t)=>{t.resultRange=i._pasteFragmentWithMarkers(t.content)},{priority:`low`})}_setupCopyCut(){let e=this.editor,t=e.model.document,n=e.editing.view.document,r=(e,n)=>{let r=n.dataTransfer;n.preventDefault(),this._fireOutputTransformationEvent(r,t.selection,e.name)};this.listenTo(n,`copy`,r,{priority:`low`}),this.listenTo(n,`cut`,(t,n)=>{e.model.canEditAt(e.model.document.selection)?r(t,n):n.preventDefault()},{priority:`low`}),this.listenTo(this,`outputTransformation`,(t,r)=>{let i=e.data.toView(r.content,{isClipboardPipeline:!0});n.fire(`clipboardOutput`,{dataTransfer:r.dataTransfer,content:i,method:r.method})},{priority:`low`}),this.listenTo(n,`clipboardOutput`,(n,r)=>{r.content.isEmpty||(r.dataTransfer.setData(`text/html`,this.editor.data.htmlProcessor.toData(r.content)),r.dataTransfer.setData(`text/plain`,pO(e.data.htmlProcessor.domConverter,r.content)),r.dataTransfer.setData(`application/ckeditor5-editor-id`,this.editor.id)),r.method==`cut`&&e.model.deleteContent(t.selection)},{priority:`low`})}};const vO=Wr(`px`);var yO=class extends P{constructor(){super();let e=this.bindTemplate;this.set({isVisible:!1,left:null,top:null,width:null}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-clipboard-drop-target-line`,e.if(`isVisible`,`ck-hidden`,e=>!e)],style:{left:e.to(`left`,e=>vO(e)),top:e.to(`top`,e=>vO(e)),width:e.to(`width`,e=>vO(e))}}})}},bO=class extends F{removeDropMarkerDelayed=Yi(()=>this.removeDropMarker(),40);_updateDropMarkerThrottled=qt(e=>this._updateDropMarker(e),40);_reconvertMarkerThrottled=qt(()=>{this.editor.model.markers.has(`drop-target`)&&this.editor.editing.reconvertMarker(`drop-target`)},0);_dropTargetLineView=new yO;_domEmitter=new(br());_scrollables=new Map;static get pluginName(){return`DragDropTarget`}static get isOfficialPlugin(){return!0}init(){this._setupDropMarker()}destroy(){this._domEmitter.stopListening();for(let{resizeObserver:e}of this._scrollables.values())e.destroy();return this._updateDropMarkerThrottled.cancel(),this.removeDropMarkerDelayed.cancel(),this._reconvertMarkerThrottled.cancel(),super.destroy()}updateDropMarker(e,t,n,r,i,a){this.removeDropMarkerDelayed.cancel();let o=xO(this.editor,e,t,n,r,i,a);return o?a&&a.containsRange(o)||o&&!this.editor.model.canEditAt(o)?(this.removeDropMarker(),null):(this._updateDropMarkerThrottled(o),o):null}getFinalDropRange(e,t,n,r,i,a){let o=xO(this.editor,e,t,n,r,i,a);return this.removeDropMarker(),o}removeDropMarker(){let e=this.editor.model;this.removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),this._dropTargetLineView.isVisible=!1,e.markers.has(`drop-target`)&&e.change(e=>{e.removeMarker(`drop-target`)})}_setupDropMarker(){let e=this.editor;e.ui.view.body.add(this._dropTargetLineView),e.conversion.for(`editingDowncast`).markerToHighlight({model:`drop-target`,view:{classes:[`ck-clipboard-drop-target-range`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:`drop-target`,view:(t,{writer:n})=>{if(e.model.schema.checkChild(t.markerRange.start,`$text`))return this._dropTargetLineView.isVisible=!1,this._createDropTargetPosition(n);t.markerRange.isCollapsed?this._updateDropTargetLine(t.markerRange):this._dropTargetLineView.isVisible=!1}})}_updateDropMarker(e){let t=this.editor,n=t.model.markers;t.model.change(t=>{n.has(`drop-target`)?n.get(`drop-target`).getRange().isEqual(e)||t.updateMarker(`drop-target`,{range:e}):t.addMarker(`drop-target`,{range:e,usingOperation:!1,affectsData:!1})})}_createDropTargetPosition(e){return e.createUIElement(`span`,{class:`ck ck-clipboard-drop-target-position`},function(e){let t=this.toDomElement(e);return t.append(`⁠`,e.createElement(`span`),`⁠`),t})}_updateDropTargetLine(e){let t=this.editor.editing,n=e.start.nodeBefore,r=e.start.nodeAfter,i=e.start.parent,a=n?t.mapper.toViewElement(n):null,o=a?t.view.domConverter.mapViewToDom(a):null,s=r?t.mapper.toViewElement(r):null,c=s?t.view.domConverter.mapViewToDom(s):null,l=t.mapper.toViewElement(i);if(!l)return;let d=t.view.domConverter.mapViewToDom(l),f=this._getScrollableRect(l),{scrollX:p,scrollY:m}=u.window,h=o?new O(o):null,g=c?new O(c):null,_=new O(d).excludeScrollbarsAndBorders(),v=h?h.bottom:_.top,y=g?g.top:_.bottom,ee=u.window.getComputedStyle(d),b=v<=y?(v+y)/2:y;if(f.tops.schema.checkChild(a,e))){if(s.schema.checkChild(a,`$text`))return s.createRange(a);if(t)return CO(e,TO(e,t.parent),r,i)}}}else if(s.schema.isInline(l))return CO(e,l,r,i)}if(s.schema.isBlock(l))return CO(e,l,r,i);if(s.schema.checkChild(l,`$block`)){let t=Array.from(l.getChildren()).filter(t=>t.is(`element`)&&!SO(e,t)),n=0,a=t.length;if(a==0)return s.createRange(s.createPositionAt(l,`end`));for(;n{n?(this.forceDisabled(`readOnlyMode`),this._isBlockDragging=!1):this.clearForceDisabled(`readOnlyMode`)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`),e.plugins.has(`BlockToolbar`)){let t=e.plugins.get(`BlockToolbar`).buttonView.element;this._domEmitter.listenTo(t,`dragstart`,(e,t)=>this._handleBlockDragStart(t)),this._domEmitter.listenTo(u.document,`dragover`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`drop`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`dragend`,()=>this._handleBlockDragEnd(),{useCapture:!0}),this.isEnabled&&t.setAttribute(`draggable`,`true`),this.on(`change:isEnabled`,(e,n,r)=>{t.setAttribute(`draggable`,r?`true`:`false`)})}}destroy(){return this._domEmitter.stopListening(),super.destroy()}_handleBlockDragStart(e){if(!this.isEnabled)return;let t=this.editor.model,n=t.document.selection,r=this.editor.editing.view,i=Array.from(n.getSelectedBlocks()),a=t.createRange(t.createPositionBefore(i[0]),t.createPositionAfter(i[i.length-1]));t.change(e=>e.setSelection(a)),this._isBlockDragging=!0,r.focus(),r.getObserver(lO).onDomEvent(e)}_handleBlockDragging(e){if(!this.isEnabled||!this._isBlockDragging)return;let t=e.clientX+(this.editor.locale.contentLanguageDirection==`ltr`?100:-100),n=e.clientY,r=document.elementFromPoint(t,n),i=this.editor.editing.view;!r||!r.closest(`.ck-editor__editable`)||i.getObserver(lO).onDomEvent({...e,type:e.type,dataTransfer:e.dataTransfer,target:r,clientX:t,clientY:n,preventDefault:()=>e.preventDefault(),stopPropagation:()=>e.stopPropagation()})}_handleBlockDragEnd(){this._isBlockDragging=!1}},OO=class extends F{_draggedRange;_draggingUid;_draggableElement;_clearDraggableAttributesDelayed=Yi(()=>this._clearDraggableAttributes(),40);_blockMode=!1;_domEmitter=new(br());_previewContainer;static get pluginName(){return`DragDrop`}static get isOfficialPlugin(){return!0}static get requires(){return[_O,xD,bO,DO]}init(){let e=this.editor,t=e.editing.view;this._draggedRange=null,this._draggingUid=``,this._draggableElement=null,t.addObserver(lO),t.addObserver(Mp),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDraggableAttributeHandling(),this.listenTo(e,`change:isReadOnly`,(e,t,n)=>{n?this.forceDisabled(`readOnlyMode`):this.clearForceDisabled(`readOnlyMode`)}),this.on(`change:isEnabled`,(e,t,n)=>{n||this._finalizeDragging(!1)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`)}destroy(){return this._draggedRange&&=(this._draggedRange.detach(),null),this._previewContainer&&this._previewContainer.remove(),this._domEmitter.stopListening(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=e.plugins.get(bO);this.listenTo(r,`dragstart`,(n,r)=>{if(r.target?.is(`editableElement`)){r.preventDefault();return}if(this._prepareDraggedRange(r.target),!this._draggedRange){r.preventDefault();return}this._draggingUid=he();let i=this.isEnabled&&e.model.canEditAt(this._draggedRange);r.dataTransfer.effectAllowed=i?`copyMove`:`copy`,r.dataTransfer.setData(`application/ckeditor5-dragging-uid`,this._draggingUid);let a=t.createSelection(this._draggedRange.toRange());this.editor.plugins.get(`ClipboardPipeline`)._fireOutputTransformationEvent(r.dataTransfer,a,`dragstart`);let{dataTransfer:o,domTarget:s,domEvent:c}=r,{clientX:l}=c;this._updatePreview({dataTransfer:o,domTarget:s,clientX:l}),r.stopPropagation(),i||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``)},{priority:`low`}),this.listenTo(r,`dragend`,(e,t)=>{this._finalizeDragging(!t.dataTransfer.isCanceled&&t.dataTransfer.dropEffect==`move`)},{priority:`low`}),this._domEmitter.listenTo(u.document,`dragend`,()=>{this._blockMode=!1},{useCapture:!0}),this.listenTo(r,`dragenter`,()=>{this.isEnabled&&n.focus()}),this.listenTo(r,`dragleave`,()=>{i.removeDropMarkerDelayed()}),this.listenTo(r,`dragging`,(e,t)=>{if(!this.isEnabled){t.dataTransfer.dropEffect=`none`;return}let{clientX:n,clientY:r}=t.domEvent;if(!i.updateDropMarker(t.target,t.targetRanges,n,r,this._blockMode,this._draggedRange)){t.dataTransfer.dropEffect=`none`;return}this._draggedRange||(t.dataTransfer.dropEffect=`copy`),p.isGecko||(t.dataTransfer.effectAllowed==`copy`?t.dataTransfer.dropEffect=`copy`:[`all`,`copyMove`].includes(t.dataTransfer.effectAllowed)&&(t.dataTransfer.dropEffect=`move`)),e.stop()},{priority:`low`})}_setupClipboardInputIntegration(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(bO);this.listenTo(t,`clipboardInput`,(t,r)=>{if(r.method!=`drop`)return;let{clientX:i,clientY:a}=r.domEvent,o=n.getFinalDropRange(r.target,r.targetRanges,i,a,this._blockMode,this._draggedRange);if(!o){this._finalizeDragging(!1),t.stop();return}if(this._draggedRange&&this._draggingUid!=r.dataTransfer.getData(`application/ckeditor5-dragging-uid`)&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``),kO(r.dataTransfer)==`move`&&this._draggedRange&&this._draggedRange.containsRange(o,!0)){this._finalizeDragging(!1),t.stop();return}r.targetRanges=[e.editing.mapper.toViewRange(o)]},{priority:`high`})}_setupContentInsertionIntegration(){let e=this.editor.plugins.get(_O);e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=t.targetRanges.map(e=>this.editor.editing.mapper.toModelRange(e));this.editor.model.change(e=>e.setSelection(n))},{priority:`high`}),e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=kO(t.dataTransfer)==`move`,r=!t.resultRange||!t.resultRange.isCollapsed;this._finalizeDragging(r&&n)},{priority:`lowest`})}_setupDraggableAttributeHandling(){let e=this.editor,t=e.editing.view,n=t.document;this.listenTo(n,`pointerdown`,(r,i)=>{if(p.isAndroid||!i)return;this._clearDraggableAttributesDelayed.cancel();let a=AO(i.target);if(p.isBlink&&!e.isReadOnly&&!a&&!n.selection.isCollapsed){let e=n.selection.getSelectedElement();(!e||!HE(e))&&(a=n.selection.editableElement)}a&&(t.change(e=>{e.setAttribute(`draggable`,`true`,a)}),this._draggableElement=e.editing.mapper.toModelElement(a))}),this.listenTo(n,`pointerup`,()=>{p.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){let e=this.editor.editing;e.view.change(t=>{this._draggableElement&&this._draggableElement.root.rootName!=`$graveyard`&&t.removeAttribute(`draggable`,e.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_finalizeDragging(e){let t=this.editor,n=t.model;t.plugins.get(bO).removeDropMarker(),this._clearDraggableAttributes(),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).clearForceDisabled(`dragDrop`),this._draggingUid=``,this._previewContainer&&=(this._previewContainer.remove(),void 0),this._draggedRange&&=(e&&this.isEnabled&&n.change(e=>{let t=n.createSelection(this._draggedRange);n.deleteContent(t,{doNotAutoparagraph:!0});let r=t.getFirstPosition().parent;r.isEmpty&&!n.schema.checkChild(r,`$text`)&&n.schema.checkChild(r,`paragraph`)&&e.insertElement(`paragraph`,r,0)}),this._draggedRange.detach(),null)}_prepareDraggedRange(e){let t=this.editor,n=t.model,r=n.document.selection,i=e?AO(e):null;if(i){let e=t.editing.mapper.toModelElement(i);this._draggedRange=xl.fromRange(n.createRangeOn(e)),this._blockMode=n.schema.isBlock(e),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).forceDisabled(`dragDrop`);return}if(r.isCollapsed&&!r.getFirstPosition().parent.isEmpty)return;let a=Array.from(r.getSelectedBlocks()),o=r.getFirstRange();if(a.length==0){this._draggedRange=xl.fromRange(o);return}let s=jO(n,a);if(a.length>1)this._draggedRange=xl.fromRange(s),this._blockMode=!0;else if(a.length==1){let e=o.start.isTouching(s.start)&&o.end.isTouching(s.end);this._draggedRange=xl.fromRange(e?s:o),this._blockMode=e}n.change(e=>e.setSelection(this._draggedRange.toRange()))}_updatePreview({dataTransfer:e,domTarget:t,clientX:n}){let r=this.editor.editing.view,i=r.document.selection.editableElement,a=r.domConverter.mapViewToDom(i),o=u.window.getComputedStyle(a);this._previewContainer?this._previewContainer.firstElementChild&&this._previewContainer.removeChild(this._previewContainer.firstElementChild):(this._previewContainer=mr(u.document,`div`,{style:`position: fixed; left: -999999px;`}),u.document.body.appendChild(this._previewContainer));let s=mr(u.document,`div`);s.className=`ck ck-content ck-clipboard-preview`;let c=new O(a),l=parseFloat(o.paddingLeft),d=parseFloat(o.paddingRight),f=parseFloat(o.width)-l-d;if(!a.contains(t))if(p.isiOS)s.style.width=`${f}px`,s.style.backgroundColor=`var(--ck-color-base-background)`;else{let e=c.left-n+l;s.style.width=`${f+e}px`,s.style.paddingLeft=`${e}px`}else if(p.isiOS)s.style.maxWidth=`${f}px`,s.style.padding=`10px`,s.style.minWidth=`200px`,s.style.minHeight=`20px`,s.style.boxSizing=`border-box`,s.style.backgroundColor=`var(--ck-color-base-background)`;else return;r.domConverter.setContentOf(s,e.getData(`text/html`)),e.setDragImage(s,0,0),this._previewContainer.appendChild(s)}};function kO(e){return p.isGecko?e.dropEffect:[`all`,`copyMove`].includes(e.effectAllowed)?`move`:`copy`}function AO(e){if(e.is(`editableElement`))return null;if(e.hasClass(`ck-widget__selection-handle`))return e.findAncestor(HE);if(HE(e))return e;let t=e.findAncestor(e=>HE(e)||e.is(`editableElement`));return HE(t)?t:null}function jO(e,t){let n=t[0],r=t[t.length-1],i=n.getCommonAncestor(r),a=e.createPositionBefore(n),o=e.createPositionAfter(r);if(i&&i.is(`element`)&&!e.schema.isLimit(i)){let t=e.createRangeOn(i),n=a.isTouching(t.start),r=o.isTouching(t.end);if(n&&r)return jO(e,[i])}return e.createRange(a,o)}var MO=class extends F{static get pluginName(){return`PastePlainText`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.model,n=e.editing.view,r=t.document.selection;n.addObserver(lO),e.plugins.get(_O).on(`contentInsertion`,(e,n)=>{NO(n.content,t)&&t.change(e=>{let i=Array.from(r.getAttributes()).filter(([e])=>t.schema.getAttributeProperties(e).isFormatting);r.isCollapsed||t.deleteContent(r,{doNotAutoparagraph:!0}),i.push(...r.getAttributes());let a=e.createRangeIn(n.content);for(let n of a.getItems())for(let r of i)t.schema.checkAttribute(n,r[0])&&e.setAttribute(r[0],r[1],n)})})}};function NO(e,t){let n=t.createRangeIn(e);if(e.childCount==1){let r=e.getChild(0);r.is(`element`)&&t.schema.isBlock(r)&&!t.schema.isObject(r)&&!t.schema.isLimit(r)&&(n=t.createRangeIn(r))}for(let e of n.getItems())if(!t.schema.isInline(e)||Array.from(e.getAttributeKeys()).find(e=>t.schema.getAttributeProperties(e).isFormatting))return!1;return!0}var PO=class extends F{static get pluginName(){return`Clipboard`}static get isOfficialPlugin(){return!0}static get requires(){return[gO,_O,OO,MO]}init(){let e=this.editor,t=this.editor.t;e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Copy selected content`),keystroke:`CTRL+C`},{label:t(`Paste content`),keystroke:`CTRL+V`},{label:t(`Paste content as plain text`),keystroke:`CTRL+SHIFT+V`}]})}},FO=class{_definitions=new Set;_conflictChecker;get length(){return this._definitions.size}setConflictChecker(e){this._conflictChecker=e}add(e){Array.isArray(e)?e.forEach(e=>this._definitions.add(e)):this._definitions.add(e)}getDispatcher(){return e=>{let t=(e,t)=>{let n=t.createAttributeElement(`a`,e.attributes,{priority:5});e.classes&&t.addClass(e.classes,n);for(let r in e.styles)t.setStyle(r,e.styles[r],n);return t.setCustomProperty(`link`,!0,n),n},n=e=>(n,r,i)=>{if(r.attributeKey.startsWith(`link`)&&!(r.attributeKey==`linkHref`&&!i.consumable.test(r.item,`attribute:linkHref`))&&!(!r.item.is(`selection`)&&!i.schema.isInline(r.item)))for(let n of this._definitions)n.callback(r.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(n,r.item)&&e?r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(n,i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(n,i.writer)):i.writer.unwrap(i.mapper.toViewRange(r.range),t(n,i.writer))};e.on(`attribute`,n(!1),{priority:ge.high-1}),e.on(`attribute`,n(!0),{priority:ge.high-2})}}getDispatcherForLinkedImage(){return e=>{let t=e=>(t,n,{writer:r,mapper:i})=>{if(!n.item.is(`element`,`imageBlock`)||!n.attributeKey.startsWith(`link`))return;let a=i.toViewElement(n.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o)for(let t of this._definitions){let i=Ui(t.attributes);if(t.callback(n.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(t,n.item)&&e){for(let[e,t]of i)e===`class`?r.addClass(t,o):r.setAttribute(e,t,!1,o);t.classes&&r.addClass(t.classes,o);for(let e in t.styles)r.setStyle(e,t.styles[e],o)}else{for(let[e,t]of i)e===`class`?r.removeClass(t,o):r.removeAttribute(e,t,o);t.classes&&r.removeClass(t.classes,o);for(let e in t.styles)r.removeStyle(e,o)}}};e.on(`attribute`,t(!1),{priority:ge.high-1}),e.on(`attribute`,t(!0),{priority:ge.high-2})}}};const IO=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,LO=/^[\S]+@((?![-_])(?:[-\w\u00a1-\uffff]{0,63}[^-_]\.))+(?:[a-z\u00a1-\uffff]{2,})$/i,RO=/^((\w+:(\/{2,})?)|(\W))/i,zO=[`https?`,`ftps?`,`mailto`],BO=`Ctrl+K`;function VO(e){return e.is(`attributeElement`)&&!!e.getCustomProperty(`link`)}function HO(e,{writer:t}){let n=t.createAttributeElement(`a`,{href:e},{priority:5});return t.setCustomProperty(`link`,!0,n),n}function UO(e,t=zO){let n=String(e),r=t.join(`|`);return WO(n,RegExp(`${`^(?:(?:):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))`.replace(``,r)}`,`i`))?n:`#`}function WO(e,t){return!!e.replace(IO,``).match(t)}function GO(e,t){let n={"Open in a new tab":e(`Open in a new tab`),Downloadable:e(`Downloadable`)};return t.forEach(e=>(`label`in e&&n[e.label]&&(e.label=n[e.label]),e)),t}function KO(e){let t=[];if(e)for(let[n,r]of Object.entries(e)){let e=Object.assign({},r,{id:`link${Yn(n)}`});t.push(e)}return t}function qO(e,t){return e?t.checkAttribute(e.name,`linkHref`):!1}function JO(e){return LO.test(e)}function YO(e,t){let n=JO(e)?`mailto:`:t,r=!!n&&!XO(e);return e&&r?n+e:e}function XO(e){return RO.test(e)}function ZO(e){window.open(e,`_blank`,`noopener`)}function QO(e){let t=``;for(let n of e.getItems()){if(!n.is(`$text`)&&!n.is(`$textProxy`))return;t+=n.data}return t}function $O(e,t){if(e.attributes&&t.attributes&&Object.keys(e.attributes).some(e=>!n(e)&&e in t.attributes)||e.styles&&t.styles&&Object.keys(e.styles).some(e=>e in t.styles))return!0;return!1;function n(e){return e===`class`||e===`style`||e===`rel`}}function ek({decoratorStates:e,allDecorators:t}){let n={...e};for(let i in e)if(e[i]&&r(i)){let e=tk(i,t);for(let t of e)n[t]=!1}function r(e){return t.some(t=>t.id===e&&!t.value)}return n}function tk(e,t){let n=t.find(t=>t.id===e);return n?t.filter(t=>t.id!==e&&$O(n,t)).map(e=>e.id):[]}var nk=class extends I{manualDecorators=new Fi;automaticDecorators=new FO;restoreManualDecoratorStates(){for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement()||j(t.getSelectedBlocks());qO(n,e.schema)?(this.value=n.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttribute(n,`linkHref`)):(this.value=t.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`));for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}execute(e,t={},n){let r=this.editor.model,i=r.document.selection,a=ek({allDecorators:Array.from(this.manualDecorators),decoratorStates:t}),o=[],s=[];for(let e in a)a[e]?o.push(e):s.push(e);r.change(t=>{let a=n=>{t.setAttribute(`linkHref`,e,n),o.forEach(e=>t.setAttribute(e,!0,n)),s.forEach(e=>t.removeAttribute(e,n))},c=(i,o)=>{let s=QO(i);if(!s)return i;let c=n;if(c||=o&&o==s?e:s,c!=s){let e=t.createDocumentFragment();for(let n of i.getItems()){let r=n;t.append(t.createText(r.data,r.getAttributes()),e)}let n=t.createRangeIn(e),o=rk(s,c),l=0;for(let{offset:e,actual:i,expected:s}of o){let o=e+l,c=t.createRange(n.start.getShiftedBy(o),n.start.getShiftedBy(o+i.length)),u=ik(c,n).getAttributes(),d=Array.from(u).filter(([e])=>r.schema.getAttributeProperties(e).isFormatting),f=t.createText(s,d);a(f),t.remove(c),t.insert(f,c.start),l+=s.length}return r.insertContent(e,i),t.createRange(i.start,i.start.getShiftedBy(c.length))}},l=e=>{let{plugins:n}=this.editor;if(t.setSelection(e.end),n.has(`TwoStepCaretMovement`))n.get(`TwoStepCaretMovement`)._handleForwardMovement();else for(let e of[`linkHref`,...o,...s])t.removeSelectionAttribute(e)};if(i.isCollapsed){let s=i.getFirstPosition();if(i.hasAttribute(`linkHref`)){let e=i.getAttribute(`linkHref`),t=LT(s,`linkHref`,e,r),n=c(t,e);a(n||t),n&&l(n)}else if(e!==``){let a=Ui(i.getAttributes());a.set(`linkHref`,e),o.forEach(e=>{a.set(e,!0)}),l(r.insertContent(t.createText(n||e,a),s))}}else{let e=Array.from(i.getRanges()),n=r.schema.getValidRanges(e,`linkHref`),o=[];for(let e of i.getSelectedBlocks())r.schema.checkAttribute(e,`linkHref`)&&o.push(t.createRangeOn(e));let s=o.slice();for(let e of n)this._isRangeToUpdate(e,o)&&s.push(e);let l=e.map(e=>({start:pf.fromPosition(e.start,`toPrevious`),end:pf.fromPosition(e.end,`toNext`)}));for(let e of s){let t=(e.start.textNode||e.start.nodeAfter).getAttribute(`linkHref`);e=c(e,t)||e,a(e)}t.setSelection(l.map(e=>{let t=e.start.toPosition(),n=e.end.toPosition();return e.start.detach(),e.end.detach(),r.createRange(t,n)}))}}),this.restoreManualDecoratorStates()}_getDecoratorStateFromModel(e){let t=this.editor.model,n=t.document.selection,r=n.getSelectedElement();return qO(r,t.schema)?r.getAttribute(e):n.getAttribute(e)}_isRangeToUpdate(e,t){for(let n of t)if(n.containsRange(e))return!1;return!0}};function rk(e,t){let n=oe(e,t),r={equal:0,insert:0,delete:0},i=[],a=``,o=``;for(let s of[...n,null])s==`insert`?o+=t[r.equal+r.insert]:s==`delete`?a+=e[r.equal+r.delete]:(a.length||o.length)&&(i.push({offset:r.equal,actual:a,expected:o}),a=``,o=``),s&&r[s]++;return i}function ik(e,t){if(!e.isCollapsed)return j(e.getItems());let n=e.start;return n.textNode?n.textNode:!n.nodeBefore||n.isEqual(t.start)?n.nodeAfter:n.nodeBefore}var ak=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement();qO(n,e.schema)?this.isEnabled=e.schema.checkAttribute(n,`linkHref`):this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`)}execute(){let e=this.editor,t=this.editor.model,n=t.document.selection,r=e.commands.get(`link`);t.change(e=>{let i=n.isCollapsed?[LT(n.getFirstPosition(),`linkHref`,n.getAttribute(`linkHref`),t)]:t.schema.getValidRanges(n.getRanges(),`linkHref`);for(let t of i)if(e.removeAttribute(`linkHref`,t),r)for(let n of r.manualDecorators)e.removeAttribute(n.id,t)})}};const ok=D();var sk=class extends ok{id;defaultValue;label;attributes;classes;styles;constructor({id:e,label:t,attributes:n,classes:r,styles:i,defaultValue:a}){super(),this.id=e,this.set(`value`,void 0),this.defaultValue=a,this.label=t,this.attributes=n,this.classes=r,this.styles=i}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}};const ck=`automatic`,lk=/^(https?:)?\/\//;var uk=class extends F{_linkOpeners=[];static get pluginName(){return`LinkEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[bT,tT,_O]}constructor(e){super(e),e.config.define(`link`,{allowCreatingEmptyLinks:!1,addTargetToExternalLinks:!1,toolbar:[`linkPreview`,`|`,`editLink`,`linkProperties`,`unlink`]})}init(){let e=this.editor,t=this.editor.config.get(`link.allowedProtocols`);e.model.schema.extend(`$text`,{allowAttributes:`linkHref`}),e.conversion.for(`dataDowncast`).attributeToElement({model:`linkHref`,view:HO}),e.conversion.for(`editingDowncast`).attributeToElement({model:`linkHref`,view:(e,n)=>HO(UO(e,t),n)}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,attributes:{href:!0}},model:{key:`linkHref`,value:e=>e.getAttribute(`href`)}}),e.commands.add(`link`,new nk(e)),e.commands.add(`unlink`,new ak(e));let n=GO(e.t,KO(e.config.get(`link.decorators`)));this._enableAutomaticDecorators(n.filter(e=>e.mode===ck)),this._enableManualDecorators(n.filter(e=>e.mode===`manual`)),e.plugins.get(bT).registerAttribute(`linkHref`),zT(e,`linkHref`,`a`,`ck-link_selected`),this._enableLinkOpen(),this._enableSelectionAttributesFixer(),this._enableClipboardIntegration(),this._enableDecoratorConflictPostfixer()}_registerLinkOpener(e){this._linkOpeners.push(e)}_enableAutomaticDecorators(e){let t=this.editor,n=t.commands.get(`link`),r=n.automaticDecorators;t.config.get(`link.addTargetToExternalLinks`)&&r.add({id:`linkIsExternal`,mode:ck,callback:e=>!!e&&lk.test(e),attributes:{target:`_blank`,rel:`noopener noreferrer`}}),r.add(e),r.setConflictChecker((e,t)=>{for(let r of n.manualDecorators)if(t.hasAttribute(r.id)&&$O(e,r))return!0}),r.length&&t.conversion.for(`downcast`).add(r.getDispatcher())}_enableManualDecorators(e){if(!e.length)return;let t=this.editor,n=t.commands.get(`link`).manualDecorators;e.forEach(e=>{t.model.schema.extend(`$text`,{allowAttributes:e.id});let r=new sk(e);n.add(r),t.conversion.for(`downcast`).add(e=>{let t=e=>{let t=e.createAttributeElement(`a`,r.attributes,{priority:5});r.classes&&e.addClass(r.classes,t);for(let n in r.styles)e.setStyle(n,r.styles[n],t);return e.setCustomProperty(`link`,!0,t),t},n=e=>(n,r,i)=>{if(!(!r.item.is(`selection`)&&!i.schema.isInline(r.item))){if(!e&&r.attributeOldValue){if(!i.consumable.test(r.item,n.name))return;i.writer.unwrap(i.mapper.toViewRange(r.range),t(i.writer))}if(e&&r.attributeNewValue){if(!i.consumable.consume(r.item,n.name))return;r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(i.writer))}}};e.on(`attribute:${r.id}`,n(!1),{priority:ge.high-1}),e.on(`attribute:${r.id}`,n(!0),{priority:ge.high-2})}),t.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,...r._createPattern()},model:{key:r.id}})})}_enableLinkOpen(){let e=this.editor,t=e.editing.view.document,n=e=>{this._linkOpeners.some(t=>t(e))||ZO(e)};this.listenTo(t,`click`,(e,t)=>{if(!(p.isMac?t.domEvent.metaKey:t.domEvent.ctrlKey))return;let r=t.domTarget;if(r.tagName.toLowerCase()!=`a`&&(r=r.closest(`a`)),!r)return;let i=r.getAttribute(`href`);i&&(e.stop(),t.preventDefault(),n(i))},{context:`$capture`}),this.listenTo(t,`keydown`,(t,r)=>{let i=e.commands.get(`link`).value;i&&r.keyCode===k.enter&&r.altKey&&(t.stop(),n(i))})}_enableSelectionAttributesFixer(){let e=this.editor.model,t=e.document.selection;this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{!r.includes(`linkHref`)||t.hasAttribute(`linkHref`)||e.change(t=>{dk(t,fk(e.schema))})})}_enableClipboardIntegration(){let e=this.editor,t=e.model,n=this.editor.config.get(`link.defaultProtocol`);n&&this.listenTo(e.plugins.get(`ClipboardPipeline`),`contentInsertion`,(e,r)=>{t.change(e=>{let t=e.createRangeIn(r.content);for(let r of t.getItems())if(r.hasAttribute(`linkHref`)){let t=YO(r.getAttribute(`linkHref`),n);e.setAttribute(`linkHref`,t,r)}})})}_enableDecoratorConflictPostfixer(){let e=this.editor,t=e.model,n=e.commands.get(`link`);t.document.registerPostFixer(e=>{let r=!1,i=t.document.differ.getChanges(),a=new Set,o=new Set(n.manualDecorators.map(e=>e.id));for(let e of i){if(e.type===`attribute`){if(e.attributeKey!==`linkHref`&&!o.has(e.attributeKey))continue;for(let t of e.range.getItems())t.hasAttribute(`linkHref`)&&a.add(t)}e.type===`insert`&&e.attributes.has(`linkHref`)&&e.position.nodeAfter&&a.add(e.position.nodeAfter)}for(let t of a){let i=[];for(let a of n.manualDecorators)if(t.hasAttribute(a.id)){for(let n=i.length-1;n>=0;n--){let o=i[n];$O(o,a)&&(e.removeAttribute(o.id,t),i.splice(n,1),r=!0)}i.push(a)}}return r})}};function dk(e,t){e.removeSelectionAttribute(`linkHref`);for(let n of t)e.removeSelectionAttribute(n)}function fk(e){return e.getDefinition(`$text`).allowAttributes.filter(e=>e.startsWith(`link`))}var pk=class extends H{constructor(e){super(e);let t=this.bindTemplate;this.set({href:void 0,withText:!0}),this.extendTemplate({attributes:{class:[`ck-link-toolbar__preview`],href:t.to(`href`),target:`_blank`,rel:`noopener noreferrer`},on:{click:t.to(e=>{this.href&&this.fire(`navigate`,this.href,()=>e.preventDefault())})}}),this.template.tag=`a`}},mk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;saveButtonView;displayedTextInputView;urlInputView;children;providersListChildren;_validators;_focusables=new pa;_focusCycler;constructor(e,t){super(e),this._validators=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.displayedTextInputView=this._createDisplayedTextInput(),this.urlInputView=this._createUrlInput(),this.providersListChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView()]),this._createFormChildren(),this.listenTo(this.providersListChildren,`add`,()=>{this.stopListening(this.providersListChildren,`add`),this.children.add(this._createProvidersListView())}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-link-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.urlInputView,this.saveButtonView,...this.providersListChildren,this.backButtonView,this.displayedTextInputView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Insert`),tooltip:!1,withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link`)});return t.children.add(this.backButtonView,0),t}_createProvidersListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-form__providers-list`]}}),e.items.bindTo(this.providersListChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createDisplayedTextInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Displayed text`),t.class=`ck-labeled-field-view_full-width`,t}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.fieldView.inputMode=`url`,t.label=e(`Link URL`),t.class=`ck-labeled-field-view_full-width`,t}_createFormChildren(){this.children.add(new MC(this.locale,{children:[this.displayedTextInputView],class:[`ck-form__row_large-top-padding`]})),this.children.add(new MC(this.locale,{children:[this.urlInputView,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`,`ck-form__row_large-bottom-padding`]}))}get url(){let{element:e}=this.urlInputView.fieldView;return e?e.value.trim():null}},hk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;listView;listChildren;emptyListInformation;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.listChildren=this.createCollection(),this.backButtonView=this._createBackButton(),this.listView=this._createListView(),this.emptyListInformation=this._createEmptyLinksListItemView(),this.children=this.createCollection([this._createHeaderView(),this.emptyListInformation]),this.set(`title`,``),this.set(`emptyListPlaceholder`,``),this.set(`hasItems`,!1),this.listenTo(this.listChildren,`change`,()=>{this.hasItems=this.listChildren.length>0}),this.on(`change:hasItems`,(e,t,n)=>{n?(this.children.remove(this.emptyListInformation),this.children.add(this.listView)):(this.children.remove(this.listView),this.children.add(this.emptyListInformation))}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-providers`],tabindex:`-1`},children:this.children})}render(){super.render(),[this.listView,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-providers__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=new By(this.locale);return e.bind(`label`).to(this,`title`),e.children.add(this.backButtonView,0),e}_createEmptyLinksListItemView(){let e=new P(this.locale);return e.setTemplate({tag:`p`,attributes:{class:[`ck`,`ck-link__empty-list-info`]},children:[{text:this.bindTemplate.to(`emptyListPlaceholder`)}]}),e}},gk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;children;listChildren;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.listChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView(),this._createListView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-properties`],tabindex:`-1`},children:this.children}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`back`),t()})}render(){super.render(),[...this.listChildren,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`back`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link properties`)});return t.children.add(this.backButtonView,0),t}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}},_k=class extends H{arrowView;constructor(e){super(e),this.set({withText:!0}),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{class:[`ck-link__button`]}})}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=gv,e}};const vk=`link-ui`;var yk=class extends F{toolbarView=null;formView=null;linkProviderItemsView=null;propertiesView=null;_balloon;_linksProviders=new Fi;static get requires(){return[BC,uk]}static get pluginName(){return`LinkUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;this.set(`selectedLinkableText`,void 0),e.editing.view.addObserver(kp),this._balloon=e.plugins.get(BC),this._registerComponents(),this._registerEditingOpeners(),this._enableBalloonActivators(),e.conversion.for(`editingDowncast`).markerToHighlight({model:vk,view:{classes:[`ck-fake-link-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:vk,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-link-selection`,`ck-fake-link-selection_collapsed`],n),n}}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Create link`),keystroke:BO},{label:t(`Move out of a link`),keystroke:[[`arrowleft`,`arrowleft`],[`arrowright`,`arrowright`]]}]})}destroy(){super.destroy(),this.propertiesView&&this.propertiesView.destroy(),this.formView&&this.formView.destroy(),this.toolbarView&&this.toolbarView.destroy(),this.linkProviderItemsView&&this.linkProviderItemsView.destroy()}registerLinksListProvider(e){let t=this._linksProviders.filter(t=>(t.order||0)<=(e.order||0)).length;this._linksProviders.add(e,t)}_createViews(){let e=this.editor.commands.get(`link`);this.toolbarView=this._createToolbarView(),this.formView=this._createFormView(),e.manualDecorators.length&&(this.propertiesView=this._createPropertiesView()),this._enableUserBalloonInteractions()}_createToolbarView(){let e=this.editor,t=new Ox(e.locale),n=e.commands.get(`link`);t.class=`ck-link-toolbar`;let r=e.config.get(`link.toolbar`);return n.manualDecorators.length||(r=r.filter(e=>e!==`linkProperties`)),t.fillFromConfig(r,e.ui.componentFactory),t.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),t.keystrokes.set(BO,(e,t)=>{this._addFormView(),t()}),e.ui.addToolbar(t,{isContextual:!0,beforeFocus:()=>{this._getSelectedLinkElement()&&!this._isToolbarVisible&&this._showUI(!0)},afterBlur:()=>{this._hideUI(!1)}}),t}_createFormView(){let e=this.editor,t=e.locale.t,n=e.commands.get(`link`),r=e.config.get(`link.defaultProtocol`),i=new(Xa(mk))(e.locale,xk(e));return i.displayedTextInputView.bind(`isEnabled`).to(this,`selectedLinkableText`,e=>e!==void 0),i.urlInputView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`label`).to(n,`value`,e=>t(e?`Update`:`Insert`)),this.listenTo(i,`submit`,()=>{if(i.isValid()){let t=i.urlInputView.fieldView.element.value,n=YO(t,r),a=i.displayedTextInputView.fieldView.element.value;e.execute(`link`,n,this._getDecoratorSwitchesState(),a===this.selectedLinkableText?void 0:a),this._closeFormView()}}),this.listenTo(i.urlInputView,`change:errorText`,()=>{e.ui.update()}),this.listenTo(i,`cancel`,()=>{this._closeFormView()}),i.keystrokes.set(`Esc`,(e,t)=>{this._closeFormView(),t()}),i.providersListChildren.bindTo(this._linksProviders).using(e=>this._createLinksListProviderButton(e)),i}_createLinkProviderListView(e){return e.getListItems().map(({href:e,label:t,icon:n})=>{let r=new H;return r.set({label:t,icon:n,tooltip:!1,withText:!0}),r.on(`execute`,()=>{this.formView.resetFormStatus(),this.formView.urlInputView.fieldView.value=e,this.editor.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r})}_createLinkProviderItemsView(e){let t=this.editor,n=t.locale.t,r=new hk(t.locale),{emptyListPlaceholder:i,label:a}=e;return r.emptyListPlaceholder=i||n(`No links available`),r.title=a,this.listenTo(r,`cancel`,()=>{t.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r}_createPropertiesView(){let e=this.editor,t=this.editor.commands.get(`link`),n=new(Xa(gk))(e.locale);return this.listenTo(n,`back`,()=>{e.editing.view.focus(),this._removePropertiesView()}),n.listChildren.bindTo(t.manualDecorators).using(n=>{let r=new mb(e.locale);return r.set({label:n.label,withText:!0}),r.bind(`isOn`).toMany([n,t],`value`,(e,t)=>t===void 0&&e===void 0?!!n.defaultValue:!!e),r.on(`execute`,()=>{e.execute(`link`,t.value,{...this._getDecoratorSwitchesState(),[n.id]:!r.isOn})}),r}),n}_getDecoratorSwitchesState(){let e=this.editor.commands.get(`link`);return Array.from(e.manualDecorators).reduce((t,n)=>{let r=e.value===void 0&&n.value===void 0?n.defaultValue:n.value;return{...t,[n.id]:!!r}},{})}_registerEditingOpeners(){this.editor.plugins.get(uk)._registerLinkOpener(e=>{let t=this._getLinkProviderLinkByHref(e);if(!t)return!1;let{item:n,provider:r}=t;return r.navigate?r.navigate(n):!1})}_registerComponents(){let e=this.editor;e.ui.componentFactory.add(`link`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:link`,()=>{let e=this._createButton(U);return e.set({role:`menuitemcheckbox`}),e}),e.ui.componentFactory.add(`linkPreview`,t=>{let n=new pk(t),r=e.config.get(`link.allowedProtocols`),i=e.commands.get(`link`),a=t.t;n.bind(`isEnabled`).to(i,`value`,e=>!!e),n.bind(`href`).to(i,`value`,e=>e&&UO(e,r));let o=e=>{if(e===``){n.label=a(`This link has no URL`),n.icon=void 0,n.tooltip=!1;return}if(!e){n.label=void 0,n.icon=void 0,n.tooltip=a(`Open link in new tab`);return}let t=this._getLinkProviderLinkByHref(e);if(t){let{label:e,tooltip:r,icon:i}=t.item;n.label=e,n.tooltip=r||!1,n.icon=i}else n.label=e,n.icon=void 0,n.tooltip=a(`Open link in new tab`)};return o(i.value),this.listenTo(i,`change:value`,(e,t,n)=>{o(n)}),this.listenTo(n,`navigate`,(e,t,n)=>{let r=this._getLinkProviderLinkByHref(t);if(!r)return;let{provider:i,item:a}=r,{navigate:o}=i;o&&o(a)&&(e.stop(),n())}),n}),e.ui.componentFactory.add(`unlink`,t=>{let n=e.commands.get(`unlink`),r=new H(t),i=t.t;return r.set({label:i(`Unlink`),icon:ky,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{e.execute(`unlink`),this._hideUI()}),r}),e.ui.componentFactory.add(`editLink`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Edit link`),icon:Rv,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{this._addFormView()}),r}),e.ui.componentFactory.add(`linkProperties`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Link properties`),icon:iy,tooltip:!0}),r.bind(`isEnabled`).to(n,`isEnabled`,n,`value`,n,`manualDecorators`,(e,t,n)=>e&&!!t&&n.length>0),this.listenTo(r,`execute`,()=>{this._addPropertiesView()}),r})}_createLinksListProviderButton(e){let t=this.editor.locale,n=new _k(t);return n.set({label:e.label}),this.listenTo(n,`execute`,()=>{this._showLinksProviderView(e)}),n}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`link`),i=new e(t.locale),a=n.t;return i.set({label:a(`Link`),icon:Z_,keystroke:BO,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{t.editing.view.scrollToTheSelection(),this._showUI(!0),this._getSelectedLinkElement()&&this._addFormView()}),i}_enableBalloonActivators(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,()=>{this._getSelectedLinkElement()&&this._showUI()}),e.keystrokes.set(BO,(t,n)=>{n(),e.commands.get(`link`).isEnabled&&(e.editing.view.scrollToTheSelection(),this._showUI(!0))})}_enableUserBalloonInteractions(){this.editor.keystrokes.set(`Tab`,(e,t)=>{this._isToolbarVisible&&!this.toolbarView.focusTracker.isFocused&&(this.toolbarView.focus(),t())},{priority:`high`}),this.editor.keystrokes.set(`Esc`,(e,t)=>{this._isUIVisible&&(this._hideUI(),t())}),Ya({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>{this._hideUI(!1)}})}_addToolbarView(){this.toolbarView||this._createViews(),!this._isToolbarInPanel&&this._balloon.add({view:this.toolbarView,position:this._getBalloonPositionData(),balloonClassName:`ck-toolbar-container`})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;let e=this.editor.commands.get(`link`);this.formView.disableCssTransitions(),this.formView.resetFormStatus(),this.formView.backButtonView.isVisible=e.isEnabled&&e.value!==void 0,this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.selectedLinkableText=this._getSelectedLinkableText(),this.formView.displayedTextInputView.fieldView.value=this.selectedLinkableText||``,this.formView.urlInputView.fieldView.value=e.value||``,this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions()}_addPropertiesView(){this.propertiesView||this._createViews(),!this._arePropertiesInPanel&&(this.propertiesView.disableCssTransitions(),this._balloon.add({view:this.propertiesView,position:this._getBalloonPositionData()}),this.propertiesView.enableCssTransitions(),this.propertiesView.focus())}_showLinksProviderView(e){this.linkProviderItemsView&&this._removeLinksProviderView(),this.linkProviderItemsView=this._createLinkProviderItemsView(e),this._addLinkProviderItemsView(e)}_addLinkProviderItemsView(e){this.linkProviderItemsView.listChildren.clear(),this.linkProviderItemsView.listChildren.addMany(this._createLinkProviderListView(e)),this._balloon.add({view:this.linkProviderItemsView,position:this._getBalloonPositionData()}),this.linkProviderItemsView.focus()}_closeFormView(){let e=this.editor.commands.get(`link`);this.selectedLinkableText=void 0,e.value===void 0?this._hideUI():this._removeFormView()}_removePropertiesView(){this._arePropertiesInPanel&&this._balloon.remove(this.propertiesView)}_removeLinksProviderView(){this._isLinksListInPanel&&this._balloon.remove(this.linkProviderItemsView)}_removeFormView(e=!0){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this.formView.displayedTextInputView.fieldView.reset(),this.formView.urlInputView.fieldView.reset(),this._balloon.remove(this.formView),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(e=!1){this.formView||this._createViews(),this._getSelectedLinkElement()?(this._isToolbarVisible?this._addFormView():this._addToolbarView(),e&&this._balloon.showStack(`main`)):(this._showFakeVisualSelection(),this._addToolbarView(),e&&this._balloon.showStack(`main`),this._addFormView()),this._startUpdatingUI()}_hideUI(e=!0){let t=this.editor;this._isUIInPanel&&(this.stopListening(t.ui,`update`),this.stopListening(this._balloon,`change:visibleView`),e&&t.editing.view.focus(),this._removeLinksProviderView(),this._removePropertiesView(),this._removeFormView(e),this._isToolbarInPanel&&this._balloon.remove(this.toolbarView),this._hideFakeVisualSelection())}_startUpdatingUI(){let e=this.editor,t=e.editing.view.document,n=this._getSelectedLinkElement(),r=a(),i=()=>{let e=this._getSelectedLinkElement(),t=a();n&&!e||!n&&t!==r?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=e,r=t};function a(){return t.selection.focus.getAncestors().reverse().find(e=>e.is(`element`))}this.listenTo(e.ui,`update`,i),this.listenTo(this._balloon,`change:visibleView`,i)}get _arePropertiesInPanel(){return!!this.propertiesView&&this._balloon.hasView(this.propertiesView)}get _isLinksListInPanel(){return!!this.linkProviderItemsView&&this._balloon.hasView(this.linkProviderItemsView)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _isToolbarInPanel(){return!!this.toolbarView&&this._balloon.hasView(this.toolbarView)}get _isPropertiesVisible(){return!!this.propertiesView&&this._balloon.visibleView===this.propertiesView}get _isFormVisible(){return!!this.formView&&this._balloon.visibleView==this.formView}get _isToolbarVisible(){return!!this.toolbarView&&this._balloon.visibleView===this.toolbarView}get _isUIInPanel(){return this._arePropertiesInPanel||this._isLinksListInPanel||this._isFormInPanel||this._isToolbarInPanel}get _isUIVisible(){return this._isPropertiesVisible||this._isLinksListInPanel||this._isFormVisible||this._isToolbarVisible}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;if(this.editor.model.markers.has(vk)){let t=this.editor.editing.mapper.markerNameToElements(vk);if(t){let n=Array.from(t),r=e.createRange(e.createPositionBefore(n[0]),e.createPositionAfter(n[n.length-1]));return{target:e.domConverter.viewRangeToDom(r)}}}return{target:()=>{let n=this._getSelectedLinkElement();return n?e.domConverter.mapViewToDom(n):e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}}_getSelectedLinkElement(){let e=this.editor.editing.view,t=e.document.selection,n=t.getSelectedElement();if(t.isCollapsed||n&&HE(n))return bk(t.getFirstPosition());{let n=t.getFirstRange().getTrimmed(),r=bk(n.start),i=bk(n.end);return!r||r!=i?null:e.createRangeIn(r).getTrimmed().isEqual(n)?r:null}}_getSelectedLinkableText(){let e=this.editor.model,t=this.editor.editing,n=this._getSelectedLinkElement();if(!n)return QO(e.document.selection.getFirstRange());let r=t.view.createRangeOn(n);return QO(t.mapper.toModelRange(r))}_getLinkProviderLinkByHref(e){if(!e)return null;for(let t of this._linksProviders){let n=t.getItem?t.getItem(e):t.getListItems().find(t=>t.href===e);if(n)return{provider:t,item:n}}return null}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(vk))t.updateMarker(vk,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(vk)&&e.change(e=>{e.removeMarker(vk)})}};function bk(e){return e.getAncestors().find(e=>VO(e))||null}function xk(e){let t=e.t,n=e.config.get(`link.allowCreatingEmptyLinks`);return[e=>{if(!n&&!e.url.length)return t(`Link URL must not be empty.`)}]}const Sk=RegExp(`(^|\\s)(((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(((?!www\\.)|(www\\.))(?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.)+(?:[a-z\\u00a1-\\uffff]{2,63}))|localhost)(?::\\d{2,5})?(?:[/?#]\\S*)?)|((www.|(\\S+@))((?![-_])(?:[-_a-z0-9\\u00a1-\\uffff]{1,63}\\.))+(?:[a-z\\u00a1-\\uffff]{2,63})))$`,`i`);var Ck=class extends F{static get requires(){return[hT,uk]}static get pluginName(){return`AutoLink`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.model.document.selection;e.on(`change:range`,()=>{this.isEnabled=!e.anchor.parent.is(`element`,`codeBlock`)}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling(),this._enablePasteLinking()}_expandLinkRange(e,t){return t.textNode&&t.textNode.hasAttribute(`linkHref`)?LT(t,`linkHref`,t.textNode.getAttribute(`linkHref`),e):null}_selectEntireLinks(e,t){let n=this.editor.model,r=n.document.selection,i=r.getFirstPosition(),a=r.getLastPosition(),o=t.getJoined(this._expandLinkRange(n,i)||t);o&&=o.getJoined(this._expandLinkRange(n,a)||t),o&&(o.start.isBefore(i)||o.end.isAfter(a))&&e.setSelection(o)}_enablePasteLinking(){let e=this.editor,t=e.model,n=t.document.selection,r=e.plugins.get(`ClipboardPipeline`),i=e.commands.get(`link`);r.on(`inputTransformation`,(e,r)=>{if(!this.isEnabled||!i.isEnabled||n.isCollapsed||r.method!==`paste`||n.rangeCount>1)return;let a=n.getFirstRange(),o=r.dataTransfer.getData(`text/plain`);if(!o)return;let s=o.match(Sk);s&&s[2]===o&&(t.change(e=>{this._selectEntireLinks(e,a),i.execute(o)}),e.stop())},{priority:`high`})}_enableTypingHandling(){let e=this.editor,t=new yT(e.model,e=>{let t=e;if(!wk(t))return;t=t.slice(0,-1),`!.:,;?`.includes(t[t.length-1])&&(t=t.slice(0,-1));let n=Tk(t);if(n)return{url:n,removedTrailingCharacters:e.length-t.length}});t.on(`matched:data`,(t,n)=>{let{batch:r,range:i,url:a,removedTrailingCharacters:o}=n;if(!r.isTyping)return;let s=i.end.getShiftedBy(-o),c=s.getShiftedBy(-a.length),l=e.model.createRange(c,s);this._applyAutoLink(a,l)}),t.bind(`isEnabled`).to(this)}_enableEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`enter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n;n=e.parent.previousSibling?.is(`element`)?t.createRangeIn(e.parent.previousSibling):t.createRange(t.createPositionAt(e.parent,0),e),this._checkAndApplyAutoLinkOnRange(n)})}_enableShiftEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`shiftEnter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n=t.createRange(t.createPositionAt(e.parent,0),e.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(n)})}_checkAndApplyAutoLinkOnRange(e){let t=this.editor.model,{text:n,range:r}=_T(e,t),i=Tk(n);if(i){let e=t.createRange(r.end.getShiftedBy(-i.length),r.end);this._applyAutoLink(i,e)}}_applyAutoLink(e,t){let n=this.editor.model,r=YO(e,this.editor.config.get(`link.defaultProtocol`));!this.isEnabled||!Ek(t,n)||!XO(r)||Dk(t)||this._persistAutoLink(r,t)}_persistAutoLink(e,t){let n=this.editor.model,r=this.editor.plugins.get(`Delete`);n.enqueueChange(i=>{i.setAttribute(`linkHref`,e,t),n.enqueueChange(()=>{r.requestUndoOnBackspace()})})}};function wk(e){return e.length>4&&e[e.length-1]===` `&&e[e.length-2]!==` `}function Tk(e){let t=Sk.exec(e);return t?t[2]:null}function Ek(e,t){return t.schema.checkAttributeInSelection(t.createSelection(e),`linkHref`)}function Dk(e){let t=e.start.nodeAfter;return!!t&&t.hasAttribute(`linkHref`)}var Ok=class extends F{static get requires(){return[uk,yk,Ck]}static get pluginName(){return`Link`}static get isOfficialPlugin(){return!0}},kk=class extends I{_stack=[];_createdBatches=new WeakSet;constructor(e){super(e),this.refresh(),this._isEnabledBasedOnSelection=!1,this.listenTo(e.data,`set`,(e,t)=>{t[1]={...t[1]};let n=t[1];n.batchType||={isUndoable:!1}},{priority:`high`}),this.listenTo(e.data,`set`,(e,t)=>{t[1].batchType.isUndoable||this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}get createdBatches(){return this._createdBatches}addBatch(e){let t=this.editor.model.document.selection,n={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:n}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(e,t,n){let r=this.editor.model,i=r.document,a=[],o=e.map(e=>e.getTransformedByOperations(n)),s=o.flat();for(let e of o){let t=e.filter(e=>e.root!=i.graveyard).filter(e=>!jk(e,s));t.length&&(Ak(t),a.push(t[0]))}a.length&&r.change(e=>{e.setSelection(a,{backward:t})})}_undo(e,t){let n=this.editor.model,r=n.document;this._createdBatches.add(t);let i=e.operations.slice().filter(e=>e.isDocumentOperation);i.reverse();for(let e of i){let i=e.baseVersion+1,a=Array.from(r.history.getOperations(i)),o=nf([e.getReversed()],a,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(let i of o){let a=i.affectedSelectable;a&&!n.canEditAt(a)&&(i=new Kd(i.baseVersion)),t.addOperation(i),n.applyOperation(i),r.history.setOperationAsUndone(e,i)}}}};function Ak(e){e.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let t=1;tt!==e&&t.containsRange(e,!0))}var Mk=class extends kk{execute(e=null){let t=e?this._stack.findIndex(t=>t.batch==e):this._stack.length-1,n=this._stack.splice(t,1)[0],r=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(r,()=>{this._undo(n.batch,r);let e=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,e)}),this.fire(`revert`,n.batch,r),this.refresh()}},Nk=class extends kk{execute(){let e=this._stack.pop(),t=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(t,()=>{let n=e.batch.operations[e.batch.operations.length-1].baseVersion+1,r=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,r),this._undo(e.batch,t)}),this.fire(`revert`,e.batch,t),this.refresh()}},Pk=class extends F{_undoCommand;_redoCommand;_batchRegistry=new WeakSet;static get pluginName(){return`UndoEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t;this._undoCommand=new Mk(e),this._redoCommand=new Nk(e),e.commands.add(`undo`,this._undoCommand),e.commands.add(`redo`,this._redoCommand),this.listenTo(e.model,`applyOperation`,(e,t)=>{let n=t[0];if(!n.isDocumentOperation)return;let r=n.batch,i=this._redoCommand.createdBatches.has(r),a=this._undoCommand.createdBatches.has(r);this._batchRegistry.has(r)||(this._batchRegistry.add(r),r.isUndoable&&(i?this._undoCommand.addBatch(r):a||(this._undoCommand.addBatch(r),this._redoCommand.clearStack())))},{priority:`highest`}),this.listenTo(this._undoCommand,`revert`,(e,t,n)=>{this._redoCommand.addBatch(n)}),e.keystrokes.set(`CTRL+Z`,`undo`),e.keystrokes.set(`CTRL+Y`,`redo`),e.keystrokes.set(`CTRL+SHIFT+Z`,`redo`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Undo`),keystroke:`CTRL+Z`},{label:t(`Redo`),keystroke:[[`CTRL+Y`],[`CTRL+SHIFT+Z`]]}]})}},Fk=class extends F{static get pluginName(){return`UndoUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?Oy:Jv,i=t.uiLanguageDirection==`ltr`?Jv:Oy;this._addButtonsToFactory(`undo`,n(`Undo`),`CTRL+Z`,r),this._addButtonsToFactory(`redo`,n(`Redo`),`CTRL+Y`,i)}_addButtonsToFactory(e,t,n,r){let i=this.editor;i.ui.componentFactory.add(e,()=>{let i=this._createButton(H,e,t,n,r);return i.set({tooltip:!0}),i}),i.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n,r))}_createButton(e,t,n,r,i){let a=this.editor,o=a.locale,s=a.commands.get(t),c=new e(o);return c.set({label:n,icon:i,keystroke:r}),c.bind(`isEnabled`).to(s,`isEnabled`),this.listenTo(c,`execute`,()=>{a.execute(t),a.editing.view.focus()}),c}},Ik=class extends F{static get requires(){return[Pk,Fk]}static get pluginName(){return`Undo`}static get isOfficialPlugin(){return!0}};function Lk(e){return e.createContainerElement(`span`,{class:`image-inline`},e.createEmptyElement(`img`))}function Rk(e){return e.createContainerElement(`figure`,{class:`image`},[e.createEmptyElement(`img`),e.createSlot(`children`)])}function zk(e,t){let n=e.plugins.get(`ImageUtils`),r=e.plugins.has(`ImageInlineEditing`)&&e.plugins.has(`ImageBlockEditing`);return e=>n.isInlineImageView(e)?r?Bk(e,n)===t?i(e):null:i(e):null;function i(e){let t={name:!0};return e.hasAttribute(`src`)&&(t.attributes=[`src`]),t}}function Bk(e,t){return e.getStyle(`display`)==`block`||e.findAncestor(t.isBlockImageView)?`imageBlock`:`imageInline`}function Vk(e,t,n){return!!e.findAllowedParent(t,n)||ku(t,n,e)}function Hk(e,t){let n=j(t.getSelectedBlocks());return!n||e.isObject(n)||n.isEmpty&&n.name!=`listItem`?`imageBlock`:`imageInline`}function Uk(e){return e&&e.endsWith(`px`)?parseInt(e):null}function Wk(e){let t=Uk(e.getStyle(`width`)),n=Uk(e.getStyle(`height`));return!!(t&&n)}const Gk=/^(image|image-inline)$/;var Kk=class extends F{_domEmitter=new(br());static get pluginName(){return`ImageUtils`}static get isOfficialPlugin(){return!0}isImage(e){return this.isInlineImage(e)||this.isBlockImage(e)}isInlineImageView(e){return!!e&&e.is(`element`,`img`)}isBlockImageView(e){return!!e&&e.is(`element`,`figure`)&&e.hasClass(`image`)}insertImage(e={},t=null,n=null,r={}){let i=this.editor,a=i.model,o=a.document.selection,s=Zk(i,t||o,n);e={...Object.fromEntries(o.getAttributes()),...e};for(let t in e)a.schema.checkAttribute(s,t)||delete e[t];return a.change(n=>{let{setImageSizes:i=!0}=r,o=n.createElement(s,e);return a.insertObject(o,t,null,{setSelection:`on`,findOptimalPosition:!t&&s!=`imageInline`?`auto`:void 0}),o.parent?(i&&this.setImageNaturalSizeAttributes(o),o):null})}setImageNaturalSizeAttributes(e){let t=e.getAttribute(`src`);t&&(e.getAttribute(`width`)||e.getAttribute(`height`)||this.editor.model.change(n=>{let r=new u.window.Image;this._domEmitter.listenTo(r,`load`,()=>{!e.getAttribute(`width`)&&!e.getAttribute(`height`)&&this.editor.model.enqueueChange(n.batch,t=>{t.setAttribute(`width`,r.naturalWidth,e),t.setAttribute(`height`,r.naturalHeight,e)}),this._domEmitter.stopListening(r,`load`)}),r.src=t}))}getClosestSelectedImageWidget(e){let t=e.getFirstPosition();if(!t)return null;let n=e.getSelectedElement();if(n&&this.isImageWidget(n))return n;let r=t.parent;for(;r;){if(r.is(`element`)&&this.isImageWidget(r))return r;r=r.parent}return null}getClosestSelectedImageElement(e){let t=e.getSelectedElement();return this.isImage(t)?t:e.getFirstPosition().findAncestor(`imageBlock`)}getImageWidgetFromImageView(e){return e.findAncestor({classes:Gk})}isImageAllowed(){let e=this.editor.model.document.selection;return qk(this.editor,e)&&Jk(e)}toImageWidget(e,t,n){return t.setCustomProperty(`image`,!0,e),UE(e,t,{label:()=>{let t=this.findViewImgElement(e).getAttribute(`alt`);return t?`${t} ${n}`:n}})}isImageWidget(e){return!!e.getCustomProperty(`image`)&&HE(e)}isBlockImage(e){return!!e&&e.is(`element`,`imageBlock`)}isInlineImage(e){return!!e&&e.is(`element`,`imageInline`)}findViewImgElement(e){if(this.isInlineImageView(e))return e;let t=this.editor.editing.view;for(let{item:n}of t.createRangeIn(e))if(this.isInlineImageView(n))return n}destroy(){return this._domEmitter.stopListening(),super.destroy()}};function qk(e,t){return Zk(e,t,null)==`imageBlock`?Xk(e.model,t):e.model.schema.checkChild(t.focus,`imageInline`)}function Jk(e){return[...e.focus.getAncestors()].every(e=>!e.is(`element`,`imageBlock`))}function Yk(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function Xk(e,t){let n=Yk(t.is(`position`)?e.createSelection(t):t,e);return e.schema.checkChild(n,`imageBlock`)}function Zk(e,t,n){let r=e.model.schema,i=e.config.get(`image.insert.type`);return e.plugins.has(`ImageBlockEditing`)?e.plugins.has(`ImageInlineEditing`)?n||(!Xk(e.model,t)||i===`inline`?`imageInline`:i===`auto`?t.is(`selection`)?Hk(r,t):r.checkChild(t,`imageInline`)?`imageInline`:`imageBlock`:`imageBlock`):`imageBlock`:`imageInline`}const Qk=RegExp(`^(http(s)?:\\/\\/)?[\\w-]+\\.[\\w.~:/[\\]@!$&'()*+,;=%-]+\\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)(\\?[\\w.~:/[\\]@!$&'()*+,;=%-]*)?(#[\\w.~:/[\\]@!$&'()*+,;=%-]*)?$`);var $k=class extends F{static get requires(){return[PO,Kk,Ik,hT]}static get pluginName(){return`AutoImage`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedImageBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedImageBetweenPositions(e,t){let n=this.editor,r=new xl(e,t),i=r.getWalker({ignoreElementEnd:!0}),a=Object.fromEntries(n.model.document.selection.getAttributes()),o=this.editor.plugins.get(`ImageUtils`),s=``;for(let e of i)e.item.is(`$textProxy`)&&(s+=e.item.data);if(s=s.trim(),!s.match(Qk)){r.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=setTimeout(()=>{if(!n.commands.get(`insertImage`).isEnabled){r.detach();return}n.model.change(e=>{this._timeoutId=null,e.remove(r),r.detach();let t;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert.toPosition()),o.insertImage({...a,src:s},t),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(`Delete`).requestUndoOnBackspace()},100)}},eA=class extends I{refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled&&e.hasAttribute(`alt`)?this.value=e.getAttribute(`alt`):this.value=!1}execute(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=t.model,i=n.getClosestSelectedImageElement(r.document.selection);r.change(t=>{t.setAttribute(`alt`,e.newValue,i)})}},tA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageTextAlternativeEditing`}static get isOfficialPlugin(){return!0}init(){this.editor.commands.add(`imageTextAlternative`,new eA(this.editor))}},nA=class extends P{focusTracker;keystrokes;labeledInput;backButtonView;saveButtonView;children;_focusables;_focusCycler;constructor(e){super(e),this.focusTracker=new M,this.keystrokes=new N,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-text-alternative-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Text Alternative`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Text alternative`),t.class=`ck-labeled-field-view_full-width`,t}};function rA(e){let t=e.plugins.get(`ContextualBalloon`);if(e.plugins.get(`ImageUtils`).getClosestSelectedImageWidget(e.editing.view.document.selection)){let n=iA(e);t.updatePosition(n)}}function iA(e){let t=e.editing.view,n=ab.defaultPositions,r=e.plugins.get(`ImageUtils`);return{target:t.domConverter.mapViewToDom(r.getClosestSelectedImageWidget(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}var aA=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageTextAlternativeUI`}static get isOfficialPlugin(){return!0}init(){this._createButton()}destroy(){super.destroy(),this._form&&this._form.destroy()}_createButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`imageTextAlternative`,n=>{let r=e.commands.get(`imageTextAlternative`),i=new H(n);return i.set({label:t(`Change image text alternative`),icon:Cy,tooltip:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{this._showForm()}),i})}_createForm(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ImageUtils`);this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(nA))(e.locale),this._form.render(),this.listenTo(this._form,`submit`,()=>{e.execute(`imageTextAlternative`,{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),this.listenTo(e.ui,`update`,()=>{n.getClosestSelectedImageWidget(t.selection)?this._isVisible&&rA(e):this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;this._form||this._createForm();let e=this.editor,t=e.commands.get(`imageTextAlternative`),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(e)}),n.fieldView.value=n.fieldView.element.value=t.value||``,this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}},oA=class extends F{static get requires(){return[tA,aA]}static get pluginName(){return`ImageTextAlternative`}static get isOfficialPlugin(){return!0}};function sA(e){let t=(t,n,r)=>{if(!r.consumable.test(n.viewItem,{name:!0,classes:`image`}))return;let i=e.findViewImgElement(n.viewItem);if(!i||!r.consumable.test(i,{name:!0})||!Vk(r.schema,n.modelCursor,`imageBlock`))return;r.consumable.consume(n.viewItem,{name:!0,classes:`image`});let a=r.convertItem(i,n.modelCursor);if(!a.modelRange){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}let o=j(a.modelRange.getItems());if(!o){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}r.convertChildren(n.viewItem,o),r.updateConversionResult(o,n)};return e=>{e.on(`element:figure`,t)}}function cA(e,t){let n=(n,r,i)=>{let a=Bk(r.viewItem,t),o=r.viewItem.hasAttribute(`src`)?{src:r.viewItem.getAttribute(`src`)}:void 0,s={name:!0,attributes:Object.keys(o||{})};if(!i.consumable.test(r.viewItem,s))return;a!=e&&!Vk(i.schema,r.modelCursor,a)&&(a=e);let c=i.writer.createElement(a,o);i.safeInsert(c,r.modelCursor)&&(i.consumable.consume(r.viewItem,s),i.convertChildren(r.viewItem,c),i.updateConversionResult(c,r))};return e=>{e.on(`element:img`,n)}}function lA(e){let t=[`srcset`,`media`,`type`,`sizes`],n=(n,r,i)=>{let a=r.viewItem;if(!i.consumable.test(a,{name:!0}))return;let o=new Map;for(let e of a.getChildren())if(e.is(`element`,`source`)){let n={};for(let r of t)e.hasAttribute(r)&&i.consumable.test(e,{attributes:r})&&(n[r]=e.getAttribute(r));Object.keys(n).length&&o.set(e,n)}let s=e.findViewImgElement(a);if(!s)return;let c=r.modelCursor.parent;if(!c.is(`element`,`imageBlock`)){let e=i.convertItem(s,r.modelCursor);if(r.modelRange=e.modelRange,r.modelCursor=e.modelCursor,!e.modelRange||(c=j(e.modelRange.getItems()),!c))return}i.consumable.consume(a,{name:!0});for(let[e,t]of o)i.consumable.consume(e,{attributes:Object.keys(t)});o.size&&i.writer.setAttribute(`sources`,Array.from(o.values()),c),i.convertChildren(a,c)};return e=>{e.on(`element:picture`,n)}}function uA(e,t){let n=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);n.attributeNewValue===null?(i.removeAttribute(`srcset`,o),i.removeAttribute(`sizes`,o)):n.attributeNewValue&&(i.setAttribute(`srcset`,n.attributeNewValue,o),i.setAttribute(`sizes`,`100vw`,o))};return e=>{e.on(`attribute:srcset:${t}`,n)}}function dA(e){let t=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a),s=n.attributeNewValue;if(s&&s.length){let e=[],t=o.parent;for(;t&&t.is(`attributeElement`);){let n=t.parent;i.unwrap(i.createRangeOn(o),t),e.unshift(t),t=n}let n=o.parent.is(`element`,`picture`),r=n?o.parent:i.createContainerElement(`picture`,null);n||i.insert(i.createPositionBefore(o),r),i.remove(i.createRangeIn(r)),i.insert(i.createPositionAt(r,`end`),s.map(e=>i.createEmptyElement(`source`,e))),i.move(i.createRangeOn(o),i.createPositionAt(r,`end`));for(let t of e)i.wrap(i.createRangeOn(r),t)}else if(o.parent.is(`element`,`picture`)){let e=o.parent;i.move(i.createRangeOn(o),i.createPositionBefore(e)),i.remove(e)}};return e=>{e.on(`attribute:sources:imageBlock`,t),e.on(`attribute:sources:imageInline`,t)}}function fA(e,t,n){let r=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);i.setAttribute(n.attributeKey,n.attributeNewValue||``,o)};return e=>{e.on(`attribute:${n}:${t}`,r)}}var pA=class extends kc{observe(e){this.listenTo(e,`load`,(e,t)=>{let n=t.target;this.checkShouldIgnoreEventFromTarget(n)||n.tagName==`IMG`&&this._fireEvents(t)},{useCapture:!0})}stopObserving(e){this.stopListening(e)}_fireEvents(e){this.isEnabled&&(this.document.fire(`layoutChanged`),this.document.fire(`imageLoaded`,e))}},mA=class extends I{constructor(e){super(e);let t=e.config.get(`image.insert.type`);e.plugins.has(`ImageBlockEditing`)||t===`block`&&T(`image-block-plugin-required`),e.plugins.has(`ImageInlineEditing`)||t===`inline`&&T(`image-inline-plugin-required`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`);this.isEnabled=e.isImageAllowed()}execute(e){let t=A(e.source),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((t,a)=>{let o=n.getSelectedElement();if(typeof t==`string`&&(t={src:t}),a&&o&&r.isImage(o)){let n=this.editor.model.createPositionAfter(o);r.insertImage({...t,...i},n,e.imageType)}else e.breakBlock?r.insertImage({...t,...i},n.getFirstPosition(),e.imageType):r.insertImage({...t,...i},null,e.imageType)})}},hA=class extends I{constructor(e){super(e),this.decorate(`cleanupImage`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`),t=this.editor.model.document.selection.getSelectedElement();this.isEnabled=e.isImage(t),this.value=this.isEnabled?t.getAttribute(`src`):null}execute(e){let t=this.editor.model.document.selection.getSelectedElement(),n=this.editor.plugins.get(`ImageUtils`);this.editor.model.change(r=>{r.setAttribute(`src`,e.source,t),this.cleanupImage(r,t),n.setImageNaturalSizeAttributes(t)})}cleanupImage(e,t){e.removeAttribute(`srcset`,t),e.removeAttribute(`sizes`,t),e.removeAttribute(`sources`,t),e.removeAttribute(`width`,t),e.removeAttribute(`height`,t),e.removeAttribute(`alt`,t)}},gA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.conversion;e.editing.view.addObserver(pA),t.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`alt`},model:`alt`}).attributeToAttribute({view:{name:`img`,key:`srcset`},model:`srcset`});let n=new mA(e),r=new hA(e);e.commands.add(`insertImage`,n),e.commands.add(`replaceImageSource`,r),e.commands.add(`imageInsert`,n)}},_A=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageSizeAttributes`}static get isOfficialPlugin(){return!0}afterInit(){this._registerSchema(),this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`)}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&e.extend(`imageBlock`,{allowAttributes:[`width`,`height`]}),this.editor.plugins.has(`ImageInlineEditing`)&&e.extend(`imageInline`,{allowAttributes:[`width`,`height`]})}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=e===`imageBlock`?`figure`:`img`;t.conversion.for(`upcast`).attributeToAttribute({view:{name:r,styles:{width:/.+/}},model:{key:`width`,value:e=>Wk(e)?Uk(e.getStyle(`width`)):null}}).attributeToAttribute({view:{name:r,key:`width`},model:`width`}).attributeToAttribute({view:{name:r,styles:{height:/.+/}},model:{key:`height`,value:e=>Wk(e)?Uk(e.getStyle(`height`)):null}}).attributeToAttribute({view:{name:r,key:`height`},model:`height`}),t.conversion.for(`editingDowncast`).add(e=>{i(e,`width`,`width`,!0,!0),i(e,`height`,`height`,!0,!0)}),t.conversion.for(`dataDowncast`).add(e=>{i(e,`width`,`width`,!1),i(e,`height`,`height`,!1)}),t.conversion.for(`upcast`).add(e=>{e.on(`element:img`,(e,t,n)=>{let r=t.viewItem.getAttribute(`width`),i=t.viewItem.getAttribute(`height`);r&&i&&n.consumable.consume(t.viewItem,{styles:[`aspect-ratio`]})})});function i(t,r,i,a,o=!1){t.on(`attribute:${r}:${e}`,(t,r,s)=>{if(!s.consumable.consume(r.item,t.name))return;let c=s.writer,l=s.mapper.toViewElement(r.item),u=n.findViewImgElement(l);r.attributeNewValue===null?c.removeAttribute(i,u):c.setAttribute(i,r.attributeNewValue,u);let d=r.item.getAttribute(`width`),f=r.item.getAttribute(`height`),p=d&&f;if(p&&o&&c.setAttribute(`loading`,`lazy`,u),r.item.hasAttribute(`sources`))return;let m=r.item.hasAttribute(`resizedWidth`);e===`imageInline`&&!m&&!a||p&&c.setStyle(`aspect-ratio`,`${d}/${f}`,u)})}}},vA=class extends I{_modelElementName;constructor(e,t){super(e),this._modelElementName=t}refresh(){let e=this.editor,t=e.model,n=t.schema,r=e.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(t.document.selection);if(!(this._modelElementName===`imageBlock`?r.isInlineImage(i):r.isBlockImage(i))){this.isEnabled=!1;return}let a=t.createPositionBefore(i);this.isEnabled=Vk(n,a,this._modelElementName)}execute(e={}){let t=this.editor,n=this.editor.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection),a=Object.fromEntries(i.getAttributes());return!a.src&&!a.uploadId?null:n.change(t=>{let{setImageSizes:o=!0}=e,s=Array.from(n.markers).filter(e=>e.getRange().containsItem(i)),c=r.insertImage(a,n.createSelection(i,`on`),this._modelElementName,{setImageSizes:o});if(!c)return null;let l=t.createRangeOn(c);for(let e of s){let n=e.getRange(),r=n.root.rootName==`$graveyard`?l:n.getJoined(l,!0);t.updateMarker(e,{range:r})}return{oldElement:i,newElement:c}})}},yA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImagePlaceholder`}static get isOfficialPlugin(){return!0}afterInit(){this._setupSchema(),this._setupConversion(),this._setupLoadListener()}_setupSchema(){let e=this.editor.model.schema;e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`placeholder`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`placeholder`]})}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`editingDowncast`).add(e=>{e.on(`attribute:placeholder`,(e,t,r)=>{if(!r.consumable.test(t.item,e.name)||!t.item.is(`element`,`imageBlock`)&&!t.item.is(`element`,`imageInline`))return;r.consumable.consume(t.item,e.name);let i=r.writer,a=r.mapper.toViewElement(t.item),o=n.findViewImgElement(a);t.attributeNewValue?(i.addClass(`image_placeholder`,o),i.setStyle(`background-image`,`url(${t.attributeNewValue})`,o),i.setCustomProperty(`editingPipeline:doNotReuseOnce`,!0,o)):(i.removeClass(`image_placeholder`,o),i.removeStyle(`background-image`,o))})})}_setupLoadListener(){let e=this.editor,t=e.model,n=e.editing,r=n.view,i=e.plugins.get(`ImageUtils`);r.addObserver(pA),this.listenTo(r.document,`imageLoaded`,(e,a)=>{let o=r.domConverter.mapDomToView(a.target);if(!o)return;let s=i.getImageWidgetFromImageView(o);if(!s)return;let c=n.mapper.toModelElement(s);!c||!c.hasAttribute(`placeholder`)||t.enqueueChange({isUndoable:!1},e=>{e.removeAttribute(`placeholder`,c)})})}},bA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageBlockEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageBlock`,{inheritAllFrom:`$blockObject`,allowAttributes:[`alt`,`src`,`srcset`]}),this._setupConversion(),e.plugins.has(`ImageInlineEditing`)&&(e.commands.add(`imageTypeBlock`,new vA(this.editor,`imageBlock`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:t})=>Rk(t)}),n.for(`editingDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:n})=>r.toImageWidget(Rk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageBlock`,`src`)).add(fA(r,`imageBlock`,`alt`)).add(uA(r,`imageBlock`)),n.for(`upcast`).add(cA(`imageBlock`,r)).add(sA(r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isInlineImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(l&&Vk(t.schema,l,`imageBlock`)&&Hk(t.schema,c)===`imageBlock`){let e=new Np(n.document),t=o.map(t=>e.createElement(`figure`,{class:`image`},t));a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageBlock`)&&r.setImageNaturalSizeAttributes(e)})})}},xA=class extends P{focusTracker;keystrokes;_focusables;_focusCycler;children;constructor(e,t=[]){super(e),this.focusTracker=new M,this.keystrokes=new N,this._focusables=new pa,this.children=this.createCollection(),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}});for(let e of t)this.children.add(e),this._focusables.add(e),e instanceof xb&&this._focusables.addMany(e.children);this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-form`],tabindex:-1},children:this.children})}render(){super.render(),Qa({view:this});for(let e of this._focusables)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}},SA=class extends F{static get pluginName(){return`ImageInsertUI`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}dropdownView;_integrations=new Map;constructor(e){super(e),e.config.define(`image.insert.integrations`,[`upload`,`assetManager`,`url`])}init(){let e=this.editor,t=e.model.document.selection,n=e.plugins.get(`ImageUtils`);this.set(`isImageSelected`,!1),this.listenTo(e.model.document,`change`,()=>{this.isImageSelected=n.isImage(t.getSelectedElement())});let r=e=>this._createToolbarComponent(e);e.ui.componentFactory.add(`insertImage`,r),e.ui.componentFactory.add(`imageInsert`,r),e.ui.componentFactory.add(`menuBar:insertImage`,e=>this._createMenuBarComponent(e))}registerIntegration({name:e,observable:t,buttonViewCreator:n,formViewCreator:r,menuBarButtonViewCreator:i,requiresForm:a=!1,override:o=!1}){this._integrations.has(e)&&!o&&T(`image-insert-integration-exists`,{name:e}),this._integrations.set(e,{observable:t,buttonViewCreator:n,menuBarButtonViewCreator:i,formViewCreator:r,requiresForm:a})}_createToolbarComponent(e){let t=this.editor,n=e.t,r=this._prepareIntegrations();if(!r.length)return null;let i,a=r[0];if(r.length==1){if(!a.requiresForm)return a.buttonViewCreator(!0);i=a.buttonViewCreator(!0)}else i=new Mx(e,a.buttonViewCreator(!1)),i.tooltip=!0,i.bind(`label`).to(this,`isImageSelected`,e=>n(e?`Replace image`:`Insert image`));let o=this.dropdownView=Nx(e,i),s=r.map(({observable:e})=>typeof e==`function`?e():e);return o.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),o.once(`change:isOpen`,()=>{let e=r.flatMap(({formViewCreator:e})=>e(r.length==1)),n=new xA(t.locale,e);o.panelView.children.add(n)}),o}_createMenuBarComponent(e){let t=e.t,n=this._prepareIntegrations();if(!n.length)return null;let r=n.flatMap(({menuBarButtonViewCreator:e})=>e(n.length==1)),i=new uw(e),a=new dw(e);i.panelView.children.add(a),i.buttonView.set({icon:B_,label:t(`Image`)});for(let t of r){let n=new rC(e,i);n.children.add(t),a.items.add(n),t.delegate(`execute`).to(i)}return i}_prepareIntegrations(){let e=this.editor.config.get(`image.insert.integrations`),t=[];if(!e.length)return T(`image-insert-integrations-not-specified`),t;for(let n of e){if(!this._integrations.has(n)){[`upload`,`assetManager`,`url`].includes(n)||T(`image-insert-unknown-integration`,{item:n});continue}t.push(this._integrations.get(n))}return t.length||T(`image-insert-integrations-not-registered`),t}},CA=class extends F{static get requires(){return[bA,xD,oA,SA]}static get pluginName(){return`ImageBlock`}static get isOfficialPlugin(){return!0}},wA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageInlineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageInline`,{inheritAllFrom:`$inlineObject`,allowAttributes:[`alt`,`src`,`srcset`],disallowIn:[`caption`]}),this._setupConversion(),e.plugins.has(`ImageBlockEditing`)&&(e.commands.add(`imageTypeInline`,new vA(this.editor,`imageInline`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToElement({model:`imageInline`,view:(e,{writer:t})=>t.createEmptyElement(`img`)}),n.for(`editingDowncast`).elementToStructure({model:`imageInline`,view:(e,{writer:n})=>r.toImageWidget(Lk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageInline`,`src`)).add(fA(r,`imageInline`,`alt`)).add(uA(r,`imageInline`)),n.for(`upcast`).add(cA(`imageInline`,r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isBlockImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(!(l&&Vk(t.schema,l,`imageBlock`))||Hk(t.schema,c)===`imageInline`){let e=new Np(n.document),t=o.map(t=>t.childCount===1?(Array.from(t.getAttributes()).forEach(n=>e.setAttribute(...n,r.findViewImgElement(t))),t.getChild(0)):t);a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageInline`)&&r.setImageNaturalSizeAttributes(e)})})}},TA=class extends F{static get requires(){return[wA,xD,oA,SA]}static get pluginName(){return`ImageInline`}static get isOfficialPlugin(){return!0}},EA=class extends F{static get requires(){return[CA,TA]}static get pluginName(){return`Image`}static get isOfficialPlugin(){return!0}},DA=class extends F{static get pluginName(){return`ImageCaptionUtils`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}getCaptionFromImageModelElement(e){for(let t of e.getChildren())if(t&&t.is(`element`,`caption`))return t;return null}getCaptionFromModelSelection(e){let t=this.editor.plugins.get(`ImageUtils`),n=e.getFirstPosition().findAncestor(`caption`);return n&&t.isBlockImage(n.parent)?n:null}matchImageCaptionViewElement(e){let t=this.editor.plugins.get(`ImageUtils`);return e.name==`figcaption`&&t.isBlockImageView(e.parent)?{name:!0}:null}},OA=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageCaptionUtils`),n=e.plugins.get(`ImageUtils`);if(!e.plugins.has(bA)){this.isEnabled=!1,this.value=!1;return}let r=e.model.document.selection,i=r.getSelectedElement();if(!i){let e=t.getCaptionFromModelSelection(r);this.isEnabled=!!e,this.value=!!e;return}if(this.isEnabled=n.isImage(i),this.isEnabled&&n.isInlineImage(i)){let t=e.model.createPositionBefore(i);this.isEnabled=Vk(e.model.schema,t,`imageBlock`)}this.isEnabled?this.value=!!t.getCaptionFromImageModelElement(i):this.value=!1}execute(e={}){let{focusCaptionOnShow:t}=e;this.editor.model.change(e=>{this.value?this._hideImageCaption(e):this._showImageCaption(e,t)})}_showImageCaption(e,t){let n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageCaptionEditing`),i=this.editor.plugins.get(`ImageUtils`),a=n.getSelectedElement(),o=r._getSavedCaption(a);i.isInlineImage(a)&&(this.editor.execute(`imageTypeBlock`),a=n.getSelectedElement());let s=o||e.createElement(`caption`);e.append(s,a),t&&e.setSelection(s,`in`)}_hideImageCaption(e){let t=this.editor,n=t.model.document.selection,r=t.plugins.get(`ImageCaptionEditing`),i=t.plugins.get(`ImageCaptionUtils`),a=n.getSelectedElement(),o;a?o=i.getCaptionFromImageModelElement(a):(o=i.getCaptionFromModelSelection(n),a=o.parent),r._saveCaption(a,o),e.setSelection(a,`on`),e.remove(o)}},kA=class extends F{static get requires(){return[Kk,DA]}static get pluginName(){return`ImageCaptionEditing`}static get isOfficialPlugin(){return!0}_savedCaptionsMap;constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){let e=this.editor,t=e.model.schema;t.isRegistered(`caption`)?t.extend(`caption`,{allowIn:`imageBlock`}):t.register(`caption`,{allowIn:`imageBlock`,allowContentOf:`$block`,isLimit:!0}),e.commands.add(`toggleImageCaption`,new OA(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration(),this._registerCaptionReconversion()}_setupConversion(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`),i=e.t;e.conversion.for(`upcast`).elementToElement({view:e=>r.matchImageCaptionViewElement(e),model:`caption`}),e.conversion.for(`dataDowncast`).elementToElement({model:`caption`,view:(e,{writer:t})=>n.isBlockImage(e.parent)?t.createContainerElement(`figcaption`):null}),e.conversion.for(`editingDowncast`).elementToElement({model:`caption`,view:(e,{writer:r})=>{if(!n.isBlockImage(e.parent))return null;let a=r.createEditableElement(`figcaption`);r.setCustomProperty(`imageCaption`,!0,a),a.placeholder=i(`Enter image caption`),yo({view:t,element:a,keepOnFocus:!0});let o=e.parent.getAttribute(`alt`);return YE(a,r,{label:o?i(`Caption for image: %0`,[o]):i(`Caption for the image`)})}})}_setupImageTypeCommandsIntegration(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.plugins.get(`ImageCaptionUtils`),r=e.commands.get(`imageTypeInline`),i=e.commands.get(`imageTypeBlock`),a=e=>{if(!e.return)return;let{oldElement:r,newElement:i}=e.return;if(!r)return;if(t.isBlockImage(r)){let e=n.getCaptionFromImageModelElement(r);if(e){this._saveCaption(i,e);return}}let a=this._getSavedCaption(r);a&&this._saveCaption(i,a)};r&&this.listenTo(r,`execute`,a,{priority:`low`}),i&&this.listenTo(i,`execute`,a,{priority:`low`})}_getSavedCaption(e){let t=this._savedCaptionsMap.get(e);return t?Ml.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}_registerCaptionReconversion(){let e=this.editor,t=e.model,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`);t.document.on(`change:data`,()=>{let i=t.document.differ.getChanges();for(let t of i){if(t.attributeKey!==`alt`)continue;let i=t.range.start.nodeAfter;if(n.isBlockImage(i)){let t=r.getCaptionFromImageModelElement(i);if(!t)return;e.editing.reconvertItem(t)}}})}},AA=class extends F{static get requires(){return[DA]}static get pluginName(){return`ImageCaptionUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageCaptionUtils`),r=e.t;e.ui.componentFactory.add(`toggleImageCaption`,i=>{let a=e.commands.get(`toggleImageCaption`),o=new H(i);return o.set({icon:c_,tooltip:!0,isToggleable:!0}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.bind(`label`).to(a,`value`,e=>r(e?`Toggle caption off`:`Toggle caption on`)),this.listenTo(o,`execute`,()=>{e.execute(`toggleImageCaption`,{focusCaptionOnShow:!0});let r=n.getCaptionFromModelSelection(e.model.document.selection);if(r){let n=e.editing.mapper.toViewElement(r);t.scrollToTheSelection(),t.change(e=>{e.addClass(`image__caption_highlighted`,n)})}e.editing.view.focus()}),o})}},jA=class extends F{static get requires(){return[kA,AA]}static get pluginName(){return`ImageCaption`}static get isOfficialPlugin(){return!0}};function MA(e){let t=e.map(e=>e.replace(`+`,`\\+`));return RegExp(`^image\\/(${t.join(`|`)})$`)}function NA(e){return new Promise((t,n)=>{let r=e.getAttribute(`src`);fetch(r).then(e=>e.blob()).then(e=>{let n=FA(e,r),i=`image.${n.replace(`image/`,``)}`;t(new File([e],i,{type:n}))}).catch(e=>e&&e.name===`TypeError`?IA(r).then(t).catch(n):n(e))})}function PA(e,t){return!e.isInlineImageView(t)||!t.getAttribute(`src`)?!1:!!t.getAttribute(`src`).match(/^data:image\/\w+;base64,/g)||!!t.getAttribute(`src`).match(/^blob:/g)}function FA(e,t){return e.type?e.type:t.match(/data:(image\/\w+);base64/)?t.match(/data:(image\/\w+);base64/)[1].toLowerCase():`image/jpeg`}function IA(e){return LA(e).then(t=>{let n=FA(t,e),r=`image.${n.replace(`image/`,``)}`;return new File([t],r,{type:n})})}function LA(e){return new Promise((t,n)=>{let r=u.document.createElement(`img`);r.addEventListener(`load`,()=>{let e=u.document.createElement(`canvas`);e.width=r.width,e.height=r.height,e.getContext(`2d`).drawImage(r,0,0),e.toBlob(e=>e?t(e):n())}),r.addEventListener(`error`,()=>n()),r.src=e})}var RA=class extends F{static get pluginName(){return`ImageUploadUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`uploadImage`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`imageUpload`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`menuBar:uploadImage`,()=>this._createMenuBarButton(`standalone`)),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`upload`,observable:()=>e.commands.get(`uploadImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`uploadImage`),i=t.config.get(`image.upload.types`),a=MA(i),o=new e(t.locale),s=n.t;return o.set({acceptedType:i.map(e=>`image/${e}`).join(`,`),allowMultipleFiles:!0,label:s(`Upload from computer`),icon:V_}),o.bind(`isEnabled`).to(r),o.on(`done`,(e,n)=>{let r=Array.from(n).filter(e=>a.test(e.type));r.length&&(t.execute(`uploadImage`,{file:r}),t.editing.view.focus())}),o}_createToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this.editor.commands.get(`uploadImage`),r=this._createButton(_b);return r.tooltip=!0,r.bind(`label`).to(t,`isImageSelected`,n,`isAccessAllowed`,(t,n)=>e(n?t?`Replace image from computer`:`Upload image from computer`:`You have no image upload permissions.`)),r}_createDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(_b);return n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace from computer`:`Upload from computer`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createButton(mw);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image from computer`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`From computer`);break}return n}},zA=class extends F{static get pluginName(){return`ImageUploadProgress`}static get isOfficialPlugin(){return!0}placeholder;constructor(e){super(e),this.placeholder=`data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==`}init(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageBlock`,this.uploadStatusChange),e.plugins.has(`ImageInlineEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageInline`,this.uploadStatusChange)}uploadStatusChange=(e,t,n)=>{let r=this.editor,i=t.item,a=i.getAttribute(`uploadId`);if(!n.consumable.consume(t.item,e.name))return;let o=r.plugins.get(`ImageUtils`),s=r.plugins.get(bw),c=a?t.attributeNewValue:null,l=this.placeholder,u=r.editing.mapper.toViewElement(i),d=n.writer;if(c==`reading`){BA(u,d),HA(o,l,u,d);return}if(c==`uploading`){let e=s.loaders.get(a);BA(u,d),e?(UA(u,d),WA(u,d,e,r.editing.view),ZA(o,u,d,e)):HA(o,l,u,d);return}c==`complete`&&s.loaders.get(a)&&KA(u,d,r.editing.view),GA(u,d),UA(u,d),VA(u,d)}};function BA(e,t){e.hasClass(`ck-appear`)||t.addClass(`ck-appear`,e)}function VA(e,t){t.removeClass(`ck-appear`,e)}function HA(e,t,n,r){n.hasClass(`ck-image-upload-placeholder`)||r.addClass(`ck-image-upload-placeholder`,n);let i=e.findViewImgElement(n);i.getAttribute(`src`)!==t&&r.setAttribute(`src`,t,i),YA(n,`placeholder`)||r.insert(r.createPositionAfter(i),JA(r))}function UA(e,t){e.hasClass(`ck-image-upload-placeholder`)&&t.removeClass(`ck-image-upload-placeholder`,e),XA(e,t,`placeholder`)}function WA(e,t,n,r){let i=qA(t);t.insert(t.createPositionAt(e,`end`),i),n.on(`change:uploadedPercent`,(e,t,n)=>{r.change(e=>{e.setStyle(`width`,n+`%`,i)})})}function GA(e,t){XA(e,t,`progressBar`)}function KA(e,t,n){let r=t.createUIElement(`div`,{class:`ck-image-upload-complete-icon`});t.insert(t.createPositionAt(e,`end`),r),setTimeout(()=>{n.change(e=>e.remove(e.createRangeOn(r)))},3e3)}function qA(e){let t=e.createUIElement(`div`,{class:`ck-progress-bar`});return e.setCustomProperty(`progressBar`,!0,t),t}function JA(e){let t=e.createUIElement(`div`,{class:`ck-upload-placeholder-loader`});return e.setCustomProperty(`placeholder`,!0,t),t}function YA(e,t){for(let n of e.getChildren())if(n.getCustomProperty(t))return n}function XA(e,t,n){let r=YA(e,n);r&&t.remove(t.createRangeOn(r))}function ZA(e,t,n,r){if(r.data){let i=e.findViewImgElement(t);n.setAttribute(`src`,r.data,i)}}var QA=class extends I{constructor(e){super(e),this.set(`isAccessAllowed`,!0)}refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.model.document.selection.getSelectedElement();this.isEnabled=t.isImageAllowed()||t.isImage(n)}execute(e){let t=A(e.file),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((e,t)=>{let a=n.getSelectedElement();if(t&&a&&r.isImage(a)){let t=this.editor.model.createPositionAfter(a);this._uploadImage(e,i,t)}else this._uploadImage(e,i)})}_uploadImage(e,t,n){let r=this.editor,i=r.plugins.get(bw).createLoader(e),a=r.plugins.get(`ImageUtils`);i&&a.insertImage({...t,uploadId:i.id},n)}},$A=class extends F{static get requires(){return[bw,IC,_O,Kk]}static get pluginName(){return`ImageUploadEditing`}static get isOfficialPlugin(){return!0}_uploadImageElements;_uploadedImages=new Map;constructor(e){super(e),e.config.define(`image`,{upload:{types:[`jpeg`,`png`,`gif`,`bmp`,`webp`,`tiff`]}}),this._uploadImageElements=new Map}init(){let e=this.editor,t=e.model.document,n=e.conversion,r=e.plugins.get(bw),i=e.plugins.get(`ImageUtils`),a=e.plugins.get(`ClipboardPipeline`),o=MA(e.config.get(`image.upload.types`)),s=new QA(e);e.commands.add(`uploadImage`,s),e.commands.add(`imageUpload`,s),n.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`uploadId`},model:`uploadId`}).add(e=>e.on(`element:img`,(e,t,n)=>{if(!n.consumable.test(t.viewItem,{attributes:[`data-ck-upload-id`]}))return;let i=t.viewItem.getAttribute(`data-ck-upload-id`);if(!i||!t.modelRange)return;let[a]=Array.from(t.modelRange.getItems({shallow:!0})),o=r.loaders.get(i);a&&(n.writer.setAttribute(`uploadId`,i,a),n.consumable.consume(t.viewItem,{attributes:[`data-ck-upload-id`]}),o&&o.data&&n.writer.setAttribute(`uploadStatus`,o.status,a))},{priority:`low`})),this.listenTo(e.editing.view.document,`clipboardInput`,(t,n)=>{if(ej(n.dataTransfer))return;let r=Array.from(n.dataTransfer.files).filter(e=>e?o.test(e.type):!1);if(r.length&&(t.stop(),e.model.change(t=>{n.targetRanges&&t.setSelection(n.targetRanges.map(t=>e.editing.mapper.toModelRange(t))),e.execute(`uploadImage`,{file:r})}),!e.commands.get(`uploadImage`).isAccessAllowed)){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`You have no image upload permissions.`),{namespace:`image`})}}),this.listenTo(a,`inputTransformation`,(t,n)=>{let a=Array.from(e.editing.view.createRangeIn(n.content)).map(e=>e.item).filter(e=>PA(i,e)&&!e.getAttribute(`uploadProcessed`)).map(e=>({promise:NA(e),imageElement:e}));if(!a.length)return;let o=new Np(e.editing.view.document);for(let e of a){o.setAttribute(`uploadProcessed`,!0,e.imageElement);let t=r.createLoader(e.promise);t&&(o.setAttribute(`src`,``,e.imageElement),o.setAttribute(`uploadId`,t.id,e.imageElement))}}),e.editing.view.document.on(`dragover`,(e,t)=>{t.preventDefault()}),t.on(`change`,()=>{let n=t.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),i=new Set;for(let t of n)if(t.type==`insert`&&t.name!=`$text`){let n=t.position.nodeAfter,a=t.position.root.rootName==`$graveyard`;for(let t of tj(e,n)){let n=t.getAttribute(`uploadId`),o=t.getAttribute(`uploadStatus`);if(!n||o==`complete`)continue;let s=r.loaders.get(n);if(!s){!a&&this._uploadedImages.has(n)&&e.model.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:this._uploadedImages.get(n),imageElement:t})});continue}a?i.has(n)||Array.from(this._uploadImageElements.get(n)).every(e=>e.root.rootName==`$graveyard`)&&s.abort():(i.add(n),this._uploadImageElements.has(n)?this._uploadImageElements.get(n).add(t):this._uploadImageElements.set(n,new Set([t])),s.status==`idle`&&this._readAndUpload(s))}}}),this.on(`uploadComplete`,(e,{imageElement:t,data:n})=>{let r=n.urls?n.urls:n;this.editor.model.change(e=>{e.setAttribute(`src`,r.default,t),this._parseAndSetSrcsetAttributeOnImage(r,t,e),i.setImageNaturalSizeAttributes(t)})},{priority:`low`})}afterInit(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageBlock`)),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageInline`))}_readAndUpload(e){let t=this.editor,n=t.model,r=t.locale.t,i=t.plugins.get(bw),a=t.plugins.get(IC),o=t.plugins.get(`ImageUtils`),s=this._uploadImageElements;return n.enqueueChange({isUndoable:!1},t=>{let n=s.get(e.id);for(let e of n)t.setAttribute(`uploadStatus`,`reading`,e)}),e.read().then(()=>{let i=e.upload();t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Uploading image`));for(let r of s.get(e.id)){if(p.isSafari){let e=t.editing.mapper.toViewElement(r),n=o.findViewImgElement(e);t.editing.view.once(`render`,()=>{if(!n.parent)return;let e=t.editing.view.domConverter.mapViewToDom(n.parent);if(!e)return;let r=e.style.display;e.style.display=`none`,e._ckHack=e.offsetHeight,e.style.display=r})}n.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`uploading`,r)})}return i}).then(i=>{n.enqueueChange({isUndoable:!1},n=>{for(let t of s.get(e.id))n.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:i,imageElement:t});t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Image upload complete`)),this._uploadedImages.set(e.id,i)}),c()}).catch(i=>{if(t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Error during image upload`)),e.status!==`error`&&e.status!==`aborted`)throw i;e.status==`error`&&i&&a.showWarning(i,{title:r(`Upload failed`),namespace:`upload`}),n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))n.root.rootName!==`$graveyard`&&t.remove(n)}),c()});function c(){n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))t.removeAttribute(`uploadId`,n),t.removeAttribute(`uploadStatus`,n);s.delete(e.id)}),i.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,n){let r=0,i=Object.keys(e).filter(e=>{let t=parseInt(e,10);if(!isNaN(t))return r=Math.max(r,t),!0}).map(t=>`${e[t]} ${t}w`).join(`, `);if(i!=``){let e={srcset:i};!t.hasAttribute(`width`)&&!t.hasAttribute(`height`)&&(e.width=r),n.setAttributes(e,t)}}_registerConverters(e){let{conversion:t,plugins:n}=this.editor,r=n.get(bw),i=n.get(Kk);t.for(`dataDowncast`).add(t=>{t.on(`attribute:uploadId:${e}`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let a=r.loaders.get(t.attributeNewValue);if(!a||!a.data)return null;let o=n.mapper.toViewElement(t.item),s=i.findViewImgElement(o);s&&(n.consumable.consume(t.item,e.name),n.writer.setAttribute(`data-ck-upload-id`,a.id,s))})})}};function ej(e){return Array.from(e.types).includes(`text/html`)&&e.getData(`text/html`)!==``}function tj(e,t){let n=e.plugins.get(`ImageUtils`);return Array.from(e.model.createRangeOn(t)).filter(e=>n.isImage(e.item)).map(e=>e.item)}var nj=class extends F{static get pluginName(){return`ImageUpload`}static get isOfficialPlugin(){return!0}static get requires(){return[$A,RA,zA]}},rj=class extends P{urlInputView;keystrokes;constructor(e){super(e),this.set(`imageURLInputValue`,``),this.set(`isImageSelected`,!1),this.set(`isEnabled`,!0),this.keystrokes=new N,this.urlInputView=this._createUrlInputView(),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-url`],tabindex:`-1`},children:[this.urlInputView,{tag:`div`,attributes:{class:[`ck`,`ck-image-insert-url__action-row`]}}]})}render(){super.render(),Qa({view:this}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy()}_createUrlInputView(){let e=this.locale,t=e.t,n=new Qb(e,Jx);return n.bind(`label`).to(this,`isImageSelected`,e=>t(e?`Update image URL`:`Insert image via URL`)),n.bind(`isEnabled`).to(this),n.fieldView.inputMode=`url`,n.fieldView.placeholder=`https://example.com/image.png`,n.fieldView.bind(`value`).to(this,`imageURLInputValue`,e=>e||``),n.fieldView.on(`input`,()=>{this.imageURLInputValue=n.fieldView.element.value.trim()}),n}focus(){this.urlInputView.focus()}},ij=class extends F{_imageInsertUI;_formView;static get pluginName(){return`ImageInsertViaUrlUI`}static get isOfficialPlugin(){return!0}static get requires(){return[SA,Qy]}init(){this.editor.ui.componentFactory.add(`insertImageViaUrl`,()=>this._createToolbarButton()),this.editor.ui.componentFactory.add(`menuBar:insertImageViaUrl`,()=>this._createMenuBarButton(`standalone`))}afterInit(){this._imageInsertUI=this.editor.plugins.get(`ImageInsertUI`),this._imageInsertUI.registerIntegration({name:`url`,observable:()=>this.editor.commands.get(`insertImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createInsertUrlButton(e){let t=new e(this.editor.locale);return t.icon=H_,t.on(`execute`,()=>{this._showModal()}),t}_createToolbarButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.tooltip=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert image via URL`)),t}_createDropdownButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.withText=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert via URL`)),t}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createInsertUrlButton(U);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image via URL`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`Via URL`);break}return n}_createInsertUrlView(){let e=this.editor,t=e.locale,n=e.commands.get(`replaceImageSource`),r=e.commands.get(`insertImage`),i=new rj(t);return i.bind(`isImageSelected`).to(this._imageInsertUI),i.bind(`isEnabled`).toMany([r,n],`isEnabled`,(...e)=>e.some(e=>e)),i}_showModal(){let e=this.editor,t=e.locale.t,n=e.plugins.get(`Dialog`);this._formView||(this._formView=this._createInsertUrlView(),this._formView.on(`submit`,()=>this._handleSave()));let r=e.commands.get(`replaceImageSource`);this._formView.imageURLInputValue=r.value||``,n.show({id:`insertImageViaUrl`,title:t(`Image via URL`),isModal:!0,content:this._formView,actionButtons:[{label:t(`Cancel`),withText:!0,onExecute:()=>n.hide()},{label:this._imageInsertUI.isImageSelected?t(`Save`):t(`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSave()}]})}_handleSave(){this.editor.commands.get(`replaceImageSource`).isEnabled?this.editor.execute(`replaceImageSource`,{source:this._formView.imageURLInputValue}):this.editor.execute(`insertImage`,{source:this._formView.imageURLInputValue}),this.editor.plugins.get(`Dialog`).hide()}},aj=class extends F{static get pluginName(){return`ImageInsertViaUrl`}static get isOfficialPlugin(){return!0}static get requires(){return[ij,SA]}},oj=class extends F{static get pluginName(){return`ImageInsert`}static get isOfficialPlugin(){return!0}static get requires(){return[nj,aj,SA]}},sj=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);this.isEnabled=!!t,!t||!t.hasAttribute(`resizedWidth`)?this.value=null:this.value={width:t.getAttribute(`resizedWidth`),height:null}}execute(e){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection);this.value={width:e.width,height:null},i&&n.change(t=>{t.setAttribute(`resizedWidth`,e.width,i),t.removeAttribute(`resizedHeight`,i),r.setImageNaturalSizeAttributes(i)})}},cj=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageResizeEditing`}static get licenseFeatureCode(){return`IR`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`image`,{resizeUnit:`%`,resizeOptions:[{name:`resizeImage:original`,value:null,icon:`original`},{name:`resizeImage:custom`,value:`custom`,icon:`custom`},{name:`resizeImage:25`,value:`25`,icon:`small`},{name:`resizeImage:50`,value:`50`,icon:`medium`},{name:`resizeImage:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor,t=new sj(e);this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`),e.commands.add(`resizeImage`,t),e.commands.add(`imageResize`,t)}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0})),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0}))}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`);t.conversion.for(`downcast`).add(t=>t.on(`attribute:resizedWidth:${e}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(`image_resized`,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(`image_resized`,i))})),t.conversion.for(`dataDowncast`).attributeToAttribute({model:{name:e,key:`resizedHeight`},view:e=>({key:`style`,value:{height:e}})}),t.conversion.for(`editingDowncast`).add(t=>t.on(`attribute:resizedHeight:${e}`,(t,r,i)=>{if(!i.consumable.consume(r.item,t.name))return;let a=i.writer,o=i.mapper.toViewElement(r.item),s=e===`imageInline`?n.findViewImgElement(o):o;r.attributeNewValue===null?a.removeStyle(`height`,s):a.setStyle(`height`,r.attributeNewValue,s)})),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>Wk(e)?null:e.getStyle(`width`)}}),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{height:/.+/}},model:{key:`resizedHeight`,value:e=>Wk(e)?null:e.getStyle(`height`)}}),t.conversion.for(`upcast`).add(t=>{t.on(`element:${e===`imageBlock`?`figure`:`img`}`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[`image_resized`]})})})}};const lj={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var uj=class extends F{static get requires(){return[cj]}static get pluginName(){return`ImageResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`image.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`image.resizeOptions`),n=e.commands.get(`resizeImage`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerImageResizeButton(e);this._registerImageResizeDropdown(t)}_registerImageResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeImage`),s=this._getOptionLabelValue(e,!0);if(!lj[i])throw new w(`imageresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:lj[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let e=t.plugins.get(`ImageCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,fj(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeImage`,{width:e})})}return a})}_registerImageResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value),i=i=>{let a=t.commands.get(`resizeImage`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize image`);return s.set({tooltip:c,commandValue:r.value,icon:lj.medium,isToggleable:!0,label:this._getOptionLabelValue(r),withText:!0,class:`ck-resize-image-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e&&e.width?e.width:this._getOptionLabelValue(r)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Image resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o};t.ui.componentFactory.add(`resizeImage`,i),t.ui.componentFactory.add(`imageResize`,i)}_getOptionLabelValue(e,t=!1){let n=this.editor.t;return e.label?e.label:t?dj(e)?n(`Custom image size`):e.value?n(`Resize image to %0`,e.value+this._resizeUnit):n(`Resize image to the original size`):dj(e)?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>dj(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let r=n.plugins.get(`ImageCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,pj(o))}else a={type:`button`,model:new RC({commandName:`resizeImage`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,fj(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function dj(e){return e.value===`custom`}function fj(e){return(t,n)=>{let r=t;return r===void 0||!n?!1:e===null&&r===e?!0:r!==null&&r.width===e}}function pj(e){return(t,n)=>!e.some(e=>fj(e)(t,n))}const mj=`image_resized`;var hj=class extends F{static get requires(){return[GD,Kk]}static get pluginName(){return`ImageResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeImage`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`);t.addObserver(pA),this.listenTo(t.document,`imageLoaded`,(r,i)=>{if(!i.target.matches(`figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img`))return;let a=e.editing.view.domConverter,o=a.domToView(i.target),s=n.getImageWidgetFromImageView(o),c=this.editor.plugins.get(GD).getResizerByViewElement(s);if(c){c.redraw();return}let l=e.editing.mapper,u=l.toModelElement(s);c=e.plugins.get(GD).attachTo({unit:e.config.get(`image.resizeUnit`),modelElement:u,viewElement:s,editor:e,getHandleHost(e){return e.querySelector(`img`)},getResizeHost(){return a.mapViewToDom(l.toViewElement(u))},isCentered(){return u.getAttribute(`imageStyle`)==`alignCenter`},onCommit(n){t.change(e=>{e.removeClass(mj,s)}),e.execute(`resizeImage`,{width:n})}}),c.on(`updateSize`,()=>{s.hasClass(mj)||t.change(e=>{e.addClass(mj,s)});let e=u.name===`imageInline`?o:s;e.getStyle(`height`)&&t.change(t=>{t.removeStyle(`height`,e)})}),c.bind(`isEnabled`).to(this)})}};function gj(e){let{editing:t}=e,n=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function _j(e,t){let n=gj(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}var vj=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-image-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Image Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize image (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}};function yj(e,t){let n=gj(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var bj=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(vj))(t.locale,e,xj(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeImage`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(t)});let r=_j(t,e),i=r?r.value.toFixed(1):``,a=yj(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function xj(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var Sj=class extends F{static get requires(){return[cj,hj,bj,uj]}static get pluginName(){return`ImageResize`}static get isOfficialPlugin(){return!0}},Cj=class extends I{_defaultStyles;_styles;constructor(e,t){super(e),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(t.map(e=>{if(e.isDefault)for(let t of e.modelElements)this._defaultStyles[t]=e.name;return[e.name,e]}))}refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled?e.hasAttribute(`imageStyle`)?this.value=e.getAttribute(`imageStyle`):this.value=this._defaultStyles[e.name]:this.value=!1}isStyleEnabled(e){if(!this.isEnabled)return!1;let t=this.editor.plugins.get(`ImageUtils`),n=t.getClosestSelectedImageElement(this.editor.model.document.selection);if(!n||!this._styles.has(e))return!1;if(!this.shouldConvertImageType(e,n))return!0;let r=t.isBlockImage(n)?`imageTypeInline`:`imageTypeBlock`,i=this.editor.commands.get(r);return!!i&&i.isEnabled}execute(e={}){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`);e.value&&!this.isStyleEnabled(e.value)||n.change(t=>{let i=e.value,{setImageSizes:a=!0}=e,o=r.getClosestSelectedImageElement(n.document.selection);i&&this.shouldConvertImageType(i,o)&&(this.editor.execute(r.isBlockImage(o)?`imageTypeInline`:`imageTypeBlock`,{setImageSizes:a}),o=r.getClosestSelectedImageElement(n.document.selection)),!i||this._styles.get(i).isDefault?t.removeAttribute(`imageStyle`,o):t.setAttribute(`imageStyle`,i,o),a&&r.setImageNaturalSizeAttributes(o)})}shouldConvertImageType(e,t){return!this._styles.get(e).modelElements.includes(t.name)}};const wj={get inline(){return{name:`inline`,title:`In line`,icon:Cv,modelElements:[`imageInline`],isDefault:!0}},get alignLeft(){return{name:`alignLeft`,title:`Left aligned image`,icon:xv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-left`}},get alignBlockLeft(){return{name:`alignBlockLeft`,title:`Left aligned image`,icon:wv,modelElements:[`imageBlock`],className:`image-style-block-align-left`}},get alignCenter(){return{name:`alignCenter`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],className:`image-style-align-center`}},get alignRight(){return{name:`alignRight`,title:`Right aligned image`,icon:Sv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-right`}},get alignBlockRight(){return{name:`alignBlockRight`,title:`Right aligned image`,icon:Tv,modelElements:[`imageBlock`],className:`image-style-block-align-right`}},get block(){return{name:`block`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],isDefault:!0}},get side(){return{name:`side`,title:`Side image`,icon:Sv,modelElements:[`imageBlock`],className:`image-style-side`}}},Tj={full:bv,left:wv,right:Tv,center:yv,inlineLeft:xv,inlineRight:Sv,inline:Cv},Ej=[{name:`imageStyle:wrapText`,title:`Wrap text`,defaultItem:`imageStyle:alignLeft`,items:[`imageStyle:alignLeft`,`imageStyle:alignRight`]},{name:`imageStyle:breakText`,title:`Break text`,defaultItem:`imageStyle:block`,items:[`imageStyle:alignBlockLeft`,`imageStyle:block`,`imageStyle:alignBlockRight`]}];function Dj(e,t){for(let n of t)if(n.name===e)return n}function Oj(e){return(e.configuredStyles.options||[]).map(e=>jj(e)).filter(t=>Mj(t,e))}function kj(e,t){return e&&t?{options:[`inline`,`alignLeft`,`alignRight`,`alignCenter`,`alignBlockLeft`,`alignBlockRight`,`block`,`side`]}:e?{options:[`block`,`side`]}:t?{options:[`inline`,`alignLeft`,`alignRight`]}:{}}function Aj(e){return e.has(`ImageBlockEditing`)&&e.has(`ImageInlineEditing`)?[...Ej]:[]}function jj(e){return e=typeof e==`string`?wj[e]?{...wj[e]}:{name:e}:Nj(wj[e.name],e),typeof e.icon==`string`&&(e.icon=Tj[e.icon]||e.icon),e}function Mj(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:n}){let{modelElements:r,name:i}=e;if(!r||!r.length||!i)return Pj({style:e}),!1;{let i=[t?`imageBlock`:null,n?`imageInline`:null];if(!r.some(e=>i.includes(e)))return T(`image-style-missing-dependency`,{style:e,missingPlugins:r.map(e=>e===`imageBlock`?`ImageBlockEditing`:`ImageInlineEditing`)}),!1}return!0}function Nj(e,t){let n={...t};for(let r in e)Object.prototype.hasOwnProperty.call(t,r)||(n[r]=e[r]);return n}function Pj(e){T(`image-style-configuration-definition-invalid`,e)}const Fj={normalizeStyles:Oj,getDefaultStylesConfiguration:kj,getDefaultDropdownDefinitions:Aj,warnInvalidStyle:Pj};function Ij(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=Dj(n.attributeNewValue,e),a=Dj(n.attributeOldValue,e),o=r.mapper.toViewElement(n.item),s=r.writer;a&&s.removeClass(a.className,o),i&&s.addClass(i.className,o)}}function Lj(e){let t={imageInline:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageInline`)),imageBlock:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageBlock`))};return(n,r,i)=>{if(!r.modelRange)return;let a=r.viewItem,o=j(r.modelRange.getItems());if(o&&i.schema.checkAttribute(o,`imageStyle`)){for(let e of t[o.name])i.consumable.consume(a,{classes:e.className})&&i.writer.setAttribute(`imageStyle`,e.name,o);Rj(i,a,o,e)}}}function Rj(e,t,n,r){if(!e.consumable.test(t,{styles:[`float`]}))return;let i=null;switch(t.getStyle(`float`)){case`left`:i=`alignLeft`;break;case`right`:i=`alignRight`;break}if(!i)return;let a=Dj(i,r);if(!a)return;let o=wj[a.name];$t(a,o)&&(e.writer.setAttribute(`imageStyle`,i,n),e.consumable.consume(t,{styles:[`float`]}))}var zj=class extends F{static get pluginName(){return`ImageStyleEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}normalizedStyles;init(){let e=this.editor,t=e.plugins.has(`ImageBlockEditing`),n=e.plugins.has(`ImageInlineEditing`);e.config.define(`image.styles`,Fj.getDefaultStylesConfiguration(t,n)),this.normalizedStyles=Fj.normalizeStyles({configuredStyles:e.config.get(`image.styles`),isBlockPluginLoaded:t,isInlinePluginLoaded:n}),this._setupConversion(t,n),this._setupPostFixer(),e.commands.add(`imageStyle`,new Cj(e,this.normalizedStyles))}_setupConversion(e,t){let n=this.editor,r=n.model.schema,i=Ij(this.normalizedStyles),a=Lj(this.normalizedStyles);n.editing.downcastDispatcher.on(`attribute:imageStyle`,i),n.data.downcastDispatcher.on(`attribute:imageStyle`,i),e&&(r.extend(`imageBlock`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0,blockAlignment:Bj(this.normalizedStyles)}),n.data.upcastDispatcher.on(`element:figure`,a,{priority:`low`})),t&&(r.extend(`imageInline`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0}),n.data.upcastDispatcher.on(`element:img`,a,{priority:`low`}))}_setupPostFixer(){let e=this.editor,t=e.model.document,n=e.plugins.get(Kk),r=new Map(this.normalizedStyles.map(e=>[e.name,e]));t.registerPostFixer(e=>{let i=!1;for(let a of t.differ.getChanges())if(a.type==`insert`||a.type==`attribute`&&a.attributeKey==`imageStyle`){let t=a.type==`insert`?a.position.nodeAfter:a.range.start.nodeAfter;if(t&&t.is(`element`,`paragraph`)&&t.childCount>0&&(t=t.getChild(0)),!n.isImage(t))continue;let o=t.getAttribute(`imageStyle`);if(!o)continue;let s=r.get(o);(!s||!s.modelElements.includes(t.name))&&(e.removeAttribute(`imageStyle`,t),i=!0)}return i})}};function Bj(e){let t=(...t)=>{let n=t.map(t=>Dj(t,e)).find(e=>e?.modelElements.includes(`imageBlock`));if(n)return{isDefault:!!n.isDefault,value:n.name}};return Object.fromEntries(Object.entries({left:[`alignBlockLeft`,`alignLeft`],right:[`alignBlockRight`,`alignRight`],center:[`block`,`alignCenter`]}).map(([e,n])=>[e,t(...n)]).filter(([,e])=>e!==void 0))}var Vj=class extends F{static get requires(){return[zj]}static get pluginName(){return`ImageStyleUI`}static get isOfficialPlugin(){return!0}get localizedDefaultStylesTitles(){let e=this.editor.t;return{"Wrap text":e(`Wrap text`),"Break text":e(`Break text`),"In line":e(`In line`),"Full size image":e(`Full size image`),"Side image":e(`Side image`),"Left aligned image":e(`Left aligned image`),"Centered image":e(`Centered image`),"Right aligned image":e(`Right aligned image`)}}init(){let e=this.editor.plugins,t=this.editor.config.get(`image.toolbar`)||[],n=Hj(e.get(`ImageStyleEditing`).normalizedStyles,this.localizedDefaultStylesTitles);for(let e of n)this._createButton(e);let r=Hj([...t.filter(Xe),...Fj.getDefaultDropdownDefinitions(e)],this.localizedDefaultStylesTitles);for(let e of r)this._createDropdown(e,n)}_createDropdown(e,t){let n=this.editor.ui.componentFactory;n.add(e.name,r=>{let i,{defaultItem:a,items:o,title:s}=e,c=o.filter(e=>t.find(({name:t})=>Uj(t)===e)).map(e=>{let t=n.create(e);return e===a&&(i=t),t});o.length!==c.length&&Fj.warnInvalidStyle({dropdown:e});let l=Nx(r,Mx),u=l.buttonView,d=u.arrowView;return Fx(l,c,{enableActiveItemFocusOnDropdownOpen:!0}),u.set({label:Wj(s,i.label),class:null,tooltip:!0}),d.unbind(`label`),d.set({label:s}),u.bind(`icon`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return t<0?i.icon:c[t].icon}),u.bind(`label`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return Wj(s,t<0?i.label:c[t].label)}),u.bind(`isOn`).toMany(c,`isOn`,(...e)=>e.some(en)),u.bind(`class`).toMany(c,`isOn`,(...e)=>e.some(en)?`ck-splitbutton_flatten`:void 0),u.on(`execute`,()=>{c.some(({isOn:e})=>e)?l.isOpen=!l.isOpen:i.fire(`execute`)}),l.bind(`isEnabled`).toMany(c,`isEnabled`,(...e)=>e.some(en)),this.listenTo(l,`execute`,()=>{this.editor.editing.view.focus()}),l})}_createButton(e){let t=e.name;this.editor.ui.componentFactory.add(Uj(t),n=>{let r=this.editor,i=r.commands.get(`imageStyle`),a=new H(n);a.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0});let o=[i],s=r.commands.get(`imageTypeBlock`),c=r.commands.get(`imageTypeInline`);return s&&o.push(s),c&&o.push(c),a.bind(`isEnabled`).toMany(o,`isEnabled`,()=>i.isStyleEnabled(t)),a.bind(`isOn`).to(i,`value`,e=>e===t),a.on(`execute`,this._executeCommand.bind(this,t)),a})}_executeCommand(e){this.editor.execute(`imageStyle`,{value:e}),this.editor.editing.view.focus()}};function Hj(e,t){for(let n of e)t[n.title]&&(n.title=t[n.title]);return e}function Uj(e){return`imageStyle:${e}`}function Wj(e,t){return(e?e+`: `:``)+t}var Gj=class extends F{static get requires(){return[zj,Vj]}static get pluginName(){return`ImageStyle`}static get isOfficialPlugin(){return!0}},Kj=class extends F{static get requires(){return[kD,Kk]}static get pluginName(){return`ImageToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t,n=e.plugins.get(kD),r=e.plugins.get(`ImageUtils`);n.register(`image`,{ariaLabel:t(`Image toolbar`),items:qj(e.config.get(`image.toolbar`)||[]),getRelatedElement:e=>r.getClosestSelectedImageWidget(e)})}};function qj(e){return e.map(e=>Xe(e)?e.name:e)}var Jj=class extends F{static get requires(){return[gA,Kk]}static get pluginName(){return`PictureEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:[`sources`]}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:[`sources`]}),this._setupConversion(),this._setupImageUploadEditingIntegration()}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`upcast`).add(lA(n)),t.for(`downcast`).add(dA(n))}_setupImageUploadEditingIntegration(){let e=this.editor;if(!e.plugins.has(`ImageUploadEditing`))return;let t=e.plugins.get(`ImageUploadEditing`);this.listenTo(t,`uploadComplete`,(t,{imageElement:n,data:r})=>{let i=r.sources;i&&e.model.change(e=>{e.setAttributes({sources:i},n)})})}},Yj=class extends F{static get requires(){return[gA,Kk,uk]}static get pluginName(){return`LinkImageEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.model.schema;e.plugins.has(`ImageBlockEditing`)&&t.extend(`imageBlock`,{allowAttributes:[`linkHref`]}),e.conversion.for(`upcast`).add(Xj(e)),e.conversion.for(`downcast`).add(Zj(e)),this._enableAutomaticDecorators(),this._enableManualDecorators()}_enableAutomaticDecorators(){let e=this.editor,t=e.commands.get(`link`).automaticDecorators;t.length&&e.conversion.for(`downcast`).add(t.getDispatcherForLinkedImage())}_enableManualDecorators(){let e=this.editor,t=e.commands.get(`link`);for(let n of t.manualDecorators)e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:n.id}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:n.id}),e.conversion.for(`downcast`).add(Qj(n)),e.conversion.for(`upcast`).add($j(e,n))}};function Xj(e){let t=e.plugins.has(`ImageInlineEditing`),n=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,r,i)=>{let a=r.viewItem,o=n.findViewImgElement(a);if(!o)return;let s=o.findAncestor(e=>n.isBlockImageView(e));if(t&&!s)return;let c={attributes:[`href`]};if(!i.consumable.test(a,c))return;let l=a.getAttribute(`href`),u=r.modelCursor.parent;u.is(`element`,`imageBlock`)&&(i.writer.setAttribute(`linkHref`,l,u),i.consumable.consume(a,c))},{priority:`high`})}}function Zj(e){let t=e.plugins.get(`ImageUtils`);return e=>{e.on(`attribute:linkHref:imageBlock`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=Array.from(i.getChildren()).find(e=>e.is(`element`,`a`)),s=t.findViewImgElement(i),c=s.parent.is(`element`,`picture`)?s.parent:s;if(o)n.attributeNewValue?a.setAttribute(`href`,n.attributeNewValue,o):(a.move(a.createRangeOn(c),a.createPositionAt(i,0)),a.remove(o));else{let e=a.createContainerElement(`a`,{href:n.attributeNewValue});a.insert(a.createPositionAt(i,0),e),a.move(a.createRangeOn(c),a.createPositionAt(e,0))}},{priority:`high`})}}function Qj(e){return t=>{let n=t=>(n,r,i)=>{let a=i.mapper.toViewElement(r.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o){if(!t&&r.attributeOldValue){for(let[t,n]of Ui(e.attributes))i.writer.removeAttribute(t,n,o);e.classes&&i.writer.removeClass(e.classes,o);for(let t in e.styles)i.writer.removeStyle(t,o)}if(t&&r.attributeNewValue){for(let[t,n]of Ui(e.attributes))i.writer.setAttribute(t,n,!1,o);e.classes&&i.writer.addClass(e.classes,o);for(let t in e.styles)i.writer.setStyle(t,e.styles[t],o)}}};t.on(`attribute:${e.id}:imageBlock`,n(!1),{priority:ge.high-1}),t.on(`attribute:${e.id}:imageBlock`,n(!0),{priority:ge.high-2})}}function $j(e,t){let n=e.plugins.has(`ImageInlineEditing`),r=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,i,a)=>{let o=i.viewItem,s=r.findViewImgElement(o);if(!s)return;let c=s.findAncestor(e=>r.isBlockImageView(e));if(n&&!c)return;let l=new Po(t._createPattern()).match(o);if(!l||!a.consumable.test(o,l.match))return;let u=i.modelCursor.parent;u?.is(`element`,`imageBlock`)&&(a.writer.setAttribute(t.id,!0,u),a.consumable.consume(o,l.match))},{priority:`high`})}}var eM=class extends F{static get requires(){return[uk,yk,bA]}static get pluginName(){return`LinkImageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,(t,n)=>{this._isSelectedLinkedImage(e.model.document.selection)&&(n.preventDefault(),t.stop())},{priority:`high`}),this._createToolbarLinkImageButton()}_createToolbarLinkImageButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`linkImage`,n=>{let r=new H(n),i=e.plugins.get(`LinkUI`),a=e.commands.get(`link`);return r.set({isEnabled:!0,label:t(`Link image`),icon:Z_,keystroke:BO,tooltip:!0,isToggleable:!0}),r.bind(`isEnabled`).to(a,`isEnabled`),r.bind(`isOn`).to(a,`value`,e=>!!e),this.listenTo(r,`execute`,()=>{this._isSelectedLinkedImage(e.model.document.selection)?i._addToolbarView():i._showUI(!0)}),r})}_isSelectedLinkedImage(e){let t=e.getSelectedElement();return this.editor.plugins.get(`ImageUtils`).isImage(t)&&t.hasAttribute(`linkHref`)}},tM=class extends F{static get requires(){return[Yj,eM]}static get pluginName(){return`LinkImage`}static get isOfficialPlugin(){return!0}},nM=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~`.split(``),rM=e=>{let t=0;for(let n=0;n{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4},aM=e=>{let t=Math.max(0,Math.min(1,e));return Math.trunc(t<=.0031308?t*12.92*255+.5:(1.055*t**.4166666666666667-.055)*255+.5)},oM=e=>e<0?-1:1,sM=(e,t)=>oM(e)*Math.abs(e)**+t,cM=class extends Error{constructor(e){super(e),this.name=`ValidationError`,this.message=e}},lM=e=>{if(!e||e.length<6)throw new cM(`The blurhash string must be at least 6 characters`);let t=rM(e[0]),n=Math.floor(t/9)+1,r=t%9+1;if(e.length!==4+2*r*n)throw new cM(`blurhash length mismatch: length is ${e.length} but it should be ${4+2*r*n}`)},uM=e=>{let t=e>>16,n=e>>8&255,r=e&255;return[iM(t),iM(n),iM(r)]},dM=(e,t)=>{let n=Math.floor(e/361),r=Math.floor(e/19)%19,i=e%19;return[sM((n-9)/9,2)*t,sM((r-9)/9,2)*t,sM((i-9)/9,2)*t]},fM=(e,t,n,r)=>{lM(e),r|=1;let i=rM(e[0]),a=Math.floor(i/9)+1,o=i%9+1,s=(rM(e[1])+1)/166,c=Array(o*a);for(let t=0;tn&&(n=i),t.push(`${e[r]} ${r}w`))}let r=[{srcset:t.join(`,`),sizes:`(max-width: ${n}px) 100vw, ${n}px`,type:`image/webp`}];return{imageFallbackUrl:e.default,imageSources:r}}function mM(e,t){let[,n]=e.value.split(`.`),r=JSON.parse(atob(n)),i=r.auth?.ckbox?.workspaces||[r.aud];return t?r.auth?.ckbox?.role==`superadmin`||i.includes(t)?t:null:i[0]}function hM(e){if(e)try{let t=`32px`,n=document.createElement(`canvas`);n.setAttribute(`width`,t),n.setAttribute(`height`,t);let r=n.getContext(`2d`);if(!r)return;let i=r.createImageData(32,32),a=fM(e,32,32);return i.data.set(a),r.putImageData(i,0,0),n.toDataURL()}catch{return}}function gM({url:e,method:t=`GET`,data:n,onUploadProgress:r,signal:i,authorization:a}){let o=new XMLHttpRequest;o.open(t,e.toString()),o.setRequestHeader(`Authorization`,a),o.setRequestHeader(`CKBox-Version`,`CKEditor 5`),o.responseType=`json`;let s=()=>{o.abort()};return new Promise((e,t)=>{i.throwIfAborted(),i.addEventListener(`abort`,s),o.addEventListener(`loadstart`,()=>{i.addEventListener(`abort`,s)}),o.addEventListener(`loadend`,()=>{i.removeEventListener(`abort`,s)}),o.addEventListener(`error`,()=>{t()}),o.addEventListener(`abort`,()=>{t()}),o.addEventListener(`load`,()=>{let n=o.response;if(!n||n.statusCode>=400)return t(n&&n.message);e(n)}),r&&o.upload.addEventListener(`progress`,e=>{r(e)}),o.send(n)})}const _M={"image/gif":`gif`,"image/jpeg":`jpg`,"image/png":`png`,"image/webp":`webp`,"image/bmp":`bmp`,"image/tiff":`tiff`};function vM(e){return _M[e]}async function yM(e,t){try{let n=await fetch(e,{method:`HEAD`,cache:`force-cache`,...t});return n.ok&&n.headers.get(`content-type`)||``}catch{return``}}function bM(e){return e.name.match(/\.(?[^.]+)$/).groups.ext.toLowerCase()}var xM=class extends I{_chosenAssets=new Set;_wrapper=null;constructor(e){super(e),this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire(`ckbox:open`)}_getValue(){return this._wrapper!==null}_checkEnabled(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);return!(!e.isEnabled&&!t.isEnabled)}_prepareOptions(){let e=this.editor.config.get(`ckbox`),t=e.dialog,n=e.categories,r=e.view,i=e.upload;return{theme:e.theme,language:e.language,tokenUrl:e.tokenUrl,serviceOrigin:e.serviceOrigin,forceDemoLabel:e.forceDemoLabel,choosableFileExtensions:e.choosableFileExtensions,assets:{onChoose:e=>this.fire(`ckbox:choose`,e)},dialog:{onClose:()=>this.fire(`ckbox:close`),width:t&&t.width,height:t&&t.height},categories:n&&{icons:n.icons},view:r&&{openLastView:r.openLastView,startupFolderId:r.startupFolderId,startupCategoryId:r.startupCategoryId,hideMaximizeButton:r.hideMaximizeButton},upload:i&&{componentsHideTimeout:i.componentsHideTimeout,dialogMinimizeTimeout:i.dialogMinimizeTimeout}}}_initListeners(){let e=this.editor,t=e.model,n=!e.config.get(`ckbox.ignoreDataId`),r=e.config.get(`ckbox.downloadableFiles`);this.on(`ckbox`,()=>{this.refresh()},{priority:`low`}),this.on(`ckbox:open`,()=>{!this.isEnabled||this.value||(this._wrapper=mr(document,`div`,{class:`ck ckbox-wrapper`}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))}),this.on(`ckbox:close`,()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,e.editing.view.focus())}),this.on(`ckbox:choose`,(i,a)=>{if(!this.isEnabled)return;let o=e.commands.get(`insertImage`),s=e.commands.get(`link`),c=SM({assets:a,downloadableFilesConfig:r,isImageAllowed:o.isEnabled,isLinkAllowed:s.isEnabled}),l=c.length;l!==0&&(t.change(e=>{for(let t of c){let r=t===c[l-1],i=l===1;this._insertAsset(t,r,e,i),n&&(setTimeout(()=>this._chosenAssets.delete(t),1e3),this._chosenAssets.add(t))}}),e.editing.view.focus())}),this.listenTo(e,`destroy`,()=>{this.fire(`ckbox:close`),this._chosenAssets.clear()})}_insertAsset(e,t,n,r){let i=this.editor.model.document.selection;n.removeSelectionAttribute(`linkHref`),e.type===`image`?this._insertImage(e):this._insertLink(e,n,r),t||n.setSelection(i.getLastPosition())}_insertImage(e){let t=this.editor,{imageFallbackUrl:n,imageSources:r,imageTextAlternative:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=e.attributes;t.execute(`insertImage`,{source:{src:n,sources:r,alt:i,width:a,height:o,...s?{placeholder:s}:null}})}_insertLink(e,t,n){let r=this.editor,i=r.model,a=i.document.selection,{linkName:o,linkHref:s}=e.attributes;if(a.isCollapsed){let e=Ui(a.getAttributes()),c=t.createText(o,e);if(!n){let e=a.getLastPosition(),n=e.parent;n.name===`paragraph`&&n.isEmpty||r.execute(`insertParagraph`,{position:e});let o=i.insertContent(c);t.setSelection(o),r.execute(`link`,s);return}let l=i.insertContent(c);t.setSelection(l)}r.execute(`link`,s)}};function SM({downloadableFilesConfig:e,assets:t,isImageAllowed:n,isLinkAllowed:r}){return t.map(t=>TM(t)?{id:t.data.id,type:`image`,attributes:CM(t)}:{id:t.data.id,type:`link`,attributes:wM(t,e)}).filter(e=>e.type===`image`?n:r)}function CM(e){let{imageFallbackUrl:t,imageSources:n}=pM(e.data.imageUrls),{description:r,width:i,height:a,blurHash:o}=e.data.metadata,s=hM(o);return{imageFallbackUrl:t,imageSources:n,imageTextAlternative:r||``,imageWidth:i,imageHeight:a,...s?{imagePlaceholder:s}:null}}function wM(e,t){return{linkName:e.data.name,linkHref:EM(e,t)}}function TM(e){let t=e.data.metadata;return t?t.width&&t.height:!1}function EM(e,t){let n=new URL(e.data.url);return DM(e,t)&&n.searchParams.set(`download`,`true`),n.toString()}function DM(e,t){return typeof t==`function`?t(e):!0}const OM={autoRefresh:!0},kM=36e5,AM=D();var jM=class e extends AM{_refresh;_options;_tokenRefreshTimeout;_isDestroyed=!1;constructor(e,t={}){if(super(),!e)throw new w(`token-missing-token-url`,this);t.initValue&&this._validateTokenValue(t.initValue),this.set(`value`,t.initValue),typeof e==`function`?this._refresh=e:this._refresh=()=>MM(e),this._options={...OM,...t}}init(){return new Promise((e,t)=>{if(!this.value){this.refreshToken().then(e).catch(t);return}this._options.autoRefresh&&this._registerRefreshTokenTimeout(),e(this)})}refreshToken(){let e=this._options.autoRefresh;return this._refresh().then(t=>(this._validateTokenValue(t),this.set(`value`,t),e&&this._registerRefreshTokenTimeout(),this)).catch(t=>{throw T(`token-refresh-failed`,{autoRefresh:e}),e&&this._registerRefreshTokenTimeout(5e3),t})}destroy(){this._isDestroyed=!0,clearTimeout(this._tokenRefreshTimeout)}_validateTokenValue(e){let t=typeof e==`string`,n=!/^".*"$/.test(e),r=t&&e.split(`.`).length===3;if(!(n&&r))throw new w(`token-not-in-jwt-format`,this)}_registerRefreshTokenTimeout(e){if(clearTimeout(this._tokenRefreshTimeout),this._isDestroyed)return;let t=e||this._getTokenRefreshTimeoutTime();this._tokenRefreshTimeout=setTimeout(()=>{this.refreshToken()},t)}_getTokenRefreshTimeoutTime(){try{let[,e]=this.value.split(`.`),{exp:t}=JSON.parse(atob(e));return t?(t>2147483647&&console.warn(`Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. Token expiration time should always be provided in seconds.`,{tokenExpireTime:t}),Math.floor((t*1e3-Date.now())/2)):kM}catch{return kM}}static create(t,n={}){return new e(t,n).init()}};function MM(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open(`GET`,e),r.addEventListener(`load`,()=>{let e=r.status,i=r.response;return e<200||e>299?n(new w(`token-cannot-download-new-token`,null)):t(i)}),r.addEventListener(`error`,()=>n(Error(`Network Error`))),r.addEventListener(`abort`,()=>n(Error(`Abort`))),r.send()})}const NM=/^data:(\S*?);base64,/,PM=E();var FM=class extends PM{file;xhr;_token;_apiAddress;constructor(e,t,n){if(super(),!e)throw new w(`fileuploader-missing-file`,null);if(!t)throw new w(`fileuploader-missing-token`,null);if(!n)throw new w(`fileuploader-missing-api-address`,null);this.file=LM(e)?IM(e):e,this._token=t,this._apiAddress=n}onProgress(e){return this.on(`progress`,(t,n)=>e(n)),this}onError(e){return this.once(`error`,(t,n)=>e(n)),this}abort(){this.xhr.abort()}send(){return this._prepareRequest(),this._attachXHRListeners(),this._sendRequest()}_prepareRequest(){let e=new XMLHttpRequest;e.open(`POST`,this._apiAddress),e.setRequestHeader(`Authorization`,this._token.value),e.responseType=`json`,this.xhr=e}_attachXHRListeners(){let e=this.xhr,t=e=>()=>this.fire(`error`,e);e.addEventListener(`error`,t(`Network Error`)),e.addEventListener(`abort`,t(`Abort`)),e.upload&&e.upload.addEventListener(`progress`,e=>{e.lengthComputable&&this.fire(`progress`,{total:e.total,uploaded:e.loaded})}),e.addEventListener(`load`,()=>{let t=e.status,n=e.response;if(t<200||t>299)return this.fire(`error`,n.message||n.error)})}_sendRequest(){let e=new FormData,t=this.xhr;return e.append(`file`,this.file),new Promise((n,r)=>{t.addEventListener(`load`,()=>{let e=t.status,i=t.response;return e<200||e>299?i.message?r(new w(`fileuploader-uploading-data-failed`,this,{message:i.message})):r(i.error):n(i)}),t.addEventListener(`error`,()=>r(Error(`Network Error`))),t.addEventListener(`abort`,()=>r(Error(`Abort`))),t.send(e)})}};function IM(e,t=512){try{let n=e.match(NM)[1],r=atob(e.replace(NM,``)),i=[];for(let e=0;e(await this._authorizePrivateCategoriesAccess(e.value),e))}getToken(){return this._token}async getWorkspaceId(){let e=this.editor.t,t=e(`Cannot access default workspace.`),n=this.editor.config.get(`ckbox.defaultUploadWorkspaceId`),r=mM(await this._token,n);if(r==null)throw ye(`ckbox-access-default-workspace-error`),t;return r}async getCategoryIdForFile(e,t){let n=this.editor.t,r=n(`Cannot determine a category for the uploaded file.`),i=this.editor.config.get(`ckbox.defaultUploadCategories`),a=this._getAvailableCategories(t),o=typeof e==`string`?vM(await yM(e,t)):bM(e),s=await a;if(!s)throw r;if(i){let e=Object.keys(i).find(e=>i[e].find(e=>e.toLowerCase()==o));if(e){let t=s.find(t=>t.id===e||t.name===e);if(!t)throw r;return t.id}}let c=s.find(e=>e.extensions.find(e=>e.toLowerCase()==o));if(!c)throw r;return c.id}async _getAvailableCategories(e){let t=this.editor,n=this._token,{signal:r}=e,i=t.config.get(`ckbox.serviceOrigin`),a=await this.getWorkspaceId();try{let e=[],t=0,n;do{let r=await o(t);e.push(...r.items),n=r.totalCount-(t+50),t+=50}while(n>0);return e}catch{r.throwIfAborted(),ye(`ckbox-fetch-category-http-error`);return}async function o(e){let t=new URL(`categories`,i);return t.searchParams.set(`limit`,`50`),t.searchParams.set(`offset`,String(e)),t.searchParams.set(`workspaceId`,a),gM({url:t,signal:r,authorization:(await n).value})}}async _authorizePrivateCategoriesAccess(e){let t=this.editor.config.get(`ckbox.serviceOrigin`),n=new FormData;n.set(`token`,e),await fetch(`${t}/categories/authorizePrivateAccess`,{method:`POST`,credentials:`include`,mode:`no-cors`,body:n})}},HM=class extends F{static get requires(){return[$A,zA,bw,GM]}static get pluginName(){return`CKBoxUploadAdapter`}static get isOfficialPlugin(){return!0}async afterInit(){let e=this.editor,t=!!e.config.get(`ckbox`),n=!!window.CKBox;if(!t&&!n)return;let r=e.plugins.get(bw),i=e.plugins.get(VM);r.createUploadAdapter=t=>new UM(t,e,i);let a=!e.config.get(`ckbox.ignoreDataId`),o=e.plugins.get($A);a&&o.on(`uploadComplete`,(t,{imageElement:n,data:r})=>{e.model.change(e=>{e.setAttribute(`ckboxImageId`,r.ckboxImageId,n)})})}},UM=class{loader;token;editor;controller;serviceOrigin;ckboxUtils;constructor(e,t,n){this.loader=e,this.token=n.getToken(),this.ckboxUtils=n,this.editor=t,this.controller=new AbortController,this.serviceOrigin=t.config.get(`ckbox.serviceOrigin`)}async upload(){let e=this.ckboxUtils,t=this.editor.t,n=await this.loader.file,r=await e.getCategoryIdForFile(n,{signal:this.controller.signal}),i=new URL(`assets`,this.serviceOrigin),a=new FormData;return i.searchParams.set(`workspaceId`,await e.getWorkspaceId()),a.append(`categoryId`,r),a.append(`file`,n),gM({method:`POST`,url:i,data:a,onUploadProgress:e=>{e.lengthComputable&&(this.loader.uploadTotal=e.total,this.loader.uploaded=e.loaded)},signal:this.controller.signal,authorization:(await this.token).value}).then(async e=>{let t=pM(e.imageUrls);return{ckboxImageId:e.id,default:t.imageFallbackUrl,sources:t.imageSources}}).catch(()=>{let e=t(`Cannot upload file:`)+` ${n.name}.`;return Promise.reject(e)})}abort(){this.controller.abort()}};const WM=`NoPermission`;var GM=class extends F{static get pluginName(){return`CKBoxEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[uk,Jj,HM,VM]}init(){let e=this.editor;this._shouldBeInitialised()&&(this._checkImagePlugins(),ZM()&&e.commands.add(`ckbox`,new xM(e)),QM(e).then(e=>{e||this._blockImageCommands()}))}afterInit(){let e=this.editor;this._shouldBeInitialised()&&(e.config.get(`ckbox.ignoreDataId`)||(this._initSchema(),this._initConversion(),this._initFixers()))}_shouldBeInitialised(){return!!this.editor.config.get(`ckbox`)||ZM()}_blockImageCommands(){let e=this.editor,t=e.commands.get(`uploadImage`),n=e.commands.get(`ckboxImageEdit`);t&&(t.isAccessAllowed=!1,t.forceDisabled(WM)),n&&n.forceDisabled(WM)}_checkImagePlugins(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&ye(`ckbox-plugin-image-feature-missing`,e)}_initSchema(){let e=this.editor.model.schema;e.extend(`$text`,{allowAttributes:`ckboxLinkId`}),e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.addAttributeCheck(e=>{if(!e.last.getAttribute(`linkHref`))return!1},`ckboxLinkId`)}_initConversion(){let e=this.editor;e.conversion.for(`downcast`).add(e=>{e.on(`attribute:ckboxLinkId:imageBlock`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(!a.consume(t.item,e.name))return;let o=[...i.toViewElement(t.item).getChildren()].find(e=>e.name===`a`);o&&(t.item.hasAttribute(`ckboxLinkId`)?r.setAttribute(`data-ckbox-resource-id`,t.item.getAttribute(`ckboxLinkId`),o):r.removeAttribute(`data-ckbox-resource-id`,o))},{priority:`low`}),e.on(`attribute:ckboxLinkId`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(a.consume(t.item,e.name)){if(t.attributeOldValue){let e=YM(r,t.attributeOldValue);r.unwrap(i.toViewRange(t.range),e)}if(t.attributeNewValue){let e=YM(r,t.attributeNewValue);if(t.item.is(`selection`)){let t=r.document.selection;r.wrap(t.getFirstRange(),e)}else r.wrap(i.toViewRange(t.range),e)}}},{priority:`low`})}),e.conversion.for(`upcast`).add(e=>{e.on(`element:a`,(e,t,n)=>{let{writer:r,consumable:i}=n;if(!t.viewItem.getAttribute(`href`)||!i.consume(t.viewItem,{attributes:[`data-ckbox-resource-id`]}))return;let a=t.viewItem.getAttribute(`data-ckbox-resource-id`);if(a)if(t.modelRange)for(let e of t.modelRange.getItems())e.is(`$textProxy`)&&(e=e.textNode),XM(e)&&r.setAttribute(`ckboxLinkId`,a,e);else{let e=t.modelCursor.nodeBefore||t.modelCursor.parent;r.setAttribute(`ckboxLinkId`,a,e)}},{priority:`low`})}),e.conversion.for(`downcast`).attributeToAttribute({model:`ckboxImageId`,view:`data-ckbox-resource-id`}),e.conversion.for(`upcast`).elementToAttribute({model:{key:`ckboxImageId`,value:e=>e.getAttribute(`data-ckbox-resource-id`)},view:{attributes:{"data-ckbox-resource-id":/[\s\S]+/}}});let t=e.commands.get(`replaceImageSource`);t&&this.listenTo(t,`cleanupImage`,(e,[t,n])=>{t.removeAttribute(`ckboxImageId`,n)})}_initFixers(){let e=this.editor,t=e.model,n=t.document.selection;t.document.registerPostFixer(KM(e)),t.document.registerPostFixer(qM(n))}};function KM(e){return t=>{let n=!1,r=e.model,i=e.commands.get(`ckbox`);if(!i)return n;for(let e of r.document.differ.getChanges()){if(e.type!==`insert`&&e.type!==`attribute`)continue;let r=e.type===`insert`?new B(e.position,e.position.getShiftedBy(e.length)):e.range,a=e.type===`attribute`&&e.attributeKey===`linkHref`&&e.attributeNewValue===null;for(let e of r.getItems()){if(a&&e.hasAttribute(`ckboxLinkId`)){t.removeAttribute(`ckboxLinkId`,e),n=!0;continue}let r=JM(e,i._chosenAssets);for(let i of r){let r=i.type===`image`?`ckboxImageId`:`ckboxLinkId`;i.id!==e.getAttribute(r)&&(t.setAttribute(r,i.id,e),n=!0)}}}return n}}function qM(e){return t=>!e.hasAttribute(`linkHref`)&&e.hasAttribute(`ckboxLinkId`)?(t.removeSelectionAttribute(`ckboxLinkId`),!0):!1}function JM(e,t){let n=e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`),r=e.hasAttribute(`linkHref`);return[...t].filter(t=>{if(t.type===`image`&&n)return t.attributes.imageFallbackUrl===e.getAttribute(`src`);if(t.type===`link`&&r)return t.attributes.linkHref===e.getAttribute(`linkHref`)})}function YM(e,t){let n=e.createAttributeElement(`a`,{"data-ckbox-resource-id":t},{priority:5});return e.setCustomProperty(`link`,!0,n),n}function XM(e){return!!(e.is(`$text`)||e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`))}function ZM(){return!!window.CKBox}async function QM(e){let t=e.plugins.get(VM),n=e.config.get(`ckbox.serviceOrigin`),r=new URL(`permissions`,n),{value:i}=await t.getToken(),a=await gM({url:r,authorization:i,signal:new AbortController().signal});return Object.values(a).some(e=>e[`asset:create`])}var $M=class extends F{static get pluginName(){return`CKBox`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,sO]}};function eN(e){let t=tN(e);return e=>e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`)?e.hasAttribute(`ckboxImageId`)?!0:e.hasAttribute(`src`)?t(e.getAttribute(`src`)):!1:!1}function tN(e){if(Array.isArray(e)){let t=e.map(tN);return e=>t.some(t=>t(e))}if(e==`origin`){let e=u.window.location.origin;return t=>new URL(t,u.document.baseURI).origin==e}return typeof e==`function`?e:e instanceof RegExp?t=>!!(t.match(e)||t.replace(/^https?:\/\//,``).match(e)):()=>!1}var nN=class extends I{_wrapper=null;_processInProgress=new Set;_canEdit;_prepareOptions;_updateUiDelayed=Yi(()=>this.editor.ui.update(),0);constructor(e){super(e),this.value=!1,this._canEdit=eN(e.config.get(`ckbox.allowExternalImagesEditing`)),this._prepareOptions=ur((e,t)=>this._prepareOptionsAbortable(e,t)),this._prepareListeners()}refresh(){let e=this.editor;this.value=this._getValue();let t=e.model.document.selection.getSelectedElement();this.isEnabled=!!t&&this._canEdit(t)&&!this._checkIfElementIsBeingProcessed(t)}execute(){if(this._getValue())return;let e=mr(document,`div`,{class:`ck ckbox-wrapper`});this._wrapper=e,this.value=!0,document.body.appendChild(this._wrapper);let t={element:this.editor.model.document.selection.getSelectedElement(),controller:new AbortController};this._prepareOptions(t).then(t=>window.CKBox.mountImageEditor(e,t),e=>{let t=this.editor,n=t.t;t.plugins.get(IC).showWarning(n(`Failed to determine category of edited image.`),{namespace:`ckbox`}),console.error(e),this._handleImageEditorClose()})}destroy(){this._handleImageEditorClose(),this._prepareOptions.abort(),this._updateUiDelayed.cancel();for(let e of this._processInProgress.values())e.controller.abort();super.destroy()}_getValue(){return this._wrapper!==null}async _prepareOptionsAbortable(e,t){let n=this.editor,r=n.config.get(`ckbox`),i=n.plugins.get(VM),{element:a}=t,o,s=a.getAttribute(`ckboxImageId`);if(s)o={assetId:s};else{let t=new URL(a.getAttribute(`src`),document.baseURI).href;o={imageUrl:t,uploadCategoryId:await i.getCategoryIdForFile(t,{signal:e})}}return{...o,imageEditing:{allowOverwrite:!1},tokenUrl:r.tokenUrl,language:r.language,...r.serviceOrigin&&{serviceOrigin:r.serviceOrigin},onClose:()=>this._handleImageEditorClose(),onSave:e=>this._handleImageEditorSave(t,e)}}_prepareListeners(){this.listenTo(this.editor.model.document,`change:data`,()=>{this._getProcessingStatesOfDeletedImages().forEach(e=>{e.controller.abort()})})}_getProcessingStatesOfDeletedImages(){let e=[];for(let t of this._processInProgress.values())t.element.root.rootName==`$graveyard`&&e.push(t);return e}_checkIfElementIsBeingProcessed(e){for(let{element:t}of this._processInProgress)if($t(t,e))return!0;return!1}_handleImageEditorClose(){this._wrapper&&(this._wrapper.remove(),this._wrapper=null,this.editor.editing.view.focus(),this._updateUiDelayed(),this.refresh())}_handleImageEditorSave(e,t){let n=this.editor.locale.t,r=this.editor.plugins.get(IC),i=this.editor.plugins.get(wg),a=i.add(n(`Processing the edited image.`));this._processInProgress.add(e),this._showImageProcessingIndicator(e.element,t),this.refresh(),this._waitForAssetProcessed(t.data.id,e.controller.signal).then(t=>{this._replaceImage(e.element,t)},t=>{this.editor.editing.reconvertItem(e.element),!e.controller.signal.aborted&&(!t||t instanceof w?r.showWarning(n(`Server failed to process the image.`),{namespace:`ckbox`}):console.error(t))}).finally(()=>{this._processInProgress.delete(e),i.remove(a),this.refresh()})}async _getAssetStatusFromServer(e,t){let n=this.editor.plugins.get(VM),r=await gM({url:new URL(`assets/`+e,this.editor.config.get(`ckbox.serviceOrigin`)),signal:t,authorization:(await n.getToken()).value}),i=r.metadata.metadataProcessingStatus;if(!i||i==`queued`)throw new w(`ckbox-image-not-processed`);return{data:{...r}}}async _waitForAssetProcessed(e,t){let n=await Ki(()=>this._getAssetStatusFromServer(e,t),{signal:t,maxAttempts:5});if(n.data.metadata.metadataProcessingStatus!=`success`)throw new w(`ckbox-image-processing-failed`);return n}_showImageProcessingIndicator(e,t){let n=this.editor;n.editing.view.change(r=>{let i=n.editing.mapper.toViewElement(e),a=this.editor.plugins.get(`ImageUtils`).findViewImgElement(i);r.removeStyle(`aspect-ratio`,a),r.setAttribute(`width`,t.data.metadata.width,a),r.setAttribute(`height`,t.data.metadata.height,a),r.setStyle(`width`,`${t.data.metadata.width}px`,a),r.setStyle(`height`,`${t.data.metadata.height}px`,a),r.addClass(`image-processing`,i)})}_replaceImage(e,t){let n=this.editor,{imageFallbackUrl:r,imageSources:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=CM(t),c=Array.from(n.model.document.selection.getRanges());n.model.change(l=>{l.setSelection(e,`on`),n.execute(`insertImage`,{imageType:e.is(`element`,`imageInline`)?`imageInline`:null,source:{src:r,sources:i,width:a,height:o,...s?{placeholder:s}:null,...e.hasAttribute(`alt`)?{alt:e.getAttribute(`alt`)}:null}});let u=e.getChildren();e=n.model.document.selection.getSelectedElement();for(let t of u)l.append(l.cloneElement(t),e);l.setAttribute(`ckboxImageId`,t.data.id,e),l.setSelection(c)})}},rN=class extends F{static get pluginName(){return`CKBoxImageEditEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,VM,wg,IC,Kk,gA]}init(){let{editor:e}=this;e.commands.add(`ckboxImageEdit`,new nN(e))}},iN=class extends F{static get pluginName(){return`CKBoxImageEditUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckboxImageEdit`,t=>{let n=e.commands.get(`ckboxImageEdit`),r=e.commands.get(`uploadImage`),i=new H(t),a=t.t;return i.set({icon:u_,tooltip:!0}),i.bind(`label`).to(r,`isAccessAllowed`,e=>a(e?`Edit image`:`You have no image editing permissions.`)),i.bind(`isOn`).to(n,`value`,n,`isEnabled`,(e,t)=>e&&t),i.bind(`isEnabled`).to(n),this.listenTo(i,`execute`,()=>{e.execute(`ckboxImageEdit`),e.editing.view.focus()}),i})}},aN=class extends F{static get pluginName(){return`CKBoxImageEdit`}static get isOfficialPlugin(){return!0}static get requires(){return[rN,iN]}},oN=class extends F{static get pluginName(){return`CKFinderUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckfinder`,()=>this._createFileToolbarButton()),e.ui.componentFactory.add(`menuBar:ckfinder`,()=>this._createFileMenuBarButton()),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`assetManager`,observable:()=>e.commands.get(`ckfinder`),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=new e(n),i=t.commands.get(`ckfinder`);return r.bind(`isEnabled`).to(i),r.on(`execute`,()=>{t.execute(`ckfinder`),t.editing.view.focus()}),r}_createFileToolbarButton(){let e=this.editor.locale.t,t=this._createButton(H);return t.icon=a_,t.label=e(`Insert image or file`),t.tooltip=!0,t}_createImageToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace image with file manager`:`Insert image with file manager`)),n.tooltip=!0,n}_createImageDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace with file manager`:`Insert with file manager`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createFileMenuBarButton(){let e=this.editor.locale.t,t=this._createButton(U);return t.icon=a_,t.withText=!0,t.label=e(`File`),t}_createImageMenuBarButton(e){let t=this.editor.locale.t,n=this.editor.locale.t,r=this._createButton(U);switch(r.icon=z_,r.withText=!0,e){case`insertOnly`:r.label=t(`Image`);break;case`insertNested`:r.label=n(`With file manager`);break}return r}},sN=class extends I{constructor(e){super(e),this.affectsData=!1,this.stopListening(this.editor.model.document,`change`),this.listenTo(this.editor.model.document,`change`,()=>this.refresh(),{priority:`low`})}refresh(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);this.isEnabled=e.isEnabled||t.isEnabled}execute(){let e=this.editor,t=this.editor.config.get(`ckfinder.openerMethod`)||`modal`;if(t!=`popup`&&t!=`modal`)throw new w(`ckfinder-unknown-openermethod`,e);let n=this.editor.config.get(`ckfinder.options`)||{};n.chooseFiles=!0;let r=n.onInit;n.language||=e.locale.uiLanguage,n.onInit=t=>{r&&r(t),t.on(`files:choose`,n=>{let r=n.data.files.toArray(),i=r.filter(e=>!e.isImage()),a=r.filter(e=>e.isImage());for(let t of i)e.execute(`link`,t.getUrl());let o=[];for(let e of a){let n=e.getUrl();o.push(n||t.request(`file:getProxyUrl`,{file:e}))}o.length&&cN(e,o)}),t.on(`file:choose:resizedImage`,t=>{let n=t.data.resizedUrl;if(!n){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not obtain resized image URL.`),{title:n(`Selecting resized image failed`),namespace:`ckfinder`});return}cN(e,[n])})},window.CKFinder[t](n)}};function cN(e,t){if(!e.commands.get(`insertImage`).isEnabled){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not insert image at the current position.`),{title:n(`Inserting image failed`),namespace:`ckfinder`});return}e.execute(`insertImage`,{source:t})}var lN=class extends F{static get pluginName(){return`CKFinderEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[IC,uk]}init(){let e=this.editor;if(!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`))throw new w(`ckfinder-missing-image-plugin`,e);e.commands.add(`ckfinder`,new sN(e))}},uN=class extends F{static get pluginName(){return`CKFinder`}static get isOfficialPlugin(){return!0}static get requires(){return[Ok,jw,lN,oN]}};function dN(e){let t=e.t,n=e.config.get(`codeBlock.languages`);for(let e of n)e.label===`Plain text`&&(e.label=t(`Plain text`)),e.class===void 0&&(e.class=`language-${e.language}`);return n}function fN(e,t,n){let r={};for(let i of e)if(t===`class`){let e=i[t].split(` `).shift();r[e]=i[n]}else r[i[t]]=i[n];return r}function pN(e){return e.data.match(/^(\s*)/)[0]}function mN(e,t){let n=e.createDocumentFragment(),r=t.split(` -`),i=r.reduce((t,n,i)=>(t.push(n),i!e.isEqual(o))&&n.push(o)}return n}function gN(e){let t=j(e.getSelectedBlocks());return!!t&&t.is(`element`,`codeBlock`)}function _N(e,t){return t.is(`rootElement`)||e.isLimit(t)?!1:e.checkChild(t.parent,`codeBlock`)}function vN(e,t,n,r){let i=fN(t,`language`,`label`),a=n.getAttribute(`language`);if(a in i){let t=i[a];return e(r===`enter`?`Entering %0 code snippet`:`Leaving %0 code snippet`,t)}return e(r===`enter`?`Entering code snippet`:`Leaving code snippet`)}function yN(e,t){for(e.textNode&&(e=t.createPositionBefore(e.textNode));e.nodeBefore&&!e.nodeBefore.is(`element`,`softBreak`);)e=t.createPositionBefore(e.nodeBefore);let n=e.nodeAfter;return n&&n.is(`$text`)?n:null}var bN=class extends I{_lastLanguage;constructor(e){super(e),this._lastLanguage=null}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=dN(t)[0],a=Array.from(r.getSelectedBlocks()),o=e.forceValue==null?!this.value:e.forceValue,s=xN(e,this._lastLanguage,i.language);n.change(e=>{o?this._applyCodeBlock(e,a,s):this._removeCodeBlock(e,a)})}_getValue(){let e=this.editor.model.document.selection,t=j(e.getSelectedBlocks());return t?.is(`element`,`codeBlock`)?t.getAttribute(`language`):!1}_checkEnabled(){if(this.value)return!0;let e=this.editor.model.document.selection,t=this.editor.model.schema,n=j(e.getSelectedBlocks());return n?_N(t,n):!1}_applyCodeBlock(e,t,n){this._lastLanguage=n;let r=this.editor.model.schema,i=t.filter(e=>_N(r,e));for(let t of i)e.rename(t,`codeBlock`),e.setAttribute(`language`,n,t),r.removeDisallowedAttributes([t],e),Array.from(t.getChildren()).filter(e=>!r.checkChild(t,e)).forEach(t=>e.remove(t));i.reverse().forEach((t,n)=>{let r=i[n+1];t.previousSibling===r&&(e.appendElement(`softBreak`,r),e.merge(e.createPositionBefore(t)))})}_removeCodeBlock(e,t){let n=t.filter(e=>e.is(`element`,`codeBlock`));for(let t of n){let n=e.createRangeOn(t);for(let t of Array.from(n.getItems()).reverse())if(t.is(`element`,`softBreak`)&&t.parent.is(`element`,`codeBlock`)){let{position:n}=e.split(e.createPositionBefore(t)),r=n.nodeAfter;e.rename(r,`paragraph`),e.removeAttribute(`language`,r),e.remove(t)}e.rename(t,`paragraph`),e.removeAttribute(`language`,t)}}};function xN(e,t,n){return e.language?e.language:e.usePreviousLanguageChoice&&t?t:n}var SN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(t=>{let n=hN(e);for(let r of n){let n=t.createText(this._indentSequence);e.insertContent(n,r)}})}_checkEnabled(){return this._indentSequence?gN(this.editor.model.document.selection):!1}},CN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(()=>{let t=hN(e);for(let n of t){let t=wN(e,n,this._indentSequence);t&&e.deleteContent(e.createSelection(t))}})}_checkEnabled(){if(!this._indentSequence)return!1;let e=this.editor.model;return gN(e.document.selection)?hN(e).some(t=>wN(e,t,this._indentSequence)):!1}};function wN(e,t,n){let r=yN(t,e);if(!r)return null;let i=pN(r),a=i.lastIndexOf(n);if(a+n.length!==i.length||a===-1)return null;let{parent:o,startOffset:s}=r;return e.createRange(e.createPositionAt(o,s+a),e.createPositionAt(o,s+a+n.length))}function TN(e,t,n=!1){let r=fN(t,`language`,`class`),i=fN(t,`language`,`label`);return(t,a,o)=>{let{writer:s,mapper:c,consumable:l}=o;if(!l.consume(a.item,`insert`))return;let u=a.item.getAttribute(`language`),d=c.toViewPosition(e.createPositionBefore(a.item)),f={};n&&(f[`data-language`]=i[u],f.spellcheck=`false`);let p=r[u]?{class:r[u]}:void 0,m=s.createContainerElement(`code`,p),h=s.createContainerElement(`pre`,f,m);s.insert(d,h),c.bindElements(a.item,m)}}function EN(e){return(t,n,r)=>{if(n.item.parent.name!==`codeBlock`)return;let{writer:i,mapper:a,consumable:o}=r;if(!o.consume(n.item,`insert`))return;let s=a.toViewPosition(e.createPositionBefore(n.item));i.insert(s,i.createText(` -`))}}function DN(e,t){let n=fN(t,`class`,`language`),r=t[0].language;return(e,t,i)=>{let a=t.viewItem,o=a.parent;if(!o||!o.is(`element`,`pre`)||t.modelCursor.findAncestor(`codeBlock`))return;let{consumable:s,writer:c}=i;if(!s.test(a,{name:!0}))return;let l=c.createElement(`codeBlock`),u=[...a.getClassNames()];u.length||u.push(``);for(let e of u){let t=n[e];if(t){s.consume(a,{classes:[e]}),c.setAttribute(`language`,t,l);break}}l.hasAttribute(`language`)||c.setAttribute(`language`,r,l),i.convertChildren(a,l),i.safeInsert(l,t.modelCursor)&&(s.consume(a,{name:!0}),i.updateConversionResult(l,t))}}function ON(){return(e,t,{consumable:n,writer:r})=>{let i=t.modelCursor;if(!n.test(t.viewItem)||!i.findAncestor(`codeBlock`))return;n.consume(t.viewItem);let a=t.viewItem.data.split(` -`).map(e=>r.createText(e)),o=a[a.length-1];for(let e of a)if(r.insert(e,i),i=i.getShiftedBy(e.offsetSize),e!==o){let e=r.createElement(`softBreak`);r.insert(e,i),i=r.createPositionAfter(e)}t.modelRange=r.createRange(t.modelCursor,i),t.modelCursor=i}}function kN(){return(e,t,{consumable:n})=>{let r=t.viewItem;if(r.findAncestor(`pre`))return;let i=Array.from(r.getChildren()),a=i.find(e=>e.is(`element`,`code`));if(a)for(let e of i)e===a||!e.is(`$text`)||n.consume(e,{name:!0})}}const AN=`paragraph`;var jN=class extends F{static get pluginName(){return`CodeBlockEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[kE]}constructor(e){super(e),e.config.define(`codeBlock`,{languages:[{language:`plaintext`,label:`Plain text`},{language:`c`,label:`C`},{language:`cs`,label:`C#`},{language:`cpp`,label:`C++`},{language:`css`,label:`CSS`},{language:`diff`,label:`Diff`},{language:`go`,label:`Go`},{language:`html`,label:`HTML`},{language:`java`,label:`Java`},{language:`javascript`,label:`JavaScript`},{language:`php`,label:`PHP`},{language:`python`,label:`Python`},{language:`ruby`,label:`Ruby`},{language:`typescript`,label:`TypeScript`},{language:`xml`,label:`XML`}],indentSequence:` `})}init(){let e=this.editor,t=e.model.schema,n=e.model,r=e.editing.view,i=dN(e);e.commands.add(`codeBlock`,new bN(e)),e.commands.add(`indentCodeBlock`,new SN(e)),e.commands.add(`outdentCodeBlock`,new CN(e)),this.listenTo(r.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentCodeBlock`:`indentCodeBlock`;e.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`pre`}),t.register(`codeBlock`,{allowWhere:`$block`,allowChildren:`$text`,disallowChildren:`$inlineObject`,allowAttributes:[`language`],allowAttributesOf:`$listItem`,isBlock:!0}),t.addAttributeCheck((e,n)=>{let r=e.getItem(e.length-2);if(t.getAttributeProperties(n).isFormatting&&r&&r.name==`codeBlock`)return!1}),e.editing.downcastDispatcher.on(`insert:codeBlock`,TN(n,i,!0)),e.data.downcastDispatcher.on(`insert:codeBlock`,TN(n,i)),e.data.downcastDispatcher.on(`insert:softBreak`,EN(n),{priority:`high`}),e.data.upcastDispatcher.on(`element:code`,DN(r,i)),e.data.upcastDispatcher.on(`text`,ON()),e.data.upcastDispatcher.on(`element:pre`,kN(),{priority:`high`}),this.listenTo(e.editing.view.document,`clipboardInput`,(t,r)=>{let i=n.createRange(n.document.selection.anchor);if(r.targetRanges&&(i=e.editing.mapper.toModelRange(r.targetRanges[0])),!i.start.parent.is(`element`,`codeBlock`))return;let a=r.dataTransfer.getData(`text/plain`);r.content=mN(new Np(e.editing.view.document),a)}),e.plugins.has(`ClipboardPipeline`)&&e.plugins.get(_O).on(`contentInsertion`,(n,r)=>{let i=e.model,a=i.document.selection;a.anchor.parent.is(`element`,`codeBlock`)&&i.change(e=>{let n=e.createRangeIn(r.content);for(let r of[...n.getItems()])r.is(`node`)&&!t.checkChild(a.anchor,r)&&e.remove(r)})}),this.listenTo(n,`getSelectedContent`,(e,[r])=>{let i=r.anchor;r.isCollapsed||!i.parent.is(`element`,`codeBlock`)||!i.hasSameParentAs(r.focus)||n.change(n=>{let a=e.return;if(i.parent.is(`element`)&&(a.childCount>1||r.containsEntireContent(i.parent))){let t=n.createElement(`codeBlock`,i.parent.getAttributes());n.append(a,t);let r=n.createDocumentFragment();n.append(t,r),e.return=r;return}let o=a.getChild(0);t.checkAttribute(o,`code`)&&n.setAttribute(`code`,!0,o)})})}afterInit(){let e=this.editor,t=e.commands,n=t.get(`indent`),r=t.get(`outdent`);n&&n.registerChildCommand(t.get(`indentCodeBlock`),{priority:`highest`}),r&&r.registerChildCommand(t.get(`outdentCodeBlock`)),this.listenTo(e.editing.view.document,`enter`,(t,n)=>{e.model.document.selection.getLastPosition().parent.is(`element`,`codeBlock`)&&(!NN(e,n.isSoft)&&!PN(e,n.isSoft)&&MN(e),n.preventDefault(),t.stop())},{context:`pre`}),this._initAriaAnnouncements()}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=dN(this.editor),i=null;e.document.selection.on(`change:range`,()=>{let a=e.document.selection.focus.parent;!t||i===a||!a.is(`element`)||(i&&i.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,i,`leave`)),a.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,a,`enter`)),i=a)})}};function MN(e){let t=e.model,n=t.document,r=n.selection.getLastPosition(),i,a=yN(r,t);a&&a.is(`$text`)&&(i=pN(a)),e.model.change(t=>{e.execute(`shiftEnter`),i&&t.insertText(i,n.selection.anchor)})}function NN(e,t){let n=e.model.document,r=e.editing.view,i=n.selection.getLastPosition(),a=i.nodeAfter;return t||!n.selection.isCollapsed||!i.isAtStart||!IN(a)?!1:(e.model.change(t=>{e.execute(`enter`);let r=n.selection.anchor.parent.previousSibling;t.rename(r,AN),t.setSelection(r,`in`),e.model.schema.removeDisallowedAttributes([r],t),t.remove(a)}),r.scrollToTheSelection(),!0)}function PN(e,t){let n=e.model,r=n.document,i=e.editing.view,a=r.selection.getLastPosition(),o=a.nodeBefore,s;if(t||!r.selection.isCollapsed||!a.isAtEnd||!o||!o.previousSibling)return!1;if(IN(o)&&IN(o.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&IN(o.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&FN(o.previousSibling.previousSibling)&&o.previousSibling.previousSibling&&IN(o.previousSibling.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling.previousSibling),n.createPositionAfter(o));else return!1;return e.model.change(t=>{t.remove(s),e.execute(`enter`);let n=r.selection.anchor.parent;t.rename(n,AN),e.model.schema.removeDisallowedAttributes([n],t)}),i.scrollToTheSelection(),!0}function FN(e){return e&&e.is(`$text`)&&!e.data.match(/\S/)}function IN(e){return e&&e.is(`element`,`softBreak`)}var LN=class extends F{static get pluginName(){return`CodeBlockUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.ui.componentFactory,r=dN(e),i=this._getLanguageListItemDefinitions(r),a=e.commands.get(`codeBlock`);n.add(`codeBlock`,n=>{let r=Nx(n,Mx),o=r.buttonView,s=t(`Insert code block`);return o.set({label:s,tooltip:!0,icon:d_,isToggleable:!0}),o.bind(`isOn`).to(a,`value`,e=>!!e),o.on(`execute`,()=>{e.execute(`codeBlock`,{usePreviousLanguageChoice:!0}),e.editing.view.focus()}),r.on(`execute`,t=>{e.execute(`codeBlock`,{language:t.source._codeBlockLanguage,forceValue:!0}),e.editing.view.focus()}),r.class=`ck-code-block-dropdown`,r.bind(`isEnabled`).to(a),Lx(r,i,{role:`menu`,ariaLabel:s}),r}),n.add(`menuBar:codeBlock`,n=>{let r=new uw(n);r.buttonView.set({role:`menuitem`,label:t(`Code block`),icon:d_}),r.bind(`isEnabled`).to(a);let o=new dw(n);o.set({ariaLabel:t(`Insert code block`)});for(let t of i){let i=new rC(n,r),s=new U(n);s.bind(...Object.keys(t.model)).to(t.model),s.set({isToggleable:!0,role:`menuitemcheckbox`}),s.delegate(`execute`).to(r),s.on(`execute`,()=>{e.execute(`codeBlock`,{language:t.model._codeBlockLanguage,forceValue:a.value!=t.model._codeBlockLanguage}),e.editing.view.focus()}),i.children.add(s),o.items.add(i)}return r.panelView.children.add(o),r})}_getLanguageListItemDefinitions(e){let t=this.editor.commands.get(`codeBlock`),n=new Fi;for(let r of e){let e={type:`button`,model:new RC({_codeBlockLanguage:r.language,label:r.label,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,t=>t===e.model._codeBlockLanguage),n.add(e)}return n}},RN=class extends F{static get requires(){return[jN,LN]}static get pluginName(){return`CodeBlock`}static get isOfficialPlugin(){return!0}},zN=class extends F{_uploadGateway;static get pluginName(){return`CloudServicesUploadAdapter`}static get isOfficialPlugin(){return!0}static get requires(){return[BM,bw]}init(){let e=this.editor,t=e.plugins.get(BM),n=t.token,r=t.uploadUrl;if(!n)return;let i=e.plugins.get(`CloudServicesCore`);this._uploadGateway=i.createUploadGateway(n,r),e.plugins.get(bw).createUploadAdapter=e=>new BN(this._uploadGateway,e)}},BN=class{uploadGateway;loader;fileUploader;constructor(e,t){this.uploadGateway=e,this.loader=t}upload(){return this.loader.file.then(e=>(this.fileUploader=this.uploadGateway.upload(e),this.fileUploader.on(`progress`,(e,t)=>{this.loader.uploadTotal=t.total,this.loader.uploaded=t.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}},VN=class extends F{static get pluginName(){return`EasyImage`}static get isOfficialPlugin(){return!0}static get requires(){return[zN,nj]}init(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&T(`easy-image-image-feature-missing`,e)}},HN=class extends TC{view;constructor(e,t){super(e),this.view=t}get element(){return this.view.editable.element}init(){let e=this.editor,t=this.view,n=e.editing.view,r=t.editable,i=n.document.getRoot();r.name=i.rootName,r.isInlineRoot=!Cg(e,i.rootName),t.render();let a=r.element;this.setEditableElement(r.name,a),r.bind(`isFocused`).to(this.focusTracker),n.attachDomRoot(a),this._initPlaceholder(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}},UN=class extends DC{editable;menuBarView;constructor(e,t,n,r){super(e),this.editable=new jC(e,t,n,{label:r}),this.menuBarView=new gw(e),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}render(){super.render(),this.registerChild(this.editable),this.registerChild(this.menuBarView)}};const WN=sg(rg);var GN=class extends WN{static get editorName(){return`BalloonEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;KN(i)&&(this.sourceElement=i,cg(this,i));let a=this.config.get(`plugins`);a.push(nw),this.config.set(`plugins`,a),this.config.define(`balloonToolbar`,this.config.get(`toolbar`)),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let o=new UN(this.locale,this.editing.view,i,this.config.get(`roots`).main.label);this.ui=new HN(this,o),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function KN(e){return jn(e)}var qN=class extends TC{view;_toolbarConfig;_elementReplacer;constructor(e,t){super(e),this.view=t,this._toolbarConfig=Ex(e.config.get(`toolbar`)),this._elementReplacer=new lr,this.listenTo(e.editing.view,`scrollToTheSelection`,this._handleScrollToTheSelectionWithStickyPanel.bind(this))}get element(){return this.view.element}init(e){let t=this.editor,n=this.view,r=t.editing.view,i=n.editable,a=r.document.getRoot();i.name=a.rootName,i.isInlineRoot=!Cg(t,a.rootName),n.render();let o=i.element;this.setEditableElement(i.name,o),n.editable.bind(`isFocused`).to(this.focusTracker),r.attachDomRoot(o),e&&this._elementReplacer.replace(e,this.element),this._initPlaceholder(),this._initToolbar(),n.menuBarView&&this.initMenuBar(n.menuBarView),this._initDialogPluginIntegration(),this._initContextualBalloonIntegration(),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;this._elementReplacer.restore(),t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initToolbar(){let e=this.view;e.stickyPanel.bind(`isActive`).to(this.focusTracker,`isFocused`),e.stickyPanel.limiterElement=e.element,e.stickyPanel.bind(`viewportTopOffset`).to(this,`viewportOffset`,({visualTop:e})=>e||0),e.toolbar.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(e.toolbar)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.sourceElement,i,a=e.config.get(`roots`)[this.view.editable.name].placeholder;a&&(i=a),!i&&r&&r.tagName.toLowerCase()===`textarea`&&(i=r.getAttribute(`placeholder`)),i&&(n.placeholder=i),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}_initContextualBalloonIntegration(){if(!this.editor.plugins.has(`ContextualBalloon`))return;let{stickyPanel:e}=this.view,t=this.editor.plugins.get(`ContextualBalloon`);t.on(`getPositionOptions`,t=>{let n=t.return;if(!n||!e.isSticky||!e.element)return;let r=new O(e.element).height,i=typeof n.target==`function`?n.target():n.target,a=typeof n.limiter==`function`?n.limiter():n.limiter;if(i&&a&&new O(i).height>=new O(a).height-r)return;let o={...n.viewportOffsetConfig},s=(o.top||0)+r;t.return={...n,viewportOffsetConfig:{...o,top:s}}},{priority:`low`});let n=()=>{t.visibleView&&t.updatePosition()};this.listenTo(e,`change:isSticky`,n),this.listenTo(this.editor.ui,`change:viewportOffset`,n)}_handleScrollToTheSelectionWithStickyPanel(e,t,n){let r=this.view.stickyPanel;if(r.isSticky){let e=new O(r.element).height;t.viewportOffset.top+=e}else{let e=()=>{this.editor.editing.view.scrollToTheSelection(n)};this.listenTo(r,`change:isSticky`,e),setTimeout(()=>{this.stopListening(r,`change:isSticky`,e)},20)}}_initDialogPluginIntegration(){if(!this.editor.plugins.has(`Dialog`))return;let e=this.view.stickyPanel,t=this.editor.plugins.get(`Dialog`);t.on(`show`,()=>{let n=t.view;n.on(`moveTo`,(t,r)=>{if(!e.isSticky||n.wasMoved||n.isModal)return;let i=new O(e.contentPanelElement);r[1]e||0),t.listenTo(e.ui,`update`,()=>{t.panel.isVisible&&t.panel.pin({target:n,positions:t.panelPositions})}),r.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(r)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}};const iP=Wr(`px`);var aP=class extends DC{toolbar;panel;panelPositions;editable;_resizeObserver;constructor(e,t,n,r={}){super(e),this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull,isFloating:!0}),r.useMenuBar&&(this.menuBarView=new gw(e)),this.set(`viewportTopOffset`,0),this.panel=new ab(e),this.panelPositions=this._getPanelPositions(),this.panel.extendTemplate({attributes:{class:`ck-toolbar-container`}}),this.editable=new jC(e,t,n,{label:r.label}),this._resizeObserver=null}render(){if(super.render(),this.body.add(this.panel),this.registerChild(this.editable),this.menuBarView?this.panel.content.addMany([this.menuBarView,this.toolbar]):this.panel.content.add(this.toolbar),this.toolbar.options.shouldGroupWhenFull){let e=this.editable.element;this._resizeObserver=new Hr(e,()=>{this.toolbar.maxWidth=iP(new O(e).width)})}}destroy(){super.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_getPanelPositionTop(e,t){let n;return n=e.top>t.height+this.viewportTopOffset?e.top-t.height:e.bottom>t.height+this.viewportTopOffset+50?this.viewportTopOffset:e.bottom,n}_getPanelPositions(){let e=[(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left,name:`toolbar_west`,config:{withArrow:!1}}),(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left+e.width-t.width,name:`toolbar_east`,config:{withArrow:!1}})];return this.locale.uiLanguageDirection===`ltr`?e:e.reverse()}};const oP=sg(rg);var sP=class extends oP{static get editorName(){return`InlineEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;cP(i)&&(this.sourceElement=i,cg(this,i)),this.config.define(`menuBar.isVisible`,!1),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let a=!this.config.get(`toolbar.shouldNotGroupWhenFull`),o=this.config.get(`menuBar`),s=new aP(this.locale,this.editing.view,i,{shouldToolbarGroupWhenFull:a,useMenuBar:o.isVisible,label:this.config.get(`roots`).main.label});this.ui=new rP(this,s),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function cP(e){return jn(e)}var lP=class extends TC{view;_lastFocusedEditableElement;constructor(e,t){super(e),this.view=t,this._lastFocusedEditableElement=null}init(){let e=this.view,t=this.editor;for(let e of Object.values(this.view.editables))e.isInlineRoot=!Cg(t,e.name);e.render(),this.focusTracker.on(`change:focusedElement`,(e,t,n)=>{for(let e of Object.values(this.view.editables))n===e.element&&(this._lastFocusedEditableElement=e.element)}),this.focusTracker.on(`change:isFocused`,(e,t,n)=>{n||(this._lastFocusedEditableElement=null)});for(let e of Object.values(this.view.editables))this.addEditable(e);this._initToolbar(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}addEditable(e,t){let n=e.element;this.editor.editing.view.attachDomRoot(n,e.name),this.setEditableElement(e.name,n),e.bind(`isFocused`).to(this.focusTracker,`isFocused`,this.focusTracker,`focusedElement`,(e,t)=>e?t===n?!0:this._lastFocusedEditableElement===n:!1),this._initPlaceholder(e,t)}removeEditable(e){let t=this.editor.editing.view;t.getDomRoot(e.name)&&t.detachDomRoot(e.name),e.unbind(`isFocused`),this.removeEditableElement(e.name)}destroy(){super.destroy();for(let e of Object.values(this.view.editables))this.removeEditable(e);this.view.destroy()}_initToolbar(){let e=this.editor,t=this.view;t.toolbar.fillFromConfig(e.config.get(`toolbar`),this.componentFactory),this.addToolbar(t.toolbar)}_initPlaceholder(e,t){t||=this.editor.config.get(`roots`)[e.name]?.placeholder;let n=this.editor.editing.view,r=n.document.getRoot(e.name);t&&(r.placeholder=t),yo({view:n,element:r,isDirectHost:e.isInlineRoot,keepOnFocus:!0})}},uP=class extends DC{toolbar;editables;editable;menuBarView;_editingView;constructor(e,t,n,r={}){super(e),this._editingView=t,this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull}),this.menuBarView=new gw(e),this.editables={};for(let e of n){let t=r.editableElements?.[e],{label:n}=r;typeof n==`object`&&(n=n[e]),this.createEditable(e,t,n)}this.editable=Object.values(this.editables)[0],this.toolbar.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}}),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}createEditable(e,t,n){let r=new jC(this.locale,this._editingView,t,{label:n});return this.editables[e]=r,r.name=e,this.isRendered&&this.registerChild(r),r}removeEditable(e){let t=this.editables[e];this.isRendered&&this.deregisterChild(t),delete this.editables[e],t.destroy()}render(){super.render(),this.registerChild(Object.values(this.editables)),this.registerChild(this.toolbar),this.registerChild(this.menuBarView)}},dP=class extends rg{static get editorName(){return`MultiRootEditor`}ui;sourceElements;_readOnlyRootLocks=new Map;constructor(e,t={}){let{sourceElementsOrData:n,editorConfig:r}=pg(e,t);if(super(r),dg(n,this.config,!1),mP(this.config),hP(this.config),this.config.get(`lazyRoots`))throw new w(`multi-root-editor-root-deprecated-config-lazy-roots`,null);let i=Object.entries(this.config.get(`roots`));this.sourceElements={};let a={};for(let[e,t]of i){let n=vP(t);n&&(_P(n)&&(this.sourceElements[e]=n,cg(this,n)),a[e]=n)}this.editing.view.document.roots.on(`add`,(e,t)=>{t.unbind(`isReadOnly`),t.bind(`isReadOnly`).to(this.editing.view.document,`isReadOnly`,e=>e||this._readOnlyRootLocks.has(t.rootName)),t.on(`change:isReadOnly`,(e,n,r)=>{let i=this.editing.view.createRangeIn(t);for(let e of i.getItems())e.is(`editableElement`)&&(e.unbind(`isReadOnly`),e.isReadOnly=r)})});for(let[e,t]of i){let n=this.model.document.createRoot(t.modelElement,e);t.lazyLoad&&(n._isLoaded=!1)}this.registerRootAttribute(`$rootEditableOptions`),ug(this);let o={shouldToolbarGroupWhenFull:!this.config.get(`toolbar.shouldNotGroupWhenFull`),editableElements:a,label:pP(this.config.get(`roots`),`label`)},s=new uP(this.locale,this.editing.view,fP(i),o);this.ui=new lP(this,s),this.model.document.on(`change:data`,()=>{let e=this.model.document.differ.getChangedRoots();for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`detached`&&this.fire(`detachRoot`,e)}for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`attached`&&this.fire(`addRoot`,e)}}),this.listenTo(this.model,`canEditAt`,(e,[t])=>{if(!t)return;let n=!1;for(let e of t.getRanges()){let t=e.root;if(this._readOnlyRootLocks.has(t.rootName)){n=!0;break}}n&&(e.return=!1,e.stop())},{priority:`high`}),this.decorate(`loadRoot`),this.on(`loadRoot`,(e,[t])=>{let n=this.model.document.getRoot(t);if(!n)throw new w(`multi-root-editor-load-root-no-root`,this,{rootName:t});n._isLoaded&&(T(`multi-root-editor-load-root-already-loaded`),e.stop())},{priority:`highest`}),c(this);function c(e){let t=ca(e.config.get(`licenseKey`));t&&ua(t,`MRE`)&&(e.enableReadOnlyMode(Symbol(`invalidLicense`)),e._showLicenseError(`featureNotAllowed`,`Multi-root editor`))}}async destroy(){let e=this.config.get(`updateSourceElementOnDestroy`),t={};for(let n of Object.keys(this.sourceElements))t[n]=e?this.getData({rootName:n}):``;this.ui.destroy(),await super.destroy();for(let e of Object.keys(this.sourceElements))Ur(this.sourceElements[e],t[e])}addRoot(e,t={}){let n=t.initialData||t.data||``,r={...t.modelAttributes||t.attributes},i=t.modelElement||t.elementName||`$root`;if(!this.model.schema.isLimit(i))throw new w(`multi-root-editor-add-root-element-is-not-limit`,this,{rootName:e,elementName:i});_P(t.element)&&T(`multi-root-editor-add-root-element-option-ignored`),gP(r,t),t.description!=null&&!(`$description`in r)&&(r.$description=t.description),t.title!=null&&!(`$title`in r)&&(r.$title=t.title);let a=t=>{let a=t.addRoot(e,i);n&&t.insert(this.data.parse(n,a),a,0);for(let e of Object.keys(r))this.registerRootAttribute(e),t.setAttribute(e,r[e],a)};t.isUndoable?this.model.change(a):this.model.enqueueChange({isUndoable:!1},a)}detachRoot(e,t=!1){t?this.model.change(t=>t.detachRoot(e)):this.model.enqueueChange({isUndoable:!1},t=>t.detachRoot(e))}createEditable(e,t,n){let r,i;!t||typeof t==`string`?r=t:(r=t?.placeholder,n=t?.label,i=t?.element);let a=e.getAttribute(`$rootEditableOptions`)||{},o=vg(i||a.element),s=this.ui.view.createEditable(e.rootName,o,n||a.label);return s.isInlineRoot=!Cg(this,e.rootName),this.ui.addEditable(s,r||a.placeholder),this.editing.view.forceRender(),s.element}detachEditable(e){let t=e.rootName,n=this.ui.view.editables[t];return this.ui.removeEditable(n),this.ui.view.removeEditable(t),n.element}loadRoot(e,{data:t=``,attributes:n={}}={}){let r=this.model.document.getRoot(e);this.model.enqueueChange({isUndoable:!1},e=>{t&&e.insert(this.data.parse(t,r),r,0);for(let t of Object.keys(n))this.registerRootAttribute(t),e.setAttribute(t,n[t],r);r._isLoaded=!0,this.model.document.differ._bufferRootLoad(r)})}getFullData(e){let t={};for(let n of this.model.document.getRootNames())t[n]=this.data.get({...e,rootName:n});return t}getRootsAttributes(){let e={};for(let t of this.model.document.getRootNames())e[t]=this.getRootAttributes(t);return e}disableRoot(e,t){if(e==`$graveyard`)throw new w(`multi-root-editor-cannot-disable-graveyard-root`,this);let n=this._readOnlyRootLocks.get(e);if(n)n.add(t);else{this._readOnlyRootLocks.set(e,new Set([t]));let n=this.editing.view.document.getRoot(e);n.isReadOnly=!0,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}}enableRoot(e,t){let n=this._readOnlyRootLocks.get(e);if(!(!n||!n.has(t)))if(n.size===1){this._readOnlyRootLocks.delete(e);let t=this.editing.view.document.getRoot(e);t.isReadOnly=this.isReadOnly,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}else n.delete(t)}static async create(e,t={}){let n=new this(e,t);await n.initPlugins(),Sg(n),await n.ui.init();let r=pP(n.config.get(`roots`),`initialData`);return n._verifyRootsWithInitialData(r),await n.data.init(r),n.fire(`ready`),n}_verifyRootsWithInitialData(e){for(let t of this.model.document.getRootNames())if(!(t in e))throw new w(`multi-root-editor-root-initial-data-mismatch`,null);for(let t of Object.keys(e)){let e=this.model.document.getRoot(t);if(!e||!e.isAttached())throw new w(`multi-root-editor-root-initial-data-mismatch`,null)}}};function fP(e){return e.filter(([,{lazyLoad:e}])=>!e).map(([e])=>e)}function pP(e,t){return Object.fromEntries(Object.entries(e).filter(([,e])=>!e.lazyLoad).map(([e,n])=>[e,n[t]]).filter(([,e])=>e!==void 0))}function mP(e){if(e.get(`rootsAttributes`)){let t=e.get(`rootsAttributes`),n=e.get(`roots`);for(let[r,i]of Object.entries(t)){let t=n[r];if(!t)throw new w(`multi-root-editor-root-attributes-no-root`,null);if(Object.keys(t.modelAttributes||{}).length)throw new w(`multi-root-editor-root-attributes-conflict`,null);e.set(`roots.${r}.modelAttributes`,i)}}}function hP(e){let t=e.get(`roots`);for(let[n,r]of Object.entries(t)){if(r.modelAttributes?.$rootEditableOptions)continue;let t={...r.modelAttributes};gP(t,r),e.set(`roots.${n}.modelAttributes`,t)}}function gP(e,{placeholder:t,label:n,element:r}){if(`$rootEditableOptions`in e)return;let i=_P(r)?void 0:vg(r);e.$rootEditableOptions={...t&&{placeholder:t},...n&&{label:n},...i&&{element:i}}}function _P(e){return jn(e)}function vP(e){let t=e.modelAttributes?.$rootEditableOptions;return vg(e.element||t?.element)}const yP={"(":`)`,"[":`]`,"{":`}`};var bP=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document;this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`mention`)}execute(e){let t=this.editor.model,n=t.document.selection,r=typeof e.mention==`string`?{id:e.mention}:e.mention,i=r.id,a=e.range||n.getFirstRange();if(!t.canEditAt(a))return;let o=e.text||i,s=SP({_text:o,id:i},r);if(!i.startsWith(e.marker))throw new w(`mentioncommand-incorrect-id`,this);t.change(e=>{let r=Ui(n.getAttributes()),i=new Map(r.entries());i.set(`mention`,s);let c=t.insertContent(e.createText(o,i),a),l=c.start.nodeBefore,u=c.end.nodeAfter,d=u&&u.is(`$text`)&&u.data.startsWith(` `),f=!1;if(l&&u&&l.is(`$text`)&&u.is(`$text`)){let e=l.data.slice(-1),t=e in yP,n=t&&u.data.startsWith(yP[e]);f=t&&n}!f&&!d&&t.insertContent(e.createText(` `,r),a.start.getShiftedBy(o.length))})}},xP=class extends F{static get pluginName(){return`MentionEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model,n=t.document;t.schema.extend(`$text`,{allowAttributes:`mention`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`codeBlock $text`))return!1},`mention`),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,attributes:`data-mention`,classes:`mention`},model:{key:`mention`,value:e=>CP(e)}}),e.conversion.for(`downcast`).attributeToElement({model:`mention`,view:TP}),e.conversion.for(`downcast`).add(wP),n.registerPostFixer(e=>OP(e,n,t.schema)),n.registerPostFixer(e=>kP(e,n)),n.registerPostFixer(e=>EP(e,n)),e.commands.add(`mention`,new bP(e))}};function SP(e,t){return Object.assign({uid:he().slice(0,8)},e,t||{})}function CP(e,t){let n=e.getAttribute(`data-mention`),r=e.getChild(0);if(!r)return;let i=e.getAttribute(`data-mention-uid`);return SP({id:n,_text:r.data},i?{uid:i,...t}:t)}function wP(e){e.on(`attribute:mention`,(e,t,n)=>{let r=t.attributeNewValue;if(!t.item.is(`$textProxy`)||!r)return;let i=t.range.start;(i.textNode||i.nodeAfter).data!=r._text&&n.consumable.consume(t.item,e.name)},{priority:`highest`})}function TP(e,{writer:t,options:n}){if(e)return t.createAttributeElement(`span`,{class:`mention`,"data-mention":e.id,...!n.isClipboardPipeline&&{"data-mention-uid":e.uid}},{id:e.uid,priority:20})}function EP(e,t){let n=t.selection,r=n.focus;return n.isCollapsed&&n.hasAttribute(`mention`)&&DP(r)?(e.removeSelectionAttribute(`mention`),!0):!1}function DP(e){let t=e.isAtStart;return e.nodeBefore&&e.nodeBefore.is(`$text`)||t}function OP(e,t,n){let r=t.differ.getChanges(),i=!1;for(let t of r){if(t.type==`attribute`)continue;let r=t.position;if(t.name==`$text`){let t=r.textNode&&r.textNode.nextSibling;i=jP(r.textNode,e)||i,i=jP(t,e)||i,i=jP(r.nodeBefore,e)||i,i=jP(r.nodeAfter,e)||i}if(t.name!=`$text`&&t.type==`insert`){let t=r.nodeAfter;for(let n of e.createRangeIn(t).getItems())i=jP(n,e)||i}if(t.type==`insert`&&n.isInline(t.name)){let t=r.nodeAfter&&r.nodeAfter.nextSibling;i=jP(r.nodeBefore,e)||i,i=jP(t,e)||i}}return i}function kP(e,t){let n=t.differ.getChanges(),r=!1;for(let t of n)if(t.type===`attribute`&&t.attributeKey!=`mention`){let n=t.range.start.nodeBefore,i=t.range.end.nodeAfter;for(let a of[n,i])AP(a)&&a.getAttribute(t.attributeKey)!=t.attributeNewValue&&(e.setAttribute(t.attributeKey,t.attributeNewValue,a),r=!0)}return r}function AP(e){return!e||!(e.is(`$text`)||e.is(`$textProxy`))||!e.hasAttribute(`mention`)?!1:e.data!=e.getAttribute(`mention`)._text}function jP(e,t){return AP(e)?(t.removeAttribute(`mention`,e),!0):!1}var MP=class extends mx{selected;position;constructor(e){super(e),this.extendTemplate({attributes:{class:[`ck-mentions`],tabindex:`-1`}})}selectFirst(){this.select(0)}selectNext(){let e=this.selected,t=this.items.getIndex(e);this.select(t+1)}selectPrevious(){let e=this.selected,t=this.items.getIndex(e);this.select(t-1)}select(e){let t=0;e>0&&e{n?(this.domElement.classList.add(`ck-on`),this.domElement.classList.remove(`ck-off`)):(this.domElement.classList.add(`ck-off`),this.domElement.classList.remove(`ck-on`))}),this.listenTo(this.domElement,`click`,()=>{this.fire(`execute`)})}render(){super.render(),this.element=this.domElement}focus(){this.domElement.focus()}},PP=class extends dx{item;marker;highlight(){let e=this.children.first;e.isOn=!0}removeHighlight(){let e=this.children.first;e.isOn=!1}};const FP=[k.arrowup,k.arrowdown,k.esc],IP=[k.enter,k.tab];var LP=class extends F{_mentionsView;_mentionsConfigurations;_balloon;_items=new Fi;_lastRequested;_requestFeedDebounced;static get pluginName(){return`MentionUI`}static get isOfficialPlugin(){return!0}static get requires(){return[BC]}constructor(e){super(e),this._mentionsView=this._createMentionView(),this._mentionsConfigurations=new Map,this._requestFeedDebounced=Kt(this._requestFeed,100),e.config.define(`mention`,{feeds:[]})}init(){let e=this.editor,t=e.config.get(`mention.commitKeys`)||IP,n=FP.concat(t);this._balloon=e.plugins.get(BC),e.editing.view.document.on(`keydown`,(e,n)=>{i(n.keyCode)&&this._isUIVisible&&(n.preventDefault(),e.stop(),n.keyCode==k.arrowdown&&this._mentionsView.selectNext(),n.keyCode==k.arrowup&&this._mentionsView.selectPrevious(),t.includes(n.keyCode)&&this._mentionsView.executeSelected(),n.keyCode==k.esc&&this._hideUIAndRemoveMarker())},{priority:`highest`}),Ya({emitter:this._mentionsView,activator:()=>this._isUIVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideUIAndRemoveMarker()});let r=e.config.get(`mention.feeds`);for(let e of r){let{feed:t,marker:n,dropdownLimit:r}=e;if(!KP(n))throw new w(`mentionconfig-incorrect-marker`,null,{marker:n});let i={marker:n,feedCallback:typeof t==`function`?t.bind(this.editor):UP(t),itemRenderer:e.itemRenderer,dropdownLimit:r};this._mentionsConfigurations.set(n,i)}this._setupTextWatcher(r),this.listenTo(e,`change:isReadOnly`,()=>{this._hideUIAndRemoveMarker()}),this.on(`requestFeed:response`,(e,t)=>this._handleFeedResponse(t)),this.on(`requestFeed:error`,()=>this._hideUIAndRemoveMarker());function i(e){return n.includes(e)}}destroy(){super.destroy(),this._mentionsView.destroy()}get _isUIVisible(){return this._balloon.visibleView===this._mentionsView}_createMentionView(){let e=this.editor.locale,t=new MP(e);return t.items.bindTo(this._items).using(n=>{let{item:r,marker:i}=n,{dropdownLimit:a}=this._mentionsConfigurations.get(i),o=a||this.editor.config.get(`mention.dropdownLimit`)||10;if(t.items.length>=o)return null;let s=new PP(e),c=this._renderItem(r,i);return c.delegate(`execute`).to(s),s.children.add(c),s.item=r,s.marker=i,s.on(`execute`,()=>{t.fire(`execute`,{item:r,marker:i})}),s}),t.on(`execute`,(e,t)=>{let n=this.editor,r=n.model,i=t.item,a=t.marker,o=n.model.markers.get(`mention`),s=r.createPositionAt(r.document.selection.focus),c=r.createPositionAt(o.getStart()),l=r.createRange(c,s);this._hideUIAndRemoveMarker(),n.execute(`mention`,{mention:i,text:i.text,marker:a,range:l}),n.editing.view.focus()}),t}_getItemRenderer(e){let{itemRenderer:t}=this._mentionsConfigurations.get(e);return t}_requestFeed(e,t){this._lastRequested=t;let{feedCallback:n}=this._mentionsConfigurations.get(e),r=n(t);if(!(r instanceof Promise)){this.fire(`requestFeed:response`,{feed:r,marker:e,feedText:t});return}r.then(n=>{this._lastRequested==t?this.fire(`requestFeed:response`,{feed:n,marker:e,feedText:t}):this.fire(`requestFeed:discarded`,{feed:n,marker:e,feedText:t})}).catch(t=>{this.fire(`requestFeed:error`,{error:t}),T(`mention-feed-callback-error`,{marker:e})})}_setupTextWatcher(e){let t=this.editor,n=e.map(e=>({...e,pattern:BP(e.marker,e.minimumCharacters||0)})),r=new yT(t.model,VP(n));r.on(`matched`,(e,r)=>{let i=zP(n,r.text),a=t.model.document.selection.focus,o=t.model.createPositionAt(a.parent,i.position);if(WP(a)||GP(o)){this._hideUIAndRemoveMarker();return}let s=HP(i,r.text),c=i.marker.length+s.length,l=a.getShiftedBy(-c),u=a.getShiftedBy(-s.length),d=t.model.createRange(l,u);if(qP(t)){let e=t.model.markers.get(`mention`);t.model.change(t=>{t.updateMarker(e,{range:d})})}else t.model.change(e=>{e.addMarker(`mention`,{range:d,usingOperation:!1,affectsData:!1})});this._requestFeedDebounced(i.marker,s)}),r.on(`unmatched`,()=>{this._hideUIAndRemoveMarker()});let i=t.commands.get(`mention`);return r.bind(`isEnabled`).to(i),r}_handleFeedResponse(e){let{feed:t,marker:n}=e;if(!qP(this.editor))return;if(!this.editor.commands.get(`mention`).isEnabled){this._hideUIAndRemoveMarker();return}this._items.clear();for(let e of t){let t=typeof e==`object`?e:{id:e,text:e};this._items.add({item:t,marker:n})}let r=this.editor.model.markers.get(`mention`);this._items.length?this._showOrUpdateUI(r):this._hideUIAndRemoveMarker()}_showOrUpdateUI(e){this._isUIVisible?this._balloon.updatePosition(this._getBalloonPanelPositionData(e,this._mentionsView.position)):this._balloon.add({view:this._mentionsView,position:this._getBalloonPanelPositionData(e,this._mentionsView.position),singleViewMode:!0,balloonClassName:`ck-mention-balloon`}),this._mentionsView.position=this._balloon.view.position,this._mentionsView.selectFirst()}_hideUIAndRemoveMarker(){this._balloon.hasView(this._mentionsView)&&this._balloon.remove(this._mentionsView),qP(this.editor)&&this.editor.model.change(e=>e.removeMarker(`mention`)),this._mentionsView.position=void 0}_renderItem(e,t){let n=this.editor,r,i=e.id,a=this._getItemRenderer(t);if(a){let t=a(e);typeof t==`string`?i=t:r=new NP(n.locale,t)}if(!r){let e=new H(n.locale);e.label=i,e.withText=!0,r=e}return r}_getBalloonPanelPositionData(e,t){let n=this.editor,r=n.editing,i=r.view.domConverter,a=r.mapper,o=n.locale.uiLanguageDirection;return{target:()=>{let t=e.getRange();t.start.root.rootName==`$graveyard`&&(t=n.model.document.selection.getFirstRange());let r=a.toViewRange(t);return O.getDomRangeRects(i.viewRangeToDom(r)).pop()},limiter:()=>{let e=this.editor.editing.view,t=e.document.selection.editableElement;return t?e.domConverter.mapViewToDom(t.root):null},positions:RP(t,o)}}};function RP(e,t){let n={caret_se:e=>({top:e.bottom+3,left:e.right,name:`caret_se`,config:{withArrow:!1}}),caret_ne:(e,t)=>({top:e.top-t.height-3,left:e.right,name:`caret_ne`,config:{withArrow:!1}}),caret_sw:(e,t)=>({top:e.bottom+3,left:e.right-t.width,name:`caret_sw`,config:{withArrow:!1}}),caret_nw:(e,t)=>({top:e.top-t.height-3,left:e.right-t.width,name:`caret_nw`,config:{withArrow:!1}})};return Object.prototype.hasOwnProperty.call(n,e)?[n[e]]:t===`rtl`?[n.caret_sw,n.caret_se,n.caret_nw,n.caret_ne]:[n.caret_se,n.caret_sw,n.caret_ne,n.caret_nw]}function zP(e,t){let n;for(let r of e){let e=t.lastIndexOf(r.marker);e>0&&!t.substring(e-1).match(r.pattern)||(!n||e>=n.position)&&(n={marker:r.marker,position:e,minimumCharacters:r.minimumCharacters,pattern:r.pattern})}return n}function BP(e,t){let n=t==0?`*`:`{${t},}`,r=p.features.isRegExpUnicodePropertySupported?`\\p{Ps}\\p{Pi}"'`:`\\(\\[{"'`;e=e.replace(/[.*+?^${}()\-|[\]\\]/g,`\\$&`);let i=`(?:^|[ ${r}])(${e})(.${n})$`;return new RegExp(i,`u`)}function VP(e){return t=>{let n=zP(e,t);if(!n)return!1;let r=0;n.position!==0&&(r=n.position-1);let i=t.substring(r);return n.pattern.test(i)}}function HP(e,t){let n=0;e.position!==0&&(n=e.position-1);let r=BP(e.marker,0);return t.substring(n).match(r)[2]}function UP(e){return t=>e.filter(e=>(typeof e==`string`?e:String(e.id)).toLowerCase().includes(t.toLowerCase()))}function WP(e){let t=e.textNode&&e.textNode.hasAttribute(`mention`),n=e.nodeBefore;return t||n&&n.is(`$text`)&&n.hasAttribute(`mention`)}function GP(e){let t=e.nodeAfter;return t&&t.is(`$text`)&&t.hasAttribute(`mention`)}function KP(e){return!!e}function qP(e){return e.model.markers.has(`mention`)}var JP=class extends F{toMentionAttribute(e,t){return CP(e,t)}static get pluginName(){return`Mention`}static get isOfficialPlugin(){return!0}static get requires(){return[xP,LP]}},YP=o(((e,t)=>{((e,n)=>{typeof define==`function`&&define.amd?define([],n):typeof t==`object`&&t.exports?t.exports=n():e.fuzzysort=n()})(e,e=>{var t=(e,t)=>{if(!e||!t)return de;var n=p(e);se(t)||(t=f(t));var r=n.bitflags;return(r&t._bitflags)===r?h(n,t):de},n=(e,t,n)=>{if(!e)return n?.all?m(t,n):ue;var r=p(e),i=r.bitflags,a=r.containsSpace,o=u(n?.threshold||0),c=n?.limit||ce,l=0,d=0,g=t.length;function _(e){lpe.peek()._score&&pe.replaceTop(e))}if(n?.key)for(var v=n.key,y=0;y-1e3&&S[e]>le){var he=(S[e]+C[e])/4;he>S[e]&&(S[e]=he)}C[e]>S[e]&&(S[e]=C[e])}}if(a){for(let e=0;e-1e3&&ve>le){var he=(ve+x._score)/4;he>ve&&(ve=he)}x._score>ve&&(ve=x._score)}}if(_e.obj=ee,_e._score=ve,n?.scoreFn){if(ve=n.scoreFn(_e),!ve)continue;ve=u(ve),_e._score=ve}ve=0;--y)w[y]=pe.poll();return w.total=l+d,w},r=(e,t=``,n=``)=>{for(var r=typeof t==`function`?t:void 0,i=e.target,a=i.length,o=e.indexes,s=``,c=0,l=0,u=!1,d=[],f=0;f{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``);var t=v(e);return c(e,{_targetLower:t._lower,_targetLowerCodes:t.lowerCodes,_bitflags:t.bitflags})},a=()=>{b.clear(),x.clear()};class o{get indexes(){return this._indexes.slice(0,this._indexes.len).sort((e,t)=>e-t)}set indexes(e){return this._indexes=e}highlight(e,t){return r(this,e,t)}get score(){return l(this._score)}set score(e){this._score=u(e)}}class s extends Array{get score(){return l(this._score)}set score(e){this._score=u(e)}}var c=(e,t)=>{let n=new o;return n.target=e,n.obj=t.obj??de,n._score=t._score??le,n._indexes=t._indexes??[],n._targetLower=t._targetLower??``,n._targetLowerCodes=t._targetLowerCodes??de,n._nextBeginningIndexes=t._nextBeginningIndexes??de,n._bitflags=t._bitflags??0,n},l=e=>e===le?0:e>1?e:Math.E**(((-e+1)**.04307-1)*-2),u=e=>e===0?le:e>1?e:1-(Math.log(e)/-2+1)**(1/.04307),d=e=>{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``),e=e.trim();var t=v(e),n=[];if(t.containsSpace){var r=e.split(/\s+/);r=[...new Set(r)];for(var i=0;i{if(e.length>999)return i(e);var t=b.get(e);return t===void 0?(t=i(e),b.set(e,t),t):t},p=e=>{if(e.length>999)return d(e);var t=x.get(e);return t===void 0?(t=d(e),x.set(e,t),t):t},m=(e,t)=>{var n=[];n.total=e.length;var r=t?.limit||ce;if(t?.key)for(var i=0;i=r)return n}}else if(t?.keys)for(var i=0;i=0;--d){var o=oe(a,t.keys[d]);if(!o){u[d]=fe;continue}se(o)||(o=f(o)),o._score=le,o._indexes.len=0,u[d]=o}if(u.obj=a,u._score=le,n.push(u),n.length>=r)return n}else for(var i=0;i=r))return n}return n},h=(e,t,n=!1,r=!1)=>{if(n===!1&&e.containsSpace)return g(e,t,r);for(var i=e._lower,a=e.lowerCodes,s=a[0],c=t._targetLowerCodes,l=a.length,u=c.length,d=0,f=0,p=0;;){var m=s===c[f];if(m){if(te[p++]=f,++d,d===l)break;s=a[d]}if(++f,f>=u)return de}var d=0,h=!1,_=0,v=t._nextBeginningIndexes;v===de&&(v=t._nextBeginningIndexes=ee(t.target)),f=te[0]===0?0:v[te[0]-1];var y=0;if(f!==u)for(;;)if(f>=u){if(d<=0||(++y,y>200))break;--d;var b=ne[--_];f=v[b]}else{var m=a[d]===c[f];if(m){if(ne[_++]=f,++d,d===l){h=!0;break}++f}else f=v[f]}var x=l<=1?-1:t._targetLower.indexOf(i,te[0]),re=!!~x,S=re?x===0||t._nextBeginningIndexes[x-1]===x:!1;if(re&&!S){for(var C=0;C{for(var t=0,n=0,r=1;r24&&(t*=(a-24)*10)}return t-=(u-l)/2,re&&(t/=1+l*l*1),S&&(t/=1+l*l*1),t-=(u-l)/2,t};if(!h){if(re)for(var C=0;C{for(var r=new Set,i=0,a=de,o=0,s=e.spaceSearches,c=s.length,l=0,u=()=>{for(let e=l-1;e>=0;e--)t._nextBeginningIndexes[re[e*2+0]]=re[e*2+1]},d=!1,f=0;f=0&&v===t._nextBeginningIndexes[e];e--)t._nextBeginningIndexes[e]=_,re[l*2+0]=e,re[l*2+1]=v,l++}}i+=a._score/c,C[f]=a._score/c,a._indexes[0]i){if(n)for(var f=0;fe.replace(/\p{Script=Latin}+/gu,e=>e.normalize(`NFD`)).replace(/[\u0300-\u036f]/g,``),v=e=>{e=_(e);for(var t=e.length,n=e.toLowerCase(),r=[],i=0,a=!1,o=0;o=97&&s<=122?s-97:s>=48&&s<=57?26:s<=127?30:31;i|=1<{for(var t=e.length,n=[],r=0,i=!1,a=!1,o=0;o=65&&s<=90,l=c||s>=97&&s<=122||s>=48&&s<=57,u=c&&!i||!a||!l;i=c,a=l,u&&(n[r++]=o)}return n},ee=e=>{e=_(e);for(var t=e.length,n=y(e),r=[],i=n[0],a=0,o=0;oo?r[o]=i:(i=n[++a],r[o]=i===void 0?t:i);return r},b=new Map,x=new Map,te=[],ne=[],re=[],S=[],C=[],ie=[],ae=[],oe=(e,t)=>{var n=e[t];if(n!==void 0)return n;if(typeof t==`function`)return t(e);var r=t;Array.isArray(t)||(r=t.split(`.`));for(var i=r.length,a=-1;e&&++atypeof e==`object`&&typeof e._bitflags==`number`,ce=1/0,le=-ce,ue=[];ue.total=0;var de=null,fe=i(``),pe=(e=>{var t=[],n=0,r={},i=e=>{for(var r=0,i=t[r],a=1;a>1]=t[r],a=1+(r<<1)}for(var s=r-1>>1;r>0&&i._score>1)t[r]=t[s];t[r]=i};return r.add=(e=>{var r=n;t[n++]=e;for(var i=r-1>>1;r>0&&e._score>1)t[r]=t[i];t[r]=e}),r.poll=(e=>{if(n!==0){var r=t[0];return t[0]=t[--n],i(),r}}),r.peek=(e=>{if(n!==0)return t[0]}),r.replaceTop=(e=>{t[0]=e,i()}),r})();return{single:t,go:n,prepare:i,cleanup:a}})}));function XP(e){let t=ZP();if(!t)return!1;t.font=`12px Arial, Sans-Serif`,t.textBaseline=`top`,t.canvas.width=40,t.canvas.height=25,t.clearRect(0,0,40,25),t.fillStyle=`#FF0000`,t.fillText(e,0,22),t.fillStyle=`#0000FF`,t.fillText(e,20,22);let n=t.getImageData(0,0,20,25).data,r=n.length,i=0;for(;i=r)return!1;let a=20+i/4%20,o=Math.floor(i/4/20),s=t.getImageData(a,o,1,1).data;return!(n[i]!==s[0]||n[i+2]!==s[2]||t.measureText(e).width>=20)}function ZP(){try{return document.createElement(`canvas`).getContext(`2d`,{willReadFrequently:!0})}catch{return null}}const QP={0:`default`,1:`light`,2:`medium-light`,3:`medium`,4:`medium-dark`,5:`dark`},$P={"🪎":17,"🫩":16,"🫨":15.1,"🫠":14,"😶‍🌫️":13.1,"🧑‍💻":12.1,"🥰":11,"🤪":5,"⚕️":4,"🤣":3,"👋🏽":2,"😀":1,"😐":.7,"😂":.6};var eF=class e extends F{_emojiCanvas=null;static get pluginName(){return`EmojiUtils`}static get isOfficialPlugin(){return!0}init(){this._emojiCanvas=document.createElement(`canvas`).getContext(`2d`)}isEmojiSupported(e,t,n){return e.version<=t?this.hasZwj(e.emoji)?this.isEmojiZwjSupported(e,n):!0:!1}getEmojiSupportedVersionByOs(){for(let[t,n]of Object.entries($P))if(e._isEmojiSupported(t))return n;return 0}hasZwj(e){return e.includes(`‍`)}isEmojiZwjSupported(e,t){return this.getNodeWidthUsingCanvas(t,e.emoji)<24*1.8?!0:this.getNodeWidth(t,e.emoji)<24*1.8}getNodeWidth(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n);let r=n.offsetWidth;return e.removeChild(n),r}getNodeWidthUsingCanvas(e,t){let n=getComputedStyle(e);return this._emojiCanvas.font=[n.fontStyle,n.fontVariant,n.fontWeight,`24px`,`"Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", ${n.fontFamily}`].join(` `),Math.ceil(this._emojiCanvas.measureText(t).width)}createEmojiWidthTestingContainer(){let e=document.createElement(`div`);return e.setAttribute(`aria-hidden`,`true`),e.style.position=`absolute`,e.style.left=`-9999px`,e.style.whiteSpace=`nowrap`,e.style.fontSize=`24px`,e}normalizeEmojiSkinTone(e){let t={...e,skins:{default:e.emoji}};return e.skins&&e.skins.forEach(e=>{let n=QP[e.tone];t.skins[n]=e.emoji}),t}isEmojiCategoryAllowed(e){return e.group!==2}static _isEmojiSupported=XP},tF=class{_cache=new Map;async fetch({url:e,cacheKeys:t,transform:n}){let r=nF(e,t);if(this._cache.has(r))return this._cache.get(r).promise;let i=fetch(e,{cache:`force-cache`}).then(e=>e.ok?e.json():Promise.resolve([])).then(e=>n(e)).catch(()=>(this._cache.delete(r),[]));return this._cache.set(r,rF(i)),i}getSync({url:e,cacheKeys:t}){let n=this._cache.get(nF(e,t));return!n||n.status!==`fulfilled`?null:n.value}clear(){this._cache.clear()}};function nF(e,t){return[e,...t].join(`|`)}function rF(e){let t={promise:e,status:`pending`,value:void 0};return e.then(e=>{Object.assign(t,{status:`fulfilled`,value:e})}),t}var iF=l(YP(),1),aF=class e extends F{_url;static get requires(){return[eF]}static get pluginName(){return`EmojiRepository`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`emoji`,{version:void 0,skinTone:`default`,definitionsUrl:void 0,useCustomFont:!1}),this.set(`isRepositoryReady`,null),this._url=this._getUrl()}init(){this._warnAboutCdnUse(),e._cache.fetch({url:this._url.toString(),cacheKeys:this._cacheKeys,transform:e=>this._normalizeEmoji(e)}).then(()=>{if(this.editor.state===`destroyed`)return;let e=!!this._getItems();e||T(`emoji-repository-empty`),this.isRepositoryReady=e})}onReady(e){if(this.editor.state!==`destroyed`){if(this.isRepositoryReady!==null){e(this.isRepositoryReady);return}this.once(`change:isRepositoryReady`,(t,n,r)=>{e(!!r)})}}getEmojiByQuery(e){let t=this._getItems();return!t||!e.split(/\s/).filter(Boolean).some(e=>e.length>=2)?[]:iF.default.go(e,t,{threshold:.6,keys:[`emoticon`,`annotation`,t=>e.split(/\s/).filter(Boolean).flatMap(e=>t.tags?.filter(t=>t.startsWith(e))).join()]}).map(e=>e.obj)}getEmojiCategories(){let e=this._getItems();if(!e)return[];let{t}=this.editor.locale,n=[{title:t(`Smileys & Expressions`),icon:`😄`,groupId:0},{title:t(`Gestures & People`),icon:`👋`,groupId:1},{title:t(`Animals & Nature`),icon:`🐻`,groupId:3},{title:t(`Food & Drinks`),icon:`🍎`,groupId:4},{title:t(`Travel & Places`),icon:`🚘`,groupId:5},{title:t(`Activities`),icon:`🏀`,groupId:6},{title:t(`Objects`),icon:`💡`,groupId:7},{title:t(`Symbols`),icon:`🔵`,groupId:8},{title:t(`Flags`),icon:`🏁`,groupId:9}],r=Wt(e,e=>e.group);return n.map(e=>({...e,items:r[e.groupId]}))}getSkinTones(){let{t:e}=this.editor.locale;return[{id:`default`,icon:`👋`,tooltip:e(`Default skin tone`)},{id:`light`,icon:`👋🏻`,tooltip:e(`Light skin tone`)},{id:`medium-light`,icon:`👋🏼`,tooltip:e(`Medium Light skin tone`)},{id:`medium`,icon:`👋🏽`,tooltip:e(`Medium skin tone`)},{id:`medium-dark`,icon:`👋🏾`,tooltip:e(`Medium Dark skin tone`)},{id:`dark`,icon:`👋🏿`,tooltip:e(`Dark skin tone`)}]}isReady(){return new Promise((e,t)=>{let n=()=>t(Error(`The editor was destroyed before the emoji repository finished loading.`));this.editor.state===`destroyed`?n():(this.onReady(e),this.editor.once(`destroy`,n))})}_getUrl(){let{definitionsUrl:e,version:t}=this.editor.config.get(`emoji`);if(!e||e===`cdn`){let e=t||16,n=new URL(`https://cdn.ckeditor.com/ckeditor5/data/emoji/{version}/en.json`.replace(`{version}`,e.toString()));return n.searchParams.set(`editorVersion`,Ce),n}return t&&T(`emoji-repository-redundant-version`),new URL(e)}_warnAboutCdnUse(){let e=this.editor,t=e.config.get(`emoji`),n=e.config.get(`licenseKey`),r=window[Symbol.for(`cke distribution`)];n!==`GPL`&&r!==`cloud`&&(t&&t.definitionsUrl||T(`emoji-repository-cdn-use`))}_getItems(){let t=e._cache.getSync({url:this._url.toString(),cacheKeys:this._cacheKeys});return t&&t.length?t:null}_normalizeEmoji(e){let t=this.editor,n=t.config.get(`emoji.useCustomFont`),r=t.plugins.get(`EmojiUtils`),i=e.filter(e=>r.isEmojiCategoryAllowed(e));if(n)return i.map(e=>r.normalizeEmojiSkinTone(e));let a=r.getEmojiSupportedVersionByOs(),o=r.createEmojiWidthTestingContainer();document.body.appendChild(o);let s=i.filter(e=>r.isEmojiSupported(e,a,o)).map(e=>r.normalizeEmojiSkinTone(e));return o.remove(),s}get _cacheKeys(){return[`useCustomFont:${!!this.editor.config.get(`emoji.useCustomFont`)}`]}static _cache=new tF};const oF=`:__EMOJI_SHOW_ALL:`,sF=`:__EMOJI_HINT:`;var cF=class extends F{_emojiDropdownLimit;_skinTone;static get requires(){return[aF,gT,JP]}static get pluginName(){return`EmojiMention`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this.editor.config.define(`emoji`,{dropdownLimit:6}),this._emojiDropdownLimit=e.config.get(`emoji.dropdownLimit`),this._skinTone=e.config.get(`emoji.skinTone`),this._setupMentionConfiguration(e)}_setupMentionConfiguration(e){let t=e.config.get(`mergeFields.prefix`),n=e.config.get(`mention.feeds`),r=t?t[0]===`:`:!1;if(n.filter(e=>!e._isEmojiMarker).some(e=>e.marker===`:`)||r){T(`emoji-config-marker-already-used`,{marker:`:`});return}if(n.some(e=>e._isEmojiMarker))return;let i={_isEmojiMarker:!0,marker:`:`,dropdownLimit:this._emojiDropdownLimit,itemRenderer:this._customItemRendererFactory(this.editor.t),feed:this._queryEmojiCallbackFactory()};this.editor.config.set(`mention.feeds`,[...n,i])}init(){let{editor:e}=this;this.emojiPickerPlugin=e.plugins.has(`EmojiPicker`)?e.plugins.get(`EmojiPicker`):null,this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`),this._overrideMentionExecuteListener()}_customItemRendererFactory(e){return t=>{let n=document.createElement(`button`);n.classList.add(`ck`),n.classList.add(`ck-button`),n.classList.add(`ck-button_with-text`),n.id=`mention-list-item-id${t.id.slice(0,-1)}`,n.type=`button`,n.tabIndex=-1;let r=document.createElement(`span`);return r.classList.add(`ck`),r.classList.add(`ck-button__label`),n.appendChild(r),t.id===sF?(n.classList.add(`ck-list-item-button`),n.classList.add(`ck-disabled`),r.textContent=e(`Keep on typing to see the emoji.`)):t.id===oF?r.textContent=e(`Show all emoji...`):r.textContent=`${t.text} ${t.id}`,n}}_overrideMentionExecuteListener(){let{editor:e}=this;e.commands.get(`mention`).on(`execute`,(t,n)=>{if(!this.emojiRepositoryPlugin.isRepositoryReady)return;let r=n[0];if(r.marker===`:`&&(t.stop(),r.mention.id!==sF))if(r.mention.id===oF){let t=[...r.range.getItems()].filter(e=>e.is(`$textProxy`)).map(e=>e.data).reduce((e,t)=>e+t,``);e.model.change(t=>{e.model.deleteContent(t.createSelection(r.range))});let n=this.emojiPickerPlugin;n.showUI(t.slice(1)),setTimeout(()=>{n.emojiPickerView.focus()})}else e.execute(`insertText`,{text:r.mention.text,range:r.range})},{priority:`high`})}_queryEmojiCallbackFactory(){return e=>{if(e.startsWith(` `)||e.startsWith(`:`)||!this.emojiRepositoryPlugin.isRepositoryReady)return[];let t=this.emojiRepositoryPlugin.getEmojiByQuery(e).map(e=>{let t=e.skins[this._skinTone]||e.skins.default;return this.emojiPickerPlugin&&(t=e.skins[this.emojiPickerPlugin.skinTone]||e.skins.default),{id:`:${e.annotation}:`,text:t}});if(!this.emojiPickerPlugin)return t.slice(0,this._emojiDropdownLimit);let n={id:e.length>1?oF:sF};return[...t.slice(0,this._emojiDropdownLimit-1),n]}}},lF=class extends I{constructor(e){super(e);let t=e.plugins.get(`EmojiRepository`);this.listenTo(t,`change:isRepositoryReady`,()=>this.refresh())}refresh(){let e=this.editor,t=e.plugins.get(`EmojiRepository`),n=e.model,r=n.schema,i=n.document.selection;this.isEnabled=!!t.isRepositoryReady&&r.checkChild(i.getFirstPosition(),`$text`)}execute(e=``){this.editor.plugins.get(`EmojiPicker`).showUI(e)}},uF=class extends P{tiles;focusTracker;keystrokes;emojiCategories;cachedTiles;_getEmojiByQuery;constructor(e,{categoryName:t,emojiCategories:n,getEmojiByQuery:r,skinTone:i}){super(e),this.set(`isEmpty`,!0),this.set(`categoryName`,t),this.set(`skinTone`,i),this.tiles=this.createCollection(),this.cachedTiles=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this._getEmojiByQuery=r,this.emojiCategories=n;let a=this.bindTemplate;this.setTemplate({tag:`div`,children:[{tag:`div`,attributes:{role:`grid`,class:[`ck`,`ck-emoji__grid`]},children:this.tiles}],attributes:{role:`tabpanel`,class:[`ck`,`ck-emoji__tiles`,a.if(`isEmpty`,`ck-hidden`,e=>e)]}}),$a({keystrokeHandler:this.keystrokes,focusTracker:this.focusTracker,gridItems:this.tiles,numberOfColumns:()=>u.window.getComputedStyle(this.element.firstChild).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}render(){super.render(),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy(),this.focusTracker.destroy()}focus(){let e=this.tiles.first;e&&e.focus()}filter(e){let{matchingItems:t,allItems:n}=e?this._getItemsByQuery(e.source):this._getItemsByCategory();return this._updateGrid(t),this.set(`isEmpty`,t.length===0),{resultsCount:t.length,totalItemsCount:n.length}}_getItemsByQuery(e){return{matchingItems:this._getEmojiByQuery(e),allItems:this.emojiCategories.flatMap(e=>e.items)}}_getItemsByCategory(){let e=this.emojiCategories.find(e=>e.title===this.categoryName);if(!e)return{matchingItems:[],allItems:[]};let{items:t}=e;return{matchingItems:t,allItems:t}}_updateGrid(e){[...this.tiles].forEach(e=>{this.focusTracker.remove(e),this.tiles.remove(e)}),e.map(e=>{let t=e.skins[this.skinTone]||e.skins.default;return this.cachedTiles.get(t)||this._createTile(t,e.annotation)}).forEach(e=>{this.tiles.add(e),this.focusTracker.add(e)})}_createTile(e,t){let n=new H(this.locale);return n.viewUid=e,n.extendTemplate({attributes:{class:[`ck-emoji__tile`]}}),n.set({label:e,tooltip:t,withText:!0,ariaLabel:t,ariaLabelledBy:void 0}),n.on(`execute`,()=>{this.fire(`execute`,{name:t,emoji:e})}),this.cachedTiles.add(n),n}},dF=class extends P{focusTracker;keystrokes;focusCycler;buttonViews;constructor(e,{emojiCategories:t,categoryName:n}){super(e),this.buttonViews=this.createCollection(t.map(e=>this._createCategoryButton(e))),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.buttonViews,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`arrowleft`,focusNext:`arrowright`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__categories-list`],role:`tablist`},children:this.buttonViews}),this.on(`change:categoryName`,(e,t,n,r)=>{let i=this.buttonViews.find(e=>e.tooltip===r);i&&(i.isOn=!1);let a=this.buttonViews.find(e=>e.tooltip===n);a&&(a.isOn=!0)}),this.set(`categoryName`,n)}render(){super.render(),this.buttonViews.forEach(e=>{this.focusTracker.add(e)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),this.buttonViews.destroy()}focus(){this.buttonViews.first.focus()}setCategories(e){for(let e of this.buttonViews)this.focusTracker.remove(e),e.destroy();this.buttonViews.clear();for(let t of e){let e=this._createCategoryButton(t);this.buttonViews.add(e),this.isRendered&&this.focusTracker.add(e)}}enableCategories(){this.buttonViews.forEach(e=>{e.isEnabled=!0})}disableCategories(){this.buttonViews.forEach(e=>{e.set({class:``,isEnabled:!1,isOn:!1})})}_createCategoryButton(e){let t=new H,n=t.bindTemplate;return t.extendTemplate({attributes:{"aria-selected":n.to(`isOn`,e=>e.toString()),class:[`ck-emoji__category-item`]}}),t.set({ariaLabel:e.title,label:e.icon,role:`tab`,tooltip:e.title,withText:!0,ariaLabelledBy:void 0}),t.on(`execute`,()=>{this.categoryName=e.title}),t.on(`change:isEnabled`,()=>{t.isEnabled&&t.tooltip===this.categoryName&&(t.isOn=!0)}),t}},fF=class extends P{inputView;gridView;constructor(e,{gridView:t,resultsView:n}){super(e),this.gridView=t;let r=e.t;this.inputView=new JC(this.locale,{queryView:{label:r(`Find an emoji (min. 2 characters)`),creator:Jx},filteredView:this.gridView,infoView:{instance:n}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search`],tabindex:`-1`},children:[this.inputView.queryView]}),this.inputView.delegate(`search`).to(this)}destroy(){super.destroy(),this.inputView.destroy()}search(e){let t=e?new RegExp(Bn(e),`ig`):null,n=this.gridView.filter(t);this.inputView.fire(`search`,{query:e,...n})}setInputValue(e){e?this.inputView.queryView.fieldView.value=e:this.inputView.queryView.fieldView.reset()}getInputValue(){return this.inputView.queryView.fieldView.element.value}focus(){this.inputView.focus()}},pF=class extends P{dropdownView;_skinTones;constructor(e,{skinTone:t,skinTones:n}){super(e),this.set(`skinTone`,t),this._skinTones=n;let r=e.t,i=r(`Select skin tone`),a=Nx(e),o=new Fi;for(let{id:e,icon:t,tooltip:n}of this._skinTones){let r={type:`button`,model:new RC({value:e,label:t,ariaLabel:n,tooltip:n,tooltipPosition:`e`,role:`menuitemradio`,withText:!0,ariaLabelledBy:void 0})};r.model.bind(`isOn`).to(this,`skinTone`,t=>t===e),o.add(r)}Lx(a,o,{ariaLabel:i,role:`menu`}),a.buttonView.set({label:this._getSkinTone().icon,ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),this.dropdownView=a,this.listenTo(a,`execute`,e=>{this.skinTone=e.source.value}),a.buttonView.bind(`label`).to(this,`skinTone`,()=>this._getSkinTone().icon),a.buttonView.bind(`ariaLabel`).to(this,`skinTone`,()=>`${this._getSkinTone().tooltip}, ${i}`),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__skin-tone`]},children:[a]})}focus(){this.dropdownView.buttonView.focus()}_getSkinTone(){return this._skinTones.find(e=>e.id===this.skinTone)}},mF=class extends P{items;focusTracker;keystrokes;focusCycler;searchView;toneView;categoriesView;gridView;infoView;constructor(e,{emojiCategories:t,getEmojiByQuery:n,skinTone:r,skinTones:i}){super(e);let a=t[0]?.title??``;this.gridView=new uF(e,{categoryName:a,emojiCategories:t,getEmojiByQuery:n,skinTone:r}),this.infoView=new KC,this.searchView=new fF(e,{gridView:this.gridView,resultsView:this.infoView}),this.categoriesView=new dF(e,{emojiCategories:t,categoryName:a}),this.toneView=new pF(e,{skinTone:r,skinTones:i}),this.items=this.createCollection([this.searchView,this.toneView,this.categoriesView,this.gridView,this.infoView]),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,children:[{tag:`div`,children:[this.searchView,this.toneView],attributes:{class:[`ck`,`ck-emoji__search`]}},this.categoriesView,this.gridView,{tag:`div`,children:[this.infoView],attributes:{class:[`ck`,`ck-search__results`]}}],attributes:{tabindex:`-1`,class:[`ck`,`ck-emoji`,`ck-search`]}}),this._setupEventListeners()}render(){super.render(),this.focusTracker.add(this.searchView.element),this.focusTracker.add(this.toneView.element),this.focusTracker.add(this.categoriesView.element),this.focusTracker.add(this.gridView.element),this.focusTracker.add(this.infoView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.searchView.focus()}setCategories(e){let{emojiCategories:t}=this.gridView,n=e[0].title;t.splice(0,t.length,...e),this.categoriesView.setCategories(e),this.categoriesView.categoryName=n,this.gridView.categoryName=n,this.searchView.search(this.searchView.getInputValue())}_setupEventListeners(){let e=this.locale.t;this.searchView.on(`search`,(e,t)=>{t.query?this.categoriesView.disableCategories():this.categoriesView.enableCategories()}),this.searchView.on(`search`,(t,n)=>{this.categoriesView.buttonViews.length&&(n.query.length===1?this.infoView.set({primaryText:e(`Keep on typing to see the emoji.`),secondaryText:e(`The query must contain at least two characters.`),isVisible:!0}):n.resultsCount?this.infoView.set({isVisible:!1}):this.infoView.set({primaryText:e(`No emojis were found matching "%0".`,n.query),secondaryText:e(`Please try a different phrase or check the spelling.`),isVisible:!0}))}),this.searchView.on(`search`,()=>{this.fire(`update`),this.gridView.element.scrollTo(0,0)}),this.categoriesView.on(`change:categoryName`,(e,t,n)=>{this.gridView.categoryName=n,this.searchView.search(``)}),this.toneView.on(`change:skinTone`,(e,t,n)=>{this.gridView.skinTone=n,this.searchView.search(this.searchView.getInputValue())})}},hF=class extends P{backButtonView;focusTracker=new M;keystrokes=new N;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.children=this.createCollection([this._createHeaderView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-form`,`ck-emoji-picker-form`],tabindex:`-1`},children:this.children})}render(){super.render(),[...this.children.filter(Wy),this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element),Gy(e)&&this._focusCycler.chain(e.focusCycler)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Emoji picker`)});return t.children.add(this.backButtonView,0),t}};const gF=`emoji-picker`;var _F=class extends F{static get requires(){return[aF,BC,Qy,gT]}static get pluginName(){return`EmojiPicker`}static get isOfficialPlugin(){return!0}init(){let{editor:e}=this;this.balloonPlugin=e.plugins.get(`ContextualBalloon`),this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`);let t=new lF(e);e.commands.add(`emoji`,t),e.ui.componentFactory.add(`emoji`,()=>{let e=this._createButton(H,t);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:emoji`,()=>this._createButton(U,t)),this._setupConversion()}destroy(){super.destroy(),this.emojiPickerView&&this.emojiPickerView.destroy()}get skinTone(){return this.emojiPickerView?this.emojiPickerView.gridView.skinTone:this.editor.config.get(`emoji.skinTone`)}showUI(e=``){this._showFakeVisualSelection(),this.emojiPickerView||=this._createEmojiPickerView(),e&&this.emojiPickerView.searchView.setInputValue(e),this.emojiPickerView.searchView.search(e),this.emojiPickerFormView||=this._createEmojiPickerFormView(),this.balloonPlugin.hasView(this.emojiPickerFormView)||(this.emojiPickerFormView.backButtonView.isVisible=!!this.balloonPlugin.visibleView,this.balloonPlugin.add({view:this.emojiPickerFormView,position:this._getBalloonPositionData(),balloonClassName:`ck-emoji-picker-balloon`})),this.emojiPickerView.focus()}_createButton(e,t){let n=new e(this.editor.locale),r=this.editor.locale.t;return n.bind(`isEnabled`).to(t,`isEnabled`),n.set({label:r(`Emoji`),icon:x_,isToggleable:!0}),n.on(`execute`,()=>{this.editor.editing.view.scrollToTheSelection(),this.showUI()}),n}_createEmojiPickerView(){let e=[...this.emojiRepositoryPlugin.getEmojiCategories()],t=new mF(this.editor.locale,{emojiCategories:e,skinTone:this.editor.config.get(`emoji.skinTone`),skinTones:this.emojiRepositoryPlugin.getSkinTones(),getEmojiByQuery:e=>this.emojiRepositoryPlugin.getEmojiByQuery(e)});return this.emojiRepositoryPlugin.isRepositoryReady||this.emojiRepositoryPlugin.onReady(e=>{if(!e)return;let n=this.emojiRepositoryPlugin.getEmojiCategories();n.length&&t.setCategories(n)}),this.listenTo(t.gridView,`execute`,(e,t)=>{let n=this.editor,r=t.emoji;this._hideUI(),n.execute(`insertText`,{text:r})}),t}_createEmojiPickerFormView(){let e=new hF(this.editor.locale);return e.children.add(this.emojiPickerView),this.listenTo(this.emojiPickerView,`update`,()=>{this.balloonPlugin.visibleView===e&&this.balloonPlugin.updatePosition()}),this.listenTo(e,`cancel`,()=>{this._hideUI()}),e.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),Ya({emitter:e,contextElements:[this.balloonPlugin.view.element],callback:()=>{this._hideUI(!1)},activator:()=>this.balloonPlugin.visibleView===e}),e}_hideUI(e=!0){this.balloonPlugin.remove(this.emojiPickerFormView),this.emojiPickerView.searchView.setInputValue(``),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection()}_setupConversion(){let e=this.editor;e.conversion.for(`editingDowncast`).markerToHighlight({model:gF,view:{classes:[`ck-fake-emoji-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:gF,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-emoji-selection`,`ck-fake-emoji-selection_collapsed`],n),n}})}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;return{target:()=>e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(gF))t.updateMarker(gF,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(gF)&&e.change(e=>{e.removeMarker(gF)})}},tne=class extends F{static get requires(){return[cF,_F]}static get pluginName(){return`Emoji`}static get isOfficialPlugin(){return!0}},vF=class extends I{constructor(e){super(e),this.affectsData=!1}execute(){let e=this.editor.model,t=e.document.selection,n=e.schema.getLimitElement(t);if(t.containsEntireContent(n)||!yF(e.schema,n))do if(n=n.parent,!n)return;while(!yF(e.schema,n));e.change(e=>{e.setSelection(n,`in`)})}};function yF(e,t){return e.isLimit(t)&&(e.checkChild(t,`$text`)||e.checkChild(t,`paragraph`))}const nne=yi(`Ctrl+A`);var bF=class extends F{static get pluginName(){return`SelectAllEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.editing.view.document;e.commands.add(`selectAll`,new vF(e)),this.listenTo(n,`keydown`,(t,n)=>{vi(n)===nne&&(e.execute(`selectAll`),n.preventDefault())}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Select all`),keystroke:`CTRL+A`}]})}},xF=class extends F{static get pluginName(){return`SelectAllUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`selectAll`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:selectAll`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`selectAll`),i=new e(t.locale),a=n.t;return i.set({label:a(`Select all`),icon:ny,keystroke:`Ctrl+A`}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`selectAll`),t.editing.view.focus()}),i}},SF=class extends F{static get requires(){return[bF,xF]}static get pluginName(){return`SelectAll`}static get isOfficialPlugin(){return!0}},rne=class extends F{static get requires(){return[tb,PO,TE,SF,kE,gT,Ik]}static get pluginName(){return`Essentials`}static get isOfficialPlugin(){return!0}},CF=class extends P{children;_findInputView;_replaceInputView;_findButtonView;_findPrevButtonView;_findNextButtonView;_advancedOptionsCollapsibleView;_matchCaseSwitchView;_wholeWordsOnlySwitchView;_replaceButtonView;_replaceAllButtonView;_inputsDivView;_actionButtonsDivView;_focusTracker;_keystrokes;_focusables;focusCycler;constructor(e){super(e);let t=e.t;this.children=this.createCollection(),this.set(`matchCount`,0),this.set(`highlightOffset`,0),this.set(`isDirty`,!1),this.set(`_areCommandsEnabled`,{}),this.set(`_resultsCounterText`,``),this.set(`_matchCase`,!1),this.set(`_wholeWordsOnly`,!1),this.bind(`_searchResultsFound`).to(this,`matchCount`,this,`isDirty`,(e,t)=>e>0&&!t),this._findInputView=this._createInputField(t(`Find in text…`)),this._findPrevButtonView=this._createButton({label:t(`Previous result`),class:`ck-button-prev`,icon:Wv,keystroke:`Shift+F3`,tooltip:!0}),this._findNextButtonView=this._createButton({label:t(`Next result`),class:`ck-button-next`,icon:Wv,keystroke:`F3`,tooltip:!0}),this._replaceInputView=this._createInputField(t(`Replace with…`),`ck-labeled-field-replace`),this._inputsDivView=this._createInputsDiv(),this._matchCaseSwitchView=this._createMatchCaseSwitch(),this._wholeWordsOnlySwitchView=this._createWholeWordsOnlySwitch(),this._advancedOptionsCollapsibleView=this._createAdvancedOptionsCollapsible(),this._replaceAllButtonView=this._createButton({label:t(`Replace all`),class:`ck-button-replaceall`,withText:!0}),this._replaceButtonView=this._createButton({label:t(`Replace`),class:`ck-button-replace`,withText:!0}),this._findButtonView=this._createButton({label:t(`Find`),class:`ck-button-find ck-button-action`,withText:!0}),this._actionButtonsDivView=this._createActionButtonsDiv(),this._focusTracker=new M,this._keystrokes=new N,this._focusables=new pa,this.focusCycler=new Hy({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this._keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.children.addMany([this._inputsDivView,this._advancedOptionsCollapsibleView,this._actionButtonsDivView]),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-find-and-replace-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),this._initFocusCycling(),this._initKeystrokeHandling()}destroy(){super.destroy(),this._focusTracker.destroy(),this._keystrokes.destroy()}focus(e){e===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}reset(){this._findInputView.errorText=null,this.isDirty=!0}get _textToFind(){return this._findInputView.fieldView.element.value}get _textToReplace(){return this._replaceInputView.fieldView.element.value}_createInputsDiv(){let e=this.locale,t=e.t,n=new P(e);return this._findInputView.fieldView.on(`input`,()=>{this.isDirty=!0}),this._findPrevButtonView.delegate(`execute`).to(this,`findPrevious`),this._findNextButtonView.delegate(`execute`).to(this,`findNext`),this._findPrevButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findPrevious:e})=>e),this._findNextButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findNext:e})=>e),this._injectFindResultsCounter(),this._replaceInputView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceInputView.bind(`infoText`).to(this._replaceInputView,`isEnabled`,this._replaceInputView,`isFocused`,(e,n)=>e||!n?``:t(`Tip: Find some text first in order to replace it.`)),n.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__inputs`]},children:[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView]}),n}_onFindButtonExecute(){if(!this._textToFind){let e=this.t;this._findInputView.errorText=e(`Text to find must not be empty.`);return}this.isDirty=!1,this.fire(`findNext`,{searchText:this._textToFind,matchCase:this._matchCase,wholeWords:this._wholeWordsOnly})}_injectFindResultsCounter(){let e=this.locale,t=e.t,n=this.bindTemplate,r=new P(this.locale);this.bind(`_resultsCounterText`).to(this,`highlightOffset`,this,`matchCount`,(e,n)=>t(`%0 of %1`,[e,n])),r.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-results-counter`,n.if(`isDirty`,`ck-hidden`)]},children:[{text:n.to(`_resultsCounterText`)}]});let i=()=>{let t=this._findInputView.fieldView.element;if(!t||!Yr(t))return;let n=new O(r.element).width,i=e.uiLanguageDirection===`ltr`?`paddingRight`:`paddingLeft`;n?t.style[i]=`calc( 2 * var(--ck-spacing-standard) + ${n}px )`:t.style[i]=``};this.on(`change:_resultsCounterText`,i,{priority:`low`}),this.on(`change:isDirty`,i,{priority:`low`}),this._findInputView.template.children[0].children.push(r)}_createAdvancedOptionsCollapsible(){let e=this.locale.t,t=new xb(this.locale,[this._matchCaseSwitchView,this._wholeWordsOnlySwitchView]);return t.set({label:e(`Advanced options`),isCollapsed:!0}),t}_createActionButtonsDiv(){let e=new P(this.locale);return this._replaceButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceAllButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replaceAll:e},t)=>e&&t),this._replaceButtonView.on(`execute`,()=>{this.fire(`replace`,{searchText:this._textToFind,replaceText:this._textToReplace})}),this._replaceAllButtonView.on(`execute`,()=>{this.fire(`replaceAll`,{searchText:this._textToFind,replaceText:this._textToReplace}),this.focus()}),this._findButtonView.on(`execute`,this._onFindButtonExecute.bind(this)),e.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__actions`]},children:[this._replaceAllButtonView,this._replaceButtonView,this._findButtonView]}),e}_createMatchCaseSwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Match case`),withText:!0}),t.bind(`isOn`).to(this,`_matchCase`),t.on(`execute`,()=>{this._matchCase=!this._matchCase,this.isDirty=!0}),t}_createWholeWordsOnlySwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Whole words only`),withText:!0}),t.bind(`isOn`).to(this,`_wholeWordsOnly`),t.on(`execute`,()=>{this._wholeWordsOnly=!this._wholeWordsOnly,this.isDirty=!0}),t}_initFocusCycling(){[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView,this._advancedOptionsCollapsibleView.buttonView,this._matchCaseSwitchView,this._wholeWordsOnlySwitchView,this._replaceAllButtonView,this._replaceButtonView,this._findButtonView].forEach(e=>{this._focusables.add(e),this._focusTracker.add(e.element)})}_initKeystrokeHandling(){let e=e=>e.stopPropagation(),t=e=>{e.stopPropagation(),e.preventDefault()};this._keystrokes.listenTo(this.element),this._keystrokes.set(`f3`,e=>{t(e),this._findNextButtonView.fire(`execute`)}),this._keystrokes.set(`shift+f3`,e=>{t(e),this._findPrevButtonView.fire(`execute`)}),this._keystrokes.set(`enter`,e=>{let n=e.target;n===this._findInputView.fieldView.element?(this._areCommandsEnabled.findNext?this._findNextButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e)):n===this._replaceInputView.fieldView.element&&!this.isDirty&&(this._replaceButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`shift+enter`,e=>{e.target===this._findInputView.fieldView.element&&(this._areCommandsEnabled.findPrevious?this._findPrevButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`arrowright`,e),this._keystrokes.set(`arrowleft`,e),this._keystrokes.set(`arrowup`,e),this._keystrokes.set(`arrowdown`,e)}_createButton(e){let t=new H(this.locale);return t.set(e),t}_createInputField(e,t){let n=new Qb(this.locale,Jx);return n.label=e,n.class=t,n}},wF=class extends F{static get requires(){return[Qy]}static get pluginName(){return`FindAndReplaceUI`}static get isOfficialPlugin(){return!0}formView;constructor(e){super(e),e.config.define(`findAndReplace.uiType`,`dialog`),this.formView=null}init(){let e=this.editor,t=e.config.get(`findAndReplace.uiType`)===`dropdown`,n=e.commands.get(`find`),r=this.editor.t;e.ui.componentFactory.add(`findAndReplace`,()=>{let r;return t?(r=this._createDropdown(),r.bind(`isEnabled`).to(n)):r=this._createDialogButtonForToolbar(),e.keystrokes.set(`Ctrl+F`,(t,i)=>{if(n.isEnabled){if(r instanceof sx){let e=r.buttonView;e.isOn||e.fire(`execute`)}else r.isOn?e.plugins.get(`Dialog`).view.focus():r.fire(`execute`);i()}}),r}),t||e.ui.componentFactory.add(`menuBar:findAndReplace`,()=>this._createDialogButtonForMenuBar()),e.accessibility.addKeystrokeInfos({keystrokes:[{label:r(`Find in the document`),keystroke:`CTRL+F`}]})}_createDropdown(){let e=this.editor,t=e.locale.t,n=Nx(e.locale);return n.once(`change:isOpen`,()=>{this.formView=this._createFormView(),this.formView.children.add(new By(e.locale,{label:t(`Find and replace`)}),0),n.panelView.children.add(this.formView)}),n.on(`change:isOpen`,(e,t,n)=>{n?this._setupFormView():this.fire(`searchReseted`)},{priority:`low`}),n.buttonView.set({icon:C_,label:t(`Find and replace`),keystroke:`CTRL+F`,tooltip:!0}),n}_createDialogButtonForToolbar(){let e=this.editor,t=this._createButton(H),n=e.plugins.get(`Dialog`);return t.set({tooltip:!0}),t.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),t.on(`execute`,()=>{t.isOn?n.hide():this._showDialog()}),t}_createDialogButtonForMenuBar(){let e=this._createButton(U),t=this.editor.plugins.get(`Dialog`),n=this.editor.plugins.get(`Dialog`);return e.set({role:`menuitemcheckbox`,isToggleable:!0}),e.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),e.on(`execute`,()=>{if(t.id===`findAndReplace`){t.hide();return}this._showDialog()}),e}_createButton(e){let t=this.editor,n=t.commands.get(`find`),r=new e(t.locale),i=t.locale.t;return r.bind(`isEnabled`).to(n),r.set({icon:C_,label:i(`Find and replace`),keystroke:`CTRL+F`}),r}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.locale.t;this.formView||=this._createFormView(),t.show({id:`findAndReplace`,title:n(`Find and replace`),content:this.formView,position:Jy.EDITOR_TOP_SIDE,onShow:()=>{this._setupFormView()},onHide:()=>{this.fire(`searchReseted`)}})}_createFormView(){let e=this.editor,t=new(Xa(CF))(e.locale),n=e.commands,r=this.editor.plugins.get(`FindAndReplaceEditing`).state;t.bind(`highlightOffset`).to(r,`highlightedOffset`),t.listenTo(r.results,`change`,()=>{t.matchCount=r.results.length});let i=n.get(`findNext`),a=n.get(`findPrevious`),o=n.get(`replace`),s=n.get(`replaceAll`);return t.bind(`_areCommandsEnabled`).to(i,`isEnabled`,a,`isEnabled`,o,`isEnabled`,s,`isEnabled`,(e,t,n,r)=>({findNext:e,findPrevious:t,replace:n,replaceAll:r})),t.delegate(`findNext`,`findPrevious`,`replace`,`replaceAll`).to(this),t.on(`change:isDirty`,(e,t,n)=>{n&&this.fire(`searchReseted`)}),t}_setupFormView(){this.formView.disableCssTransitions(),this.formView.reset(),this.formView._findInputView.fieldView.select(),this.formView.enableCssTransitions()}},TF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this.affectsData=!1,this._state=t}execute(e,{matchCase:t,wholeWords:n}={}){let{editor:r}=this,{model:i}=r,a=r.plugins.get(`FindAndReplaceUtils`),o,s=``;o=typeof e==`string`?(...r)=>({results:a.findByTextCallback(e,{matchCase:t,wholeWords:n})(...r),searchText:e}):e;let c=o;o=(...e)=>{let t=c(...e);return t&&`searchText`in t&&(s=t.searchText),t};let l=i.document.getRootNames().reduce(((e,t)=>a.updateFindResultFromRange(i.createRangeIn(i.document.getRoot(t)),i,o,e)),null);return this._state.clear(i),this._state.results.addMany(l),this._state.highlightedResult=l.get(0),this._state.searchText=s,o&&(this._state.lastSearchCallback=o),this._state.matchCase=!!t,this._state.matchWholeWords=!!n,{results:l,findCallback:o}}};const ine=D();var EF=class extends ine{constructor(e){super(),this.set(`results`,new Fi),this.set(`highlightedResult`,null),this.set(`highlightedOffset`,0),this.set(`searchText`,``),this.set(`replaceText`,``),this.set(`lastSearchCallback`,null),this.set(`matchCase`,!1),this.set(`matchWholeWords`,!1),this.results.on(`change`,(t,{removed:n,index:r})=>{if(Array.from(n).length){let t=!1;if(e.change(r=>{for(let i of n)this.highlightedResult===i&&(t=!0),e.markers.has(i.marker.name)&&r.removeMarker(i.marker)}),t){let e=r>=this.results.length?0:r;this.highlightedResult=this.results.get(e)}}}),this.on(`change:highlightedResult`,()=>{this.refreshHighlightOffset(e)})}clear(e){this.searchText=``,e.change(t=>{if(this.highlightedResult){let n=this.highlightedResult.marker.name.split(`:`)[1],r=e.markers.get(`findResultHighlighted:${n}`);r&&t.removeMarker(r)}[...this.results].forEach(({marker:e})=>{t.removeMarker(e)})}),this.results.clear()}refreshHighlightOffset(e){let{highlightedResult:t,results:n}=this;t?this.highlightedOffset=DF(e,[...n]).indexOf(t)+1:this.highlightedOffset=0}};function DF(e,t){let n={before:-1,same:0,after:1,different:1};return e.document.getRootNames().flatMap(e=>t.filter(t=>t.marker.getStart().root.rootName===e).sort((e,t)=>n[e.marker.getStart().compareWith(t.marker.getStart())]))}var OF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this._state=t,this._isEnabledBasedOnSelection=!1}_replace(e,t){let{model:n}=this.editor,r=t.marker.getRange();n.canEditAt(r)&&n.change(i=>{if(r.root.rootName===`$graveyard`){this._state.results.remove(t);return}let a={};for(let e of r.getItems())if(e.is(`$text`)||e.is(`$textProxy`)){a=e.getAttributes();break}n.insertContent(i.createText(e,a),r),this._state.results.has(t)&&this._state.results.remove(t)})}},kF=class extends OF{execute(e,t){let n=Math.max(this._state.highlightedOffset-1,0);if(this._replace(e,t),this._state.results.length){let e=DF(this.editor.model,[...this._state.results]);this._state.highlightedResult=e[n%e.length]}}},AF=class extends OF{execute(e,t){let{editor:n}=this,{model:r}=n,i=n.plugins.get(`FindAndReplaceUtils`),a=t instanceof Fi?t:r.document.getRootNames().reduce(((e,n)=>i.updateFindResultFromRange(r.createRangeIn(r.document.getRoot(n)),r,i.findByTextCallback(t,this._state),e)),null);a.length&&r.change(()=>{[...a].forEach(t=>{this._replace(e,t)})})}},jF=class extends I{_state;constructor(e,t){super(e),this.affectsData=!1,this._state=t,this.isEnabled=!1,this.listenTo(this._state.results,`change`,()=>{this.isEnabled=this._state.results.length>1})}refresh(){this.isEnabled=this._state.results.length>1}execute(){let e=this._state.results,t=e.getIndex(this._state.highlightedResult),n=t+1>=e.length?0:t+1;this._state.highlightedResult=this._state.results.get(n)}},MF=class extends jF{execute(){let e=this._state.results.getIndex(this._state.highlightedResult),t=e-1<0?this._state.results.length-1:e-1;this._state.highlightedResult=this._state.results.get(t)}},NF=class extends F{static get pluginName(){return`FindAndReplaceUtils`}static get isOfficialPlugin(){return!0}updateFindResultFromRange(e,t,n,r){let i=r||new Fi,a=e=>i.find(t=>{let{marker:n}=t,r=n.getRange(),i=e.getRange();return r.isEqual(i)});return t.change(r=>{[...e].forEach(({type:e,item:o})=>{if(e===`elementStart`&&t.schema.checkChild(o,`$text`)){let e=n({item:o,text:this.rangeToText(t.createRangeIn(o))});if(!e)return;`results`in e&&(e=e.results),e.forEach(e=>{let t=`findResult:${he()}`,n=r.addMarker(t,{usingOperation:!1,affectsData:!1,range:r.createRange(r.createPositionAt(o,e.start),r.createPositionAt(o,e.end))}),s=ane(i,n);a(n)||i.add({id:t,label:e.label,marker:n},s)})}})}),i}rangeToText(e){return Array.from(e.getItems({shallow:!0})).reduce((e,t)=>t.is(`$text`)||t.is(`$textProxy`)?e+t.data:`${e}\n`,``)}findByTextCallback(e,t){let n=`gu`;t.matchCase||(n+=`i`);let r=`(${Bn(e)})`;if(t.wholeWords){let t=`[^a-zA-ZÀ-ɏḀ-ỿ]`;RegExp(`^[^a-zA-ZÀ-ɏḀ-ỿ]`).test(e)||(r=`(^|${t}|_)${r}`),RegExp(`[^a-zA-ZÀ-ɏḀ-ỿ]$`).test(e)||(r=`${r}(?=_|${t}|$)`)}let i=new RegExp(r,n);function a({text:e}){return[...e.matchAll(i)].map(one)}return a}};function ane(e,t){let n=e.find(({marker:e})=>t.getStart().isBefore(e.getStart()));return n?e.getIndex(n):e.length}function one(e){let t=e.length-1,n=e.index;return e.length===3&&(n+=e[1].length),{label:e[t],start:n,end:n+e[t].length}}var PF=class extends F{static get requires(){return[NF]}static get pluginName(){return`FindAndReplaceEditing`}static get licenseFeatureCode(){return`FAR`}static get isPremiumPlugin(){return!0}static get isOfficialPlugin(){return!0}state;init(){this.state=new EF(this.editor.model),this.set(`_isSearchActive`,!1),this._defineConverters(),this._defineCommands(),this.listenTo(this.state,`change:highlightedResult`,(e,t,n,r)=>{let{model:i}=this.editor;i.change(e=>{if(r){let t=r.marker.name.split(`:`)[1],n=i.markers.get(`findResultHighlighted:${t}`);n&&e.removeMarker(n)}if(n){let t=n.marker.name.split(`:`)[1];e.addMarker(`findResultHighlighted:${t}`,{usingOperation:!1,affectsData:!1,range:n.marker.getRange()})}})});let e=Kt(((e,t,n)=>{if(n){let e=this.editor.editing.view.domConverter,t=this.editor.editing.mapper.toViewRange(n.marker.getRange());ni({target:e.viewRangeToDom(t),viewportOffset:40})}}).bind(this),32);this.listenTo(this.state,`change:highlightedResult`,e,{priority:`low`}),this.listenTo(this.editor,`destroy`,e.cancel),this.on(`change:_isSearchActive`,(e,t,n)=>{n?this.listenTo(this.editor.model.document,`change:data`,this._onDocumentChange):this.stopListening(this.editor.model.document,`change:data`,this._onDocumentChange)})}find(e,t){return this._isSearchActive=!0,this.editor.execute(`find`,e,t),this.state.results}stop(){this.state.clear(this.editor.model),this._isSearchActive=!1}_defineCommands(){this.editor.commands.add(`find`,new TF(this.editor,this.state)),this.editor.commands.add(`findNext`,new jF(this.editor,this.state)),this.editor.commands.add(`findPrevious`,new MF(this.editor,this.state)),this.editor.commands.add(`replace`,new kF(this.editor,this.state)),this.editor.commands.add(`replaceAll`,new AF(this.editor,this.state))}_defineConverters(){let{editor:e}=this;e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResult`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result`],attributes:{"data-find-result":t}}}}),e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResultHighlighted`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result_selected`],attributes:{"data-find-result":t}}}})}_onDocumentChange=()=>{let e=new Set,t=new Set,n=this.editor.model,{results:r}=this.state,i=n.document.differ.getChanges(),a=n.document.differ.getChangedMarkers();i.forEach(r=>{r.position&&(r.name===`$text`||r.position.nodeAfter&&n.schema.isInline(r.position.nodeAfter)?(e.add(r.position.parent),[...n.markers.getMarkersAtPosition(r.position)].forEach(e=>{t.add(e.name)})):r.type===`insert`&&r.position.nodeAfter&&e.add(r.position.nodeAfter))}),a.forEach(({name:e,data:{newRange:n}})=>{n&&n.start.root.rootName===`$graveyard`&&t.add(e)}),e.forEach(e=>{[...n.markers.getMarkersIntersectingRange(n.createRangeIn(e))].forEach(e=>t.add(e.name))}),t.forEach(e=>{r.has(e)&&(r.get(e)===this.state.highlightedResult&&(this.state.highlightedResult=null),r.remove(e))});let o=[],s=this.editor.plugins.get(`FindAndReplaceUtils`);e.forEach(e=>{let t=s.updateFindResultFromRange(n.createRangeOn(e),n,this.state.lastSearchCallback,r);o.push(...t)}),a.forEach(e=>{if(e.data.newRange){let t=s.updateFindResultFromRange(e.data.newRange,n,this.state.lastSearchCallback,r);o.push(...t)}}),!this.state.highlightedResult&&o.length?this.state.highlightedResult=o[0]:this.state.refreshHighlightOffset(n)}},sne=class extends F{static get requires(){return[PF,wF]}static get pluginName(){return`FindAndReplace`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(`FindAndReplaceUI`),t=this.editor.plugins.get(`FindAndReplaceEditing`),n=t.state;e.on(`findNext`,(e,r)=>{r?(n.searchText=r.searchText,t.find(r.searchText,r)):this.editor.execute(`findNext`)}),e.on(`findPrevious`,(e,r)=>{r&&n.searchText!==r.searchText?t.find(r.searchText):this.editor.execute(`findPrevious`)}),e.on(`replace`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText);let i=n.highlightedResult;i&&this.editor.execute(`replace`,r.replaceText,i)}),e.on(`replaceAll`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText),this.editor.execute(`replaceAll`,r.replaceText,n.results)}),e.on(`searchReseted`,()=>{n.clear(this.editor.model),t.stop()})}},FF=class extends I{attributeKey;constructor(e,t){super(e),this.attributeKey=t}refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(this.attributeKey),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value,i=e.batch,a=e=>{if(n.isCollapsed)r?e.setSelectionAttribute(this.attributeKey,r):e.removeSelectionAttribute(this.attributeKey);else{let i=t.schema.getValidRanges(n.getRanges(),this.attributeKey,{includeEmptyRanges:!0});for(let t of i){let n=t,i=this.attributeKey;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(this.attributeKey)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}};i?t.enqueueChange(i,e=>{a(e)}):t.change(e=>{a(e)})}};const IF=`fontSize`,LF=`fontFamily`,RF=`fontColor`,zF=`fontBackgroundColor`;function BF(e,t){let n={model:{key:e,values:[]},view:{},upcastAlso:{}};for(let e of t)n.model.values.push(e.model),n.view[e.model]=e.view,e.upcastAlso&&(n.upcastAlso[e.model]=e.upcastAlso);return n}function VF(e){return t=>cne(t.getStyle(e))}function HF(e){return(t,{writer:n})=>n.createAttributeElement(`span`,{style:`${e}:${t}`},{priority:7})}function UF({dropdownView:e,colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s}){let c=e.locale,l=new GS(c,{colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s});return e.colorSelectorView=l,e.panelView.children.add(l),l}function cne(e){return e.replace(/\s/g,``)}var WF=class extends FF{constructor(e){super(e,LF)}};function GF(e){return e.map(lne).filter(e=>e!==void 0)}function KF(e){return e.replace(/["']/g,``).split(`,`).map(e=>e.trim())}function lne(e){if(typeof e==`object`)return e;if(e==="default")return{title:`Default`,model:void 0};if(typeof e==`string`)return une(e)}function une(e){let t=KF(e),n=t[0],r=t.map(dne).join(`, `);return{title:n,model:r,view:{name:`span`,styles:{"font-family":r},priority:7}}}function dne(e){return e=e.trim(),e.indexOf(` `)>0&&(e=`'${e}'`),e}var qF=class extends F{static get pluginName(){return`FontFamilyEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(LF,{options:[`default`,`Arial, Helvetica, sans-serif`,`Courier New, Courier, monospace`,`Georgia, serif`,`Lucida Sans Unicode, Lucida Grande, sans-serif`,`Tahoma, Geneva, sans-serif`,`Times New Roman, Times, serif`,`Trebuchet MS, Helvetica, sans-serif`,`Verdana, Geneva, sans-serif`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:LF}),e.model.schema.setAttributeProperties(LF,{isFormatting:!0,copyOnEnter:!0});let t=BF(LF,GF(e.config.get(`fontFamily.options`)).filter(e=>e.model));e.config.get(`fontFamily.supportAllValues`)?(this._prepareAnyValueConverters(),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(t),e.commands.add(LF,new WF(e))}_prepareAnyValueConverters(){let e=this.editor;e.conversion.for(`downcast`).attributeToElement({model:LF,view:(e,{writer:t})=>t.createAttributeElement(`span`,{style:`font-family:`+e},{priority:7})}),e.conversion.for(`upcast`).elementToAttribute({model:{key:LF,value:e=>e.getStyle(`font-family`)},view:{name:`span`,styles:{"font-family":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{face:/.*/}},model:{key:LF,value:e=>e.getAttribute(`face`)}})}},JF=class extends F{static get pluginName(){return`FontFamilyUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(LF),i=t(`Font Family`),a=fne(n,r);e.ui.componentFactory.add(LF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:E_,tooltip:!0}),n.extendTemplate({attributes:{class:`ck-font-family-dropdown`}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${LF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:E_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t;return GF(e.config.get(LF).options).map(e=>(e.title===`Default`&&(e.title=t(`Default`)),e))}};function fne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:LF,commandParam:r.model,label:r.title,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,e=>e===r.model?!0:!e||!r.model?!1:KF(e)[0].toLowerCase()===KF(r.model)[0].toLowerCase()),r.view&&typeof r.view!=`string`&&r.view.styles&&e.model.set(`labelStyle`,`font-family: ${r.view.styles[`font-family`]}`),n.add(e)}return n}var YF=class extends F{static get requires(){return[qF,JF]}static get pluginName(){return`FontFamily`}static get isOfficialPlugin(){return!0}},XF=class extends FF{constructor(e){super(e,IF)}};function ZF(e){return e.map(e=>pne(e)).filter(e=>e!==void 0)}const QF={get tiny(){return{title:`Tiny`,model:`tiny`,view:{name:`span`,classes:`text-tiny`,priority:7}}},get small(){return{title:`Small`,model:`small`,view:{name:`span`,classes:`text-small`,priority:7}}},get big(){return{title:`Big`,model:`big`,view:{name:`span`,classes:`text-big`,priority:7}}},get huge(){return{title:`Huge`,model:`huge`,view:{name:`span`,classes:`text-huge`,priority:7}}}};function pne(e){if(typeof e==`number`&&(e=String(e)),typeof e==`object`&&gne(e))return $F(e);let t=hne(e);if(t)return $F(t);if(e==="default")return{model:void 0,title:`Default`};if(!_ne(e))return mne(e)}function mne(e){return typeof e==`string`&&(e={title:e,model:`${parseFloat(e)}px`}),e.view={name:`span`,styles:{"font-size":e.model}},$F(e)}function $F(e){return e.view&&typeof e.view!=`string`&&!e.view.priority&&(e.view.priority=7),e}function hne(e){return typeof e==`string`?QF[e]:QF[e.model]}function gne(e){return e.title&&e.model&&e.view}function _ne(e){let t;if(typeof e==`object`)if(e.model)t=parseFloat(e.model);else throw new w(`font-size-invalid-definition`,null,e);else t=parseFloat(e);return isNaN(t)}const eI=[`x-small`,`x-small`,`small`,`medium`,`large`,`x-large`,`xx-large`,`xxx-large`];var tI=class extends F{static get pluginName(){return`FontSizeEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(IF,{options:[`tiny`,`small`,`default`,`big`,`huge`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:IF}),e.model.schema.setAttributeProperties(IF,{isFormatting:!0,copyOnEnter:!0});let t=e.config.get(`fontSize.supportAllValues`),n=BF(IF,ZF(this.editor.config.get(`fontSize.options`)).filter(e=>e.model));t?(this._prepareAnyValueConverters(n),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(n),e.commands.add(IF,new XF(e))}_prepareAnyValueConverters(e){let t=this.editor,n=e.model.values.filter(e=>!Gp(String(e))&&!qp(String(e)));if(n.length)throw new w(`font-size-invalid-use-of-named-presets`,null,{presets:n});t.conversion.for(`downcast`).attributeToElement({model:IF,view:(e,{writer:t})=>{if(e)return t.createAttributeElement(`span`,{style:`font-size:`+e},{priority:7})}}),t.conversion.for(`upcast`).elementToAttribute({model:{key:IF,value:e=>e.getStyle(`font-size`)},view:{name:`span`,styles:{"font-size":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{size:/^[+-]?\d{1,3}$/}},model:{key:IF,value:e=>{let t=e.getAttribute(`size`),n=t[0]===`-`||t[0]===`+`,r=parseInt(t,10);n&&(r=3+r);let i=eI.length-1;return eI[Math.min(Math.max(r,0),i)]}}})}},nI=class extends F{static get pluginName(){return`FontSizeUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(IF),i=t(`Font Size`),a=vne(n,r);e.ui.componentFactory.add(IF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:D_,tooltip:!0}),n.extendTemplate({attributes:{class:[`ck-font-size-dropdown`]}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${IF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:D_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t,n={Default:t(`Default`),Tiny:t(`Tiny`),Small:t(`Small`),Big:t(`Big`),Huge:t(`Huge`)};return ZF(e.config.get(IF).options).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e=Object.assign({},e,{title:t})),e})}};function vne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:IF,commandParam:r.model,label:r.title,class:`ck-fontsize-option`,role:`menuitemradio`,withText:!0})};r.view&&typeof r.view!=`string`&&(r.view.styles&&e.model.set(`labelStyle`,`font-size:${r.view.styles[`font-size`]}`),r.view.classes&&e.model.set(`class`,`${e.model.class} ${r.view.classes}`)),e.model.bind(`isOn`).to(t,`value`,e=>e===r.model),n.add(e)}return n}var rI=class extends F{static get requires(){return[tI,nI]}static get pluginName(){return`FontSize`}static get isOfficialPlugin(){return!0}normalizeSizeOptions(e){return ZF(e)}},iI=class extends FF{constructor(e){super(e,RF)}},aI=class extends F{static get pluginName(){return`FontColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(RF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{color:/[\s\S]+/}},model:{key:RF,value:VF(`color`)}}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{color:/^#?\w+$/}},model:{key:RF,value:e=>e.getAttribute(`color`)}}),e.conversion.for(`downcast`).attributeToElement({model:RF,view:HF(`color`)}),e.commands.add(RF,new iI(e)),e.model.schema.extend(`$text`,{allowAttributes:RF}),e.model.schema.setAttributeProperties(RF,{isFormatting:!0,copyOnEnter:!0})}},oI=class extends F{commandName;componentName;icon;dropdownLabel;columns;constructor(e,{commandName:t,componentName:n,icon:r,dropdownLabel:i}){super(e),this.commandName=t,this.componentName=n,this.icon=r,this.dropdownLabel=i,this.columns=e.config.get(`${this.componentName}.columns`)}init(){let e=this.editor,t=e.locale,n=t.t,r=e.commands.get(this.commandName),i=e.config.get(this.componentName),a=Sb(t,Cb(i.colors)),o=i.documentColors,s=i.colorPicker!==!1;e.ui.componentFactory.add(this.componentName,t=>{let c=Nx(t),l=!1,u=UF({dropdownView:c,colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:s?i.colorPicker||{}:!1});return u.bind(`selectedColor`).to(r,`value`),c.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:!0}),c.extendTemplate({attributes:{class:`ck-color-ui-dropdown`}}),c.bind(`isEnabled`).to(r),u.on(`execute`,(t,n)=>{c.isOpen&&e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),n.source!==`colorPicker`&&e.editing.view.focus(),n.source===`colorPickerSaveButton`&&(c.isOpen=!1)}),u.on(`colorPicker:show`,()=>{this._undoStepBatch=e.model.createBatch()}),u.on(`colorPicker:cancel`,()=>{this._undoStepBatch.operations.length&&(c.isOpen=!1,e.execute(`undo`,this._undoStepBatch)),e.editing.view.focus()}),c.on(`change:isOpen`,(t,n,r)=>{l||(l=!0,c.colorSelectorView.appendUI()),r&&(o!==0&&u.updateDocumentColors(e.model,this.componentName),u.updateSelectedColors(),u.showColorGridsFragment())}),zx(c,()=>c.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find(e=>e.isOn)),c}),e.ui.componentFactory.add(`menuBar:${this.componentName}`,t=>{let i=new uw(t);i.buttonView.set({label:this.dropdownLabel,icon:this.icon}),i.bind(`isEnabled`).to(r);let s=!1,c=new GS(t,{colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:!1});return c.bind(`selectedColor`).to(r,`value`),c.delegate(`execute`).to(i),c.on(`execute`,(t,n)=>{e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),e.editing.view.focus()}),i.on(`change:isOpen`,(t,n,r)=>{s||(s=!0,c.appendUI()),r&&(o!==0&&c.updateDocumentColors(e.model,this.componentName),c.updateSelectedColors(),c.showColorGridsFragment())}),i.panelView.children.add(c),i})}},sI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:RF,componentName:RF,icon:T_,dropdownLabel:t(`Font Color`)})}static get pluginName(){return`FontColorUI`}},cI=class extends F{static get requires(){return[aI,sI]}static get pluginName(){return`FontColor`}static get isOfficialPlugin(){return!0}},lI=class extends FF{constructor(e){super(e,zF)}},uI=class extends F{static get pluginName(){return`FontBackgroundColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(zF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.data.addStyleProcessorRules(hm),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{"background-color":/[\s\S]+/}},model:{key:zF,value:VF(`background-color`)}}),e.conversion.for(`downcast`).attributeToElement({model:zF,view:HF(`background-color`)}),e.commands.add(zF,new lI(e)),e.model.schema.extend(`$text`,{allowAttributes:zF}),e.model.schema.setAttributeProperties(zF,{isFormatting:!0,copyOnEnter:!0})}},dI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:zF,componentName:zF,icon:w_,dropdownLabel:t(`Font Background Color`)})}static get pluginName(){return`FontBackgroundColorUI`}},fI=class extends F{static get requires(){return[uI,dI]}static get pluginName(){return`FontBackgroundColor`}static get isOfficialPlugin(){return!0}},yne=class extends F{static get requires(){return[YF,rI,cI,fI]}static get pluginName(){return`Font`}static get isOfficialPlugin(){return!0}},pI=class{_placeholderMap;_wrapper=null;_document;_annotationsUIsData=null;_paginationBodyCollection=null;_hasLeftCollapseButton=!1;_collapseLeftSidebarButton=null;_resizeObserver=null;_sidebarsWidths={left:0,right:0};_keepLeftSidebarHidden=!1;_forceShowLeftSidebar=!1;_sourceEditingCallback=(e,t,n)=>{this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=n?`none`:``};_hiddenElements=new Map;_savedAncestorsScrollPositions=new Map;_showRevisionViewerCallback=null;_closeRevisionViewerCallback=null;_aiTabsData=null;constructor(e){this._placeholderMap=new Map,e.plugins.has(`RevisionHistory`)&&(this._showRevisionViewerCallback=e.config.get(`revisionHistory`).showRevisionViewerCallback,this._closeRevisionViewerCallback=e.config.get(`revisionHistory`).closeRevisionViewerCallback),this._editor=e,this._document=this._editor.sourceElement?this._editor.sourceElement.ownerDocument:u.document,this._editor.config.define(`fullscreen.container`,this._document.body),e.on(`destroy`,()=>{this._wrapper&&this.destroy(),this._resizeObserver&&this._resizeObserver.destroy()})}moveToFullscreen(e,t){let n=mr(this._document,`div`);n.setAttribute(`data-ck-fullscreen-placeholder`,t),e.replaceWith(n),this.getWrapper().querySelector(`[data-ck-fullscreen="${t}"]`).append(e),this._placeholderMap.set(t,{placeholderElement:n,movedElement:e})}restoreMovedElementLocation(e){if(!this._placeholderMap.has(e))return;let{placeholderElement:t,movedElement:n}=this._placeholderMap.get(e);t.replaceWith(n),t.remove(),this._placeholderMap.delete(e),this._placeholderMap.size===0&&this._destroyContainer()}getWrapper(){return this._wrapper||(this._wrapper=mr(this._document,`div`,{class:`ck ck-fullscreen__main-wrapper`}),this._wrapper.innerHTML=` -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - `,this._editor.config.get(`fullscreen.container`).appendChild(this._wrapper)),this._wrapper}enable(){if(this._saveAncestorsScrollPositions(this._editor.ui.getEditableElement()),this.defaultOnEnter(),this._editor.config.get(`fullscreen.container`)===this._document.body&&(this._document.body.classList.add(`ck-fullscreen`),this._document.body.parentElement.classList.add(`ck-fullscreen`)),this._editor.plugins.has(`PresenceListUI`)&&this._generatePresenceListContainer(),this._editor.plugins.has(`DocumentOutlineUI`)&&this._generateDocumentOutlineContainer(),this._hasLeftCollapseButton&&this._generateCollapseButton(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),this._paginationBodyCollection=new nb(this._editor.locale),this._paginationBodyCollection.attachToDom(),e.linesRepository.setViewCollection(this._paginationBodyCollection),this._editor.once(`destroy`,()=>{this._paginationBodyCollection.detachFromDom()}),this.moveToFullscreen(this._paginationBodyCollection.bodyCollectionContainer,`body-wrapper`)}this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&(this._editor.plugins.get(`RevisionHistory`).isRevisionViewerOpen&&this._editor.config.get(`revisionHistory.closeRevisionViewerCallback`)(),this._overrideRevisionHistoryCallbacks()),this._editor.plugins.has(`AITabs`)&&this._handleAITabsTransfer(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).on(`change:isSourceEditingMode`,this._sourceEditingCallback),this._editor.plugins.has(`Dialog`)&&this._registerFullscreenDialogPositionAdjustments();for(let e of this._editor.config.get(`fullscreen.container`).children)e!==this._wrapper&&!e.classList.contains(`ck-body-wrapper`)&&!e.classList.contains(`ckbox-wrapper`)&&e.style.display!==`none`&&(this._hiddenElements.set(e,e.style.display),e.style.display=`none`);this._sidebarsWidths={left:this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).scrollWidth,right:this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).scrollWidth},this._adjustVisibleElements(),this._setupResizeObserver(),this._editor.config.get(`fullscreen.onEnterCallback`)&&this._editor.config.get(`fullscreen.onEnterCallback`)(this.getWrapper())}disable(){this._editor.config.get(`fullscreen.onLeaveCallback`)&&this._editor.config.get(`fullscreen.onLeaveCallback`)(this.getWrapper()),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`),this._editor.plugins.has(`DocumentOutlineUI`)&&this._restoreDocumentOutlineDefaultContainer(),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&this._restoreRevisionHistoryCallbacks(),this._editor.plugins.has(`AITabs`)&&this._restoreAITabs(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).off(`change:isSourceEditingMode`,this._sourceEditingCallback);for(let e of this._placeholderMap.keys())this.restoreMovedElementLocation(e);this._destroyContainer(),this._editor.ui.view.toolbar&&this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`);for(let[e,t]of this._savedAncestorsScrollPositions)e.scrollTo({left:t.scrollLeft,top:t.scrollTop,behavior:`instant`});if(this._savedAncestorsScrollPositions.clear(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),e.linesRepository.setViewCollection(this._editor.ui.view.body),this._paginationBodyCollection.detachFromDom(),this._paginationBodyCollection?.destroy()}this._editor.plugins.has(`Dialog`)&&this._unregisterFullscreenDialogPositionAdjustments(),this._keepLeftSidebarHidden=!1,this._resizeObserver?.destroy()}destroy(){for(let{placeholderElement:e,movedElement:t}of this._placeholderMap.values())e.remove(),t.remove();this._destroyContainer(),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`)}defaultOnEnter(){return this.getWrapper()}_destroyContainer(){if(this._wrapper){this._wrapper.remove(),this._wrapper=null;for(let[e,t]of this._hiddenElements)e.style.display=t;this._hiddenElements.clear()}}_generatePresenceListContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item`});t.innerHTML=` -
    -
    - `,t.firstElementChild.innerText=e(`Connected users`),document.querySelector(`[data-ck-fullscreen="left-sidebar-sticky"]`)||document.querySelector(`[data-ck-fullscreen="left-sidebar"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,"data-ck-fullscreen":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen="left-sidebar-sticky"]`).appendChild(t);let n=this._editor.plugins.get(`PresenceListUI`);this.moveToFullscreen(n.view.element,`presence-list`),this._hasLeftCollapseButton=!0}_generateDocumentOutlineContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck-fullscreen__left-sidebar-item ck-fullscreen__left-sidebar-item--no-margin`});t.innerHTML=` -
    - `,t.firstElementChild.innerText=e(`Document outline`);let n=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item ck-fullscreen__document-outline-wrapper`});n.innerHTML=` -
    - `,document.querySelector(`[data-ck-fullscreen="left-sidebar-sticky"]`)||document.querySelector(`[data-ck-fullscreen="left-sidebar"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,"data-ck-fullscreen":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen="left-sidebar"]`).appendChild(n),document.querySelector(`[data-ck-fullscreen="left-sidebar-sticky"]`).appendChild(t);let r=this._editor.plugins.get(`DocumentOutlineUI`);r.view.documentOutlineContainer=document.querySelector(`[data-ck-fullscreen="left-sidebar"]`),this.moveToFullscreen(r.view.element,`document-outline`),this._hasLeftCollapseButton=!0}_restoreDocumentOutlineDefaultContainer(){let e=this._editor.plugins.get(`DocumentOutlineUI`);e.view.documentOutlineContainer=e.view.element}_generateCollapseButton(){let e=new H(this._editor.locale),t=document.querySelector(`.ck-fullscreen__left-sidebar`),n=this._editor.t;e.set({label:n(`Toggle sidebar`),class:`ck-fullscreen__left-sidebar-toggle-button`,tooltip:n(`Hide left sidebar`),tooltipPosition:`se`,icon:Wv}),e.on(`execute`,()=>{t.classList.contains(`ck-fullscreen__left-sidebar--collapsed`)?(this._forceShowLeftSidebar=!0,this._keepLeftSidebarHidden=!1,this._showLeftSidebar()):(this._keepLeftSidebarHidden=!0,this._hideLeftSidebar()),this._editor.editing.view.focus()}),e.render(),this._collapseLeftSidebarButton=e,t.prepend(e.element)}_overrideAnnotationsUIs(){let e=this._editor.plugins.get(`AnnotationsUIs`);this._annotationsUIsData=new Map(e.uisData),e.deactivateAll();let t=this._editor.plugins.get(`Sidebar`);t.container?(this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`),t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen="right-sidebar"]`))):(t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen="right-sidebar"]`)),this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`))}_restoreAnnotationsUIs(){let e=this._editor.plugins.get(`Sidebar`),t=e.context.config.get(`sidebar.container`);t&&e.setContainer(t);let n=this._editor.plugins.get(`AnnotationsUIs`);n.deactivateAll();for(let[e,t]of[...this._annotationsUIsData])n.activate(e,t.filter);this._annotationsUIsData=null}_overrideRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>{let e=await this._showRevisionViewerCallback();return this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=`none`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`right-sidebar`),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.disable(),this.moveToFullscreen(e.ui.getEditableElement(),`editable`),this.moveToFullscreen(e.ui.view.toolbar.element,`toolbar`),this.moveToFullscreen(this._editor.config.get(`revisionHistory.viewerSidebarContainer`),`right-sidebar`),e}),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>{this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`right-sidebar`),this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=``),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),await this._closeRevisionViewerCallback(),this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.enable()})}_restoreRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>this._showRevisionViewerCallback()),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>this._closeRevisionViewerCallback())}_registerFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`);this._setNewDialogPosition(),e.on(`change:isOpen`,this.updateDialogPositionCallback,{priority:`highest`})}_unregisterFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`),t=e.view;t&&t.position===null&&(t.position=Jy.EDITOR_TOP_SIDE),t&&t.updatePosition(),e.off(`change:isOpen`,this.updateDialogPositionCallback)}updateDialogPositionCallback=this._updateDialogPosition.bind(this);_updateDialogPosition(e,t,n){n&&this._setNewDialogPosition()}_setNewDialogPosition(){let e=this._editor.plugins.get(`Dialog`).view;if(!e||e.position!==Jy.EDITOR_TOP_SIDE)return;let t=new O(this._wrapper.querySelector(`.ck-fullscreen__right-edge`)).getVisible(),n=new O(t?this._wrapper.querySelector(`.ck-fullscreen__right-edge`):this._wrapper).getVisible(),r=new O(document.querySelector(`.ck-fullscreen__editable`)).getVisible(),i=new O(e.element.querySelector(`.ck-dialog`)).getVisible(),a=new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).excludeScrollbarsAndBorders().getVisible().width-new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).getVisible().width;if(n&&r&&i){e.position=null;let o=t?n.left-i.width-28:n.left+n.width-i.width-28+a;e.moveTo(o,r.top)}}_saveAncestorsScrollPositions(e){let t=e.parentElement;if(t)for(;t;){let e=t.style.overflowY||u.window.getComputedStyle(t).overflowY,n=t.style.overflowX||u.window.getComputedStyle(t).overflowX;(e===`auto`||e===`scroll`||n===`auto`||n===`scroll`||t.tagName===`HTML`)&&this._savedAncestorsScrollPositions.set(t,{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}),t=t.parentElement}}_handleAITabsTransfer(){let e=this._editor.plugins.get(`AITabs`);this._aiTabsData={side:e.side,type:e.type},this.moveToFullscreen(e.view.element,`right-edge`),e.side=`right`,e.type=`sidebar`,e.view.element.addEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_handleAISidebarTransitions(e){let t=this._editor.plugins.get(`AITabs`);e.target===t.view.element&&e.propertyName.includes(`width`)&&this._adjustVisibleElements()}_restoreAITabs(){let e=this._editor.plugins.get(`AITabs`);e.side=this._aiTabsData?.side,e.type=this._aiTabsData?.type,this._aiTabsData=null,e.view.element.removeEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_adjustVisibleElements(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);if(this._forceShowLeftSidebar){this._forceShowLeftSidebar=!1;return}if(e.scrollWidth>e.clientWidth)this._hideLeftSidebar(),e.scrollWidth>e.clientWidth&&this._hideRightSidebar();else{let t=[...e.children].reduce((e,t)=>e+t.scrollWidth,0);t+this._sidebarsWidths.righte+t.scrollWidth,0)),t+this._sidebarsWidths.left[...n.values()].some(t=>t(e))):t.switchTo(e)}_setupResizeObserver(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);this._resizeObserver&&this._resizeObserver.destroy(),this._resizeObserver=new Hr(e,()=>{this._adjustVisibleElements()})}_hideLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.add(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=__,this._collapseLeftSidebarButton.tooltip=e(`Show left sidebar`))}_showLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.remove(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=Wv,this._collapseLeftSidebarButton.tooltip=e(`Hide left sidebar`))}_hideRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`narrowSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.add(`ck-fullscreen__right-sidebar--collapsed`))}_showRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`wideSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.remove(`ck-fullscreen__right-sidebar--collapsed`))}_aiTabsTransitionEndCallback=e=>{this._handleAISidebarTransitions(e)}},mI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){let e=this._editor.ui,t=e.view;return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(e.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(e.getEditableElement(),`editable`),this.moveToFullscreen(t.toolbar.element,`toolbar`),t.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this.getWrapper().setAttribute(`dir`,t.element.getAttribute(`dir`)),this.getWrapper().classList.add(`ck-rounded-corners`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&(t.menuBarView||(t.menuBarView=new gw(this._editor.locale),t.menuBarView.render(),e.initMenuBar(t.menuBarView)),this.moveToFullscreen(t.menuBarView.element,`menu-bar`)),this.getWrapper()}},hI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(this._editor.ui.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&this.moveToFullscreen(this._editor.ui.view.menuBarView.element,`menu-bar`),this.getWrapper()}},gI=class extends I{fullscreenHandler;constructor(e){super(e),this.affectsData=!1,this.isEnabled=!0,this.value=!1,bne(e)?this.fullscreenHandler=new mI(e):xne(e)?this.fullscreenHandler=new hI(e):this.fullscreenHandler=new pI(e)}execute(){this.value?this._disableFullscreenMode():this._enableFullscreenMode()}_enableFullscreenMode(){this.fullscreenHandler.enable(),this.value=!0}_disableFullscreenMode(){this.fullscreenHandler.disable(),this.value=!1}};function bne(e){return e.constructor.editorName===`ClassicEditor`}function xne(e){return e.constructor.editorName===`DecoupledEditor`}var _I=class extends F{static get pluginName(){return`FullscreenEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`fullscreen.menuBar.isVisible`,!0),e.config.define(`fullscreen.toolbar.shouldNotGroupWhenFull`,e.config.get(`toolbar.shouldNotGroupWhenFull`)===!0)}init(){this.editor.commands.add(`toggleFullscreen`,new gI(this.editor));let e=this.editor.locale.t;this.editor.keystrokes.set(`Ctrl+Shift+F`,(e,t)=>{this.editor.execute(`toggleFullscreen`),p.isBlink||(this.editor.editing.view.document.isFocused=!1,this.editor.ui.view.toolbar.focusTracker.focusedElement=null),this.editor.editing.view.scrollToTheSelection(),this.editor.editing.view.focus(),t()}),this.editor.accessibility.addKeystrokeInfos({keystrokes:[{label:e(`Toggle fullscreen mode`),keystroke:`CTRL+SHIFT+F`}],categoryId:`navigation`})}};const vI=`toggleFullscreen`;var yI=class extends F{static get requires(){return[_I]}static get pluginName(){return`FullscreenUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`fullscreen`,()=>this._createButton(H)),e.ui.componentFactory.add(`menuBar:fullscreen`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.t,r=t.commands.get(vI),i=new e(t.locale);return i.set({isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`),i instanceof U?i.set({role:`menuitemcheckbox`,label:n(`Fullscreen mode`)}):(i.bind(`icon`).to(r,`value`,e=>e?k_:O_),i.bind(`label`).to(r,`value`,e=>n(e?`Leave fullscreen mode`:`Enter fullscreen mode`)),i.set({tooltip:!0})),this.listenTo(i,`execute`,()=>{t.execute(vI),p.isBlink||(this.editor.ui.view.toolbar.focusTracker.focusedElement=null),t.editing.view.scrollToTheSelection(),t.editing.view.focus()}),i}},Sne=class extends F{static get requires(){return[_I,yI]}static get pluginName(){return`Fullscreen`}static get isOfficialPlugin(){return!0}},bI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document,n=j(t.selection.getSelectedBlocks());this.value=!!n&&n.is(`element`,`paragraph`),this.isEnabled=!!n&&xI(n,e.schema)}execute(e={}){let t=this.editor.model,n=t.document,r=e.selection||n.selection;t.canEditAt(r)&&t.change(e=>{let n=r.getSelectedBlocks();for(let r of n)!r.is(`element`,`paragraph`)&&xI(r,t.schema)&&e.rename(r,`paragraph`)})}};function xI(e,t){return t.checkChild(e.parent,`paragraph`)&&!t.isObject(e)}var SI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}execute(e){let t=this.editor.model,n=e.attributes,r=e.position;return t.canEditAt(r)?t.change(e=>{if(r=this._findPositionToInsertParagraph(r,e),!r)return null;let i=e.createElement(`paragraph`);return n&&t.schema.setAllowedAttributes(i,n,e),t.insertContent(i,r),e.setSelection(i,`in`),e.createPositionAt(i,0)}):null}_findPositionToInsertParagraph(e,t){let n=this.editor.model;if(n.schema.checkChild(e,`paragraph`))return e;let r=n.schema.findAllowedParent(e,`paragraph`);if(!r)return null;let i=e.parent,a=n.schema.checkChild(i,`$text`);return i.isEmpty||a&&e.isAtEnd?n.createPositionAfter(i):!i.isEmpty&&a&&e.isAtStart?n.createPositionBefore(i):t.split(e,r).position}},CI=class e extends F{static get pluginName(){return`Paragraph`}static get isOfficialPlugin(){return!0}init(){let t=this.editor,n=t.model;t.commands.add(`paragraph`,new bI(t)),t.commands.add(`insertParagraph`,new SI(t)),n.schema.register(`paragraph`,{inheritAllFrom:`$block`}),t.conversion.elementToElement({model:`paragraph`,view:`p`}),t.conversion.for(`upcast`).elementToElement({model:(t,{writer:n})=>!e.paragraphLikeElements.has(t.name)||t.isEmpty?null:n.createElement(`paragraph`),view:/.+/,converterPriority:`low`})}static paragraphLikeElements=new Set([`blockquote`,`dd`,`div`,`dt`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`li`,`p`,`td`,`th`])},Cne=class extends F{static get requires(){return[CI]}init(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`paragraph`,n=>{let r=new H(n),i=e.commands.get(`paragraph`);return r.label=t(`Paragraph`),r.icon=Lv,r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`),r.on(`execute`,()=>{e.execute(`paragraph`)}),r})}},wI=class extends I{modelElements;constructor(e,t){super(e),this.modelElements=t}refresh(){let e=j(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name,this.isEnabled=!!e&&this.modelElements.some(t=>TI(e,t,this.editor.model.schema))}execute(e){let t=this.editor.model,n=t.document,r=e.value;t.change(e=>{let i=Array.from(n.selection.getSelectedBlocks()).filter(e=>TI(e,r,t.schema));for(let t of i)t.is(`element`,r)||e.rename(t,r)})}};function TI(e,t,n){return n.checkChild(e.parent,t)&&!n.isObject(e)}const EI=`paragraph`;var DI=class extends F{static get pluginName(){return`HeadingEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`heading`,{options:[{model:`paragraph`,title:`Paragraph`,class:`ck-heading_paragraph`},{model:`heading1`,view:`h2`,title:`Heading 1`,class:`ck-heading_heading1`},{model:`heading2`,view:`h3`,title:`Heading 2`,class:`ck-heading_heading2`},{model:`heading3`,view:`h4`,title:`Heading 3`,class:`ck-heading_heading3`}]})}static get requires(){return[CI]}init(){let e=this.editor,t=e.config.get(`heading.options`),n=[];for(let r of t)r.model!==`paragraph`&&(e.model.schema.register(r.model,{inheritAllFrom:`$block`}),e.conversion.elementToElement(r),n.push(r.model));this._addDefaultH1Conversion(e),e.commands.add(`heading`,new wI(e,n))}afterInit(){let e=this.editor,t=e.commands.get(`enter`),n=e.config.get(`heading.options`);t&&this.listenTo(t,`afterExecute`,(t,r)=>{let i=e.model.document.selection.getFirstPosition().parent;n.some(e=>i.is(`element`,e.model))&&!i.is(`element`,EI)&&i.childCount===0&&r.writer.rename(i,EI)})}_addDefaultH1Conversion(e){e.conversion.for(`upcast`).elementToElement({model:`heading1`,view:`h1`,converterPriority:ge.low+1})}};function OI(e){let t=e.t,n={Paragraph:t(`Paragraph`),"Heading 1":t(`Heading 1`),"Heading 2":t(`Heading 2`),"Heading 3":t(`Heading 3`),"Heading 4":t(`Heading 4`),"Heading 5":t(`Heading 5`),"Heading 6":t(`Heading 6`)};return e.config.get(`heading.options`).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e.title=t),e})}var kI=class extends F{static get pluginName(){return`HeadingUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=OI(e),r=t(`Choose heading`),i=t(`Heading`);e.ui.componentFactory.add(`heading`,t=>{let a={},o=new Fi,s=e.commands.get(`heading`),c=e.commands.get(`paragraph`),l=[s];for(let e of n){let t={type:`button`,model:new RC({label:e.title,class:e.class,role:`menuitemradio`,withText:!0})};e.model===`paragraph`?(t.model.bind(`isOn`).to(c,`value`),t.model.set(`commandName`,`paragraph`),l.push(c)):(t.model.bind(`isOn`).to(s,`value`,t=>t===e.model),t.model.set({commandName:`heading`,commandValue:e.model})),o.add(t),a[e.model]=e.title}let u=Nx(t);return Lx(u,o,{ariaLabel:i,role:`menu`}),u.buttonView.set({ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),u.extendTemplate({attributes:{class:[`ck-heading-dropdown`]}}),u.bind(`isEnabled`).toMany(l,`isEnabled`,(...e)=>e.some(e=>e)),u.buttonView.bind(`label`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?r:a[n]}),u.buttonView.bind(`ariaLabel`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?i:`${a[n]}, ${i}`}),this.listenTo(u,`execute`,t=>{let{commandName:n,commandValue:r}=t.source;e.execute(n,r?{value:r}:void 0),e.editing.view.focus()}),u}),e.ui.componentFactory.add(`menuBar:heading`,r=>{let i=new uw(r),a=e.commands.get(`heading`),o=e.commands.get(`paragraph`),s=[a],c=new dw(r);i.set({class:`ck-heading-dropdown`}),c.set({ariaLabel:t(`Heading`),role:`menu`}),i.buttonView.set({label:t(`Heading`)}),i.panelView.children.add(c);for(let t of n){let n=new rC(r,i),l=new U(r);n.children.add(l),c.items.add(n),l.set({isToggleable:!0,label:t.title,role:`menuitemradio`,class:t.class}),l.delegate(`execute`).to(i),l.on(`execute`,()=>{let n=t.model===`paragraph`?`paragraph`:`heading`;e.execute(n,{value:t.model}),e.editing.view.focus()}),t.model===`paragraph`?(l.bind(`isOn`).to(o,`value`),s.push(o)):l.bind(`isOn`).to(a,`value`,e=>e===t.model)}return i.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),i})}},wne=class extends F{static get requires(){return[DI,kI]}static get pluginName(){return`Heading`}static get isOfficialPlugin(){return!0}};const Tne={heading1:A_,heading2:j_,heading3:M_,heading4:N_,heading5:P_,heading6:F_};var Ene=class extends F{init(){OI(this.editor).filter(e=>e.model!==`paragraph`).map(e=>this._createButton(e))}_createButton(e){let t=this.editor;t.ui.componentFactory.add(e.model,n=>{let r=new H(n),i=t.commands.get(`heading`);return r.label=e.title,r.icon=e.icon||Tne[e.model],r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`,t=>t==e.model),r.on(`execute`,()=>{t.execute(`heading`,{value:e.model}),t.editing.view.focus()}),r})}};const AI=new Set([`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`]);var Dne=class extends F{_bodyPlaceholder=new Map;static get pluginName(){return`Title`}static get isOfficialPlugin(){return!0}static get requires(){return[CI]}init(){let e=this.editor,t=e.model;t.schema.register(`title`,{isBlock:!0,allowIn:`$root`}),t.schema.register(`title-content`,{isBlock:!0,allowIn:`title`,allowAttributes:[`alignment`]}),t.schema.extend(`$text`,{allowIn:`title-content`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`title-content $text`))return!1}),e.editing.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.data.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.conversion.for(`downcast`).elementToElement({model:`title-content`,view:`h1`}),e.conversion.for(`downcast`).add(e=>e.on(`insert:title`,(e,t,n)=>{n.consumable.consume(t.item,e.name)})),e.data.upcastDispatcher.on(`element:h1`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h2`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h3`,jI,{priority:`high`}),t.document.registerPostFixer(e=>this._fixTitleContent(e)),t.document.registerPostFixer(e=>this._fixTitleElement(e)),t.document.registerPostFixer(e=>this._fixBodyElement(e)),t.document.registerPostFixer(e=>this._fixExtraParagraph(e)),this._attachPlaceholders(),this._attachTabPressHandling(),this._warnIfNoSupportedRoot()}_warnIfNoSupportedRoot(){let e=this.editor.model;for(let t of e.document.getRoots())if(e.schema.checkChild(t,`title`))return;T(`title-no-supported-root`)}getTitle(e={}){let t=e.rootName?e.rootName:void 0,n=this._getTitleElement(t);if(!n)return``;let r=n.getChild(0);return this.editor.data.stringify(r,e)}getBody(e={}){let t=this.editor,n=t.data,r=t.model,i=e.rootName?e.rootName:void 0,a=t.model.document.getRoot(i);if(!r.schema.checkChild(a,`title`))return n.get({...e,rootName:a.rootName});let o=a.getChild(0);if(!o||!o.is(`element`,`title`))return``;let s=t.editing.view,c=new Rs(s.document),l=r.createRangeIn(a),u=c.createDocumentFragment(),d=r.createPositionAfter(o),f=r.createRange(d,r.createPositionAt(a,`end`)),p=new Map;for(let e of r.markers){let t=f.getIntersection(e.getRange());t&&p.set(e.name,t)}return n.mapper.clearBindings(),n.mapper.bindElements(a,u),n.downcastDispatcher.convert(l,p,c,e),c.remove(c.createRangeOn(u.getChild(0))),t.data.processor.toData(u)}_getTitleElement(e){let t=this.editor.model,n=t.document.getRoot(e);if(t.schema.checkChild(n,`title`)){for(let e of n.getChildren())if(NI(e))return e}}_fixTitleContent(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this._getTitleElement(n);if(!r||r.maxOffset===1)continue;let i=Array.from(r.getChildren());i.shift();for(let t of i)e.move(e.createRangeOn(t),r,`after`),e.rename(t,`paragraph`);t=!0}return t}_fixTitleElement(e){let t=!1,n=this.editor.model;for(let r of this.editor.model.document.getRoots()){if(!n.schema.checkChild(r,`title`))continue;let i=Array.from(r.getChildren()).filter(NI),a=i[0],o=r.getChild(0);if(o.is(`element`,`title`)){i.length>1&&(PI(i,e,n),t=!0);continue}if(!a&&!AI.has(o.name)){let n=e.createElement(`title`);e.insert(n,r),e.insertElement(`title-content`,n),t=!0;continue}AI.has(o.name)?One(o,e,n):e.move(e.createRangeOn(a),r,0),PI(i,e,n),t=!0}return t}_fixBodyElement(e){let t=this.editor.model.schema,n=!1;for(let r of this.editor.model.document.getRootNames()){let i=this.editor.model.document.getRoot(r);if(i.childCount<2&&t.checkChild(i,`title`)){let t=e.createElement(`paragraph`);e.insert(t,i,1),this._bodyPlaceholder.set(r,t),n=!0}}return n}_fixExtraParagraph(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this.editor.model.document.getRoot(n),i=this._bodyPlaceholder.get(n);i&&Ane(i,r)&&(this._bodyPlaceholder.delete(n),e.remove(i),t=!0)}return t}_attachPlaceholders(){let e=this.editor,t=e.t,n=e.editing.view,r=e.sourceElement,i=e.config.get(`title.placeholder`)||t(`Type your title`);e.editing.downcastDispatcher.on(`insert:title-content`,(e,t,r)=>{let a=r.mapper.toViewElement(t.item);a.placeholder=i,yo({view:n,element:a,keepOnFocus:!0})});let a=new Map;n.document.registerPostFixer(i=>{let o=!1;for(let s of n.document.roots){if(s.isEmpty)continue;let n=e.editing.mapper.toModelElement(s);if(!e.model.schema.checkChild(n,`title`))continue;let c=s.getChild(1),l=a.get(s.rootName);if(c!==l){l&&(So(i,l),i.removeAttribute(`data-placeholder`,l));let n=e.config.get(`roots`)[s.rootName]?.placeholder||jne(r)&&r.getAttribute(`placeholder`)||t(`Type or paste your content here.`);i.setAttribute(`data-placeholder`,n,c),a.set(s.rootName,c),o=!0}o=Co(c,!0)&&s.childCount===2&&c.name===`p`?xo(i,c)?!0:o:So(i,c)?!0:o}return o})}_attachTabPressHandling(){let e=this.editor,t=e.model;e.keystrokes.set(`TAB`,(e,n)=>{t.change(e=>{let r=t.document.selection,i=Array.from(r.getSelectedBlocks());if(i.length===1&&i[0].is(`element`,`title-content`)){let t=r.getFirstPosition().root.getChild(1);e.setSelection(t,0),n()}})}),e.keystrokes.set(`SHIFT + TAB`,(n,r)=>{t.change(n=>{let i=t.document.selection;if(!i.isCollapsed)return;let a=j(i.getSelectedBlocks()),o=i.getFirstPosition(),s=e.model.document.getRoot(o.root.rootName);if(!t.schema.checkChild(s,`title`))return;let c=s.getChild(0);a===s.getChild(1)&&o.isAtStart&&(n.setSelection(c.getChild(0),0),r())})})}};function jI(e,t,n){let r=t.modelCursor,i=t.viewItem;if(!r.isAtStart||!r.parent.is(`element`,`$root`)||!n.consumable.consume(i,{name:!0}))return;let a=n.writer,o=a.createElement(`title`),s=a.createElement(`title-content`);a.append(s,o),a.insert(o,r),n.convertChildren(i,s),n.updateConversionResult(o,t)}function MI(e){return(t,n)=>{let r=n.modelPosition.parent;if(!r.is(`element`,`title`))return;let i=r.parent,a=n.mapper.toViewElement(i);n.viewPosition=e.createPositionAt(a,0),t.stop()}}function NI(e){return e.is(`element`,`title`)}function One(e,t,n){let r=t.createElement(`title`);t.insert(r,e,`before`),t.insert(e,r,0),t.rename(e,`title-content`),n.schema.removeDisallowedAttributes([e],t)}function PI(e,t,n){let r=!1;for(let i of e)i.index!==0&&(kne(i,t,n),r=!0);return r}function kne(e,t,n){let r=e.getChild(0);if(r.isEmpty){t.remove(e);return}t.move(t.createRangeOn(r),e,`before`),t.rename(r,`paragraph`),t.remove(e),n.schema.removeDisallowedAttributes([r],t)}function Ane(e,t){return!(!e.is(`element`,`paragraph`)||e.childCount||t.childCount<=2||t.getChild(t.childCount-1)!==e)}function jne(e){return!!e&&e.tagName.toLowerCase()===`textarea`}var FI=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(`highlight`),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`highlight`)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value;t.change(e=>{if(n.isCollapsed){let t=n.getFirstPosition();if(n.hasAttribute(`highlight`)){let n=e=>e.item.hasAttribute(`highlight`)&&e.item.getAttribute(`highlight`)===this.value,i=t.getLastMatchingPosition(n,{direction:`backward`}),a=t.getLastMatchingPosition(n),o=e.createRange(i,a);!r||this.value===r?(t.isEqual(a)||e.removeAttribute(`highlight`,o),e.removeSelectionAttribute(`highlight`)):(t.isEqual(a)||e.setAttribute(`highlight`,r,o),e.setSelectionAttribute(`highlight`,r))}else r&&e.setSelectionAttribute(`highlight`,r)}else{let i=t.schema.getValidRanges(n.getRanges(),`highlight`,{includeEmptyRanges:!0});for(let t of i){let n=t,i=`highlight`;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(`highlight`)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}})}},II=class extends F{static get pluginName(){return`HighlightEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`highlight`,{options:[{model:`yellowMarker`,class:`marker-yellow`,title:`Yellow marker`,color:`var(--ck-content-highlight-marker-yellow)`,type:`marker`},{model:`greenMarker`,class:`marker-green`,title:`Green marker`,color:`var(--ck-content-highlight-marker-green)`,type:`marker`},{model:`pinkMarker`,class:`marker-pink`,title:`Pink marker`,color:`var(--ck-content-highlight-marker-pink)`,type:`marker`},{model:`blueMarker`,class:`marker-blue`,title:`Blue marker`,color:`var(--ck-content-highlight-marker-blue)`,type:`marker`},{model:`redPen`,class:`pen-red`,title:`Red pen`,color:`var(--ck-content-highlight-pen-red)`,type:`pen`},{model:`greenPen`,class:`pen-green`,title:`Green pen`,color:`var(--ck-content-highlight-pen-green)`,type:`pen`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`highlight`});let t=e.config.get(`highlight.options`);e.conversion.attributeToElement(LI(t)),e.commands.add(`highlight`,new FI(e))}};function LI(e){let t={model:{key:`highlight`,values:[]},view:{}};for(let n of e)t.model.values.push(n.model),t.view[n.model]={name:`mark`,classes:n.class};return t}var RI=class extends F{get localizedOptionTitles(){let e=this.editor.t;return{"Yellow marker":e(`Yellow marker`),"Green marker":e(`Green marker`),"Pink marker":e(`Pink marker`),"Blue marker":e(`Blue marker`),"Red pen":e(`Red pen`),"Green pen":e(`Green pen`)}}static get pluginName(){return`HighlightUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.config.get(`highlight.options`);for(let t of e)this._addHighlighterButton(t);this._addRemoveHighlightButton(),this._addDropdown(e),this._addMenuBarButton(e)}_addRemoveHighlightButton(){let e=this.editor.t,t=this.editor.commands.get(`highlight`);this._addButton(`removeHighlight`,e(`Remove highlight`),S_,null,e=>{e.bind(`isEnabled`).to(t,`isEnabled`)})}_addHighlighterButton(e){let t=this.editor.commands.get(`highlight`);this._addButton(`highlight:`+e.model,e.title,BI(e.type),e.model,n);function n(n){n.bind(`isEnabled`).to(t,`isEnabled`),n.bind(`isOn`).to(t,`value`,t=>t===e.model),n.iconView.fillColor=e.color,n.isToggleable=!0}}_addButton(e,t,n,r,i){let a=this.editor;a.ui.componentFactory.add(e,e=>{let o=new H(e),s=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;return o.set({label:s,icon:n,tooltip:!0}),o.on(`execute`,()=>{a.execute(`highlight`,{value:r}),a.editing.view.focus()}),i(o),o})}_addDropdown(e){let t=this.editor,n=t.t,r=t.ui.componentFactory,i=e[0],a=e.reduce((e,t)=>(e[t.model]=t,e),{});r.add(`highlight`,o=>{let s=t.commands.get(`highlight`),c=Nx(o,Mx),l=c.buttonView;l.set({label:n(`Highlight`),tooltip:!0,lastExecuted:i.model,commandValue:i.model,isToggleable:!0}),l.bind(`icon`).to(s,`value`,e=>BI(u(e,`type`))),l.bind(`color`).to(s,`value`,e=>u(e,`color`)),l.bind(`commandValue`).to(s,`value`,e=>u(e,`model`)),l.bind(`isOn`).to(s,`value`,e=>!!e),l.delegate(`execute`).to(c),c.bind(`isEnabled`).to(s,`isEnabled`),Fx(c,()=>{let t=e.map(e=>{let t=r.create(`highlight:`+e.model);return this.listenTo(t,`execute`,()=>{c.buttonView.set({lastExecuted:e.model})}),t});return t.push(new Cx),t.push(r.create(`removeHighlight`)),t},{enableActiveItemFocusOnDropdownOpen:!0,ariaLabel:n(`Text highlight toolbar`)}),zI(c),l.on(`execute`,()=>{t.execute(`highlight`,{value:l.commandValue})}),this.listenTo(c,`execute`,()=>{t.editing.view.focus()});function u(e,t){return a[!e||e===l.lastExecuted?l.lastExecuted:e][t]}return c})}_addMenuBarButton(e){let t=this.editor,n=t.t,r=t.commands.get(`highlight`);t.ui.componentFactory.add(`menuBar:highlight`,i=>{let a=new uw(i);a.buttonView.set({label:n(`Highlight`),icon:BI(`marker`)}),a.bind(`isEnabled`).to(r),a.buttonView.iconView.fillColor=`transparent`;let o=new dw(i);for(let n of e){let e=new rC(i,a),s=new U(i);s.set({label:n.title,icon:BI(n.type),role:`menuitemradio`,isToggleable:!0}),s.iconView.fillColor=n.color,s.delegate(`execute`).to(a),s.bind(`isOn`).to(r,`value`,e=>e===n.model),s.on(`execute`,()=>{t.execute(`highlight`,{value:n.model}),t.editing.view.focus()}),e.children.add(s),o.items.add(e)}o.items.add(new fx(i));let s=new rC(i,a),c=new U(i);return c.set({label:n(`Remove highlight`),icon:S_}),c.delegate(`execute`).to(a),c.on(`execute`,()=>{t.execute(`highlight`,{value:null}),t.editing.view.focus()}),s.children.add(c),o.items.add(s),a.panelView.children.add(o),a})}};function zI(e){e.buttonView.actionView.iconView.bind(`fillColor`).to(e.buttonView,`color`)}function BI(e){return e===`marker`?uv:zv}var VI=class extends F{static get requires(){return[II,RI]}static get pluginName(){return`Highlight`}static get isOfficialPlugin(){return!0}},HI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=UI(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`horizontalLine`);e.insertObject(n,null,null,{setSelection:`after`})})}};function UI(e,t,n){let r=WI(e,n);return t.checkChild(r,`horizontalLine`)}function WI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var GI=class extends F{static get pluginName(){return`HorizontalLineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`horizontalLine`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToElement({model:`horizontalLine`,view:(e,{writer:t})=>t.createEmptyElement(`hr`)}),r.for(`editingDowncast`).elementToStructure({model:`horizontalLine`,view:(e,{writer:t})=>{let r=n(`Horizontal line`),i=t.createContainerElement(`div`,null,t.createEmptyElement(`hr`));return t.addClass(`ck-horizontal-line`,i),t.setCustomProperty(`hr`,!0,i),KI(i,t,r)}}),r.for(`upcast`).elementToElement({view:`hr`,model:`horizontalLine`}),e.commands.add(`horizontalLine`,new HI(e))}};function KI(e,t,n){return t.setCustomProperty(`horizontalLine`,!0,e),UE(e,t,{label:n})}var qI=class extends F{static get pluginName(){return`HorizontalLineUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`horizontalLine`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:horizontalLine`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`horizontalLine`),i=new e(t.locale),a=n.t;return i.set({label:a(`Horizontal line`),icon:L_}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`horizontalLine`),t.editing.view.focus()}),i}},JI=class extends F{static get requires(){return[GI,qI,xD]}static get pluginName(){return`HorizontalLine`}static get isOfficialPlugin(){return!0}},YI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=QI(n);this.isEnabled=XI(n,t,e),this.value=r?r.getAttribute(`value`)||``:null}execute(e){let t=this.editor.model,n=t.document.selection;t.change(r=>{let i;this.value===null?(i=r.createElement(`rawHtml`),t.insertObject(i,null,null,{setSelection:`on`})):i=QI(n),r.setAttribute(`value`,e,i)})}};function XI(e,t,n){let r=ZI(e,n);return t.checkChild(r,`rawHtml`)}function ZI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function QI(e){let t=e.getSelectedElement();return t&&t.is(`element`,`rawHtml`)?t:null}var $I=class extends F{_widgetButtonViewReferences=new Set;static get pluginName(){return`HtmlEmbedEditing`}static get licenseFeatureCode(){return`HE`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlEmbed`,{showPreviews:!1,sanitizeHtml:e=>(T(`html-embed-provide-sanitize-function`),{html:e,hasChanged:!1})})}init(){let e=this.editor;e.model.schema.register(`rawHtml`,{inheritAllFrom:`$blockObject`,allowAttributes:[`value`]}),e.commands.add(`htmlEmbed`,new YI(e)),this._setupConversion()}_setupConversion(){let e=this.editor,t=e.t,n=e.editing.view,r=this._widgetButtonViewReferences,i=e.config.get(`htmlEmbed`);this.editor.editing.view.on(`render`,()=>{for(let e of r){if(e.element&&e.element.isConnected)return;e.destroy(),r.delete(e)}},{priority:`lowest`}),e.data.registerRawContentMatcher({name:`div`,classes:`raw-html-embed`}),e.conversion.for(`upcast`).elementToElement({view:{name:`div`,classes:`raw-html-embed`},model:(e,{writer:t})=>t.createElement(`rawHtml`,{value:e.getCustomProperty(`$rawContent`)})}),e.conversion.for(`dataDowncast`).elementToElement({model:`rawHtml`,view:(e,{writer:t})=>t.createRawElement(`div`,{class:`raw-html-embed`},function(t){t.innerHTML=e.getAttribute(`value`)||``})}),e.conversion.for(`editingDowncast`).elementToStructure({model:{name:`rawHtml`,attributes:[`value`]},view:(r,{writer:o})=>{let s,c,l,u=o.createRawElement(`div`,{class:`raw-html-embed__content-wrapper`},function(t){s=t,a({editor:e,domElement:t,state:c,props:l}),s.addEventListener(`mousedown`,()=>{if(c.isEditable){let t=e.model;t.document.selection.getSelectedElement()!==r&&t.change(e=>e.setSelection(r,`on`))}},!0)}),d={makeEditable(){c=Object.assign({},c,{isEditable:!0}),a({domElement:s,editor:e,state:c,props:l}),n.change(e=>{e.setAttribute(`data-cke-ignore-events`,`true`,u)}),s.querySelector(`textarea`).focus()},save(t){t===c.getRawHtmlValue()?this.cancel():(e.execute(`htmlEmbed`,t),e.editing.view.focus())},cancel(){c=Object.assign({},c,{isEditable:!1}),a({domElement:s,editor:e,state:c,props:l}),e.editing.view.focus(),n.change(e=>{e.removeAttribute(`data-cke-ignore-events`,u)})}};c={showPreviews:i.showPreviews,isEditable:!1,getRawHtmlValue:()=>r.getAttribute(`value`)||``},l={sanitizeHtml:i.sanitizeHtml,textareaPlaceholder:t(`Paste raw HTML here...`),onEditClick(){d.makeEditable()},onSaveClick(e){d.save(e)},onCancelClick(){d.cancel()}};let f=o.createContainerElement(`div`,{class:`raw-html-embed`,"data-html-embed-label":t(`HTML snippet`),dir:e.locale.uiLanguageDirection},u);return o.setCustomProperty(`rawHtmlApi`,d,f),o.setCustomProperty(`rawHtml`,!0,f),UE(f,o,{label:t(`HTML snippet`),hasSelectionHandle:!0})}});function a({editor:e,domElement:t,state:n,props:r}){t.textContent=``;let i=t.ownerDocument,a;if(n.isEditable)a=s({domDocument:i,state:n,props:{isDisabled:!1,placeholder:r.textareaPlaceholder}}),t.append(a);else if(n.showPreviews){let a={sanitizeHtml:r.sanitizeHtml};t.append(c({domDocument:i,state:n,props:a,editor:e}))}else{let e={isDisabled:!0,placeholder:r.textareaPlaceholder};t.append(s({domDocument:i,state:n,props:e}))}let l={onEditClick:r.onEditClick,onSaveClick:()=>{r.onSaveClick(a.value)},onCancelClick:r.onCancelClick};t.prepend(o({editor:e,domDocument:i,state:n,props:l}))}function o({editor:e,domDocument:t,state:n,props:i}){let a=mr(t,`div`,{class:`raw-html-embed__buttons-wrapper`});if(n.isEditable){let t=eL(e,`save`,i.onSaveClick),n=eL(e,`cancel`,i.onCancelClick);a.append(t.element,n.element),r.add(t).add(n)}else{let t=eL(e,`edit`,i.onEditClick);a.append(t.element),r.add(t)}return a}function s({domDocument:e,state:t,props:n}){let r=mr(e,`textarea`,{placeholder:n.placeholder,class:`ck ck-reset ck-input ck-input-text raw-html-embed__source`});return r.disabled=n.isDisabled,r.value=t.getRawHtmlValue(),r}function c({editor:e,domDocument:n,state:r,props:i}){let a=i.sanitizeHtml(r.getRawHtmlValue()),o=mr(n,`div`,{class:`ck ck-reset_all raw-html-embed__preview-placeholder`},r.getRawHtmlValue().length>0?t(`No preview available`):t(`Empty snippet content`)),s=mr(n,`div`,{class:`raw-html-embed__preview-content`,dir:e.locale.contentLanguageDirection}),c=n.createRange().createContextualFragment(a.html);return s.appendChild(c),mr(n,`div`,{class:`raw-html-embed__preview`},[o,s])}}};function eL(e,t,n){let{t:r}=e.locale,i=new H(e.locale),a=e.commands.get(`htmlEmbed`);return i.set({class:`raw-html-embed__${t}-button`,icon:Rv,tooltip:!0,tooltipPosition:e.locale.uiLanguageDirection===`rtl`?`e`:`w`}),i.render(),t===`edit`?(i.set({icon:Rv,label:r(`Edit source`)}),i.bind(`isEnabled`).to(a)):t===`save`?(i.set({icon:l_,label:r(`Save changes`)}),i.bind(`isEnabled`).to(a)):i.set({icon:s_,label:r(`Cancel`)}),i.on(`execute`,n),i}var tL=class extends F{static get pluginName(){return`HtmlEmbedUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t;e.ui.componentFactory.add(`htmlEmbed`,()=>{let e=this._createButton(H);return e.set({tooltip:!0,label:t(`Insert HTML`)}),e}),e.ui.componentFactory.add(`menuBar:htmlEmbed`,()=>{let e=this._createButton(U);return e.set({label:t(`HTML snippet`)}),e})}_createButton(e){let t=this.editor,n=t.commands.get(`htmlEmbed`),r=new e(t.locale);return r.set({icon:R_}),r.bind(`isEnabled`).to(n,`isEnabled`),this.listenTo(r,`execute`,()=>{t.execute(`htmlEmbed`),t.editing.view.focus(),t.editing.view.document.selection.getSelectedElement().getCustomProperty(`rawHtmlApi`).makeEditable()}),r}},nL=class extends F{static get requires(){return[$I,tL,xD]}static get pluginName(){return`HtmlEmbed`}static get isOfficialPlugin(){return!0}};function rL(e,t,n,r){t&&aL(e,t,r),n&&iL(e,n,r)}function iL(e,t,n){if(t.attributes)for(let[r,i]of Object.entries(t.attributes))e.setAttribute(r,i,n);t.styles&&e.setStyle(t.styles,n),t.classes&&e.addClass(t.classes,n)}function aL(e,t,n){if(t.attributes)for(let[r]of Object.entries(t.attributes))e.removeAttribute(r,n);if(t.styles)for(let r of Object.keys(t.styles))e.removeStyle(r,n);t.classes&&e.removeClass(t.classes,n)}function oL(e,t){let n=Rt(e),r=`attributes`;for(r in t)r==`classes`?n[r]=Array.from(new Set([...e[r]||[],...t[r]])):n[r]={...e[r],...t[r]};return n}function sL(e,t,n,r,i){let a=t.getAttribute(n),o={};for(let e of[`attributes`,`styles`,`classes`]){if(e!=r){a&&a[e]&&(o[e]=a[e]);continue}if(r==`classes`){let t=new Set(a&&a.classes||[]);i(t),t.size&&(o[e]=Array.from(t));continue}let t=new Map(Object.entries(a&&a[e]||{}));i(t),t.size&&(o[e]=Object.fromEntries(t))}Object.keys(o).length?t.is(`documentSelection`)?e.setSelectionAttribute(n,o):e.setAttribute(n,o,t):a&&(t.is(`documentSelection`)?e.removeSelectionAttribute(n):e.removeAttribute(n,t))}function cL(e,t,n){for(let r of t.getItems({shallow:!0})){let t=r.getAttribute(e);t&&t.attributes&&Object.keys(t.attributes).length?Object.keys(t).length>1&&n.setAttribute(e,{attributes:t.attributes},r):n.removeAttribute(e,r)}}function lL(e){return qn(e).replace(/ /g,``)}function uL(e){return`html${lL(e)}Attributes`}function dL({model:e}){return(t,n)=>n.writer.createElement(e,{htmlContent:t.getCustomProperty(`$rawContent`)})}function fL(e,{view:t,isInline:n}){let r=e.t;return(e,{writer:i})=>{let a=r(`HTML object`),o=pL(t,e,i),s=e.getAttribute(uL(t));return i.addClass(`html-object-embed__content`,o),s&&iL(i,s,o),UE(i.createContainerElement(n?`span`:`div`,{class:`html-object-embed`,"data-html-object-embed-label":a},o),i,{label:a})}}function pL(e,t,n){return n.createRawElement(e,null,(e,n)=>{n.setContentOf(e,t.getAttribute(`htmlContent`))})}function mL({view:e,model:t,allowEmpty:n},r){return t=>{t.on(`element:${e}`,(e,t,a)=>{let o=r.processViewAttributes(t.viewItem,a);if(!(!o&&!a.consumable.test(t.viewItem,{name:!0}))){if(o||={},a.consumable.consume(t.viewItem,{name:!0}),t.modelRange||(t=Object.assign(t,a.convertChildren(t.viewItem,t.modelCursor))),n&&t.modelRange.isCollapsed&&Object.keys(o).length){let e=a.writer.createElement(`htmlEmptyElement`);if(!a.safeInsert(e,t.modelCursor))return;let n=a.getSplitParts(e);t.modelRange=a.writer.createRange(t.modelRange.start,a.writer.createPositionAfter(n[n.length-1])),a.updateConversionResult(e,t),i(e,o,a);return}for(let e of t.modelRange.getItems())i(e,o,a)}},{priority:`low`})};function i(e,n,r){if(r.schema.checkAttribute(e,t)){let i=oL(n,e.getAttribute(t)||{});r.writer.setAttribute(t,i,e)}}}function hL({model:e,view:t},n){return(r,{writer:i,consumable:a})=>{if(!r.hasAttribute(e))return null;let o=i.createContainerElement(t),s=r.getAttribute(e);return a.consume(r,`attribute:${e}`),iL(i,s,o),o.getFillerOffset=()=>null,n?UE(o,i):o}}function gL({priority:e,view:t}){return(n,r)=>{if(!n)return;let{writer:i}=r,a=i.createAttributeElement(t,null,{priority:e});return iL(i,n,a),a}}function _L({view:e},t){return n=>{n.on(`element:${e}`,(e,n,r)=>{if(!n.modelRange||n.modelRange.isCollapsed)return;let i=t.processViewAttributes(n.viewItem,r);i&&r.writer.setAttribute(uL(n.viewItem.name),i,n.modelRange)},{priority:`low`})}}function vL({view:e,model:t}){return n=>{n.on(`attribute:${uL(e)}:${t}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.writer;rL(a,r,i,n.mapper.toViewElement(t.item))})}}const yL={block:[{model:`codeBlock`,view:`pre`},{model:`paragraph`,view:`p`},{model:`blockQuote`,view:`blockquote`},{model:`listItem`,view:`li`},{model:`pageBreak`,view:`div`},{model:`rawHtml`,view:`div`},{model:`table`,view:`table`},{model:`tableRow`,view:`tr`},{model:`tableCell`,view:`td`},{model:`tableCell`,view:`th`},{model:`tableColumnGroup`,view:`colgroup`},{model:`tableColumn`,view:`col`},{model:`caption`,view:`caption`},{model:`caption`,view:`figcaption`},{model:`imageBlock`,view:`img`},{model:`imageInline`,view:`img`},{model:`horizontalLine`,view:`hr`},{model:`htmlP`,view:`p`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlBlockquote`,view:`blockquote`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlTable`,view:`table`,modelSchema:{allowWhere:`$block`,isBlock:!0}},{model:`htmlTbody`,view:`tbody`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlThead`,view:`thead`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlTfoot`,view:`tfoot`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlCaption`,view:`caption`,modelSchema:{allowIn:`htmlTable`,allowChildren:`$text`,isBlock:!1}},{model:`htmlColgroup`,view:`colgroup`,modelSchema:{allowIn:`htmlTable`,allowChildren:`col`,isBlock:!1}},{model:`htmlCol`,view:`col`,modelSchema:{allowIn:`htmlColgroup`,isBlock:!1}},{model:`htmlTr`,view:`tr`,modelSchema:{allowIn:[`htmlTable`,`htmlThead`,`htmlTbody`,`htmlTfoot`],isLimit:!0}},{model:`htmlTd`,view:`td`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlTh`,view:`th`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlFigure`,view:`figure`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFigcaption`,view:`figcaption`,modelSchema:{allowIn:`htmlFigure`,allowChildren:`$text`,isBlock:!1}},{model:`htmlAddress`,view:`address`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlAside`,view:`aside`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlMain`,view:`main`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDetails`,view:`details`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSummary`,view:`summary`,modelSchema:{allowChildren:[`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`,`$text`],allowIn:`htmlDetails`,isBlock:!1}},{model:`htmlDiv`,view:`div`,paragraphLikeModel:`htmlDivParagraph`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlFieldset`,view:`fieldset`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlLegend`,view:`legend`,modelSchema:{allowIn:`htmlFieldset`,allowChildren:`$text`}},{model:`htmlHeader`,view:`header`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFooter`,view:`footer`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlForm`,view:`form`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHgroup`,view:`hgroup`,modelSchema:{allowWhere:`$container`,allowChildren:[`paragraph`,`htmlP`,`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`],isBlock:!1}},{model:`htmlH1`,view:`h1`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH2`,view:`h2`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH3`,view:`h3`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH4`,view:`h4`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH5`,view:`h5`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH6`,view:`h6`,modelSchema:{inheritAllFrom:`$block`}},{model:`$htmlList`,modelSchema:{allowWhere:`$container`,allowChildren:[`$htmlList`,`htmlLi`],isBlock:!1}},{model:`htmlDir`,view:`dir`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlMenu`,view:`menu`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlUl`,view:`ul`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlOl`,view:`ol`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlLi`,view:`li`,modelSchema:{allowIn:`$htmlList`,allowChildren:`$text`,isBlock:!1}},{model:`htmlPre`,view:`pre`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlArticle`,view:`article`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSection`,view:`section`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlNav`,view:`nav`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDl`,view:`dl`,modelSchema:{allowWhere:`$container`,allowChildren:[`htmlDt`,`htmlDd`,`htmlDiv`],allowAttributesOf:[`$container`],isBlock:!1}},{model:`htmlDt`,view:`dt`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlDd`,view:`dd`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlCenter`,view:`center`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHr`,view:`hr`,isEmpty:!0,modelSchema:{inheritAllFrom:`$blockObject`}}],inline:[{model:`htmlLiAttributes`,view:`li`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlOlAttributes`,view:`ol`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlUlAttributes`,view:`ul`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`table`},{model:`htmlTheadAttributes`,view:`thead`,appliesToBlock:`table`},{model:`htmlTfootAttributes`,view:`tfoot`,appliesToBlock:`table`},{model:`htmlTbodyAttributes`,view:`tbody`,appliesToBlock:`table`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`imageBlock`},{model:`htmlAcronym`,view:`acronym`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTt`,view:`tt`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlFont`,view:`font`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTime`,view:`time`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlVar`,view:`var`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBig`,view:`big`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSmall`,view:`small`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSamp`,view:`samp`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlQ`,view:`q`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlOutput`,view:`output`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlKbd`,view:`kbd`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdi`,view:`bdi`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdo`,view:`bdo`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlAbbr`,view:`abbr`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlA`,view:`a`,priority:5,coupledAttribute:`linkHref`,attributeProperties:{isFormatting:!0}},{model:`htmlStrong`,view:`strong`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlB`,view:`b`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlI`,view:`i`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlEm`,view:`em`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlS`,view:`s`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDel`,view:`del`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlIns`,view:`ins`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlU`,view:`u`,coupledAttribute:`underline`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSub`,view:`sub`,coupledAttribute:`subscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSup`,view:`sup`,coupledAttribute:`superscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCode`,view:`code`,coupledAttribute:`code`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlMark`,view:`mark`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSpan`,view:`span`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCite`,view:`cite`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlLabel`,view:`label`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDfn`,view:`dfn`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlObject`,view:`object`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlIframe`,view:`iframe`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlInput`,view:`input`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlButton`,view:`button`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlTextarea`,view:`textarea`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlSelect`,view:`select`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlVideo`,view:`video`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlEmbed`,view:`embed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlOembed`,view:`oembed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlAudio`,view:`audio`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlImg`,view:`img`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlCanvas`,view:`canvas`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlMeter`,view:`meter`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlProgress`,view:`progress`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlScript`,view:`script`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlStyle`,view:`style`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlCustomElement`,view:`$customElement`,modelSchema:{allowWhere:[`$text`,`$block`],allowAttributesOf:`$inlineObject`,isInline:!0}}]};var bL=class extends F{_definitions=[];static get pluginName(){return`DataSchema`}static get isOfficialPlugin(){return!0}init(){for(let e of yL.block)this.registerBlockElement(e);for(let e of yL.inline)this.registerInlineElement(e)}registerBlockElement(e){this._definitions.push({...e,isBlock:!0})}registerInlineElement(e){this._definitions.push({...e,isInline:!0})}extendBlockElement(e){this._extendDefinition({...e,isBlock:!0})}extendInlineElement(e){this._extendDefinition({...e,isInline:!0})}getDefinitionsForView(e,t=!1){let n=new Set;for(let r of this._getMatchingViewDefinitions(e)){if(t)for(let e of this._getReferences(r.model))n.add(e);n.add(r)}return n}getDefinitionsForModel(e){return this._definitions.filter(t=>t.model==e)}_getMatchingViewDefinitions(e){return this._definitions.filter(t=>t.view&&xL(e,t.view))}*_getReferences(e){let t=[`inheritAllFrom`,`inheritTypesFrom`,`allowWhere`,`allowContentOf`,`allowAttributesOf`],n=this._definitions.filter(t=>t.model==e);for(let{modelSchema:r}of n)if(r)for(let n of t)for(let t of A(r[n]||[])){let n=this._definitions.filter(e=>e.model==t);for(let r of n)t!==e&&(yield*this._getReferences(r.model),yield r)}}_extendDefinition(e){let t=Array.from(this._definitions.entries()).filter(([,t])=>t.model==e.model);if(t.length==0){this._definitions.push(e);return}for(let[n,r]of t)this._definitions[n]=Sn({},r,e,(e,t)=>Array.isArray(e)?e.concat(t):void 0)}};function xL(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):!1}var SL=class extends F{_dataSchema;_allowedAttributes;_disallowedAttributes;_allowedElements;_disallowedElements;_dataInitialized;_coupledAttributes;constructor(e){super(e),this._dataSchema=e.plugins.get(`DataSchema`),this._allowedAttributes=new Po,this._disallowedAttributes=new Po,this._allowedElements=new Set,this._disallowedElements=new Set,this._dataInitialized=!1,this._coupledAttributes=null,this._registerElementsAfterInit(),this._registerElementHandlers(),this._registerCoupledAttributesPostFixer(),this._registerAssociatedHtmlAttributesPostFixer()}static get pluginName(){return`DataFilter`}static get isOfficialPlugin(){return!0}static get requires(){return[bL,xD]}loadAllowedConfig(e){for(let t of e){let e=t.name||/[\s\S]+/,n=OL(t);this.allowElement(e),n.forEach(e=>this.allowAttributes(e))}}loadDisallowedConfig(e){for(let t of e){let e=t.name||/[\s\S]+/,n=OL(t);n.length==0?this.disallowElement(e):n.forEach(e=>this.disallowAttributes(e))}}loadAllowedEmptyElementsConfig(e){for(let t of e)this.allowEmptyElement(t)}allowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))this._addAllowedElement(t),this._coupledAttributes=null}disallowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!1))this._disallowedElements.add(t.view)}allowEmptyElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))t.isInline&&this._dataSchema.extendInlineElement({...t,allowEmpty:!0})}allowAttributes(e){this._allowedAttributes.add(e)}disallowAttributes(e){this._disallowedAttributes.add(e)}processViewAttributes(e,t){let{consumable:n}=t;return CL(e,this._disallowedAttributes,n),wL(e,CL(e,this._allowedAttributes,n))}_addAllowedElement(e){if(!this._allowedElements.has(e)){if(this._allowedElements.add(e),`appliesToBlock`in e&&typeof e.appliesToBlock==`string`)for(let t of this._dataSchema.getDefinitionsForModel(e.appliesToBlock))t.isBlock&&this._addAllowedElement(t);this._dataInitialized&&this.editor.data.once(`set`,()=>{this._fireRegisterEvent(e)},{priority:ge.highest+1})}}_registerElementsAfterInit(){this.editor.data.on(`init`,()=>{this._dataInitialized=!0;for(let e of this._allowedElements)this._fireRegisterEvent(e)},{priority:ge.highest+1})}_registerElementHandlers(){this.on(`register`,(e,t)=>{let n=this.editor.model.schema;if(t.isObject&&!n.isRegistered(t.model))this._registerObjectElement(t);else if(t.isBlock)this._registerBlockElement(t);else if(t.isInline)this._registerInlineElement(t);else throw new w(`data-filter-invalid-definition`,null,t);e.stop()},{priority:`lowest`})}_registerCoupledAttributesPostFixer(){let e=this.editor.model,t=e.document.selection;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1,i=this._getCoupledAttributesMap();for(let e of n){if(e.type!=`attribute`||e.attributeNewValue!==null)continue;let n=i.get(e.attributeKey);if(n)for(let{item:i}of e.range.getWalker())for(let e of n)i.hasAttribute(e)&&(t.removeAttribute(e,i),r=!0)}return r}),this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{let i=new Set,a=this._getCoupledAttributesMap();for(let e of r){if(t.hasAttribute(e))continue;let n=a.get(e);if(n)for(let e of n)t.hasAttribute(e)&&i.add(e)}i.size!=0&&e.change(e=>{for(let t of i)e.removeSelectionAttribute(t)})})}_registerAssociatedHtmlAttributesPostFixer(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1;for(let i of n)if(!(i.type!==`insert`||i.name===`$text`))for(let n of i.attributes.keys())!n.startsWith(`html`)||!n.endsWith(`Attributes`)||e.schema.checkAttribute(i.name,n)||(t.removeAttribute(n,i.position.nodeAfter),r=!0);return r})}_getCoupledAttributesMap(){if(this._coupledAttributes)return this._coupledAttributes;this._coupledAttributes=new Map;for(let e of this._allowedElements)if(e.coupledAttribute&&e.model){let t=this._coupledAttributes.get(e.coupledAttribute);t?t.push(e.model):this._coupledAttributes.set(e.coupledAttribute,[e.model])}return this._coupledAttributes}_fireRegisterEvent(e){e.view&&this._disallowedElements.has(e.view)||this.fire(e.view?`register:${e.view}`:`register`,e)}_registerObjectElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;n.register(a,e.modelSchema),i&&(n.extend(e.model,{allowAttributes:[uL(i),`htmlContent`]}),t.data.registerRawContentMatcher({name:i}),r.for(`upcast`).elementToElement({view:i,model:dL(e),converterPriority:ge.low+2}),r.for(`upcast`).add(_L(e,this)),r.for(`editingDowncast`).elementToStructure({model:{name:a,attributes:[uL(i)]},view:fL(t,e)}),r.for(`dataDowncast`).elementToElement({model:a,view:(e,{writer:t})=>pL(i,e,t)}),r.for(`dataDowncast`).add(vL(e)))}_registerBlockElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;if(!n.isRegistered(e.model)){if(!e.modelSchema||(n.register(e.model,e.modelSchema),!i))return;r.for(`upcast`).elementToElement({model:a,view:i,converterPriority:ge.low+2}),r.for(`downcast`).elementToElement({model:a,view:(t,{writer:n})=>e.isEmpty?n.createEmptyElement(i):n.createContainerElement(i)})}i&&(n.extend(e.model,{allowAttributes:uL(i)}),r.for(`upcast`).add(_L(e,this)),r.for(`downcast`).add(vL(e)))}_registerInlineElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,i=e.model;if(!e.appliesToBlock&&(n.extend(`$text`,{allowAttributes:i}),e.attributeProperties&&n.setAttributeProperties(i,e.attributeProperties),r.for(`upcast`).add(mL(e,this)),r.for(`downcast`).attributeToElement({model:i,view:gL(e)}),e.allowEmpty)){if(n.setAttributeProperties(i,{copyFromObject:!1}),!n.isRegistered(`htmlEmptyElement`)){n.register(`htmlEmptyElement`,{inheritAllFrom:`$inlineObject`});let e=e=>Array.from(e.getAttributeKeys()).some(e=>e.startsWith(`html`));t.model.document.registerPostFixer(n=>{let r=t.model.document.differ.getChanges(),i=new Set;for(let t of r)if(t.type!==`remove`){if(t.type===`attribute`&&t.attributeNewValue===null)for(let{item:n}of t.range)n.is(`element`,`htmlEmptyElement`)&&!e(n)&&i.add(n);if(t.type===`insert`&&t.position.nodeAfter){let r=t.position.nodeAfter;for(let{item:t}of n.createRangeOn(r))t.is(`element`,`htmlEmptyElement`)&&!e(t)&&i.add(t)}}for(let e of i)n.remove(e);return i.size>0})}t.data.htmlProcessor.domConverter.registerInlineObjectMatcher(t=>t.name==e.view&&t.isEmpty&&Array.from(t.getAttributeKeys()).length?{name:!0}:null),r.for(`editingDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e,!0)}),r.for(`dataDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e)})}}};function CL(e,t,n){let r=t.matchAll(e)||[],i=e.document.stylesProcessor;return r.reduce((t,{match:r})=>{for(let[a,o]of r.attributes||[])if(a==`style`){let r=o,a=i.getRelatedStyles(r).filter(e=>e.split(`-`).length>r.split(`-`).length).sort((e,t)=>t.split(`-`).length-e.split(`-`).length);for(let r of a)n.consume(e,{styles:[r]})&&t.styles.push(r);n.consume(e,{styles:[r]})&&t.styles.push(r)}else if(a==`class`){let r=o;n.consume(e,{classes:[r]})&&t.classes.push(r)}else n.consume(e,{attributes:[a]})&&t.attributes.push(a);return t},{attributes:[],classes:[],styles:[]})}function wL(e,{attributes:t,classes:n,styles:r}){return!t.length&&!n.length&&!r.length?null:{...t.length&&{attributes:TL(e,t)},...r.length&&{styles:EL(e,r)},...n.length&&{classes:n}}}function TL(e,t){let n={};for(let r of t){let t=e.getAttribute(r);t!==void 0&&Jr(r)&&(n[r]=t)}return n}function EL(e,t){let n=new Vo(e.document.stylesProcessor);for(let r of t){let t=e.getStyle(r);t!==void 0&&n.set(r,t)}return Object.fromEntries(n.getStylesEntries())}function DL(e,t){let{name:n}=e,r=e[t];return xn(r)?Object.entries(r).map(([e,r])=>({name:n,[t]:{[e]:r}})):Array.isArray(r)?r.map(e=>({name:n,[t]:[e]})):[e]}function OL(e){let{name:t,attributes:n,classes:r,styles:i}=e,a=[];return n&&a.push(...DL({name:t,attributes:n},`attributes`)),r&&a.push(...DL({name:t,classes:r},`classes`)),i&&a.push(...DL({name:t,styles:i},`styles`)),a}var kL=class extends F{static get requires(){return[SL]}static get pluginName(){return`CodeBlockElementSupport`}static get isOfficialPlugin(){return!0}init(){if(!this.editor.plugins.has(`CodeBlockEditing`))return;let e=this.editor.plugins.get(SL);e.on(`register:pre`,(t,n)=>{if(n.model!==`codeBlock`)return;let r=this.editor,i=r.model.schema,a=r.conversion;i.extend(`codeBlock`,{allowAttributes:[`htmlPreAttributes`,`htmlContentAttributes`]}),a.for(`upcast`).add(AL(e)),a.for(`downcast`).add(jL()),t.stop()})}};function AL(e){return t=>{t.on(`element:code`,(t,n,r)=>{let i=n.viewItem,a=i.parent;if(!a||!a.is(`element`,`pre`)||!n.modelRange)return;o(a,`htmlPreAttributes`),o(i,`htmlContentAttributes`);function o(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function jL(){return e=>{e.on(`attribute:htmlPreAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item).parent;rL(n.writer,r,i,a)}),e.on(`attribute:htmlContentAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)})}}var ML=class extends F{static get requires(){return[SL]}static get pluginName(){return`DualContentModelElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.plugins.get(SL).on(`register`,(e,t)=>{let n=t,r=this.editor,i=r.model.schema,a=r.conversion;if(!n.paragraphLikeModel||i.isRegistered(n.model)||i.isRegistered(n.paragraphLikeModel))return;let o={model:n.paragraphLikeModel,view:n.view};i.register(n.model,n.modelSchema),i.register(o.model,{inheritAllFrom:`$block`}),a.for(`upcast`).elementToElement({view:n.view,model:(e,{writer:t})=>this._hasBlockContent(e)?t.createElement(n.model):t.createElement(o.model),converterPriority:ge.low+.5}),a.for(`downcast`).elementToElement({view:n.view,model:n.model}),this._addAttributeConversion(n),a.for(`downcast`).elementToElement({view:o.view,model:o.model}),this._addAttributeConversion(o),e.stop()})}_hasBlockContent(e){let t=this.editor.editing.view,n=t.domConverter.blockElements;for(let r of t.createRangeIn(e).getItems())if(r.is(`element`)&&n.includes(r.name))return!0;return!1}_addAttributeConversion(e){let t=this.editor,n=t.conversion,r=t.plugins.get(SL);t.model.schema.extend(e.model,{allowAttributes:uL(e.view)}),n.for(`upcast`).add(_L(e,r)),n.for(`downcast`).add(vL(e))}},NL=class extends F{static get requires(){return[bL,TE]}static get pluginName(){return`HeadingElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HeadingEditing`))return;let t=e.config.get(`heading.options`);this.registerHeadingElements(e,t)}registerHeadingElements(e,t){let n=e.plugins.get(bL),r=[];for(let e of t)`model`in e&&`view`in e&&(n.registerBlockElement({view:e.view,model:e.model}),r.push(e.model));n.extendBlockElement({model:`htmlHgroup`,modelSchema:{allowChildren:r}}),n.extendBlockElement({model:`htmlSummary`,modelSchema:{allowChildren:r}})}};function PL(e,t,n){let r=e.createRangeOn(t);for(let{item:e}of r.getWalker())if(e.is(`element`,n))return e}var FL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ImageElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ImageInlineEditing`)&&!e.plugins.has(`ImageBlockEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:figure`,()=>{n.for(`upcast`).add(RL(r))}),r.on(`register:img`,(i,a)=>{a.model!==`imageBlock`&&a.model!==`imageInline`||(t.isRegistered(`imageBlock`)&&t.extend(`imageBlock`,{allowAttributes:[`htmlImgAttributes`,`htmlFigureAttributes`,`htmlLinkAttributes`]}),t.isRegistered(`imageInline`)&&t.extend(`imageInline`,{allowAttributes:[`htmlA`,`htmlImgAttributes`]}),n.for(`upcast`).add(IL(r)),n.for(`downcast`).add(zL()),e.plugins.has(`LinkImage`)&&n.for(`upcast`).add(LL(r,e)),i.stop())})}};function IL(e){return t=>{t.on(`element:img`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem,a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlImgAttributes`,a,n.modelRange)},{priority:`low`})}}function LL(e,t){let n=t.plugins.get(`ImageUtils`);return t=>{t.on(`element:a`,(t,r,i)=>{let a=r.viewItem;if(!n.findViewImgElement(a))return;let o=r.modelCursor.parent;if(!o.is(`element`,`imageBlock`))return;let s=e.processViewAttributes(a,i);s&&i.writer.setAttribute(`htmlLinkAttributes`,s,o)},{priority:`low`})}}function RL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`image`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function zL(){return e=>{t(`htmlImgAttributes`),n(`img`,`htmlImgAttributes`),n(`figure`,`htmlFigureAttributes`),n(`a`,`htmlLinkAttributes`);function t(t){e.on(`attribute:${t}:imageInline`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)},{priority:`low`})}function n(t,n){e.on(`attribute:${n}:imageBlock`,(e,n,r)=>{if(!r.consumable.test(n.item,e.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,t);s&&(rL(r.writer,i,a,s),r.consumable.consume(n.item,e.name))},{priority:`low`}),t===`a`&&e.on(`attribute:linkHref:imageBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,`attribute:htmlLinkAttributes:imageBlock`))return;let r=n.mapper.toViewElement(t.item),i=PL(n.writer,r,`a`);iL(n.writer,t.item.getAttribute(`htmlLinkAttributes`),i)},{priority:`low`})}}}var BL=class extends F{static get requires(){return[SL]}static get pluginName(){return`MediaEmbedElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`MediaEmbed`)||e.config.get(`mediaEmbed.previewsInData`))return;let t=e.model.schema,n=e.conversion,r=this.editor.plugins.get(SL),i=this.editor.plugins.get(bL),a=e.config.get(`mediaEmbed.elementName`);i.registerBlockElement({model:`media`,view:a}),r.on(`register:figure`,()=>{n.for(`upcast`).add(HL(r))}),r.on(`register:${a}`,(e,i)=>{i.model===`media`&&(t.extend(`media`,{allowAttributes:[uL(a),`htmlFigureAttributes`]}),n.for(`upcast`).add(VL(r,a)),n.for(`dataDowncast`).add(UL(a)),e.stop())})}};function VL(e,t){let n=(n,r,i)=>{let a=r.viewItem;o(a,uL(t));function o(t,n){let a=e.processViewAttributes(t,i);a&&i.writer.setAttribute(n,a,r.modelRange)}};return e=>{e.on(`element:${t}`,n,{priority:`low`})}}function HL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`media`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function UL(e){return t=>{n(e,uL(e)),n(`figure`,`htmlFigureAttributes`);function n(e,n){t.on(`attribute:${n}:media`,(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,e);rL(r.writer,i,a,s)})}}}var WL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ScriptElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:script`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlScript`,n.modelSchema),i.extend(`htmlScript`,{allowAttributes:[`htmlScriptAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`script`}),a.for(`upcast`).elementToElement({view:`script`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlScript`,view:(e,{writer:t})=>pL(`script`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}};const GL=[`width`,`max-width`,`min-width`,`height`,`min-height`,`max-height`];var KL=class extends F{static get requires(){return[SL]}static get pluginName(){return`TableElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`TableEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`TableUtils`);r.on(`register:figure`,()=>{n.for(`upcast`).add(YL(r))}),r.on(`register:table`,(a,o)=>{o.model===`table`&&(t.extend(`table`,{allowAttributes:[`htmlTableAttributes`,`htmlFigureAttributes`,`htmlTheadAttributes`,`htmlTbodyAttributes`,`htmlTfootAttributes`]}),n.for(`upcast`).add(JL(r)),n.for(`downcast`).add(XL()),e.model.document.registerPostFixer(qL(e.model,i)),a.stop())})}};function qL(e,t){return n=>{let r=e.document.differ.getChanges(),i=!1;for(let e of r){if(e.type!=`attribute`||e.attributeKey!=`headingRows`&&e.attributeKey!=`footerRows`)continue;let r=e.range.start.nodeAfter,a=r.getAttribute(`htmlTheadAttributes`),o=r.getAttribute(`htmlTbodyAttributes`),s=r.getAttribute(`htmlTfootAttributes`);a&&e.attributeKey===`headingRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTheadAttributes`,r),i=!0),s&&e.attributeKey===`footerRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTfootAttributes`,r),i=!0),o&&(r.getAttribute(`headingRows`)||0)+(r.getAttribute(`footerRows`)||0)==t.getRows(r)&&(n.removeAttribute(`htmlTbodyAttributes`,r),i=!0)}return i}}function JL(e){return t=>{t.on(`element:table`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem;r.consumable.consume(i,{classes:`table`}),a(i,`htmlTableAttributes`);for(let e of i.getChildren())e.is(`element`,`thead`)&&a(e,`htmlTheadAttributes`),e.is(`element`,`tfoot`)&&a(e,`htmlTfootAttributes`),e.is(`element`,`tbody`)&&a(e,`htmlTbodyAttributes`);function a(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function YL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`table`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function XL(){return e=>{t(`table`,`htmlTableAttributes`),t(`figure`,`htmlFigureAttributes`),t(`thead`,`htmlTheadAttributes`),t(`tbody`,`htmlTbodyAttributes`),t(`tfoot`,`htmlTfootAttributes`);function t(t,n){e.on(`attribute:${n}:table`,(e,r,i)=>{if(!i.consumable.test(r.item,e.name))return;let a=i.mapper.toViewElement(r.item),o=PL(i.writer,a,t);if(o)if(i.consumable.consume(r.item,e.name),n===`htmlTableAttributes`&&a!==o){let e=ZL(r.attributeOldValue),t=ZL(r.attributeNewValue);rL(i.writer,e.tableAttributes,t.tableAttributes,o),rL(i.writer,e.figureAttributes,t.figureAttributes,a)}else rL(i.writer,r.attributeOldValue,r.attributeNewValue,o)})}}}function ZL(e){let t={},n={...e};if(!e||!(`styles`in e))return{figureAttributes:t,tableAttributes:n};n.styles={};for(let[r,i]of Object.entries(e.styles))GL.includes(r)?t.styles={...t.styles,[r]:i}:n.styles={...n.styles,[r]:i};return{figureAttributes:t,tableAttributes:n}}var QL=class extends F{static get requires(){return[SL]}static get pluginName(){return`StyleElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:style`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlStyle`,n.modelSchema),i.extend(`htmlStyle`,{allowAttributes:[`htmlStyleAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`style`}),a.for(`upcast`).elementToElement({view:`style`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlStyle`,view:(e,{writer:t})=>pL(`style`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}},$L=class extends F{static get requires(){return[SL]}static get pluginName(){return`ListElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ListEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`ListEditing`),a=e.plugins.get(`ListUtils`),o=[`ul`,`ol`,`li`];i.registerDowncastStrategy({scope:`item`,attributeName:`htmlLiAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlUlAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlOlAttributes`,setAttributeOnDowncast:iL}),r.on(`register`,(e,i)=>{if(!o.includes(i.view)||(e.stop(),t.checkAttribute(`$block`,`htmlLiAttributes`)))return;let a=o.map(e=>uL(e));t.extend(`$listItem`,{allowAttributes:a}),n.for(`upcast`).add(e=>{e.on(`element:ul`,eR(`htmlUlAttributes`,`list`,r),{priority:`low`}),e.on(`element:ol`,eR(`htmlOlAttributes`,`list`,r),{priority:`low`}),e.on(`element:li`,eR(`htmlLiAttributes`,`item`,r),{priority:`low`})})}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)if(i){if(i.getAttribute(`listType`)==r.getAttribute(`listType`)){let t=nR(i.getAttribute(`listType`)),a=i.getAttribute(t);!$t(r.getAttribute(t),a)&&n.model.schema.checkAttribute(r,t)&&(a===void 0?n.removeAttribute(t,r):n.setAttribute(t,a,r),e.return=!0)}if(i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)){let t=i.getAttribute(`htmlLiAttributes`);!$t(r.getAttribute(`htmlLiAttributes`),t)&&n.model.schema.checkAttribute(r,`htmlLiAttributes`)&&(t===void 0?n.removeAttribute(`htmlLiAttributes`,r):n.setAttribute(`htmlLiAttributes`,t,r),e.return=!0)}}}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r}of t){let t=r.getAttribute(`listType`);!a.isNumberedListType(t)&&r.getAttribute(`htmlOlAttributes`)&&(n.removeAttribute(`htmlOlAttributes`,r),e.return=!0),a.isNumberedListType(t)&&r.getAttribute(`htmlUlAttributes`)&&(n.removeAttribute(`htmlUlAttributes`,r),e.return=!0)}})}afterInit(){let e=this.editor;if(!e.commands.get(`indentList`))return;let t=e.commands.get(`indentList`);this.listenTo(t,`afterExecute`,(t,n)=>{e.model.change(t=>{for(let r of n){let n=nR(r.getAttribute(`listType`));e.model.schema.checkAttribute(r,n)&&t.removeAttribute(n,r)}})})}};function eR(e,t,n){return(r,i,a)=>{let o=i.viewItem;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let s=n.processViewAttributes(o,a);if(t===`list`&&!s)return;let c=a.store;c.htmlSupportItemToClosestList??=new Map;let l=c.htmlSupportItemToClosestList,u=t===`item`?tR(o):null;for(let n of i.modelRange.getItems({shallow:!0}))if(n.hasAttribute(`listItemId`)){if(t===`item`){if(l.has(n))continue;l.set(n,u)}else if(l.get(n)!==o)continue;s&&a.writer.model.schema.checkAttribute(n,e)&&a.writer.setAttribute(e,s,n)}}}function tR(e){let t=e.parent;for(;t;){if(t.is(`element`,`ul`)||t.is(`element`,`ol`))return t;t=t.parent}return null}function nR(e){return e===`numbered`||e==`customNumbered`?`htmlOlAttributes`:`htmlUlAttributes`}var rR=class extends F{static get requires(){return[SL]}static get pluginName(){return`HorizontalLineElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HorizontalLineEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:hr`,(e,i)=>{i.model===`horizontalLine`&&(t.extend(`horizontalLine`,{allowAttributes:[`htmlHrAttributes`]}),n.for(`upcast`).add(_L(i,r)),n.for(`downcast`).add(iR()),e.stop())})}};function iR(){return e=>{e.on(`attribute:htmlHrAttributes:horizontalLine`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item),o=PL(n.writer,a,`hr`);o&&(rL(n.writer,r,i,o),n.consumable.consume(t.item,e.name))},{priority:`low`})}}var aR=class extends F{static get requires(){return[SL]}static get pluginName(){return`IframeElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.config.define(`htmlSupport.htmlIframeSandbox`,!0),this._setupSandboxConversion()}_setupSandboxConversion(){let{plugins:e,config:t,conversion:n}=this.editor,r=e.get(SL),i=t.get(`htmlSupport.htmlIframeSandbox`);if(i===!1)return;let a=Array.isArray(i)?Array.from(i):[];r.on(`register:iframe`,(e,t)=>{n.for(`editingDowncast`).add(e=>{e.on(`insert:${t.model}`,(e,t,n)=>{let{mapper:r,writer:i}=n,o=r.toViewElement(t.item);for(let{item:e}of i.createRangeOn(o))if(e.is(`element`,`iframe`))if(e.hasAttribute(`sandbox`)){let t=new Set,n=e.getAttribute(`sandbox`);for(let e of n.trim().split(/\s+/))a.includes(e)&&t.add(e);i.setAttribute(`sandbox`,Array.from(t).join(` `),e)}else i.setAttribute(`sandbox`,a.join(` `),e)},{priority:`lowest`})})})}},oR=class extends F{static get requires(){return[SL,bL]}static get pluginName(){return`CustomElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL),t=this.editor.plugins.get(bL);e.on(`register:$customElement`,(n,r)=>{n.stop();let i=this.editor,a=i.model.schema,o=i.conversion,s=i.editing.view.domConverter.unsafeElements,c=i.data.htmlProcessor.domConverter.preElements;a.register(r.model,r.modelSchema),a.extend(r.model,{allowAttributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`],isContent:!0}),i.data.htmlProcessor.domConverter.registerRawContentMatcher({name:`template`}),o.for(`upcast`).elementToElement({view:/.*/,model:(n,a)=>{if(n.name==`$comment`||!sR(n.name)||t.getDefinitionsForView(n.name).size)return null;s.includes(n.name)||s.push(n.name),c.includes(n.name)||c.push(n.name);let o=a.writer.createElement(r.model,{htmlElementName:n.name}),l=e.processViewAttributes(n,a);l&&a.writer.setAttribute(`htmlCustomElementAttributes`,l,o);let u;if(n.is(`element`,`template`)&&n.getCustomProperty(`$rawContent`))u=n.getCustomProperty(`$rawContent`);else{let e=new Np(n.document).createDocumentFragment(n),t=i.data.htmlProcessor.domConverter.viewToDom(e),r=t.firstChild;for(;r.firstChild;)t.appendChild(r.firstChild);r.remove(),u=i.data.htmlProcessor.htmlWriter.getHtml(t)}a.writer.setAttribute(`htmlContent`,u,o);for(let{item:e}of i.editing.view.createRangeIn(n))a.consumable.consume(e,{name:!0});return o},converterPriority:`low`}),o.for(`editingDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=t.createRawElement(n);return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),r),r}}),o.for(`dataDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=e.getAttribute(`htmlContent`),i=t.createRawElement(n,null,(e,t)=>{t.setContentOf(e,r)});return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),i),i}})})}};function sR(e){try{document.createElement(e)}catch{return!1}return!0}var cR=class extends F{static get pluginName(){return`GeneralHtmlSupport`}static get isOfficialPlugin(){return!0}static get requires(){return[SL,kL,ML,NL,FL,BL,WL,KL,QL,$L,rR,aR,oR]}init(){let e=this.editor,t=e.plugins.get(SL);t.loadAllowedEmptyElementsConfig(e.config.get(`htmlSupport.allowEmpty`)||[]),t.loadAllowedConfig(e.config.get(`htmlSupport.allow`)||[]),t.loadDisallowedConfig(e.config.get(`htmlSupport.disallow`)||[])}afterInit(){this.editor.commands.get(`removeFormat`)?.registerCustomAttribute(e=>e.startsWith(`html`)&&e.endsWith(`Attributes`),cL)}getGhsAttributeNameForElement(e){let t=this.editor.plugins.get(`DataSchema`),n=Array.from(t.getDefinitionsForView(e,!1)),r=n.find(e=>e.isInline&&!n[0].isObject);return r?r.model:uL(e)}addModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.add(n)})})}removeModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let n of A(t))e.delete(n)})})}};function*lR(e,t,n){if(t)if(!(Symbol.iterator in t)&&t.is(`documentSelection`)&&t.isCollapsed)e.schema.checkAttributeInSelection(t,n)&&(yield t);else for(let r of uR(e,t,n))yield*r.getItems({shallow:!0})}function uR(e,t,n){return!(Symbol.iterator in t)&&(t.is(`node`)||t.is(`$text`)||t.is(`$textProxy`))?e.schema.checkAttribute(t,n)?[e.createRangeOn(t)]:[]:e.schema.getValidRanges(e.createSelection(t).getRanges(),n)}var dR=class extends F{static get pluginName(){return`HtmlComment`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=new Map;e.data.processor.skipComments=!1,e.model.schema.extend(`$root`,{allowAttributes:`$comment`}),e.model.schema.addAttributeCheck((t,n)=>{if(n.startsWith(`$comment:`)&&e.model.schema.checkAttribute(t,`$comment`))return!0}),e.conversion.for(`upcast`).elementToMarker({view:`$comment`,model:e=>{let n=`$comment:${he()}`,r=e.getCustomProperty(`$rawContent`);return t.set(n,r),n}}),e.conversion.for(`dataDowncast`).markerToElement({model:`$comment`,view:(e,{writer:t})=>{let n;for(let t of this.editor.model.document.getRootNames())if(n=this.editor.model.document.getRoot(t),n.hasAttribute(e.markerName))break;let r=e.markerName,i=n.getAttribute(r),a=t.createUIElement(`$comment`);return t.setCustomProperty(`$rawContent`,i,a),a}}),e.model.document.registerPostFixer(n=>{let r=!1,i=e.model.document.differ.getChangedMarkers().filter(e=>e.name.startsWith(`$comment:`));for(let e of i){let{oldRange:i,newRange:a}=e.data;if(!(i&&a&&i.root==a.root)){if(i){let t=i.root;t.hasAttribute(e.name)&&(n.removeAttribute(e.name,t),r=!0)}if(a){let i=a.root;i.rootName==`$graveyard`?(n.removeMarker(e.name),r=!0):i.hasAttribute(e.name)||(n.setAttribute(e.name,t.get(e.name)||``,i),r=!0)}}}return r}),e.data.on(`set`,()=>{for(let t of e.model.markers.getMarkersGroup(`$comment`))this.removeHtmlComment(t.name)},{priority:`high`}),e.model.on(`deleteContent`,(t,[n])=>{for(let t of n.getRanges()){let n=e.model.schema.getLimitElement(t),r=e.model.createPositionAt(n,0),i=e.model.createPositionAt(n,`end`),a;a=r.isTouching(t.start)&&i.isTouching(t.end)?this.getHtmlCommentsInRange(e.model.createRange(r,i)):this.getHtmlCommentsInRange(t,{skipBoundaries:!0});for(let e of a)this.removeHtmlComment(e)}},{priority:`high`})}createHtmlComment(e,t){let n=he(),r=this.editor.model,i=r.document.getRoot(e.root.rootName),a=`$comment:${n}`;return r.change(n=>{let r=n.createRange(e);return n.addMarker(a,{usingOperation:!0,affectsData:!0,range:r}),n.setAttribute(a,t,i),a})}removeHtmlComment(e){let t=this.editor,n=t.model.markers.get(e);return n?(t.model.change(e=>{e.removeMarker(n)}),!0):!1}getHtmlCommentData(e){let t=this.editor.model.markers.get(e);if(!t)return null;let n=``;for(let t of this.editor.model.document.getRoots())if(t.hasAttribute(e)){n=t.getAttribute(e);break}return{content:n,position:t.getStart()}}getHtmlCommentsInRange(e,{skipBoundaries:t=!1}={}){let n=!t;return Array.from(this.editor.model.markers.getMarkersGroup(`$comment`)).filter(t=>r(t,e)).map(e=>e.name);function r(e,t){let r=e.getRange().start;return(r.isAfter(t.start)||n&&r.isEqual(t.start))&&(r.isBefore(t.end)||n&&r.isEqual(t.end))}}},fR=class extends Td{toView(e){if(!/<(?:html|body|head|meta)(?:\s[^>]*)?>/i.test(e.trim().slice(0,1e4)))return super.toView(e);let t=``,n=``;e=e.trim().replace(/<\?xml\s[^?]*\?>/i,e=>(n=e,``)),e=e.trim().replace(/^]*?>/i,e=>(t=e,``));let r=this._toDom(e),i=this.domConverter.domToView(r,{skipComments:this.skipComments}),a=new Np(i.document);a.setCustomProperty(`$fullPageDocument`,r.ownerDocument.documentElement.outerHTML,i);let o=Array.from(r.ownerDocument.querySelectorAll(`head style`));return a.setCustomProperty(`$fullPageHeadStyles`,o,i),t&&a.setCustomProperty(`$fullPageDocType`,t,i),n&&a.setCustomProperty(`$fullPageXmlDeclaration`,n,i),i}toData(e){let t=super.toData(e),n=e.getCustomProperty(`$fullPageDocument`),r=e.getCustomProperty(`$fullPageDocType`),i=e.getCustomProperty(`$fullPageXmlDeclaration`);return n&&(t=n.replace(/<\/body\s*>/,t+`$&`),r&&(t=r+` -`+t),i&&(t=i+` -`+t)),t}},pR=class extends F{static get pluginName(){return`FullPage`}static get licenseFeatureCode(){return`FPH`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlSupport.fullPage`,{allowRenderStylesFromHead:!1,sanitizeCss:e=>(T(`css-full-page-provide-sanitize-function`),{css:e,hasChanged:!1})}),e.data.processor=new fR(e.data.viewDocument)}init(){let e=this.editor,t=[`$fullPageDocument`,`$fullPageDocType`,`$fullPageXmlDeclaration`,`$fullPageHeadStyles`];e.model.schema.extend(`$root`,{allowAttributes:t}),e.data.on(`toModel`,(n,[r])=>{let i=e.model.document.getRoot();e.model.change(e=>{for(let n of t){let t=r.getCustomProperty(n);t&&e.setAttribute(n,t,i)}}),mR(e)&&this._renderStylesFromHead(i)},{priority:`low`}),e.data.on(`toView`,(e,[n])=>{if(!n.is(`rootElement`))return;let r=n,i=e.return;if(!r.hasAttribute(`$fullPageDocument`))return;let a=new Np(i.document);for(let e of t){let t=r.getAttribute(e);t&&a.setCustomProperty(e,t,i)}},{priority:`low`}),e.data.on(`set`,()=>{let n=e.model.document.getRoot();e.model.change(e=>{for(let r of t)n.hasAttribute(r)&&e.removeAttribute(r,n)})},{priority:`high`}),e.data.on(`get`,(e,t)=>{t[0]||={},t[0].trim=!1},{priority:`high`})}destroy(){super.destroy(),mR(this.editor)&&this._removeStyleElementsFromDom()}_removeStyleElementsFromDom(){let e=Array.from(u.document.querySelectorAll(`[data-full-page-style-id="${this.editor.id}"]`));for(let t of e)t.remove()}_renderStyleElementsInDom(e){let t=this.editor,n=e.getAttribute(`$fullPageHeadStyles`);if(!n)return;let r=t.config.get(`htmlSupport.fullPage.sanitizeCss`);for(let e of n){e.setAttribute(`data-full-page-style-id`,t.id);let n=r(e.innerText);n.hasChanged&&(e.innerText=n.css),u.document.head.append(e)}}_renderStylesFromHead(e){this._removeStyleElementsFromDom(),this._renderStyleElementsInDom(e)}};function mR(e){return e.config.get(`htmlSupport.fullPage.allowRenderStylesFromHead`)}const hR=`htmlEmptyBlock`;var gR=class extends F{static get pluginName(){return`EmptyBlock`}static get isOfficialPlugin(){return!0}afterInit(){let{model:e,conversion:t,plugins:n,config:r}=this.editor,i=e.schema,a=r.get(`htmlSupport.preserveEmptyBlocksInEditingView`);i.extend(`$block`,{allowAttributes:[hR]}),i.extend(`$container`,{allowAttributes:[hR]}),i.isRegistered(`tableCell`)&&i.extend(`tableCell`,{allowAttributes:[hR]}),a?t.for(`downcast`).add(_R()):t.for(`dataDowncast`).add(_R()),t.for(`upcast`).add(vR(i)),n.has(`ClipboardPipeline`)&&this._registerClipboardPastingHandler()}_registerClipboardPastingHandler(){let e=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`contentInsertion`,(e,t)=>{t.sourceEditorId!==this.editor.id&&this.editor.model.change(e=>{for(let{item:n}of e.createRangeIn(t.content))n.is(`element`)&&n.hasAttribute(hR)&&e.removeAttribute(hR,n)})})}};function _R(){return e=>{e.on(`attribute:${hR}`,(e,t,n)=>{let{mapper:r,consumable:i}=n,{item:a}=t;if(!i.consume(a,e.name))return;let o=r.toViewElement(a);o&&t.attributeNewValue&&(o.getFillerOffset=()=>null)})}}function vR(e){return t=>{t.on(`element`,(t,n,r)=>{let{viewItem:i,modelRange:a}=n;if(!i.is(`element`)||!i.isEmpty||i.getCustomProperty(`$hasBlockFiller`))return;let o=a&&a.start.nodeAfter;if(!o||!e.checkAttribute(o,hR)||(r.writer.setAttribute(hR,!0,o),o.childCount!=1))return;let s=o.getChild(0);s.is(`element`,`paragraph`)&&e.checkAttribute(s,hR)&&r.writer.setAttribute(hR,!0,s)},{priority:`lowest`})}}var yR=class extends F{static get pluginName(){return`IndentEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.commands.add(`indent`,new co(e)),e.commands.add(`outdent`,new co(e))}},bR=class extends F{static get pluginName(){return`IndentUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?G_:jv,i=t.uiLanguageDirection==`ltr`?jv:G_;this._defineButton(`indent`,n(`Increase indent`),r),this._defineButton(`outdent`,n(`Decrease indent`),i)}_defineButton(e,t,n){let r=this.editor;r.ui.componentFactory.add(e,()=>{let r=this._createButton(H,e,t,n);return r.set({tooltip:!0}),r}),r.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n))}_createButton(e,t,n,r){let i=this.editor,a=i.commands.get(t),o=new e(i.locale);return o.set({label:n,icon:r}),o.bind(`isEnabled`).to(a,`isEnabled`),this.listenTo(o,`execute`,()=>{i.execute(t),i.editing.view.focus()}),o}},xR=class extends F{static get pluginName(){return`Indent`}static get isOfficialPlugin(){return!0}static get requires(){return[yR,bR]}},SR=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this.editor.model,t=j(e.document.selection.getSelectedBlocks());if(!t||!this._isIndentationChangeAllowed(t)){this.isEnabled=!1;return}this.isEnabled=this._indentBehavior.checkEnabled(t.getAttribute(`blockIndent`))}execute(){let e=this.editor.model,t=this._getBlocksToChange();e.change(e=>{for(let n of t){let t=n.getAttribute(`blockIndent`),r=this._indentBehavior.getNextIndent(t);r?e.setAttribute(`blockIndent`,r,n):e.removeAttribute(`blockIndent`,n)}})}_getBlocksToChange(){let e=this.editor.model.document.selection;return Array.from(e.getSelectedBlocks()).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){let t=this.editor;return t.model.schema.checkAttribute(e,`blockIndent`)?!t.plugins.has(`ListUtils`)||!this._indentBehavior.isForward?!0:!t.plugins.get(`ListUtils`).isListItemBlock(e):!1}},CR=class{isForward;offset;unit;constructor(e){this.isForward=e.direction===`forward`,this.offset=e.offset,this.unit=e.unit}checkEnabled(e){let t=parseFloat(e||`0`);return this.isForward||t>0}getNextIndent(e){let t=parseFloat(e||`0`),n=!e||e.endsWith(this.unit);if(t<0)return;if(!n)return this.isForward?this.offset+this.unit:void 0;let r=t+(this.isForward?this.offset:-this.offset);return r>0?r+this.unit:void 0}},wR=class{isForward;classes;constructor(e){this.isForward=e.direction===`forward`,this.classes=e.classes}checkEnabled(e){let t=this.classes.indexOf(e);return this.isForward?t=0}getNextIndent(e){let t=this.classes.indexOf(e)+(this.isForward?1:-1),n=Math.min(t,this.classes.length-1);return this.classes[n]}},TR=class{_startElement;_referenceIndent;_isForward;_includeSelf;_sameAttributes;_sameIndent;_lowerIndent;_higherIndent;constructor(e,t){this._startElement=e,this._referenceIndent=e.getAttribute(`listIndent`),this._isForward=t.direction==`forward`,this._includeSelf=!!t.includeSelf,this._sameAttributes=A(t.sameAttributes||[]),this._sameIndent=!!t.sameIndent,this._lowerIndent=!!t.lowerIndent,this._higherIndent=!!t.higherIndent}static first(e,t){return j(new this(e,t)[Symbol.iterator]())}*[Symbol.iterator](){let e=[];for(let{node:t}of new ER(this._getStartNode(),this._isForward?`forward`:`backward`)){let n=t.getAttribute(`listIndent`);if(nthis._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){e.push(t);continue}}else{if(!this._sameIndent){if(this._higherIndent){e.length&&=(yield*e,0);break}continue}if(this._sameAttributes.some(e=>t.getAttribute(e)!==this._startElement.getAttribute(e)))break}e.length&&=(yield*e,0),yield t}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}},ER=class{_node;_isForward;_previousNodesByIndent=[];_previous=null;_previousNodeIndent=null;constructor(e,t=`forward`){this._node=e,this._isForward=t===`forward`}[Symbol.iterator](){return this}next(){if(!G(this._node))return{done:!0,value:void 0};let e=this._node.getAttribute(`listIndent`),t=null;if(this._previous){let n=this._previousNodeIndent;e>n?this._previousNodesByIndent[n]=this._previous:ee.getAttribute(`listIndent`))),o=new Map;for(let e of r)o.set(e,TR.first(e,{lowerIndent:!0}));for(let e of r){if(i.has(e))continue;i.add(e);let r=e.getAttribute(`listIndent`)-1;if(r<0){VR(e,t,n);continue}if(e.getAttribute(`listIndent`)==a&&o.get(e)){let n=YR(e,o.get(e),t);for(let e of n)i.add(e);if(n.length)continue}t.setAttribute(`listIndent`,r,e)}return WR(i)}function VR(e,t,n){e=A(e);for(let n of e)n.is(`element`,`listItem`)&&t.rename(n,`paragraph`);for(let r of e)for(let e of r.getAttributeKeys())n.includes(e)&&t.removeAttribute(e,r);return e}function HR(e){if(!e.length)return!1;let t=e[0].getAttribute(`listItemId`);return t?!e.some(e=>e.getAttribute(`listItemId`)!=t):!1}function UR(e,t){let n=[],r=1/0;for(let{node:i}of new ER(e.nextSibling)){let e=i.getAttribute(`listIndent`);if(e==0)break;ee.root.rootName!==`$graveyard`).sort((e,t)=>e.index-t.index)}function GR(e){let t=e.document.selection.getSelectedElement();return t&&e.schema.isObject(t)&&e.schema.isBlock(t)?t:null}function KR(e,t){return t.checkChild(e.parent,`listItem`)&&t.checkChild(e,`$text`)&&!t.isObject(e)}function qR(e){return e==`numbered`||e==`customNumbered`}function JR(e){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.getAttribute(`listItemId`),i=e.previousSibling,a=!1;for(;G(i);){let e=i.getAttribute(`listIndent`);if(ee.index?RR(e,t,n):[]}var XR=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor,t=e.model,n=ZR(t.document.selection),r=e.plugins.get(`ListEditing`).getListAttributeNames();t.change(e=>{let t=[];HR(n)&&!NR(n[0])?(this._direction==`forward`&&t.push(...zR(n,e,{attributeNames:r})),t.push(...LR(n[0],e))):this._direction==`forward`?t.push(...zR(n,e,{expand:!0,attributeNames:r})):t.push(...BR(n,e,{attributeNames:r}));for(let n of t){if(!n.hasAttribute(`listType`))continue;let t=TR.first(n,{sameIndent:!0});t&&e.setAttribute(`listType`,t.getAttribute(`listType`),n)}this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=ZR(this.editor.model.document.selection),t=e[0];if(!t)return!1;if(this._direction==`backward`||HR(e)&&!NR(e[0])||this.editor.config.get(`list.enableSkipLevelLists`))return!0;e=FR(e),t=e[0];let n=TR.first(t,{sameIndent:!0});return n?n.getAttribute(`listType`)==t.getAttribute(`listType`):!1}};function ZR(e){let t=Array.from(e.getSelectedBlocks()),n=t.findIndex(e=>!G(e));return n!=-1&&(t.length=n),t}var QR=class extends I{type;_listWalkerOptions;constructor(e,t,n={}){super(e),this.type=t,this._listWalkerOptions=n.multiLevel?{higherIndent:!0,lowerIndent:!0,sameAttributes:[]}:void 0}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=GR(t),i=Array.from(n.selection.getSelectedBlocks()).filter(e=>t.schema.checkAttribute(e,`listType`)||KR(e,t.schema)),a=e.forceValue===void 0?this.value:!e.forceValue;t.change(o=>{if(a){let e=i[i.length-1],t=this.editor.plugins.get(`ListEditing`).getListAttributeNames(),n=AR(e,{direction:`forward`}),r=[];n.length>1&&r.push(...LR(n[1],o)),r.push(...VR(i,o,t)),r.push(...UR(e,o)),this._fireAfterExecute(r)}else if((r||n.selection.isCollapsed)&&G(i[0])){let t=MR(r||i[0],this._listWalkerOptions);for(let n of t)o.setAttributes({...e.additionalAttributes,listType:this.type},n);this._fireAfterExecute(t)}else{let n=[];for(let r of i)if(!r.hasAttribute(`listType`))!r.is(`element`,`listItem`)&&KR(r,t.schema)&&o.rename(r,`listItem`),o.setAttributes({...e.additionalAttributes,listIndent:0,listItemId:OR.next(),listType:this.type},r),n.push(r);else for(let t of FR(r,{withNested:!1}))t.getAttribute(`listType`)!=this.type&&(o.setAttributes({...e.additionalAttributes,listType:this.type},t),n.push(t));this._fireAfterExecute(n)}})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_getValue(){let e=this.editor.model.document.selection,t=Array.from(e.getSelectedBlocks());if(!t.length)return!1;for(let e of t)if(e.getAttribute(`listType`)!=this.type)return!1;return!0}_checkEnabled(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=Array.from(n.getSelectedBlocks());if(!r.length)return!1;if(this.value)return!0;for(let e of r)if(t.checkAttribute(e,`listType`)||KR(e,t))return!0;return!1}},$R=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute({shouldMergeOnBlocksContentLevel:e=!1}={}){let t=this.editor,n=t.model,r=n.document.selection,i=[],a=t.plugins.get(`ListEditing`).getListAttributeNames();n.change(t=>{let{firstElement:o,lastElement:s}=this._getMergeSubjectElements(r,e);if(!o||!s)return;let c=o.getAttribute(`listIndent`)||0,l=s.getAttribute(`listIndent`),u=s.getAttribute(`listItemId`);if(c!=l){let e=jR(s);i.push(...zR([s,...e],t,{indentBy:c-l,expand:c{let t=LR(this._getStartBlock(),e);this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=this.editor.model.document.selection,t=this._getStartBlock();return e.isCollapsed&&G(t)&&!NR(t)}_getStartBlock(){let e=this.editor.model.document.selection.getFirstPosition().parent;return this._direction==`before`?e:e.nextSibling}},tz=class extends F{static get pluginName(){return`ListItemBoldIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`bold`,`listItemBold`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemBold`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-bold`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-bold`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemBold`}),t.schema.setAttributeProperties(`listItemBold`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemBold`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemBold`,view:{name:`li`,classes:`ck-list-marker-bold`}}))}},nz=class extends F{static get pluginName(){return`ListItemItalicIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`italic`,`listItemItalic`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemItalic`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-italic`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-italic`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemItalic`}),t.schema.setAttributeProperties(`listItemItalic`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemItalic`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemItalic`,view:{name:`li`,classes:`ck-list-marker-italic`}}))}},rz=class extends F{static get pluginName(){return`ListItemFontSizeIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;let r=ZF(e.config.get(`fontSize.options`));t.registerFormatAttribute(`fontSize`,`listItemFontSize`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontSize`,setAttributeOnDowncast(e,t,n,i){if(t){let a=r.find(e=>e.model==t);a&&a.view&&typeof a.view!=`string`?a.view.styles?(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,a.view.styles[`font-size`],n)):a.view.classes&&(e.addClass(`ck-list-marker-font-size-${t}`,n),p.isSafari&&!(i&&i.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-font-size`,`0`,n)):(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,t,n))}}})}afterInit(){let e=this.editor,t=e.model;if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;t.schema.extend(`$listItem`,{allowAttributes:`listItemFontSize`}),t.schema.setAttributeProperties(`listItemFontSize`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontSize`),e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:e=>e.getStyle(`--ck-content-list-marker-font-size`)},view:{name:`li`,classes:`ck-list-marker-font-size`,styles:{"--ck-content-list-marker-font-size":/.*/}}});let n=ZF(e.config.get(`fontSize.options`));for(let t of n)t.model&&t.view&&e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:t.model},view:{name:`li`,classes:`ck-list-marker-font-size-${t.model}`}})}},iz=class extends F{static get pluginName(){return`ListItemFontColorIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontColor`,`listItemFontColor`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontColor`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-color`,n),e.setStyle(`--ck-content-list-marker-color`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontColor`}),t.schema.setAttributeProperties(`listItemFontColor`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontColor`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontColor`,value:e=>e.getStyle(`--ck-content-list-marker-color`)},view:{name:`li`,classes:`ck-list-marker-color`,styles:{"--ck-content-list-marker-color":/.*/}}}))}},az=class extends F{static get pluginName(){return`ListItemFontFamilyIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontFamily`,`listItemFontFamily`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontFamily`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-font-family`,n),e.setStyle(`--ck-content-list-marker-font-family`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontFamily`}),t.schema.setAttributeProperties(`listItemFontFamily`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontFamily`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontFamily`,value:e=>e.getStyle(`--ck-content-list-marker-font-family`)},view:{name:`li`,classes:`ck-list-marker-font-family`,styles:{"--ck-content-list-marker-font-family":/.*/}}}))}},oz=class extends F{_loadedFormatting={};static get pluginName(){return`ListFormatting`}static get isOfficialPlugin(){return!0}static get requires(){return[tz,nz,rz,iz,az]}constructor(e){super(e),e.config.define(`list.enableListItemMarkerFormatting`,!0)}afterInit(){this.editor.config.get(`list.enableListItemMarkerFormatting`)&&this._registerPostfixerForListItemFormatting()}_registerPostfixerForListItemFormatting(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=new Set,i=!1;for(let e of n)if(e.type===`attribute`)(e.attributeKey==`listItemId`||e.attributeKey==`listType`||this._isInlineOrSelectionFormatting(e.attributeKey)||Object.values(this._loadedFormatting).includes(e.attributeKey))&&(G(e.range.start.nodeAfter)?r.add(e.range.start.nodeAfter):G(e.range.start.parent)&&r.add(e.range.start.parent));else if(G(e.position.nodeAfter)&&r.add(e.position.nodeAfter),G(e.position.nodeBefore)&&r.add(e.position.nodeBefore),G(e.position.parent)&&r.add(e.position.parent),e.type==`insert`&&e.name!=`$text`){let n=t.createRangeIn(e.position.nodeAfter);for(let e of n.getItems())G(e)&&r.add(e)}for(let n of r){let r=sz(e,n,Object.keys(this._loadedFormatting));for(let[e,a]of Object.entries(r)){let r=this._loadedFormatting[e];(a&&lz(t,n,r,a)||!a&&uz(t,n,r))&&(i=!0)}}return i})}registerFormatAttribute(e,t){this._loadedFormatting[e]=t}_isInlineOrSelectionFormatting(e){return e.replace(/^selection:/,``)in this._loadedFormatting}};function sz(e,t,n){return NR(t)?cz(e,t,n):cz(e,kR(t)[0],n)}function cz(e,t,n){if(!dz(t)||e.schema.isLimit(t))return Object.fromEntries(n.map(e=>[e]));if(t.isEmpty)return Object.fromEntries(n.map(e=>[e,t.getAttribute(`selection:${e}`)]));let r=new Set(n),i={},a=e.createRangeIn(t).getWalker({ignoreElementEnd:!0});for(let{item:t}of a){for(let n of r)if(e.schema.checkAttribute(t,n)){let e=t.getAttribute(n);e===void 0?(r.delete(n),i[n]=void 0):i[n]===void 0?i[n]=e:i[n]!==e&&(r.delete(n),i[n]=void 0)}else n in i||(i[n]=void 0);if(!r.size)break;e.schema.isLimit(t)&&a.jumpTo(e.createPositionAfter(t))}return i}function lz(e,t,n,r){let i=kR(t),a=!1;for(let t of i)(!t.hasAttribute(n)||t.getAttribute(n)!==r)&&(e.setAttribute(n,r,t),a=!0);return a}function uz(e,t,n){let r=kR(t),i=!1;for(let t of r)t.hasAttribute(n)&&(e.removeAttribute(n,t),i=!0);return i}function dz(e){return[`numbered`,`bulleted`,`customNumbered`,`customBulleted`].includes(e.getAttribute(`listType`))}var fz=class extends F{static get pluginName(){return`ListUtils`}static get isOfficialPlugin(){return!0}expandListBlocksToCompleteList(e){return IR(e)}isFirstBlockOfListItem(e){return NR(e)}isListItemBlock(e){return G(e)}expandListBlocksToCompleteItems(e,t={}){return FR(e,t)}isNumberedListType(e){return qR(e)}isFirstListItemInList(e){return JR(e)}};function pz(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function mz(e){return e.is(`element`,`li`)}function hz(e){let t=0,n=e.parent;for(;n;){if(mz(n))t++;else{let e=n.previousSibling;e&&mz(e)&&t++}n=n.parent}return t}function gz(e,t,n,r=yz(n,t)){return e.createAttributeElement(vz(n),null,{priority:2*t/100-100,id:r})}function _z(e,t,n){return e.createAttributeElement(`li`,null,{priority:(2*t+1)/100-100,id:n})}function vz(e){return e==`numbered`||e==`customNumbered`?`ol`:`ul`}function yz(e,t){return`list-${e}-${t}`}function bz(e,t,n){let r=e.nodeBefore;if(G(r)){let e=r;for(let{node:i}of new ER(e,`backward`))if(e=i,n.has(e)||(n.add(e),t.has(r)))return;t.add(e)}else{let n=e.nodeAfter;G(n)&&t.add(n)}}function xz(e,t){let n=0,r=-1,i=null,a=!1;for(let{node:o}of e){let e=o.getAttribute(`listIndent`);if(e>n){let s;i===null?(i=e-n,s=n):(i>e&&(i=e),s=e-i),s>r+1&&(s=r+1),t.setAttribute(`listIndent`,s,o),a=!0,r=s}else i=null,n=e+1,r=e}return a}function Sz(e,t,n){let r=new Set,i=!1;for(let{node:a}of e){if(r.has(a))continue;let e=a.getAttribute(`listType`),o=a.getAttribute(`listItemId`);if(t.has(o)&&(o=OR.next()),t.add(o),a.is(`element`,`listItem`)){a.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,a),i=!0);continue}for(let t of AR(a,{direction:`forward`}))r.add(t),t.getAttribute(`listType`)!=e&&(o=OR.next(),e=t.getAttribute(`listType`)),t.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,t),i=!0)}return i}function Cz(){return(e,t,n)=>{let r=t.viewItem;if(r.getStyle(`list-style-type`)!==`none`||!wz(r)||!n.consumable.consume(r,{name:!0}))return;let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a}}function wz(e){let t=!1;for(let n of e.getChildren()){if(n.is(`element`,`ul`)||n.is(`element`,`ol`)){t=!0;continue}return!1}return t}function Tz(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>i.checkAttribute(e,`listItemId`));if(!a.length||a.every(e=>e.hasAttribute(`listItemId`)))return;let o=t.viewItem.getAttribute(`data-list-item-id`)||OR.next();n.consumable.consume(t.viewItem,{attributes:`data-list-item-id`});let s=hz(t.viewItem),c=t.viewItem.parent&&t.viewItem.parent.is(`element`,`ol`)?`numbered`:`bulleted`,l=a[0].getAttribute(`listType`);l&&(c=l);let u={listItemId:o,listIndent:s,listType:c};for(let e of a)e.hasAttribute(`listItemId`)||r.setAttributes(u,e);a.length>1&&a[1].getAttribute(`listItemId`)!=u.listItemId&&n.keepEmptyElement(a[0])}}function Ez(e,t,n,r){return()=>{let r=e.document.differ.getChanges(),a=[],o=new Set,c=new Set,l=new Set;for(let e of r)if(e.type==`insert`&&e.name!=`$text`)bz(e.position,o,l),e.attributes.has(`listItemId`)?c.add(e.position.nodeAfter):bz(e.position.getShiftedBy(e.length),o,l);else if(e.type==`remove`&&e.attributes.has(`listItemId`))bz(e.position,o,l);else if(e.type==`attribute`){let t=e.range.start.nodeAfter;n.includes(e.attributeKey)?(bz(e.range.start,o,l),e.attributeNewValue===null?(bz(e.range.start.getShiftedBy(1),o,l),s(t)&&a.push(t)):c.add(t)):G(t)&&s(t)&&a.push(t)}for(let e of o.values())a.push(...i(e,c));for(let e of new Set(a))t.reconvertItem(e)};function i(e,t){let n=[],r=new Set,i=[];for(let{node:c,previous:u}of new ER(e)){if(r.has(c))continue;let e=c.getAttribute(`listIndent`);u&&en.includes(e)))}function o(e,t,n){for(let r=t-1;r>=0&&!n[r];r--){let t=Iz(e,r),i=null;if(!t){for(let e=r-1;e>=0;e--)if(n[e]){i=n[e].modelElement;break}}let o=t||i||e;n[r]={modelAttributes:{...a(o),listItemId:`list-item-skip-${r}`,listIndent:r},modelElement:o}}}function s(e,i){let a=t.mapper.toViewElement(e);if(!a)return!1;if(c(a)||r.fire(`checkElement`,{modelElement:e,viewElement:a}))return!0;if(!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`))return!1;let o=Rz(e,n,i);return o&&a.is(`element`,`p`)?!0:!!(!o&&a.is(`element`,`span`))}function c(e){for(e=e.parent;e.is(`attributeElement`)&&[`ol`,`ul`,`li`].includes(e.name);)e=e.parent;return!!(e.getCustomProperty(`$structureSlotParent`)&&!t.mapper.toModelElement(e))}function l(e,n,i){if(i.has(e))return!1;let a=t.mapper.toViewElement(e),o=n.length-1;for(let e=a.parent;!e.is(`editableElement`);e=e.parent){let t=mz(e),i=pz(e);if(!(!i&&!t)){if(n[o]){let i=`checkAttributes:${t?`item`:`list`}`;if(r.fire(i,{viewElement:e,modelAttributes:n[o].modelAttributes,modelReferenceElement:n[o].modelElement}))break}if(i&&(o--,o<0))return!1}}return!0}}function Dz(e,t,n,{dataPipeline:r,enableSkipLevelLists:i}){let a=Lz(e,t);return(o,s,c)=>{let{writer:l,mapper:u,consumable:d}=c,f=s.item;if(!e.includes(s.attributeKey)||!a(f,d))return;let p={...c.options,dataPipeline:r,enableSkipLevelLists:i},m=Az(f,u,n,l);Mz(m,l,u),Pz(m,l),Fz(f,Nz(f,m,t,l,p),t,l,p)}}function Oz(e){return(t,n,r)=>{let{writer:i,mapper:a}=r,o=t.name.split(`:`)[1];if(!e.checkAttribute(o,`listItemId`))return;let s=a.toViewPosition(n.position),c=n.position.getShiftedBy(n.length),l=a.toViewPosition(c,{isPhantom:!0}),u=i.createRange(s,l).getTrimmed().end.nodeBefore;u&&Mz(u,i,a)}}function kz(e,{dataPipeline:t}={}){return(n,{writer:r})=>{if(!Rz(n,e))return null;if(!t)return r.createContainerElement(`span`,{class:`ck-list-bogus-paragraph`});let i=r.createContainerElement(`p`);return r.setCustomProperty(`dataPipeline:transparentRendering`,!0,i),i}}function Az(e,t,n,r){let i=n.createRangeOn(e),a=t.toViewRange(i).getTrimmed().getWalker();for(let{item:e}of a)if(e.is(`element`)&&e.getCustomProperty(`listItemMarker`))a.jumpTo(r.createPositionAfter(e));else if(e.is(`element`)&&!e.getCustomProperty(`listItemWrapper`))return e}function jz(e,t){return(n,r)=>{if(r.modelPosition.offset>0)return;let i=r.modelPosition.parent;if(!G(i)||!e.some(e=>e.scope==`itemMarker`&&e.canInjectMarkerIntoElement&&e.canInjectMarkerIntoElement(i)))return;let a=r.mapper.toViewElement(i),o=t.createRangeIn(a),s=o.getWalker(),c=o.start;for(let{item:e}of s){if(e.is(`element`)&&r.mapper.toModelElement(e)||e.is(`$textProxy`))break;e.is(`element`)&&e.getCustomProperty(`listItemMarker`)&&(c=t.createPositionAfter(e),s.skip(({previousPosition:e})=>!e.isEqual(c)))}r.viewPosition=c}}function Mz(e,t,n){for(;e.parent.is(`attributeElement`)&&e.parent.getCustomProperty(`listItemWrapper`);)t.unwrap(t.createRangeOn(e),e.parent);let r=[];i(t.createPositionBefore(e).getWalker({direction:`backward`})),i(t.createRangeIn(e).getWalker());for(let e of r)t.remove(e);function i(e){for(let{item:t}of e){if(t.is(`element`)&&n.toModelElement(t))break;t.is(`element`)&&t.getCustomProperty(`listItemMarker`)&&r.push(t)}}}function Nz(e,t,n,r,{dataPipeline:i}){let a=r.createRangeOn(t);if(!NR(e))return a;for(let o of n){if(o.scope!=`itemMarker`)continue;let n=o.createElement(r,e,{dataPipeline:i});if(!n||(r.setCustomProperty(`listItemMarker`,!0,n),o.canInjectMarkerIntoElement&&o.canInjectMarkerIntoElement(e)?r.insert(r.createPositionAt(t,0),n):(r.insert(a.start,n),a=r.createRange(r.createPositionBefore(n),r.createPositionAfter(t))),!o.createWrapperElement||!o.canWrapElement))continue;let s=o.createWrapperElement(r,e,{dataPipeline:i});r.setCustomProperty(`listItemWrapper`,!0,s),o.canWrapElement(e)?a=r.wrap(a,s):(a=r.wrap(r.createRangeOn(n),s),a=r.createRange(a.start,r.createPositionAfter(t)))}return a}function Pz(e,t){let n=e.parent;for(;n.is(`attributeElement`)&&[`ul`,`ol`,`li`].includes(n.name);){let r=n.parent;t.unwrap(t.createRangeOn(e),n),n=r}}function Fz(e,t,n,r,i){if(!e.hasAttribute(`listIndent`))return;let a=e.getAttribute(`listIndent`),o=i.enableSkipLevelLists,s=e;for(let c=a;c>=0;c--){let a=s.getAttribute(`listIndent`)!==c;if(a){let a=Iz(e,c)||s,o=a.getAttribute(`listType`),l=_z(r,c,`list-item-skip-${c}`),u=gz(r,c,o);r.setStyle(`list-style-type`,`none`,l);for(let e of n)e.scope==`list`&&a.hasAttribute(e.attributeName)&&e.setAttributeOnDowncast(r,a.getAttribute(e.attributeName),u,i,a);t=r.wrap(t,l),t=r.wrap(t,u)}else{let e=_z(r,c,s.getAttribute(`listItemId`)),a=gz(r,c,s.getAttribute(`listType`));for(let t of n)(t.scope==`list`||t.scope==`item`)&&s.hasAttribute(t.attributeName)&&t.setAttributeOnDowncast(r,s.getAttribute(t.attributeName),t.scope==`list`?a:e,i,s);t=r.wrap(t,e),t=r.wrap(t,a)}if(c==0)break;if(!a){let e=TR.first(s,{lowerIndent:!0});if(e)s=e;else if(!o)break}}}function Iz(e,t){let n=e.nextSibling;for(;n&&G(n);){let e=n.getAttribute(`listIndent`);if(ee.consume===!1).map(e=>e.attributeName);return(t,r)=>{let i=[];for(let r of e)t.hasAttribute(r)&&!n.includes(r)&&i.push(`attribute:${r}`);return i.every(e=>r.test(t,e)!==!1)?(i.forEach(e=>r.consume(t,e)),!0):!1}}function Rz(e,t,n=kR(e)){if(!G(e))return!1;for(let n of e.getAttributeKeys())if(!(n.startsWith(`selection:`)||n==`htmlEmptyBlock`)&&!t.includes(n))return!1;return n.length<2}const zz=[`listType`,`listIndent`,`listItemId`];var Bz=class extends F{_downcastStrategies=[];static get pluginName(){return`ListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,fz,_O,oz]}constructor(e){super(e),e.config.define(`list.multiBlock`,!0)}init(){let e=this.editor,t=e.model,n=e.config.get(`list.multiBlock`);if(e.plugins.has(`LegacyListEditing`))throw new w(`list-feature-conflict`,this,{conflictPlugin:`LegacyListEditing`});t.schema.register(`$listItem`,{allowAttributes:zz}),n?(t.schema.extend(`$container`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$block`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$blockObject`,{allowAttributesOf:`$listItem`})):t.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributesOf:`$listItem`});for(let e of zz)t.schema.setAttributeProperties(e,{copyOnReplace:!0});e.commands.add(`numberedList`,new QR(e,`numbered`)),e.commands.add(`bulletedList`,new QR(e,`bulleted`)),e.commands.add(`customNumberedList`,new QR(e,`customNumbered`,{multiLevel:!0})),e.commands.add(`customBulletedList`,new QR(e,`customBulleted`,{multiLevel:!0})),e.commands.add(`indentList`,new XR(e,`forward`)),e.commands.add(`outdentList`,new XR(e,`backward`)),e.commands.add(`splitListItemBefore`,new ez(e,`before`)),e.commands.add(`splitListItemAfter`,new ez(e,`after`)),n&&(e.commands.add(`mergeListItemBackward`,new $R(e,`backward`)),e.commands.add(`mergeListItemForward`,new $R(e,`forward`))),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration(),this._setupClipboardIntegration(),this._setupAccessibilityIntegration(),this._setupListItemIdConversionStrategy()}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`),{priority:`high`}),n&&n.registerChildCommand(e.get(`outdentList`),{priority:`lowest`}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(e){this._downcastStrategies.push(e)}getListAttributeNames(){return[...zz,...this._downcastStrategies.map(e=>e.attributeName)]}_setupDeleteIntegration(){let e=this.editor,t=e.commands.get(`mergeListItemBackward`),n=e.commands.get(`mergeListItemForward`);this.listenTo(e.editing.view.document,`delete`,(r,i)=>{let a=e.model.document.selection;GR(e.model)||e.model.change(()=>{let o=a.getFirstPosition();if(a.isCollapsed&&i.direction==`backward`){if(!o.isAtStart)return;let n=o.parent;if(!G(n))return;let a=TR.first(n,{sameAttributes:`listType`,sameIndent:!0}),s=n.getAttribute(`listIndent`)===0||!G(n.previousSibling);if(!a&&s)PR(n)||e.execute(`splitListItemAfter`),e.execute(`outdentList`);else{if(!t||!t.isEnabled)return;t.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`backward`)})}i.preventDefault(),r.stop()}else{if(a.isCollapsed&&!a.getLastPosition().isAtEnd||!n||!n.isEnabled)return;n.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`forward`)}),i.preventDefault(),r.stop()}})},{context:`li`})}_setupEnterIntegration(){let e=this.editor,t=e.model,n=e.commands,r=n.get(`enter`);this.listenTo(e.editing.view.document,`enter`,(n,r)=>{let i=t.document,a=i.selection.getFirstPosition().parent;if(i.selection.isCollapsed&&G(a)&&a.isEmpty&&!r.isSoft){let t=NR(a),i=PR(a);t&&i?(e.execute(`outdentList`),r.preventDefault(),n.stop()):t&&!i?(e.execute(`splitListItemAfter`),r.preventDefault(),n.stop()):i&&(e.execute(`splitListItemBefore`),r.preventDefault(),n.stop())}},{context:`li`}),this.listenTo(r,`afterExecute`,()=>{let t=n.get(`splitListItemBefore`);if(t.refresh(),!t.isEnabled)return;let r=e.model.document.selection.getLastPosition().parent;kR(r).length===2&&t.execute()})}_setupTabIntegration(){let e=this.editor;this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}_setupConversion(){let e=this.editor,t=e.model,n=this.getListAttributeNames(),r=e.config.get(`list.multiBlock`),i=r?`paragraph`:`listItem`,a=!!e.config.get(`list.enableSkipLevelLists`);e.conversion.for(`upcast`).elementToElement({view:`li`,model:(e,{writer:t})=>t.createElement(i,{listType:``})}).elementToElement({view:`p`,model:(e,{writer:t})=>e.parent&&e.parent.is(`element`,`li`)?t.createElement(i,{listType:``}):null,converterPriority:`high`}).add(e=>{e.on(`element:p`,(e,t,n)=>{let r=t.viewItem;if(!r.parent||!r.parent.is(`element`,`li`)||r.isEmpty||!r.getAttributeKeys().next().done)return;for(let e of r.parent.getChildren())if(e!==r&&!(e.is(`element`,`ol`)||e.is(`element`,`ul`)))return;n.consumable.consume(r,{name:!0});let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a},{priority:`highest`}),a&&e.on(`element:li`,Cz(),{priority:`high`}),e.on(`element:li`,Tz())}),r||e.conversion.for(`downcast`).elementToElement({model:`listItem`,view:`p`}),e.conversion.for(`editingDowncast`).elementToElement({model:i,view:kz(n),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{enableSkipLevelLists:a})),e.on(`remove`,Oz(t.schema))}),e.conversion.for(`dataDowncast`).elementToElement({model:i,view:kz(n,{dataPipeline:!0}),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{dataPipeline:!0,enableSkipLevelLists:a}))});let o=jz(this._downcastStrategies,e.editing.view);e.editing.mapper.on(`modelToViewPosition`,o),e.data.mapper.on(`modelToViewPosition`,o),this.listenTo(t.document,`change:data`,Ez(t,e.editing,n,this),{priority:`high`}),this.on(`checkAttributes:item`,(e,{viewElement:t,modelAttributes:n})=>{t.id!=n.listItemId&&(e.return=!0,e.stop())}),this.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n})=>{(t.name!=vz(n.listType)||t.id!=yz(n.listType,n.listIndent))&&(e.return=!0,e.stop())})}_setupModelPostFixing(){let e=this.editor.model,t=this.getListAttributeNames();e.document.registerPostFixer(n=>Vz(e,n,t,this)),this.editor.config.get(`list.enableSkipLevelLists`)||this.on(`postFixer`,(e,{listNodes:t,writer:n})=>{e.return=xz(t,n)||e.return},{priority:`high`}),this.on(`postFixer`,(e,{listNodes:t,writer:n,seenIds:r})=>{e.return=Sz(t,r,n)||e.return},{priority:`high`})}_setupClipboardIntegration(){let e=this.editor.model,t=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`insertContent`,Hz(e),{priority:`high`}),this.listenTo(t,`outputTransformation`,(t,n)=>{e.change(e=>{let t=Array.from(n.content.getChildren()),r=t[t.length-1];if(t.length>1&&r.is(`element`)&&r.isEmpty&&t.slice(0,-1).every(G)&&e.remove(r),n.method==`copy`||n.method==`cut`){let t=Array.from(n.content.getChildren());HR(t)&&VR(t,e,this.getListAttributeNames())}})})}_setupAccessibilityIntegration(){let e=this.editor,t=e.t;e.accessibility.addKeystrokeInfoGroup({id:`list`,label:t(`Keystrokes that can be used in a list`),keystrokes:[{label:t(`Increase list item indent`),keystroke:`Tab`},{label:t(`Decrease list item indent`),keystroke:`Shift+Tab`}]})}_setupListItemIdConversionStrategy(){this.registerDowncastStrategy({scope:`item`,attributeName:`listItemId`,setAttributeOnDowncast(e,t,n,r){r&&(r.skipListItemIds||r.isClipboardPipeline)||e.setAttribute(`data-list-item-id`,t,n)}})}};function Vz(e,t,n,r){let i=e.document.differ.getChanges(),a=new Set,o=new Set,s=r.editor.config.get(`list.multiBlock`),c=!1;for(let r of i){if(r.type==`insert`&&r.name!=`$text`){let i=r.position.nodeAfter;if(!e.schema.checkAttribute(i,`listItemId`))for(let e of Array.from(i.getAttributeKeys()))n.includes(e)&&(t.removeAttribute(e,i),c=!0);bz(r.position,o,a),r.attributes.has(`listItemId`)||bz(r.position.getShiftedBy(r.length),o,a);for(let{item:t,previousPosition:n}of e.createRangeIn(i))G(t)&&bz(n,o,a)}else r.type==`remove`?bz(r.position,o,a):r.type==`attribute`&&n.includes(r.attributeKey)&&(bz(r.range.start,o,a),r.attributeNewValue===null&&bz(r.range.start.getShiftedBy(1),o,a));if(!s&&r.type==`attribute`&&zz.includes(r.attributeKey)){let e=r.range.start.nodeAfter;r.attributeNewValue===null&&e&&e.is(`element`,`listItem`)?(t.rename(e,`paragraph`),c=!0):r.attributeOldValue===null&&e&&e.is(`element`)&&e.name!=`listItem`&&(t.rename(e,`listItem`),c=!0)}}let l=new Set;for(let e of o.values())c=r.fire(`postFixer`,{listNodes:new DR(e),listHead:e,writer:t,seenIds:l})||c;return c}function Hz(e){return(t,[n,r])=>{let i=(n.is(`documentFragment`)?Array.from(n.getChildren()):[n]).filter(t=>!e.schema.isInline(t));if(!i.length)return;let a=(r?e.createSelection(r):e.document.selection).getFirstPosition(),o;if(G(a.parent))o=a.parent;else if(G(a.nodeBefore)&&G(a.nodeAfter))o=a.nodeBefore;else return;e.change(e=>{let t=o.getAttribute(`listType`),n=o.getAttribute(`listIndent`),r=i[0].getAttribute(`listIndent`)||0,a=Math.max(n-r,0);for(let n of i){let r=G(n);o.is(`element`,`listItem`)&&n.is(`element`,`paragraph`)&&e.rename(n,`listItem`),e.setAttributes({listIndent:(r?n.getAttribute(`listIndent`):0)+a,listItemId:r?n.getAttribute(`listItemId`):OR.next(),listType:t},n)}})}}function Uz(e,t){let n=e.document.selection;if(!n.isCollapsed)return!GR(e);if(t===`forward`)return!0;let r=n.getFirstPosition().parent,i=r.previousSibling;return e.schema.isObject(i)?!1:i.isEmpty?!0:HR([r,i])}function Wz(e,t,n,r){e.ui.componentFactory.add(t,()=>{let i=Gz(H,e,t,n,r);return i.set({tooltip:!0,isToggleable:!0}),i}),e.ui.componentFactory.add(`menuBar:${t}`,()=>{let i=Gz(U,e,t,n,r);return i.set({role:`menuitemcheckbox`,isToggleable:!0}),i})}function Gz(e,t,n,r,i){let a=t.commands.get(n),o=new e(t.locale);return o.set({label:r,icon:i}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.on(`execute`,()=>{t.execute(n),t.editing.view.focus()}),o}var Kz=class extends F{static get pluginName(){return`ListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;this.editor.ui.componentFactory.has(`numberedList`)||Wz(this.editor,`numberedList`,e(`Numbered List`),vv),this.editor.ui.componentFactory.has(`bulletedList`)||Wz(this.editor,`bulletedList`,e(`Bulleted List`),o_)}},qz=class extends F{static get requires(){return[Bz,Kz]}static get pluginName(){return`List`}static get isOfficialPlugin(){return!0}},Jz=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&qR(e.getAttribute(`listType`)));r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listStart`,e>=0?e:1,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return t&&G(t)&&qR(t.getAttribute(`listType`))?t.getAttribute(`listStart`):null}};const Yz={},Xz={},Zz={},Qz=[{listStyle:`disc`,typeAttribute:`disc`,listType:`bulleted`},{listStyle:`circle`,typeAttribute:`circle`,listType:`bulleted`},{listStyle:`square`,typeAttribute:`square`,listType:`bulleted`},{listStyle:`decimal`,typeAttribute:`1`,listType:`numbered`},{listStyle:`decimal-leading-zero`,typeAttribute:null,listType:`numbered`},{listStyle:`lower-roman`,typeAttribute:`i`,listType:`numbered`},{listStyle:`upper-roman`,typeAttribute:`I`,listType:`numbered`},{listStyle:`lower-alpha`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-alpha`,typeAttribute:`A`,listType:`numbered`},{listStyle:`lower-latin`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-latin`,typeAttribute:`A`,listType:`numbered`},{listStyle:`arabic-indic`,typeAttribute:null,listType:`numbered`}];for(let{listStyle:e,typeAttribute:t,listType:n}of Qz)Yz[e]=n,Xz[e]=t,t&&(Zz[t]=e);function $z(){return Qz.map(e=>e.listStyle)}function eB(e){return Yz[e]||null}function tB(e){return Zz[e]||null}function nB(e){return Xz[e]||null}function rB(e){switch(e){case`lower-alpha`:return`lower-latin`;case`upper-alpha`:return`upper-latin`;default:return e}}var iB=class extends I{defaultType;_supportedTypes;constructor(e,t,n){super(e),this.defaultType=t,this._supportedTypes=n}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document;t.change(t=>{this._tryToConvertItemsToList(e);let r=Array.from(n.selection.getSelectedBlocks()).filter(e=>e.hasAttribute(`listType`));if(r.length){r=IR(r);for(let n of r)t.setAttribute(`listStyle`,e.type||this.defaultType,n)}})}isStyleTypeSupported(e){return this._supportedTypes?this._supportedTypes.includes(e):!0}_getValue(){let e=j(this.editor.model.document.selection.getSelectedBlocks());return G(e)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=eB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},aB=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&e.getAttribute(`listType`)==`numbered`);r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listReversed`,!!e.reversed,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return G(t)&&t.getAttribute(`listType`)==`numbered`?t.getAttribute(`listReversed`):null}};function oB(e){return(t,n,r)=>{let{writer:i,schema:a,consumable:o}=r;if(o.test(n.viewItem,e.viewConsumables)===!1)return;n.modelRange||Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor));let s=!1;for(let t of n.modelRange.getItems({shallow:!0}))a.checkAttribute(t,e.attributeName)&&e.appliesToListItem(t)&&(t.hasAttribute(e.attributeName)||(i.setAttribute(e.attributeName,e.getAttributeOnUpcast(n.viewItem),t),s=!0));s&&o.consume(n.viewItem,e.viewConsumables)}}var sB=class extends F{static get pluginName(){return`ListPropertiesUtils`}static get isOfficialPlugin(){return!0}getAllSupportedStyleTypes(){return $z()}getListTypeFromListStyleType(e){return eB(e)}getListStyleTypeFromTypeAttribute(e){return tB(e)}getTypeAttributeFromListStyleType(e){return nB(e)}};function cB(e){let{startIndex:t,reversed:n,styles:r}=e;return{styles:lB(r),startIndex:t||!1,reversed:n||!1}}function lB(e){let t={listTypes:[`bulleted`,`numbered`],useAttribute:!1,listStyleTypes:{numbered:[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`],bulleted:[`disc`,`circle`,`square`]}};return e===!0||(e?Array.isArray(e)||typeof e==`string`?(t.listTypes=A(e),t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=e.listTypes?A(e.listTypes):t.listTypes,t.useAttribute=!!e.useAttribute,e.listStyleTypes?t.listStyleTypes=e.listStyleTypes:t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=[],t.listStyleTypes={})),t}const uB=`default`;var dB=class extends F{static get requires(){return[Bz,sB]}static get pluginName(){return`ListPropertiesEditing`}static get licenseFeatureCode(){return`LP`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`list.properties`,{styles:!0,startIndex:!1,reversed:!1})}init(){let e=this.editor,t=e.model,n=e.plugins.get(Bz),r=fB(e.config.get(`list.properties`));for(let i of r)i.addCommand(e),t.schema.extend(`$listItem`,{allowAttributes:i.attributeName}),n.registerDowncastStrategy({scope:`list`,attributeName:i.attributeName,setAttributeOnDowncast(e,t,n){i.setAttributeOnDowncast(e,t,n)}});e.conversion.for(`upcast`).add(e=>{for(let t of r)e.on(`element:ol`,oB(t)),e.on(`element:ul`,oB(t))}),n.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n,modelReferenceElement:i})=>{for(let a of r)a.appliesToListItem(i)&&a.getAttributeOnUpcast(t)!=n[a.attributeName]&&(e.return=!0,e.stop())}),this.listenTo(e.commands.get(`indentList`),`afterExecute`,(e,n)=>{t.change(e=>{for(let t of n)for(let n of r)n.appliesToListItem(t)&&e.setAttribute(n.attributeName,n.defaultValue,t)})}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i}of t)for(let t of r)t.hasValidAttribute(i)||(t.appliesToListItem(i)?n.setAttribute(t.attributeName,t.defaultValue,i):n.removeAttribute(t.attributeName,i),e.return=!0)}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i,previousNodeInList:a}of t)if(a&&a.getAttribute(`listType`)==i.getAttribute(`listType`))for(let t of r){let{attributeName:r}=t;if(!t.appliesToListItem(i))continue;let o=a.getAttribute(r);i.getAttribute(r)!=o&&(n.setAttribute(r,o,i),e.return=!0)}})}};function fB(e){let t=[],n=cB(e);if(e.styles){let e=n.styles.useAttribute;t.push({attributeName:`listStyle`,defaultValue:uB,viewConsumables:{styles:`list-style-type`},addCommand(t){let n=$z();e&&(n=n.filter(e=>!!nB(e))),t.commands.add(`listStyle`,new iB(t,uB,n))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`||e.getAttribute(`listType`)==`bulleted`},hasValidAttribute(e){if(!this.appliesToListItem(e))return!e.hasAttribute(`listStyle`);if(!e.hasAttribute(`listStyle`))return!1;let t=e.getAttribute(`listStyle`);return t==uB?!0:eB(t)==e.getAttribute(`listType`)},setAttributeOnDowncast(t,n,r){if(n&&n!==uB)if(e){let e=nB(n);if(e){t.setAttribute(`type`,e,r);return}}else{t.setStyle(`list-style-type`,n,r);return}t.removeStyle(`list-style-type`,r),t.removeAttribute(`type`,r)},getAttributeOnUpcast(e){let t=e.getStyle(`list-style-type`);if(t)return rB(t);let n=e.getAttribute(`type`);return n?tB(n):uB}})}return e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,viewConsumables:{attributes:`reversed`},addCommand(e){e.commands.add(`listReversed`,new aB(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listReversed`)},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,viewConsumables:{attributes:`start`},addCommand(e){e.commands.add(`listStart`,new Jz(e))},appliesToListItem(e){return qR(e.getAttribute(`listType`))},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listStart`)},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}var pB=class extends P{children;stylesView=null;additionalPropertiesCollapsibleView=null;startIndexFieldView=null;reversedSwitchButtonView=null;focusTracker=new M;keystrokes=new N;focusables=new pa;focusCycler;constructor(e,{enabledProperties:t,styleButtonViews:n,styleGridAriaLabel:r}){super(e);let i=[`ck`,`ck-list-properties`];this.children=this.createCollection(),this.focusCycler=new Hy({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),n&&n.length?(this.stylesView=this._createStylesView(n,r),this.children.add(this.stylesView)):i.push(`ck-list-properties_without-styles`),(t.startIndex||t.reversed)&&(this._addNumberedListPropertyViews(t),i.push(`ck-list-properties_with-numbered-properties`)),this.setTemplate({tag:`div`,attributes:{class:i},children:this.children})}render(){if(super.render(),this.stylesView){this.focusables.add(this.stylesView),this.focusTracker.add(this.stylesView.element),(this.startIndexFieldView||this.reversedSwitchButtonView)&&(this.focusables.add(this.children.last.buttonView),this.focusTracker.add(this.children.last.buttonView.element));for(let e of this.stylesView.children)this.stylesView.focusTracker.add(e.element);$a({keystrokeHandler:this.stylesView.keystrokes,focusTracker:this.stylesView.focusTracker,gridItems:this.stylesView.children,numberOfColumns:()=>u.window.getComputedStyle(this.stylesView.element).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}if(this.startIndexFieldView){this.focusables.add(this.startIndexFieldView),this.focusTracker.add(this.startIndexFieldView.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}this.reversedSwitchButtonView&&(this.focusables.add(this.reversedSwitchButtonView),this.focusTracker.add(this.reversedSwitchButtonView.element)),this.keystrokes.listenTo(this.element)}focus(){this.focusCycler.focusFirst()}focusLast(){this.focusCycler.focusLast()}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createStylesView(e,t){let n=new P(this.locale);return n.children=n.createCollection(),n.children.addMany(e),n.setTemplate({tag:`div`,attributes:{"aria-label":t,class:[`ck`,`ck-list-styles-list`]},children:n.children}),n.children.delegate(`execute`).to(this),n.focus=function(){for(let e of this.children)if(e instanceof H&&e.isOn){e.focus();return}this.children.first.focus()},n.focusTracker=new M,n.keystrokes=new N,n.render(),n.keystrokes.listenTo(n.element),n}_addNumberedListPropertyViews(e){let t=this.locale.t,n=[];e.startIndex&&(this.startIndexFieldView=this._createStartIndexField(),n.push(this.startIndexFieldView)),e.reversed&&(this.reversedSwitchButtonView=this._createReversedSwitchButton(),n.push(this.reversedSwitchButtonView)),this.stylesView?(this.additionalPropertiesCollapsibleView=new xb(this.locale,n),this.additionalPropertiesCollapsibleView.set({label:t(`List properties`),isCollapsed:!0}),this.additionalPropertiesCollapsibleView.buttonView.bind(`isEnabled`).toMany(n,`isEnabled`,(...e)=>e.some(e=>e)),this.additionalPropertiesCollapsibleView.buttonView.on(`change:isEnabled`,(e,t,n)=>{n||(this.additionalPropertiesCollapsibleView.isCollapsed=!0)}),this.children.add(this.additionalPropertiesCollapsibleView)):this.children.addMany(n)}_createStartIndexField(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.set({label:e(`Start at`),class:`ck-numbered-list-properties__start-index`}),t.fieldView.set({min:0,step:1,value:1,inputMode:`numeric`}),t.fieldView.on(`input`,()=>{let n=t.fieldView.element,r=n.valueAsNumber;if(Number.isNaN(r)){t.errorText=e(`Invalid start index value.`);return}n.checkValidity()?this.fire(`listStart`,{startIndex:r}):t.errorText=e(`Start index must be greater than 0.`)}),t}_createReversedSwitchButton(){let e=this.locale.t,t=new mb(this.locale);return t.set({withText:!0,label:e(`Reversed order`),class:`ck-numbered-list-properties__reversed-order`}),t.delegate(`execute`).to(this,`listReversed`),t}},mB=class extends F{static get pluginName(){return`ListPropertiesUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=e.config.get(`list.properties`),r=cB(n),i=r.styles.listTypes;if(i.includes(`bulleted`)){let n=[{label:t(`Toggle the disc list style`),tooltip:t(`Disc`),type:`disc`,icon:tv},{label:t(`Toggle the circle list style`),tooltip:t(`Circle`),type:`circle`,icon:Q_},{label:t(`Toggle the square list style`),tooltip:t(`Square`),type:`square`,icon:iv}],i=t(`Bulleted List`),a=t(`Bulleted list styles toolbar`),o=`bulletedList`;e.ui.componentFactory.add(o,hB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,buttonIcon:o_,styleGridAriaLabel:a,styleDefinitions:n})),e.ui.componentFactory.add(`menuBar:${o}`,vB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,styleGridAriaLabel:a,styleDefinitions:n}))}if(i.includes(`numbered`)||n.startIndex||n.reversed){let n=[{label:t(`Toggle the decimal list style`),tooltip:t(`Decimal`),type:`decimal`,icon:ev},{label:t(`Toggle the decimal with leading zero list style`),tooltip:t(`Decimal with leading zero`),type:`decimal-leading-zero`,icon:$_},{label:t(`Toggle the lower–roman list style`),tooltip:t(`Lower–roman`),type:`lower-roman`,icon:rv},{label:t(`Toggle the upper–roman list style`),tooltip:t(`Upper-roman`),type:`upper-roman`,icon:ov},{label:t(`Toggle the lower–latin list style`),tooltip:t(`Lower-latin`),type:`lower-latin`,icon:nv},{label:t(`Toggle the upper–latin list style`),tooltip:t(`Upper-latin`),type:`upper-latin`,icon:av},{label:t(`Toggle the arabic-indic list style`),tooltip:t(`Arabic-indic`),type:`arabic-indic`,icon:sv}],a=t(`Numbered List`),o=t(`Numbered list styles toolbar`),s=`numberedList`;e.ui.componentFactory.add(s,hB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,buttonIcon:vv,styleGridAriaLabel:o,styleDefinitions:n})),i.includes(`numbered`)&&e.ui.componentFactory.add(`menuBar:${s}`,vB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,styleGridAriaLabel:o,styleDefinitions:n}))}}};function hB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,buttonIcon:i,styleGridAriaLabel:a,styleDefinitions:o}){let s=e.commands.get(n);return c=>{let l=Nx(c,Mx),u=l.buttonView;return l.bind(`isEnabled`).to(s),l.class=`ck-list-styles-dropdown`,u.on(`execute`,()=>{e.execute(n),e.editing.view.focus()}),u.set({label:r,icon:i,tooltip:!0,isToggleable:!0}),u.bind(`isOn`).to(s,`value`,e=>!!e),l.once(`change:isOpen`,()=>{let r=_B({editor:e,normalizedConfig:t,dropdownView:l,parentCommandName:n,styleGridAriaLabel:a,styleDefinitions:o});l.panelView.children.add(r)}),l.on(`execute`,()=>{e.editing.view.focus()}),l}}function gB({editor:e,listStyleCommand:t,parentCommandName:n}){let r=e.locale,i=e.commands.get(n);return({label:a,type:o,icon:s,tooltip:c})=>{let l=new H(r);return l.set({label:a,icon:s,tooltip:c}),l.bind(`isOn`).to(t,`value`,e=>e===o),l.on(`execute`,()=>{i.value?t.value===o?e.execute(n):t.value!==o&&e.execute(`listStyle`,{type:o}):e.model.change(()=>{e.execute(`listStyle`,{type:o})})}),l}}function _B({editor:e,normalizedConfig:t,dropdownView:n,parentCommandName:r,styleDefinitions:i,styleGridAriaLabel:a}){let o=e.locale,s={...t,...r==`numberedList`?null:{startIndex:!1,reversed:!1}},c=r.replace(`List`,``),l=null;if(t.styles.listTypes.includes(c)){let n=e.commands.get(`listStyle`),a=gB({editor:e,parentCommandName:r,listStyleCommand:n}),o=t.styles.listStyleTypes,s=i;if(o){let e=o[c];e&&(s=i.filter(t=>e.includes(t.type)))}let u=yB(n);l=s.filter(u).map(a)}let u=new pB(o,{styleGridAriaLabel:a,enabledProperties:s,styleButtonViews:l});if(t.styles.listTypes.includes(c)&&zx(n,()=>u.stylesView.children.find(e=>e.isOn)),s.startIndex){let t=e.commands.get(`listStart`);u.startIndexFieldView.bind(`isEnabled`).to(t),u.startIndexFieldView.fieldView.bind(`value`).to(t),u.on(`listStart`,(t,n)=>e.execute(`listStart`,n))}if(s.reversed){let t=e.commands.get(`listReversed`);u.reversedSwitchButtonView.bind(`isEnabled`).to(t),u.reversedSwitchButtonView.bind(`isOn`).to(t,`value`,e=>!!e),u.on(`listReversed`,()=>{let n=t.value;e.execute(`listReversed`,{reversed:!n})})}return u.delegate(`execute`).to(n),u}function vB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,styleGridAriaLabel:i,styleDefinitions:a}){return o=>{let s=new uw(o),c=e.commands.get(n),l=e.commands.get(`listStyle`),u=yB(l),d=gB({editor:e,parentCommandName:n,listStyleCommand:l}),f=t.styles.listStyleTypes,p=a;if(f){let e=f[c.type];e&&(p=a.filter(t=>e.includes(t.type)))}let m=p.filter(u).map(d),h=new pB(o,{styleGridAriaLabel:i,enabledProperties:{...t,startIndex:!1,reversed:!1},styleButtonViews:m});return h.delegate(`execute`).to(s),s.buttonView.set({label:r,icon:n===`bulletedList`?o_:vv}),s.panelView.children.add(h),s.bind(`isEnabled`).to(c,`isEnabled`),s.on(`execute`,()=>{e.editing.view.focus()}),s}}function yB(e){return typeof e.isStyleTypeSupported==`function`?t=>e.isStyleTypeSupported(t.type):()=>!0}var bB=class extends F{static get requires(){return[dB,mB]}static get pluginName(){return`ListProperties`}static get isOfficialPlugin(){return!0}},xB=class extends I{constructor(e){super(e),this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){let e=this._getSelectedItems();this.value=this._getValue(e),this.isEnabled=!!e.length}execute(e={}){this.editor.model.change(t=>{let n=this._getSelectedItems(),r=e.forceValue===void 0?!this._getValue(n):e.forceValue;for(let e of n)r?t.setAttribute(`todoListChecked`,!0,e):t.removeAttribute(`todoListChecked`,e)})}_getValue(e){return e.every(e=>e.getAttribute(`todoListChecked`))}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,`todoListChecked`)&&i.push(...kR(r));for(let e of n.getItems({shallow:!0}))t.checkAttribute(e,`todoListChecked`)&&!i.includes(e)&&i.push(...kR(e));return i}},SB=class extends jc{domEventType=[`change`];onDomEvent(e){if(e.target){let t=this.view.domConverter.mapDomToView(e.target);t&&t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&t.findAncestor({classes:`todo-list__label`})&&this.fire(`todoCheckboxChange`,e)}}};const CB=yi(`Ctrl+Enter`);var wB=class extends F{static get pluginName(){return`TodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.model,n=e.editing,r=e.plugins.get(Bz),i=e.config.get(`list.multiBlock`)?`paragraph`:`listItem`;e.commands.add(`todoList`,new QR(e,`todo`)),e.commands.add(`checkTodoList`,new xB(e)),n.view.addObserver(SB),t.schema.extend(`$listItem`,{allowAttributes:`todoListChecked`}),t.schema.addAttributeCheck(e=>{let t=e.last;if(!t.getAttribute(`listItemId`)||t.getAttribute(`listType`)!=`todo`)return!1},`todoListChecked`),e.conversion.for(`upcast`).add(e=>{e.on(`element:input`,EB()),e.on(`element:li`,TB(),{priority:`low`}),e.on(`element:label`,DB({name:`label`,classes:`todo-list__label`})),e.on(`element:label`,DB({name:`label`,classes:[`todo-list__label`,`todo-list__label_without-description`]})),e.on(`element:span`,DB({name:`span`,classes:`todo-list__label__description`})),e.on(`element:ul`,OB({name:`ul`,classes:`todo-list`}))}),e.conversion.for(`downcast`).elementToElement({model:i,view:(e,{writer:t})=>{if(kB(e,r.getListAttributeNames()))return t.createContainerElement(`span`,{class:`todo-list__label__description`})},converterPriority:`highest`}),r.registerDowncastStrategy({scope:`list`,attributeName:`listType`,setAttributeOnDowncast(e,t,n){t==`todo`?e.addClass(`todo-list`,n):e.removeClass(`todo-list`,n)}}),r.registerDowncastStrategy({scope:`itemMarker`,attributeName:`todoListChecked`,createElement(e,t,{dataPipeline:n}){if(t.getAttribute(`listType`)!=`todo`)return null;let r=e.createUIElement(`input`,{type:`checkbox`,...t.getAttribute(`todoListChecked`)?{checked:`checked`}:null,...n?{disabled:`disabled`}:{tabindex:`-1`}});if(n)return r;let i=e.createContainerElement(`span`,{contenteditable:`false`},r);return i.getFillerOffset=()=>null,i},canWrapElement(e){return kB(e,r.getListAttributeNames())},createWrapperElement(e,t,{dataPipeline:n}){let i=[`todo-list__label`];return kB(t,r.getListAttributeNames())||i.push(`todo-list__label_without-description`),e.createAttributeElement(n?`label`:`span`,{class:i.join(` `)})}}),r.on(`checkElement`,(e,{modelElement:t,viewElement:n})=>{let i=kB(t,r.getListAttributeNames());n.hasClass(`todo-list__label__description`)!=i&&(e.return=!0,e.stop())}),r.on(`checkElement`,(t,{modelElement:n,viewElement:r})=>{let i=n.getAttribute(`listType`)==`todo`&&NR(n),a=!1,o=e.editing.view.createPositionBefore(r).getWalker({direction:`backward`});for(let{item:t}of o){if(t.is(`element`)&&e.editing.mapper.toModelElement(t))break;t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&(a=!0)}a!=i&&(t.return=!0,t.stop())}),r.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t){if(!i||i.getAttribute(`listItemId`)!=r.getAttribute(`listItemId`))continue;let t=i.hasAttribute(`todoListChecked`),a=r.hasAttribute(`todoListChecked`);a&&!t?(n.removeAttribute(`todoListChecked`,r),e.return=!0):!a&&t&&(n.setAttribute(`todoListChecked`,!0,r),e.return=!0)}}),t.document.registerPostFixer(e=>{let n=t.document.differ.getChanges(),r=!1;for(let t of n)if(t.type==`attribute`&&t.attributeKey==`listType`){let n=t.range.start.nodeAfter;t.attributeOldValue==`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0)}else if(t.type==`insert`&&t.name!=`$text`)for(let{item:n}of e.createRangeOn(t.position.nodeAfter))n.is(`element`)&&n.getAttribute(`listType`)!=`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0);return r}),this.listenTo(n.view.document,`keydown`,(t,n)=>{vi(n)===CB&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`}),this.listenTo(n.view.document,`todoCheckboxChange`,(e,t)=>{let r=t.target;if(!r||!r.is(`element`,`input`))return;let i=n.view.createPositionAfter(r),a=n.mapper.toModelPosition(i).parent;a&&G(a)&&a.getAttribute(`listType`)==`todo`&&this._handleCheckmarkChange(a)}),this.listenTo(n.view.document,`arrowKey`,jB(t,e.locale),{context:`$text`}),this.listenTo(n.mapper,`viewToModelPosition`,(e,n)=>{let r=n.viewPosition.parent,i=r.is(`attributeElement`,`li`)&&n.viewPosition.offset==0,a=MB(r)&&n.viewPosition.offset<=1,o=r.is(`element`,`span`)&&r.getAttribute(`contenteditable`)==`false`&&MB(r.parent);if(!i&&!a&&!o)return;let s=n.modelPosition.nodeAfter;s&&s.getAttribute(`listType`)==`todo`&&(n.modelPosition=t.createPositionAt(s,0))},{priority:`low`}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=NB(r),o=NB(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function TB(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>e.getAttribute(`listType`)===`todo`&&i.checkAttribute(e,`listItemId`)).reduce((e,t)=>{let n=t.getAttribute(`listItemId`);return e.has(n)||e.set(n,kR(t)),e},new Map);for(let[,e]of a.entries())if(e.some(e=>e.getAttribute(`todoListChecked`)))for(let t of e)r.setAttribute(`todoListChecked`,!0,t)}}function EB(){return(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(!n.consumable.test(a,{name:!0})||a.getAttribute(`type`)!=`checkbox`||!r.isAtStart||!i.hasAttribute(`listType`))return;n.consumable.consume(a,{name:!0});let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)}}function DB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);i&&r.consumable.consume(n.viewItem,i.match)&&Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor))}}function OB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);if(!i)return;let a=i.match;a.name=!1,r.consumable.consume(n.viewItem,a)}}function kB(e,t){return(e.is(`element`,`paragraph`)||e.is(`element`,`listItem`))&&e.getAttribute(`listType`)==`todo`&&NR(e)&&AB(e,t)}function AB(e,t){for(let n of e.getAttributeKeys())if(!n.startsWith(`selection:`)&&!t.includes(n))return!1;return!0}function jB(e,t){return(n,r)=>{let i=Si(r.keyCode,t.contentLanguageDirection),a=e.schema,o=e.document.selection;if(!o.isCollapsed)return;let s=o.getFirstPosition(),c=s.parent;if(i==`right`&&s.isAtEnd){let t=a.getNearestSelectionRange(e.createPositionAfter(c),`forward`);if(!t)return;let i=t.start.parent;i&&G(i)&&i.getAttribute(`listType`)==`todo`&&(e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop())}else if(i==`left`&&s.isAtStart&&G(c)&&c.getAttribute(`listType`)==`todo`){let t=a.getNearestSelectionRange(e.createPositionBefore(c),`backward`);if(!t)return;e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function MB(e){return!!e&&e.is(`attributeElement`)&&e.hasClass(`todo-list__label`)}function NB(e){return!e||!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`)?!1:e.getAttribute(`listType`)==`todo`}var PB=class extends F{static get pluginName(){return`TodoListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;Wz(this.editor,`todoList`,e(`To-do List`),Ey)}},FB=class extends F{static get requires(){return[wB,PB]}static get pluginName(){return`TodoList`}static get isOfficialPlugin(){return!0}},IB=class extends I{type;constructor(e,t){super(e),this.type=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>RB(e,t.schema)),i=e.forceValue===void 0?this.value:!e.forceValue;t.change(e=>{if(i){let t=r[r.length-1].nextSibling,n=1/0,i=[];for(;t&&t.name==`listItem`&&t.getAttribute(`listIndent`)!==0;){let e=t.getAttribute(`listIndent`);e=n;)a>i.getAttribute(`listIndent`)&&(a=i.getAttribute(`listIndent`)),i.getAttribute(`listIndent`)==a&&e[t?`unshift`:`push`](i),i=i[t?`previousSibling`:`nextSibling`]}}function RB(e,t){return t.checkChild(e.parent,`listItem`)&&!t.isObject(e)}var zB=class extends I{_indentBy;constructor(e,t){super(e),this._indentBy=t==`forward`?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model,t=e.document,n=Array.from(t.selection.getSelectedBlocks());e.change(e=>{let t=n[n.length-1],r=t.nextSibling;for(;r&&r.name==`listItem`&&r.getAttribute(`listIndent`)>t.getAttribute(`listIndent`);)n.push(r),r=r.nextSibling;this._indentBy<0&&(n=n.reverse());for(let t of n){let n=t.getAttribute(`listIndent`)+this._indentBy;n<0?e.rename(t,`paragraph`):e.setAttribute(`listIndent`,n,t)}this.fire(`_executeCleanup`,n)})}_checkEnabled(){let e=j(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is(`element`,`listItem`))return!1;if(this._indentBy>0){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.previousSibling;for(;r&&r.is(`element`,`listItem`)&&r.getAttribute(`listIndent`)>=t;){if(r.getAttribute(`listIndent`)==t)return r.getAttribute(`listType`)==n;r=r.previousSibling}return!1}return!0}};function BB(e){let t=e.createContainerElement(`li`);return t.getFillerOffset=QB,t}function VB(e,t){let n=t.mapper,r=t.writer,i=e.getAttribute(`listType`)==`numbered`?`ol`:`ul`,a=BB(r),o=r.createContainerElement(i,null);return r.insert(r.createPositionAt(o,0),a),n.bindElements(e,a),a}function HB(e,t,n,r){let i=t.parent,a=n.mapper,o=n.writer,s=a.toViewPosition(r.createPositionBefore(e)),c=GB(e.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:e.getAttribute(`listIndent`)}),l=e.previousSibling;if(c&&c.getAttribute(`listIndent`)==e.getAttribute(`listIndent`)){let e=a.toViewElement(c);s=o.breakContainer(o.createPositionAfter(e))}else if(l&&l.name==`listItem`){s=a.toViewPosition(r.createPositionAt(l,`end`));let e=a.findMappedViewAncestor(s),t=KB(e);s=t?o.createPositionBefore(t):o.createPositionAt(e,`end`)}else s=a.toViewPosition(r.createPositionBefore(e));if(s=WB(s),o.insert(s,i),l&&l.name==`listItem`){let e=a.toViewElement(l),n=o.createRange(o.createPositionAt(e,0),s).getWalker({ignoreElementEnd:!0});for(let e of n)if(e.item.is(`element`,`li`)){let r=o.breakContainer(o.createPositionBefore(e.item)),i=e.item.parent,a=o.createPositionAt(t,`end`);UB(o,a.nodeBefore,a.nodeAfter),o.move(o.createRangeOn(i),a),n._position=r}}else{let n=i.nextSibling;if(n&&(n.is(`element`,`ul`)||n.is(`element`,`ol`))){let r=null;for(let t of n.getChildren()){let n=a.toModelElement(t);if(n&&n.getAttribute(`listIndent`)>e.getAttribute(`listIndent`))r=t;else break}r&&(o.breakContainer(o.createPositionAfter(r)),o.move(o.createRangeOn(r.parent),o.createPositionAt(t,`end`)))}}UB(o,i,i.nextSibling),UB(o,i.previousSibling,i)}function UB(e,t,n){return!t||!n||t.name!=`ul`&&t.name!=`ol`||t.name!=n.name||t.getAttribute(`class`)!==n.getAttribute(`class`)?null:e.mergeContainers(e.createPositionAfter(t))}function WB(e){return e.getLastMatchingPosition(e=>e.item.is(`uiElement`))}function GB(e,t){let n=!!t.sameIndent,r=!!t.smallerIndent,i=t.listIndent,a=e;for(;a&&a.name==`listItem`;){let e=a.getAttribute(`listIndent`);if(n&&i==e||r&&i>e)return a;a=t.direction===`forward`?a.nextSibling:a.previousSibling}return null}function KB(e){for(let t of e.getChildren())if(t.name==`ul`||t.name==`ol`)return t;return null}function qB(e,t){let n=[],r=e.parent,i={ignoreElementEnd:!1,startPosition:e,shallow:!0,direction:t},a=r.getAttribute(`listIndent`),o=[...new Xc(i)].filter(e=>e.item.is(`element`)).map(e=>e.item);for(let e of o){if(!e.is(`element`,`listItem`)||e.getAttribute(`listIndent`)a)){if(e.getAttribute(`listType`)!==r.getAttribute(`listType`)||e.getAttribute(`listStyle`)!==r.getAttribute(`listStyle`)||e.getAttribute(`listReversed`)!==r.getAttribute(`listReversed`)||e.getAttribute(`listStart`)!==r.getAttribute(`listStart`))break;t===`backward`?n.unshift(e):n.push(e)}}return n}function JB(e){let t=[...e.document.selection.getSelectedBlocks()].filter(e=>e.is(`element`,`listItem`)).map(t=>{let n=e.change(e=>e.createPositionAt(t,0));return[...qB(n,`backward`),...qB(n,`forward`)]}).flat();return t=[...new Set(t)],t}const YB=[`disc`,`circle`,`square`],XB=[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`];function ZB(e){return YB.includes(e)?`bulleted`:XB.includes(e)?`numbered`:null}function QB(){let e=!this.isEmpty&&(this.getChild(0).name==`ul`||this.getChild(0).name==`ol`);return this.isEmpty||e?0:$o.call(this)}var $B=class extends F{static get pluginName(){return`LegacyListUtils`}static get isOfficialPlugin(){return!0}getListTypeFromListStyleType(e){return ZB(e)}getSelectedListItems(e){return JB(e)}getSiblingNodes(e,t){return qB(e,t)}};function eV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`))return;i.consume(n.item,`insert`),i.consume(n.item,`attribute:listType`),i.consume(n.item,`attribute:listIndent`);let a=n.item;HB(a,VB(a,r),r,e)}}function tV(e){return(t,n,r)=>{let i=r.mapper.toViewPosition(n.position).getLastMatchingPosition(e=>!e.item.is(`element`,`li`)).nodeAfter,a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o),l=a.remove(c);s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(r.mapper.toModelElement(i).getAttribute(`listIndent`)+1,n.position,c.start,i,r,e);for(let e of a.createRangeIn(l).getItems())r.mapper.unbindViewElement(e);t.stop()}}const nV=(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let r=n.mapper.toViewElement(t.item),i=n.writer;i.breakContainer(i.createPositionBefore(r)),i.breakContainer(i.createPositionAfter(r));let a=r.parent,o=t.attributeNewValue==`numbered`?`ol`:`ul`;i.rename(o,a)},rV=(e,t,n)=>{n.consumable.consume(t.item,e.name);let r=n.mapper.toViewElement(t.item).parent,i=n.writer;UB(i,r,r.nextSibling),UB(i,r.previousSibling,r)};function iV(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,`attribute:listIndent`))return;let i=r.mapper.toViewElement(n.item),a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o);a.remove(c),s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(n.attributeOldValue+1,n.range.start,c.start,i,r,e),HB(n.item,i,r,e);for(let e of n.item.getChildren())r.consumable.consume(e,`insert`)}}const aV=(e,t,n)=>{if(n.consumable.test(t.item,e.name)&&t.item.name!=`listItem`){let e=n.mapper.toViewPosition(t.range.start),r=n.writer,i=[];for(;(e.parent.name==`ul`||e.parent.name==`ol`)&&(e=r.breakContainer(e),e.parent.name==`li`);){let t=e,n=r.createPositionAt(e.parent,`end`);if(!t.isEqual(n)){let e=r.remove(r.createRange(t,n));i.push(e)}e=r.createPositionAfter(e.parent)}if(i.length>0){for(let t=0;t0){let t=UB(r,n,n.nextSibling);t&&t.parent==n&&e.offset--}}UB(r,e.nodeBefore,e.nodeAfter)}}},oV=(e,t,n)=>{let r=n.mapper.toViewPosition(t.position),i=r.nodeBefore,a=r.nodeAfter;UB(n.writer,i,a)},sV=(e,t,n)=>{if(n.consumable.consume(t.viewItem,{name:!0})){let e=n.writer,r=e.createElement(`listItem`),i=vV(t.viewItem);e.setAttribute(`listIndent`,i,r);let a=t.viewItem.parent&&t.viewItem.parent.name==`ol`?`numbered`:`bulleted`;if(e.setAttribute(`listType`,a,r),!n.safeInsert(r,t.modelCursor))return;let o=mV(r,t.viewItem.getChildren(),n);t.modelRange=e.createRange(t.modelCursor,o),n.updateConversionResult(r,t)}},cV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){let e=Array.from(t.viewItem.getChildren());for(let t of e)t.is(`element`,`li`)||_V(t)||t._remove()}},lV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){if(t.viewItem.childCount===0)return;let e=[...t.viewItem.getChildren()],n=!1;for(let t of e)n&&!_V(t)&&t._remove(),_V(t)&&(n=!0)}};function uV(e){return(t,n)=>{if(n.isPhantom)return;let r=n.modelPosition.nodeBefore;if(r&&r.is(`element`,`listItem`)){let t=n.mapper.toViewElement(r),i=t.getAncestors().find(_V),a=e.createPositionAt(t,0).getWalker();for(let e of a)if(e.type==`elementStart`&&e.item.is(`element`,`li`)){n.viewPosition=e.previousPosition;break}else if(e.type==`elementEnd`&&e.item==i){n.viewPosition=e.nextPosition;break}}}}function dV(e){return(t,n)=>{let r=n.viewPosition,i=r.parent,a=n.mapper;if(i.name==`ul`||i.name==`ol`){if(r.isAtEnd){let t=a.toModelElement(r.nodeBefore),i=a.getModelLength(r.nodeBefore);n.modelPosition=e.createPositionBefore(t).getShiftedBy(i)}else{let t=a.toModelElement(r.nodeAfter);n.modelPosition=e.createPositionBefore(t)}t.stop()}else if(i.name==`li`&&r.nodeBefore&&(r.nodeBefore.name==`ul`||r.nodeBefore.name==`ol`)){let o=a.toModelElement(i),s=1,c=r.nodeBefore;for(;c&&_V(c);)s+=a.getModelLength(c),c=c.previousSibling;n.modelPosition=e.createPositionBefore(o).getShiftedBy(s),t.stop()}}}function fV(e,t){let n=e.document.differ.getChanges(),r=new Map,i=!1;for(let r of n)if(r.type==`insert`&&r.name==`listItem`)a(r.position);else if(r.type==`insert`&&r.name!=`listItem`){if(r.name!=`$text`){let n=r.position.nodeAfter;n.hasAttribute(`listIndent`)&&(t.removeAttribute(`listIndent`,n),i=!0),n.hasAttribute(`listType`)&&(t.removeAttribute(`listType`,n),i=!0),n.hasAttribute(`listStyle`)&&(t.removeAttribute(`listStyle`,n),i=!0),n.hasAttribute(`listReversed`)&&(t.removeAttribute(`listReversed`,n),i=!0),n.hasAttribute(`listStart`)&&(t.removeAttribute(`listStart`,n),i=!0);for(let t of Array.from(e.createRangeIn(n)).filter(e=>e.item.is(`element`,`listItem`)))a(t.previousPosition)}a(r.position.getShiftedBy(r.length))}else r.type==`remove`&&r.name==`listItem`?a(r.position):(r.type==`attribute`&&r.attributeKey==`listIndent`||r.type==`attribute`&&r.attributeKey==`listType`)&&a(r.range.start);for(let e of r.values())o(e),s(e);return i;function a(e){let t=e.nodeBefore;if(!t||!t.is(`element`,`listItem`)){let t=e.nodeAfter;t&&t.is(`element`,`listItem`)&&r.set(t,t)}else{let e=t;if(r.has(e))return;for(let t=e.previousSibling;t&&t.is(`element`,`listItem`);t=e.previousSibling)if(e=t,r.has(e))return;r.set(t,e)}}function o(e){let n=0,r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(a>n){let o;r===null?(r=a-n,o=n):(r>a&&(r=a),o=a-r),t.setAttribute(`listIndent`,o,e),i=!0}else r=null,n=e.getAttribute(`listIndent`)+1;e=e.nextSibling}}function s(e){let n=[],r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(r&&r.getAttribute(`listIndent`)>a&&(n=n.slice(0,a+1)),a!=0)if(n[a]){let r=n[a];e.getAttribute(`listType`)!=r&&(t.setAttribute(`listType`,r,e),i=!0)}else n[a]=e.getAttribute(`listType`);r=e,e=e.nextSibling}}}const pV=function(e,[t,n]){let r=this,i=t.is(`documentFragment`)?t.getChild(0):t,a;if(a=n?r.createSelection(n):r.document.selection,i&&i.is(`element`,`listItem`)){let e=a.getFirstPosition(),t=null;if(e.parent.is(`element`,`listItem`)?t=e.parent:e.nodeBefore&&e.nodeBefore.is(`element`,`listItem`)&&(t=e.nodeBefore),t){let e=t.getAttribute(`listIndent`);if(e>0)for(;i&&i.is(`element`,`listItem`);)i._setAttribute(`listIndent`,i.getAttribute(`listIndent`)+e),i=i.nextSibling}}};function mV(e,t,n){let{writer:r,schema:i}=n,a=r.createPositionAfter(e);for(let o of t)if(o.name==`ul`||o.name==`ol`)a=n.convertItem(o,a).modelCursor;else{let t=n.convertItem(o,r.createPositionAt(e,`end`)),s=t.modelRange.start.nodeAfter;s&&s.is(`element`)&&!i.checkChild(e,s.name)&&(e=t.modelCursor.parent.is(`element`,`listItem`)?t.modelCursor.parent:hV(t.modelCursor),a=r.createPositionAfter(e))}return a}function hV(e){let t=new Xc({startPosition:e}),n;do n=t.next();while(!n.value.item.is(`element`,`listItem`));return n.value.item}function gV(e,t,n,r,i,a){let o=GB(t.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:e}),s=i.mapper,c=i.writer,l=o?o.getAttribute(`listIndent`):null,u;if(!o)u=n;else if(l==e){let e=s.toViewElement(o).parent;u=c.createPositionAfter(e)}else{let e=a.createPositionAt(o,`end`);u=s.toViewPosition(e)}u=WB(u);for(let e of[...r.getChildren()])_V(e)&&(u=c.move(c.createRangeOn(e),u).end,UB(c,e,e.nextSibling),UB(c,e.previousSibling,e))}function _V(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function vV(e){let t=0,n=e.parent;for(;n;){if(n.is(`element`,`li`))t++;else{let e=n.previousSibling;e&&e.is(`element`,`li`)&&t++}n=n.parent}return t}var yV=class extends F{static get pluginName(){return`LegacyListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,$B]}init(){let e=this.editor;e.model.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributes:[`listType`,`listIndent`]});let t=e.data,n=e.editing;e.model.document.registerPostFixer(t=>fV(e.model,t)),n.mapper.registerViewToModelLength(`li`,bV),t.mapper.registerViewToModelLength(`li`,bV),n.mapper.on(`modelToViewPosition`,uV(n.view)),n.mapper.on(`viewToModelPosition`,dV(e.model)),t.mapper.on(`modelToViewPosition`,uV(n.view)),e.conversion.for(`editingDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model)),t.on(`attribute:listType:listItem`,nV,{priority:`high`}),t.on(`attribute:listType:listItem`,rV,{priority:`low`}),t.on(`attribute:listIndent:listItem`,iV(e.model)),t.on(`remove:listItem`,tV(e.model)),t.on(`remove`,oV,{priority:`low`})}),e.conversion.for(`dataDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model))}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ul`,cV,{priority:`high`}),e.on(`element:ol`,cV,{priority:`high`}),e.on(`element:li`,lV,{priority:`high`}),e.on(`element:li`,sV)}),e.model.on(`insertContent`,pV,{priority:`high`}),e.commands.add(`numberedList`,new IB(e,`numbered`)),e.commands.add(`bulletedList`,new IB(e,`bulleted`)),e.commands.add(`indentList`,new zB(e,`forward`)),e.commands.add(`outdentList`,new zB(e,`backward`));let r=n.view.document;this.listenTo(r,`enter`,(e,t)=>{let n=this.editor.model.document,r=n.selection.getLastPosition().parent;n.selection.isCollapsed&&r.name==`listItem`&&r.isEmpty&&(this.editor.execute(`outdentList`),t.preventDefault(),e.stop())},{context:`li`}),this.listenTo(r,`delete`,(e,t)=>{if(t.direction!==`backward`)return;let n=this.editor.model.document.selection;if(!n.isCollapsed)return;let r=n.getFirstPosition();if(!r.isAtStart)return;let i=r.parent;i.name===`listItem`&&(i.previousSibling&&i.previousSibling.name===`listItem`||(this.editor.execute(`outdentList`),t.preventDefault(),e.stop()))},{context:`li`}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`)),n&&n.registerChildCommand(e.get(`outdentList`))}};function bV(e){let t=1;for(let n of e.getChildren())if(n.name==`ul`||n.name==`ol`)for(let e of n.getChildren())t+=bV(e);return t}var xV=class extends F{static get requires(){return[yV,Kz]}static get pluginName(){return`LegacyList`}static get isOfficialPlugin(){return!0}},SV=class extends I{defaultType;constructor(e,t){super(e),this.defaultType=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){this._tryToConvertItemsToList(e);let t=this.editor.model,n=JB(t);n.length&&t.change(t=>{for(let r of n)t.setAttribute(`listStyle`,e.type||this.defaultType,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=ZB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},CV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listReversed`,!!e.reversed,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listReversed`):null}},wV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listStart`,e>=0?e:1,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listStart`):null}};const TV=`default`;var EV=class extends F{static get requires(){return[yV]}static get pluginName(){return`LegacyListPropertiesEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`list`,{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){let e=this.editor,t=e.model,n=DV(e.config.get(`list.properties`));t.schema.extend(`listItem`,{allowAttributes:n.map(e=>e.attributeName)});for(let t of n)t.addCommand(e);this.listenTo(e.commands.get(`indentList`),`_executeCleanup`,AV(e,n)),this.listenTo(e.commands.get(`outdentList`),`_executeCleanup`,jV(e,n)),this.listenTo(e.commands.get(`bulletedList`),`_executeCleanup`,IV(e)),this.listenTo(e.commands.get(`numberedList`),`_executeCleanup`,IV(e)),t.document.registerPostFixer(MV(e,n)),e.conversion.for(`upcast`).add(OV(n)),e.conversion.for(`downcast`).add(kV(n)),this._mergeListAttributesWhileMergingLists(n)}afterInit(){let e=this.editor;e.commands.get(`todoList`)&&e.model.document.registerPostFixer(FV(e))}_mergeListAttributesWhileMergingLists(e){let t=this.editor.model,n;this.listenTo(t,`deleteContent`,(e,[t])=>{let r=t.getFirstPosition(),i=t.getLastPosition();if(r.parent===i.parent||!r.parent.is(`element`,`listItem`))return;let a=i.parent.nextSibling;if(!a||!a.is(`element`,`listItem`))return;let o=GB(r.parent,{sameIndent:!0,listIndent:a.getAttribute(`listIndent`)});o&&o.getAttribute(`listType`)===a.getAttribute(`listType`)&&(n=o)},{priority:`high`}),this.listenTo(t,`deleteContent`,()=>{n&&=(t.change(t=>{let r=GB(n.nextSibling,{sameIndent:!0,listIndent:n.getAttribute(`listIndent`),direction:`forward`});if(!r){n=null;return}let i=[r,...qB(t.createPositionAt(r,0),`forward`)];for(let r of i)for(let i of e)if(i.appliesToListItem(r)){let e=i.attributeName,a=n.getAttribute(e);t.setAttribute(e,a,r)}}),null)},{priority:`low`})}};function DV(e){let t=[];return e.styles&&t.push({attributeName:`listStyle`,defaultValue:TV,addCommand(e){e.commands.add(`listStyle`,new SV(e,TV))},appliesToListItem(){return!0},setAttributeOnDowncast(e,t,n){t&&t!==TV?e.setStyle(`list-style-type`,t,n):e.removeStyle(`list-style-type`,n)},getAttributeOnUpcast(e){return rB(e.getStyle(`list-style-type`))||TV}}),e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,addCommand(e){e.commands.add(`listReversed`,new CV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,addCommand(e){e.commands.add(`listStart`,new wV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}function OV(e){return t=>{t.on(`element:li`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem.parent,a=n.modelRange.start.nodeAfter||n.modelRange.end.nodeBefore;for(let t of e)if(t.appliesToListItem(a)){let e=t.getAttributeOnUpcast(i);r.writer.setAttribute(t.attributeName,e,a)}},{priority:`low`})}}function kV(e){return n=>{for(let r of e)n.on(`attribute:${r.attributeName}:listItem`,(e,n,i)=>{let a=i.writer,o=n.item,s=GB(o.previousSibling,{sameIndent:!0,listIndent:o.getAttribute(`listIndent`),direction:`backward`}),c=i.mapper.toViewElement(o);t(o,s)||a.breakContainer(a.createPositionBefore(c)),r.setAttributeOnDowncast(a,n.attributeNewValue,c.parent)},{priority:`low`})};function t(e,t){return t&&e.getAttribute(`listType`)===t.getAttribute(`listType`)&&e.getAttribute(`listIndent`)===t.getAttribute(`listIndent`)&&e.getAttribute(`listStyle`)===t.getAttribute(`listStyle`)&&e.getAttribute(`listReversed`)===t.getAttribute(`listReversed`)&&e.getAttribute(`listStart`)===t.getAttribute(`listStart`)}}function AV(e,t){return(n,r)=>{let i=r[0],a=i.getAttribute(`listIndent`),o=r.filter(e=>e.getAttribute(`listIndent`)===a),s=null;i.previousSibling.getAttribute(`listIndent`)+1!==a&&(s=GB(i.previousSibling,{sameIndent:!0,direction:`backward`,listIndent:a})),e.model.change(e=>{for(let n of o)for(let r of t)if(r.appliesToListItem(n)){let t=s==null?r.defaultValue:s.getAttribute(r.attributeName);e.setAttribute(r.attributeName,t,n)}})}}function jV(e,t){return(n,r)=>{if(r=r.reverse().filter(e=>e.is(`element`,`listItem`)),!r.length)return;let i=r[0].getAttribute(`listIndent`),a=r[0].getAttribute(`listType`),o=r[0].previousSibling;if(o.is(`element`,`listItem`))for(;o.getAttribute(`listIndent`)!==i;)o=o.previousSibling;else o=null;o||=r[r.length-1].nextSibling,!(!o||!o.is(`element`,`listItem`))&&o.getAttribute(`listType`)===a&&e.model.change(e=>{let n=r.filter(e=>e.getAttribute(`listIndent`)===i);for(let r of n)for(let n of t)if(n.appliesToListItem(r)){let t=n.attributeName,i=o.getAttribute(t);e.setAttribute(t,i,r)}})}}function MV(e,t){return n=>{let r=!1,i=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)!==`todo`);if(!i.length)return r;let a=i[i.length-1].nextSibling;if((!a||!a.is(`element`,`listItem`))&&(a=i[0].previousSibling,a)){let e=i[0].getAttribute(`listIndent`);for(;a.is(`element`,`listItem`)&&a.getAttribute(`listIndent`)!==e&&(a=a.previousSibling,a););}for(let e of t){let t=e.attributeName;for(let o of i){if(!e.appliesToListItem(o)){n.removeAttribute(t,o);continue}if(!o.hasAttribute(t))NV(a,o,e)?n.setAttribute(t,a.getAttribute(t),o):n.setAttribute(t,e.defaultValue,o),r=!0;else{let i=o.previousSibling;PV(i,o,e.attributeName)&&(n.setAttribute(t,i.getAttribute(t),o),r=!0)}}}return r}}function NV(e,t,n){if(!e)return!1;let r=e.getAttribute(n.attributeName);return!(!r||r==n.defaultValue||e.getAttribute(`listType`)!==t.getAttribute(`listType`))}function PV(e,t,n){if(!e||!e.is(`element`,`listItem`)||t.getAttribute(`listType`)!==e.getAttribute(`listType`))return!1;let r=e.getAttribute(`listIndent`);if(r<1||r!==t.getAttribute(`listIndent`))return!1;let i=e.getAttribute(n);return!(!i||i===t.getAttribute(n))}function FV(e){return t=>{let n=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)===`todo`&&(e.hasAttribute(`listStyle`)||e.hasAttribute(`listReversed`)||e.hasAttribute(`listStart`)));if(!n.length)return!1;for(let e of n)t.removeAttribute(`listStyle`,e),t.removeAttribute(`listReversed`,e),t.removeAttribute(`listStart`,e);return!0}}function IV(e){return(t,n)=>{n=n.filter(e=>e.is(`element`,`listItem`)),e.model.change(e=>{for(let t of n)e.removeAttribute(`listStyle`,t)})}}function LV(e){let t=[];for(let n of e){let e=RV(n);e&&e.is(`element`,`listItem`)&&t.push(e)}return t}function RV(e){return e.type===`attribute`?e.range.start.nodeAfter:e.type===`insert`?e.position.nodeAfter:null}var zV=class extends F{static get requires(){return[EV,mB]}static get pluginName(){return`LegacyListProperties`}static get isOfficialPlugin(){return!0}};const BV=`todoListChecked`;var VV=class extends I{_selectedElements;constructor(e){super(e),this._selectedElements=[],this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every(e=>!!e.getAttribute(BV)),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,BV)&&i.push(r);for(let e of n.getItems())t.checkAttribute(e,BV)&&!i.includes(e)&&i.push(e);return i}execute(e={}){this.editor.model.change(t=>{for(let n of this._selectedElements)(e.forceValue===void 0?!this.value:e.forceValue)?t.setAttribute(BV,!0,n):t.removeAttribute(BV,n)})}};function HV(e,t){return(n,r,i)=>{let a=i.consumable;if(!a.test(r.item,`insert`)||!a.test(r.item,`attribute:listType`)||!a.test(r.item,`attribute:listIndent`)||r.item.getAttribute(`listType`)!=`todo`)return;let o=r.item;a.consume(o,`insert`),a.consume(o,`attribute:listType`),a.consume(o,`attribute:listIndent`),a.consume(o,`attribute:todoListChecked`);let s=i.writer,c=VB(o,i),l=JV(o,s,!!o.getAttribute(`todoListChecked`),t),u=s.createContainerElement(`span`,{class:`todo-list__label__description`});s.addClass(`todo-list`,c.parent),s.insert(s.createPositionAt(c,0),l),s.insert(s.createPositionAfter(l),u),HB(o,c,i,e)}}function UV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`)||n.item.getAttribute(`listType`)!=`todo`)return;let a=n.item;i.consume(a,`insert`),i.consume(a,`attribute:listType`),i.consume(a,`attribute:listIndent`),i.consume(a,`attribute:todoListChecked`);let o=r.writer,s=VB(a,r);o.addClass(`todo-list`,s.parent);let c=o.createContainerElement(`label`,{class:`todo-list__label`}),l=o.createEmptyElement(`input`,{type:`checkbox`,disabled:`disabled`}),u=o.createContainerElement(`span`,{class:`todo-list__label__description`});a.getAttribute(`todoListChecked`)&&o.setAttribute(`checked`,`checked`,l),o.insert(o.createPositionAt(s,0),c),o.insert(o.createPositionAt(c,0),l),o.insert(o.createPositionAfter(l),u),HB(a,s,r,e)}}const WV=(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(a.getAttribute(`type`)!=`checkbox`||i.name!=`listItem`||!r.isAtStart||!n.consumable.consume(a,{name:!0}))return;let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)};function GV(e,t){return(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=i.mapper.toViewElement(r.item),o=i.writer,s=YV(a,t);if(r.attributeNewValue==`todo`){let t=!!r.item.getAttribute(`todoListChecked`),n=JV(r.item,o,t,e),i=o.createContainerElement(`span`,{class:`todo-list__label__description`}),s=o.createRangeIn(a),c=KB(a),l=WB(s.start),u=c?o.createPositionBefore(c):s.end,d=o.createRange(l,u);o.addClass(`todo-list`,a.parent),o.move(d,o.createPositionAt(i,0)),o.insert(o.createPositionAt(a,0),n),o.insert(o.createPositionAfter(n),i)}else if(r.attributeOldValue==`todo`){let e=XV(a,t);o.removeClass(`todo-list`,a.parent),o.remove(s),o.move(o.createRangeIn(e),o.createPositionBefore(e)),o.remove(e)}}}function KV(e){return(t,n,r)=>{if(n.item.getAttribute(`listType`)!=`todo`||!r.consumable.consume(n.item,`attribute:todoListChecked`))return;let{mapper:i,writer:a}=r,o=!!n.item.getAttribute(`todoListChecked`),s=i.toViewElement(n.item).getChild(0),c=JV(n.item,a,o,e);a.insert(a.createPositionAfter(s),c),a.remove(s)}}function qV(e){return(t,n)=>{let r=n.modelPosition,i=r.parent;if(!i.is(`element`,`listItem`)||i.getAttribute(`listType`)!=`todo`)return;let a=XV(n.mapper.toViewElement(i),e);a&&(n.viewPosition=n.mapper.findPositionIn(a,r.offset))}}function JV(e,t,n,r){return t.createUIElement(`label`,{class:`todo-list__label`,contenteditable:!1},function(t){let i=mr(document,`input`,{type:`checkbox`,tabindex:`-1`});n&&i.setAttribute(`checked`,`checked`),i.addEventListener(`change`,()=>r(e));let a=this.toDomElement(t);return a.appendChild(i),a})}function YV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`uiElement`,`label`))return e.item}function XV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`containerElement`,`span`)&&e.item.hasClass(`todo-list__label__description`))return e.item}const ZV=yi(`Ctrl+Enter`);var QV=class extends F{static get pluginName(){return`LegacyTodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[yV]}init(){let e=this.editor,{editing:t,data:n,model:r}=e;r.schema.extend(`listItem`,{allowAttributes:[`todoListChecked`]}),r.schema.addAttributeCheck((e,t)=>{let n=e.last;if(t==`todoListChecked`&&n.name==`listItem`&&n.getAttribute(`listType`)!=`todo`)return!1}),e.commands.add(`todoList`,new IB(e,`todo`));let i=new VV(e);e.commands.add(`checkTodoList`,i),e.commands.add(`todoListCheck`,i),n.downcastDispatcher.on(`insert:listItem`,UV(r),{priority:`high`}),n.upcastDispatcher.on(`element:input`,WV,{priority:`high`}),t.downcastDispatcher.on(`insert:listItem`,HV(r,e=>this._handleCheckmarkChange(e)),{priority:`high`}),t.downcastDispatcher.on(`attribute:listType:listItem`,GV(e=>this._handleCheckmarkChange(e),t.view)),t.downcastDispatcher.on(`attribute:todoListChecked:listItem`,KV(e=>this._handleCheckmarkChange(e))),t.mapper.on(`modelToViewPosition`,qV(t.view)),n.mapper.on(`modelToViewPosition`,qV(t.view)),this.listenTo(t.view.document,`arrowKey`,$V(r,e.locale),{context:`li`}),this.listenTo(t.view.document,`keydown`,(t,n)=>{vi(n)===ZV&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`});let a=new Set;this.listenTo(r,`applyOperation`,(e,t)=>{let n=t[0];if(n.type==`rename`&&n.oldName==`listItem`){let e=n.position.nodeAfter;e.hasAttribute(`todoListChecked`)&&a.add(e)}else if(n.type==`changeAttribute`&&n.key==`listType`&&n.oldValue===`todo`)for(let e of n.range.getItems())e.hasAttribute(`todoListChecked`)&&e.getAttribute(`listType`)!==`todo`&&a.add(e)}),r.document.registerPostFixer(e=>{let t=!1;for(let n of a)e.removeAttribute(`todoListChecked`,n),t=!0;return a.clear(),t}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=eH(r),o=eH(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function $V(e,t){return(n,r)=>{if(Si(r.keyCode,t.contentLanguageDirection)!=`left`)return;let i=e.schema,a=e.document.selection;if(!a.isCollapsed)return;let o=a.getFirstPosition(),s=o.parent;if(s.name===`listItem`&&s.getAttribute(`listType`)==`todo`&&o.isAtStart){let t=i.getNearestSelectionRange(e.createPositionBefore(s),`backward`);t&&e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function eH(e){return!!e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)===`todo`}var tH=class extends F{static get requires(){return[QV,PB]}static get pluginName(){return`LegacyTodoList`}static get isOfficialPlugin(){return!0}},nH=class extends F{static get pluginName(){return`AdjacentListsSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`listSeparator`,{allowWhere:`$block`,isBlock:!0}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ol`,rH()),e.on(`element:ul`,rH())}).elementToElement({model:`listSeparator`,view:`ck-list-separator`}),e.conversion.for(`editingDowncast`).elementToElement({model:`listSeparator`,view:{name:`div`,classes:[`ck-list-separator`,`ck-hidden`]}}),e.conversion.for(`dataDowncast`).elementToElement({model:`listSeparator`,view:(e,t)=>{let n=t.writer.createContainerElement(`ck-list-separator`);return t.writer.setCustomProperty(`dataPipeline:transparentRendering`,!0,n),n.getFillerOffset=()=>null,n}})}};function rH(){return(e,t,n)=>{let r=t.viewItem,i=r.nextSibling;if(!i||r.name!==i.name)return;t.modelRange||Object.assign(t,n.convertChildren(t.viewItem,t.modelCursor));let a=n.writer,o=a.createElement(`listSeparator`);if(!n.safeInsert(o,t.modelCursor))return;let s=n.getSplitParts(o);t.modelRange=a.createRange(t.modelRange.start,a.createPositionAfter(s[s.length-1])),n.updateConversionResult(o,t)}}var iH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this._getFirstListItemIfSelectionIsAtListStart(this.editor.model.document.selection);this.isEnabled=!!e&&this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentList`))}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=t.plugins.get(`ListUtils`);n.change(t=>{let a=this._getFirstListItemIfSelectionIsAtListStart(r),o=[];if(e.firstListOnly)o.push(a);else{let e=Array.from(r.getSelectedBlocks());for(let t of e)G(t)&&t.getAttribute(`listIndent`)===0&&n.schema.checkAttribute(t,`blockIndentList`)&&o.push(t)}let s=i.expandListBlocksToCompleteList(o);for(let e of s){let n=e.getAttribute(`blockIndentList`),r=this._indentBehavior.getNextIndent(n);r?t.setAttribute(`blockIndentList`,r,e):t.removeAttribute(`blockIndentList`,e)}})}_getFirstListItemIfSelectionIsAtListStart(e){let t=e.getFirstPosition(),n=this.editor.plugins.get(`ListUtils`),r=t.parent,i=this.editor.model.schema;return t.isAtStart&&G(r)&&r.getAttribute(`listIndent`)==0&&i.checkAttribute(r,`blockIndentList`)&&n.isFirstListItemInList(r)?r:null}},aH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){this.isEnabled=this._getAffectedListItems().length>0}execute(){this.editor.model.change(e=>{for(let t of this._getAffectedListItems())e.removeAttribute(`blockIndentListItem`,t)})}_getAffectedListItems(){let e=this.editor.model.document.selection,t=this.editor.plugins.get(`ListUtils`),n=Array.from(e.getSelectedBlocks());return t.expandListBlocksToCompleteItems(n).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){return e.hasAttribute(`blockIndentListItem`)?this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentListItem`)):!1}},oH=class extends CR{checkEnabled(e){let t=parseFloat(e);return this.isForward&&t<0||!this.isForward&&t>0}},sH=class extends wR{checkEnabled(e){return!this.isForward&&!!e}},cH=class extends F{static get pluginName(){return`IndentBlockListIntegration`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!this.editor.plugins.has(`ListEditing`))return;let t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes,`ol`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`ul`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockList`,new iH(e,new wR({direction:`backward`,classes:t.classes}))),e.commands.add(`indentBlockListItem`,new aH(e,new sH({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockListItem`,new aH(e,new sH({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(`ol`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`ul`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockList`,new iH(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))),e.commands.add(`indentBlockListItem`,new aH(e,new oH({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockListItem`,new aH(e,new oH({direction:`backward`,offset:t.offset,unit:t.unit})))),e.plugins.get(`ListEditing`).on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)i&&i.getAttribute(`listType`)==r.getAttribute(`listType`)&&(uH(`blockIndentList`,r,i,n)&&(e.return=!0),i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)&&uH(`blockIndentListItem`,r,i,n)&&(e.return=!0))}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentBlockList`:`indentBlockList`;this.editor.commands.get(r).isEnabled&&(e.execute(r,{firstListOnly:!0}),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`,priority:`high`})}afterInit(){let e=this.editor,t=e.model,n=t.schema;if(!e.plugins.has(`ListEditing`))return;n.extend(`$listItem`,{allowAttributes:[`blockIndentList`,`blockIndentListItem`]}),n.setAttributeProperties(`blockIndentList`,{isFormatting:!0}),n.setAttributeProperties(`blockIndentListItem`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentList`),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentListItem`);let r=(t,n)=>{e.model.change(e=>{for(let t of n)t.hasAttribute(`listItemId`)&&(t.hasAttribute(`blockIndentList`)&&e.removeAttribute(`blockIndentList`,t),t.hasAttribute(`blockIndentListItem`)&&e.removeAttribute(`blockIndentListItem`,t))})},i=e.commands.get(`indentList`),a=e.commands.get(`outdentList`);i&&this.listenTo(i,`afterExecute`,r),a&&this.listenTo(a,`afterExecute`,r);let o=e.commands.get(`indent`),s=e.commands.get(`outdent`);o.registerChildCommand(e.commands.get(`indentBlockList`),{priority:`highest`}),s.registerChildCommand(e.commands.get(`outdentBlockList`)),o.registerChildCommand(e.commands.get(`indentBlockListItem`)),s.registerChildCommand(e.commands.get(`outdentBlockListItem`))}_setupConversionUsingOffset(e,t,n){let r=this.editor,i=r.locale,a=r.conversion,o=i.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`,s=r.plugins.get(`ListEditing`);a.for(`upcast`).add(n=>{n.on(`element:${e}`,lH(t,e=>e.getStyle(o),(e,t)=>e.consume(t,{styles:o})),{priority:`low`})}),s.registerDowncastStrategy({scope:n,attributeName:t,setAttributeOnDowncast(e,t,n){t&&e.setStyle(o,t,n)}})}_setupConversionUsingClasses(e,t,n,r){let i=this.editor,a=i.conversion,o=i.plugins.get(`ListEditing`);a.for(`upcast`).add(r=>{r.on(`element:${t}`,lH(n,t=>e.find(e=>t.hasClass(e)),(e,t,n)=>e.consume(t,{classes:n})),{priority:`low`})}),o.registerDowncastStrategy({scope:r,attributeName:n,setAttributeOnDowncast(e,t,n){t&&e.addClass(t,n)}})}};function lH(e,t,n){return(r,i,a)=>{let{writer:o,consumable:s}=a;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let c=t(i.viewItem);if(c===void 0)return;let l=!1,u;for(let t of i.modelRange.getItems({shallow:!0}))u===void 0&&(u=t.getAttribute(`listIndent`)),!t.hasAttribute(e)&&t.getAttribute(`listIndent`)===u&&(o.setAttribute(e,c,t),l=!0);l&&n(s,i.viewItem,c)}}function uH(e,t,n,r){let i=n.getAttribute(e);return t.getAttribute(e)===i?!1:(i?r.setAttribute(e,i,t):r.removeAttribute(e,t),!0)}const dH=[`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`];var fH=class extends F{constructor(e){super(e),e.config.define(`indentBlock`,{offset:40,unit:`px`})}static get pluginName(){return`IndentBlock`}static get isOfficialPlugin(){return!0}static get requires(){return[cH]}init(){let e=this.editor,t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes),e.commands.add(`indentBlock`,new SR(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlock`,new SR(e,new wR({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(),e.commands.add(`indentBlock`,new SR(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlock`,new SR(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))))}afterInit(){let e=this.editor,t=e.model.schema,n=e.commands.get(`indent`),r=e.commands.get(`outdent`),i=e.config.get(`heading.options`);(i&&i.map(e=>e.model)||dH).forEach(e=>{t.isRegistered(e)&&t.extend(e,{allowAttributes:`blockIndent`})}),t.setAttributeProperties(`blockIndent`,{isFormatting:!0}),n.registerChildCommand(e.commands.get(`indentBlock`)),r.registerChildCommand(e.commands.get(`outdentBlock`))}_setupConversionUsingOffset(){let e=this.editor.conversion,t=this.editor.locale.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`;e.for(`upcast`).attributeToAttribute({view:{styles:{[t]:/[\s\S]+/}},model:{key:`blockIndent`,value:e=>{if(!e.is(`element`,`li`))return e.getStyle(t)}}}),e.for(`downcast`).attributeToAttribute({model:`blockIndent`,view:e=>({key:`style`,value:{[t]:e}})})}_setupConversionUsingClasses(e){let t={model:{key:`blockIndent`,values:[]},view:{}};for(let n of e)t.model.values.push(n),t.view[n]={key:`class`,value:[n]};this.editor.conversion.attributeToAttribute(t)}};function pH(e,t){return t||=Ti(e),`${e}:${t}`}function mH(e){let[t,n]=e.split(`:`);return{languageCode:t,textDirection:n}}var hH=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`language`)}execute({languageCode:e,textDirection:t}={}){let n=this.editor.model,r=n.document.selection,i=e?pH(e,t):!1;n.change(e=>{if(r.isCollapsed)i?e.setSelectionAttribute(`language`,i):e.removeSelectionAttribute(`language`);else{let t=n.schema.getValidRanges(r.getRanges(),`language`,{includeEmptyRanges:!0});for(let n of t){let t=n,r=`language`;n.isCollapsed&&(t=n.start.parent,r=Tl._getStoreAttributeKey(`language`)),i?e.setAttribute(r,i,t):e.removeAttribute(r,t)}}})}_getValueFromFirstAllowedNode(){let e=this.editor.model,t=e.schema,n=e.document.selection;if(n.isCollapsed)return n.getAttribute(`language`)||!1;for(let e of n.getRanges())for(let n of e.getItems())if(t.checkAttribute(n,`language`))return n.getAttribute(`language`)||!1;return!1}},gH=class extends F{static get pluginName(){return`TextPartLanguageEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`language`,{textPartLanguage:[{title:`Arabic`,languageCode:`ar`},{title:`French`,languageCode:`fr`},{title:`Spanish`,languageCode:`es`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`language`}),e.model.schema.setAttributeProperties(`language`,{copyOnEnter:!0}),this._defineConverters(),e.commands.add(`textPartLanguage`,new hH(e))}_defineConverters(){let e=this.editor.conversion;e.for(`upcast`).elementToAttribute({model:{key:`language`,value:e=>pH(e.getAttribute(`lang`),e.getAttribute(`dir`))},view:{name:`span`,attributes:{lang:/[\s\S]+/}}}),e.for(`downcast`).attributeToElement({model:`language`,view:(e,{writer:t},n)=>{if(!e||!n.item.is(`$textProxy`)&&!n.item.is(`documentSelection`))return;let{languageCode:r,textDirection:i}=mH(e);return t.createAttributeElement(`span`,{lang:r,dir:i})}})}},_H=class extends F{static get pluginName(){return`TextPartLanguageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=t(`Choose language`),r=t(`Language`);e.ui.componentFactory.add(`textPartLanguage`,t=>{let{definitions:i,titles:a}=this._getItemMetadata(),o=e.commands.get(`textPartLanguage`),s=Nx(t);return Lx(s,i,{ariaLabel:r,role:`menu`}),s.buttonView.set({ariaLabel:r,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:r}),s.extendTemplate({attributes:{class:[`ck-text-fragment-language-dropdown`]}}),s.bind(`isEnabled`).to(o,`isEnabled`),s.buttonView.bind(`label`).to(o,`value`,e=>e&&a[e]||n),s.buttonView.bind(`ariaLabel`).to(o,`value`,e=>{let t=e&&a[e];return t?`${t}, ${r}`:r}),this.listenTo(s,`execute`,t=>{o.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),s}),e.ui.componentFactory.add(`menuBar:textPartLanguage`,n=>{let{definitions:i}=this._getItemMetadata(),a=e.commands.get(`textPartLanguage`),o=new uw(n);o.buttonView.set({label:r});let s=new dw(n);s.set({ariaLabel:t(`Language`),role:`menu`});for(let e of i){if(e.type!=`button`){s.items.add(new fx(n));continue}let t=new rC(n,o),r=new U(n);r.set({role:`menuitemradio`,isToggleable:!0}),r.bind(...Object.keys(e.model)).to(e.model),r.delegate(`execute`).to(o),t.children.add(r),s.items.add(t)}return o.bind(`isEnabled`).to(a,`isEnabled`),o.panelView.children.add(s),o.on(`execute`,t=>{a.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),o})}_getItemMetadata(){let e=this.editor,t=new Fi,n={},r=e.commands.get(`textPartLanguage`),i=e.config.get(`language.textPartLanguage`),a=e.locale.t,o=a(`Remove language`);t.add({type:`button`,model:new RC({label:o,languageCode:!1,withText:!0})}),t.add({type:`separator`});for(let e of i){let i={type:`button`,model:new RC({label:e.title,languageCode:e.languageCode,role:`menuitemradio`,textDirection:e.textDirection,withText:!0})},a=pH(e.languageCode,e.textDirection);i.model.bind(`isOn`).to(r,`value`,e=>e===a),t.add(i),n[a]=e.title}return{definitions:t,titles:n}}},vH=class extends F{static get requires(){return[gH,_H]}static get pluginName(){return`TextPartLanguage`}static get isOfficialPlugin(){return!0}};function yH(e){if(e)throw e}var bH=o(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});ft.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}function wH(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?EH(e.position):`start`in e||`end`in e?EH(e):`line`in e||`column`in e?TH(e):``}function TH(e){return DH(e&&e.line)+`:`+DH(e&&e.column)}function EH(e){return TH(e&&e.start)+`-`+TH(e&&e.end)}function DH(e){return e&&typeof e==`number`?e:1}var OH=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=wH(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};OH.prototype.file=``,OH.prototype.name=``,OH.prototype.reason=``,OH.prototype.message=``,OH.prototype.stack=``,OH.prototype.column=void 0,OH.prototype.line=void 0,OH.prototype.ancestors=void 0,OH.prototype.cause=void 0,OH.prototype.fatal=void 0,OH.prototype.place=void 0,OH.prototype.ruleId=void 0,OH.prototype.source=void 0;const kH={basename:AH,dirname:jH,extname:MH,join:NH,sep:`/`};function AH(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`"ext" argument must be a string`);IH(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function jH(e){if(IH(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function MH(e){IH(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function NH(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function FH(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function IH(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}const LH={cwd:RH};function RH(){return`/`}function zH(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function BH(e){if(typeof e==`string`)e=new URL(e);else if(!zH(e)){let t=TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return VH(e)}function VH(e){if(e.hostname!==``){let e=TypeError(`File URL host must be "localhost" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n0){let[r,...a]=t,o=n[i][1];xH(o)&&xH(r)&&(r=(0,YH.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function QH(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `parser`")}function $H(e,t){if(typeof t!=`function`)throw TypeError("Cannot `"+e+"` without `compiler`")}function eU(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function tU(e){if(!xH(e)||typeof e.type!=`string`)throw TypeError("Expected node, got `"+e+"`")}function nU(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function rU(e){return iU(e)?e:new UH(e)}function iU(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function aU(e){return typeof e==`string`||oU(e)}function oU(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}function sU(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}const cU=vU(/[A-Za-z]/),lU=vU(/[\dA-Za-z]/),uU=vU(/[#-'*+\--9=?A-Z^-~]/);function dU(e){return e!==null&&(e<32||e===127)}const fU=vU(/\d/),pU=vU(/[\dA-Fa-f]/),mU=vU(/[!-/:-@[-`{-~]/);function K(e){return e!==null&&e<-2}function hU(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}const gU=vU(/\p{P}|\p{S}/u),_U=vU(/\s/);function vU(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function yU(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\{}()[\]^$+*?.]/g,`\\$&`).replace(/-/g,`\\x2d`)}const bU=(function(e){if(e==null)return TU;if(typeof e==`function`)return wU(e);if(typeof e==`object`)return Array.isArray(e)?xU(e):SU(e);if(typeof e==`string`)return CU(e);throw Error(`Expected function, string, or object as test`)});function xU(e){let t=[],n=-1;for(;++n`:``))+`)`})}return u;function u(){let l=OU,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=AU(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d0?{type:`text`,value:a}:void 0),a===!1?r.lastIndex=n+1:(s!==n&&u.push({type:`text`,value:e.value.slice(s,n)}),Array.isArray(a)?u.push(...a):a&&u.push(a),s=n+d[0].length,l=!0),!r.global)break;d=r.exec(e.value)}return l?(s?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(`)`),i=sU(e,`(`),a=sU(e,`)`);for(;r!==-1&&i>a;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(`)`),a++;return[e,n]}function XU(e,t){let n=e.input.charCodeAt(e.index-1);return(e.index===0||_U(n)||gU(n))&&(!t||n!==47)}function ZU(e){return e.replace(/[\t\n\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}sW.peek=oW;function QU(){this.buffer()}function $U(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function eW(){this.buffer()}function tW(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function nW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function rW(e){this.exit(e)}function iW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function aW(e){this.exit(e)}function oW(){return`[`}function sW(e,t,n,r){let i=n.createTracker(r),a=i.move(`[^`),o=n.enter(`footnoteReference`),s=n.enter(`reference`);return a+=i.move(n.safe(n.associationId(e),{after:`]`,before:a})),s(),o(),a+=i.move(`]`),a}function cW(){return{enter:{gfmFootnoteCallString:QU,gfmFootnoteCall:$U,gfmFootnoteDefinitionLabelString:eW,gfmFootnoteDefinition:tW},exit:{gfmFootnoteCallString:nW,gfmFootnoteCall:rW,gfmFootnoteDefinitionLabelString:iW,gfmFootnoteDefinition:aW}}}function lW(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:sW},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function n(e,n,r,i){let a=r.createTracker(i),o=a.move(`[^`),s=r.enter(`footnoteDefinition`),c=r.enter(`label`);return o+=a.move(r.safe(r.associationId(e),{before:o,after:`]`})),c(),o+=a.move(`]:`),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((t?` -`:` `)+r.indentLines(r.containerFlow(e,a.current()),t?dW:uW))),s(),o}}function uW(e,t,n){return t===0?e:dW(e,t,n)}function dW(e,t,n){return(n?``:` `)+e}const fW=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];_W.peek=vW;function pW(){return{canContainEols:[`delete`],enter:{strikethrough:hW},exit:{strikethrough:gW}}}function mW(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:fW}],handlers:{delete:_W}}}function hW(e){this.enter({type:`delete`,children:[]},e)}function gW(e){this.exit(e)}function _W(e,t,n,r){let i=n.createTracker(r),a=n.enter(`strikethrough`),o=i.move(`~~`);return o+=n.containerPhrasing(e,{...i.current(),before:o,after:`~`}),o+=i.move(`~~`),a(),o}function vW(){return`~`}function yW(e){return e.length}function bW(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||yW,a=[],o=[],s=[],c=[],l=0,u=-1;for(;++ul&&(l=e[u].length);++ac[a])&&(c[a]=e)}t.push(o)}o[u]=t,s[u]=r}let d=-1;if(typeof r==`object`&&`length`in r)for(;++dc[d]&&(c[d]=i),p[d]=i),f[d]=o}o.splice(1,0,f),s.splice(1,0,p),u=-1;let m=[];for(;++u `),a.shift(2);let o=n.indentLines(n.containerFlow(e,a.current()),AW);return i(),o}function AW(e,t,n){return`>`+(n?``:` `)+e}function jW(e,t){return MW(e,t.inConstruct,!0)&&!MW(e,t.notInConstruct,!1)}function MW(e,t,n){if(typeof t==`string`&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ro&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}function FW(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function IW(e){let t=e.options.fence||"`";if(t!=="`"&&t!==`~`)throw Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}function LW(e,t,n,r){let i=IW(n),a=e.value||``,o=i==="`"?`GraveAccent`:`Tilde`;if(FW(e,n)){let e=n.enter(`codeIndented`),t=n.indentLines(a,RW);return e(),t}let s=n.createTracker(r),c=i.repeat(Math.max(PW(a,i)+1,3)),l=n.enter(`codeFenced`),u=s.move(c);if(e.lang){let t=n.enter(`codeFencedLang${o}`);u+=s.move(n.safe(e.lang,{before:u,after:` `,encode:["`"],...s.current()})),t()}if(e.lang&&e.meta){let t=n.enter(`codeFencedMeta${o}`);u+=s.move(` `),u+=s.move(n.safe(e.meta,{before:u,after:` -`,encode:["`"],...s.current()})),t()}return u+=s.move(` -`),a&&(u+=s.move(a+` -`)),u+=s.move(c),l(),u}function RW(e,t,n){return(n?``:` `)+e}function zW(e){let t=e.options.quote||`"`;if(t!==`"`&&t!==`'`)throw Error("Cannot serialize title with `"+t+"` for `options.quote`, expected `\"`, or `'`");return t}function BW(e,t,n,r){let i=zW(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.enter(`definition`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`[`);return l+=c.move(n.safe(n.associationId(e),{before:l,after:`]`,...c.current()})),l+=c.move(`]: `),s(),!e.url||/[\0- \u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:` -`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),o(),l}function VW(e){let t=e.options.emphasis||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize emphasis with `"+t+"` for `options.emphasis`, expected `*`, or `_`");return t}function HW(e){return`&#x`+e.toString(16).toUpperCase()+`;`}function UW(e){if(e===null||hU(e)||_U(e))return 1;if(gU(e))return 2}function WW(e,t,n){let r=UW(e),i=UW(t);return r===void 0?i===void 0?n===`_`?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}GW.peek=KW;function GW(e,t,n,r){let i=VW(n),a=n.enter(`emphasis`),o=n.createTracker(r),s=o.move(i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function KW(e,t,n){return n.options.emphasis||`*`}function qW(e,t,n,r){let i,a,o;typeof t==`function`&&typeof n!=`function`?(a=void 0,o=t,i=n):(a=t,o=n,i=r),kU(e,a,s,i);function s(e,t){let n=t[t.length-1],r=n?n.children.indexOf(e):void 0;return o(e,r,n)}}const JW={};function YW(e,t){let n=t||JW;return XW(e,typeof n.includeImageAlt==`boolean`?n.includeImageAlt:!0,typeof n.includeHtml==`boolean`?n.includeHtml:!0)}function XW(e,t,n){if(QW(e)){if(`value`in e)return e.type===`html`&&!n?``:e.value;if(t&&`alt`in e&&e.alt)return e.alt;if(`children`in e)return ZW(e.children,t,n)}return Array.isArray(e)?ZW(e,t,n):``}function ZW(e,t,n){let r=[],i=-1;for(;++i`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function iG(){return`!`}aG.peek=oG;function aG(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function oG(){return`!`}sG.peek=cG;function sG(e,t,n){let r=e.value||``,i="`",a=-1;for(;RegExp("(^|[^`])"+i+"([^`]|$)").test(r);)i+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a\u007F]/.test(e.url))}uG.peek=dG;function uG(e,t,n,r){let i=zW(n),a=i===`"`?`Quote`:`Apostrophe`,o=n.createTracker(r),s,c;if(lG(e,n)){let t=n.stack;n.stack=[],s=n.enter(`autolink`);let r=o.move(`<`);return r+=o.move(n.containerPhrasing(e,{before:r,after:`>`,...o.current()})),r+=o.move(`>`),s(),n.stack=t,r}s=n.enter(`link`),c=n.enter(`label`);let l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function dG(e,t,n){return lG(e,n)?`<`:`[`}fG.peek=pG;function fG(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function pG(){return`[`}function mG(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function hG(e){let t=mG(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}function gG(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}function _G(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}function vG(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?gG(n):mG(n),s=e.ordered?o===`.`?`)`:`.`:hG(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),_G(n)===o&&t){let t=-1;for(;++t-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function xG(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}const SG=bU([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function CG(e,t,n,r){return(e.children.some(function(e){return SG(e)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function wG(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}TG.peek=EG;function TG(e,t,n,r){let i=wG(n),a=n.enter(`strong`),o=n.createTracker(r),s=o.move(i+i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function EG(e,t,n){return n.options.strong||`*`}function DG(e,t,n,r){return n.safe(e.value,r)}function OG(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}function kG(e,t,n){let r=(_G(n)+(n.options.ruleSpaces?` `:``)).repeat(OG(n));return n.options.ruleSpaces?r.slice(0,-1):r}const AG={blockquote:kW,break:NW,code:LW,definition:BW,emphasis:GW,hardBreak:NW,heading:eG,html:tG,image:rG,imageReference:aG,inlineCode:sG,link:uG,linkReference:fG,list:vG,listItem:bG,paragraph:xG,root:CG,strong:TG,text:DG,thematicBreak:kG},jG=[MG];function MG(e,t,n,r){if(t.type===`code`&&FW(t,r)&&(e.type===`list`||e.type===t.type&&FW(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&$W(t,r))?void 0:+!!n.spread}const NG=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],PG=[{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` -`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\r\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\r -]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,before:`\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \r -*])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`+`,after:`(?:[ \r -])`},{atBreak:!0,character:`-`,after:`(?:[ \r --])`},{atBreak:!0,before:`\\d+`,character:`.`,after:`(?:[ \r -]|$)`},{atBreak:!0,character:`<`,after:`[!/?A-Za-z]`},{character:`<`,after:`[!/?A-Za-z]`,inConstruct:`phrasing`,notInConstruct:NG},{character:`<`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`=`},{atBreak:!0,character:`>`},{character:`>`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`[`},{character:`[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`[`,inConstruct:[`label`,`reference`]},{character:`\\`,after:`[\\r\\n]`,inConstruct:`phrasing`},{character:`]`,inConstruct:[`label`,`reference`]},{atBreak:!0,character:`_`},{character:`_`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:"`"},{character:"`",inConstruct:[`codeFencedLangGraveAccent`,`codeFencedMetaGraveAccent`]},{character:"`",inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`~`}],FG=document.createElement(`i`);function IG(e){let t=`&`+e+`;`;FG.innerHTML=t;let n=FG.textContent;return n.charCodeAt(n.length-1)===59&&e!==`semi`||n===t?!1:n}function LG(e,t){let n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)==65535||(n&65535)==65534||n>1114111?`�`:String.fromCodePoint(n)}const RG=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function zG(e){return e.replace(RG,BG)}function BG(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){let e=n.charCodeAt(1),t=e===120||e===88;return LG(n.slice(t?2:1),t?16:10)}return IG(n)||e}function VG(e){return e.label||!e.identifier?e.label||``:zG(e.identifier)}function HG(e){if(!e._compiled){let t=(e.atBreak?`[\\r\\n][\\t ]*`:``)+(e.before?`(?:`+e.before+`)`:``);e._compiled=RegExp((t?`(`+t+`)`:``)+(/[|\\{}()[\]^$+*?.-]/.test(e.character)?`\\`:``)+e.character+(e.after?`(?:`+e.after+`)`:``),`g`)}return e._compiled}function UG(e,t,n){let r=t.indexStack,i=e.children||[],a=[],o=-1,s=n.before,c;r.push(-1);let l=t.createTracker(n);for(;++o0&&(s===`\r`||s===` -`)&&u.type===`html`&&(a[a.length-1]=a[a.length-1].replace(/(\r?\n|\r)$/,` `),s=` `,l=t.createTracker(n),l.move(a.join(``)));let f=t.handle(u,e,t,{...l.current(),after:d,before:s});c&&c===f.slice(0,1)&&(f=HW(c.charCodeAt(0))+f.slice(1));let p=t.attentionEncodeSurroundingInfo;t.attentionEncodeSurroundingInfo=void 0,c=void 0,p&&(a.length>0&&p.before&&s===a[a.length-1].slice(-1)&&(a[a.length-1]=a[a.length-1].slice(0,-1)+HW(s.charCodeAt(0))),p.after&&(c=d)),l.move(f),a.push(f),s=f.slice(-1)}return r.pop(),a.join(``)}function WG(e,t,n){let r=t.indexStack,i=e.children||[],a=t.createTracker(n),o=[],s=-1;for(r.push(-1);++s - -`}return` - -`}const KG=/\r?\n|\r/g;function qG(e,t){let n=[],r=0,i=0,a;for(;a=KG.exec(e);)o(e.slice(r,a.index)),n.push(a[0]),r=a.index+a[0].length,i++;return o(e.slice(r)),n.join(``);function o(e){n.push(t(e,i,!e))}}function JG(e,t,n){let r=(n.before||``)+(t||``)+(n.after||``),i=[],a=[],o={},s=-1;for(;++s=l||e+1i?0:i+t:t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);a0?(xK(e,e.length,0,t),e):t}const CK={}.hasOwnProperty;function wK(e){let t={},n=-1;for(;++n0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}function ZK(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function QK(e,t,n){let r=[],i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let d={...e[r][1].end},f={...e[n][1].start};nq(d,-c),nq(f,c),o={type:c>1?`strongSequence`:`emphasisSequence`,start:d,end:{...e[r][1].end}},s={type:c>1?`strongSequence`:`emphasisSequence`,start:{...e[n][1].start},end:f},a={type:c>1?`strongText`:`emphasisText`,start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?`strong`:`emphasis`,start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},l=[],e[r][1].end.offset-e[r][1].start.offset&&(l=SK(l,[[`enter`,e[r][1],t],[`exit`,e[r][1],t]])),l=SK(l,[[`enter`,i,t],[`enter`,o,t],[`exit`,o,t],[`enter`,a,t]]),l=SK(l,QK(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),l=SK(l,[[`exit`,a,t],[`enter`,s,t],[`exit`,s,t],[`exit`,i,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,l=SK(l,[[`enter`,e[n][1],t],[`exit`,e[n][1],t]])):u=0,xK(e,r-1,n-r+3,l),n=r+l.length-u-2;break}}for(n=-1;++n0&&q(t)?J(e,v,`linePrefix`,a+1)(t):v(t)}function v(t){return t===null||K(t)?e.check(hq,h,ee)(t):(e.enter(`codeFlowValue`),y(t))}function y(t){return t===null||K(t)?(e.exit(`codeFlowValue`),v(t)):(e.consume(t),y)}function ee(n){return e.exit(`codeFenced`),t(n)}function b(e,t,n){let i=0;return a;function a(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),c}function c(t){return e.enter(`codeFencedFence`),q(t)?J(e,l,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):l(t)}function l(t){return t===s?(e.enter(`codeFencedFenceSequence`),u(t)):n(t)}function u(t){return t===s?(i++,e.consume(t),u):i>=o?(e.exit(`codeFencedFenceSequence`),q(t)?J(e,d,`whitespace`)(t):d(t)):n(t)}function d(r){return r===null||K(r)?(e.exit(`codeFencedFence`),t(r)):n(r)}}}function vq(e,t,n){let r=this;return i;function i(t){return t===null?n(t):(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}const yq={name:`codeIndented`,tokenize:xq},bq={partial:!0,tokenize:Sq};function xq(e,t,n){let r=this;return i;function i(t){return e.enter(`codeIndented`),J(e,a,`linePrefix`,5)(t)}function a(e){let t=r.events[r.events.length-1];return t&&t[1].type===`linePrefix`&&t[2].sliceSerialize(t[1],!0).length>=4?o(e):n(e)}function o(t){return t===null?c(t):K(t)?e.attempt(bq,o,c)(t):(e.enter(`codeFlowValue`),s(t))}function s(t){return t===null||K(t)?(e.exit(`codeFlowValue`),o(t)):(e.consume(t),s)}function c(n){return e.exit(`codeIndented`),t(n)}}function Sq(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),i):J(e,a,`linePrefix`,5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&a[1].type===`linePrefix`&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):K(e)?i(e):n(e)}}const Cq={name:`codeText`,previous:Tq,resolve:wq,tokenize:Eq};function wq(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){let r=t||0;this.setCursor(Math.trunc(e));let i=this.right.splice(this.right.length-r,1/0);return n&&Oq(this.left,n),i.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),Oq(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Oq(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0))if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}function Iq(e,t,n,r,i,a,o,s,c){let l=c||1/0,u=0;return d;function d(t){return t===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),f):t===null||t===32||t===41||dU(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter(`chunkString`,{contentType:`string`}),h(t))}function f(n){return n===62?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter(`chunkString`,{contentType:`string`}),p(n))}function p(t){return t===62?(e.exit(`chunkString`),e.exit(s),f(t)):t===null||t===60||K(t)?n(t):(e.consume(t),t===92?m:p)}function m(t){return t===60||t===62||t===92?(e.consume(t),p):p(t)}function h(i){return!u&&(i===null||i===41||hU(i))?(e.exit(`chunkString`),e.exit(s),e.exit(o),e.exit(r),t(i)):u999||l===null||l===91||l===93&&!c||l===94&&!s&&`_hiddenFootnoteSupport`in o.parser.constructs?n(l):l===93?(e.exit(a),e.enter(i),e.consume(l),e.exit(i),e.exit(r),t):K(l)?(e.enter(`lineEnding`),e.consume(l),e.exit(`lineEnding`),u):(e.enter(`chunkString`,{contentType:`string`}),d(l))}function d(t){return t===null||t===91||t===93||K(t)||s++>999?(e.exit(`chunkString`),u(t)):(e.consume(t),c||=!q(t),t===92?f:d)}function f(t){return t===91||t===92||t===93?(e.consume(t),s++,d):d(t)}}function Rq(e,t,n,r,i,a){let o;return s;function s(t){return t===34||t===39||t===40?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=t===40?41:t,c):n(t)}function c(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),c(o)):t===null?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),J(e,l,`linePrefix`)):(e.enter(`chunkString`,{contentType:`string`}),u(t))}function u(t){return t===o||t===null||K(t)?(e.exit(`chunkString`),l(t)):(e.consume(t),t===92?d:u)}function d(t){return t===o||t===92?(e.consume(t),u):u(t)}}function zq(e,t){let n;return r;function r(i){return K(i)?(e.enter(`lineEnding`),e.consume(i),e.exit(`lineEnding`),n=!0,r):q(i)?J(e,r,n?`linePrefix`:`lineSuffix`)(i):t(i)}}const Bq={name:`definition`,tokenize:Hq},Vq={partial:!0,tokenize:Uq};function Hq(e,t,n){let r=this,i;return a;function a(t){return e.enter(`definition`),o(t)}function o(t){return Lq.call(r,e,s,n,`definitionLabel`,`definitionLabelMarker`,`definitionLabelString`)(t)}function s(t){return i=ZU(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),c):n(t)}function c(t){return hU(t)?zq(e,l)(t):l(t)}function l(t){return Iq(e,u,n,`definitionDestination`,`definitionDestinationLiteral`,`definitionDestinationLiteralMarker`,`definitionDestinationRaw`,`definitionDestinationString`)(t)}function u(t){return e.attempt(Vq,d,d)(t)}function d(t){return q(t)?J(e,f,`whitespace`)(t):f(t)}function f(a){return a===null||K(a)?(e.exit(`definition`),r.parser.defined.push(i),t(a)):n(a)}}function Uq(e,t,n){return r;function r(t){return hU(t)?zq(e,i)(t):n(t)}function i(t){return Rq(e,a,n,`definitionTitle`,`definitionTitleMarker`,`definitionTitleString`)(t)}function a(t){return q(t)?J(e,o,`whitespace`)(t):o(t)}function o(e){return e===null||K(e)?t(e):n(e)}}const Wq={name:`hardBreakEscape`,tokenize:Gq};function Gq(e,t,n){return r;function r(t){return e.enter(`hardBreakEscape`),e.consume(t),i}function i(r){return K(r)?(e.exit(`hardBreakEscape`),t(r)):n(r)}}const Kq={name:`headingAtx`,resolve:qq,tokenize:Jq};function qq(e,t){let n=e.length-2,r=3,i,a;return e[r][1].type===`whitespace`&&(r+=2),n-2>r&&e[n][1].type===`whitespace`&&(n-=2),e[n][1].type===`atxHeadingSequence`&&(r===n-1||n-4>r&&e[n-2][1].type===`whitespace`)&&(n-=r+1===n?2:4),n>r&&(i={type:`atxHeadingText`,start:e[r][1].start,end:e[n][1].end},a={type:`chunkText`,start:e[r][1].start,end:e[n][1].end,contentType:`text`},xK(e,r,n-r+1,[[`enter`,i,t],[`enter`,a,t],[`exit`,a,t],[`exit`,i,t]])),e}function Jq(e,t,n){let r=0;return i;function i(t){return e.enter(`atxHeading`),a(t)}function a(t){return e.enter(`atxHeadingSequence`),o(t)}function o(t){return t===35&&r++<6?(e.consume(t),o):t===null||hU(t)?(e.exit(`atxHeadingSequence`),s(t)):n(t)}function s(n){return n===35?(e.enter(`atxHeadingSequence`),c(n)):n===null||K(n)?(e.exit(`atxHeading`),t(n)):q(n)?J(e,s,`whitespace`)(n):(e.enter(`atxHeadingText`),l(n))}function c(t){return t===35?(e.consume(t),c):(e.exit(`atxHeadingSequence`),s(t))}function l(t){return t===null||t===35||hU(t)?(e.exit(`atxHeadingText`),s(t)):(e.consume(t),l)}}const Yq=`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`),Xq=[`pre`,`script`,`style`,`textarea`],Zq={concrete:!0,name:`htmlFlow`,resolveTo:eJ,tokenize:tJ},Qq={partial:!0,tokenize:rJ},$q={partial:!0,tokenize:nJ};function eJ(e){let t=e.length;for(;t--&&!(e[t][0]===`enter`&&e[t][1].type===`htmlFlow`););return t>1&&e[t-2][1].type===`linePrefix`&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function tJ(e,t,n){let r=this,i,a,o,s,c;return l;function l(e){return u(e)}function u(t){return e.enter(`htmlFlow`),e.enter(`htmlFlowData`),e.consume(t),d}function d(s){return s===33?(e.consume(s),f):s===47?(e.consume(s),a=!0,h):s===63?(e.consume(s),i=3,r.interrupt?t:fe):cU(s)?(e.consume(s),o=String.fromCharCode(s),g):n(s)}function f(a){return a===45?(e.consume(a),i=2,p):a===91?(e.consume(a),i=5,s=0,m):cU(a)?(e.consume(a),i=4,r.interrupt?t:fe):n(a)}function p(i){return i===45?(e.consume(i),r.interrupt?t:fe):n(i)}function m(i){return i===`CDATA[`.charCodeAt(s++)?(e.consume(i),s===6?r.interrupt?t:ie:m):n(i)}function h(t){return cU(t)?(e.consume(t),o=String.fromCharCode(t),g):n(t)}function g(s){if(s===null||s===47||s===62||hU(s)){let c=s===47,l=o.toLowerCase();return!c&&!a&&Xq.includes(l)?(i=1,r.interrupt?t(s):ie(s)):Yq.includes(o.toLowerCase())?(i=6,c?(e.consume(s),_):r.interrupt?t(s):ie(s)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(s):a?v(s):y(s))}return s===45||lU(s)?(e.consume(s),o+=String.fromCharCode(s),g):n(s)}function _(i){return i===62?(e.consume(i),r.interrupt?t:ie):n(i)}function v(t){return q(t)?(e.consume(t),v):S(t)}function y(t){return t===47?(e.consume(t),S):t===58||t===95||cU(t)?(e.consume(t),ee):q(t)?(e.consume(t),y):S(t)}function ee(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),ee):b(t)}function b(t){return t===61?(e.consume(t),x):q(t)?(e.consume(t),b):y(t)}function x(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),c=t,te):q(t)?(e.consume(t),x):ne(t)}function te(t){return t===c?(e.consume(t),c=null,re):t===null||K(t)?n(t):(e.consume(t),te)}function ne(t){return t===null||t===34||t===39||t===47||t===60||t===61||t===62||t===96||hU(t)?b(t):(e.consume(t),ne)}function re(e){return e===47||e===62||q(e)?y(e):n(e)}function S(t){return t===62?(e.consume(t),C):n(t)}function C(t){return t===null||K(t)?ie(t):q(t)?(e.consume(t),C):n(t)}function ie(t){return t===45&&i===2?(e.consume(t),ce):t===60&&i===1?(e.consume(t),le):t===62&&i===4?(e.consume(t),pe):t===63&&i===3?(e.consume(t),fe):t===93&&i===5?(e.consume(t),de):K(t)&&(i===6||i===7)?(e.exit(`htmlFlowData`),e.check(Qq,me,ae)(t)):t===null||K(t)?(e.exit(`htmlFlowData`),ae(t)):(e.consume(t),ie)}function ae(t){return e.check($q,oe,me)(t)}function oe(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),se}function se(t){return t===null||K(t)?ae(t):(e.enter(`htmlFlowData`),ie(t))}function ce(t){return t===45?(e.consume(t),fe):ie(t)}function le(t){return t===47?(e.consume(t),o=``,ue):ie(t)}function ue(t){if(t===62){let n=o.toLowerCase();return Xq.includes(n)?(e.consume(t),pe):ie(t)}return cU(t)&&o.length<8?(e.consume(t),o+=String.fromCharCode(t),ue):ie(t)}function de(t){return t===93?(e.consume(t),fe):ie(t)}function fe(t){return t===62?(e.consume(t),pe):t===45&&i===2?(e.consume(t),fe):ie(t)}function pe(t){return t===null||K(t)?(e.exit(`htmlFlowData`),me(t)):(e.consume(t),pe)}function me(n){return e.exit(`htmlFlow`),t(n)}}function nJ(e,t,n){let r=this;return i;function i(t){return K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a):n(t)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function rJ(e,t,n){return r;function r(r){return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),e.attempt(aq,t,n)}}const iJ={name:`htmlText`,tokenize:aJ};function aJ(e,t,n){let r=this,i,a,o;return s;function s(t){return e.enter(`htmlText`),e.enter(`htmlTextData`),e.consume(t),c}function c(t){return t===33?(e.consume(t),l):t===47?(e.consume(t),b):t===63?(e.consume(t),y):cU(t)?(e.consume(t),ne):n(t)}function l(t){return t===45?(e.consume(t),u):t===91?(e.consume(t),a=0,m):cU(t)?(e.consume(t),v):n(t)}function u(t){return t===45?(e.consume(t),p):n(t)}function d(t){return t===null?n(t):t===45?(e.consume(t),f):K(t)?(o=d,le(t)):(e.consume(t),d)}function f(t){return t===45?(e.consume(t),p):d(t)}function p(e){return e===62?ce(e):e===45?f(e):d(e)}function m(t){return t===`CDATA[`.charCodeAt(a++)?(e.consume(t),a===6?h:m):n(t)}function h(t){return t===null?n(t):t===93?(e.consume(t),g):K(t)?(o=h,le(t)):(e.consume(t),h)}function g(t){return t===93?(e.consume(t),_):h(t)}function _(t){return t===62?ce(t):t===93?(e.consume(t),_):h(t)}function v(t){return t===null||t===62?ce(t):K(t)?(o=v,le(t)):(e.consume(t),v)}function y(t){return t===null?n(t):t===63?(e.consume(t),ee):K(t)?(o=y,le(t)):(e.consume(t),y)}function ee(e){return e===62?ce(e):y(e)}function b(t){return cU(t)?(e.consume(t),x):n(t)}function x(t){return t===45||lU(t)?(e.consume(t),x):te(t)}function te(t){return K(t)?(o=te,le(t)):q(t)?(e.consume(t),te):ce(t)}function ne(t){return t===45||lU(t)?(e.consume(t),ne):t===47||t===62||hU(t)?re(t):n(t)}function re(t){return t===47?(e.consume(t),ce):t===58||t===95||cU(t)?(e.consume(t),S):K(t)?(o=re,le(t)):q(t)?(e.consume(t),re):ce(t)}function S(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),S):C(t)}function C(t){return t===61?(e.consume(t),ie):K(t)?(o=C,le(t)):q(t)?(e.consume(t),C):re(t)}function ie(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),i=t,ae):K(t)?(o=ie,le(t)):q(t)?(e.consume(t),ie):(e.consume(t),oe)}function ae(t){return t===i?(e.consume(t),i=void 0,se):t===null?n(t):K(t)?(o=ae,le(t)):(e.consume(t),ae)}function oe(t){return t===null||t===34||t===39||t===60||t===61||t===96?n(t):t===47||t===62||hU(t)?re(t):(e.consume(t),oe)}function se(e){return e===47||e===62||hU(e)?re(e):n(e)}function ce(r){return r===62?(e.consume(r),e.exit(`htmlTextData`),e.exit(`htmlText`),t):n(r)}function le(t){return e.exit(`htmlTextData`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),ue}function ue(t){return q(t)?J(e,de,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):de(t)}function de(t){return e.enter(`htmlTextData`),o(t)}}const oJ={name:`labelEnd`,resolveAll:uJ,resolveTo:dJ,tokenize:fJ},sJ={tokenize:pJ},cJ={tokenize:mJ},lJ={tokenize:hJ};function uJ(e){let t=-1,n=[];for(;++t=3&&(a===null||K(a))?(e.exit(`thematicBreak`),t(a)):n(a)}function c(t){return t===i?(e.consume(t),r++,c):(e.exit(`thematicBreakSequence`),q(t)?J(e,s,`whitespace`)(t):s(t))}}const wJ={continuation:{tokenize:OJ},exit:AJ,name:`list`,tokenize:DJ},TJ={partial:!0,tokenize:jJ},EJ={partial:!0,tokenize:kJ};function DJ(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type===`linePrefix`?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(t){let i=r.containerState.type||(t===42||t===43||t===45?`listUnordered`:`listOrdered`);if(i===`listUnordered`?!r.containerState.marker||t===r.containerState.marker:fU(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),i===`listUnordered`)return e.enter(`listItemPrefix`),t===42||t===45?e.check(SJ,n,l)(t):l(t);if(!r.interrupt||t===49)return e.enter(`listItemPrefix`),e.enter(`listItemValue`),c(t)}return n(t)}function c(t){return fU(t)&&++o<10?(e.consume(t),c):(!r.interrupt||o<2)&&(r.containerState.marker?t===r.containerState.marker:t===41||t===46)?(e.exit(`listItemValue`),l(t)):n(t)}function l(t){return e.enter(`listItemMarker`),e.consume(t),e.exit(`listItemMarker`),r.containerState.marker=r.containerState.marker||t,e.check(aq,r.interrupt?n:u,e.attempt(TJ,f,d))}function u(e){return r.containerState.initialBlankLine=!0,a++,f(e)}function d(t){return q(t)?(e.enter(`listItemPrefixWhitespace`),e.consume(t),e.exit(`listItemPrefixWhitespace`),f):n(t)}function f(n){return r.containerState.size=a+r.sliceSerialize(e.exit(`listItemPrefix`),!0).length,t(n)}}function OJ(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(aq,i,a);function i(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,J(e,t,`listItemIndent`,r.containerState.size+1)(n)}function a(n){return r.containerState.furtherBlankLines||!q(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(EJ,t,o)(n))}function o(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,J(e,e.attempt(wJ,t,n),`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(i)}}function kJ(e,t,n){let r=this;return J(e,i,`listItemIndent`,r.containerState.size+1);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`listItemIndent`&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)}}function AJ(e){e.exit(this.containerState.type)}function jJ(e,t,n){let r=this;return J(e,i,`listItemPrefixWhitespace`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:5);function i(e){let i=r.events[r.events.length-1];return!q(e)&&i&&i[1].type===`listItemPrefixWhitespace`?t(e):n(e)}}const MJ={name:`setextUnderline`,resolveTo:NJ,tokenize:PJ};function NJ(e,t){let n=e.length,r,i,a;for(;n--;)if(e[n][0]===`enter`){if(e[n][1].type===`content`){r=n;break}e[n][1].type===`paragraph`&&(i=n)}else e[n][1].type===`content`&&e.splice(n,1),!a&&e[n][1].type===`definition`&&(a=n);let o={type:`setextHeading`,start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type=`setextHeadingText`,a?(e.splice(i,0,[`enter`,o,t]),e.splice(a+1,0,[`exit`,e[r][1],t]),e[r][1].end={...e[a][1].end}):e[r][1]=o,e.push([`exit`,o,t]),e}function PJ(e,t,n){let r=this,i;return a;function a(t){let a=r.events.length,s;for(;a--;)if(r.events[a][1].type!==`lineEnding`&&r.events[a][1].type!==`linePrefix`&&r.events[a][1].type!==`content`){s=r.events[a][1].type===`paragraph`;break}return!r.parser.lazy[r.now().line]&&(r.interrupt||s)?(e.enter(`setextHeadingLine`),i=t,o(t)):n(t)}function o(t){return e.enter(`setextHeadingLineSequence`),s(t)}function s(t){return t===i?(e.consume(t),s):(e.exit(`setextHeadingLineSequence`),q(t)?J(e,c,`lineSuffix`)(t):c(t))}function c(r){return r===null||K(r)?(e.exit(`setextHeadingLine`),t(r)):n(r)}}const FJ={tokenize:UJ,partial:!0};function IJ(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:BJ,continuation:{tokenize:VJ},exit:HJ}},text:{91:{name:`gfmFootnoteCall`,tokenize:zJ},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:LJ,resolveTo:RJ}}}}function LJ(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=ZU(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function RJ(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function zJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||hU(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(ZU(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return hU(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function BJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||hU(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=ZU(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return hU(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),J(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function VJ(e,t,n){return e.check(aq,t,e.attempt(FJ,t,n))}function HJ(e){e.exit(`gfmFootnoteDefinition`)}function UJ(e,t,n){let r=this;return J(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function WJ(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=UW(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var GJ=class{constructor(){this.map=[]}add(e,t,n){KJ(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function KJ(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?x:c;return a===x&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):K(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):q(t)?J(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||hU(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,q(t)?J(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):b(t)}function h(t){return q(t)?J(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||K(t)?ee(t):b(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):b(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return q(t)?J(e,ee,`whitespace`)(t):ee(t)}function ee(n){return n===124?m(n):n===null||K(n)?!o||i!==a?b(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):b(n)}function b(e){return n(e)}function x(t){return e.enter(`tableRow`),te(t)}function te(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),te):n===null||K(n)?(e.exit(`tableRow`),t(n)):q(n)?J(e,te,`whitespace`)(n):(e.enter(`data`),ne(n))}function ne(t){return t===null||t===124||hU(t)?(e.exit(`data`),te(t)):(e.consume(t),t===92?re:ne)}function re(t){return t===92||t===124?(e.consume(t),ne):ne(t)}}function XJ(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new GJ;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},$J(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function QJ(e,t,n,r,i){let a=[],o=$J(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function $J(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}const eY={name:`tasklistCheck`,tokenize:nY};function tY(){return{text:{91:eY}}}function nY(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return hU(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return K(r)?t(r):q(r)?e.check({tokenize:rY},t,n)(r):n(r)}}function rY(e,t,n){return J(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function iY(e){return wK([IK(),IJ(),WJ(e),JJ(),tY()])}const aY={};function oY(e){let t=this,n=e||aY,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(iY(n)),a.push(yK()),o.push(bK(n))}const sY={tokenize:cY};function cY(e){let t=e.attempt(this.parser.constructs.contentInitial,r,i),n;return t;function r(n){if(n===null){e.consume(n);return}return e.enter(`lineEnding`),e.consume(n),e.exit(`lineEnding`),J(e,t,`linePrefix`)}function i(t){return e.enter(`paragraph`),a(t)}function a(t){let r=e.enter(`chunkText`,{contentType:`text`,previous:n});return n&&(n.next=r),n=r,o(t)}function o(t){if(t===null){e.exit(`chunkText`),e.exit(`paragraph`),e.consume(t);return}return K(t)?(e.consume(t),e.exit(`chunkText`),a):(e.consume(t),o)}}const lY={tokenize:dY},uY={tokenize:fY};function dY(e){let t=this,n=[],r=0,i,a,o;return s;function s(i){if(ro))return;let n=t.events.length,a=n,s,c;for(;a--;)if(t.events[a][0]===`exit`&&t.events[a][1].type===`chunkFlow`){if(s){c=t.events[a][1].end;break}s=!0}for(_(r),e=n;er;){let r=n[i];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function fY(e,t,n){return J(e,e.attempt(this.parser.constructs.document,t,n),`linePrefix`,this.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)}const pY={tokenize:mY};function mY(e){let t=this,n=e.attempt(aq,r,e.attempt(this.parser.constructs.flowInitial,i,J(e,e.attempt(this.parser.constructs.flow,i,e.attempt(jq,i)),`linePrefix`)));return n;function r(r){if(r===null){e.consume(r);return}return e.enter(`lineEndingBlank`),e.consume(r),e.exit(`lineEndingBlank`),t.currentConstruct=void 0,n}function i(r){if(r===null){e.consume(r);return}return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),t.currentConstruct=void 0,n}}const hY={resolveAll:yY()},gY=vY(`string`),_Y=vY(`text`);function vY(e){return{resolveAll:yY(e===`text`?bY:void 0),tokenize:t};function t(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return c(e)?i(e):o(e)}function o(e){if(e===null){t.consume(e);return}return t.enter(`data`),t.consume(e),s}function s(e){return c(e)?(t.exit(`data`),i(e)):(t.consume(e),s)}function c(e){if(e===null)return!0;let t=r[e],i=-1;if(t)for(;++ikY,contentInitial:()=>CY,disable:()=>AY,document:()=>SY,flow:()=>TY,flowInitial:()=>wY,insideSpan:()=>OY,string:()=>EY,text:()=>DY});const SY={42:wJ,43:wJ,45:wJ,48:wJ,49:wJ,50:wJ,51:wJ,52:wJ,53:wJ,54:wJ,55:wJ,56:wJ,57:wJ,62:sq},CY={91:Bq},wY={[-2]:yq,[-1]:yq,32:yq},TY={35:Kq,42:SJ,45:[MJ,SJ],60:Zq,61:MJ,95:SJ,96:gq,126:gq},EY={38:pq,92:dq},DY={[-5]:bJ,[-4]:bJ,[-3]:bJ,33:gJ,38:pq,42:$K,60:[rq,iJ],91:vJ,92:[Wq,dq],93:oJ,95:$K,96:Cq},OY={null:[$K,hY]},kY={null:[42,95]},AY={null:[]};function jY(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],c={attempt:te(b),check:te(x),consume:v,enter:y,exit:ee,interrupt:te(x,{interrupt:!0})},l={code:null,containerState:{},defineSkip:h,events:[],now:m,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:d},u=t.tokenize.call(l,c);return t.resolveAll&&a.push(t),l;function d(e){return o=SK(o,e),g(),o[o.length-1]===null?(ne(t,0),l.events=QK(a,l.events,l),l.events):[]}function f(e,t){return NY(p(e),t)}function p(e){return MY(o,e)}function m(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function h(e){i[e.line]=e.column,S()}function g(){let e;for(;r._index-1){let e=o[0];typeof e==`string`?o[0]=e.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function NY(e,t){let n=-1,r=[],i;for(;++n0){let e=a.tokenStack[a.tokenStack.length-1];(e[1]||WY).call(a,void 0,e[0])}for(r.position={start:VY(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:VY(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d{switch(e){case`Function`:case`SharedWorker`:case`Worker`:case`eval`:case`setInterval`:case`setTimeout`:throw TypeError(`unable to deserialize `+e)}return new KY[e](t)},JY=(e,t)=>{let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(qY(e,t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(qY(a,o),i)};return r},YY=e=>JY(new Map,e)(0),{toString:XY}={},{keys:ZY}=Object,QY=e=>{let t=typeof e;if(t!==`object`||!e)return[0,t];let n=XY.call(e).slice(8,-1);switch(n){case`Array`:return[1,``];case`Object`:return[2,``];case`Date`:return[3,``];case`RegExp`:return[4,``];case`Map`:return[5,``];case`Set`:return[6,``];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]},$Y=([e,t])=>e===0&&(t===`function`||t===`symbol`),eX=(e,t,n,r)=>{let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=QY(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize `+s);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of ZY(r))(e||!$Y(QY(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!($Y(QY(n))||$Y(QY(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!$Y(QY(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a},tX=(e,{json:t,lossy:n}={})=>{let r=[];return eX(!(t||n),!!t,new Map,r)(e),r};var nX=typeof structuredClone==`function`?(e,t)=>t&&(`json`in t||`lossy`in t)?YY(tX(e,t)):structuredClone(e):(e,t)=>YY(tX(e,t));function rX(e,t){let n=[{type:`text`,value:`↩`}];return t>1&&n.push({type:`element`,tagName:`sup`,properties:{},children:[{type:`text`,value:String(t)}]}),n}function iX(e,t){return`Back to reference `+(e+1)+(t>1?`-`+t:``)}function aX(e){let t=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,n=e.options.footnoteBackContent||rX,r=e.options.footnoteBackLabel||iX,i=e.options.footnoteLabel||`Footnotes`,a=e.options.footnoteLabelTagName||`h2`,o=e.options.footnoteLabelProperties||{className:[`sr-only`]},s=[],c=-1;for(;++c0&&d.push({type:`text`,value:` `});let e=typeof n==`string`?n:n(c,u);typeof e==`string`&&(e={type:`text`,value:e}),d.push({type:`element`,tagName:`a`,properties:{href:`#`+t+`fnref-`+l+(u>1?`-`+u:``),dataFootnoteBackref:``,ariaLabel:typeof r==`string`?r:r(c,u),className:[`data-footnote-backref`]},children:Array.isArray(e)?e:[e]})}let p=a[a.length-1];if(p&&p.type===`element`&&p.tagName===`p`){let e=p.children[p.children.length-1];e&&e.type===`text`?e.value+=` `:p.children.push({type:`text`,value:` `}),p.children.push(...d)}else a.push(...d);let m={type:`element`,tagName:`li`,properties:{id:t+`fn-`+l},children:e.wrap(a,!0)};e.patch(i,m),s.push(m)}if(s.length!==0)return{type:`element`,tagName:`section`,properties:{dataFootnotes:!0,className:[`footnotes`]},children:[{type:`element`,tagName:a,properties:{...nX(o),id:`footnote-label`},children:[{type:`text`,value:i}]},{type:`text`,value:` -`},{type:`element`,tagName:`ol`,properties:{},children:e.wrap(s,!0)},{type:`text`,value:` -`}]}}const oX=cX(`end`),sX=cX(`start`);function cX(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function lX(e){let t=sX(e),n=oX(e);if(t&&n)return{start:t,end:n}}function uX(e,t){let n={type:`element`,tagName:`blockquote`,properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function dX(e,t){let n={type:`element`,tagName:`br`,properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:`text`,value:` -`}]}function fX(e,t){let n=t.value?t.value+` -`:``,r={},i=t.lang?t.lang.split(/\s+/):[];i.length>0&&(r.className=[`language-`+i[0]]);let a={type:`element`,tagName:`code`,properties:r,children:[{type:`text`,value:n}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:`element`,tagName:`pre`,properties:{},children:[a]},e.patch(t,a),a}function pX(e,t){let n={type:`element`,tagName:`del`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function mX(e,t){let n={type:`element`,tagName:`em`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function hX(e,t){let n=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,r=String(t.identifier).toUpperCase(),i=ZK(r.toLowerCase()),a=e.footnoteOrder.indexOf(r),o,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),o=e.footnoteOrder.length):o=a+1,s+=1,e.footnoteCounts.set(r,s);let c={type:`element`,tagName:`a`,properties:{href:`#`+n+`fn-`+i,id:n+`fnref-`+i+(s>1?`-`+s:``),dataFootnoteRef:!0,ariaDescribedBy:[`footnote-label`]},children:[{type:`text`,value:String(o)}]};e.patch(t,c);let l={type:`element`,tagName:`sup`,properties:{},children:[c]};return e.patch(t,l),e.applyData(t,l)}function gX(e,t){let n={type:`element`,tagName:`h`+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function _X(e,t){if(e.options.allowDangerousHtml){let n={type:`raw`,value:t.value};return e.patch(t,n),e.applyData(t,n)}}function vX(e,t){let n=t.referenceType,r=`]`;if(n===`collapsed`?r+=`[]`:n===`full`&&(r+=`[`+(t.label||t.identifier)+`]`),t.type===`imageReference`)return[{type:`text`,value:`![`+t.alt+r}];let i=e.all(t),a=i[0];a&&a.type===`text`?a.value=`[`+a.value:i.unshift({type:`text`,value:`[`});let o=i[i.length-1];return o&&o.type===`text`?o.value+=r:i.push({type:`text`,value:r}),i}function yX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={src:ZK(r.url||``),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`img`,properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)}function bX(e,t){let n={src:ZK(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`img`,properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function xX(e,t){let n={type:`text`,value:t.value.replace(/\r?\n|\r/g,` `)};e.patch(t,n);let r={type:`element`,tagName:`code`,properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function SX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={href:ZK(r.url||``)};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`a`,properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function CX(e,t){let n={href:ZK(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`a`,properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function wX(e,t,n){let r=e.all(t),i=n?TX(n):EX(t),a={},o=[];if(typeof t.checked==`boolean`){let e=r[0],n;e&&e.type===`element`&&e.tagName===`p`?n=e:(n={type:`element`,tagName:`p`,properties:{},children:[]},r.unshift(n)),n.children.length>0&&n.children.unshift({type:`text`,value:` `}),n.children.unshift({type:`element`,tagName:`input`,properties:{type:`checkbox`,checked:t.checked,disabled:!0},children:[]}),a.className=[`task-list-item`]}let s=-1;for(;++s1}function DX(e,t){let n={},r=e.all(t),i=-1;for(typeof t.start==`number`&&t.start!==1&&(n.start=t.start);++i0){let r={type:`element`,tagName:`tbody`,properties:{},children:e.wrap(n,!0)},a=sX(t.children[1]),o=oX(t.children[t.children.length-1]);a&&o&&(r.position={start:a,end:o}),i.push(r)}let a={type:`element`,tagName:`table`,properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)}function MX(e,t,n){let r=n?n.children:void 0,i=(r?r.indexOf(t):1)===0?`th`:`td`,a=n&&n.type===`table`?n.align:void 0,o=a?a.length:t.children.length,s=-1,c=[];for(;++s0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(FX(t.slice(i),i>0,!1)),a.join(``)}function FX(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;t===9||t===32;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;t===9||t===32;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):``}function IX(e,t){let n={type:`text`,value:PX(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function LX(e,t){let n={type:`element`,tagName:`hr`,properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const RX={blockquote:uX,break:dX,code:fX,delete:pX,emphasis:mX,footnoteReference:hX,heading:gX,html:_X,imageReference:yX,image:bX,inlineCode:xX,linkReference:SX,link:CX,listItem:wX,list:DX,paragraph:OX,root:kX,strong:AX,table:jX,tableCell:NX,tableRow:MX,text:IX,thematicBreak:LX,toml:zX,yaml:zX,definition:zX,footnoteDefinition:zX};function zX(){}const BX={}.hasOwnProperty,VX={};function HX(e,t){let n=t||VX,r=new Map,i=new Map,a={all:s,applyData:WX,definitionById:r,footnoteById:i,footnoteCounts:new Map,footnoteOrder:[],handlers:{...RX,...n.handlers},one:o,options:n,patch:UX,wrap:KX};return qW(e,function(e){if(e.type===`definition`||e.type===`footnoteDefinition`){let t=e.type===`definition`?r:i,n=String(e.identifier).toUpperCase();t.has(n)||t.set(n,e)}}),a;function o(e,t){let n=e.type,r=a.handlers[n];if(BX.call(a.handlers,n)&&r)return r(a,e,t);if(a.options.passThrough&&a.options.passThrough.includes(n)){if(`children`in e){let{children:t,...n}=e,r=nX(n);return r.children=a.all(e),r}return nX(e)}return(a.options.unknownHandler||GX)(a,e,t)}function s(e){let t=[];if(`children`in e){let n=e.children,r=-1;for(;++r0&&n.push({type:`text`,value:` -`}),n}function qX(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function JX(e,t){let n=HX(e,t),r=n.one(e,void 0),i=aX(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(`children`in a,a.children.push({type:`text`,value:` -`},i)),a}function YX(e,t){return e&&`run`in e?async function(n,r){let i=JX(n,{file:r,...t});await e.run(i,r)}:function(n,r){return JX(n,{file:r,...e||t})}}function XX(e){jU(e,[/\r?\n|\r/g,ZX])}function ZX(){return{type:`break`}}function QX(){return function(e){XX(e)}}var $X=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};$X.prototype.normal={},$X.prototype.property={},$X.prototype.space=void 0;function eZ(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new $X(n,r,t)}function tZ(e){return e.toLowerCase()}var nZ=class{constructor(e,t){this.attribute=t,this.property=e}};nZ.prototype.attribute=``,nZ.prototype.booleanish=!1,nZ.prototype.boolean=!1,nZ.prototype.commaOrSpaceSeparated=!1,nZ.prototype.commaSeparated=!1,nZ.prototype.defined=!1,nZ.prototype.mustUseProperty=!1,nZ.prototype.number=!1,nZ.prototype.overloadedBoolean=!1,nZ.prototype.property=``,nZ.prototype.spaceSeparated=!1,nZ.prototype.space=void 0;var rZ=s({boolean:()=>Y,booleanish:()=>aZ,commaOrSpaceSeparated:()=>lZ,commaSeparated:()=>cZ,number:()=>X,overloadedBoolean:()=>oZ,spaceSeparated:()=>sZ});let iZ=0;const Y=uZ(),aZ=uZ(),oZ=uZ(),X=uZ(),sZ=uZ(),cZ=uZ(),lZ=uZ();function uZ(){return 2**++iZ}const dZ=Object.keys(rZ);var fZ=class extends nZ{constructor(e,t,n,r){let i=-1;if(super(e,t),pZ(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&TZ.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(wZ,OZ);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!wZ.test(e)){let n=e.replace(CZ,DZ);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=fZ}return new i(r,t)}function DZ(e){return`-`+e.toLowerCase()}function OZ(e){return e.charAt(1).toUpperCase()}const kZ=eZ([hZ,vZ,bZ,xZ,SZ],`html`),AZ=eZ([hZ,yZ,bZ,xZ,SZ],`svg`),jZ={html:`http://www.w3.org/1999/xhtml`,mathml:`http://www.w3.org/1998/Math/MathML`,svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`},MZ={}.hasOwnProperty;function NZ(e,t){let n=t||{};return PZ(e,{doc:n.document||document,fragment:n.fragment||!1,namespace:n.namespace||void 0,impliedNamespace:void 0,afterTransform:n.afterTransform||void 0})}function PZ(e,t){let n=FZ(e,t);return t.afterTransform&&t.afterTransform(e,n),n}function FZ(e,t){switch(e.type){case`root`:return IZ(e,t);case`text`:return RZ(e,t);case`doctype`:return LZ(e,t);case`comment`:return zZ(e,t);default:return BZ(e,t)}}function IZ(e,t){let n=e.children||[],r=n.length===0,i=-1,a;for(;++i`;let t=document.createElement(`template`);return t.content.append(e),t.innerHTML}const GZ=[`area`,`base`,`basefont`,`bgsound`,`br`,`col`,`command`,`embed`,`frame`,`hr`,`image`,`img`,`input`,`keygen`,`link`,`meta`,`param`,`source`,`track`,`wbr`],KZ=/["&'<>`]/g,qZ=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,JZ=/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,YZ=/[|\\{}()[\]^$+*?.]/g,XZ=new WeakMap;function ZZ(e,t){if(e=e.replace(t.subset?QZ(t.subset):KZ,r),t.subset||t.escapeOnly)return e;return e.replace(qZ,n).replace(JZ,r);function n(e,n,r){return t.format((e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536,r.charCodeAt(n+2),t)}function r(e,n,r){return t.format(e.charCodeAt(0),r.charCodeAt(n+1),t)}}function QZ(e){let t=XZ.get(e);return t||(t=$Z(e),XZ.set(e,t)),t}function $Z(e){let t=[],n=-1;for(;++n`,OElig:`Œ`,oelig:`œ`,Scaron:`Š`,scaron:`š`,Yuml:`Ÿ`,circ:`ˆ`,tilde:`˜`,ensp:` `,emsp:` `,thinsp:` `,zwnj:`‌`,zwj:`‍`,lrm:`‎`,rlm:`‏`,ndash:`–`,mdash:`—`,lsquo:`‘`,rsquo:`’`,sbquo:`‚`,ldquo:`“`,rdquo:`”`,bdquo:`„`,dagger:`†`,Dagger:`‡`,permil:`‰`,lsaquo:`‹`,rsaquo:`›`,euro:`€`},oQ=[`cent`,`copy`,`divide`,`gt`,`lt`,`not`,`para`,`times`],sQ={}.hasOwnProperty,cQ={};let lQ;for(lQ in aQ)sQ.call(aQ,lQ)&&(cQ[aQ[lQ]]=lQ);const uQ=/[^\dA-Za-z]/;function dQ(e,t,n,r){let i=String.fromCharCode(e);if(sQ.call(cQ,i)){let e=cQ[i],a=`&`+e;return n&&iQ.includes(e)&&!oQ.includes(e)&&(!r||t&&t!==61&&uQ.test(String.fromCharCode(t)))?a:a+`;`}return``}function fQ(e,t,n){let r=tQ(e,t,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=dQ(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){let i=rQ(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|`],gQ=[`<`,`>`];function _Q(e,t,n,r){return r.settings.bogusComments?``:``;function i(e){return pQ(e,Object.assign({},r.settings.characterReferences,{subset:gQ}))}}function vQ(e,t,n,r){return``}function yQ(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function bQ(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function xQ(e){let t=String(e||``).trim();return t?t.split(/[ \t\n\r\f]+/g):[]}function SQ(e){return e.join(` `).trim()}const CQ=/[ \t\n\f\r]/g;function wQ(e){return typeof e==`object`?e.type===`text`?TQ(e.value):!1:TQ(e)}function TQ(e){return e.replace(CQ,``)===``}const EQ=kQ(1),DQ=kQ(-1),OQ=[];function kQ(e){return t;function t(t,n,r){let i=t?t.children:OQ,a=(n||0)+e,o=i[a];if(!r)for(;o&&wQ(o);)a+=e,o=i[a];return o}}const AQ={}.hasOwnProperty;function jQ(e){return t;function t(t,n,r){return AQ.call(e,t.tagName)&&e[t.tagName](t,n,r)}}const MQ=jQ({body:FQ,caption:NQ,colgroup:NQ,dd:zQ,dt:RQ,head:NQ,html:PQ,li:LQ,optgroup:VQ,option:HQ,p:IQ,rp:BQ,rt:BQ,tbody:WQ,td:qQ,tfoot:GQ,th:qQ,thead:UQ,tr:KQ});function NQ(e,t,n){let r=EQ(n,t,!0);return!r||r.type!==`comment`&&!(r.type===`text`&&wQ(r.value.charAt(0)))}function PQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function FQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function IQ(e,t,n){let r=EQ(n,t);return r?r.type===`element`&&(r.tagName===`address`||r.tagName===`article`||r.tagName===`aside`||r.tagName===`blockquote`||r.tagName===`details`||r.tagName===`div`||r.tagName===`dl`||r.tagName===`fieldset`||r.tagName===`figcaption`||r.tagName===`figure`||r.tagName===`footer`||r.tagName===`form`||r.tagName===`h1`||r.tagName===`h2`||r.tagName===`h3`||r.tagName===`h4`||r.tagName===`h5`||r.tagName===`h6`||r.tagName===`header`||r.tagName===`hgroup`||r.tagName===`hr`||r.tagName===`main`||r.tagName===`menu`||r.tagName===`nav`||r.tagName===`ol`||r.tagName===`p`||r.tagName===`pre`||r.tagName===`section`||r.tagName===`table`||r.tagName===`ul`):!n||!(n.type===`element`&&(n.tagName===`a`||n.tagName===`audio`||n.tagName===`del`||n.tagName===`ins`||n.tagName===`map`||n.tagName===`noscript`||n.tagName===`video`))}function LQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`li`}function RQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`))}function zQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`)}function BQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`rp`||r.tagName===`rt`)}function VQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`optgroup`}function HQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`option`||r.tagName===`optgroup`)}function UQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`))}function WQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`)}function GQ(e,t,n){return!EQ(n,t)}function KQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`tr`}function qQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`td`||r.tagName===`th`)}const JQ=jQ({body:Mne,colgroup:ZQ,head:XQ,html:YQ,tbody:QQ});function YQ(e){let t=EQ(e,-1);return!t||t.type!==`comment`}function XQ(e){let t=new Set;for(let n of e.children)if(n.type===`element`&&(n.tagName===`base`||n.tagName===`title`)){if(t.has(n.tagName))return!1;t.add(n.tagName)}let n=e.children[0];return!n||n.type===`element`}function Mne(e){let t=EQ(e,-1,!0);return!t||t.type!==`comment`&&!(t.type===`text`&&wQ(t.value.charAt(0)))&&!(t.type===`element`&&(t.tagName===`meta`||t.tagName===`link`||t.tagName===`script`||t.tagName===`style`||t.tagName===`template`))}function ZQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1,!0);return n&&r&&r.type===`element`&&r.tagName===`colgroup`&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`col`)}function QQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1);return n&&r&&r.type===`element`&&(r.tagName===`thead`||r.tagName===`tbody`)&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`tr`)}const $Q={name:[[` -\f\r &/=>`.split(``),` -\f\r "&'/=>\``.split(``)],[`\0 -\f\r "&'/<=>`.split(``),`\0 -\f\r "&'/<=>\``.split(``)]],unquoted:[[` -\f\r &>`.split(``),`\0 -\f\r "&'<=>\``.split(``)],[`\0 -\f\r "&'<=>\``.split(``),`\0 -\f\r "&'<=>\``.split(``)]],single:[[`&'`.split(``),`"&'\``.split(``)],[`\0&'`.split(``),`\0"&'\``.split(``)]],double:[[`"&`.split(``),`"&'\``.split(``)],[`\0"&`.split(``),`\0"&'\``.split(``)]]};function e$(e,t,n,r){let i=r.schema,a=i.space===`svg`?!1:r.settings.omitOptionalTags,o=i.space===`svg`?r.settings.closeEmptyElements:r.settings.voids.includes(e.tagName.toLowerCase()),s=[],c;i.space===`html`&&e.tagName===`svg`&&(r.schema=AZ);let l=t$(r,e.properties),u=r.all(i.space===`html`&&e.tagName===`template`?e.content:e);return r.schema=i,u&&(o=!1),(l||!a||!JQ(e,t,n))&&(s.push(`<`,e.tagName,l?` `+l:``),o&&(i.space===`svg`||r.settings.closeSelfClosing)&&(c=l.charAt(l.length-1),(!r.settings.tightSelfClosing||c===`/`||c&&c!==`"`&&c!==`'`)&&s.push(` `),s.push(`/`)),s.push(`>`)),s.push(u),!o&&(!a||!MQ(e,t,n))&&s.push(``),s.join(``)}function t$(e,t){let n=[],r=-1,i;if(t){for(i in t)if(t[i]!==null&&t[i]!==void 0){let r=n$(e,i,t[i]);r&&n.push(r)}}for(;++rsU(n,e.alternative)&&(o=e.alternative),s=o+pQ(n,Object.assign({},e.settings.characterReferences,{subset:(o===`'`?$Q.single:$Q.double)[i][a],attribute:!0}))+o),c+(s&&`=`+s))}const r$=[`<`,`&`];function i$(e,t,n,r){return n&&n.type===`element`&&(n.tagName===`script`||n.tagName===`style`)?e.value:pQ(e.value,Object.assign({},r.settings.characterReferences,{subset:r$}))}function a$(e,t,n,r){return r.settings.allowDangerousHtml?e.value:i$(e,t,n,r)}function o$(e,t,n,r){return r.all(e)}const s$=wW(`type`,{invalid:c$,unknown:l$,handlers:{comment:_Q,doctype:vQ,element:e$,raw:a$,root:o$,text:i$}});function c$(e){throw Error("Expected node, not `"+e+"`")}function l$(e){throw Error("Cannot compile unknown node `"+e.type+"`")}const u$={},d$={},f$=[];function p$(e,t){let n=t||u$,r=n.quote||`"`,i=r===`"`?`'`:`"`;if(r!==`"`&&r!==`'`)throw Error("Invalid quote `"+r+"`, expected `'` or `\"`");return{one:m$,all:h$,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||GZ,characterReferences:n.characterReferences||d$,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space===`svg`?AZ:kZ,quote:r,alternative:i}.one(Array.isArray(e)?{type:`root`,children:e}:e,void 0,void 0)}function m$(e,t,n){return s$(e,t,n,this)}function h$(e){let t=[],n=e&&e.children||f$,r=-1;for(;++r`,``)}};function z$(){return e=>{qW(e,`element`,e=>{(e.tagName===`ul`||e.tagName===`ol`||e.tagName===`li`)&&(e.children=e.children.filter(e=>e.type!==`text`||!!e.value.trim()),delete e.properties.className)})}}function B$(){return e=>{qW(e,[`root`,`element`],e=>{if(!V$(e)||!e.children.some(e=>e.type===`raw`))return;let t=document.createElement(`template`);t.innerHTML=p$({type:`root`,children:e.children},{allowDangerousHtml:!0}),e.children=Array.from(t.content.childNodes).map(e=>O$(e))})}}function V$(e){return(e.type===`root`||e.type===`element`)&&e.children}function H$(e){let t=this,n={...t.data(`settings`),...e};t.parser=r;function r(e){return O$((n.fragment===!1?U$:W$)(e))}}function U$(e){return new DOMParser().parseFromString(e,`text/html`)}function W$(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}const G$=(function(e,t,n,r,i){let a=K$(t);if(n!=null&&(typeof n!=`number`||n<0||n===1/0))throw Error("Expected positive finite `index`");if(r!=null&&(!r.type||!r.children))throw Error("Expected valid `parent`");if(n==null!=(r==null))throw Error("Expected both `index` and `parent`");return Z$(e)?a.call(i,e,n,r):!1}),K$=(function(e){if(e==null)return X$;if(typeof e==`string`)return J$(e);if(typeof e==`object`)return q$(e);if(typeof e==`function`)return Y$(e);throw Error("Expected function, string, or array as `test`")});function q$(e){let t=[],n=-1;for(;++nl&&(l=e):e&&(l!==void 0&&l>-1&&c.push(` -`.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function N1(e,t,n){return e.type===`element`?P1(e,t,n):e.type===`text`?n.whitespace===`normal`?F1(e,n):I1(e):[]}function P1(e,t,n){let r=R1(e,n),i=e.children||[],a=-1,o=[];if(A1(e))return o;let s,c;for(E1(e)||k1(e)&&C1(t,e,k1)?c=` -`:O1(e)?(s=2,c=2):j1(e)&&(s=1,c=1);++a0;){let e=t.codePointAt(n-1);if(e!==void 0&&(e===10||e===13))n--;else break}return t.slice(0,n)}function U1(e,t){let n=t.children,r=-1,i,a;if(t.tagName===`pre`)for(;++r`};return e.patch(t,n),n}function G1(e,t){let n={type:`delete`,children:e.all(t)};return e.patch(t,n),n}function K1(e){let t=-1;if(e.length>1){for(;++t0&&o.push({type:`listItem`,spread:t.length>1,checked:null,children:t})}if(o.length>0){let n={type:`list`,ordered:!1,start:null,spread:K1(o),children:o};return e.patch(t,n),n}}function J1(e,t){let n=e.all({type:`root`,children:t}),r=e.toSpecificContent(n,Y1);return r.length===0?[]:r.length===1?r[0].children:[{type:`list`,ordered:!1,start:null,spread:K1(r),children:r}]}function Y1(){return{type:`listItem`,spread:!1,checked:null,children:[]}}function X1(e,t){let n={type:`emphasis`,children:e.all(t)};return e.patch(t,n),n}function Z1(e){let t=0,n=e.length;for(;tt&&e[n-1].type===`break`;)n--;return t===0&&n===e.length?e:e.slice(t,n)}function Q1(e,t){let n={type:`heading`,depth:Number(t.tagName.charAt(1))||1,children:Z1(e.all(t))};return e.patch(t,n),n}function $1(e,t){let n={type:`thematicBreak`};return e.patch(t,n),n}function e0(e,t){let n=t.properties||{},r=String(n.src||``),i=String(n.title||``);if(r&&i){let n={type:`link`,title:null,url:e.resolve(r),children:[{type:`text`,value:i}]};return e.patch(t,n),n}}function t0(e,t){let n=t.properties||{},r={type:`image`,url:e.resolve(String(n.src||``)||null),title:n.title?String(n.title):null,alt:n.alt?String(n.alt):``};return e.patch(t,r),r}function n0(e,t){let n={type:`inlineCode`,value:M1(t)};return e.patch(t,n),n}function r0(e,t){let n=[],r=[],i=t||e.properties||{},a=i0(e),o=Math.min(Number.parseInt(String(i.size),10),0)||(i.multiple?4:1),s=-1;for(;++s0?n:a,l=Math.min(c.length,o);for(s=-1;++s0&&(i.push(...t(a)),a=[]),i.push(n(e)))}return a.length>0&&(i.push(...t(a)),a=[]),i}function S0(e){let t=[],n=-1;for(;++n0){let r={type:`paragraph`,children:n};return e.patch(t,r),r}}const D0=[`"`];function O0(e,t){let n=e.options.quotes||D0;e.qNesting++;let r=e.all(t);e.qNesting--;let i=n[e.qNesting%n.length],a=r[0],o=r[r.length-1],s=i.charAt(0),c=i.length>1?i.charAt(1):i;return a&&a.type===`text`?a.value=s+a.value:r.unshift({type:`text`,value:s}),o&&o.type===`text`?o.value+=c:r.push({type:`text`,value:c}),r}function k0(e,t){let n=e.all(t);(e.options.document||v0(n))&&(n=y0(n));let r={type:`root`,children:n};return e.patch(t,r),r}function A0(e,t){let n=r0(t),r=-1,i=[];for(;++r0){let n={type:`text`,value:i.join(`, `)};return e.patch(t,n),n}}function j0(e,t){let n={type:`strong`,children:e.all(t)};return e.patch(t,n),n}function M0(e,t){let n={type:`tableCell`,children:e.all(t)};if(e.patch(t,n),t.properties){let e=t.properties.rowSpan,r=t.properties.colSpan;if(e||r){let t=n.data||={};e&&(t.hastUtilToMdastTemporaryRowSpan=e),r&&(t.hastUtilToMdastTemporaryColSpan=r)}}return n}function N0(e,t){let n={type:`tableRow`,children:e.toSpecificContent(e.all(t),P0)};return e.patch(t,n),n}function P0(){return{type:`tableCell`,children:[]}}function F0(e,t){if(e.inTable){let n={type:`text`,value:M1(t)};return e.patch(t,n),n}e.inTable=!0;let{align:n,headless:r}=I0(t),i=e.toSpecificContent(e.all(t),R0);r&&i.unshift(R0());let a=-1;for(;++a1||o>1){let e=a-1;for(;++eo&&(o=e.length)}for(a=-1;++a0&&(t.children.unshift(...i),i=[]),r.push(t);else{let e=t;i.push(e)}}if(i.length>0){let e=r[r.length-1];e||(e=t(),r.push(e)),e.children.push(...i),i=[]}return r;function o(e){return e.type===n.type}}const $0={};function e2(e,t){let n=nX(e),r=t||$0,i=v1({newlines:r.newlines===!0}),a=K0(r),o;i(n),qW(n,function(e){if(e&&e.type===`element`&&e.properties){let t=String(e.properties.id||``)||void 0;t&&!a.elementById.has(t)&&a.elementById.set(t,e)}});let s=a.one(n,void 0);return o=s?Array.isArray(s)?{type:`root`,children:s}:s:{type:`root`,children:[]},qW(o,function(e,t,n){if(e.type===`text`&&t!==void 0&&n){let r=n.children[t-1];if(r&&r.type===e.type)return r.value+=e.value,n.children.splice(t,1),r.position&&e.position&&(r.position.end=e.position.end),t-1;if(e.value=e.value.replace(/[\t ]*(\r?\n|\r)[\t ]*/,`$1`),n&&(n.type===`heading`||n.type===`paragraph`||n.type===`root`)&&(t||(e.value=e.value.replace(/^[\t ]+/,``)),t===n.children.length-1&&(e.value=e.value.replace(/[\t ]+$/,``))),!e.value)return n.children.splice(t,1),t}}),o}const t2={document:!0};function n2(e,t){return e&&`run`in e?async function(n,r){let i=e2(n,{...t2,...t});await e.run(i,r)}:function(t){return e2(t,{...t2,...e})}}function r2(e){let t=this;t.compiler=n;function n(n){return QG(n,{...t.data(`settings`),...e,extensions:t.data(`toMarkdownExtensions`)||[]})}}var i2=class{_processor;_keepRawTags=[];constructor(){this._buildProcessor()}keep(e){this._keepRawTags.push(e.toLowerCase()),this._buildProcessor()}parse(e){return this._processor.processSync(e).toString().trim()}_getRawTagsHandlers(){return this._keepRawTags.reduce((e,t)=>(e[t]=(e,t)=>{let n=p$(E$(t.tagName,t.properties),{allowDangerousHtml:!0,closeSelfClosing:!0}),r=n.indexOf(`>`),i=n.slice(0,r+1),a=n.slice(r+1);return[{type:`html`,value:i},...e.all(t),{type:`html`,value:a}]},e),{})}_buildProcessor(){this._processor=ZH().use(H$).use(a2).use(n2,{handlers:this._getRawTagsHandlers()}).use(oY,{singleTilde:!0}).use(QX).use(r2,{resourceLink:!0,emphasis:`_`,rule:`-`,handlers:{break:()=>` -`},unsafe:[{character:`<`}]})}};function a2(){return function(e){qW(e,`element`,(e,t,n)=>{t!==null&&e.tagName===`label`&&n.type===`element`&&n.tagName===`li`&&n.children.splice(t,1,...e.children)})}}var o2=class{_htmlDP;_markdown2html;_html2markdown;constructor(e){this._htmlDP=new Td(e),this._markdown2html=new R$,this._html2markdown=new i2}keepHtml(e){this._html2markdown.keep(e)}toView(e){let t=this._markdown2html.parse(e);return this._htmlDP.toView(t)}toData(e){let t=this._htmlDP.toData(e);return this._html2markdown.parse(t)}registerRawContentMatcher(e){this._htmlDP.registerRawContentMatcher(e)}useFillerType(){}},s2=class extends F{constructor(e){super(e),e.data.processor=new o2(e.data.viewDocument)}static get pluginName(){return`Markdown`}static get isOfficialPlugin(){return!0}};const c2=[`SPAN`,`BR`,`PRE`,`CODE`];var l2=class extends F{_gfmDataProcessor;constructor(e){super(e),this._gfmDataProcessor=new o2(e.data.viewDocument)}static get pluginName(){return`PasteFromMarkdownExperimental`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ClipboardPipeline`),r=!1;this.listenTo(t,`keydown`,(e,t)=>{r=t.shiftKey}),this.listenTo(n,`inputTransformation`,(e,t)=>{if(r)return;let n=t.dataTransfer.getData(`text/html`);if(!n){let e=t.dataTransfer.getData(`text/plain`);t.content=this._gfmDataProcessor.toView(e);return}let i=this._parseMarkdownFromHtml(n);i&&(t.content=this._gfmDataProcessor.toView(i))})}_parseMarkdownFromHtml(e){let t=this._removeOsSpecificTags(e);if(!this._containsOnlyAllowedFirstLevelTags(t))return null;let n=this._removeFirstLevelWrapperTagsAndBrs(t);return this._containsAnyRemainingHtmlTags(n)?null:this._replaceHtmlReservedEntitiesWithCharacters(n)}_removeOsSpecificTags(e){return e.replace(/^]*>/,``).trim().replace(/^/,``).replace(/<\/html>$/,``).trim().replace(/^/,``).replace(/<\/body>$/,``).trim().replace(/^/,``).replace(/$/,``).trim()}_containsOnlyAllowedFirstLevelTags(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`);return Array.from(t.children).map(e=>e.tagName).every(e=>c2.includes(e))}_removeFirstLevelWrapperTagsAndBrs(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`),n=t.querySelectorAll(`br`);for(let e of n)e.replaceWith(` -`);let r=t.querySelectorAll(`:scope > *`);for(let e of r){let t=e.cloneNode(!0);e.replaceWith(...t.childNodes)}return t.innerHTML}_containsAnyRemainingHtmlTags(e){return e.includes(`<`)}_replaceHtmlReservedEntitiesWithCharacters(e){return e.replace(/>/g,`>`).replace(/</g,`<`).replace(/ /g,` `)}};function u2(e,t){let n=(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=r.attributeNewValue,o=i.writer,s=i.mapper.toViewElement(r.item),c=[...s.getChildren()].find(e=>e.getCustomProperty(`media-content`));o.remove(c);let l=e.getMediaViewElement(o,a,t);o.insert(o.createPositionAt(s,0),l)};return e=>{e.on(`attribute:url:media`,n)}}function d2(e,t,n){return t.setCustomProperty(`media`,!0,e),UE(e,t,{label:n})}function f2(e){let t=e.getSelectedElement();return t&&p2(t)?t:null}function p2(e){return!!e.getCustomProperty(`media`)&&HE(e)}function m2(e,t,n,r){return e.createContainerElement(`figure`,{class:`media`},[t.getMediaViewElement(e,n,r),e.createSlot()])}function h2(e){let t=e.getSelectedElement();return t&&t.is(`element`,`media`)?t:null}function g2(e,t,n,r){e.change(i=>{let a=i.createElement(`media`,{url:t});e.insertObject(a,n,null,{setSelection:`on`,findOptimalPosition:r?`auto`:void 0})})}var _2=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=h2(t);this.value=n?n.getAttribute(`url`):void 0,this.isEnabled=y2(t)||v2(t,e)}execute(e){let t=this.editor.model,n=t.document.selection,r=h2(n);r?t.change(t=>{t.setAttribute(`url`,e,r)}):g2(t,e,n,!0)}};function v2(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!t.schema.isLimit(n)&&(n=n.parent),t.schema.checkChild(n,`media`)}function y2(e){let t=e.getSelectedElement();return!!t&&t.name===`media`}var b2=class{locale;providerDefinitions;constructor(e,t){let n=t.providers,r=t.extraProviders||[],i=new Set(t.removeProviders),a=n.concat(r).filter(e=>{let t=e.name;return t?!i.has(t):(T(`media-embed-no-provider-name`,{provider:e}),!1)});this.locale=e,this.providerDefinitions=a}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,n){return this._getMedia(t).getViewElement(e,n)}_getMedia(e){if(!e)return new x2(this.locale);e=e.trim();for(let t of this.providerDefinitions){let n=t.html,r=A(t.url);for(let t of r){let r=this._getUrlMatches(e,t);if(r)return new x2(this.locale,e,r,n)}}return null}_getUrlMatches(e,t){let n=e.match(t);if(n)return n;let r=e.replace(/^https?:\/\//,``);return n=r.match(t),n||(r=r.replace(/^www\./,``),n=r.match(t),n)?n:null}},x2=class{url;_locale;_match;_previewRenderer;constructor(e,t,n,r){this.url=this._getValidUrl(t),this._locale=e,this._match=n,this._previewRenderer=r}getViewElement(e,t){let n={},r;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(n[`data-oembed-url`]=this.url),t.renderForEditingView&&(n.class=`ck-media__wrapper`);let i=this._getPreviewHtml(t);r=e.createRawElement(`div`,n,(e,t)=>{t.setContentOf(e,i)})}else this.url&&(n.url=this.url),r=e.createEmptyElement(t.elementName,n);return e.setCustomProperty(`media-content`,!0,r),r}_getPreviewHtml(e){return this._previewRenderer?this._previewRenderer(this._match):this.url&&e.renderForEditingView?this._getPlaceholderHtml():``}_getPlaceholderHtml(){let e=new Ly,t=this._locale.t;return e.content=fv,e.viewBox=`0 0 64 42`,new ga({tag:`div`,attributes:{class:`ck ck-reset_all ck-media__placeholder`},children:[{tag:`div`,attributes:{class:`ck-media__placeholder__icon`},children:[e]},{tag:`a`,attributes:{class:`ck-media__placeholder__url`,target:`_blank`,rel:`noopener noreferrer`,href:this.url,"data-cke-tooltip-text":t(`Open media in new tab`)},children:[{tag:`span`,attributes:{class:`ck-media__placeholder__url__text`},children:[this.url]}]}]}).render().outerHTML}_getValidUrl(e){return e?e.match(/^https?/)?e:`https://`+e:null}},S2=class extends F{static get pluginName(){return`MediaEmbedEditing`}static get isOfficialPlugin(){return!0}registry;constructor(e){super(e),e.config.define(`mediaEmbed`,{elementName:`oembed`,providers:[{name:`dailymotion`,url:[/^dailymotion\.com\/video\/(\w+)/,/^dai.ly\/(\w+)/],html:e=>`
    `},{name:`spotify`,url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>{let t=e[1],n=t.startsWith(`track/`);return`
    `}},{name:`youtube`,url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)(?:&t=(\d+))?/,/^(?:m\.)?youtube\.com\/shorts\/([\w-]+)(?:\?t=(\d+))?/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)(?:\?t=(\d+))?/,/^youtube\.com\/embed\/([\w-]+)(?:\?start=(\d+))?/,/^youtu\.be\/([\w-]+)(?:\?t=(\d+))?/],html:e=>{let t=e[1],n=e[2];return`
    `}},{name:`vimeo`,url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>`
    `},{name:`instagram`,url:[/^instagram\.com\/p\/(\w+)/,/^instagram\.com\/reel\/(\w+)/]},{name:`twitter`,url:[/^twitter\.com/,/^x\.com/]},{name:`googleMaps`,url:[/^google\.com\/maps/,/^goo\.gl\/maps/,/^maps\.google\.com/,/^maps\.app\.goo\.gl/]},{name:`flickr`,url:/^flickr\.com/},{name:`facebook`,url:/^facebook\.com/}]}),this.registry=new b2(e.locale,e.config.get(`mediaEmbed`))}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion,i=e.config.get(`mediaEmbed.previewsInData`),a=e.config.get(`mediaEmbed.elementName`),o=this.registry;e.commands.add(`mediaEmbed`,new _2(e)),t.register(`media`,{inheritAllFrom:`$blockObject`,allowAttributes:[`url`]}),r.for(`dataDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>{let n=e.getAttribute(`url`);return m2(t,o,n,{elementName:a,renderMediaPreview:!!n&&i})}}),r.for(`dataDowncast`).add(u2(o,{elementName:a,renderMediaPreview:i})),r.for(`editingDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>d2(m2(t,o,e.getAttribute(`url`),{elementName:a,renderForEditingView:!0}),t,n(`media widget`))}),r.for(`editingDowncast`).add(u2(o,{elementName:a,renderForEditingView:!0})),r.for(`upcast`).elementToElement({view:e=>[`oembed`,a].includes(e.name)&&e.getAttribute(`url`)?{name:!0}:null,model:(e,{writer:t})=>{let n=e.getAttribute(`url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).elementToElement({view:{name:`div`,attributes:{"data-oembed-url":!0}},model:(e,{writer:t})=>{let n=e.getAttribute(`data-oembed-url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).add(e=>{e.on(`element:figure`,(e,t,n)=>{if(!n.consumable.consume(t.viewItem,{name:!0,classes:`media`}))return;let{modelRange:r,modelCursor:i}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=r,t.modelCursor=i,j(r.getItems())||n.consumable.revert(t.viewItem,{name:!0,classes:`media`})})})}};const C2=/^(?:http(s)?:\/\/)?[\w-]+\.[\w-.~:/?#[\]@!$&'()*+,;=%]+$/;var w2=class extends F{static get requires(){return[PO,hT,Ik]}static get pluginName(){return`AutoMediaEmbed`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedMediaBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedMediaBetweenPositions(e,t){let n=this.editor,r=n.plugins.get(S2).registry,i=new xl(e,t),a=i.getWalker({ignoreElementEnd:!0}),o=``;for(let e of a)e.item.is(`$textProxy`)&&(o+=e.item.data);if(o=o.trim(),!o.match(C2)){i.detach();return}if(!r.hasMedia(o)){i.detach();return}if(!n.commands.get(`mediaEmbed`).isEnabled){i.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=u.window.setTimeout(()=>{n.model.change(e=>{this._timeoutId=null,e.remove(i),i.detach();let t=null;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert),g2(n.model,o,t,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(hT).requestUndoOnBackspace()},100)}},T2=class extends P{focusTracker;keystrokes;urlInputView;_validators;_urlInputViewInfoDefault;_urlInputViewInfoTip;constructor(e,t){super(t),this.focusTracker=new M,this.keystrokes=new N,this.set(`mediaURLInputValue`,``),this.urlInputView=this._createUrlInput(),this._validators=e,this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-media-form`,`ck-responsive-form`],tabindex:`-1`},children:[this.urlInputView]})}render(){super.render(),Qa({view:this}),this.focusTracker.add(this.urlInputView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.urlInputView.focus()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.value=e.trim()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx),n=t.fieldView;return this._urlInputViewInfoDefault=e(`Paste the media URL in the input.`),this._urlInputViewInfoTip=e(`Tip: Paste the URL into the content to embed faster.`),t.label=e(`Media URL`),t.infoText=this._urlInputViewInfoDefault,n.inputMode=`url`,n.on(`input`,()=>{t.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),t}},E2=class extends F{static get requires(){return[S2,Qy]}static get pluginName(){return`MediaEmbedUI`}static get isOfficialPlugin(){return!0}_formView;init(){let e=this.editor;e.ui.componentFactory.add(`mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(H);return t.tooltip=!0,t.label=e(`Insert media`),t}),e.ui.componentFactory.add(`menuBar:mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(U);return t.label=e(`Media`),t})}_createDialogButton(e){let t=this.editor,n=new e(t.locale),r=t.commands.get(`mediaEmbed`),i=this.editor.plugins.get(`Dialog`);return n.icon=pv,n.bind(`isEnabled`).to(r,`isEnabled`),n.on(`execute`,()=>{i.id===`mediaEmbed`?i.hide():this._showDialog()}),n}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.commands.get(`mediaEmbed`),r=e.locale.t,i=n.value!==void 0;if(!this._formView){let t=e.plugins.get(S2).registry;this._formView=new(Xa(T2))(D2(e.t,t),e.locale),this._formView.on(`submit`,()=>this._handleSubmitForm())}t.show({id:`mediaEmbed`,title:r(`Media embed`),content:this._formView,isModal:!0,onShow:()=>{this._formView.url=n.value||``,this._formView.resetFormStatus(),this._formView.urlInputView.fieldView.select()},actionButtons:[{label:r(`Cancel`),withText:!0,onExecute:()=>t.hide()},{label:r(i?`Save`:`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSubmitForm()}]})}_handleSubmitForm(){let e=this.editor,t=e.plugins.get(`Dialog`);this._formView.isValid()&&(e.execute(`mediaEmbed`,this._formView.url),t.hide(),e.editing.view.focus())}};function D2(e,t){return[t=>{if(!t.url.length)return e(`The URL must not be empty.`)},n=>{if(!t.hasMedia(n.url))return e(`This media URL is not supported.`)}]}var O2=class extends F{static get requires(){return[S2,E2,w2,xD]}static get pluginName(){return`MediaEmbed`}static get isOfficialPlugin(){return!0}};const k2={alignLeft:{name:`alignLeft`,title:`Left aligned media`,icon:xv,className:`media-style-align-left`},alignBlockLeft:{name:`alignBlockLeft`,title:`Left aligned media`,icon:wv,className:`media-style-block-align-left`},alignCenter:{name:`alignCenter`,title:`Centered media`,icon:yv,isDefault:!0},alignBlockRight:{name:`alignBlockRight`,title:`Right aligned media`,icon:Tv,className:`media-style-block-align-right`},alignRight:{name:`alignRight`,title:`Right aligned media`,icon:Sv,className:`media-style-align-right`}},A2={inlineLeft:xv,left:wv,center:yv,right:Tv,inlineRight:Sv},j2=[{name:`mediaEmbed:wrapText`,title:`Wrap text`,items:[`mediaEmbed:alignLeft`,`mediaEmbed:alignRight`],defaultItem:`mediaEmbed:alignLeft`},{name:`mediaEmbed:breakText`,title:`Break text`,items:[`mediaEmbed:alignBlockLeft`,`mediaEmbed:alignCenter`,`mediaEmbed:alignBlockRight`],defaultItem:`mediaEmbed:alignCenter`}];function M2(e){return(e.options||[]).map(e=>N2(e)).filter(e=>P2(e))}function N2(e){let t=typeof e==`string`?{name:e}:e,n={...k2[t.name],...t};return typeof n.icon==`string`&&A2[n.icon]&&(n.icon=A2[n.icon]),n}function P2(e){return!e.name||!e.title||!e.icon||!e.isDefault&&!e.className?(F2({style:e}),!1):!0}function F2(e){T(`media-style-configuration-definition-invalid`,e)}function I2(e){return typeof e==`object`&&!!e&&typeof e.defaultItem==`string`}var L2=class extends F{static get requires(){return[kD]}static get pluginName(){return`MediaEmbedToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t;e.plugins.get(kD).register(`mediaEmbed`,{ariaLabel:t(`Media toolbar`),items:R2(e.ui.componentFactory,e.config.get(`mediaEmbed.toolbar`)||[]),getRelatedElement:f2})}};function R2(e,t){return t.map(e=>I2(e)?e.name:e).filter(t=>typeof t!=`string`||!t.startsWith(`mediaEmbed:`)||e.has(t))}var z2=class extends I{refresh(){let e=h2(this.editor.model.document.selection);this.isEnabled=!!e,!e||!e.hasAttribute(`resizedWidth`)?this.value=null:this.value=e.getAttribute(`resizedWidth`)}execute(e){let t=this.editor.model,n=h2(t.document.selection);n&&t.change(t=>{t.setAttribute(`resizedWidth`,e.width,n)})}};const B2=`media_resized`;var V2=class extends F{static get requires(){return[S2]}static get pluginName(){return`MediaEmbedResizeEditing`}static get licenseFeatureCode(){return`MER`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`mediaEmbed`,{resizeUnit:`%`,resizeOptions:[{name:`resizeMediaEmbed:original`,value:null,icon:`original`},{name:`resizeMediaEmbed:custom`,value:`custom`,icon:`custom`},{name:`resizeMediaEmbed:25`,value:`25`,icon:`small`},{name:`resizeMediaEmbed:50`,value:`50`,icon:`medium`},{name:`resizeMediaEmbed:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor;e.commands.add(`resizeMediaEmbed`,new z2(e)),this._registerConverters()}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;e.extend(`media`,{allowAttributes:[`resizedWidth`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0})}_registerConverters(){let e=this.editor;e.conversion.for(`downcast`).add(e=>e.on(`attribute:resizedWidth:media`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(B2,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(B2,i))})),e.conversion.for(`upcast`).attributeToAttribute({view:{name:`figure`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>e.hasClass(`media`)?e.getStyle(`width`):null}}),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[B2]})})})}},H2=class extends F{static get requires(){return[GD]}static get pluginName(){return`MediaEmbedResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.model,n=e.plugins.get(GD);this.listenTo(t.document,`change:data`,()=>{for(let r of t.document.differ.getChanges()){if(r.type!==`insert`||r.name===`$text`)continue;let i=t.createRange(r.position,r.position.getShiftedBy(r.length));for(let t of i.getItems()){if(!t.is(`element`,`media`))continue;let r=e.editing.mapper.toViewElement(t);r&&(n.getResizerByViewElement(r)||this._attachResizer(t,r))}}},{priority:`low`})}_attachResizer(e,t){let n=this.editor,r=n.editing.view,i=n.plugins.get(GD).attachTo({unit:n.config.get(`mediaEmbed.resizeUnit`),modelElement:e,viewElement:t,editor:n,getHandleHost:e=>e.querySelector(`.ck-media__wrapper`),getResizeHost:e=>e,onCommit:e=>{r.change(e=>e.removeClass(B2,t)),n.execute(`resizeMediaEmbed`,{width:e})}});i.bind(`isEnabled`).to(this),i.on(`updateSize`,()=>{t.hasClass(`media_resized`)||r.change(e=>e.addClass(B2,t))}),r.once(`render`,()=>i.redraw())}};const U2={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var W2=class extends F{static get requires(){return[V2]}static get pluginName(){return`MediaEmbedResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`mediaEmbed.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`mediaEmbed.resizeOptions`),n=e.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerMediaEmbedResizeButton(e);this._registerMediaEmbedResizeDropdown(t)}_registerMediaEmbedResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeMediaEmbed`),s=this._getOptionLabelValue(e,!0);if(!U2[i])throw new w(`mediaembedresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:U2[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let e=t.plugins.get(`MediaEmbedCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,K2(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeMediaEmbed`,{width:e})})}return a})}_registerMediaEmbedResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value);t.ui.componentFactory.add(`resizeMediaEmbed`,i=>{let a=t.commands.get(`resizeMediaEmbed`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize media`);return s.set({tooltip:c,commandValue:r?r.value:null,icon:U2.medium,isToggleable:!0,label:r?this._getOptionLabelValue(r):``,withText:!0,class:`ck-resize-media-embed-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e||(r?this._getOptionLabelValue(r):``)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Media resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o})}_getOptionLabelValue(e,t=!1){let n=this.editor.t;if(e.label)return e.label;let r=G2(e);return t?r?n(`Custom media size`):e.value?n(`Resize media to %0`,e.value+this._resizeUnit):n(`Resize media to the original size`):r?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>G2(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let r=n.plugins.get(`MediaEmbedCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,q2(o))}else a={type:`button`,model:new RC({commandName:`resizeMediaEmbed`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,K2(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function G2(e){return e.value===`custom`}function K2(e){return(t,n)=>t===void 0||!n?!1:t===e}function q2(e){return(t,n)=>!e.some(e=>K2(e)(t,n))}function J2(e){let{editing:t}=e,n=h2(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function Y2(e,t){let n=J2(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}function X2(e,t){let n=J2(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var Z2=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-media-embed-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Media Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize media (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({min:.1,step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}},Q2=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`MediaEmbedCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`);let n=Xa(Z2);this._form=new n(t.locale,e,e4(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeMediaEmbed`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:$2(t)});let r=Y2(t,e),i=r?r.value.toFixed(1):``,a=X2(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function $2(e){let t=e.editing.view,n=ab.defaultPositions;return{target:t.domConverter.mapViewToDom(f2(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}function e4(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var t4=class extends F{static get requires(){return[V2,H2,Q2,W2]}static get pluginName(){return`MediaEmbedResize`}static get isOfficialPlugin(){return!0}},n4=class extends I{_styles;_defaultStyleName;constructor(e,t){super(e),this._styles=new Map(t.map(e=>[e.name,e]));let n=t.find(e=>e.isDefault);this._defaultStyleName=n?n.name:null}refresh(){let e=h2(this.editor.model.document.selection);if(this.isEnabled=!!e,!e)this.value=!1;else if(e.hasAttribute(`mediaStyle`)){let t=e.getAttribute(`mediaStyle`);this.value=this._styles.has(t)?t:this._defaultStyleName??!1}else this.value=this._defaultStyleName??!1}execute(e){let t=this.editor.model,n=h2(t.document.selection),r=e.value;if(!r||this._styles.get(r)?.isDefault){t.change(e=>{e.removeAttribute(`mediaStyle`,n)});return}this._styles.has(r)&&t.change(e=>{e.setAttribute(`mediaStyle`,r,n)})}},r4=class extends F{normalizedStyles;static get requires(){return[S2]}static get pluginName(){return`MediaEmbedStyleEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema;e.config.define(`mediaEmbed.styles`,{options:Object.keys(k2)}),this.normalizedStyles=M2(e.config.get(`mediaEmbed.styles`)),t.extend(`media`,{allowAttributes:[`mediaStyle`]}),t.setAttributeProperties(`mediaStyle`,{isFormatting:!0}),e.commands.add(`mediaStyle`,new n4(e,this.normalizedStyles)),this._registerConverters()}_registerConverters(){let e=this.editor,t=new Map(this.normalizedStyles.filter(e=>!e.isDefault&&e.className).map(e=>[e.name,e.className]));e.conversion.for(`downcast`).add(e=>e.on(`attribute:mediaStyle:media`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=t.get(n.attributeOldValue),s=t.get(n.attributeNewValue);o&&a.removeClass(o,i),s&&a.addClass(s,i)})),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,n,r)=>{if(!n.modelRange)return;let i=j(n.modelRange.getItems());if(!(!i||!i.is(`element`,`media`)))for(let[e,a]of t)r.consumable.consume(n.viewItem,{classes:a})&&r.writer.setAttribute(`mediaStyle`,e,i)},{priority:`low`})})}},i4=class extends F{static get requires(){return[r4]}static get pluginName(){return`MediaEmbedStyleUI`}static get isOfficialPlugin(){return!0}init(){let e=this._getLocalizedTitles();for(let t of this._getButtonDefinitions(e))this._createButton(t);for(let t of this._getDropdownDefinitions(e))this._createDropdown(t)}_getButtonDefinitions(e){return this.editor.plugins.get(r4).normalizedStyles.map(t=>({name:t.name,label:e[t.title]||t.title,icon:t.icon}))}_getLocalizedTitles(){let e=this.editor.t;return{"Left aligned media":e(`Left aligned media`),"Centered media":e(`Centered media`),"Right aligned media":e(`Right aligned media`),"Wrap text":e(`Wrap text`),"Break text":e(`Break text`)}}_getDropdownDefinitions(e){let t=this.editor.plugins.get(r4),n=new Set(t.normalizedStyles.map(({name:e})=>`mediaEmbed:${e}`)),r=[],i=(t,i)=>{let a=t.items.filter(e=>n.has(e));if(i&&a.length!==t.items.length&&s4({dropdown:t}),a.length<2)return;let o=n.has(t.defaultItem)?t.defaultItem:a[0];r.push({name:t.name,title:e[t.title]||t.title,items:a,defaultItem:o})};for(let e of j2)i(e,!1);for(let e of this._collectCustomDropdowns())i(e,!0);return r}_collectCustomDropdowns(){return(this.editor.config.get(`mediaEmbed.toolbar`)||[]).filter(e=>I2(e)&&o4(e))}_createButton(e){let t=this.editor,n=`mediaEmbed:${e.name}`;t.ui.componentFactory.add(n,n=>{let r=t.commands.get(`mediaStyle`),i=new H(n);return i.set({label:e.label,icon:e.icon,tooltip:!0,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,t=>t===e.name),i.on(`execute`,()=>{t.execute(`mediaStyle`,{value:e.name}),t.editing.view.focus()}),i})}_createDropdown(e){let t=this.editor,n=t.ui.componentFactory;n.add(e.name,r=>{let i=e.items.map(e=>n.create(e)),a=i[e.items.indexOf(e.defaultItem)],o=(...e)=>{let t=e.findIndex(Boolean);return t<0?a:i[t]},s=Nx(r,Mx),c=s.buttonView;return Fx(s,i,{enableActiveItemFocusOnDropdownOpen:!0}),c.set({label:a4(e.title,a.label),class:null,tooltip:!0}),c.arrowView.unbind(`label`),c.arrowView.set({label:e.title}),c.bind(`icon`).toMany(i,`isOn`,(...e)=>o(...e).icon),c.bind(`label`).toMany(i,`isOn`,(...t)=>a4(e.title,o(...t).label)),c.bind(`isOn`).toMany(i,`isOn`,(...e)=>e.some(Boolean)),c.bind(`class`).toMany(i,`isOn`,(...e)=>e.some(Boolean)?`ck-splitbutton_flatten`:void 0),this.listenTo(c,`execute`,()=>{i.some(({isOn:e})=>e)?s.isOpen=!s.isOpen:a.fire(`execute`)}),s.bind(`isEnabled`).toMany(i,`isEnabled`,(...e)=>e.some(Boolean)),this.listenTo(s,`execute`,()=>{t.editing.view.focus()}),s})}};function a4(e,t){return`${e}: ${t}`}function o4(e){let t=e.name.startsWith(`mediaEmbed:`)&&typeof e.title==`string`&&e.title.length>0&&e.items.length>0&&e.items.every(e=>typeof e==`string`&&e.startsWith(`mediaEmbed:`))&&e.items.includes(e.defaultItem);return t||s4({dropdown:e}),t}function s4(e){T(`media-style-configuration-definition-invalid`,e)}var c4=class extends F{static get requires(){return[r4,i4]}static get pluginName(){return`MediaEmbedStyle`}static get isOfficialPlugin(){return!0}};const l4=Wr(`px`);var u4=class extends NC{_options;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`top`,0),this.set(`height`,0),this._options=t,this.extendTemplate({attributes:{tabindex:-1,"aria-hidden":`true`,class:[`ck-minimap__iframe`],style:{top:n.to(`top`,e=>l4(e)),height:n.to(`height`,e=>l4(e))}}})}render(){return super.render().then(()=>{this._prepareDocument()})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}_prepareDocument(){let e=this.element.contentWindow.document,t=e.adoptNode(this._options.domRootClone),n=this._options.useSimplePreview?` - .ck.ck-editor__editable_inline img { - filter: contrast( 0 ); - } - - p, li, a, figcaption, span { - background: hsl(0, 0%, 80%) !important; - color: hsl(0, 0%, 80%) !important; - } - - h1, h2, h3, h4 { - background: hsl(0, 0%, 60%) !important; - color: hsl(0, 0%, 60%) !important; - } - `:``,r=` - - - - ${this._options.pageStyles.map(e=>typeof e==`string`?``:``).join(` -`)} - - - - `;e.open(),e.write(r),e.close(),e.body.appendChild(t)}};const d4=Wr(`px`);var f4=class extends P{constructor(e){super(e);let t=this.bindTemplate;this.set(`height`,0),this.set(`top`,0),this.set(`scrollProgress`,0),this.set(`_isDragging`,!1),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap__position-tracker`,t.if(`_isDragging`,`ck-minimap__position-tracker_dragging`)],style:{top:t.to(`top`,e=>d4(e)),height:t.to(`height`,e=>d4(e))},"data-progress":t.to(`scrollProgress`)},on:{mousedown:t.to(()=>{this._isDragging=!0})}})}render(){super.render(),this.listenTo(u.document,`mousemove`,(e,t)=>{this._isDragging&&this.fire(`drag`,t.movementY)},{useCapture:!0}),this.listenTo(u.document,`mouseup`,()=>{this._isDragging=!1},{useCapture:!0})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}setScrollProgress(e){this.scrollProgress=e}},p4=class extends P{_positionTrackerView;_scaleRatio;_minimapIframeView;constructor({locale:e,scaleRatio:t,pageStyles:n,extraClasses:r,useSimplePreview:i,domRootClone:a}){super(e);let o=this.bindTemplate;this._positionTrackerView=new f4(e),this._positionTrackerView.delegate(`drag`).to(this),this._scaleRatio=t,this._minimapIframeView=new u4(e,{useSimplePreview:i,pageStyles:n,extraClasses:r,scaleRatio:t,domRootClone:a}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap`]},children:[this._positionTrackerView],on:{click:o.to(this._handleMinimapClick.bind(this)),wheel:o.to(this._handleMinimapMouseWheel.bind(this))}})}destroy(){this._minimapIframeView.destroy(),super.destroy()}get height(){return new O(this.element).height}get scrollHeight(){return Math.max(0,Math.min(this.height,this._minimapIframeView.height)-this._positionTrackerView.height)}render(){super.render(),this._minimapIframeView.render(),this.element.appendChild(this._minimapIframeView.element)}setContentHeight(e){this._minimapIframeView.setHeight(e*this._scaleRatio)}setScrollProgress(e){let t=this._minimapIframeView,n=this._positionTrackerView;if(t.heighta.markToSync(`children`,t)),r.on(`change:attributes`,(e,t)=>a.markToSync(`attributes`,t)),r.on(`change:text`,(e,t)=>a.markToSync(`text`,t)),a.render(),e.editing.view.on(`render`,()=>a.render()),e.on(`destroy`,()=>{i.unbindDomElement(o)}),o}function h4(){return Array.from(u.document.styleSheets).map(e=>e.href&&!e.href.startsWith(u.window.location.origin)?{href:e.href}:Array.from(e.cssRules).filter(e=>!(e instanceof CSSMediaRule)).map(e=>e.cssText).join(` -`))}function g4(e){return new O(e===u.document.body?u.window:e)}function _4(e){return e===u.document.body?u.window.innerHeight:e.clientHeight}function v4(e){return e===u.document.body?u.window:e}var y4=class extends F{static get pluginName(){return`Minimap`}static get isOfficialPlugin(){return!0}_minimapView;_scrollableRootAncestor;_editingRootElement;init(){let e=this.editor;this._minimapView=null,this._scrollableRootAncestor=null,this.listenTo(e.ui,`ready`,this._onUiReady.bind(this))}destroy(){super.destroy(),this._minimapView.destroy(),this._minimapView.element.remove()}_onUiReady(){let e=this.editor,t=this._editingRootElement=e.ui.getEditableElement();if(this._scrollableRootAncestor=wr(t),!t.ownerDocument.body.contains(t)){e.ui.once(`update`,this._onUiReady.bind(this));return}this._initializeMinimapView(),this.listenTo(e.editing.view,`render`,()=>{e.state===`ready`&&this._syncMinimapToEditingRootScrollPosition()}),this._syncMinimapToEditingRootScrollPosition()}_initializeMinimapView(){let e=this.editor,t=e.locale,n=e.config.get(`minimap.useSimplePreview`),r=e.config.get(`minimap.container`),i=this._scrollableRootAncestor,a=g4(this._editingRootElement).width,o=g4(r).width/a,s=this._minimapView=new p4({locale:t,scaleRatio:o,pageStyles:h4(),extraClasses:e.config.get(`minimap.extraClasses`),useSimplePreview:n,domRootClone:m4(e)});s.render(),s.listenTo(u.document,`scroll`,(e,t)=>{if(i===u.document.body){if(t.target!==u.document)return}else if(t.target!==i)return;this._syncMinimapToEditingRootScrollPosition()},{useCapture:!0,usePassive:!0}),s.listenTo(u.window,`resize`,()=>{this._syncMinimapToEditingRootScrollPosition()}),s.on(`drag`,(e,t)=>{let n;n=s.scrollHeight===0?0:t/s.scrollHeight;let r=n*(i.scrollHeight-_4(i));v4(i).scrollBy(0,Math.round(r))}),s.on(`click`,(e,t)=>{let n=t*i.scrollHeight;v4(i).scrollBy(0,Math.round(n))}),r.appendChild(s.element)}_syncMinimapToEditingRootScrollPosition(){let e=this._editingRootElement,t=this._minimapView;t.setContentHeight(e.offsetHeight);let n=g4(e),r=g4(this._scrollableRootAncestor),i;r.getIntersection(n)&&(r.contains(n)||n.top>r.top?i=0:(i=(n.top-r.top)/(r.height-n.height),i=Math.max(0,Math.min(i,1))),t.setPositionTrackerHeight(r.getIntersection(n).height),t.setScrollProgress(i))}},b4=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=x4(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`pageBreak`);e.insertObject(n,null,null,{setSelection:`after`})})}};function x4(e,t,n){let r=S4(e,n);return t.checkChild(r,`pageBreak`)}function S4(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var C4=class extends F{static get pluginName(){return`PageBreakEditing`}static get licenseFeatureCode(){return`PB`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`pageBreak`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>t.createContainerElement(`div`,{class:`page-break`,style:`page-break-after: always`},t.createContainerElement(`span`,{style:`display: none`}))}),r.for(`editingDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>{let r=n(`Page break`),i=t.createContainerElement(`div`),a=t.createRawElement(`span`,{class:`page-break__label`},function(e){e.innerText=n(`Page break`)});return t.addClass(`page-break`,i),t.insert(t.createPositionAt(i,0),a),w4(i,t,r)}}),r.for(`upcast`).elementToElement({view:e=>{let t=e.getStyle(`page-break-before`)==`always`,n=e.getStyle(`page-break-after`)==`always`;if(!t&&!n)return null;if(e.childCount==1){let t=e.getChild(0);if(!t.is(`element`,`span`)||t.getStyle(`display`)!=`none`)return null}else if(e.childCount>1)return null;return{name:!0,styles:[...t?[`page-break-before`]:[],...n?[`page-break-after`]:[]],...e.hasClass(`page-break`)&&{classes:[`page-break`]}}},model:`pageBreak`,converterPriority:`high`}),e.commands.add(`pageBreak`,new b4(e))}};function w4(e,t,n){return t.setCustomProperty(`pageBreak`,!0,e),UE(e,t,{label:n})}var T4=class extends F{static get pluginName(){return`PageBreakUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`pageBreak`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:pageBreak`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`pageBreak`),i=new e(t.locale),a=n.t;return i.set({label:a(`Page break`),icon:Mv}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`pageBreak`),t.editing.view.focus()}),i}},E4=class extends F{static get requires(){return[C4,T4,xD]}static get pluginName(){return`PageBreak`}static get isOfficialPlugin(){return!0}};function D4(e,t){let n=[];for(let r of t.createRangeIn(e)){let e=r.item;e.is(`element`,`a`)&&!e.hasAttribute(`href`)&&(e.hasAttribute(`id`)||e.hasAttribute(`name`))&&n.push(e)}for(let e of n){let n=e.parent.getChildIndex(e)+1,r=e.getChildren();t.insertChild(n,r,e.parent),O4(e)&&t.remove(e)}}function O4(e){let t=e.getAttribute(`name`);return!!t&&t.startsWith(`_`)}function k4(e){let t=parseFloat(e);return e.endsWith(`pt`)?j4(t*96/72):e.endsWith(`pc`)?j4(t*12*96/72):e.endsWith(`in`)?j4(t*96):e.endsWith(`cm`)?j4(t*96/2.54):e.endsWith(`mm`)?j4(t/10*96/2.54):e}function A4(e){return e!==void 0&&e.endsWith(`px`)}function j4(e){return Math.round(e)+`px`}function M4(e,t,n,r=!1){if(!e.childCount)return;let i=new Np(e.document),a=L4(e,i);if(!a.length)return;let o=[],s=[],c=P4();for(let e of a)if(e.indent!==void 0){R4(e)||(F4(i,s,c),c=P4(),o.length=1,s.length=0);let a=`${e.id}:${e.indent}`,l=r?e.indent-1:Math.min(e.indent-1,s.length);l0&&(F4(i,s,c),c=P4()),o.length=l,s.length=l),ls.length-1||s[l].listElement.name!=u.type){u.type==`ol`&&e.id!==void 0&&o[l]&&o[l][a]&&(u.startIndex=o[l][a]);let t=G4(u,i,n);if(s.length==0){let n=e.element.parent,r=n.getChildIndex(e.element)+1;i.insertChild(r,t,n)}else if(l==0){let e=s[0].listElement,n=e.parent,r=n.getChildIndex(e)+1;i.insertChild(r,t,n)}else{let e=s[l-1].listItemElements;i.appendChild(t,e[e.length-1])}s[l]={...e,listElement:t,listItemElements:[]},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1)}else s[l].isIntermediate&&(K4(s[l].listElement,u,i,n),s[l]={...e,listElement:s[l].listElement,listItemElements:s[l].listItemElements},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1));let d=e.element.name==`li`?e.element:i.createElement(`li`);N4(i,s,c,e,d,l),i.appendChild(d,s[l].listElement),s[l].listItemElements.push(d),e.id!==void 0&&o[l]&&o[l][a]++,e.element!=d&&i.appendChild(e.element,d),J4(e.element,i),i.removeStyle(`text-indent`,e.element),i.removeStyle(`margin-left`,e.element)}else{let t=s.find(t=>t.marginLeft==e.marginLeft);if(t){let n=t.listItemElements;i.appendChild(e.element,n[n.length-1]),i.removeStyle(`margin-left`,e.element),s.length=s.indexOf(t)+1,o.length=s.length+1}else F4(i,s,c),c=P4(),s.length=0}F4(i,s,c)}function N4(e,t,n,r,i,a){if(r.marginLeft===void 0){a==0&&(n.canApplyMarginOnList=!1);return}let o=parseFloat(r.marginLeft),s=0;for(let e=0;e0){e.setStyle(`margin-left`,n.marginLeft,t[0].listElement);for(let t of n.topLevelListItemElements)e.removeStyle(`margin-left`,t)}}function I4(e,t){for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`li`)){let n=e.getChild(0);n&&n.is(`element`,`p`)&&t.unwrapElement(n)}}}function L4(e,t){let n=t.createRangeIn(e),r=[],i=new Set;for(let e of n.getItems()){if(!e.is(`element`)||!e.name.match(/^(p|h\d+|li|div)$/))continue;let t=Y4(e);if(t!==void 0&&parseFloat(t)==0&&!Array.from(e.getClassNames()).find(e=>e.startsWith(`MsoList`))&&(t=void 0),e.hasStyle(`mso-list`)&&e.getStyle(`mso-list`)!==`none`||t!==void 0&&i.has(t)){let n=q4(e);r.push({element:e,id:n.id,order:n.order,indent:n.indent,marginLeft:t}),t!==void 0&&i.add(t)}else i.clear()}return r}function R4(e){let t=e.element.previousSibling;for(;t&&z4(t);)t=t.previousSibling;if(!t){let t=e.element.parent;return B4(t)&&(!t.previousSibling||B4(t.previousSibling))}return B4(t)}function z4(e){return e.is(`element`)&&e.childCount===0&&/^(?:span|a|o:p)$/.test(e.name)}function B4(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function V4(e,t){let n=RegExp(`@list l${e.id}:level${e.indent}\\s*({[^}]*)`,`gi`),r=/mso-level-number-format:([^;]{0,100});/gi,i=/mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi,a=RegExp(`@list\\s+l${e.id}:level\\d\\s*{[^{]*mso-level-text:"%\\d\\\\.`,`gi`),o=RegExp(`@list l${e.id}:level\\d\\s*{[^{]*mso-level-number-format:`,`gi`),s=a.exec(t),c=o.exec(t),l=s&&!c,u=n.exec(t),d=`decimal`,f=`ol`,p=null;if(u&&u[1]){let t=r.exec(u[1]);if(t&&t[1]&&(d=t[1].trim(),f=d!==`bullet`&&d!==`image`?`ol`:`ul`),d===`bullet`){let t=H4(e.element);t&&(d=t)}else{let e=i.exec(u[1]);e&&e[1]&&(p=parseInt(e[1]))}l&&(f=`ol`)}return{type:f,startIndex:p,style:W4(d),isLegalStyleList:l}}function H4(e){if(e.name==`li`&&e.parent.name==`ul`&&e.parent.hasAttribute(`type`))return e.parent.getAttribute(`type`);let t=U4(e);if(!t)return null;let n=t._data;return n===`o`?`circle`:n===`·`?`disc`:n===`§`?`square`:null}function U4(e){if(e.getChild(0).is(`$text`))return null;for(let t of e.getChildren()){if(!t.is(`element`,`span`))continue;let e=t.getChild(0);if(e)return e.is(`$text`)?e:e.getChild(0)}return null}function W4(e){if(e.startsWith(`arabic-leading-zero`))return`decimal-leading-zero`;switch(e){case`alpha-upper`:return`upper-alpha`;case`alpha-lower`:return`lower-alpha`;case`roman-upper`:return`upper-roman`;case`roman-lower`:return`lower-roman`;case`circle`:case`disc`:case`square`:return e;default:return null}}function G4(e,t,n){let r=t.createElement(e.type);return K4(r,e,t,n),r}function K4(e,t,n,r){t.style&&n.setStyle(`list-style-type`,t.style,e),t.startIndex&&t.startIndex>1&&n.setAttribute(`start`,t.startIndex,e),t.isLegalStyleList&&r&&n.addClass(`legal-list`,e)}function q4(e){let t=e.getStyle(`mso-list`);if(t===void 0)return{};let n=t.match(/(^|\s{1,100})l(\d+)/i),r=t.match(/\s{0,100}lfo(\d+)/i),i=t.match(/\s{0,100}level(\d+)/i);return n&&r&&i?{id:n[2],order:r[1],indent:parseInt(i[1])}:{indent:1}}function J4(e,t){let n=new Po({name:`span`,styles:{"mso-list":`Ignore`}}),r=t.createRangeIn(e);for(let e of r)e.type===`elementStart`&&n.match(e.item)&&t.remove(e.item)}function Y4(e){let t=e.getStyle(`margin-left`);return t===void 0||t.endsWith(`px`)?t:k4(t)}function X4(e,t){if(!e.childCount)return;let n=new Np(e.document),r=Q4(e,n);$4(r,e,n),t3(r,e,n),e3(e,n);let i=n3(e,n);i.length&&i3(i,r3(t),n)}function Z4(e){return btoa(e.match(/\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(``))}function Q4(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n){if(e.type!=`elementStart`)continue;let t=e.item,n=t.previousSibling,a=n&&n.is(`element`)?n.name:null,o=[`Chart`],s=r.match(t),c=t.getAttribute(`o:gfxdata`),l=a===`v:shapetype`,u=c&&o.some(e=>t.getAttribute(`id`).includes(e));s&&c&&!l&&!u&&i.push(e.item.getAttribute(`id`))}return i}function $4(e,t,n){let r=n.createRangeIn(t),i=new Po({name:`img`}),a=[];for(let t of r)if(t.item.is(`element`)&&i.match(t.item)){let n=t.item,r=n.getAttribute(`v:shapes`)?n.getAttribute(`v:shapes`).split(` `):[];r.length&&r.every(t=>e.indexOf(t)>-1)?a.push(n):n.getAttribute(`src`)||a.push(n)}for(let e of a)n.remove(e)}function e3(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n)e.type==`elementStart`&&r.match(e.item)&&i.push(e.item);for(let e of i)t.remove(e)}function t3(e,t,n){let r=n.createRangeIn(t),i=[];for(let t of r)if(t.type==`elementStart`&&t.item.is(`element`,`v:shape`)){let n=t.item.getAttribute(`id`);if(e.includes(n))continue;a(t.item.parent.getChildren(),n)||i.push(t.item)}for(let e of i){let t={src:o(e)};e.hasAttribute(`alt`)&&(t.alt=e.getAttribute(`alt`));let r=n.createElement(`img`,t);n.insertChild(e.index+1,r,e.parent)}function a(e,t){for(let n of e)if(n.is(`element`)&&(n.name==`img`&&n.getAttribute(`v:shapes`)==t||a(n.getChildren(),t)))return!0;return!1}function o(e){for(let t of e.getChildren())if(t.is(`element`)&&t.getAttribute(`src`))return t.getAttribute(`src`)}}function n3(e,t){let n=t.createRangeIn(e),r=new Po({name:`img`}),i=[],a=0;for(let e of n)e.item.is(`element`)&&r.match(e.item)&&(e.item.getAttribute(`src`).startsWith(`file://`)&&i.push({element:e.item,imageIndex:a}),a++);return i}function r3(e){if(!e)return[];let t=/{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/,n=RegExp(`(?:(`+t.source+`))([\\da-fA-F\\s]+)\\}`,`g`),r=e.match(n),i=[];if(r)for(let e of r){let n=!1;e.includes(`\\pngblip`)?n=`image/png`:e.includes(`\\jpegblip`)&&(n=`image/jpeg`),n&&i.push({hex:e.replace(t,``).replace(/[^\da-fA-F]/g,``),type:n})}return i}function i3(e,t,n){for(let r=0;r!r.hasStyle(`border-${e}-style`)))t.setStyle(`border-style`,`none`,r);else for(let n of e)r.hasStyle(`border-${n}-style`)||t.setStyle(`border-${n}-style`,`none`,r);let i=[`width`,`height`,...e.map(e=>`border-${e}-width`),...e.map(e=>`padding-${e}`)];for(let e of i)r.hasStyle(e)&&t.setStyle(e,k4(r.getStyle(e)),r)}}function s3(e,t){for(let n of t.createRangeIn(e).getItems())n.is(`element`,`table`)&&(n.getStyle(`width`)===`0px`&&t.removeStyle(`width`,n),n.getAttribute(`width`)===`0`&&t.removeAttribute(`width`,n))}function c3(e,t){let n=new Map,r=new Map,i=null;for(let{item:a}of t.createRangeIn(e))if(a.is(`element`)){if(a.getStyle(`mso-element`)===`footnote-list`){i=a;continue}if(a.hasStyle(`mso-footnote-id`)){let e=a.findAncestor(`element`,e=>e.getStyle(`mso-element`)===`footnote`);if(e){let t=e.getAttribute(`id`);r.set(t,e)}else{let e=a.getStyle(`mso-footnote-id`);n.set(e,a)}continue}}if(!n.size||!i)return;let a=u3(t);t.replace(i,a.wrapper);for(let[e,i]of n){let n=r.get(e);if(!n)continue;t.replace(i,d3(t,e));let o=f3(t,e);l3(t,n);for(let e of n.getChildren()){let n=e;e.is(`element`)&&(n=t.clone(e,!0)),t.appendChild(n,o.content)}t.appendChild(o.listItem,a.list)}}function l3(e,t){let n=[],r=[];for(let{item:i}of e.createRangeIn(t))if(i.is(`element`)&&i.getStyle(`mso-footnote-id`)){n.unshift(i);let{nextSibling:e}=i;e?.is(`$text`)&&e.data.startsWith(` `)&&r.unshift(e)}for(let t of n)e.remove(t);for(let t of r){let n=t.data.substring(1);if(n.length>0){let r=t.parent,i=r.getChildIndex(t),a=e.createText(n);e.remove(t),e.insertChild(i,a,r)}else e.remove(t)}return t}function u3(e){let t=e.createElement(`hr`,{class:`footnotes-divider`}),n=e.createElement(`ol`,{class:`footnotes-list`});return{list:n,wrapper:e.createElement(`div`,{class:`footnotes`},[t,n])}}function d3(e,t){let n=e.createElement(`sup`,{class:`footnote`}),r=e.createElement(`a`,{id:`ref-${t}`,href:`#${t}`});return e.appendChild(r,n),n}function f3(e,t){let n=e.createElement(`li`,{id:t,class:`footnote-definition`}),r=e.createElement(`a`,{href:`#ref-${t}`,class:`footnote-backlink`}),i=e.createElement(`div`,{class:`footnote-content`});return e.appendChild(e.createText(`^`),r),e.appendChild(r,n),e.appendChild(i,n),{listItem:n,content:i}}const p3=//i,m3=/xmlns:o="urn:schemas-microsoft-com/i,h3=//i;var g3=class{document;hasMultiLevelListPlugin;hasTablePropertiesPlugin;enableSkipLevelLists;constructor(e,t=!1,n=!1,r=!1){this.document=e,this.hasMultiLevelListPlugin=t,this.hasTablePropertiesPlugin=n,this.enableSkipLevelLists=r}isActive(e){return p3.test(e)||m3.test(e)||h3.test(e)}execute(e){let t=new Np(this.document),n=e.extraContent.stylesString;D4(e.content,t),M4(e.content,n,this.hasMultiLevelListPlugin,this.enableSkipLevelLists),X4(e.content,e.dataTransfer.getData(`text/rtf`)),o3(e.content,t,this.hasTablePropertiesPlugin),s3(e.content,t),c3(e.content,t),a3(e.content)}};function _3(e,t){for(let n of e.getChildren())if(n.is(`element`,`b`)&&n.getStyle(`font-weight`)===`normal`){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function v3(e,t){let n=new _c(new Cs(t.document.stylesProcessor),{renderingMode:`data`}),r=n.blockElements,i=n.inlineObjectElements,a=[];for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`br`)){let n=y3(e,`forward`,t,{blockElements:r,inlineObjectElements:i}),o=y3(e,`backward`,t,{blockElements:r,inlineObjectElements:i}),s=b3(n,r);(b3(o,r)||s)&&a.push(e)}}for(let e of a)e.hasClass(`Apple-interchange-newline`)?t.remove(e):t.replace(e,t.createElement(`p`))}function y3(e,t,n,{blockElements:r,inlineObjectElements:i}){let a=n.createPositionAt(e,t==`forward`?`after`:`before`);return a=a.getLastMatchingPosition(({item:e})=>e.is(`element`)&&!r.includes(e.name)&&!i.includes(e.name),{direction:t}),t==`forward`?a.nodeAfter:a.nodeBefore}function b3(e,t){return!!e&&e.is(`element`)&&t.includes(e.name)}function x3(e,t,n){let r=new Set;for(let n of t.createRangeIn(e).getItems())!n.is(`view:$textProxy`)||!n.data.includes(` `)||S3(n.parent)&&r.add(n.textNode);for(let e of r)C3(e,t,n)}function S3(e){let t=e;for(;t;){if(t.is(`element`)&&t.getStyle?.(`white-space`)===`pre-wrap`)return!0;t=t.parent}return!1}function C3(e,t,n){let{parent:r,data:i}=e,a=i.replaceAll(` `,` `.repeat(n)),o=r.getChildIndex(e);t.remove(e),t.insertChild(o,t.createText(a),r)}const w3=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;var T3=class{document;constructor(e){this.document=e}isActive(e){return w3.test(e)}execute(e){let t=new Np(this.document);_3(e.content,t),I4(e.content,t),v3(e.content,t),x3(e.content,t,8)}};function E3(e,t){for(let n of e.getChildren())n.is(`element`,`table`)&&n.hasAttribute(`xmlns`)&&t.removeAttribute(`xmlns`,n)}function D3(e,t){for(let n of e.getChildren())if(n.is(`element`,`google-sheets-html-origin`)){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function O3(e,t){for(let n of Array.from(e.getChildren()))n.is(`element`,`style`)&&t.remove(n)}const k3=/[^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,`$1$2`).replace(/<\/span>/g,``).replace(/()[\r\n]+(<\/span>)/g,`$1 $2`).replace(/ <\//g,`\xA0<\/o:p>/g,`\xA0`).replace(/( |\u00A0)<\/o:p>/g,``).replace(/>([^\S\r\n]*[\r\n]\s*)<`)}function M3(e){e.querySelectorAll(`span[style*=spacerun]`).forEach(e=>{let t=e,n=t.innerText.length||0;t.innerText=Array(n+1).join(`\xA0 `).substr(0,n)})}function N3(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>t.length===1?` `:Array(t.length+1).join(`\xA0 `).substr(0,t.length))}function P3(e,t){let n=new DOMParser;e=e.replace(//g,``)}const dO=[`figcaption`,`li`],fO=[`ol`,`ul`];function pO(e,t){if(t.is(`$text`)||t.is(`$textProxy`))return t.data;if(t.is(`element`,`img`)&&t.hasAttribute(`alt`))return t.getAttribute(`alt`);if(t.is(`element`,`br`))return`\n`;let n=``,r=null;for(let i of t.getChildren())n+=hO(i,r)+pO(e,i),r=i;if(t.is(`rawElement`)){let r=document.implementation.createHTMLDocument(``).createElement(`div`);t.render(r,e),n+=mO(r)}return n}function mO(e){let t=``;if(e.nodeType===Node.TEXT_NODE)return e.textContent;if(e.tagName===`BR`)return`\n`;for(let n of e.childNodes)t+=mO(n);return t}function hO(e,t){return t?e.is(`element`,`li`)&&!e.isEmpty&&e.getChild(0).is(`containerElement`)||fO.includes(e.name)&&fO.includes(t.name)?`\n\n`:!e.is(`containerElement`)&&!t.is(`containerElement`)?``:dO.includes(e.name)||dO.includes(t.name)?`\n`:e.is(`element`)&&e.getCustomProperty(`dataPipeline:transparentRendering`)||t.is(`element`)&&t.getCustomProperty(`dataPipeline:transparentRendering`)?``:`\n\n`:``}var gO=class extends F{_markersToCopy=new Map;static get pluginName(){return`ClipboardMarkersUtils`}static get isOfficialPlugin(){return!0}_registerMarkerToCopy(e,t){this._markersToCopy.set(e,t)}_copySelectedFragmentWithMarkers(e,t,n=e=>e.model.getSelectedContent(e.model.document.selection)){return this.editor.model.change(r=>{let i=r.model.document.selection;r.setSelection(t);let a=this._insertFakeMarkersIntoSelection(r,r.model.document.selection,e),o=n(r),s=this._removeFakeMarkersInsideElement(r,o);for(let[e,t]of Object.entries(a)){s[e]||=r.createRangeIn(o);for(let e of t)r.remove(e)}o.markers.clear();for(let[e,t]of Object.entries(s))o.markers.set(e,t);return r.setSelection(i),o})}_pasteMarkersIntoTransformedElement(e,t){let n=this._getPasteMarkersFromRangeMap(e);return this.editor.model.change(e=>{let r=this._insertFakeMarkersElements(e,n),i=t(e),a=this._removeFakeMarkersInsideElement(e,i);for(let t of Object.values(r).flat())e.remove(t);for(let[t,n]of Object.entries(a))e.model.markers.has(t)||e.addMarker(t,{usingOperation:!0,affectsData:!0,range:n});return i})}_pasteFragmentWithMarkers(e){let t=this._getPasteMarkersFromRangeMap(e.markers);e.markers.clear();for(let n of t)e.markers.set(n.name,n.range);return this.editor.model.insertContent(e)}_forceMarkersCopy(e,t,n={allowedActions:`all`,copyPartiallySelected:!0,duplicateOnPaste:!0}){let r=this._markersToCopy.get(e);this._markersToCopy.set(e,n),t(),r?this._markersToCopy.set(e,r):this._markersToCopy.delete(e)}_isMarkerCopyable(e,t){let n=this._getMarkerClipboardConfig(e);if(!n)return!1;if(!t)return!0;let{allowedActions:r}=n;return r===`all`||r.includes(t)}_hasMarkerConfiguration(e){return!!this._getMarkerClipboardConfig(e)}_getMarkerClipboardConfig(e){let[t]=e.split(`:`);return this._markersToCopy.get(t)||null}_insertFakeMarkersIntoSelection(e,t,n){let r=this._getCopyableMarkersFromSelection(e,t,n);return this._insertFakeMarkersElements(e,r)}_getCopyableMarkersFromSelection(e,t,n){let r=Array.from(t.getRanges()),i=new Set(r.flatMap(t=>Array.from(e.model.markers.getMarkersIntersectingRange(t))));return Array.from(i).filter(e=>{if(!this._isMarkerCopyable(e.name,n))return!1;let{copyPartiallySelected:t}=this._getMarkerClipboardConfig(e.name);if(!t){let t=e.getRange();return r.some(e=>e.containsRange(t,!0))}return!0}).map(e=>({name:n===`dragstart`?this._getUniqueMarkerName(e.name):e.name,range:e.getRange()}))}_getPasteMarkersFromRangeMap(e,t=null){let{model:n}=this.editor;return(e instanceof Map?Array.from(e.entries()):Object.entries(e)).flatMap(([e,r])=>{if(!this._hasMarkerConfiguration(e))return[{name:e,range:r}];if(this._isMarkerCopyable(e,t)){let t=this._getMarkerClipboardConfig(e),i=n.markers.has(e)&&n.markers.get(e).getRange().root.rootName===`$graveyard`;return(t.duplicateOnPaste||i)&&(e=this._getUniqueMarkerName(e)),[{name:e,range:r}]}return[]})}_insertFakeMarkersElements(e,t){let n={},r=t.flatMap(e=>{let{start:t,end:n}=e.range;return[{position:t,marker:e,type:`start`},{position:n,marker:e,type:`end`}]}).sort(({position:e},{position:t})=>e.isBefore(t)?1:-1);for(let{position:t,marker:i,type:a}of r){let r=e.createElement(`$marker`,{\"data-name\":i.name,\"data-type\":a});n[i.name]||(n[i.name]=[]),n[i.name].push(r),e.insert(r,t)}return n}_removeFakeMarkersInsideElement(e,t){return vn(this._getAllFakeMarkersFromElement(e,t).reduce((t,n)=>{let r=n.markerElement&&e.createPositionBefore(n.markerElement),i=t[n.name],a=!1;return i?.start&&i?.end&&(this._getMarkerClipboardConfig(n.name).duplicateOnPaste?t[this._getUniqueMarkerName(n.name)]=t[n.name]:a=!0,i=null),a||(t[n.name]={...i,[n.type]:r}),n.markerElement&&e.remove(n.markerElement),t},{}),n=>new B(n.start||e.createPositionFromPath(t,[0]),n.end||e.createPositionAt(t,`end`)))}_getAllFakeMarkersFromElement(e,t){let n=Array.from(e.createRangeIn(t)).flatMap(({item:e})=>e.is(`element`,`$marker`)?[{markerElement:e,name:e.getAttribute(`data-name`),type:e.getAttribute(`data-type`)}]:[]),r=[],i=[];for(let e of n)e.type===`end`&&(n.some(t=>t.name===e.name&&t.type===`start`)||r.push({markerElement:null,name:e.name,type:`start`})),e.type===`start`&&(n.some(t=>t.name===e.name&&t.type===`end`)||i.unshift({markerElement:null,name:e.name,type:`end`}));return[...r,...n,...i]}_getUniqueMarkerName(e){let t=e.split(`:`),n=he().substring(1,6);return t.length===3?`${t.slice(0,2).join(`:`)}:${n}`:`${t.join(`:`)}:${n}`}},_O=class extends F{static get pluginName(){return`ClipboardPipeline`}static get isOfficialPlugin(){return!0}static get requires(){return[gO]}init(){this.editor.editing.view.addObserver(lO),this._setupPasteDrop(),this._setupCopyCut()}_fireOutputTransformationEvent(e,t,n){let r=this.editor.plugins.get(`ClipboardMarkersUtils`);this.editor.model.enqueueChange({isUndoable:n===`cut`},()=>{let i=r._copySelectedFragmentWithMarkers(n,t);this.fire(`outputTransformation`,{dataTransfer:e,content:i,method:n})})}_setupPasteDrop(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=this.editor.plugins.get(`ClipboardMarkersUtils`);this.listenTo(r,`clipboardInput`,(t,n)=>{n.method==`paste`&&!e.model.canEditAt(e.model.document.selection)&&t.stop()},{priority:`highest`}),this.listenTo(r,`clipboardInput`,(e,t)=>{let r=t.dataTransfer,i=new pe(this,`inputTransformation`),a=r.getData(`application/ckeditor5-editor-id`)||null,o=typeof t.content==`string`?this.editor.data.htmlProcessor.toView(uO(t.content)):t.content;this.fire(i,{content:o,dataTransfer:r,sourceEditorId:a,extraContent:t.extraContent,targetRanges:t.targetRanges,method:t.method}),i.stop.called&&e.stop(),n.scrollToTheSelection()},{priority:`low`}),this.listenTo(this,`inputTransformation`,(e,n)=>{if(n.content.isEmpty)return;let r=this.editor.data.toModel(n.content,`$clipboardHolder`);r.childCount!=0&&(e.stop(),t.change(()=>{this.fire(`contentInsertion`,{content:r,method:n.method,sourceEditorId:n.sourceEditorId,dataTransfer:n.dataTransfer,targetRanges:n.targetRanges})}))},{priority:`low`}),this.listenTo(this,`contentInsertion`,(e,t)=>{t.resultRange=i._pasteFragmentWithMarkers(t.content)},{priority:`low`})}_setupCopyCut(){let e=this.editor,t=e.model.document,n=e.editing.view.document,r=(e,n)=>{let r=n.dataTransfer;n.preventDefault(),this._fireOutputTransformationEvent(r,t.selection,e.name)};this.listenTo(n,`copy`,r,{priority:`low`}),this.listenTo(n,`cut`,(t,n)=>{e.model.canEditAt(e.model.document.selection)?r(t,n):n.preventDefault()},{priority:`low`}),this.listenTo(this,`outputTransformation`,(t,r)=>{let i=e.data.toView(r.content,{isClipboardPipeline:!0});n.fire(`clipboardOutput`,{dataTransfer:r.dataTransfer,content:i,method:r.method})},{priority:`low`}),this.listenTo(n,`clipboardOutput`,(n,r)=>{r.content.isEmpty||(r.dataTransfer.setData(`text/html`,this.editor.data.htmlProcessor.toData(r.content)),r.dataTransfer.setData(`text/plain`,pO(e.data.htmlProcessor.domConverter,r.content)),r.dataTransfer.setData(`application/ckeditor5-editor-id`,this.editor.id)),r.method==`cut`&&e.model.deleteContent(t.selection)},{priority:`low`})}};const vO=Wr(`px`);var yO=class extends P{constructor(){super();let e=this.bindTemplate;this.set({isVisible:!1,left:null,top:null,width:null}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-clipboard-drop-target-line`,e.if(`isVisible`,`ck-hidden`,e=>!e)],style:{left:e.to(`left`,e=>vO(e)),top:e.to(`top`,e=>vO(e)),width:e.to(`width`,e=>vO(e))}}})}},bO=class extends F{removeDropMarkerDelayed=Yi(()=>this.removeDropMarker(),40);_updateDropMarkerThrottled=qt(e=>this._updateDropMarker(e),40);_reconvertMarkerThrottled=qt(()=>{this.editor.model.markers.has(`drop-target`)&&this.editor.editing.reconvertMarker(`drop-target`)},0);_dropTargetLineView=new yO;_domEmitter=new(br());_scrollables=new Map;static get pluginName(){return`DragDropTarget`}static get isOfficialPlugin(){return!0}init(){this._setupDropMarker()}destroy(){this._domEmitter.stopListening();for(let{resizeObserver:e}of this._scrollables.values())e.destroy();return this._updateDropMarkerThrottled.cancel(),this.removeDropMarkerDelayed.cancel(),this._reconvertMarkerThrottled.cancel(),super.destroy()}updateDropMarker(e,t,n,r,i,a){this.removeDropMarkerDelayed.cancel();let o=xO(this.editor,e,t,n,r,i,a);return o?a&&a.containsRange(o)||o&&!this.editor.model.canEditAt(o)?(this.removeDropMarker(),null):(this._updateDropMarkerThrottled(o),o):null}getFinalDropRange(e,t,n,r,i,a){let o=xO(this.editor,e,t,n,r,i,a);return this.removeDropMarker(),o}removeDropMarker(){let e=this.editor.model;this.removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),this._dropTargetLineView.isVisible=!1,e.markers.has(`drop-target`)&&e.change(e=>{e.removeMarker(`drop-target`)})}_setupDropMarker(){let e=this.editor;e.ui.view.body.add(this._dropTargetLineView),e.conversion.for(`editingDowncast`).markerToHighlight({model:`drop-target`,view:{classes:[`ck-clipboard-drop-target-range`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:`drop-target`,view:(t,{writer:n})=>{if(e.model.schema.checkChild(t.markerRange.start,`$text`))return this._dropTargetLineView.isVisible=!1,this._createDropTargetPosition(n);t.markerRange.isCollapsed?this._updateDropTargetLine(t.markerRange):this._dropTargetLineView.isVisible=!1}})}_updateDropMarker(e){let t=this.editor,n=t.model.markers;t.model.change(t=>{n.has(`drop-target`)?n.get(`drop-target`).getRange().isEqual(e)||t.updateMarker(`drop-target`,{range:e}):t.addMarker(`drop-target`,{range:e,usingOperation:!1,affectsData:!1})})}_createDropTargetPosition(e){return e.createUIElement(`span`,{class:`ck ck-clipboard-drop-target-position`},function(e){let t=this.toDomElement(e);return t.append(`⁠`,e.createElement(`span`),`⁠`),t})}_updateDropTargetLine(e){let t=this.editor.editing,n=e.start.nodeBefore,r=e.start.nodeAfter,i=e.start.parent,a=n?t.mapper.toViewElement(n):null,o=a?t.view.domConverter.mapViewToDom(a):null,s=r?t.mapper.toViewElement(r):null,c=s?t.view.domConverter.mapViewToDom(s):null,l=t.mapper.toViewElement(i);if(!l)return;let d=t.view.domConverter.mapViewToDom(l),f=this._getScrollableRect(l),{scrollX:p,scrollY:m}=u.window,h=o?new O(o):null,g=c?new O(c):null,_=new O(d).excludeScrollbarsAndBorders(),v=h?h.bottom:_.top,y=g?g.top:_.bottom,ee=u.window.getComputedStyle(d),b=v<=y?(v+y)/2:y;if(f.tops.schema.checkChild(a,e))){if(s.schema.checkChild(a,`$text`))return s.createRange(a);if(t)return CO(e,TO(e,t.parent),r,i)}}}else if(s.schema.isInline(l))return CO(e,l,r,i)}if(s.schema.isBlock(l))return CO(e,l,r,i);if(s.schema.checkChild(l,`$block`)){let t=Array.from(l.getChildren()).filter(t=>t.is(`element`)&&!SO(e,t)),n=0,a=t.length;if(a==0)return s.createRange(s.createPositionAt(l,`end`));for(;n{n?(this.forceDisabled(`readOnlyMode`),this._isBlockDragging=!1):this.clearForceDisabled(`readOnlyMode`)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`),e.plugins.has(`BlockToolbar`)){let t=e.plugins.get(`BlockToolbar`).buttonView.element;this._domEmitter.listenTo(t,`dragstart`,(e,t)=>this._handleBlockDragStart(t)),this._domEmitter.listenTo(u.document,`dragover`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`drop`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`dragend`,()=>this._handleBlockDragEnd(),{useCapture:!0}),this.isEnabled&&t.setAttribute(`draggable`,`true`),this.on(`change:isEnabled`,(e,n,r)=>{t.setAttribute(`draggable`,r?`true`:`false`)})}}destroy(){return this._domEmitter.stopListening(),super.destroy()}_handleBlockDragStart(e){if(!this.isEnabled)return;let t=this.editor.model,n=t.document.selection,r=this.editor.editing.view,i=Array.from(n.getSelectedBlocks()),a=t.createRange(t.createPositionBefore(i[0]),t.createPositionAfter(i[i.length-1]));t.change(e=>e.setSelection(a)),this._isBlockDragging=!0,r.focus(),r.getObserver(lO).onDomEvent(e)}_handleBlockDragging(e){if(!this.isEnabled||!this._isBlockDragging)return;let t=e.clientX+(this.editor.locale.contentLanguageDirection==`ltr`?100:-100),n=e.clientY,r=document.elementFromPoint(t,n),i=this.editor.editing.view;!r||!r.closest(`.ck-editor__editable`)||i.getObserver(lO).onDomEvent({...e,type:e.type,dataTransfer:e.dataTransfer,target:r,clientX:t,clientY:n,preventDefault:()=>e.preventDefault(),stopPropagation:()=>e.stopPropagation()})}_handleBlockDragEnd(){this._isBlockDragging=!1}},OO=class extends F{_draggedRange;_draggingUid;_draggableElement;_clearDraggableAttributesDelayed=Yi(()=>this._clearDraggableAttributes(),40);_blockMode=!1;_domEmitter=new(br());_previewContainer;static get pluginName(){return`DragDrop`}static get isOfficialPlugin(){return!0}static get requires(){return[_O,xD,bO,DO]}init(){let e=this.editor,t=e.editing.view;this._draggedRange=null,this._draggingUid=``,this._draggableElement=null,t.addObserver(lO),t.addObserver(Mp),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDraggableAttributeHandling(),this.listenTo(e,`change:isReadOnly`,(e,t,n)=>{n?this.forceDisabled(`readOnlyMode`):this.clearForceDisabled(`readOnlyMode`)}),this.on(`change:isEnabled`,(e,t,n)=>{n||this._finalizeDragging(!1)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`)}destroy(){return this._draggedRange&&=(this._draggedRange.detach(),null),this._previewContainer&&this._previewContainer.remove(),this._domEmitter.stopListening(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=e.plugins.get(bO);this.listenTo(r,`dragstart`,(n,r)=>{if(r.target?.is(`editableElement`)){r.preventDefault();return}if(this._prepareDraggedRange(r.target),!this._draggedRange){r.preventDefault();return}this._draggingUid=he();let i=this.isEnabled&&e.model.canEditAt(this._draggedRange);r.dataTransfer.effectAllowed=i?`copyMove`:`copy`,r.dataTransfer.setData(`application/ckeditor5-dragging-uid`,this._draggingUid);let a=t.createSelection(this._draggedRange.toRange());this.editor.plugins.get(`ClipboardPipeline`)._fireOutputTransformationEvent(r.dataTransfer,a,`dragstart`);let{dataTransfer:o,domTarget:s,domEvent:c}=r,{clientX:l}=c;this._updatePreview({dataTransfer:o,domTarget:s,clientX:l}),r.stopPropagation(),i||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``)},{priority:`low`}),this.listenTo(r,`dragend`,(e,t)=>{this._finalizeDragging(!t.dataTransfer.isCanceled&&t.dataTransfer.dropEffect==`move`)},{priority:`low`}),this._domEmitter.listenTo(u.document,`dragend`,()=>{this._blockMode=!1},{useCapture:!0}),this.listenTo(r,`dragenter`,()=>{this.isEnabled&&n.focus()}),this.listenTo(r,`dragleave`,()=>{i.removeDropMarkerDelayed()}),this.listenTo(r,`dragging`,(e,t)=>{if(!this.isEnabled){t.dataTransfer.dropEffect=`none`;return}let{clientX:n,clientY:r}=t.domEvent;if(!i.updateDropMarker(t.target,t.targetRanges,n,r,this._blockMode,this._draggedRange)){t.dataTransfer.dropEffect=`none`;return}this._draggedRange||(t.dataTransfer.dropEffect=`copy`),p.isGecko||(t.dataTransfer.effectAllowed==`copy`?t.dataTransfer.dropEffect=`copy`:[`all`,`copyMove`].includes(t.dataTransfer.effectAllowed)&&(t.dataTransfer.dropEffect=`move`)),e.stop()},{priority:`low`})}_setupClipboardInputIntegration(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(bO);this.listenTo(t,`clipboardInput`,(t,r)=>{if(r.method!=`drop`)return;let{clientX:i,clientY:a}=r.domEvent,o=n.getFinalDropRange(r.target,r.targetRanges,i,a,this._blockMode,this._draggedRange);if(!o){this._finalizeDragging(!1),t.stop();return}if(this._draggedRange&&this._draggingUid!=r.dataTransfer.getData(`application/ckeditor5-dragging-uid`)&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``),kO(r.dataTransfer)==`move`&&this._draggedRange&&this._draggedRange.containsRange(o,!0)){this._finalizeDragging(!1),t.stop();return}r.targetRanges=[e.editing.mapper.toViewRange(o)]},{priority:`high`})}_setupContentInsertionIntegration(){let e=this.editor.plugins.get(_O);e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=t.targetRanges.map(e=>this.editor.editing.mapper.toModelRange(e));this.editor.model.change(e=>e.setSelection(n))},{priority:`high`}),e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=kO(t.dataTransfer)==`move`,r=!t.resultRange||!t.resultRange.isCollapsed;this._finalizeDragging(r&&n)},{priority:`lowest`})}_setupDraggableAttributeHandling(){let e=this.editor,t=e.editing.view,n=t.document;this.listenTo(n,`pointerdown`,(r,i)=>{if(p.isAndroid||!i)return;this._clearDraggableAttributesDelayed.cancel();let a=AO(i.target);if(p.isBlink&&!e.isReadOnly&&!a&&!n.selection.isCollapsed){let e=n.selection.getSelectedElement();(!e||!HE(e))&&(a=n.selection.editableElement)}a&&(t.change(e=>{e.setAttribute(`draggable`,`true`,a)}),this._draggableElement=e.editing.mapper.toModelElement(a))}),this.listenTo(n,`pointerup`,()=>{p.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){let e=this.editor.editing;e.view.change(t=>{this._draggableElement&&this._draggableElement.root.rootName!=`$graveyard`&&t.removeAttribute(`draggable`,e.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_finalizeDragging(e){let t=this.editor,n=t.model;t.plugins.get(bO).removeDropMarker(),this._clearDraggableAttributes(),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).clearForceDisabled(`dragDrop`),this._draggingUid=``,this._previewContainer&&=(this._previewContainer.remove(),void 0),this._draggedRange&&=(e&&this.isEnabled&&n.change(e=>{let t=n.createSelection(this._draggedRange);n.deleteContent(t,{doNotAutoparagraph:!0});let r=t.getFirstPosition().parent;r.isEmpty&&!n.schema.checkChild(r,`$text`)&&n.schema.checkChild(r,`paragraph`)&&e.insertElement(`paragraph`,r,0)}),this._draggedRange.detach(),null)}_prepareDraggedRange(e){let t=this.editor,n=t.model,r=n.document.selection,i=e?AO(e):null;if(i){let e=t.editing.mapper.toModelElement(i);this._draggedRange=xl.fromRange(n.createRangeOn(e)),this._blockMode=n.schema.isBlock(e),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).forceDisabled(`dragDrop`);return}if(r.isCollapsed&&!r.getFirstPosition().parent.isEmpty)return;let a=Array.from(r.getSelectedBlocks()),o=r.getFirstRange();if(a.length==0){this._draggedRange=xl.fromRange(o);return}let s=jO(n,a);if(a.length>1)this._draggedRange=xl.fromRange(s),this._blockMode=!0;else if(a.length==1){let e=o.start.isTouching(s.start)&&o.end.isTouching(s.end);this._draggedRange=xl.fromRange(e?s:o),this._blockMode=e}n.change(e=>e.setSelection(this._draggedRange.toRange()))}_updatePreview({dataTransfer:e,domTarget:t,clientX:n}){let r=this.editor.editing.view,i=r.document.selection.editableElement,a=r.domConverter.mapViewToDom(i),o=u.window.getComputedStyle(a);this._previewContainer?this._previewContainer.firstElementChild&&this._previewContainer.removeChild(this._previewContainer.firstElementChild):(this._previewContainer=mr(u.document,`div`,{style:`position: fixed; left: -999999px;`}),u.document.body.appendChild(this._previewContainer));let s=mr(u.document,`div`);s.className=`ck ck-content ck-clipboard-preview`;let c=new O(a),l=parseFloat(o.paddingLeft),d=parseFloat(o.paddingRight),f=parseFloat(o.width)-l-d;if(!a.contains(t))if(p.isiOS)s.style.width=`${f}px`,s.style.backgroundColor=`var(--ck-color-base-background)`;else{let e=c.left-n+l;s.style.width=`${f+e}px`,s.style.paddingLeft=`${e}px`}else if(p.isiOS)s.style.maxWidth=`${f}px`,s.style.padding=`10px`,s.style.minWidth=`200px`,s.style.minHeight=`20px`,s.style.boxSizing=`border-box`,s.style.backgroundColor=`var(--ck-color-base-background)`;else return;r.domConverter.setContentOf(s,e.getData(`text/html`)),e.setDragImage(s,0,0),this._previewContainer.appendChild(s)}};function kO(e){return p.isGecko?e.dropEffect:[`all`,`copyMove`].includes(e.effectAllowed)?`move`:`copy`}function AO(e){if(e.is(`editableElement`))return null;if(e.hasClass(`ck-widget__selection-handle`))return e.findAncestor(HE);if(HE(e))return e;let t=e.findAncestor(e=>HE(e)||e.is(`editableElement`));return HE(t)?t:null}function jO(e,t){let n=t[0],r=t[t.length-1],i=n.getCommonAncestor(r),a=e.createPositionBefore(n),o=e.createPositionAfter(r);if(i&&i.is(`element`)&&!e.schema.isLimit(i)){let t=e.createRangeOn(i),n=a.isTouching(t.start),r=o.isTouching(t.end);if(n&&r)return jO(e,[i])}return e.createRange(a,o)}var MO=class extends F{static get pluginName(){return`PastePlainText`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.model,n=e.editing.view,r=t.document.selection;n.addObserver(lO),e.plugins.get(_O).on(`contentInsertion`,(e,n)=>{NO(n.content,t)&&t.change(e=>{let i=Array.from(r.getAttributes()).filter(([e])=>t.schema.getAttributeProperties(e).isFormatting);r.isCollapsed||t.deleteContent(r,{doNotAutoparagraph:!0}),i.push(...r.getAttributes());let a=e.createRangeIn(n.content);for(let n of a.getItems())for(let r of i)t.schema.checkAttribute(n,r[0])&&e.setAttribute(r[0],r[1],n)})})}};function NO(e,t){let n=t.createRangeIn(e);if(e.childCount==1){let r=e.getChild(0);r.is(`element`)&&t.schema.isBlock(r)&&!t.schema.isObject(r)&&!t.schema.isLimit(r)&&(n=t.createRangeIn(r))}for(let e of n.getItems())if(!t.schema.isInline(e)||Array.from(e.getAttributeKeys()).find(e=>t.schema.getAttributeProperties(e).isFormatting))return!1;return!0}var PO=class extends F{static get pluginName(){return`Clipboard`}static get isOfficialPlugin(){return!0}static get requires(){return[gO,_O,OO,MO]}init(){let e=this.editor,t=this.editor.t;e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Copy selected content`),keystroke:`CTRL+C`},{label:t(`Paste content`),keystroke:`CTRL+V`},{label:t(`Paste content as plain text`),keystroke:`CTRL+SHIFT+V`}]})}},FO=class{_definitions=new Set;_conflictChecker;get length(){return this._definitions.size}setConflictChecker(e){this._conflictChecker=e}add(e){Array.isArray(e)?e.forEach(e=>this._definitions.add(e)):this._definitions.add(e)}getDispatcher(){return e=>{let t=(e,t)=>{let n=t.createAttributeElement(`a`,e.attributes,{priority:5});e.classes&&t.addClass(e.classes,n);for(let r in e.styles)t.setStyle(r,e.styles[r],n);return t.setCustomProperty(`link`,!0,n),n},n=e=>(n,r,i)=>{if(r.attributeKey.startsWith(`link`)&&!(r.attributeKey==`linkHref`&&!i.consumable.test(r.item,`attribute:linkHref`))&&!(!r.item.is(`selection`)&&!i.schema.isInline(r.item)))for(let n of this._definitions)n.callback(r.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(n,r.item)&&e?r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(n,i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(n,i.writer)):i.writer.unwrap(i.mapper.toViewRange(r.range),t(n,i.writer))};e.on(`attribute`,n(!1),{priority:ge.high-1}),e.on(`attribute`,n(!0),{priority:ge.high-2})}}getDispatcherForLinkedImage(){return e=>{let t=e=>(t,n,{writer:r,mapper:i})=>{if(!n.item.is(`element`,`imageBlock`)||!n.attributeKey.startsWith(`link`))return;let a=i.toViewElement(n.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o)for(let t of this._definitions){let i=Ui(t.attributes);if(t.callback(n.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(t,n.item)&&e){for(let[e,t]of i)e===`class`?r.addClass(t,o):r.setAttribute(e,t,!1,o);t.classes&&r.addClass(t.classes,o);for(let e in t.styles)r.setStyle(e,t.styles[e],o)}else{for(let[e,t]of i)e===`class`?r.removeClass(t,o):r.removeAttribute(e,t,o);t.classes&&r.removeClass(t.classes,o);for(let e in t.styles)r.removeStyle(e,o)}}};e.on(`attribute`,t(!1),{priority:ge.high-1}),e.on(`attribute`,t(!0),{priority:ge.high-2})}}};const IO=/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g,LO=/^[\\S]+@((?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.))+(?:[a-z\\u00a1-\\uffff]{2,})$/i,RO=/^((\\w+:(\\/{2,})?)|(\\W))/i,zO=[`https?`,`ftps?`,`mailto`],BO=`Ctrl+K`;function VO(e){return e.is(`attributeElement`)&&!!e.getCustomProperty(`link`)}function HO(e,{writer:t}){let n=t.createAttributeElement(`a`,{href:e},{priority:5});return t.setCustomProperty(`link`,!0,n),n}function UO(e,t=zO){let n=String(e),r=t.join(`|`);return WO(n,RegExp(`${`^(?:(?:):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))`.replace(``,r)}`,`i`))?n:`#`}function WO(e,t){return!!e.replace(IO,``).match(t)}function GO(e,t){let n={\"Open in a new tab\":e(`Open in a new tab`),Downloadable:e(`Downloadable`)};return t.forEach(e=>(`label`in e&&n[e.label]&&(e.label=n[e.label]),e)),t}function KO(e){let t=[];if(e)for(let[n,r]of Object.entries(e)){let e=Object.assign({},r,{id:`link${Yn(n)}`});t.push(e)}return t}function qO(e,t){return e?t.checkAttribute(e.name,`linkHref`):!1}function JO(e){return LO.test(e)}function YO(e,t){let n=JO(e)?`mailto:`:t,r=!!n&&!XO(e);return e&&r?n+e:e}function XO(e){return RO.test(e)}function ZO(e){window.open(e,`_blank`,`noopener`)}function QO(e){let t=``;for(let n of e.getItems()){if(!n.is(`$text`)&&!n.is(`$textProxy`))return;t+=n.data}return t}function $O(e,t){if(e.attributes&&t.attributes&&Object.keys(e.attributes).some(e=>!n(e)&&e in t.attributes)||e.styles&&t.styles&&Object.keys(e.styles).some(e=>e in t.styles))return!0;return!1;function n(e){return e===`class`||e===`style`||e===`rel`}}function ek({decoratorStates:e,allDecorators:t}){let n={...e};for(let i in e)if(e[i]&&r(i)){let e=tk(i,t);for(let t of e)n[t]=!1}function r(e){return t.some(t=>t.id===e&&!t.value)}return n}function tk(e,t){let n=t.find(t=>t.id===e);return n?t.filter(t=>t.id!==e&&$O(n,t)).map(e=>e.id):[]}var nk=class extends I{manualDecorators=new Fi;automaticDecorators=new FO;restoreManualDecoratorStates(){for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement()||j(t.getSelectedBlocks());qO(n,e.schema)?(this.value=n.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttribute(n,`linkHref`)):(this.value=t.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`));for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}execute(e,t={},n){let r=this.editor.model,i=r.document.selection,a=ek({allDecorators:Array.from(this.manualDecorators),decoratorStates:t}),o=[],s=[];for(let e in a)a[e]?o.push(e):s.push(e);r.change(t=>{let a=n=>{t.setAttribute(`linkHref`,e,n),o.forEach(e=>t.setAttribute(e,!0,n)),s.forEach(e=>t.removeAttribute(e,n))},c=(i,o)=>{let s=QO(i);if(!s)return i;let c=n;if(c||=o&&o==s?e:s,c!=s){let e=t.createDocumentFragment();for(let n of i.getItems()){let r=n;t.append(t.createText(r.data,r.getAttributes()),e)}let n=t.createRangeIn(e),o=rk(s,c),l=0;for(let{offset:e,actual:i,expected:s}of o){let o=e+l,c=t.createRange(n.start.getShiftedBy(o),n.start.getShiftedBy(o+i.length)),u=ik(c,n).getAttributes(),d=Array.from(u).filter(([e])=>r.schema.getAttributeProperties(e).isFormatting),f=t.createText(s,d);a(f),t.remove(c),t.insert(f,c.start),l+=s.length}return r.insertContent(e,i),t.createRange(i.start,i.start.getShiftedBy(c.length))}},l=e=>{let{plugins:n}=this.editor;if(t.setSelection(e.end),n.has(`TwoStepCaretMovement`))n.get(`TwoStepCaretMovement`)._handleForwardMovement();else for(let e of[`linkHref`,...o,...s])t.removeSelectionAttribute(e)};if(i.isCollapsed){let s=i.getFirstPosition();if(i.hasAttribute(`linkHref`)){let e=i.getAttribute(`linkHref`),t=LT(s,`linkHref`,e,r),n=c(t,e);a(n||t),n&&l(n)}else if(e!==``){let a=Ui(i.getAttributes());a.set(`linkHref`,e),o.forEach(e=>{a.set(e,!0)}),l(r.insertContent(t.createText(n||e,a),s))}}else{let e=Array.from(i.getRanges()),n=r.schema.getValidRanges(e,`linkHref`),o=[];for(let e of i.getSelectedBlocks())r.schema.checkAttribute(e,`linkHref`)&&o.push(t.createRangeOn(e));let s=o.slice();for(let e of n)this._isRangeToUpdate(e,o)&&s.push(e);let l=e.map(e=>({start:pf.fromPosition(e.start,`toPrevious`),end:pf.fromPosition(e.end,`toNext`)}));for(let e of s){let t=(e.start.textNode||e.start.nodeAfter).getAttribute(`linkHref`);e=c(e,t)||e,a(e)}t.setSelection(l.map(e=>{let t=e.start.toPosition(),n=e.end.toPosition();return e.start.detach(),e.end.detach(),r.createRange(t,n)}))}}),this.restoreManualDecoratorStates()}_getDecoratorStateFromModel(e){let t=this.editor.model,n=t.document.selection,r=n.getSelectedElement();return qO(r,t.schema)?r.getAttribute(e):n.getAttribute(e)}_isRangeToUpdate(e,t){for(let n of t)if(n.containsRange(e))return!1;return!0}};function rk(e,t){let n=oe(e,t),r={equal:0,insert:0,delete:0},i=[],a=``,o=``;for(let s of[...n,null])s==`insert`?o+=t[r.equal+r.insert]:s==`delete`?a+=e[r.equal+r.delete]:(a.length||o.length)&&(i.push({offset:r.equal,actual:a,expected:o}),a=``,o=``),s&&r[s]++;return i}function ik(e,t){if(!e.isCollapsed)return j(e.getItems());let n=e.start;return n.textNode?n.textNode:!n.nodeBefore||n.isEqual(t.start)?n.nodeAfter:n.nodeBefore}var ak=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement();qO(n,e.schema)?this.isEnabled=e.schema.checkAttribute(n,`linkHref`):this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`)}execute(){let e=this.editor,t=this.editor.model,n=t.document.selection,r=e.commands.get(`link`);t.change(e=>{let i=n.isCollapsed?[LT(n.getFirstPosition(),`linkHref`,n.getAttribute(`linkHref`),t)]:t.schema.getValidRanges(n.getRanges(),`linkHref`);for(let t of i)if(e.removeAttribute(`linkHref`,t),r)for(let n of r.manualDecorators)e.removeAttribute(n.id,t)})}};const ok=D();var sk=class extends ok{id;defaultValue;label;attributes;classes;styles;constructor({id:e,label:t,attributes:n,classes:r,styles:i,defaultValue:a}){super(),this.id=e,this.set(`value`,void 0),this.defaultValue=a,this.label=t,this.attributes=n,this.classes=r,this.styles=i}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}};const ck=`automatic`,lk=/^(https?:)?\\/\\//;var uk=class extends F{_linkOpeners=[];static get pluginName(){return`LinkEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[bT,tT,_O]}constructor(e){super(e),e.config.define(`link`,{allowCreatingEmptyLinks:!1,addTargetToExternalLinks:!1,toolbar:[`linkPreview`,`|`,`editLink`,`linkProperties`,`unlink`]})}init(){let e=this.editor,t=this.editor.config.get(`link.allowedProtocols`);e.model.schema.extend(`$text`,{allowAttributes:`linkHref`}),e.conversion.for(`dataDowncast`).attributeToElement({model:`linkHref`,view:HO}),e.conversion.for(`editingDowncast`).attributeToElement({model:`linkHref`,view:(e,n)=>HO(UO(e,t),n)}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,attributes:{href:!0}},model:{key:`linkHref`,value:e=>e.getAttribute(`href`)}}),e.commands.add(`link`,new nk(e)),e.commands.add(`unlink`,new ak(e));let n=GO(e.t,KO(e.config.get(`link.decorators`)));this._enableAutomaticDecorators(n.filter(e=>e.mode===ck)),this._enableManualDecorators(n.filter(e=>e.mode===`manual`)),e.plugins.get(bT).registerAttribute(`linkHref`),zT(e,`linkHref`,`a`,`ck-link_selected`),this._enableLinkOpen(),this._enableSelectionAttributesFixer(),this._enableClipboardIntegration(),this._enableDecoratorConflictPostfixer()}_registerLinkOpener(e){this._linkOpeners.push(e)}_enableAutomaticDecorators(e){let t=this.editor,n=t.commands.get(`link`),r=n.automaticDecorators;t.config.get(`link.addTargetToExternalLinks`)&&r.add({id:`linkIsExternal`,mode:ck,callback:e=>!!e&&lk.test(e),attributes:{target:`_blank`,rel:`noopener noreferrer`}}),r.add(e),r.setConflictChecker((e,t)=>{for(let r of n.manualDecorators)if(t.hasAttribute(r.id)&&$O(e,r))return!0}),r.length&&t.conversion.for(`downcast`).add(r.getDispatcher())}_enableManualDecorators(e){if(!e.length)return;let t=this.editor,n=t.commands.get(`link`).manualDecorators;e.forEach(e=>{t.model.schema.extend(`$text`,{allowAttributes:e.id});let r=new sk(e);n.add(r),t.conversion.for(`downcast`).add(e=>{let t=e=>{let t=e.createAttributeElement(`a`,r.attributes,{priority:5});r.classes&&e.addClass(r.classes,t);for(let n in r.styles)e.setStyle(n,r.styles[n],t);return e.setCustomProperty(`link`,!0,t),t},n=e=>(n,r,i)=>{if(!(!r.item.is(`selection`)&&!i.schema.isInline(r.item))){if(!e&&r.attributeOldValue){if(!i.consumable.test(r.item,n.name))return;i.writer.unwrap(i.mapper.toViewRange(r.range),t(i.writer))}if(e&&r.attributeNewValue){if(!i.consumable.consume(r.item,n.name))return;r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(i.writer))}}};e.on(`attribute:${r.id}`,n(!1),{priority:ge.high-1}),e.on(`attribute:${r.id}`,n(!0),{priority:ge.high-2})}),t.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,...r._createPattern()},model:{key:r.id}})})}_enableLinkOpen(){let e=this.editor,t=e.editing.view.document,n=e=>{this._linkOpeners.some(t=>t(e))||ZO(e)};this.listenTo(t,`click`,(e,t)=>{if(!(p.isMac?t.domEvent.metaKey:t.domEvent.ctrlKey))return;let r=t.domTarget;if(r.tagName.toLowerCase()!=`a`&&(r=r.closest(`a`)),!r)return;let i=r.getAttribute(`href`);i&&(e.stop(),t.preventDefault(),n(i))},{context:`$capture`}),this.listenTo(t,`keydown`,(t,r)=>{let i=e.commands.get(`link`).value;i&&r.keyCode===k.enter&&r.altKey&&(t.stop(),n(i))})}_enableSelectionAttributesFixer(){let e=this.editor.model,t=e.document.selection;this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{!r.includes(`linkHref`)||t.hasAttribute(`linkHref`)||e.change(t=>{dk(t,fk(e.schema))})})}_enableClipboardIntegration(){let e=this.editor,t=e.model,n=this.editor.config.get(`link.defaultProtocol`);n&&this.listenTo(e.plugins.get(`ClipboardPipeline`),`contentInsertion`,(e,r)=>{t.change(e=>{let t=e.createRangeIn(r.content);for(let r of t.getItems())if(r.hasAttribute(`linkHref`)){let t=YO(r.getAttribute(`linkHref`),n);e.setAttribute(`linkHref`,t,r)}})})}_enableDecoratorConflictPostfixer(){let e=this.editor,t=e.model,n=e.commands.get(`link`);t.document.registerPostFixer(e=>{let r=!1,i=t.document.differ.getChanges(),a=new Set,o=new Set(n.manualDecorators.map(e=>e.id));for(let e of i){if(e.type===`attribute`){if(e.attributeKey!==`linkHref`&&!o.has(e.attributeKey))continue;for(let t of e.range.getItems())t.hasAttribute(`linkHref`)&&a.add(t)}e.type===`insert`&&e.attributes.has(`linkHref`)&&e.position.nodeAfter&&a.add(e.position.nodeAfter)}for(let t of a){let i=[];for(let a of n.manualDecorators)if(t.hasAttribute(a.id)){for(let n=i.length-1;n>=0;n--){let o=i[n];$O(o,a)&&(e.removeAttribute(o.id,t),i.splice(n,1),r=!0)}i.push(a)}}return r})}};function dk(e,t){e.removeSelectionAttribute(`linkHref`);for(let n of t)e.removeSelectionAttribute(n)}function fk(e){return e.getDefinition(`$text`).allowAttributes.filter(e=>e.startsWith(`link`))}var pk=class extends H{constructor(e){super(e);let t=this.bindTemplate;this.set({href:void 0,withText:!0}),this.extendTemplate({attributes:{class:[`ck-link-toolbar__preview`],href:t.to(`href`),target:`_blank`,rel:`noopener noreferrer`},on:{click:t.to(e=>{this.href&&this.fire(`navigate`,this.href,()=>e.preventDefault())})}}),this.template.tag=`a`}},mk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;saveButtonView;displayedTextInputView;urlInputView;children;providersListChildren;_validators;_focusables=new pa;_focusCycler;constructor(e,t){super(e),this._validators=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.displayedTextInputView=this._createDisplayedTextInput(),this.urlInputView=this._createUrlInput(),this.providersListChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView()]),this._createFormChildren(),this.listenTo(this.providersListChildren,`add`,()=>{this.stopListening(this.providersListChildren,`add`),this.children.add(this._createProvidersListView())}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-link-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.urlInputView,this.saveButtonView,...this.providersListChildren,this.backButtonView,this.displayedTextInputView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Insert`),tooltip:!1,withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link`)});return t.children.add(this.backButtonView,0),t}_createProvidersListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-form__providers-list`]}}),e.items.bindTo(this.providersListChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createDisplayedTextInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Displayed text`),t.class=`ck-labeled-field-view_full-width`,t}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.fieldView.inputMode=`url`,t.label=e(`Link URL`),t.class=`ck-labeled-field-view_full-width`,t}_createFormChildren(){this.children.add(new MC(this.locale,{children:[this.displayedTextInputView],class:[`ck-form__row_large-top-padding`]})),this.children.add(new MC(this.locale,{children:[this.urlInputView,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`,`ck-form__row_large-bottom-padding`]}))}get url(){let{element:e}=this.urlInputView.fieldView;return e?e.value.trim():null}},hk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;listView;listChildren;emptyListInformation;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.listChildren=this.createCollection(),this.backButtonView=this._createBackButton(),this.listView=this._createListView(),this.emptyListInformation=this._createEmptyLinksListItemView(),this.children=this.createCollection([this._createHeaderView(),this.emptyListInformation]),this.set(`title`,``),this.set(`emptyListPlaceholder`,``),this.set(`hasItems`,!1),this.listenTo(this.listChildren,`change`,()=>{this.hasItems=this.listChildren.length>0}),this.on(`change:hasItems`,(e,t,n)=>{n?(this.children.remove(this.emptyListInformation),this.children.add(this.listView)):(this.children.remove(this.listView),this.children.add(this.emptyListInformation))}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-providers`],tabindex:`-1`},children:this.children})}render(){super.render(),[this.listView,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-providers__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=new By(this.locale);return e.bind(`label`).to(this,`title`),e.children.add(this.backButtonView,0),e}_createEmptyLinksListItemView(){let e=new P(this.locale);return e.setTemplate({tag:`p`,attributes:{class:[`ck`,`ck-link__empty-list-info`]},children:[{text:this.bindTemplate.to(`emptyListPlaceholder`)}]}),e}},gk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;children;listChildren;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.listChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView(),this._createListView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-properties`],tabindex:`-1`},children:this.children}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`back`),t()})}render(){super.render(),[...this.listChildren,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`back`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link properties`)});return t.children.add(this.backButtonView,0),t}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}},_k=class extends H{arrowView;constructor(e){super(e),this.set({withText:!0}),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{class:[`ck-link__button`]}})}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=gv,e}};const vk=`link-ui`;var yk=class extends F{toolbarView=null;formView=null;linkProviderItemsView=null;propertiesView=null;_balloon;_linksProviders=new Fi;static get requires(){return[BC,uk]}static get pluginName(){return`LinkUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;this.set(`selectedLinkableText`,void 0),e.editing.view.addObserver(kp),this._balloon=e.plugins.get(BC),this._registerComponents(),this._registerEditingOpeners(),this._enableBalloonActivators(),e.conversion.for(`editingDowncast`).markerToHighlight({model:vk,view:{classes:[`ck-fake-link-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:vk,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-link-selection`,`ck-fake-link-selection_collapsed`],n),n}}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Create link`),keystroke:BO},{label:t(`Move out of a link`),keystroke:[[`arrowleft`,`arrowleft`],[`arrowright`,`arrowright`]]}]})}destroy(){super.destroy(),this.propertiesView&&this.propertiesView.destroy(),this.formView&&this.formView.destroy(),this.toolbarView&&this.toolbarView.destroy(),this.linkProviderItemsView&&this.linkProviderItemsView.destroy()}registerLinksListProvider(e){let t=this._linksProviders.filter(t=>(t.order||0)<=(e.order||0)).length;this._linksProviders.add(e,t)}_createViews(){let e=this.editor.commands.get(`link`);this.toolbarView=this._createToolbarView(),this.formView=this._createFormView(),e.manualDecorators.length&&(this.propertiesView=this._createPropertiesView()),this._enableUserBalloonInteractions()}_createToolbarView(){let e=this.editor,t=new Ox(e.locale),n=e.commands.get(`link`);t.class=`ck-link-toolbar`;let r=e.config.get(`link.toolbar`);return n.manualDecorators.length||(r=r.filter(e=>e!==`linkProperties`)),t.fillFromConfig(r,e.ui.componentFactory),t.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),t.keystrokes.set(BO,(e,t)=>{this._addFormView(),t()}),e.ui.addToolbar(t,{isContextual:!0,beforeFocus:()=>{this._getSelectedLinkElement()&&!this._isToolbarVisible&&this._showUI(!0)},afterBlur:()=>{this._hideUI(!1)}}),t}_createFormView(){let e=this.editor,t=e.locale.t,n=e.commands.get(`link`),r=e.config.get(`link.defaultProtocol`),i=new(Xa(mk))(e.locale,xk(e));return i.displayedTextInputView.bind(`isEnabled`).to(this,`selectedLinkableText`,e=>e!==void 0),i.urlInputView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`label`).to(n,`value`,e=>t(e?`Update`:`Insert`)),this.listenTo(i,`submit`,()=>{if(i.isValid()){let t=i.urlInputView.fieldView.element.value,n=YO(t,r),a=i.displayedTextInputView.fieldView.element.value;e.execute(`link`,n,this._getDecoratorSwitchesState(),a===this.selectedLinkableText?void 0:a),this._closeFormView()}}),this.listenTo(i.urlInputView,`change:errorText`,()=>{e.ui.update()}),this.listenTo(i,`cancel`,()=>{this._closeFormView()}),i.keystrokes.set(`Esc`,(e,t)=>{this._closeFormView(),t()}),i.providersListChildren.bindTo(this._linksProviders).using(e=>this._createLinksListProviderButton(e)),i}_createLinkProviderListView(e){return e.getListItems().map(({href:e,label:t,icon:n})=>{let r=new H;return r.set({label:t,icon:n,tooltip:!1,withText:!0}),r.on(`execute`,()=>{this.formView.resetFormStatus(),this.formView.urlInputView.fieldView.value=e,this.editor.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r})}_createLinkProviderItemsView(e){let t=this.editor,n=t.locale.t,r=new hk(t.locale),{emptyListPlaceholder:i,label:a}=e;return r.emptyListPlaceholder=i||n(`No links available`),r.title=a,this.listenTo(r,`cancel`,()=>{t.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r}_createPropertiesView(){let e=this.editor,t=this.editor.commands.get(`link`),n=new(Xa(gk))(e.locale);return this.listenTo(n,`back`,()=>{e.editing.view.focus(),this._removePropertiesView()}),n.listChildren.bindTo(t.manualDecorators).using(n=>{let r=new mb(e.locale);return r.set({label:n.label,withText:!0}),r.bind(`isOn`).toMany([n,t],`value`,(e,t)=>t===void 0&&e===void 0?!!n.defaultValue:!!e),r.on(`execute`,()=>{e.execute(`link`,t.value,{...this._getDecoratorSwitchesState(),[n.id]:!r.isOn})}),r}),n}_getDecoratorSwitchesState(){let e=this.editor.commands.get(`link`);return Array.from(e.manualDecorators).reduce((t,n)=>{let r=e.value===void 0&&n.value===void 0?n.defaultValue:n.value;return{...t,[n.id]:!!r}},{})}_registerEditingOpeners(){this.editor.plugins.get(uk)._registerLinkOpener(e=>{let t=this._getLinkProviderLinkByHref(e);if(!t)return!1;let{item:n,provider:r}=t;return r.navigate?r.navigate(n):!1})}_registerComponents(){let e=this.editor;e.ui.componentFactory.add(`link`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:link`,()=>{let e=this._createButton(U);return e.set({role:`menuitemcheckbox`}),e}),e.ui.componentFactory.add(`linkPreview`,t=>{let n=new pk(t),r=e.config.get(`link.allowedProtocols`),i=e.commands.get(`link`),a=t.t;n.bind(`isEnabled`).to(i,`value`,e=>!!e),n.bind(`href`).to(i,`value`,e=>e&&UO(e,r));let o=e=>{if(e===``){n.label=a(`This link has no URL`),n.icon=void 0,n.tooltip=!1;return}if(!e){n.label=void 0,n.icon=void 0,n.tooltip=a(`Open link in new tab`);return}let t=this._getLinkProviderLinkByHref(e);if(t){let{label:e,tooltip:r,icon:i}=t.item;n.label=e,n.tooltip=r||!1,n.icon=i}else n.label=e,n.icon=void 0,n.tooltip=a(`Open link in new tab`)};return o(i.value),this.listenTo(i,`change:value`,(e,t,n)=>{o(n)}),this.listenTo(n,`navigate`,(e,t,n)=>{let r=this._getLinkProviderLinkByHref(t);if(!r)return;let{provider:i,item:a}=r,{navigate:o}=i;o&&o(a)&&(e.stop(),n())}),n}),e.ui.componentFactory.add(`unlink`,t=>{let n=e.commands.get(`unlink`),r=new H(t),i=t.t;return r.set({label:i(`Unlink`),icon:ky,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{e.execute(`unlink`),this._hideUI()}),r}),e.ui.componentFactory.add(`editLink`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Edit link`),icon:Rv,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{this._addFormView()}),r}),e.ui.componentFactory.add(`linkProperties`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Link properties`),icon:iy,tooltip:!0}),r.bind(`isEnabled`).to(n,`isEnabled`,n,`value`,n,`manualDecorators`,(e,t,n)=>e&&!!t&&n.length>0),this.listenTo(r,`execute`,()=>{this._addPropertiesView()}),r})}_createLinksListProviderButton(e){let t=this.editor.locale,n=new _k(t);return n.set({label:e.label}),this.listenTo(n,`execute`,()=>{this._showLinksProviderView(e)}),n}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`link`),i=new e(t.locale),a=n.t;return i.set({label:a(`Link`),icon:Z_,keystroke:BO,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{t.editing.view.scrollToTheSelection(),this._showUI(!0),this._getSelectedLinkElement()&&this._addFormView()}),i}_enableBalloonActivators(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,()=>{this._getSelectedLinkElement()&&this._showUI()}),e.keystrokes.set(BO,(t,n)=>{n(),e.commands.get(`link`).isEnabled&&(e.editing.view.scrollToTheSelection(),this._showUI(!0))})}_enableUserBalloonInteractions(){this.editor.keystrokes.set(`Tab`,(e,t)=>{this._isToolbarVisible&&!this.toolbarView.focusTracker.isFocused&&(this.toolbarView.focus(),t())},{priority:`high`}),this.editor.keystrokes.set(`Esc`,(e,t)=>{this._isUIVisible&&(this._hideUI(),t())}),Ya({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>{this._hideUI(!1)}})}_addToolbarView(){this.toolbarView||this._createViews(),!this._isToolbarInPanel&&this._balloon.add({view:this.toolbarView,position:this._getBalloonPositionData(),balloonClassName:`ck-toolbar-container`})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;let e=this.editor.commands.get(`link`);this.formView.disableCssTransitions(),this.formView.resetFormStatus(),this.formView.backButtonView.isVisible=e.isEnabled&&e.value!==void 0,this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.selectedLinkableText=this._getSelectedLinkableText(),this.formView.displayedTextInputView.fieldView.value=this.selectedLinkableText||``,this.formView.urlInputView.fieldView.value=e.value||``,this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions()}_addPropertiesView(){this.propertiesView||this._createViews(),!this._arePropertiesInPanel&&(this.propertiesView.disableCssTransitions(),this._balloon.add({view:this.propertiesView,position:this._getBalloonPositionData()}),this.propertiesView.enableCssTransitions(),this.propertiesView.focus())}_showLinksProviderView(e){this.linkProviderItemsView&&this._removeLinksProviderView(),this.linkProviderItemsView=this._createLinkProviderItemsView(e),this._addLinkProviderItemsView(e)}_addLinkProviderItemsView(e){this.linkProviderItemsView.listChildren.clear(),this.linkProviderItemsView.listChildren.addMany(this._createLinkProviderListView(e)),this._balloon.add({view:this.linkProviderItemsView,position:this._getBalloonPositionData()}),this.linkProviderItemsView.focus()}_closeFormView(){let e=this.editor.commands.get(`link`);this.selectedLinkableText=void 0,e.value===void 0?this._hideUI():this._removeFormView()}_removePropertiesView(){this._arePropertiesInPanel&&this._balloon.remove(this.propertiesView)}_removeLinksProviderView(){this._isLinksListInPanel&&this._balloon.remove(this.linkProviderItemsView)}_removeFormView(e=!0){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this.formView.displayedTextInputView.fieldView.reset(),this.formView.urlInputView.fieldView.reset(),this._balloon.remove(this.formView),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(e=!1){this.formView||this._createViews(),this._getSelectedLinkElement()?(this._isToolbarVisible?this._addFormView():this._addToolbarView(),e&&this._balloon.showStack(`main`)):(this._showFakeVisualSelection(),this._addToolbarView(),e&&this._balloon.showStack(`main`),this._addFormView()),this._startUpdatingUI()}_hideUI(e=!0){let t=this.editor;this._isUIInPanel&&(this.stopListening(t.ui,`update`),this.stopListening(this._balloon,`change:visibleView`),e&&t.editing.view.focus(),this._removeLinksProviderView(),this._removePropertiesView(),this._removeFormView(e),this._isToolbarInPanel&&this._balloon.remove(this.toolbarView),this._hideFakeVisualSelection())}_startUpdatingUI(){let e=this.editor,t=e.editing.view.document,n=this._getSelectedLinkElement(),r=a(),i=()=>{let e=this._getSelectedLinkElement(),t=a();n&&!e||!n&&t!==r?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=e,r=t};function a(){return t.selection.focus.getAncestors().reverse().find(e=>e.is(`element`))}this.listenTo(e.ui,`update`,i),this.listenTo(this._balloon,`change:visibleView`,i)}get _arePropertiesInPanel(){return!!this.propertiesView&&this._balloon.hasView(this.propertiesView)}get _isLinksListInPanel(){return!!this.linkProviderItemsView&&this._balloon.hasView(this.linkProviderItemsView)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _isToolbarInPanel(){return!!this.toolbarView&&this._balloon.hasView(this.toolbarView)}get _isPropertiesVisible(){return!!this.propertiesView&&this._balloon.visibleView===this.propertiesView}get _isFormVisible(){return!!this.formView&&this._balloon.visibleView==this.formView}get _isToolbarVisible(){return!!this.toolbarView&&this._balloon.visibleView===this.toolbarView}get _isUIInPanel(){return this._arePropertiesInPanel||this._isLinksListInPanel||this._isFormInPanel||this._isToolbarInPanel}get _isUIVisible(){return this._isPropertiesVisible||this._isLinksListInPanel||this._isFormVisible||this._isToolbarVisible}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;if(this.editor.model.markers.has(vk)){let t=this.editor.editing.mapper.markerNameToElements(vk);if(t){let n=Array.from(t),r=e.createRange(e.createPositionBefore(n[0]),e.createPositionAfter(n[n.length-1]));return{target:e.domConverter.viewRangeToDom(r)}}}return{target:()=>{let n=this._getSelectedLinkElement();return n?e.domConverter.mapViewToDom(n):e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}}_getSelectedLinkElement(){let e=this.editor.editing.view,t=e.document.selection,n=t.getSelectedElement();if(t.isCollapsed||n&&HE(n))return bk(t.getFirstPosition());{let n=t.getFirstRange().getTrimmed(),r=bk(n.start),i=bk(n.end);return!r||r!=i?null:e.createRangeIn(r).getTrimmed().isEqual(n)?r:null}}_getSelectedLinkableText(){let e=this.editor.model,t=this.editor.editing,n=this._getSelectedLinkElement();if(!n)return QO(e.document.selection.getFirstRange());let r=t.view.createRangeOn(n);return QO(t.mapper.toModelRange(r))}_getLinkProviderLinkByHref(e){if(!e)return null;for(let t of this._linksProviders){let n=t.getItem?t.getItem(e):t.getListItems().find(t=>t.href===e);if(n)return{provider:t,item:n}}return null}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(vk))t.updateMarker(vk,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(vk)&&e.change(e=>{e.removeMarker(vk)})}};function bk(e){return e.getAncestors().find(e=>VO(e))||null}function xk(e){let t=e.t,n=e.config.get(`link.allowCreatingEmptyLinks`);return[e=>{if(!n&&!e.url.length)return t(`Link URL must not be empty.`)}]}const Sk=RegExp(`(^|\\\\s)(((?:(?:(?:https?|ftp):)?\\\\/\\\\/)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(((?!www\\\\.)|(www\\\\.))(?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.)+(?:[a-z\\\\u00a1-\\\\uffff]{2,63}))|localhost)(?::\\\\d{2,5})?(?:[/?#]\\\\S*)?)|((www.|(\\\\S+@))((?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.))+(?:[a-z\\\\u00a1-\\\\uffff]{2,63})))$`,`i`);var Ck=class extends F{static get requires(){return[hT,uk]}static get pluginName(){return`AutoLink`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.model.document.selection;e.on(`change:range`,()=>{this.isEnabled=!e.anchor.parent.is(`element`,`codeBlock`)}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling(),this._enablePasteLinking()}_expandLinkRange(e,t){return t.textNode&&t.textNode.hasAttribute(`linkHref`)?LT(t,`linkHref`,t.textNode.getAttribute(`linkHref`),e):null}_selectEntireLinks(e,t){let n=this.editor.model,r=n.document.selection,i=r.getFirstPosition(),a=r.getLastPosition(),o=t.getJoined(this._expandLinkRange(n,i)||t);o&&=o.getJoined(this._expandLinkRange(n,a)||t),o&&(o.start.isBefore(i)||o.end.isAfter(a))&&e.setSelection(o)}_enablePasteLinking(){let e=this.editor,t=e.model,n=t.document.selection,r=e.plugins.get(`ClipboardPipeline`),i=e.commands.get(`link`);r.on(`inputTransformation`,(e,r)=>{if(!this.isEnabled||!i.isEnabled||n.isCollapsed||r.method!==`paste`||n.rangeCount>1)return;let a=n.getFirstRange(),o=r.dataTransfer.getData(`text/plain`);if(!o)return;let s=o.match(Sk);s&&s[2]===o&&(t.change(e=>{this._selectEntireLinks(e,a),i.execute(o)}),e.stop())},{priority:`high`})}_enableTypingHandling(){let e=this.editor,t=new yT(e.model,e=>{let t=e;if(!wk(t))return;t=t.slice(0,-1),`!.:,;?`.includes(t[t.length-1])&&(t=t.slice(0,-1));let n=Tk(t);if(n)return{url:n,removedTrailingCharacters:e.length-t.length}});t.on(`matched:data`,(t,n)=>{let{batch:r,range:i,url:a,removedTrailingCharacters:o}=n;if(!r.isTyping)return;let s=i.end.getShiftedBy(-o),c=s.getShiftedBy(-a.length),l=e.model.createRange(c,s);this._applyAutoLink(a,l)}),t.bind(`isEnabled`).to(this)}_enableEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`enter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n;n=e.parent.previousSibling?.is(`element`)?t.createRangeIn(e.parent.previousSibling):t.createRange(t.createPositionAt(e.parent,0),e),this._checkAndApplyAutoLinkOnRange(n)})}_enableShiftEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`shiftEnter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n=t.createRange(t.createPositionAt(e.parent,0),e.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(n)})}_checkAndApplyAutoLinkOnRange(e){let t=this.editor.model,{text:n,range:r}=_T(e,t),i=Tk(n);if(i){let e=t.createRange(r.end.getShiftedBy(-i.length),r.end);this._applyAutoLink(i,e)}}_applyAutoLink(e,t){let n=this.editor.model,r=YO(e,this.editor.config.get(`link.defaultProtocol`));!this.isEnabled||!Ek(t,n)||!XO(r)||Dk(t)||this._persistAutoLink(r,t)}_persistAutoLink(e,t){let n=this.editor.model,r=this.editor.plugins.get(`Delete`);n.enqueueChange(i=>{i.setAttribute(`linkHref`,e,t),n.enqueueChange(()=>{r.requestUndoOnBackspace()})})}};function wk(e){return e.length>4&&e[e.length-1]===` `&&e[e.length-2]!==` `}function Tk(e){let t=Sk.exec(e);return t?t[2]:null}function Ek(e,t){return t.schema.checkAttributeInSelection(t.createSelection(e),`linkHref`)}function Dk(e){let t=e.start.nodeAfter;return!!t&&t.hasAttribute(`linkHref`)}var Ok=class extends F{static get requires(){return[uk,yk,Ck]}static get pluginName(){return`Link`}static get isOfficialPlugin(){return!0}},kk=class extends I{_stack=[];_createdBatches=new WeakSet;constructor(e){super(e),this.refresh(),this._isEnabledBasedOnSelection=!1,this.listenTo(e.data,`set`,(e,t)=>{t[1]={...t[1]};let n=t[1];n.batchType||={isUndoable:!1}},{priority:`high`}),this.listenTo(e.data,`set`,(e,t)=>{t[1].batchType.isUndoable||this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}get createdBatches(){return this._createdBatches}addBatch(e){let t=this.editor.model.document.selection,n={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:n}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(e,t,n){let r=this.editor.model,i=r.document,a=[],o=e.map(e=>e.getTransformedByOperations(n)),s=o.flat();for(let e of o){let t=e.filter(e=>e.root!=i.graveyard).filter(e=>!jk(e,s));t.length&&(Ak(t),a.push(t[0]))}a.length&&r.change(e=>{e.setSelection(a,{backward:t})})}_undo(e,t){let n=this.editor.model,r=n.document;this._createdBatches.add(t);let i=e.operations.slice().filter(e=>e.isDocumentOperation);i.reverse();for(let e of i){let i=e.baseVersion+1,a=Array.from(r.history.getOperations(i)),o=nf([e.getReversed()],a,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(let i of o){let a=i.affectedSelectable;a&&!n.canEditAt(a)&&(i=new Kd(i.baseVersion)),t.addOperation(i),n.applyOperation(i),r.history.setOperationAsUndone(e,i)}}}};function Ak(e){e.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let t=1;tt!==e&&t.containsRange(e,!0))}var Mk=class extends kk{execute(e=null){let t=e?this._stack.findIndex(t=>t.batch==e):this._stack.length-1,n=this._stack.splice(t,1)[0],r=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(r,()=>{this._undo(n.batch,r);let e=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,e)}),this.fire(`revert`,n.batch,r),this.refresh()}},Nk=class extends kk{execute(){let e=this._stack.pop(),t=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(t,()=>{let n=e.batch.operations[e.batch.operations.length-1].baseVersion+1,r=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,r),this._undo(e.batch,t)}),this.fire(`revert`,e.batch,t),this.refresh()}},Pk=class extends F{_undoCommand;_redoCommand;_batchRegistry=new WeakSet;static get pluginName(){return`UndoEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t;this._undoCommand=new Mk(e),this._redoCommand=new Nk(e),e.commands.add(`undo`,this._undoCommand),e.commands.add(`redo`,this._redoCommand),this.listenTo(e.model,`applyOperation`,(e,t)=>{let n=t[0];if(!n.isDocumentOperation)return;let r=n.batch,i=this._redoCommand.createdBatches.has(r),a=this._undoCommand.createdBatches.has(r);this._batchRegistry.has(r)||(this._batchRegistry.add(r),r.isUndoable&&(i?this._undoCommand.addBatch(r):a||(this._undoCommand.addBatch(r),this._redoCommand.clearStack())))},{priority:`highest`}),this.listenTo(this._undoCommand,`revert`,(e,t,n)=>{this._redoCommand.addBatch(n)}),e.keystrokes.set(`CTRL+Z`,`undo`),e.keystrokes.set(`CTRL+Y`,`redo`),e.keystrokes.set(`CTRL+SHIFT+Z`,`redo`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Undo`),keystroke:`CTRL+Z`},{label:t(`Redo`),keystroke:[[`CTRL+Y`],[`CTRL+SHIFT+Z`]]}]})}},Fk=class extends F{static get pluginName(){return`UndoUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?Oy:Jv,i=t.uiLanguageDirection==`ltr`?Jv:Oy;this._addButtonsToFactory(`undo`,n(`Undo`),`CTRL+Z`,r),this._addButtonsToFactory(`redo`,n(`Redo`),`CTRL+Y`,i)}_addButtonsToFactory(e,t,n,r){let i=this.editor;i.ui.componentFactory.add(e,()=>{let i=this._createButton(H,e,t,n,r);return i.set({tooltip:!0}),i}),i.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n,r))}_createButton(e,t,n,r,i){let a=this.editor,o=a.locale,s=a.commands.get(t),c=new e(o);return c.set({label:n,icon:i,keystroke:r}),c.bind(`isEnabled`).to(s,`isEnabled`),this.listenTo(c,`execute`,()=>{a.execute(t),a.editing.view.focus()}),c}},Ik=class extends F{static get requires(){return[Pk,Fk]}static get pluginName(){return`Undo`}static get isOfficialPlugin(){return!0}};function Lk(e){return e.createContainerElement(`span`,{class:`image-inline`},e.createEmptyElement(`img`))}function Rk(e){return e.createContainerElement(`figure`,{class:`image`},[e.createEmptyElement(`img`),e.createSlot(`children`)])}function zk(e,t){let n=e.plugins.get(`ImageUtils`),r=e.plugins.has(`ImageInlineEditing`)&&e.plugins.has(`ImageBlockEditing`);return e=>n.isInlineImageView(e)?r?Bk(e,n)===t?i(e):null:i(e):null;function i(e){let t={name:!0};return e.hasAttribute(`src`)&&(t.attributes=[`src`]),t}}function Bk(e,t){return e.getStyle(`display`)==`block`||e.findAncestor(t.isBlockImageView)?`imageBlock`:`imageInline`}function Vk(e,t,n){return!!e.findAllowedParent(t,n)||ku(t,n,e)}function Hk(e,t){let n=j(t.getSelectedBlocks());return!n||e.isObject(n)||n.isEmpty&&n.name!=`listItem`?`imageBlock`:`imageInline`}function Uk(e){return e&&e.endsWith(`px`)?parseInt(e):null}function Wk(e){let t=Uk(e.getStyle(`width`)),n=Uk(e.getStyle(`height`));return!!(t&&n)}const Gk=/^(image|image-inline)$/;var Kk=class extends F{_domEmitter=new(br());static get pluginName(){return`ImageUtils`}static get isOfficialPlugin(){return!0}isImage(e){return this.isInlineImage(e)||this.isBlockImage(e)}isInlineImageView(e){return!!e&&e.is(`element`,`img`)}isBlockImageView(e){return!!e&&e.is(`element`,`figure`)&&e.hasClass(`image`)}insertImage(e={},t=null,n=null,r={}){let i=this.editor,a=i.model,o=a.document.selection,s=Zk(i,t||o,n);e={...Object.fromEntries(o.getAttributes()),...e};for(let t in e)a.schema.checkAttribute(s,t)||delete e[t];return a.change(n=>{let{setImageSizes:i=!0}=r,o=n.createElement(s,e);return a.insertObject(o,t,null,{setSelection:`on`,findOptimalPosition:!t&&s!=`imageInline`?`auto`:void 0}),o.parent?(i&&this.setImageNaturalSizeAttributes(o),o):null})}setImageNaturalSizeAttributes(e){let t=e.getAttribute(`src`);t&&(e.getAttribute(`width`)||e.getAttribute(`height`)||this.editor.model.change(n=>{let r=new u.window.Image;this._domEmitter.listenTo(r,`load`,()=>{!e.getAttribute(`width`)&&!e.getAttribute(`height`)&&this.editor.model.enqueueChange(n.batch,t=>{t.setAttribute(`width`,r.naturalWidth,e),t.setAttribute(`height`,r.naturalHeight,e)}),this._domEmitter.stopListening(r,`load`)}),r.src=t}))}getClosestSelectedImageWidget(e){let t=e.getFirstPosition();if(!t)return null;let n=e.getSelectedElement();if(n&&this.isImageWidget(n))return n;let r=t.parent;for(;r;){if(r.is(`element`)&&this.isImageWidget(r))return r;r=r.parent}return null}getClosestSelectedImageElement(e){let t=e.getSelectedElement();return this.isImage(t)?t:e.getFirstPosition().findAncestor(`imageBlock`)}getImageWidgetFromImageView(e){return e.findAncestor({classes:Gk})}isImageAllowed(){let e=this.editor.model.document.selection;return qk(this.editor,e)&&Jk(e)}toImageWidget(e,t,n){return t.setCustomProperty(`image`,!0,e),UE(e,t,{label:()=>{let t=this.findViewImgElement(e).getAttribute(`alt`);return t?`${t} ${n}`:n}})}isImageWidget(e){return!!e.getCustomProperty(`image`)&&HE(e)}isBlockImage(e){return!!e&&e.is(`element`,`imageBlock`)}isInlineImage(e){return!!e&&e.is(`element`,`imageInline`)}findViewImgElement(e){if(this.isInlineImageView(e))return e;let t=this.editor.editing.view;for(let{item:n}of t.createRangeIn(e))if(this.isInlineImageView(n))return n}destroy(){return this._domEmitter.stopListening(),super.destroy()}};function qk(e,t){return Zk(e,t,null)==`imageBlock`?Xk(e.model,t):e.model.schema.checkChild(t.focus,`imageInline`)}function Jk(e){return[...e.focus.getAncestors()].every(e=>!e.is(`element`,`imageBlock`))}function Yk(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function Xk(e,t){let n=Yk(t.is(`position`)?e.createSelection(t):t,e);return e.schema.checkChild(n,`imageBlock`)}function Zk(e,t,n){let r=e.model.schema,i=e.config.get(`image.insert.type`);return e.plugins.has(`ImageBlockEditing`)?e.plugins.has(`ImageInlineEditing`)?n||(!Xk(e.model,t)||i===`inline`?`imageInline`:i===`auto`?t.is(`selection`)?Hk(r,t):r.checkChild(t,`imageInline`)?`imageInline`:`imageBlock`:`imageBlock`):`imageBlock`:`imageInline`}const Qk=RegExp(`^(http(s)?:\\\\/\\\\/)?[\\\\w-]+\\\\.[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]+\\\\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)(\\\\?[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]*)?(#[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]*)?$`);var $k=class extends F{static get requires(){return[PO,Kk,Ik,hT]}static get pluginName(){return`AutoImage`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedImageBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedImageBetweenPositions(e,t){let n=this.editor,r=new xl(e,t),i=r.getWalker({ignoreElementEnd:!0}),a=Object.fromEntries(n.model.document.selection.getAttributes()),o=this.editor.plugins.get(`ImageUtils`),s=``;for(let e of i)e.item.is(`$textProxy`)&&(s+=e.item.data);if(s=s.trim(),!s.match(Qk)){r.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=setTimeout(()=>{if(!n.commands.get(`insertImage`).isEnabled){r.detach();return}n.model.change(e=>{this._timeoutId=null,e.remove(r),r.detach();let t;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert.toPosition()),o.insertImage({...a,src:s},t),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(`Delete`).requestUndoOnBackspace()},100)}},eA=class extends I{refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled&&e.hasAttribute(`alt`)?this.value=e.getAttribute(`alt`):this.value=!1}execute(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=t.model,i=n.getClosestSelectedImageElement(r.document.selection);r.change(t=>{t.setAttribute(`alt`,e.newValue,i)})}},tA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageTextAlternativeEditing`}static get isOfficialPlugin(){return!0}init(){this.editor.commands.add(`imageTextAlternative`,new eA(this.editor))}},nA=class extends P{focusTracker;keystrokes;labeledInput;backButtonView;saveButtonView;children;_focusables;_focusCycler;constructor(e){super(e),this.focusTracker=new M,this.keystrokes=new N,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-text-alternative-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Text Alternative`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Text alternative`),t.class=`ck-labeled-field-view_full-width`,t}};function rA(e){let t=e.plugins.get(`ContextualBalloon`);if(e.plugins.get(`ImageUtils`).getClosestSelectedImageWidget(e.editing.view.document.selection)){let n=iA(e);t.updatePosition(n)}}function iA(e){let t=e.editing.view,n=ab.defaultPositions,r=e.plugins.get(`ImageUtils`);return{target:t.domConverter.mapViewToDom(r.getClosestSelectedImageWidget(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}var aA=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageTextAlternativeUI`}static get isOfficialPlugin(){return!0}init(){this._createButton()}destroy(){super.destroy(),this._form&&this._form.destroy()}_createButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`imageTextAlternative`,n=>{let r=e.commands.get(`imageTextAlternative`),i=new H(n);return i.set({label:t(`Change image text alternative`),icon:Cy,tooltip:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{this._showForm()}),i})}_createForm(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ImageUtils`);this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(nA))(e.locale),this._form.render(),this.listenTo(this._form,`submit`,()=>{e.execute(`imageTextAlternative`,{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),this.listenTo(e.ui,`update`,()=>{n.getClosestSelectedImageWidget(t.selection)?this._isVisible&&rA(e):this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;this._form||this._createForm();let e=this.editor,t=e.commands.get(`imageTextAlternative`),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(e)}),n.fieldView.value=n.fieldView.element.value=t.value||``,this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}},oA=class extends F{static get requires(){return[tA,aA]}static get pluginName(){return`ImageTextAlternative`}static get isOfficialPlugin(){return!0}};function sA(e){let t=(t,n,r)=>{if(!r.consumable.test(n.viewItem,{name:!0,classes:`image`}))return;let i=e.findViewImgElement(n.viewItem);if(!i||!r.consumable.test(i,{name:!0})||!Vk(r.schema,n.modelCursor,`imageBlock`))return;r.consumable.consume(n.viewItem,{name:!0,classes:`image`});let a=r.convertItem(i,n.modelCursor);if(!a.modelRange){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}let o=j(a.modelRange.getItems());if(!o){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}r.convertChildren(n.viewItem,o),r.updateConversionResult(o,n)};return e=>{e.on(`element:figure`,t)}}function cA(e,t){let n=(n,r,i)=>{let a=Bk(r.viewItem,t),o=r.viewItem.hasAttribute(`src`)?{src:r.viewItem.getAttribute(`src`)}:void 0,s={name:!0,attributes:Object.keys(o||{})};if(!i.consumable.test(r.viewItem,s))return;a!=e&&!Vk(i.schema,r.modelCursor,a)&&(a=e);let c=i.writer.createElement(a,o);i.safeInsert(c,r.modelCursor)&&(i.consumable.consume(r.viewItem,s),i.convertChildren(r.viewItem,c),i.updateConversionResult(c,r))};return e=>{e.on(`element:img`,n)}}function lA(e){let t=[`srcset`,`media`,`type`,`sizes`],n=(n,r,i)=>{let a=r.viewItem;if(!i.consumable.test(a,{name:!0}))return;let o=new Map;for(let e of a.getChildren())if(e.is(`element`,`source`)){let n={};for(let r of t)e.hasAttribute(r)&&i.consumable.test(e,{attributes:r})&&(n[r]=e.getAttribute(r));Object.keys(n).length&&o.set(e,n)}let s=e.findViewImgElement(a);if(!s)return;let c=r.modelCursor.parent;if(!c.is(`element`,`imageBlock`)){let e=i.convertItem(s,r.modelCursor);if(r.modelRange=e.modelRange,r.modelCursor=e.modelCursor,!e.modelRange||(c=j(e.modelRange.getItems()),!c))return}i.consumable.consume(a,{name:!0});for(let[e,t]of o)i.consumable.consume(e,{attributes:Object.keys(t)});o.size&&i.writer.setAttribute(`sources`,Array.from(o.values()),c),i.convertChildren(a,c)};return e=>{e.on(`element:picture`,n)}}function uA(e,t){let n=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);n.attributeNewValue===null?(i.removeAttribute(`srcset`,o),i.removeAttribute(`sizes`,o)):n.attributeNewValue&&(i.setAttribute(`srcset`,n.attributeNewValue,o),i.setAttribute(`sizes`,`100vw`,o))};return e=>{e.on(`attribute:srcset:${t}`,n)}}function dA(e){let t=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a),s=n.attributeNewValue;if(s&&s.length){let e=[],t=o.parent;for(;t&&t.is(`attributeElement`);){let n=t.parent;i.unwrap(i.createRangeOn(o),t),e.unshift(t),t=n}let n=o.parent.is(`element`,`picture`),r=n?o.parent:i.createContainerElement(`picture`,null);n||i.insert(i.createPositionBefore(o),r),i.remove(i.createRangeIn(r)),i.insert(i.createPositionAt(r,`end`),s.map(e=>i.createEmptyElement(`source`,e))),i.move(i.createRangeOn(o),i.createPositionAt(r,`end`));for(let t of e)i.wrap(i.createRangeOn(r),t)}else if(o.parent.is(`element`,`picture`)){let e=o.parent;i.move(i.createRangeOn(o),i.createPositionBefore(e)),i.remove(e)}};return e=>{e.on(`attribute:sources:imageBlock`,t),e.on(`attribute:sources:imageInline`,t)}}function fA(e,t,n){let r=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);i.setAttribute(n.attributeKey,n.attributeNewValue||``,o)};return e=>{e.on(`attribute:${n}:${t}`,r)}}var pA=class extends kc{observe(e){this.listenTo(e,`load`,(e,t)=>{let n=t.target;this.checkShouldIgnoreEventFromTarget(n)||n.tagName==`IMG`&&this._fireEvents(t)},{useCapture:!0})}stopObserving(e){this.stopListening(e)}_fireEvents(e){this.isEnabled&&(this.document.fire(`layoutChanged`),this.document.fire(`imageLoaded`,e))}},mA=class extends I{constructor(e){super(e);let t=e.config.get(`image.insert.type`);e.plugins.has(`ImageBlockEditing`)||t===`block`&&T(`image-block-plugin-required`),e.plugins.has(`ImageInlineEditing`)||t===`inline`&&T(`image-inline-plugin-required`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`);this.isEnabled=e.isImageAllowed()}execute(e){let t=A(e.source),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((t,a)=>{let o=n.getSelectedElement();if(typeof t==`string`&&(t={src:t}),a&&o&&r.isImage(o)){let n=this.editor.model.createPositionAfter(o);r.insertImage({...t,...i},n,e.imageType)}else e.breakBlock?r.insertImage({...t,...i},n.getFirstPosition(),e.imageType):r.insertImage({...t,...i},null,e.imageType)})}},hA=class extends I{constructor(e){super(e),this.decorate(`cleanupImage`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`),t=this.editor.model.document.selection.getSelectedElement();this.isEnabled=e.isImage(t),this.value=this.isEnabled?t.getAttribute(`src`):null}execute(e){let t=this.editor.model.document.selection.getSelectedElement(),n=this.editor.plugins.get(`ImageUtils`);this.editor.model.change(r=>{r.setAttribute(`src`,e.source,t),this.cleanupImage(r,t),n.setImageNaturalSizeAttributes(t)})}cleanupImage(e,t){e.removeAttribute(`srcset`,t),e.removeAttribute(`sizes`,t),e.removeAttribute(`sources`,t),e.removeAttribute(`width`,t),e.removeAttribute(`height`,t),e.removeAttribute(`alt`,t)}},gA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.conversion;e.editing.view.addObserver(pA),t.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`alt`},model:`alt`}).attributeToAttribute({view:{name:`img`,key:`srcset`},model:`srcset`});let n=new mA(e),r=new hA(e);e.commands.add(`insertImage`,n),e.commands.add(`replaceImageSource`,r),e.commands.add(`imageInsert`,n)}},_A=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageSizeAttributes`}static get isOfficialPlugin(){return!0}afterInit(){this._registerSchema(),this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`)}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&e.extend(`imageBlock`,{allowAttributes:[`width`,`height`]}),this.editor.plugins.has(`ImageInlineEditing`)&&e.extend(`imageInline`,{allowAttributes:[`width`,`height`]})}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=e===`imageBlock`?`figure`:`img`;t.conversion.for(`upcast`).attributeToAttribute({view:{name:r,styles:{width:/.+/}},model:{key:`width`,value:e=>Wk(e)?Uk(e.getStyle(`width`)):null}}).attributeToAttribute({view:{name:r,key:`width`},model:`width`}).attributeToAttribute({view:{name:r,styles:{height:/.+/}},model:{key:`height`,value:e=>Wk(e)?Uk(e.getStyle(`height`)):null}}).attributeToAttribute({view:{name:r,key:`height`},model:`height`}),t.conversion.for(`editingDowncast`).add(e=>{i(e,`width`,`width`,!0,!0),i(e,`height`,`height`,!0,!0)}),t.conversion.for(`dataDowncast`).add(e=>{i(e,`width`,`width`,!1),i(e,`height`,`height`,!1)}),t.conversion.for(`upcast`).add(e=>{e.on(`element:img`,(e,t,n)=>{let r=t.viewItem.getAttribute(`width`),i=t.viewItem.getAttribute(`height`);r&&i&&n.consumable.consume(t.viewItem,{styles:[`aspect-ratio`]})})});function i(t,r,i,a,o=!1){t.on(`attribute:${r}:${e}`,(t,r,s)=>{if(!s.consumable.consume(r.item,t.name))return;let c=s.writer,l=s.mapper.toViewElement(r.item),u=n.findViewImgElement(l);r.attributeNewValue===null?c.removeAttribute(i,u):c.setAttribute(i,r.attributeNewValue,u);let d=r.item.getAttribute(`width`),f=r.item.getAttribute(`height`),p=d&&f;if(p&&o&&c.setAttribute(`loading`,`lazy`,u),r.item.hasAttribute(`sources`))return;let m=r.item.hasAttribute(`resizedWidth`);e===`imageInline`&&!m&&!a||p&&c.setStyle(`aspect-ratio`,`${d}/${f}`,u)})}}},vA=class extends I{_modelElementName;constructor(e,t){super(e),this._modelElementName=t}refresh(){let e=this.editor,t=e.model,n=t.schema,r=e.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(t.document.selection);if(!(this._modelElementName===`imageBlock`?r.isInlineImage(i):r.isBlockImage(i))){this.isEnabled=!1;return}let a=t.createPositionBefore(i);this.isEnabled=Vk(n,a,this._modelElementName)}execute(e={}){let t=this.editor,n=this.editor.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection),a=Object.fromEntries(i.getAttributes());return!a.src&&!a.uploadId?null:n.change(t=>{let{setImageSizes:o=!0}=e,s=Array.from(n.markers).filter(e=>e.getRange().containsItem(i)),c=r.insertImage(a,n.createSelection(i,`on`),this._modelElementName,{setImageSizes:o});if(!c)return null;let l=t.createRangeOn(c);for(let e of s){let n=e.getRange(),r=n.root.rootName==`$graveyard`?l:n.getJoined(l,!0);t.updateMarker(e,{range:r})}return{oldElement:i,newElement:c}})}},yA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImagePlaceholder`}static get isOfficialPlugin(){return!0}afterInit(){this._setupSchema(),this._setupConversion(),this._setupLoadListener()}_setupSchema(){let e=this.editor.model.schema;e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`placeholder`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`placeholder`]})}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`editingDowncast`).add(e=>{e.on(`attribute:placeholder`,(e,t,r)=>{if(!r.consumable.test(t.item,e.name)||!t.item.is(`element`,`imageBlock`)&&!t.item.is(`element`,`imageInline`))return;r.consumable.consume(t.item,e.name);let i=r.writer,a=r.mapper.toViewElement(t.item),o=n.findViewImgElement(a);t.attributeNewValue?(i.addClass(`image_placeholder`,o),i.setStyle(`background-image`,`url(${t.attributeNewValue})`,o),i.setCustomProperty(`editingPipeline:doNotReuseOnce`,!0,o)):(i.removeClass(`image_placeholder`,o),i.removeStyle(`background-image`,o))})})}_setupLoadListener(){let e=this.editor,t=e.model,n=e.editing,r=n.view,i=e.plugins.get(`ImageUtils`);r.addObserver(pA),this.listenTo(r.document,`imageLoaded`,(e,a)=>{let o=r.domConverter.mapDomToView(a.target);if(!o)return;let s=i.getImageWidgetFromImageView(o);if(!s)return;let c=n.mapper.toModelElement(s);!c||!c.hasAttribute(`placeholder`)||t.enqueueChange({isUndoable:!1},e=>{e.removeAttribute(`placeholder`,c)})})}},bA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageBlockEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageBlock`,{inheritAllFrom:`$blockObject`,allowAttributes:[`alt`,`src`,`srcset`]}),this._setupConversion(),e.plugins.has(`ImageInlineEditing`)&&(e.commands.add(`imageTypeBlock`,new vA(this.editor,`imageBlock`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:t})=>Rk(t)}),n.for(`editingDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:n})=>r.toImageWidget(Rk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageBlock`,`src`)).add(fA(r,`imageBlock`,`alt`)).add(uA(r,`imageBlock`)),n.for(`upcast`).add(cA(`imageBlock`,r)).add(sA(r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isInlineImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(l&&Vk(t.schema,l,`imageBlock`)&&Hk(t.schema,c)===`imageBlock`){let e=new Np(n.document),t=o.map(t=>e.createElement(`figure`,{class:`image`},t));a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageBlock`)&&r.setImageNaturalSizeAttributes(e)})})}},xA=class extends P{focusTracker;keystrokes;_focusables;_focusCycler;children;constructor(e,t=[]){super(e),this.focusTracker=new M,this.keystrokes=new N,this._focusables=new pa,this.children=this.createCollection(),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}});for(let e of t)this.children.add(e),this._focusables.add(e),e instanceof xb&&this._focusables.addMany(e.children);this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-form`],tabindex:-1},children:this.children})}render(){super.render(),Qa({view:this});for(let e of this._focusables)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}},SA=class extends F{static get pluginName(){return`ImageInsertUI`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}dropdownView;_integrations=new Map;constructor(e){super(e),e.config.define(`image.insert.integrations`,[`upload`,`assetManager`,`url`])}init(){let e=this.editor,t=e.model.document.selection,n=e.plugins.get(`ImageUtils`);this.set(`isImageSelected`,!1),this.listenTo(e.model.document,`change`,()=>{this.isImageSelected=n.isImage(t.getSelectedElement())});let r=e=>this._createToolbarComponent(e);e.ui.componentFactory.add(`insertImage`,r),e.ui.componentFactory.add(`imageInsert`,r),e.ui.componentFactory.add(`menuBar:insertImage`,e=>this._createMenuBarComponent(e))}registerIntegration({name:e,observable:t,buttonViewCreator:n,formViewCreator:r,menuBarButtonViewCreator:i,requiresForm:a=!1,override:o=!1}){this._integrations.has(e)&&!o&&T(`image-insert-integration-exists`,{name:e}),this._integrations.set(e,{observable:t,buttonViewCreator:n,menuBarButtonViewCreator:i,formViewCreator:r,requiresForm:a})}_createToolbarComponent(e){let t=this.editor,n=e.t,r=this._prepareIntegrations();if(!r.length)return null;let i,a=r[0];if(r.length==1){if(!a.requiresForm)return a.buttonViewCreator(!0);i=a.buttonViewCreator(!0)}else i=new Mx(e,a.buttonViewCreator(!1)),i.tooltip=!0,i.bind(`label`).to(this,`isImageSelected`,e=>n(e?`Replace image`:`Insert image`));let o=this.dropdownView=Nx(e,i),s=r.map(({observable:e})=>typeof e==`function`?e():e);return o.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),o.once(`change:isOpen`,()=>{let e=r.flatMap(({formViewCreator:e})=>e(r.length==1)),n=new xA(t.locale,e);o.panelView.children.add(n)}),o}_createMenuBarComponent(e){let t=e.t,n=this._prepareIntegrations();if(!n.length)return null;let r=n.flatMap(({menuBarButtonViewCreator:e})=>e(n.length==1)),i=new uw(e),a=new dw(e);i.panelView.children.add(a),i.buttonView.set({icon:B_,label:t(`Image`)});for(let t of r){let n=new rC(e,i);n.children.add(t),a.items.add(n),t.delegate(`execute`).to(i)}return i}_prepareIntegrations(){let e=this.editor.config.get(`image.insert.integrations`),t=[];if(!e.length)return T(`image-insert-integrations-not-specified`),t;for(let n of e){if(!this._integrations.has(n)){[`upload`,`assetManager`,`url`].includes(n)||T(`image-insert-unknown-integration`,{item:n});continue}t.push(this._integrations.get(n))}return t.length||T(`image-insert-integrations-not-registered`),t}},CA=class extends F{static get requires(){return[bA,xD,oA,SA]}static get pluginName(){return`ImageBlock`}static get isOfficialPlugin(){return!0}},wA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageInlineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageInline`,{inheritAllFrom:`$inlineObject`,allowAttributes:[`alt`,`src`,`srcset`],disallowIn:[`caption`]}),this._setupConversion(),e.plugins.has(`ImageBlockEditing`)&&(e.commands.add(`imageTypeInline`,new vA(this.editor,`imageInline`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToElement({model:`imageInline`,view:(e,{writer:t})=>t.createEmptyElement(`img`)}),n.for(`editingDowncast`).elementToStructure({model:`imageInline`,view:(e,{writer:n})=>r.toImageWidget(Lk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageInline`,`src`)).add(fA(r,`imageInline`,`alt`)).add(uA(r,`imageInline`)),n.for(`upcast`).add(cA(`imageInline`,r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isBlockImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(!(l&&Vk(t.schema,l,`imageBlock`))||Hk(t.schema,c)===`imageInline`){let e=new Np(n.document),t=o.map(t=>t.childCount===1?(Array.from(t.getAttributes()).forEach(n=>e.setAttribute(...n,r.findViewImgElement(t))),t.getChild(0)):t);a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageInline`)&&r.setImageNaturalSizeAttributes(e)})})}},TA=class extends F{static get requires(){return[wA,xD,oA,SA]}static get pluginName(){return`ImageInline`}static get isOfficialPlugin(){return!0}},EA=class extends F{static get requires(){return[CA,TA]}static get pluginName(){return`Image`}static get isOfficialPlugin(){return!0}},DA=class extends F{static get pluginName(){return`ImageCaptionUtils`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}getCaptionFromImageModelElement(e){for(let t of e.getChildren())if(t&&t.is(`element`,`caption`))return t;return null}getCaptionFromModelSelection(e){let t=this.editor.plugins.get(`ImageUtils`),n=e.getFirstPosition().findAncestor(`caption`);return n&&t.isBlockImage(n.parent)?n:null}matchImageCaptionViewElement(e){let t=this.editor.plugins.get(`ImageUtils`);return e.name==`figcaption`&&t.isBlockImageView(e.parent)?{name:!0}:null}},OA=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageCaptionUtils`),n=e.plugins.get(`ImageUtils`);if(!e.plugins.has(bA)){this.isEnabled=!1,this.value=!1;return}let r=e.model.document.selection,i=r.getSelectedElement();if(!i){let e=t.getCaptionFromModelSelection(r);this.isEnabled=!!e,this.value=!!e;return}if(this.isEnabled=n.isImage(i),this.isEnabled&&n.isInlineImage(i)){let t=e.model.createPositionBefore(i);this.isEnabled=Vk(e.model.schema,t,`imageBlock`)}this.isEnabled?this.value=!!t.getCaptionFromImageModelElement(i):this.value=!1}execute(e={}){let{focusCaptionOnShow:t}=e;this.editor.model.change(e=>{this.value?this._hideImageCaption(e):this._showImageCaption(e,t)})}_showImageCaption(e,t){let n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageCaptionEditing`),i=this.editor.plugins.get(`ImageUtils`),a=n.getSelectedElement(),o=r._getSavedCaption(a);i.isInlineImage(a)&&(this.editor.execute(`imageTypeBlock`),a=n.getSelectedElement());let s=o||e.createElement(`caption`);e.append(s,a),t&&e.setSelection(s,`in`)}_hideImageCaption(e){let t=this.editor,n=t.model.document.selection,r=t.plugins.get(`ImageCaptionEditing`),i=t.plugins.get(`ImageCaptionUtils`),a=n.getSelectedElement(),o;a?o=i.getCaptionFromImageModelElement(a):(o=i.getCaptionFromModelSelection(n),a=o.parent),r._saveCaption(a,o),e.setSelection(a,`on`),e.remove(o)}},kA=class extends F{static get requires(){return[Kk,DA]}static get pluginName(){return`ImageCaptionEditing`}static get isOfficialPlugin(){return!0}_savedCaptionsMap;constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){let e=this.editor,t=e.model.schema;t.isRegistered(`caption`)?t.extend(`caption`,{allowIn:`imageBlock`}):t.register(`caption`,{allowIn:`imageBlock`,allowContentOf:`$block`,isLimit:!0}),e.commands.add(`toggleImageCaption`,new OA(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration(),this._registerCaptionReconversion()}_setupConversion(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`),i=e.t;e.conversion.for(`upcast`).elementToElement({view:e=>r.matchImageCaptionViewElement(e),model:`caption`}),e.conversion.for(`dataDowncast`).elementToElement({model:`caption`,view:(e,{writer:t})=>n.isBlockImage(e.parent)?t.createContainerElement(`figcaption`):null}),e.conversion.for(`editingDowncast`).elementToElement({model:`caption`,view:(e,{writer:r})=>{if(!n.isBlockImage(e.parent))return null;let a=r.createEditableElement(`figcaption`);r.setCustomProperty(`imageCaption`,!0,a),a.placeholder=i(`Enter image caption`),yo({view:t,element:a,keepOnFocus:!0});let o=e.parent.getAttribute(`alt`);return YE(a,r,{label:o?i(`Caption for image: %0`,[o]):i(`Caption for the image`)})}})}_setupImageTypeCommandsIntegration(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.plugins.get(`ImageCaptionUtils`),r=e.commands.get(`imageTypeInline`),i=e.commands.get(`imageTypeBlock`),a=e=>{if(!e.return)return;let{oldElement:r,newElement:i}=e.return;if(!r)return;if(t.isBlockImage(r)){let e=n.getCaptionFromImageModelElement(r);if(e){this._saveCaption(i,e);return}}let a=this._getSavedCaption(r);a&&this._saveCaption(i,a)};r&&this.listenTo(r,`execute`,a,{priority:`low`}),i&&this.listenTo(i,`execute`,a,{priority:`low`})}_getSavedCaption(e){let t=this._savedCaptionsMap.get(e);return t?Ml.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}_registerCaptionReconversion(){let e=this.editor,t=e.model,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`);t.document.on(`change:data`,()=>{let i=t.document.differ.getChanges();for(let t of i){if(t.attributeKey!==`alt`)continue;let i=t.range.start.nodeAfter;if(n.isBlockImage(i)){let t=r.getCaptionFromImageModelElement(i);if(!t)return;e.editing.reconvertItem(t)}}})}},AA=class extends F{static get requires(){return[DA]}static get pluginName(){return`ImageCaptionUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageCaptionUtils`),r=e.t;e.ui.componentFactory.add(`toggleImageCaption`,i=>{let a=e.commands.get(`toggleImageCaption`),o=new H(i);return o.set({icon:c_,tooltip:!0,isToggleable:!0}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.bind(`label`).to(a,`value`,e=>r(e?`Toggle caption off`:`Toggle caption on`)),this.listenTo(o,`execute`,()=>{e.execute(`toggleImageCaption`,{focusCaptionOnShow:!0});let r=n.getCaptionFromModelSelection(e.model.document.selection);if(r){let n=e.editing.mapper.toViewElement(r);t.scrollToTheSelection(),t.change(e=>{e.addClass(`image__caption_highlighted`,n)})}e.editing.view.focus()}),o})}},jA=class extends F{static get requires(){return[kA,AA]}static get pluginName(){return`ImageCaption`}static get isOfficialPlugin(){return!0}};function MA(e){let t=e.map(e=>e.replace(`+`,`\\\\+`));return RegExp(`^image\\\\/(${t.join(`|`)})$`)}function NA(e){return new Promise((t,n)=>{let r=e.getAttribute(`src`);fetch(r).then(e=>e.blob()).then(e=>{let n=FA(e,r),i=`image.${n.replace(`image/`,``)}`;t(new File([e],i,{type:n}))}).catch(e=>e&&e.name===`TypeError`?IA(r).then(t).catch(n):n(e))})}function PA(e,t){return!e.isInlineImageView(t)||!t.getAttribute(`src`)?!1:!!t.getAttribute(`src`).match(/^data:image\\/\\w+;base64,/g)||!!t.getAttribute(`src`).match(/^blob:/g)}function FA(e,t){return e.type?e.type:t.match(/data:(image\\/\\w+);base64/)?t.match(/data:(image\\/\\w+);base64/)[1].toLowerCase():`image/jpeg`}function IA(e){return LA(e).then(t=>{let n=FA(t,e),r=`image.${n.replace(`image/`,``)}`;return new File([t],r,{type:n})})}function LA(e){return new Promise((t,n)=>{let r=u.document.createElement(`img`);r.addEventListener(`load`,()=>{let e=u.document.createElement(`canvas`);e.width=r.width,e.height=r.height,e.getContext(`2d`).drawImage(r,0,0),e.toBlob(e=>e?t(e):n())}),r.addEventListener(`error`,()=>n()),r.src=e})}var RA=class extends F{static get pluginName(){return`ImageUploadUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`uploadImage`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`imageUpload`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`menuBar:uploadImage`,()=>this._createMenuBarButton(`standalone`)),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`upload`,observable:()=>e.commands.get(`uploadImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`uploadImage`),i=t.config.get(`image.upload.types`),a=MA(i),o=new e(t.locale),s=n.t;return o.set({acceptedType:i.map(e=>`image/${e}`).join(`,`),allowMultipleFiles:!0,label:s(`Upload from computer`),icon:V_}),o.bind(`isEnabled`).to(r),o.on(`done`,(e,n)=>{let r=Array.from(n).filter(e=>a.test(e.type));r.length&&(t.execute(`uploadImage`,{file:r}),t.editing.view.focus())}),o}_createToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this.editor.commands.get(`uploadImage`),r=this._createButton(_b);return r.tooltip=!0,r.bind(`label`).to(t,`isImageSelected`,n,`isAccessAllowed`,(t,n)=>e(n?t?`Replace image from computer`:`Upload image from computer`:`You have no image upload permissions.`)),r}_createDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(_b);return n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace from computer`:`Upload from computer`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createButton(mw);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image from computer`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`From computer`);break}return n}},zA=class extends F{static get pluginName(){return`ImageUploadProgress`}static get isOfficialPlugin(){return!0}placeholder;constructor(e){super(e),this.placeholder=`data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==`}init(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageBlock`,this.uploadStatusChange),e.plugins.has(`ImageInlineEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageInline`,this.uploadStatusChange)}uploadStatusChange=(e,t,n)=>{let r=this.editor,i=t.item,a=i.getAttribute(`uploadId`);if(!n.consumable.consume(t.item,e.name))return;let o=r.plugins.get(`ImageUtils`),s=r.plugins.get(bw),c=a?t.attributeNewValue:null,l=this.placeholder,u=r.editing.mapper.toViewElement(i),d=n.writer;if(c==`reading`){BA(u,d),HA(o,l,u,d);return}if(c==`uploading`){let e=s.loaders.get(a);BA(u,d),e?(UA(u,d),WA(u,d,e,r.editing.view),ZA(o,u,d,e)):HA(o,l,u,d);return}c==`complete`&&s.loaders.get(a)&&KA(u,d,r.editing.view),GA(u,d),UA(u,d),VA(u,d)}};function BA(e,t){e.hasClass(`ck-appear`)||t.addClass(`ck-appear`,e)}function VA(e,t){t.removeClass(`ck-appear`,e)}function HA(e,t,n,r){n.hasClass(`ck-image-upload-placeholder`)||r.addClass(`ck-image-upload-placeholder`,n);let i=e.findViewImgElement(n);i.getAttribute(`src`)!==t&&r.setAttribute(`src`,t,i),YA(n,`placeholder`)||r.insert(r.createPositionAfter(i),JA(r))}function UA(e,t){e.hasClass(`ck-image-upload-placeholder`)&&t.removeClass(`ck-image-upload-placeholder`,e),XA(e,t,`placeholder`)}function WA(e,t,n,r){let i=qA(t);t.insert(t.createPositionAt(e,`end`),i),n.on(`change:uploadedPercent`,(e,t,n)=>{r.change(e=>{e.setStyle(`width`,n+`%`,i)})})}function GA(e,t){XA(e,t,`progressBar`)}function KA(e,t,n){let r=t.createUIElement(`div`,{class:`ck-image-upload-complete-icon`});t.insert(t.createPositionAt(e,`end`),r),setTimeout(()=>{n.change(e=>e.remove(e.createRangeOn(r)))},3e3)}function qA(e){let t=e.createUIElement(`div`,{class:`ck-progress-bar`});return e.setCustomProperty(`progressBar`,!0,t),t}function JA(e){let t=e.createUIElement(`div`,{class:`ck-upload-placeholder-loader`});return e.setCustomProperty(`placeholder`,!0,t),t}function YA(e,t){for(let n of e.getChildren())if(n.getCustomProperty(t))return n}function XA(e,t,n){let r=YA(e,n);r&&t.remove(t.createRangeOn(r))}function ZA(e,t,n,r){if(r.data){let i=e.findViewImgElement(t);n.setAttribute(`src`,r.data,i)}}var QA=class extends I{constructor(e){super(e),this.set(`isAccessAllowed`,!0)}refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.model.document.selection.getSelectedElement();this.isEnabled=t.isImageAllowed()||t.isImage(n)}execute(e){let t=A(e.file),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((e,t)=>{let a=n.getSelectedElement();if(t&&a&&r.isImage(a)){let t=this.editor.model.createPositionAfter(a);this._uploadImage(e,i,t)}else this._uploadImage(e,i)})}_uploadImage(e,t,n){let r=this.editor,i=r.plugins.get(bw).createLoader(e),a=r.plugins.get(`ImageUtils`);i&&a.insertImage({...t,uploadId:i.id},n)}},$A=class extends F{static get requires(){return[bw,IC,_O,Kk]}static get pluginName(){return`ImageUploadEditing`}static get isOfficialPlugin(){return!0}_uploadImageElements;_uploadedImages=new Map;constructor(e){super(e),e.config.define(`image`,{upload:{types:[`jpeg`,`png`,`gif`,`bmp`,`webp`,`tiff`]}}),this._uploadImageElements=new Map}init(){let e=this.editor,t=e.model.document,n=e.conversion,r=e.plugins.get(bw),i=e.plugins.get(`ImageUtils`),a=e.plugins.get(`ClipboardPipeline`),o=MA(e.config.get(`image.upload.types`)),s=new QA(e);e.commands.add(`uploadImage`,s),e.commands.add(`imageUpload`,s),n.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`uploadId`},model:`uploadId`}).add(e=>e.on(`element:img`,(e,t,n)=>{if(!n.consumable.test(t.viewItem,{attributes:[`data-ck-upload-id`]}))return;let i=t.viewItem.getAttribute(`data-ck-upload-id`);if(!i||!t.modelRange)return;let[a]=Array.from(t.modelRange.getItems({shallow:!0})),o=r.loaders.get(i);a&&(n.writer.setAttribute(`uploadId`,i,a),n.consumable.consume(t.viewItem,{attributes:[`data-ck-upload-id`]}),o&&o.data&&n.writer.setAttribute(`uploadStatus`,o.status,a))},{priority:`low`})),this.listenTo(e.editing.view.document,`clipboardInput`,(t,n)=>{if(ej(n.dataTransfer))return;let r=Array.from(n.dataTransfer.files).filter(e=>e?o.test(e.type):!1);if(r.length&&(t.stop(),e.model.change(t=>{n.targetRanges&&t.setSelection(n.targetRanges.map(t=>e.editing.mapper.toModelRange(t))),e.execute(`uploadImage`,{file:r})}),!e.commands.get(`uploadImage`).isAccessAllowed)){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`You have no image upload permissions.`),{namespace:`image`})}}),this.listenTo(a,`inputTransformation`,(t,n)=>{let a=Array.from(e.editing.view.createRangeIn(n.content)).map(e=>e.item).filter(e=>PA(i,e)&&!e.getAttribute(`uploadProcessed`)).map(e=>({promise:NA(e),imageElement:e}));if(!a.length)return;let o=new Np(e.editing.view.document);for(let e of a){o.setAttribute(`uploadProcessed`,!0,e.imageElement);let t=r.createLoader(e.promise);t&&(o.setAttribute(`src`,``,e.imageElement),o.setAttribute(`uploadId`,t.id,e.imageElement))}}),e.editing.view.document.on(`dragover`,(e,t)=>{t.preventDefault()}),t.on(`change`,()=>{let n=t.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),i=new Set;for(let t of n)if(t.type==`insert`&&t.name!=`$text`){let n=t.position.nodeAfter,a=t.position.root.rootName==`$graveyard`;for(let t of tj(e,n)){let n=t.getAttribute(`uploadId`),o=t.getAttribute(`uploadStatus`);if(!n||o==`complete`)continue;let s=r.loaders.get(n);if(!s){!a&&this._uploadedImages.has(n)&&e.model.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:this._uploadedImages.get(n),imageElement:t})});continue}a?i.has(n)||Array.from(this._uploadImageElements.get(n)).every(e=>e.root.rootName==`$graveyard`)&&s.abort():(i.add(n),this._uploadImageElements.has(n)?this._uploadImageElements.get(n).add(t):this._uploadImageElements.set(n,new Set([t])),s.status==`idle`&&this._readAndUpload(s))}}}),this.on(`uploadComplete`,(e,{imageElement:t,data:n})=>{let r=n.urls?n.urls:n;this.editor.model.change(e=>{e.setAttribute(`src`,r.default,t),this._parseAndSetSrcsetAttributeOnImage(r,t,e),i.setImageNaturalSizeAttributes(t)})},{priority:`low`})}afterInit(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageBlock`)),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageInline`))}_readAndUpload(e){let t=this.editor,n=t.model,r=t.locale.t,i=t.plugins.get(bw),a=t.plugins.get(IC),o=t.plugins.get(`ImageUtils`),s=this._uploadImageElements;return n.enqueueChange({isUndoable:!1},t=>{let n=s.get(e.id);for(let e of n)t.setAttribute(`uploadStatus`,`reading`,e)}),e.read().then(()=>{let i=e.upload();t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Uploading image`));for(let r of s.get(e.id)){if(p.isSafari){let e=t.editing.mapper.toViewElement(r),n=o.findViewImgElement(e);t.editing.view.once(`render`,()=>{if(!n.parent)return;let e=t.editing.view.domConverter.mapViewToDom(n.parent);if(!e)return;let r=e.style.display;e.style.display=`none`,e._ckHack=e.offsetHeight,e.style.display=r})}n.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`uploading`,r)})}return i}).then(i=>{n.enqueueChange({isUndoable:!1},n=>{for(let t of s.get(e.id))n.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:i,imageElement:t});t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Image upload complete`)),this._uploadedImages.set(e.id,i)}),c()}).catch(i=>{if(t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Error during image upload`)),e.status!==`error`&&e.status!==`aborted`)throw i;e.status==`error`&&i&&a.showWarning(i,{title:r(`Upload failed`),namespace:`upload`}),n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))n.root.rootName!==`$graveyard`&&t.remove(n)}),c()});function c(){n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))t.removeAttribute(`uploadId`,n),t.removeAttribute(`uploadStatus`,n);s.delete(e.id)}),i.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,n){let r=0,i=Object.keys(e).filter(e=>{let t=parseInt(e,10);if(!isNaN(t))return r=Math.max(r,t),!0}).map(t=>`${e[t]} ${t}w`).join(`, `);if(i!=``){let e={srcset:i};!t.hasAttribute(`width`)&&!t.hasAttribute(`height`)&&(e.width=r),n.setAttributes(e,t)}}_registerConverters(e){let{conversion:t,plugins:n}=this.editor,r=n.get(bw),i=n.get(Kk);t.for(`dataDowncast`).add(t=>{t.on(`attribute:uploadId:${e}`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let a=r.loaders.get(t.attributeNewValue);if(!a||!a.data)return null;let o=n.mapper.toViewElement(t.item),s=i.findViewImgElement(o);s&&(n.consumable.consume(t.item,e.name),n.writer.setAttribute(`data-ck-upload-id`,a.id,s))})})}};function ej(e){return Array.from(e.types).includes(`text/html`)&&e.getData(`text/html`)!==``}function tj(e,t){let n=e.plugins.get(`ImageUtils`);return Array.from(e.model.createRangeOn(t)).filter(e=>n.isImage(e.item)).map(e=>e.item)}var nj=class extends F{static get pluginName(){return`ImageUpload`}static get isOfficialPlugin(){return!0}static get requires(){return[$A,RA,zA]}},rj=class extends P{urlInputView;keystrokes;constructor(e){super(e),this.set(`imageURLInputValue`,``),this.set(`isImageSelected`,!1),this.set(`isEnabled`,!0),this.keystrokes=new N,this.urlInputView=this._createUrlInputView(),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-url`],tabindex:`-1`},children:[this.urlInputView,{tag:`div`,attributes:{class:[`ck`,`ck-image-insert-url__action-row`]}}]})}render(){super.render(),Qa({view:this}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy()}_createUrlInputView(){let e=this.locale,t=e.t,n=new Qb(e,Jx);return n.bind(`label`).to(this,`isImageSelected`,e=>t(e?`Update image URL`:`Insert image via URL`)),n.bind(`isEnabled`).to(this),n.fieldView.inputMode=`url`,n.fieldView.placeholder=`https://example.com/image.png`,n.fieldView.bind(`value`).to(this,`imageURLInputValue`,e=>e||``),n.fieldView.on(`input`,()=>{this.imageURLInputValue=n.fieldView.element.value.trim()}),n}focus(){this.urlInputView.focus()}},ij=class extends F{_imageInsertUI;_formView;static get pluginName(){return`ImageInsertViaUrlUI`}static get isOfficialPlugin(){return!0}static get requires(){return[SA,Qy]}init(){this.editor.ui.componentFactory.add(`insertImageViaUrl`,()=>this._createToolbarButton()),this.editor.ui.componentFactory.add(`menuBar:insertImageViaUrl`,()=>this._createMenuBarButton(`standalone`))}afterInit(){this._imageInsertUI=this.editor.plugins.get(`ImageInsertUI`),this._imageInsertUI.registerIntegration({name:`url`,observable:()=>this.editor.commands.get(`insertImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createInsertUrlButton(e){let t=new e(this.editor.locale);return t.icon=H_,t.on(`execute`,()=>{this._showModal()}),t}_createToolbarButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.tooltip=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert image via URL`)),t}_createDropdownButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.withText=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert via URL`)),t}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createInsertUrlButton(U);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image via URL`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`Via URL`);break}return n}_createInsertUrlView(){let e=this.editor,t=e.locale,n=e.commands.get(`replaceImageSource`),r=e.commands.get(`insertImage`),i=new rj(t);return i.bind(`isImageSelected`).to(this._imageInsertUI),i.bind(`isEnabled`).toMany([r,n],`isEnabled`,(...e)=>e.some(e=>e)),i}_showModal(){let e=this.editor,t=e.locale.t,n=e.plugins.get(`Dialog`);this._formView||(this._formView=this._createInsertUrlView(),this._formView.on(`submit`,()=>this._handleSave()));let r=e.commands.get(`replaceImageSource`);this._formView.imageURLInputValue=r.value||``,n.show({id:`insertImageViaUrl`,title:t(`Image via URL`),isModal:!0,content:this._formView,actionButtons:[{label:t(`Cancel`),withText:!0,onExecute:()=>n.hide()},{label:this._imageInsertUI.isImageSelected?t(`Save`):t(`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSave()}]})}_handleSave(){this.editor.commands.get(`replaceImageSource`).isEnabled?this.editor.execute(`replaceImageSource`,{source:this._formView.imageURLInputValue}):this.editor.execute(`insertImage`,{source:this._formView.imageURLInputValue}),this.editor.plugins.get(`Dialog`).hide()}},aj=class extends F{static get pluginName(){return`ImageInsertViaUrl`}static get isOfficialPlugin(){return!0}static get requires(){return[ij,SA]}},oj=class extends F{static get pluginName(){return`ImageInsert`}static get isOfficialPlugin(){return!0}static get requires(){return[nj,aj,SA]}},sj=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);this.isEnabled=!!t,!t||!t.hasAttribute(`resizedWidth`)?this.value=null:this.value={width:t.getAttribute(`resizedWidth`),height:null}}execute(e){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection);this.value={width:e.width,height:null},i&&n.change(t=>{t.setAttribute(`resizedWidth`,e.width,i),t.removeAttribute(`resizedHeight`,i),r.setImageNaturalSizeAttributes(i)})}},cj=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageResizeEditing`}static get licenseFeatureCode(){return`IR`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`image`,{resizeUnit:`%`,resizeOptions:[{name:`resizeImage:original`,value:null,icon:`original`},{name:`resizeImage:custom`,value:`custom`,icon:`custom`},{name:`resizeImage:25`,value:`25`,icon:`small`},{name:`resizeImage:50`,value:`50`,icon:`medium`},{name:`resizeImage:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor,t=new sj(e);this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`),e.commands.add(`resizeImage`,t),e.commands.add(`imageResize`,t)}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0})),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0}))}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`);t.conversion.for(`downcast`).add(t=>t.on(`attribute:resizedWidth:${e}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(`image_resized`,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(`image_resized`,i))})),t.conversion.for(`dataDowncast`).attributeToAttribute({model:{name:e,key:`resizedHeight`},view:e=>({key:`style`,value:{height:e}})}),t.conversion.for(`editingDowncast`).add(t=>t.on(`attribute:resizedHeight:${e}`,(t,r,i)=>{if(!i.consumable.consume(r.item,t.name))return;let a=i.writer,o=i.mapper.toViewElement(r.item),s=e===`imageInline`?n.findViewImgElement(o):o;r.attributeNewValue===null?a.removeStyle(`height`,s):a.setStyle(`height`,r.attributeNewValue,s)})),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>Wk(e)?null:e.getStyle(`width`)}}),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{height:/.+/}},model:{key:`resizedHeight`,value:e=>Wk(e)?null:e.getStyle(`height`)}}),t.conversion.for(`upcast`).add(t=>{t.on(`element:${e===`imageBlock`?`figure`:`img`}`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[`image_resized`]})})})}};const lj={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var uj=class extends F{static get requires(){return[cj]}static get pluginName(){return`ImageResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`image.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`image.resizeOptions`),n=e.commands.get(`resizeImage`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerImageResizeButton(e);this._registerImageResizeDropdown(t)}_registerImageResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeImage`),s=this._getOptionLabelValue(e,!0);if(!lj[i])throw new w(`imageresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:lj[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let e=t.plugins.get(`ImageCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,fj(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeImage`,{width:e})})}return a})}_registerImageResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value),i=i=>{let a=t.commands.get(`resizeImage`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize image`);return s.set({tooltip:c,commandValue:r.value,icon:lj.medium,isToggleable:!0,label:this._getOptionLabelValue(r),withText:!0,class:`ck-resize-image-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e&&e.width?e.width:this._getOptionLabelValue(r)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Image resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o};t.ui.componentFactory.add(`resizeImage`,i),t.ui.componentFactory.add(`imageResize`,i)}_getOptionLabelValue(e,t=!1){let n=this.editor.t;return e.label?e.label:t?dj(e)?n(`Custom image size`):e.value?n(`Resize image to %0`,e.value+this._resizeUnit):n(`Resize image to the original size`):dj(e)?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>dj(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let r=n.plugins.get(`ImageCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,pj(o))}else a={type:`button`,model:new RC({commandName:`resizeImage`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,fj(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function dj(e){return e.value===`custom`}function fj(e){return(t,n)=>{let r=t;return r===void 0||!n?!1:e===null&&r===e?!0:r!==null&&r.width===e}}function pj(e){return(t,n)=>!e.some(e=>fj(e)(t,n))}const mj=`image_resized`;var hj=class extends F{static get requires(){return[GD,Kk]}static get pluginName(){return`ImageResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeImage`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`);t.addObserver(pA),this.listenTo(t.document,`imageLoaded`,(r,i)=>{if(!i.target.matches(`figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img`))return;let a=e.editing.view.domConverter,o=a.domToView(i.target),s=n.getImageWidgetFromImageView(o),c=this.editor.plugins.get(GD).getResizerByViewElement(s);if(c){c.redraw();return}let l=e.editing.mapper,u=l.toModelElement(s);c=e.plugins.get(GD).attachTo({unit:e.config.get(`image.resizeUnit`),modelElement:u,viewElement:s,editor:e,getHandleHost(e){return e.querySelector(`img`)},getResizeHost(){return a.mapViewToDom(l.toViewElement(u))},isCentered(){return u.getAttribute(`imageStyle`)==`alignCenter`},onCommit(n){t.change(e=>{e.removeClass(mj,s)}),e.execute(`resizeImage`,{width:n})}}),c.on(`updateSize`,()=>{s.hasClass(mj)||t.change(e=>{e.addClass(mj,s)});let e=u.name===`imageInline`?o:s;e.getStyle(`height`)&&t.change(t=>{t.removeStyle(`height`,e)})}),c.bind(`isEnabled`).to(this)})}};function gj(e){let{editing:t}=e,n=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function _j(e,t){let n=gj(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}var vj=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-image-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Image Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize image (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}};function yj(e,t){let n=gj(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var bj=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(vj))(t.locale,e,xj(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeImage`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(t)});let r=_j(t,e),i=r?r.value.toFixed(1):``,a=yj(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function xj(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var Sj=class extends F{static get requires(){return[cj,hj,bj,uj]}static get pluginName(){return`ImageResize`}static get isOfficialPlugin(){return!0}},Cj=class extends I{_defaultStyles;_styles;constructor(e,t){super(e),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(t.map(e=>{if(e.isDefault)for(let t of e.modelElements)this._defaultStyles[t]=e.name;return[e.name,e]}))}refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled?e.hasAttribute(`imageStyle`)?this.value=e.getAttribute(`imageStyle`):this.value=this._defaultStyles[e.name]:this.value=!1}isStyleEnabled(e){if(!this.isEnabled)return!1;let t=this.editor.plugins.get(`ImageUtils`),n=t.getClosestSelectedImageElement(this.editor.model.document.selection);if(!n||!this._styles.has(e))return!1;if(!this.shouldConvertImageType(e,n))return!0;let r=t.isBlockImage(n)?`imageTypeInline`:`imageTypeBlock`,i=this.editor.commands.get(r);return!!i&&i.isEnabled}execute(e={}){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`);e.value&&!this.isStyleEnabled(e.value)||n.change(t=>{let i=e.value,{setImageSizes:a=!0}=e,o=r.getClosestSelectedImageElement(n.document.selection);i&&this.shouldConvertImageType(i,o)&&(this.editor.execute(r.isBlockImage(o)?`imageTypeInline`:`imageTypeBlock`,{setImageSizes:a}),o=r.getClosestSelectedImageElement(n.document.selection)),!i||this._styles.get(i).isDefault?t.removeAttribute(`imageStyle`,o):t.setAttribute(`imageStyle`,i,o),a&&r.setImageNaturalSizeAttributes(o)})}shouldConvertImageType(e,t){return!this._styles.get(e).modelElements.includes(t.name)}};const wj={get inline(){return{name:`inline`,title:`In line`,icon:Cv,modelElements:[`imageInline`],isDefault:!0}},get alignLeft(){return{name:`alignLeft`,title:`Left aligned image`,icon:xv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-left`}},get alignBlockLeft(){return{name:`alignBlockLeft`,title:`Left aligned image`,icon:wv,modelElements:[`imageBlock`],className:`image-style-block-align-left`}},get alignCenter(){return{name:`alignCenter`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],className:`image-style-align-center`}},get alignRight(){return{name:`alignRight`,title:`Right aligned image`,icon:Sv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-right`}},get alignBlockRight(){return{name:`alignBlockRight`,title:`Right aligned image`,icon:Tv,modelElements:[`imageBlock`],className:`image-style-block-align-right`}},get block(){return{name:`block`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],isDefault:!0}},get side(){return{name:`side`,title:`Side image`,icon:Sv,modelElements:[`imageBlock`],className:`image-style-side`}}},Tj={full:bv,left:wv,right:Tv,center:yv,inlineLeft:xv,inlineRight:Sv,inline:Cv},Ej=[{name:`imageStyle:wrapText`,title:`Wrap text`,defaultItem:`imageStyle:alignLeft`,items:[`imageStyle:alignLeft`,`imageStyle:alignRight`]},{name:`imageStyle:breakText`,title:`Break text`,defaultItem:`imageStyle:block`,items:[`imageStyle:alignBlockLeft`,`imageStyle:block`,`imageStyle:alignBlockRight`]}];function Dj(e,t){for(let n of t)if(n.name===e)return n}function Oj(e){return(e.configuredStyles.options||[]).map(e=>jj(e)).filter(t=>Mj(t,e))}function kj(e,t){return e&&t?{options:[`inline`,`alignLeft`,`alignRight`,`alignCenter`,`alignBlockLeft`,`alignBlockRight`,`block`,`side`]}:e?{options:[`block`,`side`]}:t?{options:[`inline`,`alignLeft`,`alignRight`]}:{}}function Aj(e){return e.has(`ImageBlockEditing`)&&e.has(`ImageInlineEditing`)?[...Ej]:[]}function jj(e){return e=typeof e==`string`?wj[e]?{...wj[e]}:{name:e}:Nj(wj[e.name],e),typeof e.icon==`string`&&(e.icon=Tj[e.icon]||e.icon),e}function Mj(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:n}){let{modelElements:r,name:i}=e;if(!r||!r.length||!i)return Pj({style:e}),!1;{let i=[t?`imageBlock`:null,n?`imageInline`:null];if(!r.some(e=>i.includes(e)))return T(`image-style-missing-dependency`,{style:e,missingPlugins:r.map(e=>e===`imageBlock`?`ImageBlockEditing`:`ImageInlineEditing`)}),!1}return!0}function Nj(e,t){let n={...t};for(let r in e)Object.prototype.hasOwnProperty.call(t,r)||(n[r]=e[r]);return n}function Pj(e){T(`image-style-configuration-definition-invalid`,e)}const Fj={normalizeStyles:Oj,getDefaultStylesConfiguration:kj,getDefaultDropdownDefinitions:Aj,warnInvalidStyle:Pj};function Ij(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=Dj(n.attributeNewValue,e),a=Dj(n.attributeOldValue,e),o=r.mapper.toViewElement(n.item),s=r.writer;a&&s.removeClass(a.className,o),i&&s.addClass(i.className,o)}}function Lj(e){let t={imageInline:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageInline`)),imageBlock:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageBlock`))};return(n,r,i)=>{if(!r.modelRange)return;let a=r.viewItem,o=j(r.modelRange.getItems());if(o&&i.schema.checkAttribute(o,`imageStyle`)){for(let e of t[o.name])i.consumable.consume(a,{classes:e.className})&&i.writer.setAttribute(`imageStyle`,e.name,o);Rj(i,a,o,e)}}}function Rj(e,t,n,r){if(!e.consumable.test(t,{styles:[`float`]}))return;let i=null;switch(t.getStyle(`float`)){case`left`:i=`alignLeft`;break;case`right`:i=`alignRight`;break}if(!i)return;let a=Dj(i,r);if(!a)return;let o=wj[a.name];$t(a,o)&&(e.writer.setAttribute(`imageStyle`,i,n),e.consumable.consume(t,{styles:[`float`]}))}var zj=class extends F{static get pluginName(){return`ImageStyleEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}normalizedStyles;init(){let e=this.editor,t=e.plugins.has(`ImageBlockEditing`),n=e.plugins.has(`ImageInlineEditing`);e.config.define(`image.styles`,Fj.getDefaultStylesConfiguration(t,n)),this.normalizedStyles=Fj.normalizeStyles({configuredStyles:e.config.get(`image.styles`),isBlockPluginLoaded:t,isInlinePluginLoaded:n}),this._setupConversion(t,n),this._setupPostFixer(),e.commands.add(`imageStyle`,new Cj(e,this.normalizedStyles))}_setupConversion(e,t){let n=this.editor,r=n.model.schema,i=Ij(this.normalizedStyles),a=Lj(this.normalizedStyles);n.editing.downcastDispatcher.on(`attribute:imageStyle`,i),n.data.downcastDispatcher.on(`attribute:imageStyle`,i),e&&(r.extend(`imageBlock`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0,blockAlignment:Bj(this.normalizedStyles)}),n.data.upcastDispatcher.on(`element:figure`,a,{priority:`low`})),t&&(r.extend(`imageInline`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0}),n.data.upcastDispatcher.on(`element:img`,a,{priority:`low`}))}_setupPostFixer(){let e=this.editor,t=e.model.document,n=e.plugins.get(Kk),r=new Map(this.normalizedStyles.map(e=>[e.name,e]));t.registerPostFixer(e=>{let i=!1;for(let a of t.differ.getChanges())if(a.type==`insert`||a.type==`attribute`&&a.attributeKey==`imageStyle`){let t=a.type==`insert`?a.position.nodeAfter:a.range.start.nodeAfter;if(t&&t.is(`element`,`paragraph`)&&t.childCount>0&&(t=t.getChild(0)),!n.isImage(t))continue;let o=t.getAttribute(`imageStyle`);if(!o)continue;let s=r.get(o);(!s||!s.modelElements.includes(t.name))&&(e.removeAttribute(`imageStyle`,t),i=!0)}return i})}};function Bj(e){let t=(...t)=>{let n=t.map(t=>Dj(t,e)).find(e=>e?.modelElements.includes(`imageBlock`));if(n)return{isDefault:!!n.isDefault,value:n.name}};return Object.fromEntries(Object.entries({left:[`alignBlockLeft`,`alignLeft`],right:[`alignBlockRight`,`alignRight`],center:[`block`,`alignCenter`]}).map(([e,n])=>[e,t(...n)]).filter(([,e])=>e!==void 0))}var Vj=class extends F{static get requires(){return[zj]}static get pluginName(){return`ImageStyleUI`}static get isOfficialPlugin(){return!0}get localizedDefaultStylesTitles(){let e=this.editor.t;return{\"Wrap text\":e(`Wrap text`),\"Break text\":e(`Break text`),\"In line\":e(`In line`),\"Full size image\":e(`Full size image`),\"Side image\":e(`Side image`),\"Left aligned image\":e(`Left aligned image`),\"Centered image\":e(`Centered image`),\"Right aligned image\":e(`Right aligned image`)}}init(){let e=this.editor.plugins,t=this.editor.config.get(`image.toolbar`)||[],n=Hj(e.get(`ImageStyleEditing`).normalizedStyles,this.localizedDefaultStylesTitles);for(let e of n)this._createButton(e);let r=Hj([...t.filter(Xe),...Fj.getDefaultDropdownDefinitions(e)],this.localizedDefaultStylesTitles);for(let e of r)this._createDropdown(e,n)}_createDropdown(e,t){let n=this.editor.ui.componentFactory;n.add(e.name,r=>{let i,{defaultItem:a,items:o,title:s}=e,c=o.filter(e=>t.find(({name:t})=>Uj(t)===e)).map(e=>{let t=n.create(e);return e===a&&(i=t),t});o.length!==c.length&&Fj.warnInvalidStyle({dropdown:e});let l=Nx(r,Mx),u=l.buttonView,d=u.arrowView;return Fx(l,c,{enableActiveItemFocusOnDropdownOpen:!0}),u.set({label:Wj(s,i.label),class:null,tooltip:!0}),d.unbind(`label`),d.set({label:s}),u.bind(`icon`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return t<0?i.icon:c[t].icon}),u.bind(`label`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return Wj(s,t<0?i.label:c[t].label)}),u.bind(`isOn`).toMany(c,`isOn`,(...e)=>e.some(en)),u.bind(`class`).toMany(c,`isOn`,(...e)=>e.some(en)?`ck-splitbutton_flatten`:void 0),u.on(`execute`,()=>{c.some(({isOn:e})=>e)?l.isOpen=!l.isOpen:i.fire(`execute`)}),l.bind(`isEnabled`).toMany(c,`isEnabled`,(...e)=>e.some(en)),this.listenTo(l,`execute`,()=>{this.editor.editing.view.focus()}),l})}_createButton(e){let t=e.name;this.editor.ui.componentFactory.add(Uj(t),n=>{let r=this.editor,i=r.commands.get(`imageStyle`),a=new H(n);a.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0});let o=[i],s=r.commands.get(`imageTypeBlock`),c=r.commands.get(`imageTypeInline`);return s&&o.push(s),c&&o.push(c),a.bind(`isEnabled`).toMany(o,`isEnabled`,()=>i.isStyleEnabled(t)),a.bind(`isOn`).to(i,`value`,e=>e===t),a.on(`execute`,this._executeCommand.bind(this,t)),a})}_executeCommand(e){this.editor.execute(`imageStyle`,{value:e}),this.editor.editing.view.focus()}};function Hj(e,t){for(let n of e)t[n.title]&&(n.title=t[n.title]);return e}function Uj(e){return`imageStyle:${e}`}function Wj(e,t){return(e?e+`: `:``)+t}var Gj=class extends F{static get requires(){return[zj,Vj]}static get pluginName(){return`ImageStyle`}static get isOfficialPlugin(){return!0}},Kj=class extends F{static get requires(){return[kD,Kk]}static get pluginName(){return`ImageToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t,n=e.plugins.get(kD),r=e.plugins.get(`ImageUtils`);n.register(`image`,{ariaLabel:t(`Image toolbar`),items:qj(e.config.get(`image.toolbar`)||[]),getRelatedElement:e=>r.getClosestSelectedImageWidget(e)})}};function qj(e){return e.map(e=>Xe(e)?e.name:e)}var Jj=class extends F{static get requires(){return[gA,Kk]}static get pluginName(){return`PictureEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:[`sources`]}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:[`sources`]}),this._setupConversion(),this._setupImageUploadEditingIntegration()}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`upcast`).add(lA(n)),t.for(`downcast`).add(dA(n))}_setupImageUploadEditingIntegration(){let e=this.editor;if(!e.plugins.has(`ImageUploadEditing`))return;let t=e.plugins.get(`ImageUploadEditing`);this.listenTo(t,`uploadComplete`,(t,{imageElement:n,data:r})=>{let i=r.sources;i&&e.model.change(e=>{e.setAttributes({sources:i},n)})})}},Yj=class extends F{static get requires(){return[gA,Kk,uk]}static get pluginName(){return`LinkImageEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.model.schema;e.plugins.has(`ImageBlockEditing`)&&t.extend(`imageBlock`,{allowAttributes:[`linkHref`]}),e.conversion.for(`upcast`).add(Xj(e)),e.conversion.for(`downcast`).add(Zj(e)),this._enableAutomaticDecorators(),this._enableManualDecorators()}_enableAutomaticDecorators(){let e=this.editor,t=e.commands.get(`link`).automaticDecorators;t.length&&e.conversion.for(`downcast`).add(t.getDispatcherForLinkedImage())}_enableManualDecorators(){let e=this.editor,t=e.commands.get(`link`);for(let n of t.manualDecorators)e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:n.id}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:n.id}),e.conversion.for(`downcast`).add(Qj(n)),e.conversion.for(`upcast`).add($j(e,n))}};function Xj(e){let t=e.plugins.has(`ImageInlineEditing`),n=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,r,i)=>{let a=r.viewItem,o=n.findViewImgElement(a);if(!o)return;let s=o.findAncestor(e=>n.isBlockImageView(e));if(t&&!s)return;let c={attributes:[`href`]};if(!i.consumable.test(a,c))return;let l=a.getAttribute(`href`),u=r.modelCursor.parent;u.is(`element`,`imageBlock`)&&(i.writer.setAttribute(`linkHref`,l,u),i.consumable.consume(a,c))},{priority:`high`})}}function Zj(e){let t=e.plugins.get(`ImageUtils`);return e=>{e.on(`attribute:linkHref:imageBlock`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=Array.from(i.getChildren()).find(e=>e.is(`element`,`a`)),s=t.findViewImgElement(i),c=s.parent.is(`element`,`picture`)?s.parent:s;if(o)n.attributeNewValue?a.setAttribute(`href`,n.attributeNewValue,o):(a.move(a.createRangeOn(c),a.createPositionAt(i,0)),a.remove(o));else{let e=a.createContainerElement(`a`,{href:n.attributeNewValue});a.insert(a.createPositionAt(i,0),e),a.move(a.createRangeOn(c),a.createPositionAt(e,0))}},{priority:`high`})}}function Qj(e){return t=>{let n=t=>(n,r,i)=>{let a=i.mapper.toViewElement(r.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o){if(!t&&r.attributeOldValue){for(let[t,n]of Ui(e.attributes))i.writer.removeAttribute(t,n,o);e.classes&&i.writer.removeClass(e.classes,o);for(let t in e.styles)i.writer.removeStyle(t,o)}if(t&&r.attributeNewValue){for(let[t,n]of Ui(e.attributes))i.writer.setAttribute(t,n,!1,o);e.classes&&i.writer.addClass(e.classes,o);for(let t in e.styles)i.writer.setStyle(t,e.styles[t],o)}}};t.on(`attribute:${e.id}:imageBlock`,n(!1),{priority:ge.high-1}),t.on(`attribute:${e.id}:imageBlock`,n(!0),{priority:ge.high-2})}}function $j(e,t){let n=e.plugins.has(`ImageInlineEditing`),r=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,i,a)=>{let o=i.viewItem,s=r.findViewImgElement(o);if(!s)return;let c=s.findAncestor(e=>r.isBlockImageView(e));if(n&&!c)return;let l=new Po(t._createPattern()).match(o);if(!l||!a.consumable.test(o,l.match))return;let u=i.modelCursor.parent;u?.is(`element`,`imageBlock`)&&(a.writer.setAttribute(t.id,!0,u),a.consumable.consume(o,l.match))},{priority:`high`})}}var eM=class extends F{static get requires(){return[uk,yk,bA]}static get pluginName(){return`LinkImageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,(t,n)=>{this._isSelectedLinkedImage(e.model.document.selection)&&(n.preventDefault(),t.stop())},{priority:`high`}),this._createToolbarLinkImageButton()}_createToolbarLinkImageButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`linkImage`,n=>{let r=new H(n),i=e.plugins.get(`LinkUI`),a=e.commands.get(`link`);return r.set({isEnabled:!0,label:t(`Link image`),icon:Z_,keystroke:BO,tooltip:!0,isToggleable:!0}),r.bind(`isEnabled`).to(a,`isEnabled`),r.bind(`isOn`).to(a,`value`,e=>!!e),this.listenTo(r,`execute`,()=>{this._isSelectedLinkedImage(e.model.document.selection)?i._addToolbarView():i._showUI(!0)}),r})}_isSelectedLinkedImage(e){let t=e.getSelectedElement();return this.editor.plugins.get(`ImageUtils`).isImage(t)&&t.hasAttribute(`linkHref`)}},tM=class extends F{static get requires(){return[Yj,eM]}static get pluginName(){return`LinkImage`}static get isOfficialPlugin(){return!0}},nM=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~`.split(``),rM=e=>{let t=0;for(let n=0;n{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4},aM=e=>{let t=Math.max(0,Math.min(1,e));return Math.trunc(t<=.0031308?t*12.92*255+.5:(1.055*t**.4166666666666667-.055)*255+.5)},oM=e=>e<0?-1:1,sM=(e,t)=>oM(e)*Math.abs(e)**+t,cM=class extends Error{constructor(e){super(e),this.name=`ValidationError`,this.message=e}},lM=e=>{if(!e||e.length<6)throw new cM(`The blurhash string must be at least 6 characters`);let t=rM(e[0]),n=Math.floor(t/9)+1,r=t%9+1;if(e.length!==4+2*r*n)throw new cM(`blurhash length mismatch: length is ${e.length} but it should be ${4+2*r*n}`)},uM=e=>{let t=e>>16,n=e>>8&255,r=e&255;return[iM(t),iM(n),iM(r)]},dM=(e,t)=>{let n=Math.floor(e/361),r=Math.floor(e/19)%19,i=e%19;return[sM((n-9)/9,2)*t,sM((r-9)/9,2)*t,sM((i-9)/9,2)*t]},fM=(e,t,n,r)=>{lM(e),r|=1;let i=rM(e[0]),a=Math.floor(i/9)+1,o=i%9+1,s=(rM(e[1])+1)/166,c=Array(o*a);for(let t=0;tn&&(n=i),t.push(`${e[r]} ${r}w`))}let r=[{srcset:t.join(`,`),sizes:`(max-width: ${n}px) 100vw, ${n}px`,type:`image/webp`}];return{imageFallbackUrl:e.default,imageSources:r}}function mM(e,t){let[,n]=e.value.split(`.`),r=JSON.parse(atob(n)),i=r.auth?.ckbox?.workspaces||[r.aud];return t?r.auth?.ckbox?.role==`superadmin`||i.includes(t)?t:null:i[0]}function hM(e){if(e)try{let t=`32px`,n=document.createElement(`canvas`);n.setAttribute(`width`,t),n.setAttribute(`height`,t);let r=n.getContext(`2d`);if(!r)return;let i=r.createImageData(32,32),a=fM(e,32,32);return i.data.set(a),r.putImageData(i,0,0),n.toDataURL()}catch{return}}function gM({url:e,method:t=`GET`,data:n,onUploadProgress:r,signal:i,authorization:a}){let o=new XMLHttpRequest;o.open(t,e.toString()),o.setRequestHeader(`Authorization`,a),o.setRequestHeader(`CKBox-Version`,`CKEditor 5`),o.responseType=`json`;let s=()=>{o.abort()};return new Promise((e,t)=>{i.throwIfAborted(),i.addEventListener(`abort`,s),o.addEventListener(`loadstart`,()=>{i.addEventListener(`abort`,s)}),o.addEventListener(`loadend`,()=>{i.removeEventListener(`abort`,s)}),o.addEventListener(`error`,()=>{t()}),o.addEventListener(`abort`,()=>{t()}),o.addEventListener(`load`,()=>{let n=o.response;if(!n||n.statusCode>=400)return t(n&&n.message);e(n)}),r&&o.upload.addEventListener(`progress`,e=>{r(e)}),o.send(n)})}const _M={\"image/gif\":`gif`,\"image/jpeg\":`jpg`,\"image/png\":`png`,\"image/webp\":`webp`,\"image/bmp\":`bmp`,\"image/tiff\":`tiff`};function vM(e){return _M[e]}async function yM(e,t){try{let n=await fetch(e,{method:`HEAD`,cache:`force-cache`,...t});return n.ok&&n.headers.get(`content-type`)||``}catch{return``}}function bM(e){return e.name.match(/\\.(?[^.]+)$/).groups.ext.toLowerCase()}var xM=class extends I{_chosenAssets=new Set;_wrapper=null;constructor(e){super(e),this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire(`ckbox:open`)}_getValue(){return this._wrapper!==null}_checkEnabled(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);return!(!e.isEnabled&&!t.isEnabled)}_prepareOptions(){let e=this.editor.config.get(`ckbox`),t=e.dialog,n=e.categories,r=e.view,i=e.upload;return{theme:e.theme,language:e.language,tokenUrl:e.tokenUrl,serviceOrigin:e.serviceOrigin,forceDemoLabel:e.forceDemoLabel,choosableFileExtensions:e.choosableFileExtensions,assets:{onChoose:e=>this.fire(`ckbox:choose`,e)},dialog:{onClose:()=>this.fire(`ckbox:close`),width:t&&t.width,height:t&&t.height},categories:n&&{icons:n.icons},view:r&&{openLastView:r.openLastView,startupFolderId:r.startupFolderId,startupCategoryId:r.startupCategoryId,hideMaximizeButton:r.hideMaximizeButton},upload:i&&{componentsHideTimeout:i.componentsHideTimeout,dialogMinimizeTimeout:i.dialogMinimizeTimeout}}}_initListeners(){let e=this.editor,t=e.model,n=!e.config.get(`ckbox.ignoreDataId`),r=e.config.get(`ckbox.downloadableFiles`);this.on(`ckbox`,()=>{this.refresh()},{priority:`low`}),this.on(`ckbox:open`,()=>{!this.isEnabled||this.value||(this._wrapper=mr(document,`div`,{class:`ck ckbox-wrapper`}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))}),this.on(`ckbox:close`,()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,e.editing.view.focus())}),this.on(`ckbox:choose`,(i,a)=>{if(!this.isEnabled)return;let o=e.commands.get(`insertImage`),s=e.commands.get(`link`),c=SM({assets:a,downloadableFilesConfig:r,isImageAllowed:o.isEnabled,isLinkAllowed:s.isEnabled}),l=c.length;l!==0&&(t.change(e=>{for(let t of c){let r=t===c[l-1],i=l===1;this._insertAsset(t,r,e,i),n&&(setTimeout(()=>this._chosenAssets.delete(t),1e3),this._chosenAssets.add(t))}}),e.editing.view.focus())}),this.listenTo(e,`destroy`,()=>{this.fire(`ckbox:close`),this._chosenAssets.clear()})}_insertAsset(e,t,n,r){let i=this.editor.model.document.selection;n.removeSelectionAttribute(`linkHref`),e.type===`image`?this._insertImage(e):this._insertLink(e,n,r),t||n.setSelection(i.getLastPosition())}_insertImage(e){let t=this.editor,{imageFallbackUrl:n,imageSources:r,imageTextAlternative:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=e.attributes;t.execute(`insertImage`,{source:{src:n,sources:r,alt:i,width:a,height:o,...s?{placeholder:s}:null}})}_insertLink(e,t,n){let r=this.editor,i=r.model,a=i.document.selection,{linkName:o,linkHref:s}=e.attributes;if(a.isCollapsed){let e=Ui(a.getAttributes()),c=t.createText(o,e);if(!n){let e=a.getLastPosition(),n=e.parent;n.name===`paragraph`&&n.isEmpty||r.execute(`insertParagraph`,{position:e});let o=i.insertContent(c);t.setSelection(o),r.execute(`link`,s);return}let l=i.insertContent(c);t.setSelection(l)}r.execute(`link`,s)}};function SM({downloadableFilesConfig:e,assets:t,isImageAllowed:n,isLinkAllowed:r}){return t.map(t=>TM(t)?{id:t.data.id,type:`image`,attributes:CM(t)}:{id:t.data.id,type:`link`,attributes:wM(t,e)}).filter(e=>e.type===`image`?n:r)}function CM(e){let{imageFallbackUrl:t,imageSources:n}=pM(e.data.imageUrls),{description:r,width:i,height:a,blurHash:o}=e.data.metadata,s=hM(o);return{imageFallbackUrl:t,imageSources:n,imageTextAlternative:r||``,imageWidth:i,imageHeight:a,...s?{imagePlaceholder:s}:null}}function wM(e,t){return{linkName:e.data.name,linkHref:EM(e,t)}}function TM(e){let t=e.data.metadata;return t?t.width&&t.height:!1}function EM(e,t){let n=new URL(e.data.url);return DM(e,t)&&n.searchParams.set(`download`,`true`),n.toString()}function DM(e,t){return typeof t==`function`?t(e):!0}const OM={autoRefresh:!0},kM=36e5,AM=D();var jM=class e extends AM{_refresh;_options;_tokenRefreshTimeout;_isDestroyed=!1;constructor(e,t={}){if(super(),!e)throw new w(`token-missing-token-url`,this);t.initValue&&this._validateTokenValue(t.initValue),this.set(`value`,t.initValue),typeof e==`function`?this._refresh=e:this._refresh=()=>MM(e),this._options={...OM,...t}}init(){return new Promise((e,t)=>{if(!this.value){this.refreshToken().then(e).catch(t);return}this._options.autoRefresh&&this._registerRefreshTokenTimeout(),e(this)})}refreshToken(){let e=this._options.autoRefresh;return this._refresh().then(t=>(this._validateTokenValue(t),this.set(`value`,t),e&&this._registerRefreshTokenTimeout(),this)).catch(t=>{throw T(`token-refresh-failed`,{autoRefresh:e}),e&&this._registerRefreshTokenTimeout(5e3),t})}destroy(){this._isDestroyed=!0,clearTimeout(this._tokenRefreshTimeout)}_validateTokenValue(e){let t=typeof e==`string`,n=!/^\".*\"$/.test(e),r=t&&e.split(`.`).length===3;if(!(n&&r))throw new w(`token-not-in-jwt-format`,this)}_registerRefreshTokenTimeout(e){if(clearTimeout(this._tokenRefreshTimeout),this._isDestroyed)return;let t=e||this._getTokenRefreshTimeoutTime();this._tokenRefreshTimeout=setTimeout(()=>{this.refreshToken()},t)}_getTokenRefreshTimeoutTime(){try{let[,e]=this.value.split(`.`),{exp:t}=JSON.parse(atob(e));return t?(t>2147483647&&console.warn(`Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. Token expiration time should always be provided in seconds.`,{tokenExpireTime:t}),Math.floor((t*1e3-Date.now())/2)):kM}catch{return kM}}static create(t,n={}){return new e(t,n).init()}};function MM(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open(`GET`,e),r.addEventListener(`load`,()=>{let e=r.status,i=r.response;return e<200||e>299?n(new w(`token-cannot-download-new-token`,null)):t(i)}),r.addEventListener(`error`,()=>n(Error(`Network Error`))),r.addEventListener(`abort`,()=>n(Error(`Abort`))),r.send()})}const NM=/^data:(\\S*?);base64,/,PM=E();var FM=class extends PM{file;xhr;_token;_apiAddress;constructor(e,t,n){if(super(),!e)throw new w(`fileuploader-missing-file`,null);if(!t)throw new w(`fileuploader-missing-token`,null);if(!n)throw new w(`fileuploader-missing-api-address`,null);this.file=LM(e)?IM(e):e,this._token=t,this._apiAddress=n}onProgress(e){return this.on(`progress`,(t,n)=>e(n)),this}onError(e){return this.once(`error`,(t,n)=>e(n)),this}abort(){this.xhr.abort()}send(){return this._prepareRequest(),this._attachXHRListeners(),this._sendRequest()}_prepareRequest(){let e=new XMLHttpRequest;e.open(`POST`,this._apiAddress),e.setRequestHeader(`Authorization`,this._token.value),e.responseType=`json`,this.xhr=e}_attachXHRListeners(){let e=this.xhr,t=e=>()=>this.fire(`error`,e);e.addEventListener(`error`,t(`Network Error`)),e.addEventListener(`abort`,t(`Abort`)),e.upload&&e.upload.addEventListener(`progress`,e=>{e.lengthComputable&&this.fire(`progress`,{total:e.total,uploaded:e.loaded})}),e.addEventListener(`load`,()=>{let t=e.status,n=e.response;if(t<200||t>299)return this.fire(`error`,n.message||n.error)})}_sendRequest(){let e=new FormData,t=this.xhr;return e.append(`file`,this.file),new Promise((n,r)=>{t.addEventListener(`load`,()=>{let e=t.status,i=t.response;return e<200||e>299?i.message?r(new w(`fileuploader-uploading-data-failed`,this,{message:i.message})):r(i.error):n(i)}),t.addEventListener(`error`,()=>r(Error(`Network Error`))),t.addEventListener(`abort`,()=>r(Error(`Abort`))),t.send(e)})}};function IM(e,t=512){try{let n=e.match(NM)[1],r=atob(e.replace(NM,``)),i=[];for(let e=0;e(await this._authorizePrivateCategoriesAccess(e.value),e))}getToken(){return this._token}async getWorkspaceId(){let e=this.editor.t,t=e(`Cannot access default workspace.`),n=this.editor.config.get(`ckbox.defaultUploadWorkspaceId`),r=mM(await this._token,n);if(r==null)throw ye(`ckbox-access-default-workspace-error`),t;return r}async getCategoryIdForFile(e,t){let n=this.editor.t,r=n(`Cannot determine a category for the uploaded file.`),i=this.editor.config.get(`ckbox.defaultUploadCategories`),a=this._getAvailableCategories(t),o=typeof e==`string`?vM(await yM(e,t)):bM(e),s=await a;if(!s)throw r;if(i){let e=Object.keys(i).find(e=>i[e].find(e=>e.toLowerCase()==o));if(e){let t=s.find(t=>t.id===e||t.name===e);if(!t)throw r;return t.id}}let c=s.find(e=>e.extensions.find(e=>e.toLowerCase()==o));if(!c)throw r;return c.id}async _getAvailableCategories(e){let t=this.editor,n=this._token,{signal:r}=e,i=t.config.get(`ckbox.serviceOrigin`),a=await this.getWorkspaceId();try{let e=[],t=0,n;do{let r=await o(t);e.push(...r.items),n=r.totalCount-(t+50),t+=50}while(n>0);return e}catch{r.throwIfAborted(),ye(`ckbox-fetch-category-http-error`);return}async function o(e){let t=new URL(`categories`,i);return t.searchParams.set(`limit`,`50`),t.searchParams.set(`offset`,String(e)),t.searchParams.set(`workspaceId`,a),gM({url:t,signal:r,authorization:(await n).value})}}async _authorizePrivateCategoriesAccess(e){let t=this.editor.config.get(`ckbox.serviceOrigin`),n=new FormData;n.set(`token`,e),await fetch(`${t}/categories/authorizePrivateAccess`,{method:`POST`,credentials:`include`,mode:`no-cors`,body:n})}},HM=class extends F{static get requires(){return[$A,zA,bw,GM]}static get pluginName(){return`CKBoxUploadAdapter`}static get isOfficialPlugin(){return!0}async afterInit(){let e=this.editor,t=!!e.config.get(`ckbox`),n=!!window.CKBox;if(!t&&!n)return;let r=e.plugins.get(bw),i=e.plugins.get(VM);r.createUploadAdapter=t=>new UM(t,e,i);let a=!e.config.get(`ckbox.ignoreDataId`),o=e.plugins.get($A);a&&o.on(`uploadComplete`,(t,{imageElement:n,data:r})=>{e.model.change(e=>{e.setAttribute(`ckboxImageId`,r.ckboxImageId,n)})})}},UM=class{loader;token;editor;controller;serviceOrigin;ckboxUtils;constructor(e,t,n){this.loader=e,this.token=n.getToken(),this.ckboxUtils=n,this.editor=t,this.controller=new AbortController,this.serviceOrigin=t.config.get(`ckbox.serviceOrigin`)}async upload(){let e=this.ckboxUtils,t=this.editor.t,n=await this.loader.file,r=await e.getCategoryIdForFile(n,{signal:this.controller.signal}),i=new URL(`assets`,this.serviceOrigin),a=new FormData;return i.searchParams.set(`workspaceId`,await e.getWorkspaceId()),a.append(`categoryId`,r),a.append(`file`,n),gM({method:`POST`,url:i,data:a,onUploadProgress:e=>{e.lengthComputable&&(this.loader.uploadTotal=e.total,this.loader.uploaded=e.loaded)},signal:this.controller.signal,authorization:(await this.token).value}).then(async e=>{let t=pM(e.imageUrls);return{ckboxImageId:e.id,default:t.imageFallbackUrl,sources:t.imageSources}}).catch(()=>{let e=t(`Cannot upload file:`)+` ${n.name}.`;return Promise.reject(e)})}abort(){this.controller.abort()}};const WM=`NoPermission`;var GM=class extends F{static get pluginName(){return`CKBoxEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[uk,Jj,HM,VM]}init(){let e=this.editor;this._shouldBeInitialised()&&(this._checkImagePlugins(),ZM()&&e.commands.add(`ckbox`,new xM(e)),QM(e).then(e=>{e||this._blockImageCommands()}))}afterInit(){let e=this.editor;this._shouldBeInitialised()&&(e.config.get(`ckbox.ignoreDataId`)||(this._initSchema(),this._initConversion(),this._initFixers()))}_shouldBeInitialised(){return!!this.editor.config.get(`ckbox`)||ZM()}_blockImageCommands(){let e=this.editor,t=e.commands.get(`uploadImage`),n=e.commands.get(`ckboxImageEdit`);t&&(t.isAccessAllowed=!1,t.forceDisabled(WM)),n&&n.forceDisabled(WM)}_checkImagePlugins(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&ye(`ckbox-plugin-image-feature-missing`,e)}_initSchema(){let e=this.editor.model.schema;e.extend(`$text`,{allowAttributes:`ckboxLinkId`}),e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.addAttributeCheck(e=>{if(!e.last.getAttribute(`linkHref`))return!1},`ckboxLinkId`)}_initConversion(){let e=this.editor;e.conversion.for(`downcast`).add(e=>{e.on(`attribute:ckboxLinkId:imageBlock`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(!a.consume(t.item,e.name))return;let o=[...i.toViewElement(t.item).getChildren()].find(e=>e.name===`a`);o&&(t.item.hasAttribute(`ckboxLinkId`)?r.setAttribute(`data-ckbox-resource-id`,t.item.getAttribute(`ckboxLinkId`),o):r.removeAttribute(`data-ckbox-resource-id`,o))},{priority:`low`}),e.on(`attribute:ckboxLinkId`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(a.consume(t.item,e.name)){if(t.attributeOldValue){let e=YM(r,t.attributeOldValue);r.unwrap(i.toViewRange(t.range),e)}if(t.attributeNewValue){let e=YM(r,t.attributeNewValue);if(t.item.is(`selection`)){let t=r.document.selection;r.wrap(t.getFirstRange(),e)}else r.wrap(i.toViewRange(t.range),e)}}},{priority:`low`})}),e.conversion.for(`upcast`).add(e=>{e.on(`element:a`,(e,t,n)=>{let{writer:r,consumable:i}=n;if(!t.viewItem.getAttribute(`href`)||!i.consume(t.viewItem,{attributes:[`data-ckbox-resource-id`]}))return;let a=t.viewItem.getAttribute(`data-ckbox-resource-id`);if(a)if(t.modelRange)for(let e of t.modelRange.getItems())e.is(`$textProxy`)&&(e=e.textNode),XM(e)&&r.setAttribute(`ckboxLinkId`,a,e);else{let e=t.modelCursor.nodeBefore||t.modelCursor.parent;r.setAttribute(`ckboxLinkId`,a,e)}},{priority:`low`})}),e.conversion.for(`downcast`).attributeToAttribute({model:`ckboxImageId`,view:`data-ckbox-resource-id`}),e.conversion.for(`upcast`).elementToAttribute({model:{key:`ckboxImageId`,value:e=>e.getAttribute(`data-ckbox-resource-id`)},view:{attributes:{\"data-ckbox-resource-id\":/[\\s\\S]+/}}});let t=e.commands.get(`replaceImageSource`);t&&this.listenTo(t,`cleanupImage`,(e,[t,n])=>{t.removeAttribute(`ckboxImageId`,n)})}_initFixers(){let e=this.editor,t=e.model,n=t.document.selection;t.document.registerPostFixer(KM(e)),t.document.registerPostFixer(qM(n))}};function KM(e){return t=>{let n=!1,r=e.model,i=e.commands.get(`ckbox`);if(!i)return n;for(let e of r.document.differ.getChanges()){if(e.type!==`insert`&&e.type!==`attribute`)continue;let r=e.type===`insert`?new B(e.position,e.position.getShiftedBy(e.length)):e.range,a=e.type===`attribute`&&e.attributeKey===`linkHref`&&e.attributeNewValue===null;for(let e of r.getItems()){if(a&&e.hasAttribute(`ckboxLinkId`)){t.removeAttribute(`ckboxLinkId`,e),n=!0;continue}let r=JM(e,i._chosenAssets);for(let i of r){let r=i.type===`image`?`ckboxImageId`:`ckboxLinkId`;i.id!==e.getAttribute(r)&&(t.setAttribute(r,i.id,e),n=!0)}}}return n}}function qM(e){return t=>!e.hasAttribute(`linkHref`)&&e.hasAttribute(`ckboxLinkId`)?(t.removeSelectionAttribute(`ckboxLinkId`),!0):!1}function JM(e,t){let n=e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`),r=e.hasAttribute(`linkHref`);return[...t].filter(t=>{if(t.type===`image`&&n)return t.attributes.imageFallbackUrl===e.getAttribute(`src`);if(t.type===`link`&&r)return t.attributes.linkHref===e.getAttribute(`linkHref`)})}function YM(e,t){let n=e.createAttributeElement(`a`,{\"data-ckbox-resource-id\":t},{priority:5});return e.setCustomProperty(`link`,!0,n),n}function XM(e){return!!(e.is(`$text`)||e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`))}function ZM(){return!!window.CKBox}async function QM(e){let t=e.plugins.get(VM),n=e.config.get(`ckbox.serviceOrigin`),r=new URL(`permissions`,n),{value:i}=await t.getToken(),a=await gM({url:r,authorization:i,signal:new AbortController().signal});return Object.values(a).some(e=>e[`asset:create`])}var $M=class extends F{static get pluginName(){return`CKBox`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,sO]}};function eN(e){let t=tN(e);return e=>e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`)?e.hasAttribute(`ckboxImageId`)?!0:e.hasAttribute(`src`)?t(e.getAttribute(`src`)):!1:!1}function tN(e){if(Array.isArray(e)){let t=e.map(tN);return e=>t.some(t=>t(e))}if(e==`origin`){let e=u.window.location.origin;return t=>new URL(t,u.document.baseURI).origin==e}return typeof e==`function`?e:e instanceof RegExp?t=>!!(t.match(e)||t.replace(/^https?:\\/\\//,``).match(e)):()=>!1}var nN=class extends I{_wrapper=null;_processInProgress=new Set;_canEdit;_prepareOptions;_updateUiDelayed=Yi(()=>this.editor.ui.update(),0);constructor(e){super(e),this.value=!1,this._canEdit=eN(e.config.get(`ckbox.allowExternalImagesEditing`)),this._prepareOptions=ur((e,t)=>this._prepareOptionsAbortable(e,t)),this._prepareListeners()}refresh(){let e=this.editor;this.value=this._getValue();let t=e.model.document.selection.getSelectedElement();this.isEnabled=!!t&&this._canEdit(t)&&!this._checkIfElementIsBeingProcessed(t)}execute(){if(this._getValue())return;let e=mr(document,`div`,{class:`ck ckbox-wrapper`});this._wrapper=e,this.value=!0,document.body.appendChild(this._wrapper);let t={element:this.editor.model.document.selection.getSelectedElement(),controller:new AbortController};this._prepareOptions(t).then(t=>window.CKBox.mountImageEditor(e,t),e=>{let t=this.editor,n=t.t;t.plugins.get(IC).showWarning(n(`Failed to determine category of edited image.`),{namespace:`ckbox`}),console.error(e),this._handleImageEditorClose()})}destroy(){this._handleImageEditorClose(),this._prepareOptions.abort(),this._updateUiDelayed.cancel();for(let e of this._processInProgress.values())e.controller.abort();super.destroy()}_getValue(){return this._wrapper!==null}async _prepareOptionsAbortable(e,t){let n=this.editor,r=n.config.get(`ckbox`),i=n.plugins.get(VM),{element:a}=t,o,s=a.getAttribute(`ckboxImageId`);if(s)o={assetId:s};else{let t=new URL(a.getAttribute(`src`),document.baseURI).href;o={imageUrl:t,uploadCategoryId:await i.getCategoryIdForFile(t,{signal:e})}}return{...o,imageEditing:{allowOverwrite:!1},tokenUrl:r.tokenUrl,language:r.language,...r.serviceOrigin&&{serviceOrigin:r.serviceOrigin},onClose:()=>this._handleImageEditorClose(),onSave:e=>this._handleImageEditorSave(t,e)}}_prepareListeners(){this.listenTo(this.editor.model.document,`change:data`,()=>{this._getProcessingStatesOfDeletedImages().forEach(e=>{e.controller.abort()})})}_getProcessingStatesOfDeletedImages(){let e=[];for(let t of this._processInProgress.values())t.element.root.rootName==`$graveyard`&&e.push(t);return e}_checkIfElementIsBeingProcessed(e){for(let{element:t}of this._processInProgress)if($t(t,e))return!0;return!1}_handleImageEditorClose(){this._wrapper&&(this._wrapper.remove(),this._wrapper=null,this.editor.editing.view.focus(),this._updateUiDelayed(),this.refresh())}_handleImageEditorSave(e,t){let n=this.editor.locale.t,r=this.editor.plugins.get(IC),i=this.editor.plugins.get(wg),a=i.add(n(`Processing the edited image.`));this._processInProgress.add(e),this._showImageProcessingIndicator(e.element,t),this.refresh(),this._waitForAssetProcessed(t.data.id,e.controller.signal).then(t=>{this._replaceImage(e.element,t)},t=>{this.editor.editing.reconvertItem(e.element),!e.controller.signal.aborted&&(!t||t instanceof w?r.showWarning(n(`Server failed to process the image.`),{namespace:`ckbox`}):console.error(t))}).finally(()=>{this._processInProgress.delete(e),i.remove(a),this.refresh()})}async _getAssetStatusFromServer(e,t){let n=this.editor.plugins.get(VM),r=await gM({url:new URL(`assets/`+e,this.editor.config.get(`ckbox.serviceOrigin`)),signal:t,authorization:(await n.getToken()).value}),i=r.metadata.metadataProcessingStatus;if(!i||i==`queued`)throw new w(`ckbox-image-not-processed`);return{data:{...r}}}async _waitForAssetProcessed(e,t){let n=await Ki(()=>this._getAssetStatusFromServer(e,t),{signal:t,maxAttempts:5});if(n.data.metadata.metadataProcessingStatus!=`success`)throw new w(`ckbox-image-processing-failed`);return n}_showImageProcessingIndicator(e,t){let n=this.editor;n.editing.view.change(r=>{let i=n.editing.mapper.toViewElement(e),a=this.editor.plugins.get(`ImageUtils`).findViewImgElement(i);r.removeStyle(`aspect-ratio`,a),r.setAttribute(`width`,t.data.metadata.width,a),r.setAttribute(`height`,t.data.metadata.height,a),r.setStyle(`width`,`${t.data.metadata.width}px`,a),r.setStyle(`height`,`${t.data.metadata.height}px`,a),r.addClass(`image-processing`,i)})}_replaceImage(e,t){let n=this.editor,{imageFallbackUrl:r,imageSources:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=CM(t),c=Array.from(n.model.document.selection.getRanges());n.model.change(l=>{l.setSelection(e,`on`),n.execute(`insertImage`,{imageType:e.is(`element`,`imageInline`)?`imageInline`:null,source:{src:r,sources:i,width:a,height:o,...s?{placeholder:s}:null,...e.hasAttribute(`alt`)?{alt:e.getAttribute(`alt`)}:null}});let u=e.getChildren();e=n.model.document.selection.getSelectedElement();for(let t of u)l.append(l.cloneElement(t),e);l.setAttribute(`ckboxImageId`,t.data.id,e),l.setSelection(c)})}},rN=class extends F{static get pluginName(){return`CKBoxImageEditEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,VM,wg,IC,Kk,gA]}init(){let{editor:e}=this;e.commands.add(`ckboxImageEdit`,new nN(e))}},iN=class extends F{static get pluginName(){return`CKBoxImageEditUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckboxImageEdit`,t=>{let n=e.commands.get(`ckboxImageEdit`),r=e.commands.get(`uploadImage`),i=new H(t),a=t.t;return i.set({icon:u_,tooltip:!0}),i.bind(`label`).to(r,`isAccessAllowed`,e=>a(e?`Edit image`:`You have no image editing permissions.`)),i.bind(`isOn`).to(n,`value`,n,`isEnabled`,(e,t)=>e&&t),i.bind(`isEnabled`).to(n),this.listenTo(i,`execute`,()=>{e.execute(`ckboxImageEdit`),e.editing.view.focus()}),i})}},aN=class extends F{static get pluginName(){return`CKBoxImageEdit`}static get isOfficialPlugin(){return!0}static get requires(){return[rN,iN]}},oN=class extends F{static get pluginName(){return`CKFinderUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckfinder`,()=>this._createFileToolbarButton()),e.ui.componentFactory.add(`menuBar:ckfinder`,()=>this._createFileMenuBarButton()),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`assetManager`,observable:()=>e.commands.get(`ckfinder`),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=new e(n),i=t.commands.get(`ckfinder`);return r.bind(`isEnabled`).to(i),r.on(`execute`,()=>{t.execute(`ckfinder`),t.editing.view.focus()}),r}_createFileToolbarButton(){let e=this.editor.locale.t,t=this._createButton(H);return t.icon=a_,t.label=e(`Insert image or file`),t.tooltip=!0,t}_createImageToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace image with file manager`:`Insert image with file manager`)),n.tooltip=!0,n}_createImageDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace with file manager`:`Insert with file manager`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createFileMenuBarButton(){let e=this.editor.locale.t,t=this._createButton(U);return t.icon=a_,t.withText=!0,t.label=e(`File`),t}_createImageMenuBarButton(e){let t=this.editor.locale.t,n=this.editor.locale.t,r=this._createButton(U);switch(r.icon=z_,r.withText=!0,e){case`insertOnly`:r.label=t(`Image`);break;case`insertNested`:r.label=n(`With file manager`);break}return r}},sN=class extends I{constructor(e){super(e),this.affectsData=!1,this.stopListening(this.editor.model.document,`change`),this.listenTo(this.editor.model.document,`change`,()=>this.refresh(),{priority:`low`})}refresh(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);this.isEnabled=e.isEnabled||t.isEnabled}execute(){let e=this.editor,t=this.editor.config.get(`ckfinder.openerMethod`)||`modal`;if(t!=`popup`&&t!=`modal`)throw new w(`ckfinder-unknown-openermethod`,e);let n=this.editor.config.get(`ckfinder.options`)||{};n.chooseFiles=!0;let r=n.onInit;n.language||=e.locale.uiLanguage,n.onInit=t=>{r&&r(t),t.on(`files:choose`,n=>{let r=n.data.files.toArray(),i=r.filter(e=>!e.isImage()),a=r.filter(e=>e.isImage());for(let t of i)e.execute(`link`,t.getUrl());let o=[];for(let e of a){let n=e.getUrl();o.push(n||t.request(`file:getProxyUrl`,{file:e}))}o.length&&cN(e,o)}),t.on(`file:choose:resizedImage`,t=>{let n=t.data.resizedUrl;if(!n){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not obtain resized image URL.`),{title:n(`Selecting resized image failed`),namespace:`ckfinder`});return}cN(e,[n])})},window.CKFinder[t](n)}};function cN(e,t){if(!e.commands.get(`insertImage`).isEnabled){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not insert image at the current position.`),{title:n(`Inserting image failed`),namespace:`ckfinder`});return}e.execute(`insertImage`,{source:t})}var lN=class extends F{static get pluginName(){return`CKFinderEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[IC,uk]}init(){let e=this.editor;if(!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`))throw new w(`ckfinder-missing-image-plugin`,e);e.commands.add(`ckfinder`,new sN(e))}},uN=class extends F{static get pluginName(){return`CKFinder`}static get isOfficialPlugin(){return!0}static get requires(){return[Ok,jw,lN,oN]}};function dN(e){let t=e.t,n=e.config.get(`codeBlock.languages`);for(let e of n)e.label===`Plain text`&&(e.label=t(`Plain text`)),e.class===void 0&&(e.class=`language-${e.language}`);return n}function fN(e,t,n){let r={};for(let i of e)if(t===`class`){let e=i[t].split(` `).shift();r[e]=i[n]}else r[i[t]]=i[n];return r}function pN(e){return e.data.match(/^(\\s*)/)[0]}function mN(e,t){let n=e.createDocumentFragment(),r=t.split(`\n`),i=r.reduce((t,n,i)=>(t.push(n),i!e.isEqual(o))&&n.push(o)}return n}function gN(e){let t=j(e.getSelectedBlocks());return!!t&&t.is(`element`,`codeBlock`)}function _N(e,t){return t.is(`rootElement`)||e.isLimit(t)?!1:e.checkChild(t.parent,`codeBlock`)}function vN(e,t,n,r){let i=fN(t,`language`,`label`),a=n.getAttribute(`language`);if(a in i){let t=i[a];return e(r===`enter`?`Entering %0 code snippet`:`Leaving %0 code snippet`,t)}return e(r===`enter`?`Entering code snippet`:`Leaving code snippet`)}function yN(e,t){for(e.textNode&&(e=t.createPositionBefore(e.textNode));e.nodeBefore&&!e.nodeBefore.is(`element`,`softBreak`);)e=t.createPositionBefore(e.nodeBefore);let n=e.nodeAfter;return n&&n.is(`$text`)?n:null}var bN=class extends I{_lastLanguage;constructor(e){super(e),this._lastLanguage=null}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=dN(t)[0],a=Array.from(r.getSelectedBlocks()),o=e.forceValue==null?!this.value:e.forceValue,s=xN(e,this._lastLanguage,i.language);n.change(e=>{o?this._applyCodeBlock(e,a,s):this._removeCodeBlock(e,a)})}_getValue(){let e=this.editor.model.document.selection,t=j(e.getSelectedBlocks());return t?.is(`element`,`codeBlock`)?t.getAttribute(`language`):!1}_checkEnabled(){if(this.value)return!0;let e=this.editor.model.document.selection,t=this.editor.model.schema,n=j(e.getSelectedBlocks());return n?_N(t,n):!1}_applyCodeBlock(e,t,n){this._lastLanguage=n;let r=this.editor.model.schema,i=t.filter(e=>_N(r,e));for(let t of i)e.rename(t,`codeBlock`),e.setAttribute(`language`,n,t),r.removeDisallowedAttributes([t],e),Array.from(t.getChildren()).filter(e=>!r.checkChild(t,e)).forEach(t=>e.remove(t));i.reverse().forEach((t,n)=>{let r=i[n+1];t.previousSibling===r&&(e.appendElement(`softBreak`,r),e.merge(e.createPositionBefore(t)))})}_removeCodeBlock(e,t){let n=t.filter(e=>e.is(`element`,`codeBlock`));for(let t of n){let n=e.createRangeOn(t);for(let t of Array.from(n.getItems()).reverse())if(t.is(`element`,`softBreak`)&&t.parent.is(`element`,`codeBlock`)){let{position:n}=e.split(e.createPositionBefore(t)),r=n.nodeAfter;e.rename(r,`paragraph`),e.removeAttribute(`language`,r),e.remove(t)}e.rename(t,`paragraph`),e.removeAttribute(`language`,t)}}};function xN(e,t,n){return e.language?e.language:e.usePreviousLanguageChoice&&t?t:n}var SN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(t=>{let n=hN(e);for(let r of n){let n=t.createText(this._indentSequence);e.insertContent(n,r)}})}_checkEnabled(){return this._indentSequence?gN(this.editor.model.document.selection):!1}},CN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(()=>{let t=hN(e);for(let n of t){let t=wN(e,n,this._indentSequence);t&&e.deleteContent(e.createSelection(t))}})}_checkEnabled(){if(!this._indentSequence)return!1;let e=this.editor.model;return gN(e.document.selection)?hN(e).some(t=>wN(e,t,this._indentSequence)):!1}};function wN(e,t,n){let r=yN(t,e);if(!r)return null;let i=pN(r),a=i.lastIndexOf(n);if(a+n.length!==i.length||a===-1)return null;let{parent:o,startOffset:s}=r;return e.createRange(e.createPositionAt(o,s+a),e.createPositionAt(o,s+a+n.length))}function TN(e,t,n=!1){let r=fN(t,`language`,`class`),i=fN(t,`language`,`label`);return(t,a,o)=>{let{writer:s,mapper:c,consumable:l}=o;if(!l.consume(a.item,`insert`))return;let u=a.item.getAttribute(`language`),d=c.toViewPosition(e.createPositionBefore(a.item)),f={};n&&(f[`data-language`]=i[u],f.spellcheck=`false`);let p=r[u]?{class:r[u]}:void 0,m=s.createContainerElement(`code`,p),h=s.createContainerElement(`pre`,f,m);s.insert(d,h),c.bindElements(a.item,m)}}function EN(e){return(t,n,r)=>{if(n.item.parent.name!==`codeBlock`)return;let{writer:i,mapper:a,consumable:o}=r;if(!o.consume(n.item,`insert`))return;let s=a.toViewPosition(e.createPositionBefore(n.item));i.insert(s,i.createText(`\n`))}}function DN(e,t){let n=fN(t,`class`,`language`),r=t[0].language;return(e,t,i)=>{let a=t.viewItem,o=a.parent;if(!o||!o.is(`element`,`pre`)||t.modelCursor.findAncestor(`codeBlock`))return;let{consumable:s,writer:c}=i;if(!s.test(a,{name:!0}))return;let l=c.createElement(`codeBlock`),u=[...a.getClassNames()];u.length||u.push(``);for(let e of u){let t=n[e];if(t){s.consume(a,{classes:[e]}),c.setAttribute(`language`,t,l);break}}l.hasAttribute(`language`)||c.setAttribute(`language`,r,l),i.convertChildren(a,l),i.safeInsert(l,t.modelCursor)&&(s.consume(a,{name:!0}),i.updateConversionResult(l,t))}}function ON(){return(e,t,{consumable:n,writer:r})=>{let i=t.modelCursor;if(!n.test(t.viewItem)||!i.findAncestor(`codeBlock`))return;n.consume(t.viewItem);let a=t.viewItem.data.split(`\n`).map(e=>r.createText(e)),o=a[a.length-1];for(let e of a)if(r.insert(e,i),i=i.getShiftedBy(e.offsetSize),e!==o){let e=r.createElement(`softBreak`);r.insert(e,i),i=r.createPositionAfter(e)}t.modelRange=r.createRange(t.modelCursor,i),t.modelCursor=i}}function kN(){return(e,t,{consumable:n})=>{let r=t.viewItem;if(r.findAncestor(`pre`))return;let i=Array.from(r.getChildren()),a=i.find(e=>e.is(`element`,`code`));if(a)for(let e of i)e===a||!e.is(`$text`)||n.consume(e,{name:!0})}}const AN=`paragraph`;var jN=class extends F{static get pluginName(){return`CodeBlockEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[kE]}constructor(e){super(e),e.config.define(`codeBlock`,{languages:[{language:`plaintext`,label:`Plain text`},{language:`c`,label:`C`},{language:`cs`,label:`C#`},{language:`cpp`,label:`C++`},{language:`css`,label:`CSS`},{language:`diff`,label:`Diff`},{language:`go`,label:`Go`},{language:`html`,label:`HTML`},{language:`java`,label:`Java`},{language:`javascript`,label:`JavaScript`},{language:`php`,label:`PHP`},{language:`python`,label:`Python`},{language:`ruby`,label:`Ruby`},{language:`typescript`,label:`TypeScript`},{language:`xml`,label:`XML`}],indentSequence:`\t`})}init(){let e=this.editor,t=e.model.schema,n=e.model,r=e.editing.view,i=dN(e);e.commands.add(`codeBlock`,new bN(e)),e.commands.add(`indentCodeBlock`,new SN(e)),e.commands.add(`outdentCodeBlock`,new CN(e)),this.listenTo(r.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentCodeBlock`:`indentCodeBlock`;e.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`pre`}),t.register(`codeBlock`,{allowWhere:`$block`,allowChildren:`$text`,disallowChildren:`$inlineObject`,allowAttributes:[`language`],allowAttributesOf:`$listItem`,isBlock:!0}),t.addAttributeCheck((e,n)=>{let r=e.getItem(e.length-2);if(t.getAttributeProperties(n).isFormatting&&r&&r.name==`codeBlock`)return!1}),e.editing.downcastDispatcher.on(`insert:codeBlock`,TN(n,i,!0)),e.data.downcastDispatcher.on(`insert:codeBlock`,TN(n,i)),e.data.downcastDispatcher.on(`insert:softBreak`,EN(n),{priority:`high`}),e.data.upcastDispatcher.on(`element:code`,DN(r,i)),e.data.upcastDispatcher.on(`text`,ON()),e.data.upcastDispatcher.on(`element:pre`,kN(),{priority:`high`}),this.listenTo(e.editing.view.document,`clipboardInput`,(t,r)=>{let i=n.createRange(n.document.selection.anchor);if(r.targetRanges&&(i=e.editing.mapper.toModelRange(r.targetRanges[0])),!i.start.parent.is(`element`,`codeBlock`))return;let a=r.dataTransfer.getData(`text/plain`);r.content=mN(new Np(e.editing.view.document),a)}),e.plugins.has(`ClipboardPipeline`)&&e.plugins.get(_O).on(`contentInsertion`,(n,r)=>{let i=e.model,a=i.document.selection;a.anchor.parent.is(`element`,`codeBlock`)&&i.change(e=>{let n=e.createRangeIn(r.content);for(let r of[...n.getItems()])r.is(`node`)&&!t.checkChild(a.anchor,r)&&e.remove(r)})}),this.listenTo(n,`getSelectedContent`,(e,[r])=>{let i=r.anchor;r.isCollapsed||!i.parent.is(`element`,`codeBlock`)||!i.hasSameParentAs(r.focus)||n.change(n=>{let a=e.return;if(i.parent.is(`element`)&&(a.childCount>1||r.containsEntireContent(i.parent))){let t=n.createElement(`codeBlock`,i.parent.getAttributes());n.append(a,t);let r=n.createDocumentFragment();n.append(t,r),e.return=r;return}let o=a.getChild(0);t.checkAttribute(o,`code`)&&n.setAttribute(`code`,!0,o)})})}afterInit(){let e=this.editor,t=e.commands,n=t.get(`indent`),r=t.get(`outdent`);n&&n.registerChildCommand(t.get(`indentCodeBlock`),{priority:`highest`}),r&&r.registerChildCommand(t.get(`outdentCodeBlock`)),this.listenTo(e.editing.view.document,`enter`,(t,n)=>{e.model.document.selection.getLastPosition().parent.is(`element`,`codeBlock`)&&(!NN(e,n.isSoft)&&!PN(e,n.isSoft)&&MN(e),n.preventDefault(),t.stop())},{context:`pre`}),this._initAriaAnnouncements()}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=dN(this.editor),i=null;e.document.selection.on(`change:range`,()=>{let a=e.document.selection.focus.parent;!t||i===a||!a.is(`element`)||(i&&i.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,i,`leave`)),a.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,a,`enter`)),i=a)})}};function MN(e){let t=e.model,n=t.document,r=n.selection.getLastPosition(),i,a=yN(r,t);a&&a.is(`$text`)&&(i=pN(a)),e.model.change(t=>{e.execute(`shiftEnter`),i&&t.insertText(i,n.selection.anchor)})}function NN(e,t){let n=e.model.document,r=e.editing.view,i=n.selection.getLastPosition(),a=i.nodeAfter;return t||!n.selection.isCollapsed||!i.isAtStart||!IN(a)?!1:(e.model.change(t=>{e.execute(`enter`);let r=n.selection.anchor.parent.previousSibling;t.rename(r,AN),t.setSelection(r,`in`),e.model.schema.removeDisallowedAttributes([r],t),t.remove(a)}),r.scrollToTheSelection(),!0)}function PN(e,t){let n=e.model,r=n.document,i=e.editing.view,a=r.selection.getLastPosition(),o=a.nodeBefore,s;if(t||!r.selection.isCollapsed||!a.isAtEnd||!o||!o.previousSibling)return!1;if(IN(o)&&IN(o.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&IN(o.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&FN(o.previousSibling.previousSibling)&&o.previousSibling.previousSibling&&IN(o.previousSibling.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling.previousSibling),n.createPositionAfter(o));else return!1;return e.model.change(t=>{t.remove(s),e.execute(`enter`);let n=r.selection.anchor.parent;t.rename(n,AN),e.model.schema.removeDisallowedAttributes([n],t)}),i.scrollToTheSelection(),!0}function FN(e){return e&&e.is(`$text`)&&!e.data.match(/\\S/)}function IN(e){return e&&e.is(`element`,`softBreak`)}var LN=class extends F{static get pluginName(){return`CodeBlockUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.ui.componentFactory,r=dN(e),i=this._getLanguageListItemDefinitions(r),a=e.commands.get(`codeBlock`);n.add(`codeBlock`,n=>{let r=Nx(n,Mx),o=r.buttonView,s=t(`Insert code block`);return o.set({label:s,tooltip:!0,icon:d_,isToggleable:!0}),o.bind(`isOn`).to(a,`value`,e=>!!e),o.on(`execute`,()=>{e.execute(`codeBlock`,{usePreviousLanguageChoice:!0}),e.editing.view.focus()}),r.on(`execute`,t=>{e.execute(`codeBlock`,{language:t.source._codeBlockLanguage,forceValue:!0}),e.editing.view.focus()}),r.class=`ck-code-block-dropdown`,r.bind(`isEnabled`).to(a),Lx(r,i,{role:`menu`,ariaLabel:s}),r}),n.add(`menuBar:codeBlock`,n=>{let r=new uw(n);r.buttonView.set({role:`menuitem`,label:t(`Code block`),icon:d_}),r.bind(`isEnabled`).to(a);let o=new dw(n);o.set({ariaLabel:t(`Insert code block`)});for(let t of i){let i=new rC(n,r),s=new U(n);s.bind(...Object.keys(t.model)).to(t.model),s.set({isToggleable:!0,role:`menuitemcheckbox`}),s.delegate(`execute`).to(r),s.on(`execute`,()=>{e.execute(`codeBlock`,{language:t.model._codeBlockLanguage,forceValue:a.value!=t.model._codeBlockLanguage}),e.editing.view.focus()}),i.children.add(s),o.items.add(i)}return r.panelView.children.add(o),r})}_getLanguageListItemDefinitions(e){let t=this.editor.commands.get(`codeBlock`),n=new Fi;for(let r of e){let e={type:`button`,model:new RC({_codeBlockLanguage:r.language,label:r.label,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,t=>t===e.model._codeBlockLanguage),n.add(e)}return n}},RN=class extends F{static get requires(){return[jN,LN]}static get pluginName(){return`CodeBlock`}static get isOfficialPlugin(){return!0}},zN=class extends F{_uploadGateway;static get pluginName(){return`CloudServicesUploadAdapter`}static get isOfficialPlugin(){return!0}static get requires(){return[BM,bw]}init(){let e=this.editor,t=e.plugins.get(BM),n=t.token,r=t.uploadUrl;if(!n)return;let i=e.plugins.get(`CloudServicesCore`);this._uploadGateway=i.createUploadGateway(n,r),e.plugins.get(bw).createUploadAdapter=e=>new BN(this._uploadGateway,e)}},BN=class{uploadGateway;loader;fileUploader;constructor(e,t){this.uploadGateway=e,this.loader=t}upload(){return this.loader.file.then(e=>(this.fileUploader=this.uploadGateway.upload(e),this.fileUploader.on(`progress`,(e,t)=>{this.loader.uploadTotal=t.total,this.loader.uploaded=t.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}},VN=class extends F{static get pluginName(){return`EasyImage`}static get isOfficialPlugin(){return!0}static get requires(){return[zN,nj]}init(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&T(`easy-image-image-feature-missing`,e)}},HN=class extends TC{view;constructor(e,t){super(e),this.view=t}get element(){return this.view.editable.element}init(){let e=this.editor,t=this.view,n=e.editing.view,r=t.editable,i=n.document.getRoot();r.name=i.rootName,r.isInlineRoot=!Cg(e,i.rootName),t.render();let a=r.element;this.setEditableElement(r.name,a),r.bind(`isFocused`).to(this.focusTracker),n.attachDomRoot(a),this._initPlaceholder(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}},UN=class extends DC{editable;menuBarView;constructor(e,t,n,r){super(e),this.editable=new jC(e,t,n,{label:r}),this.menuBarView=new gw(e),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}render(){super.render(),this.registerChild(this.editable),this.registerChild(this.menuBarView)}};const WN=sg(rg);var GN=class extends WN{static get editorName(){return`BalloonEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;KN(i)&&(this.sourceElement=i,cg(this,i));let a=this.config.get(`plugins`);a.push(nw),this.config.set(`plugins`,a),this.config.define(`balloonToolbar`,this.config.get(`toolbar`)),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let o=new UN(this.locale,this.editing.view,i,this.config.get(`roots`).main.label);this.ui=new HN(this,o),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function KN(e){return jn(e)}var qN=class extends TC{view;_toolbarConfig;_elementReplacer;constructor(e,t){super(e),this.view=t,this._toolbarConfig=Ex(e.config.get(`toolbar`)),this._elementReplacer=new lr,this.listenTo(e.editing.view,`scrollToTheSelection`,this._handleScrollToTheSelectionWithStickyPanel.bind(this))}get element(){return this.view.element}init(e){let t=this.editor,n=this.view,r=t.editing.view,i=n.editable,a=r.document.getRoot();i.name=a.rootName,i.isInlineRoot=!Cg(t,a.rootName),n.render();let o=i.element;this.setEditableElement(i.name,o),n.editable.bind(`isFocused`).to(this.focusTracker),r.attachDomRoot(o),e&&this._elementReplacer.replace(e,this.element),this._initPlaceholder(),this._initToolbar(),n.menuBarView&&this.initMenuBar(n.menuBarView),this._initDialogPluginIntegration(),this._initContextualBalloonIntegration(),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;this._elementReplacer.restore(),t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initToolbar(){let e=this.view;e.stickyPanel.bind(`isActive`).to(this.focusTracker,`isFocused`),e.stickyPanel.limiterElement=e.element,e.stickyPanel.bind(`viewportTopOffset`).to(this,`viewportOffset`,({visualTop:e})=>e||0),e.toolbar.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(e.toolbar)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.sourceElement,i,a=e.config.get(`roots`)[this.view.editable.name].placeholder;a&&(i=a),!i&&r&&r.tagName.toLowerCase()===`textarea`&&(i=r.getAttribute(`placeholder`)),i&&(n.placeholder=i),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}_initContextualBalloonIntegration(){if(!this.editor.plugins.has(`ContextualBalloon`))return;let{stickyPanel:e}=this.view,t=this.editor.plugins.get(`ContextualBalloon`);t.on(`getPositionOptions`,t=>{let n=t.return;if(!n||!e.isSticky||!e.element)return;let r=new O(e.element).height,i=typeof n.target==`function`?n.target():n.target,a=typeof n.limiter==`function`?n.limiter():n.limiter;if(i&&a&&new O(i).height>=new O(a).height-r)return;let o={...n.viewportOffsetConfig},s=(o.top||0)+r;t.return={...n,viewportOffsetConfig:{...o,top:s}}},{priority:`low`});let n=()=>{t.visibleView&&t.updatePosition()};this.listenTo(e,`change:isSticky`,n),this.listenTo(this.editor.ui,`change:viewportOffset`,n)}_handleScrollToTheSelectionWithStickyPanel(e,t,n){let r=this.view.stickyPanel;if(r.isSticky){let e=new O(r.element).height;t.viewportOffset.top+=e}else{let e=()=>{this.editor.editing.view.scrollToTheSelection(n)};this.listenTo(r,`change:isSticky`,e),setTimeout(()=>{this.stopListening(r,`change:isSticky`,e)},20)}}_initDialogPluginIntegration(){if(!this.editor.plugins.has(`Dialog`))return;let e=this.view.stickyPanel,t=this.editor.plugins.get(`Dialog`);t.on(`show`,()=>{let n=t.view;n.on(`moveTo`,(t,r)=>{if(!e.isSticky||n.wasMoved||n.isModal)return;let i=new O(e.contentPanelElement);r[1]e||0),t.listenTo(e.ui,`update`,()=>{t.panel.isVisible&&t.panel.pin({target:n,positions:t.panelPositions})}),r.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(r)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}};const iP=Wr(`px`);var aP=class extends DC{toolbar;panel;panelPositions;editable;_resizeObserver;constructor(e,t,n,r={}){super(e),this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull,isFloating:!0}),r.useMenuBar&&(this.menuBarView=new gw(e)),this.set(`viewportTopOffset`,0),this.panel=new ab(e),this.panelPositions=this._getPanelPositions(),this.panel.extendTemplate({attributes:{class:`ck-toolbar-container`}}),this.editable=new jC(e,t,n,{label:r.label}),this._resizeObserver=null}render(){if(super.render(),this.body.add(this.panel),this.registerChild(this.editable),this.menuBarView?this.panel.content.addMany([this.menuBarView,this.toolbar]):this.panel.content.add(this.toolbar),this.toolbar.options.shouldGroupWhenFull){let e=this.editable.element;this._resizeObserver=new Hr(e,()=>{this.toolbar.maxWidth=iP(new O(e).width)})}}destroy(){super.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_getPanelPositionTop(e,t){let n;return n=e.top>t.height+this.viewportTopOffset?e.top-t.height:e.bottom>t.height+this.viewportTopOffset+50?this.viewportTopOffset:e.bottom,n}_getPanelPositions(){let e=[(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left,name:`toolbar_west`,config:{withArrow:!1}}),(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left+e.width-t.width,name:`toolbar_east`,config:{withArrow:!1}})];return this.locale.uiLanguageDirection===`ltr`?e:e.reverse()}};const oP=sg(rg);var sP=class extends oP{static get editorName(){return`InlineEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;cP(i)&&(this.sourceElement=i,cg(this,i)),this.config.define(`menuBar.isVisible`,!1),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let a=!this.config.get(`toolbar.shouldNotGroupWhenFull`),o=this.config.get(`menuBar`),s=new aP(this.locale,this.editing.view,i,{shouldToolbarGroupWhenFull:a,useMenuBar:o.isVisible,label:this.config.get(`roots`).main.label});this.ui=new rP(this,s),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function cP(e){return jn(e)}var lP=class extends TC{view;_lastFocusedEditableElement;constructor(e,t){super(e),this.view=t,this._lastFocusedEditableElement=null}init(){let e=this.view,t=this.editor;for(let e of Object.values(this.view.editables))e.isInlineRoot=!Cg(t,e.name);e.render(),this.focusTracker.on(`change:focusedElement`,(e,t,n)=>{for(let e of Object.values(this.view.editables))n===e.element&&(this._lastFocusedEditableElement=e.element)}),this.focusTracker.on(`change:isFocused`,(e,t,n)=>{n||(this._lastFocusedEditableElement=null)});for(let e of Object.values(this.view.editables))this.addEditable(e);this._initToolbar(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}addEditable(e,t){let n=e.element;this.editor.editing.view.attachDomRoot(n,e.name),this.setEditableElement(e.name,n),e.bind(`isFocused`).to(this.focusTracker,`isFocused`,this.focusTracker,`focusedElement`,(e,t)=>e?t===n?!0:this._lastFocusedEditableElement===n:!1),this._initPlaceholder(e,t)}removeEditable(e){let t=this.editor.editing.view;t.getDomRoot(e.name)&&t.detachDomRoot(e.name),e.unbind(`isFocused`),this.removeEditableElement(e.name)}destroy(){super.destroy();for(let e of Object.values(this.view.editables))this.removeEditable(e);this.view.destroy()}_initToolbar(){let e=this.editor,t=this.view;t.toolbar.fillFromConfig(e.config.get(`toolbar`),this.componentFactory),this.addToolbar(t.toolbar)}_initPlaceholder(e,t){t||=this.editor.config.get(`roots`)[e.name]?.placeholder;let n=this.editor.editing.view,r=n.document.getRoot(e.name);t&&(r.placeholder=t),yo({view:n,element:r,isDirectHost:e.isInlineRoot,keepOnFocus:!0})}},uP=class extends DC{toolbar;editables;editable;menuBarView;_editingView;constructor(e,t,n,r={}){super(e),this._editingView=t,this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull}),this.menuBarView=new gw(e),this.editables={};for(let e of n){let t=r.editableElements?.[e],{label:n}=r;typeof n==`object`&&(n=n[e]),this.createEditable(e,t,n)}this.editable=Object.values(this.editables)[0],this.toolbar.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}}),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}createEditable(e,t,n){let r=new jC(this.locale,this._editingView,t,{label:n});return this.editables[e]=r,r.name=e,this.isRendered&&this.registerChild(r),r}removeEditable(e){let t=this.editables[e];this.isRendered&&this.deregisterChild(t),delete this.editables[e],t.destroy()}render(){super.render(),this.registerChild(Object.values(this.editables)),this.registerChild(this.toolbar),this.registerChild(this.menuBarView)}},dP=class extends rg{static get editorName(){return`MultiRootEditor`}ui;sourceElements;_readOnlyRootLocks=new Map;constructor(e,t={}){let{sourceElementsOrData:n,editorConfig:r}=pg(e,t);if(super(r),dg(n,this.config,!1),mP(this.config),hP(this.config),this.config.get(`lazyRoots`))throw new w(`multi-root-editor-root-deprecated-config-lazy-roots`,null);let i=Object.entries(this.config.get(`roots`));this.sourceElements={};let a={};for(let[e,t]of i){let n=vP(t);n&&(_P(n)&&(this.sourceElements[e]=n,cg(this,n)),a[e]=n)}this.editing.view.document.roots.on(`add`,(e,t)=>{t.unbind(`isReadOnly`),t.bind(`isReadOnly`).to(this.editing.view.document,`isReadOnly`,e=>e||this._readOnlyRootLocks.has(t.rootName)),t.on(`change:isReadOnly`,(e,n,r)=>{let i=this.editing.view.createRangeIn(t);for(let e of i.getItems())e.is(`editableElement`)&&(e.unbind(`isReadOnly`),e.isReadOnly=r)})});for(let[e,t]of i){let n=this.model.document.createRoot(t.modelElement,e);t.lazyLoad&&(n._isLoaded=!1)}this.registerRootAttribute(`$rootEditableOptions`),ug(this);let o={shouldToolbarGroupWhenFull:!this.config.get(`toolbar.shouldNotGroupWhenFull`),editableElements:a,label:pP(this.config.get(`roots`),`label`)},s=new uP(this.locale,this.editing.view,fP(i),o);this.ui=new lP(this,s),this.model.document.on(`change:data`,()=>{let e=this.model.document.differ.getChangedRoots();for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`detached`&&this.fire(`detachRoot`,e)}for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`attached`&&this.fire(`addRoot`,e)}}),this.listenTo(this.model,`canEditAt`,(e,[t])=>{if(!t)return;let n=!1;for(let e of t.getRanges()){let t=e.root;if(this._readOnlyRootLocks.has(t.rootName)){n=!0;break}}n&&(e.return=!1,e.stop())},{priority:`high`}),this.decorate(`loadRoot`),this.on(`loadRoot`,(e,[t])=>{let n=this.model.document.getRoot(t);if(!n)throw new w(`multi-root-editor-load-root-no-root`,this,{rootName:t});n._isLoaded&&(T(`multi-root-editor-load-root-already-loaded`),e.stop())},{priority:`highest`}),c(this);function c(e){let t=ca(e.config.get(`licenseKey`));t&&ua(t,`MRE`)&&(e.enableReadOnlyMode(Symbol(`invalidLicense`)),e._showLicenseError(`featureNotAllowed`,`Multi-root editor`))}}async destroy(){let e=this.config.get(`updateSourceElementOnDestroy`),t={};for(let n of Object.keys(this.sourceElements))t[n]=e?this.getData({rootName:n}):``;this.ui.destroy(),await super.destroy();for(let e of Object.keys(this.sourceElements))Ur(this.sourceElements[e],t[e])}addRoot(e,t={}){let n=t.initialData||t.data||``,r={...t.modelAttributes||t.attributes},i=t.modelElement||t.elementName||`$root`;if(!this.model.schema.isLimit(i))throw new w(`multi-root-editor-add-root-element-is-not-limit`,this,{rootName:e,elementName:i});_P(t.element)&&T(`multi-root-editor-add-root-element-option-ignored`),gP(r,t),t.description!=null&&!(`$description`in r)&&(r.$description=t.description),t.title!=null&&!(`$title`in r)&&(r.$title=t.title);let a=t=>{let a=t.addRoot(e,i);n&&t.insert(this.data.parse(n,a),a,0);for(let e of Object.keys(r))this.registerRootAttribute(e),t.setAttribute(e,r[e],a)};t.isUndoable?this.model.change(a):this.model.enqueueChange({isUndoable:!1},a)}detachRoot(e,t=!1){t?this.model.change(t=>t.detachRoot(e)):this.model.enqueueChange({isUndoable:!1},t=>t.detachRoot(e))}createEditable(e,t,n){let r,i;!t||typeof t==`string`?r=t:(r=t?.placeholder,n=t?.label,i=t?.element);let a=e.getAttribute(`$rootEditableOptions`)||{},o=vg(i||a.element),s=this.ui.view.createEditable(e.rootName,o,n||a.label);return s.isInlineRoot=!Cg(this,e.rootName),this.ui.addEditable(s,r||a.placeholder),this.editing.view.forceRender(),s.element}detachEditable(e){let t=e.rootName,n=this.ui.view.editables[t];return this.ui.removeEditable(n),this.ui.view.removeEditable(t),n.element}loadRoot(e,{data:t=``,attributes:n={}}={}){let r=this.model.document.getRoot(e);this.model.enqueueChange({isUndoable:!1},e=>{t&&e.insert(this.data.parse(t,r),r,0);for(let t of Object.keys(n))this.registerRootAttribute(t),e.setAttribute(t,n[t],r);r._isLoaded=!0,this.model.document.differ._bufferRootLoad(r)})}getFullData(e){let t={};for(let n of this.model.document.getRootNames())t[n]=this.data.get({...e,rootName:n});return t}getRootsAttributes(){let e={};for(let t of this.model.document.getRootNames())e[t]=this.getRootAttributes(t);return e}disableRoot(e,t){if(e==`$graveyard`)throw new w(`multi-root-editor-cannot-disable-graveyard-root`,this);let n=this._readOnlyRootLocks.get(e);if(n)n.add(t);else{this._readOnlyRootLocks.set(e,new Set([t]));let n=this.editing.view.document.getRoot(e);n.isReadOnly=!0,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}}enableRoot(e,t){let n=this._readOnlyRootLocks.get(e);if(!(!n||!n.has(t)))if(n.size===1){this._readOnlyRootLocks.delete(e);let t=this.editing.view.document.getRoot(e);t.isReadOnly=this.isReadOnly,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}else n.delete(t)}static async create(e,t={}){let n=new this(e,t);await n.initPlugins(),Sg(n),await n.ui.init();let r=pP(n.config.get(`roots`),`initialData`);return n._verifyRootsWithInitialData(r),await n.data.init(r),n.fire(`ready`),n}_verifyRootsWithInitialData(e){for(let t of this.model.document.getRootNames())if(!(t in e))throw new w(`multi-root-editor-root-initial-data-mismatch`,null);for(let t of Object.keys(e)){let e=this.model.document.getRoot(t);if(!e||!e.isAttached())throw new w(`multi-root-editor-root-initial-data-mismatch`,null)}}};function fP(e){return e.filter(([,{lazyLoad:e}])=>!e).map(([e])=>e)}function pP(e,t){return Object.fromEntries(Object.entries(e).filter(([,e])=>!e.lazyLoad).map(([e,n])=>[e,n[t]]).filter(([,e])=>e!==void 0))}function mP(e){if(e.get(`rootsAttributes`)){let t=e.get(`rootsAttributes`),n=e.get(`roots`);for(let[r,i]of Object.entries(t)){let t=n[r];if(!t)throw new w(`multi-root-editor-root-attributes-no-root`,null);if(Object.keys(t.modelAttributes||{}).length)throw new w(`multi-root-editor-root-attributes-conflict`,null);e.set(`roots.${r}.modelAttributes`,i)}}}function hP(e){let t=e.get(`roots`);for(let[n,r]of Object.entries(t)){if(r.modelAttributes?.$rootEditableOptions)continue;let t={...r.modelAttributes};gP(t,r),e.set(`roots.${n}.modelAttributes`,t)}}function gP(e,{placeholder:t,label:n,element:r}){if(`$rootEditableOptions`in e)return;let i=_P(r)?void 0:vg(r);e.$rootEditableOptions={...t&&{placeholder:t},...n&&{label:n},...i&&{element:i}}}function _P(e){return jn(e)}function vP(e){let t=e.modelAttributes?.$rootEditableOptions;return vg(e.element||t?.element)}const yP={\"(\":`)`,\"[\":`]`,\"{\":`}`};var bP=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document;this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`mention`)}execute(e){let t=this.editor.model,n=t.document.selection,r=typeof e.mention==`string`?{id:e.mention}:e.mention,i=r.id,a=e.range||n.getFirstRange();if(!t.canEditAt(a))return;let o=e.text||i,s=SP({_text:o,id:i},r);if(!i.startsWith(e.marker))throw new w(`mentioncommand-incorrect-id`,this);t.change(e=>{let r=Ui(n.getAttributes()),i=new Map(r.entries());i.set(`mention`,s);let c=t.insertContent(e.createText(o,i),a),l=c.start.nodeBefore,u=c.end.nodeAfter,d=u&&u.is(`$text`)&&u.data.startsWith(` `),f=!1;if(l&&u&&l.is(`$text`)&&u.is(`$text`)){let e=l.data.slice(-1),t=e in yP,n=t&&u.data.startsWith(yP[e]);f=t&&n}!f&&!d&&t.insertContent(e.createText(` `,r),a.start.getShiftedBy(o.length))})}},xP=class extends F{static get pluginName(){return`MentionEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model,n=t.document;t.schema.extend(`$text`,{allowAttributes:`mention`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`codeBlock $text`))return!1},`mention`),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,attributes:`data-mention`,classes:`mention`},model:{key:`mention`,value:e=>CP(e)}}),e.conversion.for(`downcast`).attributeToElement({model:`mention`,view:TP}),e.conversion.for(`downcast`).add(wP),n.registerPostFixer(e=>OP(e,n,t.schema)),n.registerPostFixer(e=>kP(e,n)),n.registerPostFixer(e=>EP(e,n)),e.commands.add(`mention`,new bP(e))}};function SP(e,t){return Object.assign({uid:he().slice(0,8)},e,t||{})}function CP(e,t){let n=e.getAttribute(`data-mention`),r=e.getChild(0);if(!r)return;let i=e.getAttribute(`data-mention-uid`);return SP({id:n,_text:r.data},i?{uid:i,...t}:t)}function wP(e){e.on(`attribute:mention`,(e,t,n)=>{let r=t.attributeNewValue;if(!t.item.is(`$textProxy`)||!r)return;let i=t.range.start;(i.textNode||i.nodeAfter).data!=r._text&&n.consumable.consume(t.item,e.name)},{priority:`highest`})}function TP(e,{writer:t,options:n}){if(e)return t.createAttributeElement(`span`,{class:`mention`,\"data-mention\":e.id,...!n.isClipboardPipeline&&{\"data-mention-uid\":e.uid}},{id:e.uid,priority:20})}function EP(e,t){let n=t.selection,r=n.focus;return n.isCollapsed&&n.hasAttribute(`mention`)&&DP(r)?(e.removeSelectionAttribute(`mention`),!0):!1}function DP(e){let t=e.isAtStart;return e.nodeBefore&&e.nodeBefore.is(`$text`)||t}function OP(e,t,n){let r=t.differ.getChanges(),i=!1;for(let t of r){if(t.type==`attribute`)continue;let r=t.position;if(t.name==`$text`){let t=r.textNode&&r.textNode.nextSibling;i=jP(r.textNode,e)||i,i=jP(t,e)||i,i=jP(r.nodeBefore,e)||i,i=jP(r.nodeAfter,e)||i}if(t.name!=`$text`&&t.type==`insert`){let t=r.nodeAfter;for(let n of e.createRangeIn(t).getItems())i=jP(n,e)||i}if(t.type==`insert`&&n.isInline(t.name)){let t=r.nodeAfter&&r.nodeAfter.nextSibling;i=jP(r.nodeBefore,e)||i,i=jP(t,e)||i}}return i}function kP(e,t){let n=t.differ.getChanges(),r=!1;for(let t of n)if(t.type===`attribute`&&t.attributeKey!=`mention`){let n=t.range.start.nodeBefore,i=t.range.end.nodeAfter;for(let a of[n,i])AP(a)&&a.getAttribute(t.attributeKey)!=t.attributeNewValue&&(e.setAttribute(t.attributeKey,t.attributeNewValue,a),r=!0)}return r}function AP(e){return!e||!(e.is(`$text`)||e.is(`$textProxy`))||!e.hasAttribute(`mention`)?!1:e.data!=e.getAttribute(`mention`)._text}function jP(e,t){return AP(e)?(t.removeAttribute(`mention`,e),!0):!1}var MP=class extends mx{selected;position;constructor(e){super(e),this.extendTemplate({attributes:{class:[`ck-mentions`],tabindex:`-1`}})}selectFirst(){this.select(0)}selectNext(){let e=this.selected,t=this.items.getIndex(e);this.select(t+1)}selectPrevious(){let e=this.selected,t=this.items.getIndex(e);this.select(t-1)}select(e){let t=0;e>0&&e{n?(this.domElement.classList.add(`ck-on`),this.domElement.classList.remove(`ck-off`)):(this.domElement.classList.add(`ck-off`),this.domElement.classList.remove(`ck-on`))}),this.listenTo(this.domElement,`click`,()=>{this.fire(`execute`)})}render(){super.render(),this.element=this.domElement}focus(){this.domElement.focus()}},PP=class extends dx{item;marker;highlight(){let e=this.children.first;e.isOn=!0}removeHighlight(){let e=this.children.first;e.isOn=!1}};const FP=[k.arrowup,k.arrowdown,k.esc],IP=[k.enter,k.tab];var LP=class extends F{_mentionsView;_mentionsConfigurations;_balloon;_items=new Fi;_lastRequested;_requestFeedDebounced;static get pluginName(){return`MentionUI`}static get isOfficialPlugin(){return!0}static get requires(){return[BC]}constructor(e){super(e),this._mentionsView=this._createMentionView(),this._mentionsConfigurations=new Map,this._requestFeedDebounced=Kt(this._requestFeed,100),e.config.define(`mention`,{feeds:[]})}init(){let e=this.editor,t=e.config.get(`mention.commitKeys`)||IP,n=FP.concat(t);this._balloon=e.plugins.get(BC),e.editing.view.document.on(`keydown`,(e,n)=>{i(n.keyCode)&&this._isUIVisible&&(n.preventDefault(),e.stop(),n.keyCode==k.arrowdown&&this._mentionsView.selectNext(),n.keyCode==k.arrowup&&this._mentionsView.selectPrevious(),t.includes(n.keyCode)&&this._mentionsView.executeSelected(),n.keyCode==k.esc&&this._hideUIAndRemoveMarker())},{priority:`highest`}),Ya({emitter:this._mentionsView,activator:()=>this._isUIVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideUIAndRemoveMarker()});let r=e.config.get(`mention.feeds`);for(let e of r){let{feed:t,marker:n,dropdownLimit:r}=e;if(!KP(n))throw new w(`mentionconfig-incorrect-marker`,null,{marker:n});let i={marker:n,feedCallback:typeof t==`function`?t.bind(this.editor):UP(t),itemRenderer:e.itemRenderer,dropdownLimit:r};this._mentionsConfigurations.set(n,i)}this._setupTextWatcher(r),this.listenTo(e,`change:isReadOnly`,()=>{this._hideUIAndRemoveMarker()}),this.on(`requestFeed:response`,(e,t)=>this._handleFeedResponse(t)),this.on(`requestFeed:error`,()=>this._hideUIAndRemoveMarker());function i(e){return n.includes(e)}}destroy(){super.destroy(),this._mentionsView.destroy()}get _isUIVisible(){return this._balloon.visibleView===this._mentionsView}_createMentionView(){let e=this.editor.locale,t=new MP(e);return t.items.bindTo(this._items).using(n=>{let{item:r,marker:i}=n,{dropdownLimit:a}=this._mentionsConfigurations.get(i),o=a||this.editor.config.get(`mention.dropdownLimit`)||10;if(t.items.length>=o)return null;let s=new PP(e),c=this._renderItem(r,i);return c.delegate(`execute`).to(s),s.children.add(c),s.item=r,s.marker=i,s.on(`execute`,()=>{t.fire(`execute`,{item:r,marker:i})}),s}),t.on(`execute`,(e,t)=>{let n=this.editor,r=n.model,i=t.item,a=t.marker,o=n.model.markers.get(`mention`),s=r.createPositionAt(r.document.selection.focus),c=r.createPositionAt(o.getStart()),l=r.createRange(c,s);this._hideUIAndRemoveMarker(),n.execute(`mention`,{mention:i,text:i.text,marker:a,range:l}),n.editing.view.focus()}),t}_getItemRenderer(e){let{itemRenderer:t}=this._mentionsConfigurations.get(e);return t}_requestFeed(e,t){this._lastRequested=t;let{feedCallback:n}=this._mentionsConfigurations.get(e),r=n(t);if(!(r instanceof Promise)){this.fire(`requestFeed:response`,{feed:r,marker:e,feedText:t});return}r.then(n=>{this._lastRequested==t?this.fire(`requestFeed:response`,{feed:n,marker:e,feedText:t}):this.fire(`requestFeed:discarded`,{feed:n,marker:e,feedText:t})}).catch(t=>{this.fire(`requestFeed:error`,{error:t}),T(`mention-feed-callback-error`,{marker:e})})}_setupTextWatcher(e){let t=this.editor,n=e.map(e=>({...e,pattern:BP(e.marker,e.minimumCharacters||0)})),r=new yT(t.model,VP(n));r.on(`matched`,(e,r)=>{let i=zP(n,r.text),a=t.model.document.selection.focus,o=t.model.createPositionAt(a.parent,i.position);if(WP(a)||GP(o)){this._hideUIAndRemoveMarker();return}let s=HP(i,r.text),c=i.marker.length+s.length,l=a.getShiftedBy(-c),u=a.getShiftedBy(-s.length),d=t.model.createRange(l,u);if(qP(t)){let e=t.model.markers.get(`mention`);t.model.change(t=>{t.updateMarker(e,{range:d})})}else t.model.change(e=>{e.addMarker(`mention`,{range:d,usingOperation:!1,affectsData:!1})});this._requestFeedDebounced(i.marker,s)}),r.on(`unmatched`,()=>{this._hideUIAndRemoveMarker()});let i=t.commands.get(`mention`);return r.bind(`isEnabled`).to(i),r}_handleFeedResponse(e){let{feed:t,marker:n}=e;if(!qP(this.editor))return;if(!this.editor.commands.get(`mention`).isEnabled){this._hideUIAndRemoveMarker();return}this._items.clear();for(let e of t){let t=typeof e==`object`?e:{id:e,text:e};this._items.add({item:t,marker:n})}let r=this.editor.model.markers.get(`mention`);this._items.length?this._showOrUpdateUI(r):this._hideUIAndRemoveMarker()}_showOrUpdateUI(e){this._isUIVisible?this._balloon.updatePosition(this._getBalloonPanelPositionData(e,this._mentionsView.position)):this._balloon.add({view:this._mentionsView,position:this._getBalloonPanelPositionData(e,this._mentionsView.position),singleViewMode:!0,balloonClassName:`ck-mention-balloon`}),this._mentionsView.position=this._balloon.view.position,this._mentionsView.selectFirst()}_hideUIAndRemoveMarker(){this._balloon.hasView(this._mentionsView)&&this._balloon.remove(this._mentionsView),qP(this.editor)&&this.editor.model.change(e=>e.removeMarker(`mention`)),this._mentionsView.position=void 0}_renderItem(e,t){let n=this.editor,r,i=e.id,a=this._getItemRenderer(t);if(a){let t=a(e);typeof t==`string`?i=t:r=new NP(n.locale,t)}if(!r){let e=new H(n.locale);e.label=i,e.withText=!0,r=e}return r}_getBalloonPanelPositionData(e,t){let n=this.editor,r=n.editing,i=r.view.domConverter,a=r.mapper,o=n.locale.uiLanguageDirection;return{target:()=>{let t=e.getRange();t.start.root.rootName==`$graveyard`&&(t=n.model.document.selection.getFirstRange());let r=a.toViewRange(t);return O.getDomRangeRects(i.viewRangeToDom(r)).pop()},limiter:()=>{let e=this.editor.editing.view,t=e.document.selection.editableElement;return t?e.domConverter.mapViewToDom(t.root):null},positions:RP(t,o)}}};function RP(e,t){let n={caret_se:e=>({top:e.bottom+3,left:e.right,name:`caret_se`,config:{withArrow:!1}}),caret_ne:(e,t)=>({top:e.top-t.height-3,left:e.right,name:`caret_ne`,config:{withArrow:!1}}),caret_sw:(e,t)=>({top:e.bottom+3,left:e.right-t.width,name:`caret_sw`,config:{withArrow:!1}}),caret_nw:(e,t)=>({top:e.top-t.height-3,left:e.right-t.width,name:`caret_nw`,config:{withArrow:!1}})};return Object.prototype.hasOwnProperty.call(n,e)?[n[e]]:t===`rtl`?[n.caret_sw,n.caret_se,n.caret_nw,n.caret_ne]:[n.caret_se,n.caret_sw,n.caret_ne,n.caret_nw]}function zP(e,t){let n;for(let r of e){let e=t.lastIndexOf(r.marker);e>0&&!t.substring(e-1).match(r.pattern)||(!n||e>=n.position)&&(n={marker:r.marker,position:e,minimumCharacters:r.minimumCharacters,pattern:r.pattern})}return n}function BP(e,t){let n=t==0?`*`:`{${t},}`,r=p.features.isRegExpUnicodePropertySupported?`\\\\p{Ps}\\\\p{Pi}\"'`:`\\\\(\\\\[{\"'`;e=e.replace(/[.*+?^${}()\\-|[\\]\\\\]/g,`\\\\$&`);let i=`(?:^|[ ${r}])(${e})(.${n})$`;return new RegExp(i,`u`)}function VP(e){return t=>{let n=zP(e,t);if(!n)return!1;let r=0;n.position!==0&&(r=n.position-1);let i=t.substring(r);return n.pattern.test(i)}}function HP(e,t){let n=0;e.position!==0&&(n=e.position-1);let r=BP(e.marker,0);return t.substring(n).match(r)[2]}function UP(e){return t=>e.filter(e=>(typeof e==`string`?e:String(e.id)).toLowerCase().includes(t.toLowerCase()))}function WP(e){let t=e.textNode&&e.textNode.hasAttribute(`mention`),n=e.nodeBefore;return t||n&&n.is(`$text`)&&n.hasAttribute(`mention`)}function GP(e){let t=e.nodeAfter;return t&&t.is(`$text`)&&t.hasAttribute(`mention`)}function KP(e){return!!e}function qP(e){return e.model.markers.has(`mention`)}var JP=class extends F{toMentionAttribute(e,t){return CP(e,t)}static get pluginName(){return`Mention`}static get isOfficialPlugin(){return!0}static get requires(){return[xP,LP]}},YP=o(((e,t)=>{((e,n)=>{typeof define==`function`&&define.amd?define([],n):typeof t==`object`&&t.exports?t.exports=n():e.fuzzysort=n()})(e,e=>{var t=(e,t)=>{if(!e||!t)return de;var n=p(e);se(t)||(t=f(t));var r=n.bitflags;return(r&t._bitflags)===r?h(n,t):de},n=(e,t,n)=>{if(!e)return n?.all?m(t,n):ue;var r=p(e),i=r.bitflags,a=r.containsSpace,o=u(n?.threshold||0),c=n?.limit||ce,l=0,d=0,g=t.length;function _(e){lpe.peek()._score&&pe.replaceTop(e))}if(n?.key)for(var v=n.key,y=0;y-1e3&&S[e]>le){var he=(S[e]+C[e])/4;he>S[e]&&(S[e]=he)}C[e]>S[e]&&(S[e]=C[e])}}if(a){for(let e=0;e-1e3&&ve>le){var he=(ve+x._score)/4;he>ve&&(ve=he)}x._score>ve&&(ve=x._score)}}if(_e.obj=ee,_e._score=ve,n?.scoreFn){if(ve=n.scoreFn(_e),!ve)continue;ve=u(ve),_e._score=ve}ve=0;--y)w[y]=pe.poll();return w.total=l+d,w},r=(e,t=``,n=``)=>{for(var r=typeof t==`function`?t:void 0,i=e.target,a=i.length,o=e.indexes,s=``,c=0,l=0,u=!1,d=[],f=0;f{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``);var t=v(e);return c(e,{_targetLower:t._lower,_targetLowerCodes:t.lowerCodes,_bitflags:t.bitflags})},a=()=>{b.clear(),x.clear()};class o{get indexes(){return this._indexes.slice(0,this._indexes.len).sort((e,t)=>e-t)}set indexes(e){return this._indexes=e}highlight(e,t){return r(this,e,t)}get score(){return l(this._score)}set score(e){this._score=u(e)}}class s extends Array{get score(){return l(this._score)}set score(e){this._score=u(e)}}var c=(e,t)=>{let n=new o;return n.target=e,n.obj=t.obj??de,n._score=t._score??le,n._indexes=t._indexes??[],n._targetLower=t._targetLower??``,n._targetLowerCodes=t._targetLowerCodes??de,n._nextBeginningIndexes=t._nextBeginningIndexes??de,n._bitflags=t._bitflags??0,n},l=e=>e===le?0:e>1?e:Math.E**(((-e+1)**.04307-1)*-2),u=e=>e===0?le:e>1?e:1-(Math.log(e)/-2+1)**(1/.04307),d=e=>{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``),e=e.trim();var t=v(e),n=[];if(t.containsSpace){var r=e.split(/\\s+/);r=[...new Set(r)];for(var i=0;i{if(e.length>999)return i(e);var t=b.get(e);return t===void 0?(t=i(e),b.set(e,t),t):t},p=e=>{if(e.length>999)return d(e);var t=x.get(e);return t===void 0?(t=d(e),x.set(e,t),t):t},m=(e,t)=>{var n=[];n.total=e.length;var r=t?.limit||ce;if(t?.key)for(var i=0;i=r)return n}}else if(t?.keys)for(var i=0;i=0;--d){var o=oe(a,t.keys[d]);if(!o){u[d]=fe;continue}se(o)||(o=f(o)),o._score=le,o._indexes.len=0,u[d]=o}if(u.obj=a,u._score=le,n.push(u),n.length>=r)return n}else for(var i=0;i=r))return n}return n},h=(e,t,n=!1,r=!1)=>{if(n===!1&&e.containsSpace)return g(e,t,r);for(var i=e._lower,a=e.lowerCodes,s=a[0],c=t._targetLowerCodes,l=a.length,u=c.length,d=0,f=0,p=0;;){var m=s===c[f];if(m){if(te[p++]=f,++d,d===l)break;s=a[d]}if(++f,f>=u)return de}var d=0,h=!1,_=0,v=t._nextBeginningIndexes;v===de&&(v=t._nextBeginningIndexes=ee(t.target)),f=te[0]===0?0:v[te[0]-1];var y=0;if(f!==u)for(;;)if(f>=u){if(d<=0||(++y,y>200))break;--d;var b=ne[--_];f=v[b]}else{var m=a[d]===c[f];if(m){if(ne[_++]=f,++d,d===l){h=!0;break}++f}else f=v[f]}var x=l<=1?-1:t._targetLower.indexOf(i,te[0]),re=!!~x,S=re?x===0||t._nextBeginningIndexes[x-1]===x:!1;if(re&&!S){for(var C=0;C{for(var t=0,n=0,r=1;r24&&(t*=(a-24)*10)}return t-=(u-l)/2,re&&(t/=1+l*l*1),S&&(t/=1+l*l*1),t-=(u-l)/2,t};if(!h){if(re)for(var C=0;C{for(var r=new Set,i=0,a=de,o=0,s=e.spaceSearches,c=s.length,l=0,u=()=>{for(let e=l-1;e>=0;e--)t._nextBeginningIndexes[re[e*2+0]]=re[e*2+1]},d=!1,f=0;f=0&&v===t._nextBeginningIndexes[e];e--)t._nextBeginningIndexes[e]=_,re[l*2+0]=e,re[l*2+1]=v,l++}}i+=a._score/c,C[f]=a._score/c,a._indexes[0]i){if(n)for(var f=0;fe.replace(/\\p{Script=Latin}+/gu,e=>e.normalize(`NFD`)).replace(/[\\u0300-\\u036f]/g,``),v=e=>{e=_(e);for(var t=e.length,n=e.toLowerCase(),r=[],i=0,a=!1,o=0;o=97&&s<=122?s-97:s>=48&&s<=57?26:s<=127?30:31;i|=1<{for(var t=e.length,n=[],r=0,i=!1,a=!1,o=0;o=65&&s<=90,l=c||s>=97&&s<=122||s>=48&&s<=57,u=c&&!i||!a||!l;i=c,a=l,u&&(n[r++]=o)}return n},ee=e=>{e=_(e);for(var t=e.length,n=y(e),r=[],i=n[0],a=0,o=0;oo?r[o]=i:(i=n[++a],r[o]=i===void 0?t:i);return r},b=new Map,x=new Map,te=[],ne=[],re=[],S=[],C=[],ie=[],ae=[],oe=(e,t)=>{var n=e[t];if(n!==void 0)return n;if(typeof t==`function`)return t(e);var r=t;Array.isArray(t)||(r=t.split(`.`));for(var i=r.length,a=-1;e&&++atypeof e==`object`&&typeof e._bitflags==`number`,ce=1/0,le=-ce,ue=[];ue.total=0;var de=null,fe=i(``),pe=(e=>{var t=[],n=0,r={},i=e=>{for(var r=0,i=t[r],a=1;a>1]=t[r],a=1+(r<<1)}for(var s=r-1>>1;r>0&&i._score>1)t[r]=t[s];t[r]=i};return r.add=(e=>{var r=n;t[n++]=e;for(var i=r-1>>1;r>0&&e._score>1)t[r]=t[i];t[r]=e}),r.poll=(e=>{if(n!==0){var r=t[0];return t[0]=t[--n],i(),r}}),r.peek=(e=>{if(n!==0)return t[0]}),r.replaceTop=(e=>{t[0]=e,i()}),r})();return{single:t,go:n,prepare:i,cleanup:a}})}));function XP(e){let t=ZP();if(!t)return!1;t.font=`12px Arial, Sans-Serif`,t.textBaseline=`top`,t.canvas.width=40,t.canvas.height=25,t.clearRect(0,0,40,25),t.fillStyle=`#FF0000`,t.fillText(e,0,22),t.fillStyle=`#0000FF`,t.fillText(e,20,22);let n=t.getImageData(0,0,20,25).data,r=n.length,i=0;for(;i=r)return!1;let a=20+i/4%20,o=Math.floor(i/4/20),s=t.getImageData(a,o,1,1).data;return!(n[i]!==s[0]||n[i+2]!==s[2]||t.measureText(e).width>=20)}function ZP(){try{return document.createElement(`canvas`).getContext(`2d`,{willReadFrequently:!0})}catch{return null}}const QP={0:`default`,1:`light`,2:`medium-light`,3:`medium`,4:`medium-dark`,5:`dark`},$P={\"🪎\":17,\"🫩\":16,\"🫨\":15.1,\"🫠\":14,\"😶‍🌫️\":13.1,\"🧑‍💻\":12.1,\"🥰\":11,\"🤪\":5,\"⚕️\":4,\"🤣\":3,\"👋🏽\":2,\"😀\":1,\"😐\":.7,\"😂\":.6};var eF=class e extends F{_emojiCanvas=null;static get pluginName(){return`EmojiUtils`}static get isOfficialPlugin(){return!0}init(){this._emojiCanvas=document.createElement(`canvas`).getContext(`2d`)}isEmojiSupported(e,t,n){return e.version<=t?this.hasZwj(e.emoji)?this.isEmojiZwjSupported(e,n):!0:!1}getEmojiSupportedVersionByOs(){for(let[t,n]of Object.entries($P))if(e._isEmojiSupported(t))return n;return 0}hasZwj(e){return e.includes(`‍`)}isEmojiZwjSupported(e,t){return this.getNodeWidthUsingCanvas(t,e.emoji)<24*1.8?!0:this.getNodeWidth(t,e.emoji)<24*1.8}getNodeWidth(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n);let r=n.offsetWidth;return e.removeChild(n),r}getNodeWidthUsingCanvas(e,t){let n=getComputedStyle(e);return this._emojiCanvas.font=[n.fontStyle,n.fontVariant,n.fontWeight,`24px`,`\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", ${n.fontFamily}`].join(` `),Math.ceil(this._emojiCanvas.measureText(t).width)}createEmojiWidthTestingContainer(){let e=document.createElement(`div`);return e.setAttribute(`aria-hidden`,`true`),e.style.position=`absolute`,e.style.left=`-9999px`,e.style.whiteSpace=`nowrap`,e.style.fontSize=`24px`,e}normalizeEmojiSkinTone(e){let t={...e,skins:{default:e.emoji}};return e.skins&&e.skins.forEach(e=>{let n=QP[e.tone];t.skins[n]=e.emoji}),t}isEmojiCategoryAllowed(e){return e.group!==2}static _isEmojiSupported=XP},tF=class{_cache=new Map;async fetch({url:e,cacheKeys:t,transform:n}){let r=nF(e,t);if(this._cache.has(r))return this._cache.get(r).promise;let i=fetch(e,{cache:`force-cache`}).then(e=>e.ok?e.json():Promise.resolve([])).then(e=>n(e)).catch(()=>(this._cache.delete(r),[]));return this._cache.set(r,rF(i)),i}getSync({url:e,cacheKeys:t}){let n=this._cache.get(nF(e,t));return!n||n.status!==`fulfilled`?null:n.value}clear(){this._cache.clear()}};function nF(e,t){return[e,...t].join(`|`)}function rF(e){let t={promise:e,status:`pending`,value:void 0};return e.then(e=>{Object.assign(t,{status:`fulfilled`,value:e})}),t}var iF=l(YP(),1),aF=class e extends F{_url;static get requires(){return[eF]}static get pluginName(){return`EmojiRepository`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`emoji`,{version:void 0,skinTone:`default`,definitionsUrl:void 0,useCustomFont:!1}),this.set(`isRepositoryReady`,null),this._url=this._getUrl()}init(){this._warnAboutCdnUse(),e._cache.fetch({url:this._url.toString(),cacheKeys:this._cacheKeys,transform:e=>this._normalizeEmoji(e)}).then(()=>{if(this.editor.state===`destroyed`)return;let e=!!this._getItems();e||T(`emoji-repository-empty`),this.isRepositoryReady=e})}onReady(e){if(this.editor.state!==`destroyed`){if(this.isRepositoryReady!==null){e(this.isRepositoryReady);return}this.once(`change:isRepositoryReady`,(t,n,r)=>{e(!!r)})}}getEmojiByQuery(e){let t=this._getItems();return!t||!e.split(/\\s/).filter(Boolean).some(e=>e.length>=2)?[]:iF.default.go(e,t,{threshold:.6,keys:[`emoticon`,`annotation`,t=>e.split(/\\s/).filter(Boolean).flatMap(e=>t.tags?.filter(t=>t.startsWith(e))).join()]}).map(e=>e.obj)}getEmojiCategories(){let e=this._getItems();if(!e)return[];let{t}=this.editor.locale,n=[{title:t(`Smileys & Expressions`),icon:`😄`,groupId:0},{title:t(`Gestures & People`),icon:`👋`,groupId:1},{title:t(`Animals & Nature`),icon:`🐻`,groupId:3},{title:t(`Food & Drinks`),icon:`🍎`,groupId:4},{title:t(`Travel & Places`),icon:`🚘`,groupId:5},{title:t(`Activities`),icon:`🏀`,groupId:6},{title:t(`Objects`),icon:`💡`,groupId:7},{title:t(`Symbols`),icon:`🔵`,groupId:8},{title:t(`Flags`),icon:`🏁`,groupId:9}],r=Wt(e,e=>e.group);return n.map(e=>({...e,items:r[e.groupId]}))}getSkinTones(){let{t:e}=this.editor.locale;return[{id:`default`,icon:`👋`,tooltip:e(`Default skin tone`)},{id:`light`,icon:`👋🏻`,tooltip:e(`Light skin tone`)},{id:`medium-light`,icon:`👋🏼`,tooltip:e(`Medium Light skin tone`)},{id:`medium`,icon:`👋🏽`,tooltip:e(`Medium skin tone`)},{id:`medium-dark`,icon:`👋🏾`,tooltip:e(`Medium Dark skin tone`)},{id:`dark`,icon:`👋🏿`,tooltip:e(`Dark skin tone`)}]}isReady(){return new Promise((e,t)=>{let n=()=>t(Error(`The editor was destroyed before the emoji repository finished loading.`));this.editor.state===`destroyed`?n():(this.onReady(e),this.editor.once(`destroy`,n))})}_getUrl(){let{definitionsUrl:e,version:t}=this.editor.config.get(`emoji`);if(!e||e===`cdn`){let e=t||16,n=new URL(`https://cdn.ckeditor.com/ckeditor5/data/emoji/{version}/en.json`.replace(`{version}`,e.toString()));return n.searchParams.set(`editorVersion`,Ce),n}return t&&T(`emoji-repository-redundant-version`),new URL(e)}_warnAboutCdnUse(){let e=this.editor,t=e.config.get(`emoji`),n=e.config.get(`licenseKey`),r=window[Symbol.for(`cke distribution`)];n!==`GPL`&&r!==`cloud`&&(t&&t.definitionsUrl||T(`emoji-repository-cdn-use`))}_getItems(){let t=e._cache.getSync({url:this._url.toString(),cacheKeys:this._cacheKeys});return t&&t.length?t:null}_normalizeEmoji(e){let t=this.editor,n=t.config.get(`emoji.useCustomFont`),r=t.plugins.get(`EmojiUtils`),i=e.filter(e=>r.isEmojiCategoryAllowed(e));if(n)return i.map(e=>r.normalizeEmojiSkinTone(e));let a=r.getEmojiSupportedVersionByOs(),o=r.createEmojiWidthTestingContainer();document.body.appendChild(o);let s=i.filter(e=>r.isEmojiSupported(e,a,o)).map(e=>r.normalizeEmojiSkinTone(e));return o.remove(),s}get _cacheKeys(){return[`useCustomFont:${!!this.editor.config.get(`emoji.useCustomFont`)}`]}static _cache=new tF};const oF=`:__EMOJI_SHOW_ALL:`,sF=`:__EMOJI_HINT:`;var cF=class extends F{_emojiDropdownLimit;_skinTone;static get requires(){return[aF,gT,JP]}static get pluginName(){return`EmojiMention`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this.editor.config.define(`emoji`,{dropdownLimit:6}),this._emojiDropdownLimit=e.config.get(`emoji.dropdownLimit`),this._skinTone=e.config.get(`emoji.skinTone`),this._setupMentionConfiguration(e)}_setupMentionConfiguration(e){let t=e.config.get(`mergeFields.prefix`),n=e.config.get(`mention.feeds`),r=t?t[0]===`:`:!1;if(n.filter(e=>!e._isEmojiMarker).some(e=>e.marker===`:`)||r){T(`emoji-config-marker-already-used`,{marker:`:`});return}if(n.some(e=>e._isEmojiMarker))return;let i={_isEmojiMarker:!0,marker:`:`,dropdownLimit:this._emojiDropdownLimit,itemRenderer:this._customItemRendererFactory(this.editor.t),feed:this._queryEmojiCallbackFactory()};this.editor.config.set(`mention.feeds`,[...n,i])}init(){let{editor:e}=this;this.emojiPickerPlugin=e.plugins.has(`EmojiPicker`)?e.plugins.get(`EmojiPicker`):null,this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`),this._overrideMentionExecuteListener()}_customItemRendererFactory(e){return t=>{let n=document.createElement(`button`);n.classList.add(`ck`),n.classList.add(`ck-button`),n.classList.add(`ck-button_with-text`),n.id=`mention-list-item-id${t.id.slice(0,-1)}`,n.type=`button`,n.tabIndex=-1;let r=document.createElement(`span`);return r.classList.add(`ck`),r.classList.add(`ck-button__label`),n.appendChild(r),t.id===sF?(n.classList.add(`ck-list-item-button`),n.classList.add(`ck-disabled`),r.textContent=e(`Keep on typing to see the emoji.`)):t.id===oF?r.textContent=e(`Show all emoji...`):r.textContent=`${t.text} ${t.id}`,n}}_overrideMentionExecuteListener(){let{editor:e}=this;e.commands.get(`mention`).on(`execute`,(t,n)=>{if(!this.emojiRepositoryPlugin.isRepositoryReady)return;let r=n[0];if(r.marker===`:`&&(t.stop(),r.mention.id!==sF))if(r.mention.id===oF){let t=[...r.range.getItems()].filter(e=>e.is(`$textProxy`)).map(e=>e.data).reduce((e,t)=>e+t,``);e.model.change(t=>{e.model.deleteContent(t.createSelection(r.range))});let n=this.emojiPickerPlugin;n.showUI(t.slice(1)),setTimeout(()=>{n.emojiPickerView.focus()})}else e.execute(`insertText`,{text:r.mention.text,range:r.range})},{priority:`high`})}_queryEmojiCallbackFactory(){return e=>{if(e.startsWith(` `)||e.startsWith(`:`)||!this.emojiRepositoryPlugin.isRepositoryReady)return[];let t=this.emojiRepositoryPlugin.getEmojiByQuery(e).map(e=>{let t=e.skins[this._skinTone]||e.skins.default;return this.emojiPickerPlugin&&(t=e.skins[this.emojiPickerPlugin.skinTone]||e.skins.default),{id:`:${e.annotation}:`,text:t}});if(!this.emojiPickerPlugin)return t.slice(0,this._emojiDropdownLimit);let n={id:e.length>1?oF:sF};return[...t.slice(0,this._emojiDropdownLimit-1),n]}}},lF=class extends I{constructor(e){super(e);let t=e.plugins.get(`EmojiRepository`);this.listenTo(t,`change:isRepositoryReady`,()=>this.refresh())}refresh(){let e=this.editor,t=e.plugins.get(`EmojiRepository`),n=e.model,r=n.schema,i=n.document.selection;this.isEnabled=!!t.isRepositoryReady&&r.checkChild(i.getFirstPosition(),`$text`)}execute(e=``){this.editor.plugins.get(`EmojiPicker`).showUI(e)}},uF=class extends P{tiles;focusTracker;keystrokes;emojiCategories;cachedTiles;_getEmojiByQuery;constructor(e,{categoryName:t,emojiCategories:n,getEmojiByQuery:r,skinTone:i}){super(e),this.set(`isEmpty`,!0),this.set(`categoryName`,t),this.set(`skinTone`,i),this.tiles=this.createCollection(),this.cachedTiles=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this._getEmojiByQuery=r,this.emojiCategories=n;let a=this.bindTemplate;this.setTemplate({tag:`div`,children:[{tag:`div`,attributes:{role:`grid`,class:[`ck`,`ck-emoji__grid`]},children:this.tiles}],attributes:{role:`tabpanel`,class:[`ck`,`ck-emoji__tiles`,a.if(`isEmpty`,`ck-hidden`,e=>e)]}}),$a({keystrokeHandler:this.keystrokes,focusTracker:this.focusTracker,gridItems:this.tiles,numberOfColumns:()=>u.window.getComputedStyle(this.element.firstChild).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}render(){super.render(),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy(),this.focusTracker.destroy()}focus(){let e=this.tiles.first;e&&e.focus()}filter(e){let{matchingItems:t,allItems:n}=e?this._getItemsByQuery(e.source):this._getItemsByCategory();return this._updateGrid(t),this.set(`isEmpty`,t.length===0),{resultsCount:t.length,totalItemsCount:n.length}}_getItemsByQuery(e){return{matchingItems:this._getEmojiByQuery(e),allItems:this.emojiCategories.flatMap(e=>e.items)}}_getItemsByCategory(){let e=this.emojiCategories.find(e=>e.title===this.categoryName);if(!e)return{matchingItems:[],allItems:[]};let{items:t}=e;return{matchingItems:t,allItems:t}}_updateGrid(e){[...this.tiles].forEach(e=>{this.focusTracker.remove(e),this.tiles.remove(e)}),e.map(e=>{let t=e.skins[this.skinTone]||e.skins.default;return this.cachedTiles.get(t)||this._createTile(t,e.annotation)}).forEach(e=>{this.tiles.add(e),this.focusTracker.add(e)})}_createTile(e,t){let n=new H(this.locale);return n.viewUid=e,n.extendTemplate({attributes:{class:[`ck-emoji__tile`]}}),n.set({label:e,tooltip:t,withText:!0,ariaLabel:t,ariaLabelledBy:void 0}),n.on(`execute`,()=>{this.fire(`execute`,{name:t,emoji:e})}),this.cachedTiles.add(n),n}},dF=class extends P{focusTracker;keystrokes;focusCycler;buttonViews;constructor(e,{emojiCategories:t,categoryName:n}){super(e),this.buttonViews=this.createCollection(t.map(e=>this._createCategoryButton(e))),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.buttonViews,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`arrowleft`,focusNext:`arrowright`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__categories-list`],role:`tablist`},children:this.buttonViews}),this.on(`change:categoryName`,(e,t,n,r)=>{let i=this.buttonViews.find(e=>e.tooltip===r);i&&(i.isOn=!1);let a=this.buttonViews.find(e=>e.tooltip===n);a&&(a.isOn=!0)}),this.set(`categoryName`,n)}render(){super.render(),this.buttonViews.forEach(e=>{this.focusTracker.add(e)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),this.buttonViews.destroy()}focus(){this.buttonViews.first.focus()}setCategories(e){for(let e of this.buttonViews)this.focusTracker.remove(e),e.destroy();this.buttonViews.clear();for(let t of e){let e=this._createCategoryButton(t);this.buttonViews.add(e),this.isRendered&&this.focusTracker.add(e)}}enableCategories(){this.buttonViews.forEach(e=>{e.isEnabled=!0})}disableCategories(){this.buttonViews.forEach(e=>{e.set({class:``,isEnabled:!1,isOn:!1})})}_createCategoryButton(e){let t=new H,n=t.bindTemplate;return t.extendTemplate({attributes:{\"aria-selected\":n.to(`isOn`,e=>e.toString()),class:[`ck-emoji__category-item`]}}),t.set({ariaLabel:e.title,label:e.icon,role:`tab`,tooltip:e.title,withText:!0,ariaLabelledBy:void 0}),t.on(`execute`,()=>{this.categoryName=e.title}),t.on(`change:isEnabled`,()=>{t.isEnabled&&t.tooltip===this.categoryName&&(t.isOn=!0)}),t}},fF=class extends P{inputView;gridView;constructor(e,{gridView:t,resultsView:n}){super(e),this.gridView=t;let r=e.t;this.inputView=new JC(this.locale,{queryView:{label:r(`Find an emoji (min. 2 characters)`),creator:Jx},filteredView:this.gridView,infoView:{instance:n}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search`],tabindex:`-1`},children:[this.inputView.queryView]}),this.inputView.delegate(`search`).to(this)}destroy(){super.destroy(),this.inputView.destroy()}search(e){let t=e?new RegExp(Bn(e),`ig`):null,n=this.gridView.filter(t);this.inputView.fire(`search`,{query:e,...n})}setInputValue(e){e?this.inputView.queryView.fieldView.value=e:this.inputView.queryView.fieldView.reset()}getInputValue(){return this.inputView.queryView.fieldView.element.value}focus(){this.inputView.focus()}},pF=class extends P{dropdownView;_skinTones;constructor(e,{skinTone:t,skinTones:n}){super(e),this.set(`skinTone`,t),this._skinTones=n;let r=e.t,i=r(`Select skin tone`),a=Nx(e),o=new Fi;for(let{id:e,icon:t,tooltip:n}of this._skinTones){let r={type:`button`,model:new RC({value:e,label:t,ariaLabel:n,tooltip:n,tooltipPosition:`e`,role:`menuitemradio`,withText:!0,ariaLabelledBy:void 0})};r.model.bind(`isOn`).to(this,`skinTone`,t=>t===e),o.add(r)}Lx(a,o,{ariaLabel:i,role:`menu`}),a.buttonView.set({label:this._getSkinTone().icon,ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),this.dropdownView=a,this.listenTo(a,`execute`,e=>{this.skinTone=e.source.value}),a.buttonView.bind(`label`).to(this,`skinTone`,()=>this._getSkinTone().icon),a.buttonView.bind(`ariaLabel`).to(this,`skinTone`,()=>`${this._getSkinTone().tooltip}, ${i}`),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__skin-tone`]},children:[a]})}focus(){this.dropdownView.buttonView.focus()}_getSkinTone(){return this._skinTones.find(e=>e.id===this.skinTone)}},mF=class extends P{items;focusTracker;keystrokes;focusCycler;searchView;toneView;categoriesView;gridView;infoView;constructor(e,{emojiCategories:t,getEmojiByQuery:n,skinTone:r,skinTones:i}){super(e);let a=t[0]?.title??``;this.gridView=new uF(e,{categoryName:a,emojiCategories:t,getEmojiByQuery:n,skinTone:r}),this.infoView=new KC,this.searchView=new fF(e,{gridView:this.gridView,resultsView:this.infoView}),this.categoriesView=new dF(e,{emojiCategories:t,categoryName:a}),this.toneView=new pF(e,{skinTone:r,skinTones:i}),this.items=this.createCollection([this.searchView,this.toneView,this.categoriesView,this.gridView,this.infoView]),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,children:[{tag:`div`,children:[this.searchView,this.toneView],attributes:{class:[`ck`,`ck-emoji__search`]}},this.categoriesView,this.gridView,{tag:`div`,children:[this.infoView],attributes:{class:[`ck`,`ck-search__results`]}}],attributes:{tabindex:`-1`,class:[`ck`,`ck-emoji`,`ck-search`]}}),this._setupEventListeners()}render(){super.render(),this.focusTracker.add(this.searchView.element),this.focusTracker.add(this.toneView.element),this.focusTracker.add(this.categoriesView.element),this.focusTracker.add(this.gridView.element),this.focusTracker.add(this.infoView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.searchView.focus()}setCategories(e){let{emojiCategories:t}=this.gridView,n=e[0].title;t.splice(0,t.length,...e),this.categoriesView.setCategories(e),this.categoriesView.categoryName=n,this.gridView.categoryName=n,this.searchView.search(this.searchView.getInputValue())}_setupEventListeners(){let e=this.locale.t;this.searchView.on(`search`,(e,t)=>{t.query?this.categoriesView.disableCategories():this.categoriesView.enableCategories()}),this.searchView.on(`search`,(t,n)=>{this.categoriesView.buttonViews.length&&(n.query.length===1?this.infoView.set({primaryText:e(`Keep on typing to see the emoji.`),secondaryText:e(`The query must contain at least two characters.`),isVisible:!0}):n.resultsCount?this.infoView.set({isVisible:!1}):this.infoView.set({primaryText:e(`No emojis were found matching \"%0\".`,n.query),secondaryText:e(`Please try a different phrase or check the spelling.`),isVisible:!0}))}),this.searchView.on(`search`,()=>{this.fire(`update`),this.gridView.element.scrollTo(0,0)}),this.categoriesView.on(`change:categoryName`,(e,t,n)=>{this.gridView.categoryName=n,this.searchView.search(``)}),this.toneView.on(`change:skinTone`,(e,t,n)=>{this.gridView.skinTone=n,this.searchView.search(this.searchView.getInputValue())})}},hF=class extends P{backButtonView;focusTracker=new M;keystrokes=new N;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.children=this.createCollection([this._createHeaderView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-form`,`ck-emoji-picker-form`],tabindex:`-1`},children:this.children})}render(){super.render(),[...this.children.filter(Wy),this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element),Gy(e)&&this._focusCycler.chain(e.focusCycler)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Emoji picker`)});return t.children.add(this.backButtonView,0),t}};const gF=`emoji-picker`;var _F=class extends F{static get requires(){return[aF,BC,Qy,gT]}static get pluginName(){return`EmojiPicker`}static get isOfficialPlugin(){return!0}init(){let{editor:e}=this;this.balloonPlugin=e.plugins.get(`ContextualBalloon`),this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`);let t=new lF(e);e.commands.add(`emoji`,t),e.ui.componentFactory.add(`emoji`,()=>{let e=this._createButton(H,t);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:emoji`,()=>this._createButton(U,t)),this._setupConversion()}destroy(){super.destroy(),this.emojiPickerView&&this.emojiPickerView.destroy()}get skinTone(){return this.emojiPickerView?this.emojiPickerView.gridView.skinTone:this.editor.config.get(`emoji.skinTone`)}showUI(e=``){this._showFakeVisualSelection(),this.emojiPickerView||=this._createEmojiPickerView(),e&&this.emojiPickerView.searchView.setInputValue(e),this.emojiPickerView.searchView.search(e),this.emojiPickerFormView||=this._createEmojiPickerFormView(),this.balloonPlugin.hasView(this.emojiPickerFormView)||(this.emojiPickerFormView.backButtonView.isVisible=!!this.balloonPlugin.visibleView,this.balloonPlugin.add({view:this.emojiPickerFormView,position:this._getBalloonPositionData(),balloonClassName:`ck-emoji-picker-balloon`})),this.emojiPickerView.focus()}_createButton(e,t){let n=new e(this.editor.locale),r=this.editor.locale.t;return n.bind(`isEnabled`).to(t,`isEnabled`),n.set({label:r(`Emoji`),icon:x_,isToggleable:!0}),n.on(`execute`,()=>{this.editor.editing.view.scrollToTheSelection(),this.showUI()}),n}_createEmojiPickerView(){let e=[...this.emojiRepositoryPlugin.getEmojiCategories()],t=new mF(this.editor.locale,{emojiCategories:e,skinTone:this.editor.config.get(`emoji.skinTone`),skinTones:this.emojiRepositoryPlugin.getSkinTones(),getEmojiByQuery:e=>this.emojiRepositoryPlugin.getEmojiByQuery(e)});return this.emojiRepositoryPlugin.isRepositoryReady||this.emojiRepositoryPlugin.onReady(e=>{if(!e)return;let n=this.emojiRepositoryPlugin.getEmojiCategories();n.length&&t.setCategories(n)}),this.listenTo(t.gridView,`execute`,(e,t)=>{let n=this.editor,r=t.emoji;this._hideUI(),n.execute(`insertText`,{text:r})}),t}_createEmojiPickerFormView(){let e=new hF(this.editor.locale);return e.children.add(this.emojiPickerView),this.listenTo(this.emojiPickerView,`update`,()=>{this.balloonPlugin.visibleView===e&&this.balloonPlugin.updatePosition()}),this.listenTo(e,`cancel`,()=>{this._hideUI()}),e.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),Ya({emitter:e,contextElements:[this.balloonPlugin.view.element],callback:()=>{this._hideUI(!1)},activator:()=>this.balloonPlugin.visibleView===e}),e}_hideUI(e=!0){this.balloonPlugin.remove(this.emojiPickerFormView),this.emojiPickerView.searchView.setInputValue(``),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection()}_setupConversion(){let e=this.editor;e.conversion.for(`editingDowncast`).markerToHighlight({model:gF,view:{classes:[`ck-fake-emoji-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:gF,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-emoji-selection`,`ck-fake-emoji-selection_collapsed`],n),n}})}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;return{target:()=>e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(gF))t.updateMarker(gF,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(gF)&&e.change(e=>{e.removeMarker(gF)})}},tne=class extends F{static get requires(){return[cF,_F]}static get pluginName(){return`Emoji`}static get isOfficialPlugin(){return!0}},vF=class extends I{constructor(e){super(e),this.affectsData=!1}execute(){let e=this.editor.model,t=e.document.selection,n=e.schema.getLimitElement(t);if(t.containsEntireContent(n)||!yF(e.schema,n))do if(n=n.parent,!n)return;while(!yF(e.schema,n));e.change(e=>{e.setSelection(n,`in`)})}};function yF(e,t){return e.isLimit(t)&&(e.checkChild(t,`$text`)||e.checkChild(t,`paragraph`))}const nne=yi(`Ctrl+A`);var bF=class extends F{static get pluginName(){return`SelectAllEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.editing.view.document;e.commands.add(`selectAll`,new vF(e)),this.listenTo(n,`keydown`,(t,n)=>{vi(n)===nne&&(e.execute(`selectAll`),n.preventDefault())}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Select all`),keystroke:`CTRL+A`}]})}},xF=class extends F{static get pluginName(){return`SelectAllUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`selectAll`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:selectAll`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`selectAll`),i=new e(t.locale),a=n.t;return i.set({label:a(`Select all`),icon:ny,keystroke:`Ctrl+A`}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`selectAll`),t.editing.view.focus()}),i}},SF=class extends F{static get requires(){return[bF,xF]}static get pluginName(){return`SelectAll`}static get isOfficialPlugin(){return!0}},rne=class extends F{static get requires(){return[tb,PO,TE,SF,kE,gT,Ik]}static get pluginName(){return`Essentials`}static get isOfficialPlugin(){return!0}},CF=class extends P{children;_findInputView;_replaceInputView;_findButtonView;_findPrevButtonView;_findNextButtonView;_advancedOptionsCollapsibleView;_matchCaseSwitchView;_wholeWordsOnlySwitchView;_replaceButtonView;_replaceAllButtonView;_inputsDivView;_actionButtonsDivView;_focusTracker;_keystrokes;_focusables;focusCycler;constructor(e){super(e);let t=e.t;this.children=this.createCollection(),this.set(`matchCount`,0),this.set(`highlightOffset`,0),this.set(`isDirty`,!1),this.set(`_areCommandsEnabled`,{}),this.set(`_resultsCounterText`,``),this.set(`_matchCase`,!1),this.set(`_wholeWordsOnly`,!1),this.bind(`_searchResultsFound`).to(this,`matchCount`,this,`isDirty`,(e,t)=>e>0&&!t),this._findInputView=this._createInputField(t(`Find in text…`)),this._findPrevButtonView=this._createButton({label:t(`Previous result`),class:`ck-button-prev`,icon:Wv,keystroke:`Shift+F3`,tooltip:!0}),this._findNextButtonView=this._createButton({label:t(`Next result`),class:`ck-button-next`,icon:Wv,keystroke:`F3`,tooltip:!0}),this._replaceInputView=this._createInputField(t(`Replace with…`),`ck-labeled-field-replace`),this._inputsDivView=this._createInputsDiv(),this._matchCaseSwitchView=this._createMatchCaseSwitch(),this._wholeWordsOnlySwitchView=this._createWholeWordsOnlySwitch(),this._advancedOptionsCollapsibleView=this._createAdvancedOptionsCollapsible(),this._replaceAllButtonView=this._createButton({label:t(`Replace all`),class:`ck-button-replaceall`,withText:!0}),this._replaceButtonView=this._createButton({label:t(`Replace`),class:`ck-button-replace`,withText:!0}),this._findButtonView=this._createButton({label:t(`Find`),class:`ck-button-find ck-button-action`,withText:!0}),this._actionButtonsDivView=this._createActionButtonsDiv(),this._focusTracker=new M,this._keystrokes=new N,this._focusables=new pa,this.focusCycler=new Hy({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this._keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.children.addMany([this._inputsDivView,this._advancedOptionsCollapsibleView,this._actionButtonsDivView]),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-find-and-replace-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),this._initFocusCycling(),this._initKeystrokeHandling()}destroy(){super.destroy(),this._focusTracker.destroy(),this._keystrokes.destroy()}focus(e){e===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}reset(){this._findInputView.errorText=null,this.isDirty=!0}get _textToFind(){return this._findInputView.fieldView.element.value}get _textToReplace(){return this._replaceInputView.fieldView.element.value}_createInputsDiv(){let e=this.locale,t=e.t,n=new P(e);return this._findInputView.fieldView.on(`input`,()=>{this.isDirty=!0}),this._findPrevButtonView.delegate(`execute`).to(this,`findPrevious`),this._findNextButtonView.delegate(`execute`).to(this,`findNext`),this._findPrevButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findPrevious:e})=>e),this._findNextButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findNext:e})=>e),this._injectFindResultsCounter(),this._replaceInputView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceInputView.bind(`infoText`).to(this._replaceInputView,`isEnabled`,this._replaceInputView,`isFocused`,(e,n)=>e||!n?``:t(`Tip: Find some text first in order to replace it.`)),n.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__inputs`]},children:[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView]}),n}_onFindButtonExecute(){if(!this._textToFind){let e=this.t;this._findInputView.errorText=e(`Text to find must not be empty.`);return}this.isDirty=!1,this.fire(`findNext`,{searchText:this._textToFind,matchCase:this._matchCase,wholeWords:this._wholeWordsOnly})}_injectFindResultsCounter(){let e=this.locale,t=e.t,n=this.bindTemplate,r=new P(this.locale);this.bind(`_resultsCounterText`).to(this,`highlightOffset`,this,`matchCount`,(e,n)=>t(`%0 of %1`,[e,n])),r.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-results-counter`,n.if(`isDirty`,`ck-hidden`)]},children:[{text:n.to(`_resultsCounterText`)}]});let i=()=>{let t=this._findInputView.fieldView.element;if(!t||!Yr(t))return;let n=new O(r.element).width,i=e.uiLanguageDirection===`ltr`?`paddingRight`:`paddingLeft`;n?t.style[i]=`calc( 2 * var(--ck-spacing-standard) + ${n}px )`:t.style[i]=``};this.on(`change:_resultsCounterText`,i,{priority:`low`}),this.on(`change:isDirty`,i,{priority:`low`}),this._findInputView.template.children[0].children.push(r)}_createAdvancedOptionsCollapsible(){let e=this.locale.t,t=new xb(this.locale,[this._matchCaseSwitchView,this._wholeWordsOnlySwitchView]);return t.set({label:e(`Advanced options`),isCollapsed:!0}),t}_createActionButtonsDiv(){let e=new P(this.locale);return this._replaceButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceAllButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replaceAll:e},t)=>e&&t),this._replaceButtonView.on(`execute`,()=>{this.fire(`replace`,{searchText:this._textToFind,replaceText:this._textToReplace})}),this._replaceAllButtonView.on(`execute`,()=>{this.fire(`replaceAll`,{searchText:this._textToFind,replaceText:this._textToReplace}),this.focus()}),this._findButtonView.on(`execute`,this._onFindButtonExecute.bind(this)),e.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__actions`]},children:[this._replaceAllButtonView,this._replaceButtonView,this._findButtonView]}),e}_createMatchCaseSwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Match case`),withText:!0}),t.bind(`isOn`).to(this,`_matchCase`),t.on(`execute`,()=>{this._matchCase=!this._matchCase,this.isDirty=!0}),t}_createWholeWordsOnlySwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Whole words only`),withText:!0}),t.bind(`isOn`).to(this,`_wholeWordsOnly`),t.on(`execute`,()=>{this._wholeWordsOnly=!this._wholeWordsOnly,this.isDirty=!0}),t}_initFocusCycling(){[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView,this._advancedOptionsCollapsibleView.buttonView,this._matchCaseSwitchView,this._wholeWordsOnlySwitchView,this._replaceAllButtonView,this._replaceButtonView,this._findButtonView].forEach(e=>{this._focusables.add(e),this._focusTracker.add(e.element)})}_initKeystrokeHandling(){let e=e=>e.stopPropagation(),t=e=>{e.stopPropagation(),e.preventDefault()};this._keystrokes.listenTo(this.element),this._keystrokes.set(`f3`,e=>{t(e),this._findNextButtonView.fire(`execute`)}),this._keystrokes.set(`shift+f3`,e=>{t(e),this._findPrevButtonView.fire(`execute`)}),this._keystrokes.set(`enter`,e=>{let n=e.target;n===this._findInputView.fieldView.element?(this._areCommandsEnabled.findNext?this._findNextButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e)):n===this._replaceInputView.fieldView.element&&!this.isDirty&&(this._replaceButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`shift+enter`,e=>{e.target===this._findInputView.fieldView.element&&(this._areCommandsEnabled.findPrevious?this._findPrevButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`arrowright`,e),this._keystrokes.set(`arrowleft`,e),this._keystrokes.set(`arrowup`,e),this._keystrokes.set(`arrowdown`,e)}_createButton(e){let t=new H(this.locale);return t.set(e),t}_createInputField(e,t){let n=new Qb(this.locale,Jx);return n.label=e,n.class=t,n}},wF=class extends F{static get requires(){return[Qy]}static get pluginName(){return`FindAndReplaceUI`}static get isOfficialPlugin(){return!0}formView;constructor(e){super(e),e.config.define(`findAndReplace.uiType`,`dialog`),this.formView=null}init(){let e=this.editor,t=e.config.get(`findAndReplace.uiType`)===`dropdown`,n=e.commands.get(`find`),r=this.editor.t;e.ui.componentFactory.add(`findAndReplace`,()=>{let r;return t?(r=this._createDropdown(),r.bind(`isEnabled`).to(n)):r=this._createDialogButtonForToolbar(),e.keystrokes.set(`Ctrl+F`,(t,i)=>{if(n.isEnabled){if(r instanceof sx){let e=r.buttonView;e.isOn||e.fire(`execute`)}else r.isOn?e.plugins.get(`Dialog`).view.focus():r.fire(`execute`);i()}}),r}),t||e.ui.componentFactory.add(`menuBar:findAndReplace`,()=>this._createDialogButtonForMenuBar()),e.accessibility.addKeystrokeInfos({keystrokes:[{label:r(`Find in the document`),keystroke:`CTRL+F`}]})}_createDropdown(){let e=this.editor,t=e.locale.t,n=Nx(e.locale);return n.once(`change:isOpen`,()=>{this.formView=this._createFormView(),this.formView.children.add(new By(e.locale,{label:t(`Find and replace`)}),0),n.panelView.children.add(this.formView)}),n.on(`change:isOpen`,(e,t,n)=>{n?this._setupFormView():this.fire(`searchReseted`)},{priority:`low`}),n.buttonView.set({icon:C_,label:t(`Find and replace`),keystroke:`CTRL+F`,tooltip:!0}),n}_createDialogButtonForToolbar(){let e=this.editor,t=this._createButton(H),n=e.plugins.get(`Dialog`);return t.set({tooltip:!0}),t.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),t.on(`execute`,()=>{t.isOn?n.hide():this._showDialog()}),t}_createDialogButtonForMenuBar(){let e=this._createButton(U),t=this.editor.plugins.get(`Dialog`),n=this.editor.plugins.get(`Dialog`);return e.set({role:`menuitemcheckbox`,isToggleable:!0}),e.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),e.on(`execute`,()=>{if(t.id===`findAndReplace`){t.hide();return}this._showDialog()}),e}_createButton(e){let t=this.editor,n=t.commands.get(`find`),r=new e(t.locale),i=t.locale.t;return r.bind(`isEnabled`).to(n),r.set({icon:C_,label:i(`Find and replace`),keystroke:`CTRL+F`}),r}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.locale.t;this.formView||=this._createFormView(),t.show({id:`findAndReplace`,title:n(`Find and replace`),content:this.formView,position:Jy.EDITOR_TOP_SIDE,onShow:()=>{this._setupFormView()},onHide:()=>{this.fire(`searchReseted`)}})}_createFormView(){let e=this.editor,t=new(Xa(CF))(e.locale),n=e.commands,r=this.editor.plugins.get(`FindAndReplaceEditing`).state;t.bind(`highlightOffset`).to(r,`highlightedOffset`),t.listenTo(r.results,`change`,()=>{t.matchCount=r.results.length});let i=n.get(`findNext`),a=n.get(`findPrevious`),o=n.get(`replace`),s=n.get(`replaceAll`);return t.bind(`_areCommandsEnabled`).to(i,`isEnabled`,a,`isEnabled`,o,`isEnabled`,s,`isEnabled`,(e,t,n,r)=>({findNext:e,findPrevious:t,replace:n,replaceAll:r})),t.delegate(`findNext`,`findPrevious`,`replace`,`replaceAll`).to(this),t.on(`change:isDirty`,(e,t,n)=>{n&&this.fire(`searchReseted`)}),t}_setupFormView(){this.formView.disableCssTransitions(),this.formView.reset(),this.formView._findInputView.fieldView.select(),this.formView.enableCssTransitions()}},TF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this.affectsData=!1,this._state=t}execute(e,{matchCase:t,wholeWords:n}={}){let{editor:r}=this,{model:i}=r,a=r.plugins.get(`FindAndReplaceUtils`),o,s=``;o=typeof e==`string`?(...r)=>({results:a.findByTextCallback(e,{matchCase:t,wholeWords:n})(...r),searchText:e}):e;let c=o;o=(...e)=>{let t=c(...e);return t&&`searchText`in t&&(s=t.searchText),t};let l=i.document.getRootNames().reduce(((e,t)=>a.updateFindResultFromRange(i.createRangeIn(i.document.getRoot(t)),i,o,e)),null);return this._state.clear(i),this._state.results.addMany(l),this._state.highlightedResult=l.get(0),this._state.searchText=s,o&&(this._state.lastSearchCallback=o),this._state.matchCase=!!t,this._state.matchWholeWords=!!n,{results:l,findCallback:o}}};const ine=D();var EF=class extends ine{constructor(e){super(),this.set(`results`,new Fi),this.set(`highlightedResult`,null),this.set(`highlightedOffset`,0),this.set(`searchText`,``),this.set(`replaceText`,``),this.set(`lastSearchCallback`,null),this.set(`matchCase`,!1),this.set(`matchWholeWords`,!1),this.results.on(`change`,(t,{removed:n,index:r})=>{if(Array.from(n).length){let t=!1;if(e.change(r=>{for(let i of n)this.highlightedResult===i&&(t=!0),e.markers.has(i.marker.name)&&r.removeMarker(i.marker)}),t){let e=r>=this.results.length?0:r;this.highlightedResult=this.results.get(e)}}}),this.on(`change:highlightedResult`,()=>{this.refreshHighlightOffset(e)})}clear(e){this.searchText=``,e.change(t=>{if(this.highlightedResult){let n=this.highlightedResult.marker.name.split(`:`)[1],r=e.markers.get(`findResultHighlighted:${n}`);r&&t.removeMarker(r)}[...this.results].forEach(({marker:e})=>{t.removeMarker(e)})}),this.results.clear()}refreshHighlightOffset(e){let{highlightedResult:t,results:n}=this;t?this.highlightedOffset=DF(e,[...n]).indexOf(t)+1:this.highlightedOffset=0}};function DF(e,t){let n={before:-1,same:0,after:1,different:1};return e.document.getRootNames().flatMap(e=>t.filter(t=>t.marker.getStart().root.rootName===e).sort((e,t)=>n[e.marker.getStart().compareWith(t.marker.getStart())]))}var OF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this._state=t,this._isEnabledBasedOnSelection=!1}_replace(e,t){let{model:n}=this.editor,r=t.marker.getRange();n.canEditAt(r)&&n.change(i=>{if(r.root.rootName===`$graveyard`){this._state.results.remove(t);return}let a={};for(let e of r.getItems())if(e.is(`$text`)||e.is(`$textProxy`)){a=e.getAttributes();break}n.insertContent(i.createText(e,a),r),this._state.results.has(t)&&this._state.results.remove(t)})}},kF=class extends OF{execute(e,t){let n=Math.max(this._state.highlightedOffset-1,0);if(this._replace(e,t),this._state.results.length){let e=DF(this.editor.model,[...this._state.results]);this._state.highlightedResult=e[n%e.length]}}},AF=class extends OF{execute(e,t){let{editor:n}=this,{model:r}=n,i=n.plugins.get(`FindAndReplaceUtils`),a=t instanceof Fi?t:r.document.getRootNames().reduce(((e,n)=>i.updateFindResultFromRange(r.createRangeIn(r.document.getRoot(n)),r,i.findByTextCallback(t,this._state),e)),null);a.length&&r.change(()=>{[...a].forEach(t=>{this._replace(e,t)})})}},jF=class extends I{_state;constructor(e,t){super(e),this.affectsData=!1,this._state=t,this.isEnabled=!1,this.listenTo(this._state.results,`change`,()=>{this.isEnabled=this._state.results.length>1})}refresh(){this.isEnabled=this._state.results.length>1}execute(){let e=this._state.results,t=e.getIndex(this._state.highlightedResult),n=t+1>=e.length?0:t+1;this._state.highlightedResult=this._state.results.get(n)}},MF=class extends jF{execute(){let e=this._state.results.getIndex(this._state.highlightedResult),t=e-1<0?this._state.results.length-1:e-1;this._state.highlightedResult=this._state.results.get(t)}},NF=class extends F{static get pluginName(){return`FindAndReplaceUtils`}static get isOfficialPlugin(){return!0}updateFindResultFromRange(e,t,n,r){let i=r||new Fi,a=e=>i.find(t=>{let{marker:n}=t,r=n.getRange(),i=e.getRange();return r.isEqual(i)});return t.change(r=>{[...e].forEach(({type:e,item:o})=>{if(e===`elementStart`&&t.schema.checkChild(o,`$text`)){let e=n({item:o,text:this.rangeToText(t.createRangeIn(o))});if(!e)return;`results`in e&&(e=e.results),e.forEach(e=>{let t=`findResult:${he()}`,n=r.addMarker(t,{usingOperation:!1,affectsData:!1,range:r.createRange(r.createPositionAt(o,e.start),r.createPositionAt(o,e.end))}),s=ane(i,n);a(n)||i.add({id:t,label:e.label,marker:n},s)})}})}),i}rangeToText(e){return Array.from(e.getItems({shallow:!0})).reduce((e,t)=>t.is(`$text`)||t.is(`$textProxy`)?e+t.data:`${e}\\n`,``)}findByTextCallback(e,t){let n=`gu`;t.matchCase||(n+=`i`);let r=`(${Bn(e)})`;if(t.wholeWords){let t=`[^a-zA-ZÀ-ɏḀ-ỿ]`;RegExp(`^[^a-zA-ZÀ-ɏḀ-ỿ]`).test(e)||(r=`(^|${t}|_)${r}`),RegExp(`[^a-zA-ZÀ-ɏḀ-ỿ]$`).test(e)||(r=`${r}(?=_|${t}|$)`)}let i=new RegExp(r,n);function a({text:e}){return[...e.matchAll(i)].map(one)}return a}};function ane(e,t){let n=e.find(({marker:e})=>t.getStart().isBefore(e.getStart()));return n?e.getIndex(n):e.length}function one(e){let t=e.length-1,n=e.index;return e.length===3&&(n+=e[1].length),{label:e[t],start:n,end:n+e[t].length}}var PF=class extends F{static get requires(){return[NF]}static get pluginName(){return`FindAndReplaceEditing`}static get licenseFeatureCode(){return`FAR`}static get isPremiumPlugin(){return!0}static get isOfficialPlugin(){return!0}state;init(){this.state=new EF(this.editor.model),this.set(`_isSearchActive`,!1),this._defineConverters(),this._defineCommands(),this.listenTo(this.state,`change:highlightedResult`,(e,t,n,r)=>{let{model:i}=this.editor;i.change(e=>{if(r){let t=r.marker.name.split(`:`)[1],n=i.markers.get(`findResultHighlighted:${t}`);n&&e.removeMarker(n)}if(n){let t=n.marker.name.split(`:`)[1];e.addMarker(`findResultHighlighted:${t}`,{usingOperation:!1,affectsData:!1,range:n.marker.getRange()})}})});let e=Kt(((e,t,n)=>{if(n){let e=this.editor.editing.view.domConverter,t=this.editor.editing.mapper.toViewRange(n.marker.getRange());ni({target:e.viewRangeToDom(t),viewportOffset:40})}}).bind(this),32);this.listenTo(this.state,`change:highlightedResult`,e,{priority:`low`}),this.listenTo(this.editor,`destroy`,e.cancel),this.on(`change:_isSearchActive`,(e,t,n)=>{n?this.listenTo(this.editor.model.document,`change:data`,this._onDocumentChange):this.stopListening(this.editor.model.document,`change:data`,this._onDocumentChange)})}find(e,t){return this._isSearchActive=!0,this.editor.execute(`find`,e,t),this.state.results}stop(){this.state.clear(this.editor.model),this._isSearchActive=!1}_defineCommands(){this.editor.commands.add(`find`,new TF(this.editor,this.state)),this.editor.commands.add(`findNext`,new jF(this.editor,this.state)),this.editor.commands.add(`findPrevious`,new MF(this.editor,this.state)),this.editor.commands.add(`replace`,new kF(this.editor,this.state)),this.editor.commands.add(`replaceAll`,new AF(this.editor,this.state))}_defineConverters(){let{editor:e}=this;e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResult`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result`],attributes:{\"data-find-result\":t}}}}),e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResultHighlighted`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result_selected`],attributes:{\"data-find-result\":t}}}})}_onDocumentChange=()=>{let e=new Set,t=new Set,n=this.editor.model,{results:r}=this.state,i=n.document.differ.getChanges(),a=n.document.differ.getChangedMarkers();i.forEach(r=>{r.position&&(r.name===`$text`||r.position.nodeAfter&&n.schema.isInline(r.position.nodeAfter)?(e.add(r.position.parent),[...n.markers.getMarkersAtPosition(r.position)].forEach(e=>{t.add(e.name)})):r.type===`insert`&&r.position.nodeAfter&&e.add(r.position.nodeAfter))}),a.forEach(({name:e,data:{newRange:n}})=>{n&&n.start.root.rootName===`$graveyard`&&t.add(e)}),e.forEach(e=>{[...n.markers.getMarkersIntersectingRange(n.createRangeIn(e))].forEach(e=>t.add(e.name))}),t.forEach(e=>{r.has(e)&&(r.get(e)===this.state.highlightedResult&&(this.state.highlightedResult=null),r.remove(e))});let o=[],s=this.editor.plugins.get(`FindAndReplaceUtils`);e.forEach(e=>{let t=s.updateFindResultFromRange(n.createRangeOn(e),n,this.state.lastSearchCallback,r);o.push(...t)}),a.forEach(e=>{if(e.data.newRange){let t=s.updateFindResultFromRange(e.data.newRange,n,this.state.lastSearchCallback,r);o.push(...t)}}),!this.state.highlightedResult&&o.length?this.state.highlightedResult=o[0]:this.state.refreshHighlightOffset(n)}},sne=class extends F{static get requires(){return[PF,wF]}static get pluginName(){return`FindAndReplace`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(`FindAndReplaceUI`),t=this.editor.plugins.get(`FindAndReplaceEditing`),n=t.state;e.on(`findNext`,(e,r)=>{r?(n.searchText=r.searchText,t.find(r.searchText,r)):this.editor.execute(`findNext`)}),e.on(`findPrevious`,(e,r)=>{r&&n.searchText!==r.searchText?t.find(r.searchText):this.editor.execute(`findPrevious`)}),e.on(`replace`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText);let i=n.highlightedResult;i&&this.editor.execute(`replace`,r.replaceText,i)}),e.on(`replaceAll`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText),this.editor.execute(`replaceAll`,r.replaceText,n.results)}),e.on(`searchReseted`,()=>{n.clear(this.editor.model),t.stop()})}},FF=class extends I{attributeKey;constructor(e,t){super(e),this.attributeKey=t}refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(this.attributeKey),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value,i=e.batch,a=e=>{if(n.isCollapsed)r?e.setSelectionAttribute(this.attributeKey,r):e.removeSelectionAttribute(this.attributeKey);else{let i=t.schema.getValidRanges(n.getRanges(),this.attributeKey,{includeEmptyRanges:!0});for(let t of i){let n=t,i=this.attributeKey;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(this.attributeKey)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}};i?t.enqueueChange(i,e=>{a(e)}):t.change(e=>{a(e)})}};const IF=`fontSize`,LF=`fontFamily`,RF=`fontColor`,zF=`fontBackgroundColor`;function BF(e,t){let n={model:{key:e,values:[]},view:{},upcastAlso:{}};for(let e of t)n.model.values.push(e.model),n.view[e.model]=e.view,e.upcastAlso&&(n.upcastAlso[e.model]=e.upcastAlso);return n}function VF(e){return t=>cne(t.getStyle(e))}function HF(e){return(t,{writer:n})=>n.createAttributeElement(`span`,{style:`${e}:${t}`},{priority:7})}function UF({dropdownView:e,colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s}){let c=e.locale,l=new GS(c,{colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s});return e.colorSelectorView=l,e.panelView.children.add(l),l}function cne(e){return e.replace(/\\s/g,``)}var WF=class extends FF{constructor(e){super(e,LF)}};function GF(e){return e.map(lne).filter(e=>e!==void 0)}function KF(e){return e.replace(/[\"']/g,``).split(`,`).map(e=>e.trim())}function lne(e){if(typeof e==`object`)return e;if(e===\"default\")return{title:`Default`,model:void 0};if(typeof e==`string`)return une(e)}function une(e){let t=KF(e),n=t[0],r=t.map(dne).join(`, `);return{title:n,model:r,view:{name:`span`,styles:{\"font-family\":r},priority:7}}}function dne(e){return e=e.trim(),e.indexOf(` `)>0&&(e=`'${e}'`),e}var qF=class extends F{static get pluginName(){return`FontFamilyEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(LF,{options:[`default`,`Arial, Helvetica, sans-serif`,`Courier New, Courier, monospace`,`Georgia, serif`,`Lucida Sans Unicode, Lucida Grande, sans-serif`,`Tahoma, Geneva, sans-serif`,`Times New Roman, Times, serif`,`Trebuchet MS, Helvetica, sans-serif`,`Verdana, Geneva, sans-serif`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:LF}),e.model.schema.setAttributeProperties(LF,{isFormatting:!0,copyOnEnter:!0});let t=BF(LF,GF(e.config.get(`fontFamily.options`)).filter(e=>e.model));e.config.get(`fontFamily.supportAllValues`)?(this._prepareAnyValueConverters(),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(t),e.commands.add(LF,new WF(e))}_prepareAnyValueConverters(){let e=this.editor;e.conversion.for(`downcast`).attributeToElement({model:LF,view:(e,{writer:t})=>t.createAttributeElement(`span`,{style:`font-family:`+e},{priority:7})}),e.conversion.for(`upcast`).elementToAttribute({model:{key:LF,value:e=>e.getStyle(`font-family`)},view:{name:`span`,styles:{\"font-family\":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{face:/.*/}},model:{key:LF,value:e=>e.getAttribute(`face`)}})}},JF=class extends F{static get pluginName(){return`FontFamilyUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(LF),i=t(`Font Family`),a=fne(n,r);e.ui.componentFactory.add(LF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:E_,tooltip:!0}),n.extendTemplate({attributes:{class:`ck-font-family-dropdown`}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${LF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:E_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t;return GF(e.config.get(LF).options).map(e=>(e.title===`Default`&&(e.title=t(`Default`)),e))}};function fne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:LF,commandParam:r.model,label:r.title,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,e=>e===r.model?!0:!e||!r.model?!1:KF(e)[0].toLowerCase()===KF(r.model)[0].toLowerCase()),r.view&&typeof r.view!=`string`&&r.view.styles&&e.model.set(`labelStyle`,`font-family: ${r.view.styles[`font-family`]}`),n.add(e)}return n}var YF=class extends F{static get requires(){return[qF,JF]}static get pluginName(){return`FontFamily`}static get isOfficialPlugin(){return!0}},XF=class extends FF{constructor(e){super(e,IF)}};function ZF(e){return e.map(e=>pne(e)).filter(e=>e!==void 0)}const QF={get tiny(){return{title:`Tiny`,model:`tiny`,view:{name:`span`,classes:`text-tiny`,priority:7}}},get small(){return{title:`Small`,model:`small`,view:{name:`span`,classes:`text-small`,priority:7}}},get big(){return{title:`Big`,model:`big`,view:{name:`span`,classes:`text-big`,priority:7}}},get huge(){return{title:`Huge`,model:`huge`,view:{name:`span`,classes:`text-huge`,priority:7}}}};function pne(e){if(typeof e==`number`&&(e=String(e)),typeof e==`object`&&gne(e))return $F(e);let t=hne(e);if(t)return $F(t);if(e===\"default\")return{model:void 0,title:`Default`};if(!_ne(e))return mne(e)}function mne(e){return typeof e==`string`&&(e={title:e,model:`${parseFloat(e)}px`}),e.view={name:`span`,styles:{\"font-size\":e.model}},$F(e)}function $F(e){return e.view&&typeof e.view!=`string`&&!e.view.priority&&(e.view.priority=7),e}function hne(e){return typeof e==`string`?QF[e]:QF[e.model]}function gne(e){return e.title&&e.model&&e.view}function _ne(e){let t;if(typeof e==`object`)if(e.model)t=parseFloat(e.model);else throw new w(`font-size-invalid-definition`,null,e);else t=parseFloat(e);return isNaN(t)}const eI=[`x-small`,`x-small`,`small`,`medium`,`large`,`x-large`,`xx-large`,`xxx-large`];var tI=class extends F{static get pluginName(){return`FontSizeEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(IF,{options:[`tiny`,`small`,`default`,`big`,`huge`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:IF}),e.model.schema.setAttributeProperties(IF,{isFormatting:!0,copyOnEnter:!0});let t=e.config.get(`fontSize.supportAllValues`),n=BF(IF,ZF(this.editor.config.get(`fontSize.options`)).filter(e=>e.model));t?(this._prepareAnyValueConverters(n),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(n),e.commands.add(IF,new XF(e))}_prepareAnyValueConverters(e){let t=this.editor,n=e.model.values.filter(e=>!Gp(String(e))&&!qp(String(e)));if(n.length)throw new w(`font-size-invalid-use-of-named-presets`,null,{presets:n});t.conversion.for(`downcast`).attributeToElement({model:IF,view:(e,{writer:t})=>{if(e)return t.createAttributeElement(`span`,{style:`font-size:`+e},{priority:7})}}),t.conversion.for(`upcast`).elementToAttribute({model:{key:IF,value:e=>e.getStyle(`font-size`)},view:{name:`span`,styles:{\"font-size\":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{size:/^[+-]?\\d{1,3}$/}},model:{key:IF,value:e=>{let t=e.getAttribute(`size`),n=t[0]===`-`||t[0]===`+`,r=parseInt(t,10);n&&(r=3+r);let i=eI.length-1;return eI[Math.min(Math.max(r,0),i)]}}})}},nI=class extends F{static get pluginName(){return`FontSizeUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(IF),i=t(`Font Size`),a=vne(n,r);e.ui.componentFactory.add(IF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:D_,tooltip:!0}),n.extendTemplate({attributes:{class:[`ck-font-size-dropdown`]}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${IF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:D_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t,n={Default:t(`Default`),Tiny:t(`Tiny`),Small:t(`Small`),Big:t(`Big`),Huge:t(`Huge`)};return ZF(e.config.get(IF).options).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e=Object.assign({},e,{title:t})),e})}};function vne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:IF,commandParam:r.model,label:r.title,class:`ck-fontsize-option`,role:`menuitemradio`,withText:!0})};r.view&&typeof r.view!=`string`&&(r.view.styles&&e.model.set(`labelStyle`,`font-size:${r.view.styles[`font-size`]}`),r.view.classes&&e.model.set(`class`,`${e.model.class} ${r.view.classes}`)),e.model.bind(`isOn`).to(t,`value`,e=>e===r.model),n.add(e)}return n}var rI=class extends F{static get requires(){return[tI,nI]}static get pluginName(){return`FontSize`}static get isOfficialPlugin(){return!0}normalizeSizeOptions(e){return ZF(e)}},iI=class extends FF{constructor(e){super(e,RF)}},aI=class extends F{static get pluginName(){return`FontColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(RF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{color:/[\\s\\S]+/}},model:{key:RF,value:VF(`color`)}}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{color:/^#?\\w+$/}},model:{key:RF,value:e=>e.getAttribute(`color`)}}),e.conversion.for(`downcast`).attributeToElement({model:RF,view:HF(`color`)}),e.commands.add(RF,new iI(e)),e.model.schema.extend(`$text`,{allowAttributes:RF}),e.model.schema.setAttributeProperties(RF,{isFormatting:!0,copyOnEnter:!0})}},oI=class extends F{commandName;componentName;icon;dropdownLabel;columns;constructor(e,{commandName:t,componentName:n,icon:r,dropdownLabel:i}){super(e),this.commandName=t,this.componentName=n,this.icon=r,this.dropdownLabel=i,this.columns=e.config.get(`${this.componentName}.columns`)}init(){let e=this.editor,t=e.locale,n=t.t,r=e.commands.get(this.commandName),i=e.config.get(this.componentName),a=Sb(t,Cb(i.colors)),o=i.documentColors,s=i.colorPicker!==!1;e.ui.componentFactory.add(this.componentName,t=>{let c=Nx(t),l=!1,u=UF({dropdownView:c,colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:s?i.colorPicker||{}:!1});return u.bind(`selectedColor`).to(r,`value`),c.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:!0}),c.extendTemplate({attributes:{class:`ck-color-ui-dropdown`}}),c.bind(`isEnabled`).to(r),u.on(`execute`,(t,n)=>{c.isOpen&&e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),n.source!==`colorPicker`&&e.editing.view.focus(),n.source===`colorPickerSaveButton`&&(c.isOpen=!1)}),u.on(`colorPicker:show`,()=>{this._undoStepBatch=e.model.createBatch()}),u.on(`colorPicker:cancel`,()=>{this._undoStepBatch.operations.length&&(c.isOpen=!1,e.execute(`undo`,this._undoStepBatch)),e.editing.view.focus()}),c.on(`change:isOpen`,(t,n,r)=>{l||(l=!0,c.colorSelectorView.appendUI()),r&&(o!==0&&u.updateDocumentColors(e.model,this.componentName),u.updateSelectedColors(),u.showColorGridsFragment())}),zx(c,()=>c.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find(e=>e.isOn)),c}),e.ui.componentFactory.add(`menuBar:${this.componentName}`,t=>{let i=new uw(t);i.buttonView.set({label:this.dropdownLabel,icon:this.icon}),i.bind(`isEnabled`).to(r);let s=!1,c=new GS(t,{colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:!1});return c.bind(`selectedColor`).to(r,`value`),c.delegate(`execute`).to(i),c.on(`execute`,(t,n)=>{e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),e.editing.view.focus()}),i.on(`change:isOpen`,(t,n,r)=>{s||(s=!0,c.appendUI()),r&&(o!==0&&c.updateDocumentColors(e.model,this.componentName),c.updateSelectedColors(),c.showColorGridsFragment())}),i.panelView.children.add(c),i})}},sI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:RF,componentName:RF,icon:T_,dropdownLabel:t(`Font Color`)})}static get pluginName(){return`FontColorUI`}},cI=class extends F{static get requires(){return[aI,sI]}static get pluginName(){return`FontColor`}static get isOfficialPlugin(){return!0}},lI=class extends FF{constructor(e){super(e,zF)}},uI=class extends F{static get pluginName(){return`FontBackgroundColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(zF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.data.addStyleProcessorRules(hm),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{\"background-color\":/[\\s\\S]+/}},model:{key:zF,value:VF(`background-color`)}}),e.conversion.for(`downcast`).attributeToElement({model:zF,view:HF(`background-color`)}),e.commands.add(zF,new lI(e)),e.model.schema.extend(`$text`,{allowAttributes:zF}),e.model.schema.setAttributeProperties(zF,{isFormatting:!0,copyOnEnter:!0})}},dI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:zF,componentName:zF,icon:w_,dropdownLabel:t(`Font Background Color`)})}static get pluginName(){return`FontBackgroundColorUI`}},fI=class extends F{static get requires(){return[uI,dI]}static get pluginName(){return`FontBackgroundColor`}static get isOfficialPlugin(){return!0}},yne=class extends F{static get requires(){return[YF,rI,cI,fI]}static get pluginName(){return`Font`}static get isOfficialPlugin(){return!0}},pI=class{_placeholderMap;_wrapper=null;_document;_annotationsUIsData=null;_paginationBodyCollection=null;_hasLeftCollapseButton=!1;_collapseLeftSidebarButton=null;_resizeObserver=null;_sidebarsWidths={left:0,right:0};_keepLeftSidebarHidden=!1;_forceShowLeftSidebar=!1;_sourceEditingCallback=(e,t,n)=>{this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=n?`none`:``};_hiddenElements=new Map;_savedAncestorsScrollPositions=new Map;_showRevisionViewerCallback=null;_closeRevisionViewerCallback=null;_aiTabsData=null;constructor(e){this._placeholderMap=new Map,e.plugins.has(`RevisionHistory`)&&(this._showRevisionViewerCallback=e.config.get(`revisionHistory`).showRevisionViewerCallback,this._closeRevisionViewerCallback=e.config.get(`revisionHistory`).closeRevisionViewerCallback),this._editor=e,this._document=this._editor.sourceElement?this._editor.sourceElement.ownerDocument:u.document,this._editor.config.define(`fullscreen.container`,this._document.body),e.on(`destroy`,()=>{this._wrapper&&this.destroy(),this._resizeObserver&&this._resizeObserver.destroy()})}moveToFullscreen(e,t){let n=mr(this._document,`div`);n.setAttribute(`data-ck-fullscreen-placeholder`,t),e.replaceWith(n),this.getWrapper().querySelector(`[data-ck-fullscreen=\"${t}\"]`).append(e),this._placeholderMap.set(t,{placeholderElement:n,movedElement:e})}restoreMovedElementLocation(e){if(!this._placeholderMap.has(e))return;let{placeholderElement:t,movedElement:n}=this._placeholderMap.get(e);t.replaceWith(n),t.remove(),this._placeholderMap.delete(e),this._placeholderMap.size===0&&this._destroyContainer()}getWrapper(){return this._wrapper||(this._wrapper=mr(this._document,`div`,{class:`ck ck-fullscreen__main-wrapper`}),this._wrapper.innerHTML=`\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t`,this._editor.config.get(`fullscreen.container`).appendChild(this._wrapper)),this._wrapper}enable(){if(this._saveAncestorsScrollPositions(this._editor.ui.getEditableElement()),this.defaultOnEnter(),this._editor.config.get(`fullscreen.container`)===this._document.body&&(this._document.body.classList.add(`ck-fullscreen`),this._document.body.parentElement.classList.add(`ck-fullscreen`)),this._editor.plugins.has(`PresenceListUI`)&&this._generatePresenceListContainer(),this._editor.plugins.has(`DocumentOutlineUI`)&&this._generateDocumentOutlineContainer(),this._hasLeftCollapseButton&&this._generateCollapseButton(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),this._paginationBodyCollection=new nb(this._editor.locale),this._paginationBodyCollection.attachToDom(),e.linesRepository.setViewCollection(this._paginationBodyCollection),this._editor.once(`destroy`,()=>{this._paginationBodyCollection.detachFromDom()}),this.moveToFullscreen(this._paginationBodyCollection.bodyCollectionContainer,`body-wrapper`)}this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&(this._editor.plugins.get(`RevisionHistory`).isRevisionViewerOpen&&this._editor.config.get(`revisionHistory.closeRevisionViewerCallback`)(),this._overrideRevisionHistoryCallbacks()),this._editor.plugins.has(`AITabs`)&&this._handleAITabsTransfer(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).on(`change:isSourceEditingMode`,this._sourceEditingCallback),this._editor.plugins.has(`Dialog`)&&this._registerFullscreenDialogPositionAdjustments();for(let e of this._editor.config.get(`fullscreen.container`).children)e!==this._wrapper&&!e.classList.contains(`ck-body-wrapper`)&&!e.classList.contains(`ckbox-wrapper`)&&e.style.display!==`none`&&(this._hiddenElements.set(e,e.style.display),e.style.display=`none`);this._sidebarsWidths={left:this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).scrollWidth,right:this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).scrollWidth},this._adjustVisibleElements(),this._setupResizeObserver(),this._editor.config.get(`fullscreen.onEnterCallback`)&&this._editor.config.get(`fullscreen.onEnterCallback`)(this.getWrapper())}disable(){this._editor.config.get(`fullscreen.onLeaveCallback`)&&this._editor.config.get(`fullscreen.onLeaveCallback`)(this.getWrapper()),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`),this._editor.plugins.has(`DocumentOutlineUI`)&&this._restoreDocumentOutlineDefaultContainer(),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&this._restoreRevisionHistoryCallbacks(),this._editor.plugins.has(`AITabs`)&&this._restoreAITabs(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).off(`change:isSourceEditingMode`,this._sourceEditingCallback);for(let e of this._placeholderMap.keys())this.restoreMovedElementLocation(e);this._destroyContainer(),this._editor.ui.view.toolbar&&this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`);for(let[e,t]of this._savedAncestorsScrollPositions)e.scrollTo({left:t.scrollLeft,top:t.scrollTop,behavior:`instant`});if(this._savedAncestorsScrollPositions.clear(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),e.linesRepository.setViewCollection(this._editor.ui.view.body),this._paginationBodyCollection.detachFromDom(),this._paginationBodyCollection?.destroy()}this._editor.plugins.has(`Dialog`)&&this._unregisterFullscreenDialogPositionAdjustments(),this._keepLeftSidebarHidden=!1,this._resizeObserver?.destroy()}destroy(){for(let{placeholderElement:e,movedElement:t}of this._placeholderMap.values())e.remove(),t.remove();this._destroyContainer(),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`)}defaultOnEnter(){return this.getWrapper()}_destroyContainer(){if(this._wrapper){this._wrapper.remove(),this._wrapper=null;for(let[e,t]of this._hiddenElements)e.style.display=t;this._hiddenElements.clear()}}_generatePresenceListContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item`});t.innerHTML=`\n\t\t\t
    \n\t\t\t
    \n\t\t`,t.firstElementChild.innerText=e(`Connected users`),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`)||document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,\"data-ck-fullscreen\":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`).appendChild(t);let n=this._editor.plugins.get(`PresenceListUI`);this.moveToFullscreen(n.view.element,`presence-list`),this._hasLeftCollapseButton=!0}_generateDocumentOutlineContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck-fullscreen__left-sidebar-item ck-fullscreen__left-sidebar-item--no-margin`});t.innerHTML=`\n\t\t\t
    \n\t\t`,t.firstElementChild.innerText=e(`Document outline`);let n=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item ck-fullscreen__document-outline-wrapper`});n.innerHTML=`\n\t\t\t
    \n\t\t`,document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`)||document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,\"data-ck-fullscreen\":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(n),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`).appendChild(t);let r=this._editor.plugins.get(`DocumentOutlineUI`);r.view.documentOutlineContainer=document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`),this.moveToFullscreen(r.view.element,`document-outline`),this._hasLeftCollapseButton=!0}_restoreDocumentOutlineDefaultContainer(){let e=this._editor.plugins.get(`DocumentOutlineUI`);e.view.documentOutlineContainer=e.view.element}_generateCollapseButton(){let e=new H(this._editor.locale),t=document.querySelector(`.ck-fullscreen__left-sidebar`),n=this._editor.t;e.set({label:n(`Toggle sidebar`),class:`ck-fullscreen__left-sidebar-toggle-button`,tooltip:n(`Hide left sidebar`),tooltipPosition:`se`,icon:Wv}),e.on(`execute`,()=>{t.classList.contains(`ck-fullscreen__left-sidebar--collapsed`)?(this._forceShowLeftSidebar=!0,this._keepLeftSidebarHidden=!1,this._showLeftSidebar()):(this._keepLeftSidebarHidden=!0,this._hideLeftSidebar()),this._editor.editing.view.focus()}),e.render(),this._collapseLeftSidebarButton=e,t.prepend(e.element)}_overrideAnnotationsUIs(){let e=this._editor.plugins.get(`AnnotationsUIs`);this._annotationsUIsData=new Map(e.uisData),e.deactivateAll();let t=this._editor.plugins.get(`Sidebar`);t.container?(this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`),t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen=\"right-sidebar\"]`))):(t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen=\"right-sidebar\"]`)),this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`))}_restoreAnnotationsUIs(){let e=this._editor.plugins.get(`Sidebar`),t=e.context.config.get(`sidebar.container`);t&&e.setContainer(t);let n=this._editor.plugins.get(`AnnotationsUIs`);n.deactivateAll();for(let[e,t]of[...this._annotationsUIsData])n.activate(e,t.filter);this._annotationsUIsData=null}_overrideRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>{let e=await this._showRevisionViewerCallback();return this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=`none`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`right-sidebar`),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.disable(),this.moveToFullscreen(e.ui.getEditableElement(),`editable`),this.moveToFullscreen(e.ui.view.toolbar.element,`toolbar`),this.moveToFullscreen(this._editor.config.get(`revisionHistory.viewerSidebarContainer`),`right-sidebar`),e}),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>{this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`right-sidebar`),this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=``),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),await this._closeRevisionViewerCallback(),this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.enable()})}_restoreRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>this._showRevisionViewerCallback()),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>this._closeRevisionViewerCallback())}_registerFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`);this._setNewDialogPosition(),e.on(`change:isOpen`,this.updateDialogPositionCallback,{priority:`highest`})}_unregisterFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`),t=e.view;t&&t.position===null&&(t.position=Jy.EDITOR_TOP_SIDE),t&&t.updatePosition(),e.off(`change:isOpen`,this.updateDialogPositionCallback)}updateDialogPositionCallback=this._updateDialogPosition.bind(this);_updateDialogPosition(e,t,n){n&&this._setNewDialogPosition()}_setNewDialogPosition(){let e=this._editor.plugins.get(`Dialog`).view;if(!e||e.position!==Jy.EDITOR_TOP_SIDE)return;let t=new O(this._wrapper.querySelector(`.ck-fullscreen__right-edge`)).getVisible(),n=new O(t?this._wrapper.querySelector(`.ck-fullscreen__right-edge`):this._wrapper).getVisible(),r=new O(document.querySelector(`.ck-fullscreen__editable`)).getVisible(),i=new O(e.element.querySelector(`.ck-dialog`)).getVisible(),a=new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).excludeScrollbarsAndBorders().getVisible().width-new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).getVisible().width;if(n&&r&&i){e.position=null;let o=t?n.left-i.width-28:n.left+n.width-i.width-28+a;e.moveTo(o,r.top)}}_saveAncestorsScrollPositions(e){let t=e.parentElement;if(t)for(;t;){let e=t.style.overflowY||u.window.getComputedStyle(t).overflowY,n=t.style.overflowX||u.window.getComputedStyle(t).overflowX;(e===`auto`||e===`scroll`||n===`auto`||n===`scroll`||t.tagName===`HTML`)&&this._savedAncestorsScrollPositions.set(t,{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}),t=t.parentElement}}_handleAITabsTransfer(){let e=this._editor.plugins.get(`AITabs`);this._aiTabsData={side:e.side,type:e.type},this.moveToFullscreen(e.view.element,`right-edge`),e.side=`right`,e.type=`sidebar`,e.view.element.addEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_handleAISidebarTransitions(e){let t=this._editor.plugins.get(`AITabs`);e.target===t.view.element&&e.propertyName.includes(`width`)&&this._adjustVisibleElements()}_restoreAITabs(){let e=this._editor.plugins.get(`AITabs`);e.side=this._aiTabsData?.side,e.type=this._aiTabsData?.type,this._aiTabsData=null,e.view.element.removeEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_adjustVisibleElements(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);if(this._forceShowLeftSidebar){this._forceShowLeftSidebar=!1;return}if(e.scrollWidth>e.clientWidth)this._hideLeftSidebar(),e.scrollWidth>e.clientWidth&&this._hideRightSidebar();else{let t=[...e.children].reduce((e,t)=>e+t.scrollWidth,0);t+this._sidebarsWidths.righte+t.scrollWidth,0)),t+this._sidebarsWidths.left[...n.values()].some(t=>t(e))):t.switchTo(e)}_setupResizeObserver(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);this._resizeObserver&&this._resizeObserver.destroy(),this._resizeObserver=new Hr(e,()=>{this._adjustVisibleElements()})}_hideLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.add(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=__,this._collapseLeftSidebarButton.tooltip=e(`Show left sidebar`))}_showLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.remove(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=Wv,this._collapseLeftSidebarButton.tooltip=e(`Hide left sidebar`))}_hideRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`narrowSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.add(`ck-fullscreen__right-sidebar--collapsed`))}_showRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`wideSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.remove(`ck-fullscreen__right-sidebar--collapsed`))}_aiTabsTransitionEndCallback=e=>{this._handleAISidebarTransitions(e)}},mI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){let e=this._editor.ui,t=e.view;return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(e.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(e.getEditableElement(),`editable`),this.moveToFullscreen(t.toolbar.element,`toolbar`),t.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this.getWrapper().setAttribute(`dir`,t.element.getAttribute(`dir`)),this.getWrapper().classList.add(`ck-rounded-corners`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&(t.menuBarView||(t.menuBarView=new gw(this._editor.locale),t.menuBarView.render(),e.initMenuBar(t.menuBarView)),this.moveToFullscreen(t.menuBarView.element,`menu-bar`)),this.getWrapper()}},hI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(this._editor.ui.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&this.moveToFullscreen(this._editor.ui.view.menuBarView.element,`menu-bar`),this.getWrapper()}},gI=class extends I{fullscreenHandler;constructor(e){super(e),this.affectsData=!1,this.isEnabled=!0,this.value=!1,bne(e)?this.fullscreenHandler=new mI(e):xne(e)?this.fullscreenHandler=new hI(e):this.fullscreenHandler=new pI(e)}execute(){this.value?this._disableFullscreenMode():this._enableFullscreenMode()}_enableFullscreenMode(){this.fullscreenHandler.enable(),this.value=!0}_disableFullscreenMode(){this.fullscreenHandler.disable(),this.value=!1}};function bne(e){return e.constructor.editorName===`ClassicEditor`}function xne(e){return e.constructor.editorName===`DecoupledEditor`}var _I=class extends F{static get pluginName(){return`FullscreenEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`fullscreen.menuBar.isVisible`,!0),e.config.define(`fullscreen.toolbar.shouldNotGroupWhenFull`,e.config.get(`toolbar.shouldNotGroupWhenFull`)===!0)}init(){this.editor.commands.add(`toggleFullscreen`,new gI(this.editor));let e=this.editor.locale.t;this.editor.keystrokes.set(`Ctrl+Shift+F`,(e,t)=>{this.editor.execute(`toggleFullscreen`),p.isBlink||(this.editor.editing.view.document.isFocused=!1,this.editor.ui.view.toolbar.focusTracker.focusedElement=null),this.editor.editing.view.scrollToTheSelection(),this.editor.editing.view.focus(),t()}),this.editor.accessibility.addKeystrokeInfos({keystrokes:[{label:e(`Toggle fullscreen mode`),keystroke:`CTRL+SHIFT+F`}],categoryId:`navigation`})}};const vI=`toggleFullscreen`;var yI=class extends F{static get requires(){return[_I]}static get pluginName(){return`FullscreenUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`fullscreen`,()=>this._createButton(H)),e.ui.componentFactory.add(`menuBar:fullscreen`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.t,r=t.commands.get(vI),i=new e(t.locale);return i.set({isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`),i instanceof U?i.set({role:`menuitemcheckbox`,label:n(`Fullscreen mode`)}):(i.bind(`icon`).to(r,`value`,e=>e?k_:O_),i.bind(`label`).to(r,`value`,e=>n(e?`Leave fullscreen mode`:`Enter fullscreen mode`)),i.set({tooltip:!0})),this.listenTo(i,`execute`,()=>{t.execute(vI),p.isBlink||(this.editor.ui.view.toolbar.focusTracker.focusedElement=null),t.editing.view.scrollToTheSelection(),t.editing.view.focus()}),i}},Sne=class extends F{static get requires(){return[_I,yI]}static get pluginName(){return`Fullscreen`}static get isOfficialPlugin(){return!0}},bI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document,n=j(t.selection.getSelectedBlocks());this.value=!!n&&n.is(`element`,`paragraph`),this.isEnabled=!!n&&xI(n,e.schema)}execute(e={}){let t=this.editor.model,n=t.document,r=e.selection||n.selection;t.canEditAt(r)&&t.change(e=>{let n=r.getSelectedBlocks();for(let r of n)!r.is(`element`,`paragraph`)&&xI(r,t.schema)&&e.rename(r,`paragraph`)})}};function xI(e,t){return t.checkChild(e.parent,`paragraph`)&&!t.isObject(e)}var SI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}execute(e){let t=this.editor.model,n=e.attributes,r=e.position;return t.canEditAt(r)?t.change(e=>{if(r=this._findPositionToInsertParagraph(r,e),!r)return null;let i=e.createElement(`paragraph`);return n&&t.schema.setAllowedAttributes(i,n,e),t.insertContent(i,r),e.setSelection(i,`in`),e.createPositionAt(i,0)}):null}_findPositionToInsertParagraph(e,t){let n=this.editor.model;if(n.schema.checkChild(e,`paragraph`))return e;let r=n.schema.findAllowedParent(e,`paragraph`);if(!r)return null;let i=e.parent,a=n.schema.checkChild(i,`$text`);return i.isEmpty||a&&e.isAtEnd?n.createPositionAfter(i):!i.isEmpty&&a&&e.isAtStart?n.createPositionBefore(i):t.split(e,r).position}},CI=class e extends F{static get pluginName(){return`Paragraph`}static get isOfficialPlugin(){return!0}init(){let t=this.editor,n=t.model;t.commands.add(`paragraph`,new bI(t)),t.commands.add(`insertParagraph`,new SI(t)),n.schema.register(`paragraph`,{inheritAllFrom:`$block`}),t.conversion.elementToElement({model:`paragraph`,view:`p`}),t.conversion.for(`upcast`).elementToElement({model:(t,{writer:n})=>!e.paragraphLikeElements.has(t.name)||t.isEmpty?null:n.createElement(`paragraph`),view:/.+/,converterPriority:`low`})}static paragraphLikeElements=new Set([`blockquote`,`dd`,`div`,`dt`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`li`,`p`,`td`,`th`])},Cne=class extends F{static get requires(){return[CI]}init(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`paragraph`,n=>{let r=new H(n),i=e.commands.get(`paragraph`);return r.label=t(`Paragraph`),r.icon=Lv,r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`),r.on(`execute`,()=>{e.execute(`paragraph`)}),r})}},wI=class extends I{modelElements;constructor(e,t){super(e),this.modelElements=t}refresh(){let e=j(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name,this.isEnabled=!!e&&this.modelElements.some(t=>TI(e,t,this.editor.model.schema))}execute(e){let t=this.editor.model,n=t.document,r=e.value;t.change(e=>{let i=Array.from(n.selection.getSelectedBlocks()).filter(e=>TI(e,r,t.schema));for(let t of i)t.is(`element`,r)||e.rename(t,r)})}};function TI(e,t,n){return n.checkChild(e.parent,t)&&!n.isObject(e)}const EI=`paragraph`;var DI=class extends F{static get pluginName(){return`HeadingEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`heading`,{options:[{model:`paragraph`,title:`Paragraph`,class:`ck-heading_paragraph`},{model:`heading1`,view:`h2`,title:`Heading 1`,class:`ck-heading_heading1`},{model:`heading2`,view:`h3`,title:`Heading 2`,class:`ck-heading_heading2`},{model:`heading3`,view:`h4`,title:`Heading 3`,class:`ck-heading_heading3`}]})}static get requires(){return[CI]}init(){let e=this.editor,t=e.config.get(`heading.options`),n=[];for(let r of t)r.model!==`paragraph`&&(e.model.schema.register(r.model,{inheritAllFrom:`$block`}),e.conversion.elementToElement(r),n.push(r.model));this._addDefaultH1Conversion(e),e.commands.add(`heading`,new wI(e,n))}afterInit(){let e=this.editor,t=e.commands.get(`enter`),n=e.config.get(`heading.options`);t&&this.listenTo(t,`afterExecute`,(t,r)=>{let i=e.model.document.selection.getFirstPosition().parent;n.some(e=>i.is(`element`,e.model))&&!i.is(`element`,EI)&&i.childCount===0&&r.writer.rename(i,EI)})}_addDefaultH1Conversion(e){e.conversion.for(`upcast`).elementToElement({model:`heading1`,view:`h1`,converterPriority:ge.low+1})}};function OI(e){let t=e.t,n={Paragraph:t(`Paragraph`),\"Heading 1\":t(`Heading 1`),\"Heading 2\":t(`Heading 2`),\"Heading 3\":t(`Heading 3`),\"Heading 4\":t(`Heading 4`),\"Heading 5\":t(`Heading 5`),\"Heading 6\":t(`Heading 6`)};return e.config.get(`heading.options`).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e.title=t),e})}var kI=class extends F{static get pluginName(){return`HeadingUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=OI(e),r=t(`Choose heading`),i=t(`Heading`);e.ui.componentFactory.add(`heading`,t=>{let a={},o=new Fi,s=e.commands.get(`heading`),c=e.commands.get(`paragraph`),l=[s];for(let e of n){let t={type:`button`,model:new RC({label:e.title,class:e.class,role:`menuitemradio`,withText:!0})};e.model===`paragraph`?(t.model.bind(`isOn`).to(c,`value`),t.model.set(`commandName`,`paragraph`),l.push(c)):(t.model.bind(`isOn`).to(s,`value`,t=>t===e.model),t.model.set({commandName:`heading`,commandValue:e.model})),o.add(t),a[e.model]=e.title}let u=Nx(t);return Lx(u,o,{ariaLabel:i,role:`menu`}),u.buttonView.set({ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),u.extendTemplate({attributes:{class:[`ck-heading-dropdown`]}}),u.bind(`isEnabled`).toMany(l,`isEnabled`,(...e)=>e.some(e=>e)),u.buttonView.bind(`label`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?r:a[n]}),u.buttonView.bind(`ariaLabel`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?i:`${a[n]}, ${i}`}),this.listenTo(u,`execute`,t=>{let{commandName:n,commandValue:r}=t.source;e.execute(n,r?{value:r}:void 0),e.editing.view.focus()}),u}),e.ui.componentFactory.add(`menuBar:heading`,r=>{let i=new uw(r),a=e.commands.get(`heading`),o=e.commands.get(`paragraph`),s=[a],c=new dw(r);i.set({class:`ck-heading-dropdown`}),c.set({ariaLabel:t(`Heading`),role:`menu`}),i.buttonView.set({label:t(`Heading`)}),i.panelView.children.add(c);for(let t of n){let n=new rC(r,i),l=new U(r);n.children.add(l),c.items.add(n),l.set({isToggleable:!0,label:t.title,role:`menuitemradio`,class:t.class}),l.delegate(`execute`).to(i),l.on(`execute`,()=>{let n=t.model===`paragraph`?`paragraph`:`heading`;e.execute(n,{value:t.model}),e.editing.view.focus()}),t.model===`paragraph`?(l.bind(`isOn`).to(o,`value`),s.push(o)):l.bind(`isOn`).to(a,`value`,e=>e===t.model)}return i.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),i})}},wne=class extends F{static get requires(){return[DI,kI]}static get pluginName(){return`Heading`}static get isOfficialPlugin(){return!0}};const Tne={heading1:A_,heading2:j_,heading3:M_,heading4:N_,heading5:P_,heading6:F_};var Ene=class extends F{init(){OI(this.editor).filter(e=>e.model!==`paragraph`).map(e=>this._createButton(e))}_createButton(e){let t=this.editor;t.ui.componentFactory.add(e.model,n=>{let r=new H(n),i=t.commands.get(`heading`);return r.label=e.title,r.icon=e.icon||Tne[e.model],r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`,t=>t==e.model),r.on(`execute`,()=>{t.execute(`heading`,{value:e.model}),t.editing.view.focus()}),r})}};const AI=new Set([`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`]);var Dne=class extends F{_bodyPlaceholder=new Map;static get pluginName(){return`Title`}static get isOfficialPlugin(){return!0}static get requires(){return[CI]}init(){let e=this.editor,t=e.model;t.schema.register(`title`,{isBlock:!0,allowIn:`$root`}),t.schema.register(`title-content`,{isBlock:!0,allowIn:`title`,allowAttributes:[`alignment`]}),t.schema.extend(`$text`,{allowIn:`title-content`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`title-content $text`))return!1}),e.editing.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.data.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.conversion.for(`downcast`).elementToElement({model:`title-content`,view:`h1`}),e.conversion.for(`downcast`).add(e=>e.on(`insert:title`,(e,t,n)=>{n.consumable.consume(t.item,e.name)})),e.data.upcastDispatcher.on(`element:h1`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h2`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h3`,jI,{priority:`high`}),t.document.registerPostFixer(e=>this._fixTitleContent(e)),t.document.registerPostFixer(e=>this._fixTitleElement(e)),t.document.registerPostFixer(e=>this._fixBodyElement(e)),t.document.registerPostFixer(e=>this._fixExtraParagraph(e)),this._attachPlaceholders(),this._attachTabPressHandling(),this._warnIfNoSupportedRoot()}_warnIfNoSupportedRoot(){let e=this.editor.model;for(let t of e.document.getRoots())if(e.schema.checkChild(t,`title`))return;T(`title-no-supported-root`)}getTitle(e={}){let t=e.rootName?e.rootName:void 0,n=this._getTitleElement(t);if(!n)return``;let r=n.getChild(0);return this.editor.data.stringify(r,e)}getBody(e={}){let t=this.editor,n=t.data,r=t.model,i=e.rootName?e.rootName:void 0,a=t.model.document.getRoot(i);if(!r.schema.checkChild(a,`title`))return n.get({...e,rootName:a.rootName});let o=a.getChild(0);if(!o||!o.is(`element`,`title`))return``;let s=t.editing.view,c=new Rs(s.document),l=r.createRangeIn(a),u=c.createDocumentFragment(),d=r.createPositionAfter(o),f=r.createRange(d,r.createPositionAt(a,`end`)),p=new Map;for(let e of r.markers){let t=f.getIntersection(e.getRange());t&&p.set(e.name,t)}return n.mapper.clearBindings(),n.mapper.bindElements(a,u),n.downcastDispatcher.convert(l,p,c,e),c.remove(c.createRangeOn(u.getChild(0))),t.data.processor.toData(u)}_getTitleElement(e){let t=this.editor.model,n=t.document.getRoot(e);if(t.schema.checkChild(n,`title`)){for(let e of n.getChildren())if(NI(e))return e}}_fixTitleContent(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this._getTitleElement(n);if(!r||r.maxOffset===1)continue;let i=Array.from(r.getChildren());i.shift();for(let t of i)e.move(e.createRangeOn(t),r,`after`),e.rename(t,`paragraph`);t=!0}return t}_fixTitleElement(e){let t=!1,n=this.editor.model;for(let r of this.editor.model.document.getRoots()){if(!n.schema.checkChild(r,`title`))continue;let i=Array.from(r.getChildren()).filter(NI),a=i[0],o=r.getChild(0);if(o.is(`element`,`title`)){i.length>1&&(PI(i,e,n),t=!0);continue}if(!a&&!AI.has(o.name)){let n=e.createElement(`title`);e.insert(n,r),e.insertElement(`title-content`,n),t=!0;continue}AI.has(o.name)?One(o,e,n):e.move(e.createRangeOn(a),r,0),PI(i,e,n),t=!0}return t}_fixBodyElement(e){let t=this.editor.model.schema,n=!1;for(let r of this.editor.model.document.getRootNames()){let i=this.editor.model.document.getRoot(r);if(i.childCount<2&&t.checkChild(i,`title`)){let t=e.createElement(`paragraph`);e.insert(t,i,1),this._bodyPlaceholder.set(r,t),n=!0}}return n}_fixExtraParagraph(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this.editor.model.document.getRoot(n),i=this._bodyPlaceholder.get(n);i&&Ane(i,r)&&(this._bodyPlaceholder.delete(n),e.remove(i),t=!0)}return t}_attachPlaceholders(){let e=this.editor,t=e.t,n=e.editing.view,r=e.sourceElement,i=e.config.get(`title.placeholder`)||t(`Type your title`);e.editing.downcastDispatcher.on(`insert:title-content`,(e,t,r)=>{let a=r.mapper.toViewElement(t.item);a.placeholder=i,yo({view:n,element:a,keepOnFocus:!0})});let a=new Map;n.document.registerPostFixer(i=>{let o=!1;for(let s of n.document.roots){if(s.isEmpty)continue;let n=e.editing.mapper.toModelElement(s);if(!e.model.schema.checkChild(n,`title`))continue;let c=s.getChild(1),l=a.get(s.rootName);if(c!==l){l&&(So(i,l),i.removeAttribute(`data-placeholder`,l));let n=e.config.get(`roots`)[s.rootName]?.placeholder||jne(r)&&r.getAttribute(`placeholder`)||t(`Type or paste your content here.`);i.setAttribute(`data-placeholder`,n,c),a.set(s.rootName,c),o=!0}o=Co(c,!0)&&s.childCount===2&&c.name===`p`?xo(i,c)?!0:o:So(i,c)?!0:o}return o})}_attachTabPressHandling(){let e=this.editor,t=e.model;e.keystrokes.set(`TAB`,(e,n)=>{t.change(e=>{let r=t.document.selection,i=Array.from(r.getSelectedBlocks());if(i.length===1&&i[0].is(`element`,`title-content`)){let t=r.getFirstPosition().root.getChild(1);e.setSelection(t,0),n()}})}),e.keystrokes.set(`SHIFT + TAB`,(n,r)=>{t.change(n=>{let i=t.document.selection;if(!i.isCollapsed)return;let a=j(i.getSelectedBlocks()),o=i.getFirstPosition(),s=e.model.document.getRoot(o.root.rootName);if(!t.schema.checkChild(s,`title`))return;let c=s.getChild(0);a===s.getChild(1)&&o.isAtStart&&(n.setSelection(c.getChild(0),0),r())})})}};function jI(e,t,n){let r=t.modelCursor,i=t.viewItem;if(!r.isAtStart||!r.parent.is(`element`,`$root`)||!n.consumable.consume(i,{name:!0}))return;let a=n.writer,o=a.createElement(`title`),s=a.createElement(`title-content`);a.append(s,o),a.insert(o,r),n.convertChildren(i,s),n.updateConversionResult(o,t)}function MI(e){return(t,n)=>{let r=n.modelPosition.parent;if(!r.is(`element`,`title`))return;let i=r.parent,a=n.mapper.toViewElement(i);n.viewPosition=e.createPositionAt(a,0),t.stop()}}function NI(e){return e.is(`element`,`title`)}function One(e,t,n){let r=t.createElement(`title`);t.insert(r,e,`before`),t.insert(e,r,0),t.rename(e,`title-content`),n.schema.removeDisallowedAttributes([e],t)}function PI(e,t,n){let r=!1;for(let i of e)i.index!==0&&(kne(i,t,n),r=!0);return r}function kne(e,t,n){let r=e.getChild(0);if(r.isEmpty){t.remove(e);return}t.move(t.createRangeOn(r),e,`before`),t.rename(r,`paragraph`),t.remove(e),n.schema.removeDisallowedAttributes([r],t)}function Ane(e,t){return!(!e.is(`element`,`paragraph`)||e.childCount||t.childCount<=2||t.getChild(t.childCount-1)!==e)}function jne(e){return!!e&&e.tagName.toLowerCase()===`textarea`}var FI=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(`highlight`),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`highlight`)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value;t.change(e=>{if(n.isCollapsed){let t=n.getFirstPosition();if(n.hasAttribute(`highlight`)){let n=e=>e.item.hasAttribute(`highlight`)&&e.item.getAttribute(`highlight`)===this.value,i=t.getLastMatchingPosition(n,{direction:`backward`}),a=t.getLastMatchingPosition(n),o=e.createRange(i,a);!r||this.value===r?(t.isEqual(a)||e.removeAttribute(`highlight`,o),e.removeSelectionAttribute(`highlight`)):(t.isEqual(a)||e.setAttribute(`highlight`,r,o),e.setSelectionAttribute(`highlight`,r))}else r&&e.setSelectionAttribute(`highlight`,r)}else{let i=t.schema.getValidRanges(n.getRanges(),`highlight`,{includeEmptyRanges:!0});for(let t of i){let n=t,i=`highlight`;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(`highlight`)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}})}},II=class extends F{static get pluginName(){return`HighlightEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`highlight`,{options:[{model:`yellowMarker`,class:`marker-yellow`,title:`Yellow marker`,color:`var(--ck-content-highlight-marker-yellow)`,type:`marker`},{model:`greenMarker`,class:`marker-green`,title:`Green marker`,color:`var(--ck-content-highlight-marker-green)`,type:`marker`},{model:`pinkMarker`,class:`marker-pink`,title:`Pink marker`,color:`var(--ck-content-highlight-marker-pink)`,type:`marker`},{model:`blueMarker`,class:`marker-blue`,title:`Blue marker`,color:`var(--ck-content-highlight-marker-blue)`,type:`marker`},{model:`redPen`,class:`pen-red`,title:`Red pen`,color:`var(--ck-content-highlight-pen-red)`,type:`pen`},{model:`greenPen`,class:`pen-green`,title:`Green pen`,color:`var(--ck-content-highlight-pen-green)`,type:`pen`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`highlight`});let t=e.config.get(`highlight.options`);e.conversion.attributeToElement(LI(t)),e.commands.add(`highlight`,new FI(e))}};function LI(e){let t={model:{key:`highlight`,values:[]},view:{}};for(let n of e)t.model.values.push(n.model),t.view[n.model]={name:`mark`,classes:n.class};return t}var RI=class extends F{get localizedOptionTitles(){let e=this.editor.t;return{\"Yellow marker\":e(`Yellow marker`),\"Green marker\":e(`Green marker`),\"Pink marker\":e(`Pink marker`),\"Blue marker\":e(`Blue marker`),\"Red pen\":e(`Red pen`),\"Green pen\":e(`Green pen`)}}static get pluginName(){return`HighlightUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.config.get(`highlight.options`);for(let t of e)this._addHighlighterButton(t);this._addRemoveHighlightButton(),this._addDropdown(e),this._addMenuBarButton(e)}_addRemoveHighlightButton(){let e=this.editor.t,t=this.editor.commands.get(`highlight`);this._addButton(`removeHighlight`,e(`Remove highlight`),S_,null,e=>{e.bind(`isEnabled`).to(t,`isEnabled`)})}_addHighlighterButton(e){let t=this.editor.commands.get(`highlight`);this._addButton(`highlight:`+e.model,e.title,BI(e.type),e.model,n);function n(n){n.bind(`isEnabled`).to(t,`isEnabled`),n.bind(`isOn`).to(t,`value`,t=>t===e.model),n.iconView.fillColor=e.color,n.isToggleable=!0}}_addButton(e,t,n,r,i){let a=this.editor;a.ui.componentFactory.add(e,e=>{let o=new H(e),s=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;return o.set({label:s,icon:n,tooltip:!0}),o.on(`execute`,()=>{a.execute(`highlight`,{value:r}),a.editing.view.focus()}),i(o),o})}_addDropdown(e){let t=this.editor,n=t.t,r=t.ui.componentFactory,i=e[0],a=e.reduce((e,t)=>(e[t.model]=t,e),{});r.add(`highlight`,o=>{let s=t.commands.get(`highlight`),c=Nx(o,Mx),l=c.buttonView;l.set({label:n(`Highlight`),tooltip:!0,lastExecuted:i.model,commandValue:i.model,isToggleable:!0}),l.bind(`icon`).to(s,`value`,e=>BI(u(e,`type`))),l.bind(`color`).to(s,`value`,e=>u(e,`color`)),l.bind(`commandValue`).to(s,`value`,e=>u(e,`model`)),l.bind(`isOn`).to(s,`value`,e=>!!e),l.delegate(`execute`).to(c),c.bind(`isEnabled`).to(s,`isEnabled`),Fx(c,()=>{let t=e.map(e=>{let t=r.create(`highlight:`+e.model);return this.listenTo(t,`execute`,()=>{c.buttonView.set({lastExecuted:e.model})}),t});return t.push(new Cx),t.push(r.create(`removeHighlight`)),t},{enableActiveItemFocusOnDropdownOpen:!0,ariaLabel:n(`Text highlight toolbar`)}),zI(c),l.on(`execute`,()=>{t.execute(`highlight`,{value:l.commandValue})}),this.listenTo(c,`execute`,()=>{t.editing.view.focus()});function u(e,t){return a[!e||e===l.lastExecuted?l.lastExecuted:e][t]}return c})}_addMenuBarButton(e){let t=this.editor,n=t.t,r=t.commands.get(`highlight`);t.ui.componentFactory.add(`menuBar:highlight`,i=>{let a=new uw(i);a.buttonView.set({label:n(`Highlight`),icon:BI(`marker`)}),a.bind(`isEnabled`).to(r),a.buttonView.iconView.fillColor=`transparent`;let o=new dw(i);for(let n of e){let e=new rC(i,a),s=new U(i);s.set({label:n.title,icon:BI(n.type),role:`menuitemradio`,isToggleable:!0}),s.iconView.fillColor=n.color,s.delegate(`execute`).to(a),s.bind(`isOn`).to(r,`value`,e=>e===n.model),s.on(`execute`,()=>{t.execute(`highlight`,{value:n.model}),t.editing.view.focus()}),e.children.add(s),o.items.add(e)}o.items.add(new fx(i));let s=new rC(i,a),c=new U(i);return c.set({label:n(`Remove highlight`),icon:S_}),c.delegate(`execute`).to(a),c.on(`execute`,()=>{t.execute(`highlight`,{value:null}),t.editing.view.focus()}),s.children.add(c),o.items.add(s),a.panelView.children.add(o),a})}};function zI(e){e.buttonView.actionView.iconView.bind(`fillColor`).to(e.buttonView,`color`)}function BI(e){return e===`marker`?uv:zv}var VI=class extends F{static get requires(){return[II,RI]}static get pluginName(){return`Highlight`}static get isOfficialPlugin(){return!0}},HI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=UI(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`horizontalLine`);e.insertObject(n,null,null,{setSelection:`after`})})}};function UI(e,t,n){let r=WI(e,n);return t.checkChild(r,`horizontalLine`)}function WI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var GI=class extends F{static get pluginName(){return`HorizontalLineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`horizontalLine`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToElement({model:`horizontalLine`,view:(e,{writer:t})=>t.createEmptyElement(`hr`)}),r.for(`editingDowncast`).elementToStructure({model:`horizontalLine`,view:(e,{writer:t})=>{let r=n(`Horizontal line`),i=t.createContainerElement(`div`,null,t.createEmptyElement(`hr`));return t.addClass(`ck-horizontal-line`,i),t.setCustomProperty(`hr`,!0,i),KI(i,t,r)}}),r.for(`upcast`).elementToElement({view:`hr`,model:`horizontalLine`}),e.commands.add(`horizontalLine`,new HI(e))}};function KI(e,t,n){return t.setCustomProperty(`horizontalLine`,!0,e),UE(e,t,{label:n})}var qI=class extends F{static get pluginName(){return`HorizontalLineUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`horizontalLine`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:horizontalLine`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`horizontalLine`),i=new e(t.locale),a=n.t;return i.set({label:a(`Horizontal line`),icon:L_}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`horizontalLine`),t.editing.view.focus()}),i}},JI=class extends F{static get requires(){return[GI,qI,xD]}static get pluginName(){return`HorizontalLine`}static get isOfficialPlugin(){return!0}},YI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=QI(n);this.isEnabled=XI(n,t,e),this.value=r?r.getAttribute(`value`)||``:null}execute(e){let t=this.editor.model,n=t.document.selection;t.change(r=>{let i;this.value===null?(i=r.createElement(`rawHtml`),t.insertObject(i,null,null,{setSelection:`on`})):i=QI(n),r.setAttribute(`value`,e,i)})}};function XI(e,t,n){let r=ZI(e,n);return t.checkChild(r,`rawHtml`)}function ZI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function QI(e){let t=e.getSelectedElement();return t&&t.is(`element`,`rawHtml`)?t:null}var $I=class extends F{_widgetButtonViewReferences=new Set;static get pluginName(){return`HtmlEmbedEditing`}static get licenseFeatureCode(){return`HE`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlEmbed`,{showPreviews:!1,sanitizeHtml:e=>(T(`html-embed-provide-sanitize-function`),{html:e,hasChanged:!1})})}init(){let e=this.editor;e.model.schema.register(`rawHtml`,{inheritAllFrom:`$blockObject`,allowAttributes:[`value`]}),e.commands.add(`htmlEmbed`,new YI(e)),this._setupConversion()}_setupConversion(){let e=this.editor,t=e.t,n=e.editing.view,r=this._widgetButtonViewReferences,i=e.config.get(`htmlEmbed`);this.editor.editing.view.on(`render`,()=>{for(let e of r){if(e.element&&e.element.isConnected)return;e.destroy(),r.delete(e)}},{priority:`lowest`}),e.data.registerRawContentMatcher({name:`div`,classes:`raw-html-embed`}),e.conversion.for(`upcast`).elementToElement({view:{name:`div`,classes:`raw-html-embed`},model:(e,{writer:t})=>t.createElement(`rawHtml`,{value:e.getCustomProperty(`$rawContent`)})}),e.conversion.for(`dataDowncast`).elementToElement({model:`rawHtml`,view:(e,{writer:t})=>t.createRawElement(`div`,{class:`raw-html-embed`},function(t){t.innerHTML=e.getAttribute(`value`)||``})}),e.conversion.for(`editingDowncast`).elementToStructure({model:{name:`rawHtml`,attributes:[`value`]},view:(r,{writer:o})=>{let s,c,l,u=o.createRawElement(`div`,{class:`raw-html-embed__content-wrapper`},function(t){s=t,a({editor:e,domElement:t,state:c,props:l}),s.addEventListener(`mousedown`,()=>{if(c.isEditable){let t=e.model;t.document.selection.getSelectedElement()!==r&&t.change(e=>e.setSelection(r,`on`))}},!0)}),d={makeEditable(){c=Object.assign({},c,{isEditable:!0}),a({domElement:s,editor:e,state:c,props:l}),n.change(e=>{e.setAttribute(`data-cke-ignore-events`,`true`,u)}),s.querySelector(`textarea`).focus()},save(t){t===c.getRawHtmlValue()?this.cancel():(e.execute(`htmlEmbed`,t),e.editing.view.focus())},cancel(){c=Object.assign({},c,{isEditable:!1}),a({domElement:s,editor:e,state:c,props:l}),e.editing.view.focus(),n.change(e=>{e.removeAttribute(`data-cke-ignore-events`,u)})}};c={showPreviews:i.showPreviews,isEditable:!1,getRawHtmlValue:()=>r.getAttribute(`value`)||``},l={sanitizeHtml:i.sanitizeHtml,textareaPlaceholder:t(`Paste raw HTML here...`),onEditClick(){d.makeEditable()},onSaveClick(e){d.save(e)},onCancelClick(){d.cancel()}};let f=o.createContainerElement(`div`,{class:`raw-html-embed`,\"data-html-embed-label\":t(`HTML snippet`),dir:e.locale.uiLanguageDirection},u);return o.setCustomProperty(`rawHtmlApi`,d,f),o.setCustomProperty(`rawHtml`,!0,f),UE(f,o,{label:t(`HTML snippet`),hasSelectionHandle:!0})}});function a({editor:e,domElement:t,state:n,props:r}){t.textContent=``;let i=t.ownerDocument,a;if(n.isEditable)a=s({domDocument:i,state:n,props:{isDisabled:!1,placeholder:r.textareaPlaceholder}}),t.append(a);else if(n.showPreviews){let a={sanitizeHtml:r.sanitizeHtml};t.append(c({domDocument:i,state:n,props:a,editor:e}))}else{let e={isDisabled:!0,placeholder:r.textareaPlaceholder};t.append(s({domDocument:i,state:n,props:e}))}let l={onEditClick:r.onEditClick,onSaveClick:()=>{r.onSaveClick(a.value)},onCancelClick:r.onCancelClick};t.prepend(o({editor:e,domDocument:i,state:n,props:l}))}function o({editor:e,domDocument:t,state:n,props:i}){let a=mr(t,`div`,{class:`raw-html-embed__buttons-wrapper`});if(n.isEditable){let t=eL(e,`save`,i.onSaveClick),n=eL(e,`cancel`,i.onCancelClick);a.append(t.element,n.element),r.add(t).add(n)}else{let t=eL(e,`edit`,i.onEditClick);a.append(t.element),r.add(t)}return a}function s({domDocument:e,state:t,props:n}){let r=mr(e,`textarea`,{placeholder:n.placeholder,class:`ck ck-reset ck-input ck-input-text raw-html-embed__source`});return r.disabled=n.isDisabled,r.value=t.getRawHtmlValue(),r}function c({editor:e,domDocument:n,state:r,props:i}){let a=i.sanitizeHtml(r.getRawHtmlValue()),o=mr(n,`div`,{class:`ck ck-reset_all raw-html-embed__preview-placeholder`},r.getRawHtmlValue().length>0?t(`No preview available`):t(`Empty snippet content`)),s=mr(n,`div`,{class:`raw-html-embed__preview-content`,dir:e.locale.contentLanguageDirection}),c=n.createRange().createContextualFragment(a.html);return s.appendChild(c),mr(n,`div`,{class:`raw-html-embed__preview`},[o,s])}}};function eL(e,t,n){let{t:r}=e.locale,i=new H(e.locale),a=e.commands.get(`htmlEmbed`);return i.set({class:`raw-html-embed__${t}-button`,icon:Rv,tooltip:!0,tooltipPosition:e.locale.uiLanguageDirection===`rtl`?`e`:`w`}),i.render(),t===`edit`?(i.set({icon:Rv,label:r(`Edit source`)}),i.bind(`isEnabled`).to(a)):t===`save`?(i.set({icon:l_,label:r(`Save changes`)}),i.bind(`isEnabled`).to(a)):i.set({icon:s_,label:r(`Cancel`)}),i.on(`execute`,n),i}var tL=class extends F{static get pluginName(){return`HtmlEmbedUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t;e.ui.componentFactory.add(`htmlEmbed`,()=>{let e=this._createButton(H);return e.set({tooltip:!0,label:t(`Insert HTML`)}),e}),e.ui.componentFactory.add(`menuBar:htmlEmbed`,()=>{let e=this._createButton(U);return e.set({label:t(`HTML snippet`)}),e})}_createButton(e){let t=this.editor,n=t.commands.get(`htmlEmbed`),r=new e(t.locale);return r.set({icon:R_}),r.bind(`isEnabled`).to(n,`isEnabled`),this.listenTo(r,`execute`,()=>{t.execute(`htmlEmbed`),t.editing.view.focus(),t.editing.view.document.selection.getSelectedElement().getCustomProperty(`rawHtmlApi`).makeEditable()}),r}},nL=class extends F{static get requires(){return[$I,tL,xD]}static get pluginName(){return`HtmlEmbed`}static get isOfficialPlugin(){return!0}};function rL(e,t,n,r){t&&aL(e,t,r),n&&iL(e,n,r)}function iL(e,t,n){if(t.attributes)for(let[r,i]of Object.entries(t.attributes))e.setAttribute(r,i,n);t.styles&&e.setStyle(t.styles,n),t.classes&&e.addClass(t.classes,n)}function aL(e,t,n){if(t.attributes)for(let[r]of Object.entries(t.attributes))e.removeAttribute(r,n);if(t.styles)for(let r of Object.keys(t.styles))e.removeStyle(r,n);t.classes&&e.removeClass(t.classes,n)}function oL(e,t){let n=Rt(e),r=`attributes`;for(r in t)r==`classes`?n[r]=Array.from(new Set([...e[r]||[],...t[r]])):n[r]={...e[r],...t[r]};return n}function sL(e,t,n,r,i){let a=t.getAttribute(n),o={};for(let e of[`attributes`,`styles`,`classes`]){if(e!=r){a&&a[e]&&(o[e]=a[e]);continue}if(r==`classes`){let t=new Set(a&&a.classes||[]);i(t),t.size&&(o[e]=Array.from(t));continue}let t=new Map(Object.entries(a&&a[e]||{}));i(t),t.size&&(o[e]=Object.fromEntries(t))}Object.keys(o).length?t.is(`documentSelection`)?e.setSelectionAttribute(n,o):e.setAttribute(n,o,t):a&&(t.is(`documentSelection`)?e.removeSelectionAttribute(n):e.removeAttribute(n,t))}function cL(e,t,n){for(let r of t.getItems({shallow:!0})){let t=r.getAttribute(e);t&&t.attributes&&Object.keys(t.attributes).length?Object.keys(t).length>1&&n.setAttribute(e,{attributes:t.attributes},r):n.removeAttribute(e,r)}}function lL(e){return qn(e).replace(/ /g,``)}function uL(e){return`html${lL(e)}Attributes`}function dL({model:e}){return(t,n)=>n.writer.createElement(e,{htmlContent:t.getCustomProperty(`$rawContent`)})}function fL(e,{view:t,isInline:n}){let r=e.t;return(e,{writer:i})=>{let a=r(`HTML object`),o=pL(t,e,i),s=e.getAttribute(uL(t));return i.addClass(`html-object-embed__content`,o),s&&iL(i,s,o),UE(i.createContainerElement(n?`span`:`div`,{class:`html-object-embed`,\"data-html-object-embed-label\":a},o),i,{label:a})}}function pL(e,t,n){return n.createRawElement(e,null,(e,n)=>{n.setContentOf(e,t.getAttribute(`htmlContent`))})}function mL({view:e,model:t,allowEmpty:n},r){return t=>{t.on(`element:${e}`,(e,t,a)=>{let o=r.processViewAttributes(t.viewItem,a);if(!(!o&&!a.consumable.test(t.viewItem,{name:!0}))){if(o||={},a.consumable.consume(t.viewItem,{name:!0}),t.modelRange||(t=Object.assign(t,a.convertChildren(t.viewItem,t.modelCursor))),n&&t.modelRange.isCollapsed&&Object.keys(o).length){let e=a.writer.createElement(`htmlEmptyElement`);if(!a.safeInsert(e,t.modelCursor))return;let n=a.getSplitParts(e);t.modelRange=a.writer.createRange(t.modelRange.start,a.writer.createPositionAfter(n[n.length-1])),a.updateConversionResult(e,t),i(e,o,a);return}for(let e of t.modelRange.getItems())i(e,o,a)}},{priority:`low`})};function i(e,n,r){if(r.schema.checkAttribute(e,t)){let i=oL(n,e.getAttribute(t)||{});r.writer.setAttribute(t,i,e)}}}function hL({model:e,view:t},n){return(r,{writer:i,consumable:a})=>{if(!r.hasAttribute(e))return null;let o=i.createContainerElement(t),s=r.getAttribute(e);return a.consume(r,`attribute:${e}`),iL(i,s,o),o.getFillerOffset=()=>null,n?UE(o,i):o}}function gL({priority:e,view:t}){return(n,r)=>{if(!n)return;let{writer:i}=r,a=i.createAttributeElement(t,null,{priority:e});return iL(i,n,a),a}}function _L({view:e},t){return n=>{n.on(`element:${e}`,(e,n,r)=>{if(!n.modelRange||n.modelRange.isCollapsed)return;let i=t.processViewAttributes(n.viewItem,r);i&&r.writer.setAttribute(uL(n.viewItem.name),i,n.modelRange)},{priority:`low`})}}function vL({view:e,model:t}){return n=>{n.on(`attribute:${uL(e)}:${t}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.writer;rL(a,r,i,n.mapper.toViewElement(t.item))})}}const yL={block:[{model:`codeBlock`,view:`pre`},{model:`paragraph`,view:`p`},{model:`blockQuote`,view:`blockquote`},{model:`listItem`,view:`li`},{model:`pageBreak`,view:`div`},{model:`rawHtml`,view:`div`},{model:`table`,view:`table`},{model:`tableRow`,view:`tr`},{model:`tableCell`,view:`td`},{model:`tableCell`,view:`th`},{model:`tableColumnGroup`,view:`colgroup`},{model:`tableColumn`,view:`col`},{model:`caption`,view:`caption`},{model:`caption`,view:`figcaption`},{model:`imageBlock`,view:`img`},{model:`imageInline`,view:`img`},{model:`horizontalLine`,view:`hr`},{model:`htmlP`,view:`p`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlBlockquote`,view:`blockquote`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlTable`,view:`table`,modelSchema:{allowWhere:`$block`,isBlock:!0}},{model:`htmlTbody`,view:`tbody`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlThead`,view:`thead`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlTfoot`,view:`tfoot`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlCaption`,view:`caption`,modelSchema:{allowIn:`htmlTable`,allowChildren:`$text`,isBlock:!1}},{model:`htmlColgroup`,view:`colgroup`,modelSchema:{allowIn:`htmlTable`,allowChildren:`col`,isBlock:!1}},{model:`htmlCol`,view:`col`,modelSchema:{allowIn:`htmlColgroup`,isBlock:!1}},{model:`htmlTr`,view:`tr`,modelSchema:{allowIn:[`htmlTable`,`htmlThead`,`htmlTbody`,`htmlTfoot`],isLimit:!0}},{model:`htmlTd`,view:`td`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlTh`,view:`th`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlFigure`,view:`figure`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFigcaption`,view:`figcaption`,modelSchema:{allowIn:`htmlFigure`,allowChildren:`$text`,isBlock:!1}},{model:`htmlAddress`,view:`address`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlAside`,view:`aside`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlMain`,view:`main`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDetails`,view:`details`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSummary`,view:`summary`,modelSchema:{allowChildren:[`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`,`$text`],allowIn:`htmlDetails`,isBlock:!1}},{model:`htmlDiv`,view:`div`,paragraphLikeModel:`htmlDivParagraph`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlFieldset`,view:`fieldset`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlLegend`,view:`legend`,modelSchema:{allowIn:`htmlFieldset`,allowChildren:`$text`}},{model:`htmlHeader`,view:`header`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFooter`,view:`footer`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlForm`,view:`form`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHgroup`,view:`hgroup`,modelSchema:{allowWhere:`$container`,allowChildren:[`paragraph`,`htmlP`,`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`],isBlock:!1}},{model:`htmlH1`,view:`h1`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH2`,view:`h2`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH3`,view:`h3`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH4`,view:`h4`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH5`,view:`h5`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH6`,view:`h6`,modelSchema:{inheritAllFrom:`$block`}},{model:`$htmlList`,modelSchema:{allowWhere:`$container`,allowChildren:[`$htmlList`,`htmlLi`],isBlock:!1}},{model:`htmlDir`,view:`dir`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlMenu`,view:`menu`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlUl`,view:`ul`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlOl`,view:`ol`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlLi`,view:`li`,modelSchema:{allowIn:`$htmlList`,allowChildren:`$text`,isBlock:!1}},{model:`htmlPre`,view:`pre`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlArticle`,view:`article`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSection`,view:`section`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlNav`,view:`nav`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDl`,view:`dl`,modelSchema:{allowWhere:`$container`,allowChildren:[`htmlDt`,`htmlDd`,`htmlDiv`],allowAttributesOf:[`$container`],isBlock:!1}},{model:`htmlDt`,view:`dt`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlDd`,view:`dd`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlCenter`,view:`center`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHr`,view:`hr`,isEmpty:!0,modelSchema:{inheritAllFrom:`$blockObject`}}],inline:[{model:`htmlLiAttributes`,view:`li`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlOlAttributes`,view:`ol`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlUlAttributes`,view:`ul`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`table`},{model:`htmlTheadAttributes`,view:`thead`,appliesToBlock:`table`},{model:`htmlTfootAttributes`,view:`tfoot`,appliesToBlock:`table`},{model:`htmlTbodyAttributes`,view:`tbody`,appliesToBlock:`table`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`imageBlock`},{model:`htmlAcronym`,view:`acronym`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTt`,view:`tt`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlFont`,view:`font`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTime`,view:`time`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlVar`,view:`var`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBig`,view:`big`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSmall`,view:`small`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSamp`,view:`samp`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlQ`,view:`q`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlOutput`,view:`output`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlKbd`,view:`kbd`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdi`,view:`bdi`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdo`,view:`bdo`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlAbbr`,view:`abbr`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlA`,view:`a`,priority:5,coupledAttribute:`linkHref`,attributeProperties:{isFormatting:!0}},{model:`htmlStrong`,view:`strong`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlB`,view:`b`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlI`,view:`i`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlEm`,view:`em`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlS`,view:`s`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDel`,view:`del`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlIns`,view:`ins`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlU`,view:`u`,coupledAttribute:`underline`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSub`,view:`sub`,coupledAttribute:`subscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSup`,view:`sup`,coupledAttribute:`superscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCode`,view:`code`,coupledAttribute:`code`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlMark`,view:`mark`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSpan`,view:`span`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCite`,view:`cite`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlLabel`,view:`label`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDfn`,view:`dfn`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlObject`,view:`object`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlIframe`,view:`iframe`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlInput`,view:`input`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlButton`,view:`button`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlTextarea`,view:`textarea`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlSelect`,view:`select`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlVideo`,view:`video`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlEmbed`,view:`embed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlOembed`,view:`oembed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlAudio`,view:`audio`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlImg`,view:`img`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlCanvas`,view:`canvas`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlMeter`,view:`meter`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlProgress`,view:`progress`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlScript`,view:`script`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlStyle`,view:`style`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlCustomElement`,view:`$customElement`,modelSchema:{allowWhere:[`$text`,`$block`],allowAttributesOf:`$inlineObject`,isInline:!0}}]};var bL=class extends F{_definitions=[];static get pluginName(){return`DataSchema`}static get isOfficialPlugin(){return!0}init(){for(let e of yL.block)this.registerBlockElement(e);for(let e of yL.inline)this.registerInlineElement(e)}registerBlockElement(e){this._definitions.push({...e,isBlock:!0})}registerInlineElement(e){this._definitions.push({...e,isInline:!0})}extendBlockElement(e){this._extendDefinition({...e,isBlock:!0})}extendInlineElement(e){this._extendDefinition({...e,isInline:!0})}getDefinitionsForView(e,t=!1){let n=new Set;for(let r of this._getMatchingViewDefinitions(e)){if(t)for(let e of this._getReferences(r.model))n.add(e);n.add(r)}return n}getDefinitionsForModel(e){return this._definitions.filter(t=>t.model==e)}_getMatchingViewDefinitions(e){return this._definitions.filter(t=>t.view&&xL(e,t.view))}*_getReferences(e){let t=[`inheritAllFrom`,`inheritTypesFrom`,`allowWhere`,`allowContentOf`,`allowAttributesOf`],n=this._definitions.filter(t=>t.model==e);for(let{modelSchema:r}of n)if(r)for(let n of t)for(let t of A(r[n]||[])){let n=this._definitions.filter(e=>e.model==t);for(let r of n)t!==e&&(yield*this._getReferences(r.model),yield r)}}_extendDefinition(e){let t=Array.from(this._definitions.entries()).filter(([,t])=>t.model==e.model);if(t.length==0){this._definitions.push(e);return}for(let[n,r]of t)this._definitions[n]=Sn({},r,e,(e,t)=>Array.isArray(e)?e.concat(t):void 0)}};function xL(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):!1}var SL=class extends F{_dataSchema;_allowedAttributes;_disallowedAttributes;_allowedElements;_disallowedElements;_dataInitialized;_coupledAttributes;constructor(e){super(e),this._dataSchema=e.plugins.get(`DataSchema`),this._allowedAttributes=new Po,this._disallowedAttributes=new Po,this._allowedElements=new Set,this._disallowedElements=new Set,this._dataInitialized=!1,this._coupledAttributes=null,this._registerElementsAfterInit(),this._registerElementHandlers(),this._registerCoupledAttributesPostFixer(),this._registerAssociatedHtmlAttributesPostFixer()}static get pluginName(){return`DataFilter`}static get isOfficialPlugin(){return!0}static get requires(){return[bL,xD]}loadAllowedConfig(e){for(let t of e){let e=t.name||/[\\s\\S]+/,n=OL(t);this.allowElement(e),n.forEach(e=>this.allowAttributes(e))}}loadDisallowedConfig(e){for(let t of e){let e=t.name||/[\\s\\S]+/,n=OL(t);n.length==0?this.disallowElement(e):n.forEach(e=>this.disallowAttributes(e))}}loadAllowedEmptyElementsConfig(e){for(let t of e)this.allowEmptyElement(t)}allowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))this._addAllowedElement(t),this._coupledAttributes=null}disallowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!1))this._disallowedElements.add(t.view)}allowEmptyElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))t.isInline&&this._dataSchema.extendInlineElement({...t,allowEmpty:!0})}allowAttributes(e){this._allowedAttributes.add(e)}disallowAttributes(e){this._disallowedAttributes.add(e)}processViewAttributes(e,t){let{consumable:n}=t;return CL(e,this._disallowedAttributes,n),wL(e,CL(e,this._allowedAttributes,n))}_addAllowedElement(e){if(!this._allowedElements.has(e)){if(this._allowedElements.add(e),`appliesToBlock`in e&&typeof e.appliesToBlock==`string`)for(let t of this._dataSchema.getDefinitionsForModel(e.appliesToBlock))t.isBlock&&this._addAllowedElement(t);this._dataInitialized&&this.editor.data.once(`set`,()=>{this._fireRegisterEvent(e)},{priority:ge.highest+1})}}_registerElementsAfterInit(){this.editor.data.on(`init`,()=>{this._dataInitialized=!0;for(let e of this._allowedElements)this._fireRegisterEvent(e)},{priority:ge.highest+1})}_registerElementHandlers(){this.on(`register`,(e,t)=>{let n=this.editor.model.schema;if(t.isObject&&!n.isRegistered(t.model))this._registerObjectElement(t);else if(t.isBlock)this._registerBlockElement(t);else if(t.isInline)this._registerInlineElement(t);else throw new w(`data-filter-invalid-definition`,null,t);e.stop()},{priority:`lowest`})}_registerCoupledAttributesPostFixer(){let e=this.editor.model,t=e.document.selection;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1,i=this._getCoupledAttributesMap();for(let e of n){if(e.type!=`attribute`||e.attributeNewValue!==null)continue;let n=i.get(e.attributeKey);if(n)for(let{item:i}of e.range.getWalker())for(let e of n)i.hasAttribute(e)&&(t.removeAttribute(e,i),r=!0)}return r}),this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{let i=new Set,a=this._getCoupledAttributesMap();for(let e of r){if(t.hasAttribute(e))continue;let n=a.get(e);if(n)for(let e of n)t.hasAttribute(e)&&i.add(e)}i.size!=0&&e.change(e=>{for(let t of i)e.removeSelectionAttribute(t)})})}_registerAssociatedHtmlAttributesPostFixer(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1;for(let i of n)if(!(i.type!==`insert`||i.name===`$text`))for(let n of i.attributes.keys())!n.startsWith(`html`)||!n.endsWith(`Attributes`)||e.schema.checkAttribute(i.name,n)||(t.removeAttribute(n,i.position.nodeAfter),r=!0);return r})}_getCoupledAttributesMap(){if(this._coupledAttributes)return this._coupledAttributes;this._coupledAttributes=new Map;for(let e of this._allowedElements)if(e.coupledAttribute&&e.model){let t=this._coupledAttributes.get(e.coupledAttribute);t?t.push(e.model):this._coupledAttributes.set(e.coupledAttribute,[e.model])}return this._coupledAttributes}_fireRegisterEvent(e){e.view&&this._disallowedElements.has(e.view)||this.fire(e.view?`register:${e.view}`:`register`,e)}_registerObjectElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;n.register(a,e.modelSchema),i&&(n.extend(e.model,{allowAttributes:[uL(i),`htmlContent`]}),t.data.registerRawContentMatcher({name:i}),r.for(`upcast`).elementToElement({view:i,model:dL(e),converterPriority:ge.low+2}),r.for(`upcast`).add(_L(e,this)),r.for(`editingDowncast`).elementToStructure({model:{name:a,attributes:[uL(i)]},view:fL(t,e)}),r.for(`dataDowncast`).elementToElement({model:a,view:(e,{writer:t})=>pL(i,e,t)}),r.for(`dataDowncast`).add(vL(e)))}_registerBlockElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;if(!n.isRegistered(e.model)){if(!e.modelSchema||(n.register(e.model,e.modelSchema),!i))return;r.for(`upcast`).elementToElement({model:a,view:i,converterPriority:ge.low+2}),r.for(`downcast`).elementToElement({model:a,view:(t,{writer:n})=>e.isEmpty?n.createEmptyElement(i):n.createContainerElement(i)})}i&&(n.extend(e.model,{allowAttributes:uL(i)}),r.for(`upcast`).add(_L(e,this)),r.for(`downcast`).add(vL(e)))}_registerInlineElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,i=e.model;if(!e.appliesToBlock&&(n.extend(`$text`,{allowAttributes:i}),e.attributeProperties&&n.setAttributeProperties(i,e.attributeProperties),r.for(`upcast`).add(mL(e,this)),r.for(`downcast`).attributeToElement({model:i,view:gL(e)}),e.allowEmpty)){if(n.setAttributeProperties(i,{copyFromObject:!1}),!n.isRegistered(`htmlEmptyElement`)){n.register(`htmlEmptyElement`,{inheritAllFrom:`$inlineObject`});let e=e=>Array.from(e.getAttributeKeys()).some(e=>e.startsWith(`html`));t.model.document.registerPostFixer(n=>{let r=t.model.document.differ.getChanges(),i=new Set;for(let t of r)if(t.type!==`remove`){if(t.type===`attribute`&&t.attributeNewValue===null)for(let{item:n}of t.range)n.is(`element`,`htmlEmptyElement`)&&!e(n)&&i.add(n);if(t.type===`insert`&&t.position.nodeAfter){let r=t.position.nodeAfter;for(let{item:t}of n.createRangeOn(r))t.is(`element`,`htmlEmptyElement`)&&!e(t)&&i.add(t)}}for(let e of i)n.remove(e);return i.size>0})}t.data.htmlProcessor.domConverter.registerInlineObjectMatcher(t=>t.name==e.view&&t.isEmpty&&Array.from(t.getAttributeKeys()).length?{name:!0}:null),r.for(`editingDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e,!0)}),r.for(`dataDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e)})}}};function CL(e,t,n){let r=t.matchAll(e)||[],i=e.document.stylesProcessor;return r.reduce((t,{match:r})=>{for(let[a,o]of r.attributes||[])if(a==`style`){let r=o,a=i.getRelatedStyles(r).filter(e=>e.split(`-`).length>r.split(`-`).length).sort((e,t)=>t.split(`-`).length-e.split(`-`).length);for(let r of a)n.consume(e,{styles:[r]})&&t.styles.push(r);n.consume(e,{styles:[r]})&&t.styles.push(r)}else if(a==`class`){let r=o;n.consume(e,{classes:[r]})&&t.classes.push(r)}else n.consume(e,{attributes:[a]})&&t.attributes.push(a);return t},{attributes:[],classes:[],styles:[]})}function wL(e,{attributes:t,classes:n,styles:r}){return!t.length&&!n.length&&!r.length?null:{...t.length&&{attributes:TL(e,t)},...r.length&&{styles:EL(e,r)},...n.length&&{classes:n}}}function TL(e,t){let n={};for(let r of t){let t=e.getAttribute(r);t!==void 0&&Jr(r)&&(n[r]=t)}return n}function EL(e,t){let n=new Vo(e.document.stylesProcessor);for(let r of t){let t=e.getStyle(r);t!==void 0&&n.set(r,t)}return Object.fromEntries(n.getStylesEntries())}function DL(e,t){let{name:n}=e,r=e[t];return xn(r)?Object.entries(r).map(([e,r])=>({name:n,[t]:{[e]:r}})):Array.isArray(r)?r.map(e=>({name:n,[t]:[e]})):[e]}function OL(e){let{name:t,attributes:n,classes:r,styles:i}=e,a=[];return n&&a.push(...DL({name:t,attributes:n},`attributes`)),r&&a.push(...DL({name:t,classes:r},`classes`)),i&&a.push(...DL({name:t,styles:i},`styles`)),a}var kL=class extends F{static get requires(){return[SL]}static get pluginName(){return`CodeBlockElementSupport`}static get isOfficialPlugin(){return!0}init(){if(!this.editor.plugins.has(`CodeBlockEditing`))return;let e=this.editor.plugins.get(SL);e.on(`register:pre`,(t,n)=>{if(n.model!==`codeBlock`)return;let r=this.editor,i=r.model.schema,a=r.conversion;i.extend(`codeBlock`,{allowAttributes:[`htmlPreAttributes`,`htmlContentAttributes`]}),a.for(`upcast`).add(AL(e)),a.for(`downcast`).add(jL()),t.stop()})}};function AL(e){return t=>{t.on(`element:code`,(t,n,r)=>{let i=n.viewItem,a=i.parent;if(!a||!a.is(`element`,`pre`)||!n.modelRange)return;o(a,`htmlPreAttributes`),o(i,`htmlContentAttributes`);function o(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function jL(){return e=>{e.on(`attribute:htmlPreAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item).parent;rL(n.writer,r,i,a)}),e.on(`attribute:htmlContentAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)})}}var ML=class extends F{static get requires(){return[SL]}static get pluginName(){return`DualContentModelElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.plugins.get(SL).on(`register`,(e,t)=>{let n=t,r=this.editor,i=r.model.schema,a=r.conversion;if(!n.paragraphLikeModel||i.isRegistered(n.model)||i.isRegistered(n.paragraphLikeModel))return;let o={model:n.paragraphLikeModel,view:n.view};i.register(n.model,n.modelSchema),i.register(o.model,{inheritAllFrom:`$block`}),a.for(`upcast`).elementToElement({view:n.view,model:(e,{writer:t})=>this._hasBlockContent(e)?t.createElement(n.model):t.createElement(o.model),converterPriority:ge.low+.5}),a.for(`downcast`).elementToElement({view:n.view,model:n.model}),this._addAttributeConversion(n),a.for(`downcast`).elementToElement({view:o.view,model:o.model}),this._addAttributeConversion(o),e.stop()})}_hasBlockContent(e){let t=this.editor.editing.view,n=t.domConverter.blockElements;for(let r of t.createRangeIn(e).getItems())if(r.is(`element`)&&n.includes(r.name))return!0;return!1}_addAttributeConversion(e){let t=this.editor,n=t.conversion,r=t.plugins.get(SL);t.model.schema.extend(e.model,{allowAttributes:uL(e.view)}),n.for(`upcast`).add(_L(e,r)),n.for(`downcast`).add(vL(e))}},NL=class extends F{static get requires(){return[bL,TE]}static get pluginName(){return`HeadingElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HeadingEditing`))return;let t=e.config.get(`heading.options`);this.registerHeadingElements(e,t)}registerHeadingElements(e,t){let n=e.plugins.get(bL),r=[];for(let e of t)`model`in e&&`view`in e&&(n.registerBlockElement({view:e.view,model:e.model}),r.push(e.model));n.extendBlockElement({model:`htmlHgroup`,modelSchema:{allowChildren:r}}),n.extendBlockElement({model:`htmlSummary`,modelSchema:{allowChildren:r}})}};function PL(e,t,n){let r=e.createRangeOn(t);for(let{item:e}of r.getWalker())if(e.is(`element`,n))return e}var FL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ImageElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ImageInlineEditing`)&&!e.plugins.has(`ImageBlockEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:figure`,()=>{n.for(`upcast`).add(RL(r))}),r.on(`register:img`,(i,a)=>{a.model!==`imageBlock`&&a.model!==`imageInline`||(t.isRegistered(`imageBlock`)&&t.extend(`imageBlock`,{allowAttributes:[`htmlImgAttributes`,`htmlFigureAttributes`,`htmlLinkAttributes`]}),t.isRegistered(`imageInline`)&&t.extend(`imageInline`,{allowAttributes:[`htmlA`,`htmlImgAttributes`]}),n.for(`upcast`).add(IL(r)),n.for(`downcast`).add(zL()),e.plugins.has(`LinkImage`)&&n.for(`upcast`).add(LL(r,e)),i.stop())})}};function IL(e){return t=>{t.on(`element:img`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem,a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlImgAttributes`,a,n.modelRange)},{priority:`low`})}}function LL(e,t){let n=t.plugins.get(`ImageUtils`);return t=>{t.on(`element:a`,(t,r,i)=>{let a=r.viewItem;if(!n.findViewImgElement(a))return;let o=r.modelCursor.parent;if(!o.is(`element`,`imageBlock`))return;let s=e.processViewAttributes(a,i);s&&i.writer.setAttribute(`htmlLinkAttributes`,s,o)},{priority:`low`})}}function RL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`image`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function zL(){return e=>{t(`htmlImgAttributes`),n(`img`,`htmlImgAttributes`),n(`figure`,`htmlFigureAttributes`),n(`a`,`htmlLinkAttributes`);function t(t){e.on(`attribute:${t}:imageInline`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)},{priority:`low`})}function n(t,n){e.on(`attribute:${n}:imageBlock`,(e,n,r)=>{if(!r.consumable.test(n.item,e.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,t);s&&(rL(r.writer,i,a,s),r.consumable.consume(n.item,e.name))},{priority:`low`}),t===`a`&&e.on(`attribute:linkHref:imageBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,`attribute:htmlLinkAttributes:imageBlock`))return;let r=n.mapper.toViewElement(t.item),i=PL(n.writer,r,`a`);iL(n.writer,t.item.getAttribute(`htmlLinkAttributes`),i)},{priority:`low`})}}}var BL=class extends F{static get requires(){return[SL]}static get pluginName(){return`MediaEmbedElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`MediaEmbed`)||e.config.get(`mediaEmbed.previewsInData`))return;let t=e.model.schema,n=e.conversion,r=this.editor.plugins.get(SL),i=this.editor.plugins.get(bL),a=e.config.get(`mediaEmbed.elementName`);i.registerBlockElement({model:`media`,view:a}),r.on(`register:figure`,()=>{n.for(`upcast`).add(HL(r))}),r.on(`register:${a}`,(e,i)=>{i.model===`media`&&(t.extend(`media`,{allowAttributes:[uL(a),`htmlFigureAttributes`]}),n.for(`upcast`).add(VL(r,a)),n.for(`dataDowncast`).add(UL(a)),e.stop())})}};function VL(e,t){let n=(n,r,i)=>{let a=r.viewItem;o(a,uL(t));function o(t,n){let a=e.processViewAttributes(t,i);a&&i.writer.setAttribute(n,a,r.modelRange)}};return e=>{e.on(`element:${t}`,n,{priority:`low`})}}function HL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`media`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function UL(e){return t=>{n(e,uL(e)),n(`figure`,`htmlFigureAttributes`);function n(e,n){t.on(`attribute:${n}:media`,(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,e);rL(r.writer,i,a,s)})}}}var WL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ScriptElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:script`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlScript`,n.modelSchema),i.extend(`htmlScript`,{allowAttributes:[`htmlScriptAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`script`}),a.for(`upcast`).elementToElement({view:`script`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlScript`,view:(e,{writer:t})=>pL(`script`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}};const GL=[`width`,`max-width`,`min-width`,`height`,`min-height`,`max-height`];var KL=class extends F{static get requires(){return[SL]}static get pluginName(){return`TableElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`TableEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`TableUtils`);r.on(`register:figure`,()=>{n.for(`upcast`).add(YL(r))}),r.on(`register:table`,(a,o)=>{o.model===`table`&&(t.extend(`table`,{allowAttributes:[`htmlTableAttributes`,`htmlFigureAttributes`,`htmlTheadAttributes`,`htmlTbodyAttributes`,`htmlTfootAttributes`]}),n.for(`upcast`).add(JL(r)),n.for(`downcast`).add(XL()),e.model.document.registerPostFixer(qL(e.model,i)),a.stop())})}};function qL(e,t){return n=>{let r=e.document.differ.getChanges(),i=!1;for(let e of r){if(e.type!=`attribute`||e.attributeKey!=`headingRows`&&e.attributeKey!=`footerRows`)continue;let r=e.range.start.nodeAfter,a=r.getAttribute(`htmlTheadAttributes`),o=r.getAttribute(`htmlTbodyAttributes`),s=r.getAttribute(`htmlTfootAttributes`);a&&e.attributeKey===`headingRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTheadAttributes`,r),i=!0),s&&e.attributeKey===`footerRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTfootAttributes`,r),i=!0),o&&(r.getAttribute(`headingRows`)||0)+(r.getAttribute(`footerRows`)||0)==t.getRows(r)&&(n.removeAttribute(`htmlTbodyAttributes`,r),i=!0)}return i}}function JL(e){return t=>{t.on(`element:table`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem;r.consumable.consume(i,{classes:`table`}),a(i,`htmlTableAttributes`);for(let e of i.getChildren())e.is(`element`,`thead`)&&a(e,`htmlTheadAttributes`),e.is(`element`,`tfoot`)&&a(e,`htmlTfootAttributes`),e.is(`element`,`tbody`)&&a(e,`htmlTbodyAttributes`);function a(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function YL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`table`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function XL(){return e=>{t(`table`,`htmlTableAttributes`),t(`figure`,`htmlFigureAttributes`),t(`thead`,`htmlTheadAttributes`),t(`tbody`,`htmlTbodyAttributes`),t(`tfoot`,`htmlTfootAttributes`);function t(t,n){e.on(`attribute:${n}:table`,(e,r,i)=>{if(!i.consumable.test(r.item,e.name))return;let a=i.mapper.toViewElement(r.item),o=PL(i.writer,a,t);if(o)if(i.consumable.consume(r.item,e.name),n===`htmlTableAttributes`&&a!==o){let e=ZL(r.attributeOldValue),t=ZL(r.attributeNewValue);rL(i.writer,e.tableAttributes,t.tableAttributes,o),rL(i.writer,e.figureAttributes,t.figureAttributes,a)}else rL(i.writer,r.attributeOldValue,r.attributeNewValue,o)})}}}function ZL(e){let t={},n={...e};if(!e||!(`styles`in e))return{figureAttributes:t,tableAttributes:n};n.styles={};for(let[r,i]of Object.entries(e.styles))GL.includes(r)?t.styles={...t.styles,[r]:i}:n.styles={...n.styles,[r]:i};return{figureAttributes:t,tableAttributes:n}}var QL=class extends F{static get requires(){return[SL]}static get pluginName(){return`StyleElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:style`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlStyle`,n.modelSchema),i.extend(`htmlStyle`,{allowAttributes:[`htmlStyleAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`style`}),a.for(`upcast`).elementToElement({view:`style`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlStyle`,view:(e,{writer:t})=>pL(`style`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}},$L=class extends F{static get requires(){return[SL]}static get pluginName(){return`ListElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ListEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`ListEditing`),a=e.plugins.get(`ListUtils`),o=[`ul`,`ol`,`li`];i.registerDowncastStrategy({scope:`item`,attributeName:`htmlLiAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlUlAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlOlAttributes`,setAttributeOnDowncast:iL}),r.on(`register`,(e,i)=>{if(!o.includes(i.view)||(e.stop(),t.checkAttribute(`$block`,`htmlLiAttributes`)))return;let a=o.map(e=>uL(e));t.extend(`$listItem`,{allowAttributes:a}),n.for(`upcast`).add(e=>{e.on(`element:ul`,eR(`htmlUlAttributes`,`list`,r),{priority:`low`}),e.on(`element:ol`,eR(`htmlOlAttributes`,`list`,r),{priority:`low`}),e.on(`element:li`,eR(`htmlLiAttributes`,`item`,r),{priority:`low`})})}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)if(i){if(i.getAttribute(`listType`)==r.getAttribute(`listType`)){let t=nR(i.getAttribute(`listType`)),a=i.getAttribute(t);!$t(r.getAttribute(t),a)&&n.model.schema.checkAttribute(r,t)&&(a===void 0?n.removeAttribute(t,r):n.setAttribute(t,a,r),e.return=!0)}if(i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)){let t=i.getAttribute(`htmlLiAttributes`);!$t(r.getAttribute(`htmlLiAttributes`),t)&&n.model.schema.checkAttribute(r,`htmlLiAttributes`)&&(t===void 0?n.removeAttribute(`htmlLiAttributes`,r):n.setAttribute(`htmlLiAttributes`,t,r),e.return=!0)}}}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r}of t){let t=r.getAttribute(`listType`);!a.isNumberedListType(t)&&r.getAttribute(`htmlOlAttributes`)&&(n.removeAttribute(`htmlOlAttributes`,r),e.return=!0),a.isNumberedListType(t)&&r.getAttribute(`htmlUlAttributes`)&&(n.removeAttribute(`htmlUlAttributes`,r),e.return=!0)}})}afterInit(){let e=this.editor;if(!e.commands.get(`indentList`))return;let t=e.commands.get(`indentList`);this.listenTo(t,`afterExecute`,(t,n)=>{e.model.change(t=>{for(let r of n){let n=nR(r.getAttribute(`listType`));e.model.schema.checkAttribute(r,n)&&t.removeAttribute(n,r)}})})}};function eR(e,t,n){return(r,i,a)=>{let o=i.viewItem;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let s=n.processViewAttributes(o,a);if(t===`list`&&!s)return;let c=a.store;c.htmlSupportItemToClosestList??=new Map;let l=c.htmlSupportItemToClosestList,u=t===`item`?tR(o):null;for(let n of i.modelRange.getItems({shallow:!0}))if(n.hasAttribute(`listItemId`)){if(t===`item`){if(l.has(n))continue;l.set(n,u)}else if(l.get(n)!==o)continue;s&&a.writer.model.schema.checkAttribute(n,e)&&a.writer.setAttribute(e,s,n)}}}function tR(e){let t=e.parent;for(;t;){if(t.is(`element`,`ul`)||t.is(`element`,`ol`))return t;t=t.parent}return null}function nR(e){return e===`numbered`||e==`customNumbered`?`htmlOlAttributes`:`htmlUlAttributes`}var rR=class extends F{static get requires(){return[SL]}static get pluginName(){return`HorizontalLineElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HorizontalLineEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:hr`,(e,i)=>{i.model===`horizontalLine`&&(t.extend(`horizontalLine`,{allowAttributes:[`htmlHrAttributes`]}),n.for(`upcast`).add(_L(i,r)),n.for(`downcast`).add(iR()),e.stop())})}};function iR(){return e=>{e.on(`attribute:htmlHrAttributes:horizontalLine`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item),o=PL(n.writer,a,`hr`);o&&(rL(n.writer,r,i,o),n.consumable.consume(t.item,e.name))},{priority:`low`})}}var aR=class extends F{static get requires(){return[SL]}static get pluginName(){return`IframeElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.config.define(`htmlSupport.htmlIframeSandbox`,!0),this._setupSandboxConversion()}_setupSandboxConversion(){let{plugins:e,config:t,conversion:n}=this.editor,r=e.get(SL),i=t.get(`htmlSupport.htmlIframeSandbox`);if(i===!1)return;let a=Array.isArray(i)?Array.from(i):[];r.on(`register:iframe`,(e,t)=>{n.for(`editingDowncast`).add(e=>{e.on(`insert:${t.model}`,(e,t,n)=>{let{mapper:r,writer:i}=n,o=r.toViewElement(t.item);for(let{item:e}of i.createRangeOn(o))if(e.is(`element`,`iframe`))if(e.hasAttribute(`sandbox`)){let t=new Set,n=e.getAttribute(`sandbox`);for(let e of n.trim().split(/\\s+/))a.includes(e)&&t.add(e);i.setAttribute(`sandbox`,Array.from(t).join(` `),e)}else i.setAttribute(`sandbox`,a.join(` `),e)},{priority:`lowest`})})})}},oR=class extends F{static get requires(){return[SL,bL]}static get pluginName(){return`CustomElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL),t=this.editor.plugins.get(bL);e.on(`register:$customElement`,(n,r)=>{n.stop();let i=this.editor,a=i.model.schema,o=i.conversion,s=i.editing.view.domConverter.unsafeElements,c=i.data.htmlProcessor.domConverter.preElements;a.register(r.model,r.modelSchema),a.extend(r.model,{allowAttributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`],isContent:!0}),i.data.htmlProcessor.domConverter.registerRawContentMatcher({name:`template`}),o.for(`upcast`).elementToElement({view:/.*/,model:(n,a)=>{if(n.name==`$comment`||!sR(n.name)||t.getDefinitionsForView(n.name).size)return null;s.includes(n.name)||s.push(n.name),c.includes(n.name)||c.push(n.name);let o=a.writer.createElement(r.model,{htmlElementName:n.name}),l=e.processViewAttributes(n,a);l&&a.writer.setAttribute(`htmlCustomElementAttributes`,l,o);let u;if(n.is(`element`,`template`)&&n.getCustomProperty(`$rawContent`))u=n.getCustomProperty(`$rawContent`);else{let e=new Np(n.document).createDocumentFragment(n),t=i.data.htmlProcessor.domConverter.viewToDom(e),r=t.firstChild;for(;r.firstChild;)t.appendChild(r.firstChild);r.remove(),u=i.data.htmlProcessor.htmlWriter.getHtml(t)}a.writer.setAttribute(`htmlContent`,u,o);for(let{item:e}of i.editing.view.createRangeIn(n))a.consumable.consume(e,{name:!0});return o},converterPriority:`low`}),o.for(`editingDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=t.createRawElement(n);return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),r),r}}),o.for(`dataDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=e.getAttribute(`htmlContent`),i=t.createRawElement(n,null,(e,t)=>{t.setContentOf(e,r)});return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),i),i}})})}};function sR(e){try{document.createElement(e)}catch{return!1}return!0}var cR=class extends F{static get pluginName(){return`GeneralHtmlSupport`}static get isOfficialPlugin(){return!0}static get requires(){return[SL,kL,ML,NL,FL,BL,WL,KL,QL,$L,rR,aR,oR]}init(){let e=this.editor,t=e.plugins.get(SL);t.loadAllowedEmptyElementsConfig(e.config.get(`htmlSupport.allowEmpty`)||[]),t.loadAllowedConfig(e.config.get(`htmlSupport.allow`)||[]),t.loadDisallowedConfig(e.config.get(`htmlSupport.disallow`)||[])}afterInit(){this.editor.commands.get(`removeFormat`)?.registerCustomAttribute(e=>e.startsWith(`html`)&&e.endsWith(`Attributes`),cL)}getGhsAttributeNameForElement(e){let t=this.editor.plugins.get(`DataSchema`),n=Array.from(t.getDefinitionsForView(e,!1)),r=n.find(e=>e.isInline&&!n[0].isObject);return r?r.model:uL(e)}addModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.add(n)})})}removeModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let n of A(t))e.delete(n)})})}};function*lR(e,t,n){if(t)if(!(Symbol.iterator in t)&&t.is(`documentSelection`)&&t.isCollapsed)e.schema.checkAttributeInSelection(t,n)&&(yield t);else for(let r of uR(e,t,n))yield*r.getItems({shallow:!0})}function uR(e,t,n){return!(Symbol.iterator in t)&&(t.is(`node`)||t.is(`$text`)||t.is(`$textProxy`))?e.schema.checkAttribute(t,n)?[e.createRangeOn(t)]:[]:e.schema.getValidRanges(e.createSelection(t).getRanges(),n)}var dR=class extends F{static get pluginName(){return`HtmlComment`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=new Map;e.data.processor.skipComments=!1,e.model.schema.extend(`$root`,{allowAttributes:`$comment`}),e.model.schema.addAttributeCheck((t,n)=>{if(n.startsWith(`$comment:`)&&e.model.schema.checkAttribute(t,`$comment`))return!0}),e.conversion.for(`upcast`).elementToMarker({view:`$comment`,model:e=>{let n=`$comment:${he()}`,r=e.getCustomProperty(`$rawContent`);return t.set(n,r),n}}),e.conversion.for(`dataDowncast`).markerToElement({model:`$comment`,view:(e,{writer:t})=>{let n;for(let t of this.editor.model.document.getRootNames())if(n=this.editor.model.document.getRoot(t),n.hasAttribute(e.markerName))break;let r=e.markerName,i=n.getAttribute(r),a=t.createUIElement(`$comment`);return t.setCustomProperty(`$rawContent`,i,a),a}}),e.model.document.registerPostFixer(n=>{let r=!1,i=e.model.document.differ.getChangedMarkers().filter(e=>e.name.startsWith(`$comment:`));for(let e of i){let{oldRange:i,newRange:a}=e.data;if(!(i&&a&&i.root==a.root)){if(i){let t=i.root;t.hasAttribute(e.name)&&(n.removeAttribute(e.name,t),r=!0)}if(a){let i=a.root;i.rootName==`$graveyard`?(n.removeMarker(e.name),r=!0):i.hasAttribute(e.name)||(n.setAttribute(e.name,t.get(e.name)||``,i),r=!0)}}}return r}),e.data.on(`set`,()=>{for(let t of e.model.markers.getMarkersGroup(`$comment`))this.removeHtmlComment(t.name)},{priority:`high`}),e.model.on(`deleteContent`,(t,[n])=>{for(let t of n.getRanges()){let n=e.model.schema.getLimitElement(t),r=e.model.createPositionAt(n,0),i=e.model.createPositionAt(n,`end`),a;a=r.isTouching(t.start)&&i.isTouching(t.end)?this.getHtmlCommentsInRange(e.model.createRange(r,i)):this.getHtmlCommentsInRange(t,{skipBoundaries:!0});for(let e of a)this.removeHtmlComment(e)}},{priority:`high`})}createHtmlComment(e,t){let n=he(),r=this.editor.model,i=r.document.getRoot(e.root.rootName),a=`$comment:${n}`;return r.change(n=>{let r=n.createRange(e);return n.addMarker(a,{usingOperation:!0,affectsData:!0,range:r}),n.setAttribute(a,t,i),a})}removeHtmlComment(e){let t=this.editor,n=t.model.markers.get(e);return n?(t.model.change(e=>{e.removeMarker(n)}),!0):!1}getHtmlCommentData(e){let t=this.editor.model.markers.get(e);if(!t)return null;let n=``;for(let t of this.editor.model.document.getRoots())if(t.hasAttribute(e)){n=t.getAttribute(e);break}return{content:n,position:t.getStart()}}getHtmlCommentsInRange(e,{skipBoundaries:t=!1}={}){let n=!t;return Array.from(this.editor.model.markers.getMarkersGroup(`$comment`)).filter(t=>r(t,e)).map(e=>e.name);function r(e,t){let r=e.getRange().start;return(r.isAfter(t.start)||n&&r.isEqual(t.start))&&(r.isBefore(t.end)||n&&r.isEqual(t.end))}}},fR=class extends Td{toView(e){if(!/<(?:html|body|head|meta)(?:\\s[^>]*)?>/i.test(e.trim().slice(0,1e4)))return super.toView(e);let t=``,n=``;e=e.trim().replace(/<\\?xml\\s[^?]*\\?>/i,e=>(n=e,``)),e=e.trim().replace(/^]*?>/i,e=>(t=e,``));let r=this._toDom(e),i=this.domConverter.domToView(r,{skipComments:this.skipComments}),a=new Np(i.document);a.setCustomProperty(`$fullPageDocument`,r.ownerDocument.documentElement.outerHTML,i);let o=Array.from(r.ownerDocument.querySelectorAll(`head style`));return a.setCustomProperty(`$fullPageHeadStyles`,o,i),t&&a.setCustomProperty(`$fullPageDocType`,t,i),n&&a.setCustomProperty(`$fullPageXmlDeclaration`,n,i),i}toData(e){let t=super.toData(e),n=e.getCustomProperty(`$fullPageDocument`),r=e.getCustomProperty(`$fullPageDocType`),i=e.getCustomProperty(`$fullPageXmlDeclaration`);return n&&(t=n.replace(/<\\/body\\s*>/,t+`$&`),r&&(t=r+`\n`+t),i&&(t=i+`\n`+t)),t}},pR=class extends F{static get pluginName(){return`FullPage`}static get licenseFeatureCode(){return`FPH`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlSupport.fullPage`,{allowRenderStylesFromHead:!1,sanitizeCss:e=>(T(`css-full-page-provide-sanitize-function`),{css:e,hasChanged:!1})}),e.data.processor=new fR(e.data.viewDocument)}init(){let e=this.editor,t=[`$fullPageDocument`,`$fullPageDocType`,`$fullPageXmlDeclaration`,`$fullPageHeadStyles`];e.model.schema.extend(`$root`,{allowAttributes:t}),e.data.on(`toModel`,(n,[r])=>{let i=e.model.document.getRoot();e.model.change(e=>{for(let n of t){let t=r.getCustomProperty(n);t&&e.setAttribute(n,t,i)}}),mR(e)&&this._renderStylesFromHead(i)},{priority:`low`}),e.data.on(`toView`,(e,[n])=>{if(!n.is(`rootElement`))return;let r=n,i=e.return;if(!r.hasAttribute(`$fullPageDocument`))return;let a=new Np(i.document);for(let e of t){let t=r.getAttribute(e);t&&a.setCustomProperty(e,t,i)}},{priority:`low`}),e.data.on(`set`,()=>{let n=e.model.document.getRoot();e.model.change(e=>{for(let r of t)n.hasAttribute(r)&&e.removeAttribute(r,n)})},{priority:`high`}),e.data.on(`get`,(e,t)=>{t[0]||={},t[0].trim=!1},{priority:`high`})}destroy(){super.destroy(),mR(this.editor)&&this._removeStyleElementsFromDom()}_removeStyleElementsFromDom(){let e=Array.from(u.document.querySelectorAll(`[data-full-page-style-id=\"${this.editor.id}\"]`));for(let t of e)t.remove()}_renderStyleElementsInDom(e){let t=this.editor,n=e.getAttribute(`$fullPageHeadStyles`);if(!n)return;let r=t.config.get(`htmlSupport.fullPage.sanitizeCss`);for(let e of n){e.setAttribute(`data-full-page-style-id`,t.id);let n=r(e.innerText);n.hasChanged&&(e.innerText=n.css),u.document.head.append(e)}}_renderStylesFromHead(e){this._removeStyleElementsFromDom(),this._renderStyleElementsInDom(e)}};function mR(e){return e.config.get(`htmlSupport.fullPage.allowRenderStylesFromHead`)}const hR=`htmlEmptyBlock`;var gR=class extends F{static get pluginName(){return`EmptyBlock`}static get isOfficialPlugin(){return!0}afterInit(){let{model:e,conversion:t,plugins:n,config:r}=this.editor,i=e.schema,a=r.get(`htmlSupport.preserveEmptyBlocksInEditingView`);i.extend(`$block`,{allowAttributes:[hR]}),i.extend(`$container`,{allowAttributes:[hR]}),i.isRegistered(`tableCell`)&&i.extend(`tableCell`,{allowAttributes:[hR]}),a?t.for(`downcast`).add(_R()):t.for(`dataDowncast`).add(_R()),t.for(`upcast`).add(vR(i)),n.has(`ClipboardPipeline`)&&this._registerClipboardPastingHandler()}_registerClipboardPastingHandler(){let e=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`contentInsertion`,(e,t)=>{t.sourceEditorId!==this.editor.id&&this.editor.model.change(e=>{for(let{item:n}of e.createRangeIn(t.content))n.is(`element`)&&n.hasAttribute(hR)&&e.removeAttribute(hR,n)})})}};function _R(){return e=>{e.on(`attribute:${hR}`,(e,t,n)=>{let{mapper:r,consumable:i}=n,{item:a}=t;if(!i.consume(a,e.name))return;let o=r.toViewElement(a);o&&t.attributeNewValue&&(o.getFillerOffset=()=>null)})}}function vR(e){return t=>{t.on(`element`,(t,n,r)=>{let{viewItem:i,modelRange:a}=n;if(!i.is(`element`)||!i.isEmpty||i.getCustomProperty(`$hasBlockFiller`))return;let o=a&&a.start.nodeAfter;if(!o||!e.checkAttribute(o,hR)||(r.writer.setAttribute(hR,!0,o),o.childCount!=1))return;let s=o.getChild(0);s.is(`element`,`paragraph`)&&e.checkAttribute(s,hR)&&r.writer.setAttribute(hR,!0,s)},{priority:`lowest`})}}var yR=class extends F{static get pluginName(){return`IndentEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.commands.add(`indent`,new co(e)),e.commands.add(`outdent`,new co(e))}},bR=class extends F{static get pluginName(){return`IndentUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?G_:jv,i=t.uiLanguageDirection==`ltr`?jv:G_;this._defineButton(`indent`,n(`Increase indent`),r),this._defineButton(`outdent`,n(`Decrease indent`),i)}_defineButton(e,t,n){let r=this.editor;r.ui.componentFactory.add(e,()=>{let r=this._createButton(H,e,t,n);return r.set({tooltip:!0}),r}),r.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n))}_createButton(e,t,n,r){let i=this.editor,a=i.commands.get(t),o=new e(i.locale);return o.set({label:n,icon:r}),o.bind(`isEnabled`).to(a,`isEnabled`),this.listenTo(o,`execute`,()=>{i.execute(t),i.editing.view.focus()}),o}},xR=class extends F{static get pluginName(){return`Indent`}static get isOfficialPlugin(){return!0}static get requires(){return[yR,bR]}},SR=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this.editor.model,t=j(e.document.selection.getSelectedBlocks());if(!t||!this._isIndentationChangeAllowed(t)){this.isEnabled=!1;return}this.isEnabled=this._indentBehavior.checkEnabled(t.getAttribute(`blockIndent`))}execute(){let e=this.editor.model,t=this._getBlocksToChange();e.change(e=>{for(let n of t){let t=n.getAttribute(`blockIndent`),r=this._indentBehavior.getNextIndent(t);r?e.setAttribute(`blockIndent`,r,n):e.removeAttribute(`blockIndent`,n)}})}_getBlocksToChange(){let e=this.editor.model.document.selection;return Array.from(e.getSelectedBlocks()).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){let t=this.editor;return t.model.schema.checkAttribute(e,`blockIndent`)?!t.plugins.has(`ListUtils`)||!this._indentBehavior.isForward?!0:!t.plugins.get(`ListUtils`).isListItemBlock(e):!1}},CR=class{isForward;offset;unit;constructor(e){this.isForward=e.direction===`forward`,this.offset=e.offset,this.unit=e.unit}checkEnabled(e){let t=parseFloat(e||`0`);return this.isForward||t>0}getNextIndent(e){let t=parseFloat(e||`0`),n=!e||e.endsWith(this.unit);if(t<0)return;if(!n)return this.isForward?this.offset+this.unit:void 0;let r=t+(this.isForward?this.offset:-this.offset);return r>0?r+this.unit:void 0}},wR=class{isForward;classes;constructor(e){this.isForward=e.direction===`forward`,this.classes=e.classes}checkEnabled(e){let t=this.classes.indexOf(e);return this.isForward?t=0}getNextIndent(e){let t=this.classes.indexOf(e)+(this.isForward?1:-1),n=Math.min(t,this.classes.length-1);return this.classes[n]}},TR=class{_startElement;_referenceIndent;_isForward;_includeSelf;_sameAttributes;_sameIndent;_lowerIndent;_higherIndent;constructor(e,t){this._startElement=e,this._referenceIndent=e.getAttribute(`listIndent`),this._isForward=t.direction==`forward`,this._includeSelf=!!t.includeSelf,this._sameAttributes=A(t.sameAttributes||[]),this._sameIndent=!!t.sameIndent,this._lowerIndent=!!t.lowerIndent,this._higherIndent=!!t.higherIndent}static first(e,t){return j(new this(e,t)[Symbol.iterator]())}*[Symbol.iterator](){let e=[];for(let{node:t}of new ER(this._getStartNode(),this._isForward?`forward`:`backward`)){let n=t.getAttribute(`listIndent`);if(nthis._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){e.push(t);continue}}else{if(!this._sameIndent){if(this._higherIndent){e.length&&=(yield*e,0);break}continue}if(this._sameAttributes.some(e=>t.getAttribute(e)!==this._startElement.getAttribute(e)))break}e.length&&=(yield*e,0),yield t}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}},ER=class{_node;_isForward;_previousNodesByIndent=[];_previous=null;_previousNodeIndent=null;constructor(e,t=`forward`){this._node=e,this._isForward=t===`forward`}[Symbol.iterator](){return this}next(){if(!G(this._node))return{done:!0,value:void 0};let e=this._node.getAttribute(`listIndent`),t=null;if(this._previous){let n=this._previousNodeIndent;e>n?this._previousNodesByIndent[n]=this._previous:ee.getAttribute(`listIndent`))),o=new Map;for(let e of r)o.set(e,TR.first(e,{lowerIndent:!0}));for(let e of r){if(i.has(e))continue;i.add(e);let r=e.getAttribute(`listIndent`)-1;if(r<0){VR(e,t,n);continue}if(e.getAttribute(`listIndent`)==a&&o.get(e)){let n=YR(e,o.get(e),t);for(let e of n)i.add(e);if(n.length)continue}t.setAttribute(`listIndent`,r,e)}return WR(i)}function VR(e,t,n){e=A(e);for(let n of e)n.is(`element`,`listItem`)&&t.rename(n,`paragraph`);for(let r of e)for(let e of r.getAttributeKeys())n.includes(e)&&t.removeAttribute(e,r);return e}function HR(e){if(!e.length)return!1;let t=e[0].getAttribute(`listItemId`);return t?!e.some(e=>e.getAttribute(`listItemId`)!=t):!1}function UR(e,t){let n=[],r=1/0;for(let{node:i}of new ER(e.nextSibling)){let e=i.getAttribute(`listIndent`);if(e==0)break;ee.root.rootName!==`$graveyard`).sort((e,t)=>e.index-t.index)}function GR(e){let t=e.document.selection.getSelectedElement();return t&&e.schema.isObject(t)&&e.schema.isBlock(t)?t:null}function KR(e,t){return t.checkChild(e.parent,`listItem`)&&t.checkChild(e,`$text`)&&!t.isObject(e)}function qR(e){return e==`numbered`||e==`customNumbered`}function JR(e){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.getAttribute(`listItemId`),i=e.previousSibling,a=!1;for(;G(i);){let e=i.getAttribute(`listIndent`);if(ee.index?RR(e,t,n):[]}var XR=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor,t=e.model,n=ZR(t.document.selection),r=e.plugins.get(`ListEditing`).getListAttributeNames();t.change(e=>{let t=[];HR(n)&&!NR(n[0])?(this._direction==`forward`&&t.push(...zR(n,e,{attributeNames:r})),t.push(...LR(n[0],e))):this._direction==`forward`?t.push(...zR(n,e,{expand:!0,attributeNames:r})):t.push(...BR(n,e,{attributeNames:r}));for(let n of t){if(!n.hasAttribute(`listType`))continue;let t=TR.first(n,{sameIndent:!0});t&&e.setAttribute(`listType`,t.getAttribute(`listType`),n)}this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=ZR(this.editor.model.document.selection),t=e[0];if(!t)return!1;if(this._direction==`backward`||HR(e)&&!NR(e[0])||this.editor.config.get(`list.enableSkipLevelLists`))return!0;e=FR(e),t=e[0];let n=TR.first(t,{sameIndent:!0});return n?n.getAttribute(`listType`)==t.getAttribute(`listType`):!1}};function ZR(e){let t=Array.from(e.getSelectedBlocks()),n=t.findIndex(e=>!G(e));return n!=-1&&(t.length=n),t}var QR=class extends I{type;_listWalkerOptions;constructor(e,t,n={}){super(e),this.type=t,this._listWalkerOptions=n.multiLevel?{higherIndent:!0,lowerIndent:!0,sameAttributes:[]}:void 0}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=GR(t),i=Array.from(n.selection.getSelectedBlocks()).filter(e=>t.schema.checkAttribute(e,`listType`)||KR(e,t.schema)),a=e.forceValue===void 0?this.value:!e.forceValue;t.change(o=>{if(a){let e=i[i.length-1],t=this.editor.plugins.get(`ListEditing`).getListAttributeNames(),n=AR(e,{direction:`forward`}),r=[];n.length>1&&r.push(...LR(n[1],o)),r.push(...VR(i,o,t)),r.push(...UR(e,o)),this._fireAfterExecute(r)}else if((r||n.selection.isCollapsed)&&G(i[0])){let t=MR(r||i[0],this._listWalkerOptions);for(let n of t)o.setAttributes({...e.additionalAttributes,listType:this.type},n);this._fireAfterExecute(t)}else{let n=[];for(let r of i)if(!r.hasAttribute(`listType`))!r.is(`element`,`listItem`)&&KR(r,t.schema)&&o.rename(r,`listItem`),o.setAttributes({...e.additionalAttributes,listIndent:0,listItemId:OR.next(),listType:this.type},r),n.push(r);else for(let t of FR(r,{withNested:!1}))t.getAttribute(`listType`)!=this.type&&(o.setAttributes({...e.additionalAttributes,listType:this.type},t),n.push(t));this._fireAfterExecute(n)}})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_getValue(){let e=this.editor.model.document.selection,t=Array.from(e.getSelectedBlocks());if(!t.length)return!1;for(let e of t)if(e.getAttribute(`listType`)!=this.type)return!1;return!0}_checkEnabled(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=Array.from(n.getSelectedBlocks());if(!r.length)return!1;if(this.value)return!0;for(let e of r)if(t.checkAttribute(e,`listType`)||KR(e,t))return!0;return!1}},$R=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute({shouldMergeOnBlocksContentLevel:e=!1}={}){let t=this.editor,n=t.model,r=n.document.selection,i=[],a=t.plugins.get(`ListEditing`).getListAttributeNames();n.change(t=>{let{firstElement:o,lastElement:s}=this._getMergeSubjectElements(r,e);if(!o||!s)return;let c=o.getAttribute(`listIndent`)||0,l=s.getAttribute(`listIndent`),u=s.getAttribute(`listItemId`);if(c!=l){let e=jR(s);i.push(...zR([s,...e],t,{indentBy:c-l,expand:c{let t=LR(this._getStartBlock(),e);this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=this.editor.model.document.selection,t=this._getStartBlock();return e.isCollapsed&&G(t)&&!NR(t)}_getStartBlock(){let e=this.editor.model.document.selection.getFirstPosition().parent;return this._direction==`before`?e:e.nextSibling}},tz=class extends F{static get pluginName(){return`ListItemBoldIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`bold`,`listItemBold`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemBold`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-bold`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-bold`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemBold`}),t.schema.setAttributeProperties(`listItemBold`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemBold`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemBold`,view:{name:`li`,classes:`ck-list-marker-bold`}}))}},nz=class extends F{static get pluginName(){return`ListItemItalicIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`italic`,`listItemItalic`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemItalic`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-italic`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-italic`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemItalic`}),t.schema.setAttributeProperties(`listItemItalic`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemItalic`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemItalic`,view:{name:`li`,classes:`ck-list-marker-italic`}}))}},rz=class extends F{static get pluginName(){return`ListItemFontSizeIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;let r=ZF(e.config.get(`fontSize.options`));t.registerFormatAttribute(`fontSize`,`listItemFontSize`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontSize`,setAttributeOnDowncast(e,t,n,i){if(t){let a=r.find(e=>e.model==t);a&&a.view&&typeof a.view!=`string`?a.view.styles?(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,a.view.styles[`font-size`],n)):a.view.classes&&(e.addClass(`ck-list-marker-font-size-${t}`,n),p.isSafari&&!(i&&i.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-font-size`,`0`,n)):(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,t,n))}}})}afterInit(){let e=this.editor,t=e.model;if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;t.schema.extend(`$listItem`,{allowAttributes:`listItemFontSize`}),t.schema.setAttributeProperties(`listItemFontSize`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontSize`),e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:e=>e.getStyle(`--ck-content-list-marker-font-size`)},view:{name:`li`,classes:`ck-list-marker-font-size`,styles:{\"--ck-content-list-marker-font-size\":/.*/}}});let n=ZF(e.config.get(`fontSize.options`));for(let t of n)t.model&&t.view&&e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:t.model},view:{name:`li`,classes:`ck-list-marker-font-size-${t.model}`}})}},iz=class extends F{static get pluginName(){return`ListItemFontColorIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontColor`,`listItemFontColor`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontColor`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-color`,n),e.setStyle(`--ck-content-list-marker-color`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontColor`}),t.schema.setAttributeProperties(`listItemFontColor`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontColor`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontColor`,value:e=>e.getStyle(`--ck-content-list-marker-color`)},view:{name:`li`,classes:`ck-list-marker-color`,styles:{\"--ck-content-list-marker-color\":/.*/}}}))}},az=class extends F{static get pluginName(){return`ListItemFontFamilyIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontFamily`,`listItemFontFamily`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontFamily`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-font-family`,n),e.setStyle(`--ck-content-list-marker-font-family`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontFamily`}),t.schema.setAttributeProperties(`listItemFontFamily`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontFamily`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontFamily`,value:e=>e.getStyle(`--ck-content-list-marker-font-family`)},view:{name:`li`,classes:`ck-list-marker-font-family`,styles:{\"--ck-content-list-marker-font-family\":/.*/}}}))}},oz=class extends F{_loadedFormatting={};static get pluginName(){return`ListFormatting`}static get isOfficialPlugin(){return!0}static get requires(){return[tz,nz,rz,iz,az]}constructor(e){super(e),e.config.define(`list.enableListItemMarkerFormatting`,!0)}afterInit(){this.editor.config.get(`list.enableListItemMarkerFormatting`)&&this._registerPostfixerForListItemFormatting()}_registerPostfixerForListItemFormatting(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=new Set,i=!1;for(let e of n)if(e.type===`attribute`)(e.attributeKey==`listItemId`||e.attributeKey==`listType`||this._isInlineOrSelectionFormatting(e.attributeKey)||Object.values(this._loadedFormatting).includes(e.attributeKey))&&(G(e.range.start.nodeAfter)?r.add(e.range.start.nodeAfter):G(e.range.start.parent)&&r.add(e.range.start.parent));else if(G(e.position.nodeAfter)&&r.add(e.position.nodeAfter),G(e.position.nodeBefore)&&r.add(e.position.nodeBefore),G(e.position.parent)&&r.add(e.position.parent),e.type==`insert`&&e.name!=`$text`){let n=t.createRangeIn(e.position.nodeAfter);for(let e of n.getItems())G(e)&&r.add(e)}for(let n of r){let r=sz(e,n,Object.keys(this._loadedFormatting));for(let[e,a]of Object.entries(r)){let r=this._loadedFormatting[e];(a&&lz(t,n,r,a)||!a&&uz(t,n,r))&&(i=!0)}}return i})}registerFormatAttribute(e,t){this._loadedFormatting[e]=t}_isInlineOrSelectionFormatting(e){return e.replace(/^selection:/,``)in this._loadedFormatting}};function sz(e,t,n){return NR(t)?cz(e,t,n):cz(e,kR(t)[0],n)}function cz(e,t,n){if(!dz(t)||e.schema.isLimit(t))return Object.fromEntries(n.map(e=>[e]));if(t.isEmpty)return Object.fromEntries(n.map(e=>[e,t.getAttribute(`selection:${e}`)]));let r=new Set(n),i={},a=e.createRangeIn(t).getWalker({ignoreElementEnd:!0});for(let{item:t}of a){for(let n of r)if(e.schema.checkAttribute(t,n)){let e=t.getAttribute(n);e===void 0?(r.delete(n),i[n]=void 0):i[n]===void 0?i[n]=e:i[n]!==e&&(r.delete(n),i[n]=void 0)}else n in i||(i[n]=void 0);if(!r.size)break;e.schema.isLimit(t)&&a.jumpTo(e.createPositionAfter(t))}return i}function lz(e,t,n,r){let i=kR(t),a=!1;for(let t of i)(!t.hasAttribute(n)||t.getAttribute(n)!==r)&&(e.setAttribute(n,r,t),a=!0);return a}function uz(e,t,n){let r=kR(t),i=!1;for(let t of r)t.hasAttribute(n)&&(e.removeAttribute(n,t),i=!0);return i}function dz(e){return[`numbered`,`bulleted`,`customNumbered`,`customBulleted`].includes(e.getAttribute(`listType`))}var fz=class extends F{static get pluginName(){return`ListUtils`}static get isOfficialPlugin(){return!0}expandListBlocksToCompleteList(e){return IR(e)}isFirstBlockOfListItem(e){return NR(e)}isListItemBlock(e){return G(e)}expandListBlocksToCompleteItems(e,t={}){return FR(e,t)}isNumberedListType(e){return qR(e)}isFirstListItemInList(e){return JR(e)}};function pz(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function mz(e){return e.is(`element`,`li`)}function hz(e){let t=0,n=e.parent;for(;n;){if(mz(n))t++;else{let e=n.previousSibling;e&&mz(e)&&t++}n=n.parent}return t}function gz(e,t,n,r=yz(n,t)){return e.createAttributeElement(vz(n),null,{priority:2*t/100-100,id:r})}function _z(e,t,n){return e.createAttributeElement(`li`,null,{priority:(2*t+1)/100-100,id:n})}function vz(e){return e==`numbered`||e==`customNumbered`?`ol`:`ul`}function yz(e,t){return`list-${e}-${t}`}function bz(e,t,n){let r=e.nodeBefore;if(G(r)){let e=r;for(let{node:i}of new ER(e,`backward`))if(e=i,n.has(e)||(n.add(e),t.has(r)))return;t.add(e)}else{let n=e.nodeAfter;G(n)&&t.add(n)}}function xz(e,t){let n=0,r=-1,i=null,a=!1;for(let{node:o}of e){let e=o.getAttribute(`listIndent`);if(e>n){let s;i===null?(i=e-n,s=n):(i>e&&(i=e),s=e-i),s>r+1&&(s=r+1),t.setAttribute(`listIndent`,s,o),a=!0,r=s}else i=null,n=e+1,r=e}return a}function Sz(e,t,n){let r=new Set,i=!1;for(let{node:a}of e){if(r.has(a))continue;let e=a.getAttribute(`listType`),o=a.getAttribute(`listItemId`);if(t.has(o)&&(o=OR.next()),t.add(o),a.is(`element`,`listItem`)){a.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,a),i=!0);continue}for(let t of AR(a,{direction:`forward`}))r.add(t),t.getAttribute(`listType`)!=e&&(o=OR.next(),e=t.getAttribute(`listType`)),t.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,t),i=!0)}return i}function Cz(){return(e,t,n)=>{let r=t.viewItem;if(r.getStyle(`list-style-type`)!==`none`||!wz(r)||!n.consumable.consume(r,{name:!0}))return;let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a}}function wz(e){let t=!1;for(let n of e.getChildren()){if(n.is(`element`,`ul`)||n.is(`element`,`ol`)){t=!0;continue}return!1}return t}function Tz(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>i.checkAttribute(e,`listItemId`));if(!a.length||a.every(e=>e.hasAttribute(`listItemId`)))return;let o=t.viewItem.getAttribute(`data-list-item-id`)||OR.next();n.consumable.consume(t.viewItem,{attributes:`data-list-item-id`});let s=hz(t.viewItem),c=t.viewItem.parent&&t.viewItem.parent.is(`element`,`ol`)?`numbered`:`bulleted`,l=a[0].getAttribute(`listType`);l&&(c=l);let u={listItemId:o,listIndent:s,listType:c};for(let e of a)e.hasAttribute(`listItemId`)||r.setAttributes(u,e);a.length>1&&a[1].getAttribute(`listItemId`)!=u.listItemId&&n.keepEmptyElement(a[0])}}function Ez(e,t,n,r){return()=>{let r=e.document.differ.getChanges(),a=[],o=new Set,c=new Set,l=new Set;for(let e of r)if(e.type==`insert`&&e.name!=`$text`)bz(e.position,o,l),e.attributes.has(`listItemId`)?c.add(e.position.nodeAfter):bz(e.position.getShiftedBy(e.length),o,l);else if(e.type==`remove`&&e.attributes.has(`listItemId`))bz(e.position,o,l);else if(e.type==`attribute`){let t=e.range.start.nodeAfter;n.includes(e.attributeKey)?(bz(e.range.start,o,l),e.attributeNewValue===null?(bz(e.range.start.getShiftedBy(1),o,l),s(t)&&a.push(t)):c.add(t)):G(t)&&s(t)&&a.push(t)}for(let e of o.values())a.push(...i(e,c));for(let e of new Set(a))t.reconvertItem(e)};function i(e,t){let n=[],r=new Set,i=[];for(let{node:c,previous:u}of new ER(e)){if(r.has(c))continue;let e=c.getAttribute(`listIndent`);u&&en.includes(e)))}function o(e,t,n){for(let r=t-1;r>=0&&!n[r];r--){let t=Iz(e,r),i=null;if(!t){for(let e=r-1;e>=0;e--)if(n[e]){i=n[e].modelElement;break}}let o=t||i||e;n[r]={modelAttributes:{...a(o),listItemId:`list-item-skip-${r}`,listIndent:r},modelElement:o}}}function s(e,i){let a=t.mapper.toViewElement(e);if(!a)return!1;if(c(a)||r.fire(`checkElement`,{modelElement:e,viewElement:a}))return!0;if(!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`))return!1;let o=Rz(e,n,i);return o&&a.is(`element`,`p`)?!0:!!(!o&&a.is(`element`,`span`))}function c(e){for(e=e.parent;e.is(`attributeElement`)&&[`ol`,`ul`,`li`].includes(e.name);)e=e.parent;return!!(e.getCustomProperty(`$structureSlotParent`)&&!t.mapper.toModelElement(e))}function l(e,n,i){if(i.has(e))return!1;let a=t.mapper.toViewElement(e),o=n.length-1;for(let e=a.parent;!e.is(`editableElement`);e=e.parent){let t=mz(e),i=pz(e);if(!(!i&&!t)){if(n[o]){let i=`checkAttributes:${t?`item`:`list`}`;if(r.fire(i,{viewElement:e,modelAttributes:n[o].modelAttributes,modelReferenceElement:n[o].modelElement}))break}if(i&&(o--,o<0))return!1}}return!0}}function Dz(e,t,n,{dataPipeline:r,enableSkipLevelLists:i}){let a=Lz(e,t);return(o,s,c)=>{let{writer:l,mapper:u,consumable:d}=c,f=s.item;if(!e.includes(s.attributeKey)||!a(f,d))return;let p={...c.options,dataPipeline:r,enableSkipLevelLists:i},m=Az(f,u,n,l);Mz(m,l,u),Pz(m,l),Fz(f,Nz(f,m,t,l,p),t,l,p)}}function Oz(e){return(t,n,r)=>{let{writer:i,mapper:a}=r,o=t.name.split(`:`)[1];if(!e.checkAttribute(o,`listItemId`))return;let s=a.toViewPosition(n.position),c=n.position.getShiftedBy(n.length),l=a.toViewPosition(c,{isPhantom:!0}),u=i.createRange(s,l).getTrimmed().end.nodeBefore;u&&Mz(u,i,a)}}function kz(e,{dataPipeline:t}={}){return(n,{writer:r})=>{if(!Rz(n,e))return null;if(!t)return r.createContainerElement(`span`,{class:`ck-list-bogus-paragraph`});let i=r.createContainerElement(`p`);return r.setCustomProperty(`dataPipeline:transparentRendering`,!0,i),i}}function Az(e,t,n,r){let i=n.createRangeOn(e),a=t.toViewRange(i).getTrimmed().getWalker();for(let{item:e}of a)if(e.is(`element`)&&e.getCustomProperty(`listItemMarker`))a.jumpTo(r.createPositionAfter(e));else if(e.is(`element`)&&!e.getCustomProperty(`listItemWrapper`))return e}function jz(e,t){return(n,r)=>{if(r.modelPosition.offset>0)return;let i=r.modelPosition.parent;if(!G(i)||!e.some(e=>e.scope==`itemMarker`&&e.canInjectMarkerIntoElement&&e.canInjectMarkerIntoElement(i)))return;let a=r.mapper.toViewElement(i),o=t.createRangeIn(a),s=o.getWalker(),c=o.start;for(let{item:e}of s){if(e.is(`element`)&&r.mapper.toModelElement(e)||e.is(`$textProxy`))break;e.is(`element`)&&e.getCustomProperty(`listItemMarker`)&&(c=t.createPositionAfter(e),s.skip(({previousPosition:e})=>!e.isEqual(c)))}r.viewPosition=c}}function Mz(e,t,n){for(;e.parent.is(`attributeElement`)&&e.parent.getCustomProperty(`listItemWrapper`);)t.unwrap(t.createRangeOn(e),e.parent);let r=[];i(t.createPositionBefore(e).getWalker({direction:`backward`})),i(t.createRangeIn(e).getWalker());for(let e of r)t.remove(e);function i(e){for(let{item:t}of e){if(t.is(`element`)&&n.toModelElement(t))break;t.is(`element`)&&t.getCustomProperty(`listItemMarker`)&&r.push(t)}}}function Nz(e,t,n,r,{dataPipeline:i}){let a=r.createRangeOn(t);if(!NR(e))return a;for(let o of n){if(o.scope!=`itemMarker`)continue;let n=o.createElement(r,e,{dataPipeline:i});if(!n||(r.setCustomProperty(`listItemMarker`,!0,n),o.canInjectMarkerIntoElement&&o.canInjectMarkerIntoElement(e)?r.insert(r.createPositionAt(t,0),n):(r.insert(a.start,n),a=r.createRange(r.createPositionBefore(n),r.createPositionAfter(t))),!o.createWrapperElement||!o.canWrapElement))continue;let s=o.createWrapperElement(r,e,{dataPipeline:i});r.setCustomProperty(`listItemWrapper`,!0,s),o.canWrapElement(e)?a=r.wrap(a,s):(a=r.wrap(r.createRangeOn(n),s),a=r.createRange(a.start,r.createPositionAfter(t)))}return a}function Pz(e,t){let n=e.parent;for(;n.is(`attributeElement`)&&[`ul`,`ol`,`li`].includes(n.name);){let r=n.parent;t.unwrap(t.createRangeOn(e),n),n=r}}function Fz(e,t,n,r,i){if(!e.hasAttribute(`listIndent`))return;let a=e.getAttribute(`listIndent`),o=i.enableSkipLevelLists,s=e;for(let c=a;c>=0;c--){let a=s.getAttribute(`listIndent`)!==c;if(a){let a=Iz(e,c)||s,o=a.getAttribute(`listType`),l=_z(r,c,`list-item-skip-${c}`),u=gz(r,c,o);r.setStyle(`list-style-type`,`none`,l);for(let e of n)e.scope==`list`&&a.hasAttribute(e.attributeName)&&e.setAttributeOnDowncast(r,a.getAttribute(e.attributeName),u,i,a);t=r.wrap(t,l),t=r.wrap(t,u)}else{let e=_z(r,c,s.getAttribute(`listItemId`)),a=gz(r,c,s.getAttribute(`listType`));for(let t of n)(t.scope==`list`||t.scope==`item`)&&s.hasAttribute(t.attributeName)&&t.setAttributeOnDowncast(r,s.getAttribute(t.attributeName),t.scope==`list`?a:e,i,s);t=r.wrap(t,e),t=r.wrap(t,a)}if(c==0)break;if(!a){let e=TR.first(s,{lowerIndent:!0});if(e)s=e;else if(!o)break}}}function Iz(e,t){let n=e.nextSibling;for(;n&&G(n);){let e=n.getAttribute(`listIndent`);if(ee.consume===!1).map(e=>e.attributeName);return(t,r)=>{let i=[];for(let r of e)t.hasAttribute(r)&&!n.includes(r)&&i.push(`attribute:${r}`);return i.every(e=>r.test(t,e)!==!1)?(i.forEach(e=>r.consume(t,e)),!0):!1}}function Rz(e,t,n=kR(e)){if(!G(e))return!1;for(let n of e.getAttributeKeys())if(!(n.startsWith(`selection:`)||n==`htmlEmptyBlock`)&&!t.includes(n))return!1;return n.length<2}const zz=[`listType`,`listIndent`,`listItemId`];var Bz=class extends F{_downcastStrategies=[];static get pluginName(){return`ListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,fz,_O,oz]}constructor(e){super(e),e.config.define(`list.multiBlock`,!0)}init(){let e=this.editor,t=e.model,n=e.config.get(`list.multiBlock`);if(e.plugins.has(`LegacyListEditing`))throw new w(`list-feature-conflict`,this,{conflictPlugin:`LegacyListEditing`});t.schema.register(`$listItem`,{allowAttributes:zz}),n?(t.schema.extend(`$container`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$block`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$blockObject`,{allowAttributesOf:`$listItem`})):t.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributesOf:`$listItem`});for(let e of zz)t.schema.setAttributeProperties(e,{copyOnReplace:!0});e.commands.add(`numberedList`,new QR(e,`numbered`)),e.commands.add(`bulletedList`,new QR(e,`bulleted`)),e.commands.add(`customNumberedList`,new QR(e,`customNumbered`,{multiLevel:!0})),e.commands.add(`customBulletedList`,new QR(e,`customBulleted`,{multiLevel:!0})),e.commands.add(`indentList`,new XR(e,`forward`)),e.commands.add(`outdentList`,new XR(e,`backward`)),e.commands.add(`splitListItemBefore`,new ez(e,`before`)),e.commands.add(`splitListItemAfter`,new ez(e,`after`)),n&&(e.commands.add(`mergeListItemBackward`,new $R(e,`backward`)),e.commands.add(`mergeListItemForward`,new $R(e,`forward`))),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration(),this._setupClipboardIntegration(),this._setupAccessibilityIntegration(),this._setupListItemIdConversionStrategy()}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`),{priority:`high`}),n&&n.registerChildCommand(e.get(`outdentList`),{priority:`lowest`}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(e){this._downcastStrategies.push(e)}getListAttributeNames(){return[...zz,...this._downcastStrategies.map(e=>e.attributeName)]}_setupDeleteIntegration(){let e=this.editor,t=e.commands.get(`mergeListItemBackward`),n=e.commands.get(`mergeListItemForward`);this.listenTo(e.editing.view.document,`delete`,(r,i)=>{let a=e.model.document.selection;GR(e.model)||e.model.change(()=>{let o=a.getFirstPosition();if(a.isCollapsed&&i.direction==`backward`){if(!o.isAtStart)return;let n=o.parent;if(!G(n))return;let a=TR.first(n,{sameAttributes:`listType`,sameIndent:!0}),s=n.getAttribute(`listIndent`)===0||!G(n.previousSibling);if(!a&&s)PR(n)||e.execute(`splitListItemAfter`),e.execute(`outdentList`);else{if(!t||!t.isEnabled)return;t.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`backward`)})}i.preventDefault(),r.stop()}else{if(a.isCollapsed&&!a.getLastPosition().isAtEnd||!n||!n.isEnabled)return;n.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`forward`)}),i.preventDefault(),r.stop()}})},{context:`li`})}_setupEnterIntegration(){let e=this.editor,t=e.model,n=e.commands,r=n.get(`enter`);this.listenTo(e.editing.view.document,`enter`,(n,r)=>{let i=t.document,a=i.selection.getFirstPosition().parent;if(i.selection.isCollapsed&&G(a)&&a.isEmpty&&!r.isSoft){let t=NR(a),i=PR(a);t&&i?(e.execute(`outdentList`),r.preventDefault(),n.stop()):t&&!i?(e.execute(`splitListItemAfter`),r.preventDefault(),n.stop()):i&&(e.execute(`splitListItemBefore`),r.preventDefault(),n.stop())}},{context:`li`}),this.listenTo(r,`afterExecute`,()=>{let t=n.get(`splitListItemBefore`);if(t.refresh(),!t.isEnabled)return;let r=e.model.document.selection.getLastPosition().parent;kR(r).length===2&&t.execute()})}_setupTabIntegration(){let e=this.editor;this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}_setupConversion(){let e=this.editor,t=e.model,n=this.getListAttributeNames(),r=e.config.get(`list.multiBlock`),i=r?`paragraph`:`listItem`,a=!!e.config.get(`list.enableSkipLevelLists`);e.conversion.for(`upcast`).elementToElement({view:`li`,model:(e,{writer:t})=>t.createElement(i,{listType:``})}).elementToElement({view:`p`,model:(e,{writer:t})=>e.parent&&e.parent.is(`element`,`li`)?t.createElement(i,{listType:``}):null,converterPriority:`high`}).add(e=>{e.on(`element:p`,(e,t,n)=>{let r=t.viewItem;if(!r.parent||!r.parent.is(`element`,`li`)||r.isEmpty||!r.getAttributeKeys().next().done)return;for(let e of r.parent.getChildren())if(e!==r&&!(e.is(`element`,`ol`)||e.is(`element`,`ul`)))return;n.consumable.consume(r,{name:!0});let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a},{priority:`highest`}),a&&e.on(`element:li`,Cz(),{priority:`high`}),e.on(`element:li`,Tz())}),r||e.conversion.for(`downcast`).elementToElement({model:`listItem`,view:`p`}),e.conversion.for(`editingDowncast`).elementToElement({model:i,view:kz(n),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{enableSkipLevelLists:a})),e.on(`remove`,Oz(t.schema))}),e.conversion.for(`dataDowncast`).elementToElement({model:i,view:kz(n,{dataPipeline:!0}),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{dataPipeline:!0,enableSkipLevelLists:a}))});let o=jz(this._downcastStrategies,e.editing.view);e.editing.mapper.on(`modelToViewPosition`,o),e.data.mapper.on(`modelToViewPosition`,o),this.listenTo(t.document,`change:data`,Ez(t,e.editing,n,this),{priority:`high`}),this.on(`checkAttributes:item`,(e,{viewElement:t,modelAttributes:n})=>{t.id!=n.listItemId&&(e.return=!0,e.stop())}),this.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n})=>{(t.name!=vz(n.listType)||t.id!=yz(n.listType,n.listIndent))&&(e.return=!0,e.stop())})}_setupModelPostFixing(){let e=this.editor.model,t=this.getListAttributeNames();e.document.registerPostFixer(n=>Vz(e,n,t,this)),this.editor.config.get(`list.enableSkipLevelLists`)||this.on(`postFixer`,(e,{listNodes:t,writer:n})=>{e.return=xz(t,n)||e.return},{priority:`high`}),this.on(`postFixer`,(e,{listNodes:t,writer:n,seenIds:r})=>{e.return=Sz(t,r,n)||e.return},{priority:`high`})}_setupClipboardIntegration(){let e=this.editor.model,t=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`insertContent`,Hz(e),{priority:`high`}),this.listenTo(t,`outputTransformation`,(t,n)=>{e.change(e=>{let t=Array.from(n.content.getChildren()),r=t[t.length-1];if(t.length>1&&r.is(`element`)&&r.isEmpty&&t.slice(0,-1).every(G)&&e.remove(r),n.method==`copy`||n.method==`cut`){let t=Array.from(n.content.getChildren());HR(t)&&VR(t,e,this.getListAttributeNames())}})})}_setupAccessibilityIntegration(){let e=this.editor,t=e.t;e.accessibility.addKeystrokeInfoGroup({id:`list`,label:t(`Keystrokes that can be used in a list`),keystrokes:[{label:t(`Increase list item indent`),keystroke:`Tab`},{label:t(`Decrease list item indent`),keystroke:`Shift+Tab`}]})}_setupListItemIdConversionStrategy(){this.registerDowncastStrategy({scope:`item`,attributeName:`listItemId`,setAttributeOnDowncast(e,t,n,r){r&&(r.skipListItemIds||r.isClipboardPipeline)||e.setAttribute(`data-list-item-id`,t,n)}})}};function Vz(e,t,n,r){let i=e.document.differ.getChanges(),a=new Set,o=new Set,s=r.editor.config.get(`list.multiBlock`),c=!1;for(let r of i){if(r.type==`insert`&&r.name!=`$text`){let i=r.position.nodeAfter;if(!e.schema.checkAttribute(i,`listItemId`))for(let e of Array.from(i.getAttributeKeys()))n.includes(e)&&(t.removeAttribute(e,i),c=!0);bz(r.position,o,a),r.attributes.has(`listItemId`)||bz(r.position.getShiftedBy(r.length),o,a);for(let{item:t,previousPosition:n}of e.createRangeIn(i))G(t)&&bz(n,o,a)}else r.type==`remove`?bz(r.position,o,a):r.type==`attribute`&&n.includes(r.attributeKey)&&(bz(r.range.start,o,a),r.attributeNewValue===null&&bz(r.range.start.getShiftedBy(1),o,a));if(!s&&r.type==`attribute`&&zz.includes(r.attributeKey)){let e=r.range.start.nodeAfter;r.attributeNewValue===null&&e&&e.is(`element`,`listItem`)?(t.rename(e,`paragraph`),c=!0):r.attributeOldValue===null&&e&&e.is(`element`)&&e.name!=`listItem`&&(t.rename(e,`listItem`),c=!0)}}let l=new Set;for(let e of o.values())c=r.fire(`postFixer`,{listNodes:new DR(e),listHead:e,writer:t,seenIds:l})||c;return c}function Hz(e){return(t,[n,r])=>{let i=(n.is(`documentFragment`)?Array.from(n.getChildren()):[n]).filter(t=>!e.schema.isInline(t));if(!i.length)return;let a=(r?e.createSelection(r):e.document.selection).getFirstPosition(),o;if(G(a.parent))o=a.parent;else if(G(a.nodeBefore)&&G(a.nodeAfter))o=a.nodeBefore;else return;e.change(e=>{let t=o.getAttribute(`listType`),n=o.getAttribute(`listIndent`),r=i[0].getAttribute(`listIndent`)||0,a=Math.max(n-r,0);for(let n of i){let r=G(n);o.is(`element`,`listItem`)&&n.is(`element`,`paragraph`)&&e.rename(n,`listItem`),e.setAttributes({listIndent:(r?n.getAttribute(`listIndent`):0)+a,listItemId:r?n.getAttribute(`listItemId`):OR.next(),listType:t},n)}})}}function Uz(e,t){let n=e.document.selection;if(!n.isCollapsed)return!GR(e);if(t===`forward`)return!0;let r=n.getFirstPosition().parent,i=r.previousSibling;return e.schema.isObject(i)?!1:i.isEmpty?!0:HR([r,i])}function Wz(e,t,n,r){e.ui.componentFactory.add(t,()=>{let i=Gz(H,e,t,n,r);return i.set({tooltip:!0,isToggleable:!0}),i}),e.ui.componentFactory.add(`menuBar:${t}`,()=>{let i=Gz(U,e,t,n,r);return i.set({role:`menuitemcheckbox`,isToggleable:!0}),i})}function Gz(e,t,n,r,i){let a=t.commands.get(n),o=new e(t.locale);return o.set({label:r,icon:i}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.on(`execute`,()=>{t.execute(n),t.editing.view.focus()}),o}var Kz=class extends F{static get pluginName(){return`ListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;this.editor.ui.componentFactory.has(`numberedList`)||Wz(this.editor,`numberedList`,e(`Numbered List`),vv),this.editor.ui.componentFactory.has(`bulletedList`)||Wz(this.editor,`bulletedList`,e(`Bulleted List`),o_)}},qz=class extends F{static get requires(){return[Bz,Kz]}static get pluginName(){return`List`}static get isOfficialPlugin(){return!0}},Jz=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&qR(e.getAttribute(`listType`)));r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listStart`,e>=0?e:1,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return t&&G(t)&&qR(t.getAttribute(`listType`))?t.getAttribute(`listStart`):null}};const Yz={},Xz={},Zz={},Qz=[{listStyle:`disc`,typeAttribute:`disc`,listType:`bulleted`},{listStyle:`circle`,typeAttribute:`circle`,listType:`bulleted`},{listStyle:`square`,typeAttribute:`square`,listType:`bulleted`},{listStyle:`decimal`,typeAttribute:`1`,listType:`numbered`},{listStyle:`decimal-leading-zero`,typeAttribute:null,listType:`numbered`},{listStyle:`lower-roman`,typeAttribute:`i`,listType:`numbered`},{listStyle:`upper-roman`,typeAttribute:`I`,listType:`numbered`},{listStyle:`lower-alpha`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-alpha`,typeAttribute:`A`,listType:`numbered`},{listStyle:`lower-latin`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-latin`,typeAttribute:`A`,listType:`numbered`},{listStyle:`arabic-indic`,typeAttribute:null,listType:`numbered`}];for(let{listStyle:e,typeAttribute:t,listType:n}of Qz)Yz[e]=n,Xz[e]=t,t&&(Zz[t]=e);function $z(){return Qz.map(e=>e.listStyle)}function eB(e){return Yz[e]||null}function tB(e){return Zz[e]||null}function nB(e){return Xz[e]||null}function rB(e){switch(e){case`lower-alpha`:return`lower-latin`;case`upper-alpha`:return`upper-latin`;default:return e}}var iB=class extends I{defaultType;_supportedTypes;constructor(e,t,n){super(e),this.defaultType=t,this._supportedTypes=n}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document;t.change(t=>{this._tryToConvertItemsToList(e);let r=Array.from(n.selection.getSelectedBlocks()).filter(e=>e.hasAttribute(`listType`));if(r.length){r=IR(r);for(let n of r)t.setAttribute(`listStyle`,e.type||this.defaultType,n)}})}isStyleTypeSupported(e){return this._supportedTypes?this._supportedTypes.includes(e):!0}_getValue(){let e=j(this.editor.model.document.selection.getSelectedBlocks());return G(e)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=eB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},aB=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&e.getAttribute(`listType`)==`numbered`);r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listReversed`,!!e.reversed,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return G(t)&&t.getAttribute(`listType`)==`numbered`?t.getAttribute(`listReversed`):null}};function oB(e){return(t,n,r)=>{let{writer:i,schema:a,consumable:o}=r;if(o.test(n.viewItem,e.viewConsumables)===!1)return;n.modelRange||Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor));let s=!1;for(let t of n.modelRange.getItems({shallow:!0}))a.checkAttribute(t,e.attributeName)&&e.appliesToListItem(t)&&(t.hasAttribute(e.attributeName)||(i.setAttribute(e.attributeName,e.getAttributeOnUpcast(n.viewItem),t),s=!0));s&&o.consume(n.viewItem,e.viewConsumables)}}var sB=class extends F{static get pluginName(){return`ListPropertiesUtils`}static get isOfficialPlugin(){return!0}getAllSupportedStyleTypes(){return $z()}getListTypeFromListStyleType(e){return eB(e)}getListStyleTypeFromTypeAttribute(e){return tB(e)}getTypeAttributeFromListStyleType(e){return nB(e)}};function cB(e){let{startIndex:t,reversed:n,styles:r}=e;return{styles:lB(r),startIndex:t||!1,reversed:n||!1}}function lB(e){let t={listTypes:[`bulleted`,`numbered`],useAttribute:!1,listStyleTypes:{numbered:[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`],bulleted:[`disc`,`circle`,`square`]}};return e===!0||(e?Array.isArray(e)||typeof e==`string`?(t.listTypes=A(e),t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=e.listTypes?A(e.listTypes):t.listTypes,t.useAttribute=!!e.useAttribute,e.listStyleTypes?t.listStyleTypes=e.listStyleTypes:t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=[],t.listStyleTypes={})),t}const uB=`default`;var dB=class extends F{static get requires(){return[Bz,sB]}static get pluginName(){return`ListPropertiesEditing`}static get licenseFeatureCode(){return`LP`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`list.properties`,{styles:!0,startIndex:!1,reversed:!1})}init(){let e=this.editor,t=e.model,n=e.plugins.get(Bz),r=fB(e.config.get(`list.properties`));for(let i of r)i.addCommand(e),t.schema.extend(`$listItem`,{allowAttributes:i.attributeName}),n.registerDowncastStrategy({scope:`list`,attributeName:i.attributeName,setAttributeOnDowncast(e,t,n){i.setAttributeOnDowncast(e,t,n)}});e.conversion.for(`upcast`).add(e=>{for(let t of r)e.on(`element:ol`,oB(t)),e.on(`element:ul`,oB(t))}),n.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n,modelReferenceElement:i})=>{for(let a of r)a.appliesToListItem(i)&&a.getAttributeOnUpcast(t)!=n[a.attributeName]&&(e.return=!0,e.stop())}),this.listenTo(e.commands.get(`indentList`),`afterExecute`,(e,n)=>{t.change(e=>{for(let t of n)for(let n of r)n.appliesToListItem(t)&&e.setAttribute(n.attributeName,n.defaultValue,t)})}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i}of t)for(let t of r)t.hasValidAttribute(i)||(t.appliesToListItem(i)?n.setAttribute(t.attributeName,t.defaultValue,i):n.removeAttribute(t.attributeName,i),e.return=!0)}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i,previousNodeInList:a}of t)if(a&&a.getAttribute(`listType`)==i.getAttribute(`listType`))for(let t of r){let{attributeName:r}=t;if(!t.appliesToListItem(i))continue;let o=a.getAttribute(r);i.getAttribute(r)!=o&&(n.setAttribute(r,o,i),e.return=!0)}})}};function fB(e){let t=[],n=cB(e);if(e.styles){let e=n.styles.useAttribute;t.push({attributeName:`listStyle`,defaultValue:uB,viewConsumables:{styles:`list-style-type`},addCommand(t){let n=$z();e&&(n=n.filter(e=>!!nB(e))),t.commands.add(`listStyle`,new iB(t,uB,n))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`||e.getAttribute(`listType`)==`bulleted`},hasValidAttribute(e){if(!this.appliesToListItem(e))return!e.hasAttribute(`listStyle`);if(!e.hasAttribute(`listStyle`))return!1;let t=e.getAttribute(`listStyle`);return t==uB?!0:eB(t)==e.getAttribute(`listType`)},setAttributeOnDowncast(t,n,r){if(n&&n!==uB)if(e){let e=nB(n);if(e){t.setAttribute(`type`,e,r);return}}else{t.setStyle(`list-style-type`,n,r);return}t.removeStyle(`list-style-type`,r),t.removeAttribute(`type`,r)},getAttributeOnUpcast(e){let t=e.getStyle(`list-style-type`);if(t)return rB(t);let n=e.getAttribute(`type`);return n?tB(n):uB}})}return e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,viewConsumables:{attributes:`reversed`},addCommand(e){e.commands.add(`listReversed`,new aB(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listReversed`)},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,viewConsumables:{attributes:`start`},addCommand(e){e.commands.add(`listStart`,new Jz(e))},appliesToListItem(e){return qR(e.getAttribute(`listType`))},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listStart`)},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}var pB=class extends P{children;stylesView=null;additionalPropertiesCollapsibleView=null;startIndexFieldView=null;reversedSwitchButtonView=null;focusTracker=new M;keystrokes=new N;focusables=new pa;focusCycler;constructor(e,{enabledProperties:t,styleButtonViews:n,styleGridAriaLabel:r}){super(e);let i=[`ck`,`ck-list-properties`];this.children=this.createCollection(),this.focusCycler=new Hy({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),n&&n.length?(this.stylesView=this._createStylesView(n,r),this.children.add(this.stylesView)):i.push(`ck-list-properties_without-styles`),(t.startIndex||t.reversed)&&(this._addNumberedListPropertyViews(t),i.push(`ck-list-properties_with-numbered-properties`)),this.setTemplate({tag:`div`,attributes:{class:i},children:this.children})}render(){if(super.render(),this.stylesView){this.focusables.add(this.stylesView),this.focusTracker.add(this.stylesView.element),(this.startIndexFieldView||this.reversedSwitchButtonView)&&(this.focusables.add(this.children.last.buttonView),this.focusTracker.add(this.children.last.buttonView.element));for(let e of this.stylesView.children)this.stylesView.focusTracker.add(e.element);$a({keystrokeHandler:this.stylesView.keystrokes,focusTracker:this.stylesView.focusTracker,gridItems:this.stylesView.children,numberOfColumns:()=>u.window.getComputedStyle(this.stylesView.element).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}if(this.startIndexFieldView){this.focusables.add(this.startIndexFieldView),this.focusTracker.add(this.startIndexFieldView.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}this.reversedSwitchButtonView&&(this.focusables.add(this.reversedSwitchButtonView),this.focusTracker.add(this.reversedSwitchButtonView.element)),this.keystrokes.listenTo(this.element)}focus(){this.focusCycler.focusFirst()}focusLast(){this.focusCycler.focusLast()}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createStylesView(e,t){let n=new P(this.locale);return n.children=n.createCollection(),n.children.addMany(e),n.setTemplate({tag:`div`,attributes:{\"aria-label\":t,class:[`ck`,`ck-list-styles-list`]},children:n.children}),n.children.delegate(`execute`).to(this),n.focus=function(){for(let e of this.children)if(e instanceof H&&e.isOn){e.focus();return}this.children.first.focus()},n.focusTracker=new M,n.keystrokes=new N,n.render(),n.keystrokes.listenTo(n.element),n}_addNumberedListPropertyViews(e){let t=this.locale.t,n=[];e.startIndex&&(this.startIndexFieldView=this._createStartIndexField(),n.push(this.startIndexFieldView)),e.reversed&&(this.reversedSwitchButtonView=this._createReversedSwitchButton(),n.push(this.reversedSwitchButtonView)),this.stylesView?(this.additionalPropertiesCollapsibleView=new xb(this.locale,n),this.additionalPropertiesCollapsibleView.set({label:t(`List properties`),isCollapsed:!0}),this.additionalPropertiesCollapsibleView.buttonView.bind(`isEnabled`).toMany(n,`isEnabled`,(...e)=>e.some(e=>e)),this.additionalPropertiesCollapsibleView.buttonView.on(`change:isEnabled`,(e,t,n)=>{n||(this.additionalPropertiesCollapsibleView.isCollapsed=!0)}),this.children.add(this.additionalPropertiesCollapsibleView)):this.children.addMany(n)}_createStartIndexField(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.set({label:e(`Start at`),class:`ck-numbered-list-properties__start-index`}),t.fieldView.set({min:0,step:1,value:1,inputMode:`numeric`}),t.fieldView.on(`input`,()=>{let n=t.fieldView.element,r=n.valueAsNumber;if(Number.isNaN(r)){t.errorText=e(`Invalid start index value.`);return}n.checkValidity()?this.fire(`listStart`,{startIndex:r}):t.errorText=e(`Start index must be greater than 0.`)}),t}_createReversedSwitchButton(){let e=this.locale.t,t=new mb(this.locale);return t.set({withText:!0,label:e(`Reversed order`),class:`ck-numbered-list-properties__reversed-order`}),t.delegate(`execute`).to(this,`listReversed`),t}},mB=class extends F{static get pluginName(){return`ListPropertiesUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=e.config.get(`list.properties`),r=cB(n),i=r.styles.listTypes;if(i.includes(`bulleted`)){let n=[{label:t(`Toggle the disc list style`),tooltip:t(`Disc`),type:`disc`,icon:tv},{label:t(`Toggle the circle list style`),tooltip:t(`Circle`),type:`circle`,icon:Q_},{label:t(`Toggle the square list style`),tooltip:t(`Square`),type:`square`,icon:iv}],i=t(`Bulleted List`),a=t(`Bulleted list styles toolbar`),o=`bulletedList`;e.ui.componentFactory.add(o,hB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,buttonIcon:o_,styleGridAriaLabel:a,styleDefinitions:n})),e.ui.componentFactory.add(`menuBar:${o}`,vB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,styleGridAriaLabel:a,styleDefinitions:n}))}if(i.includes(`numbered`)||n.startIndex||n.reversed){let n=[{label:t(`Toggle the decimal list style`),tooltip:t(`Decimal`),type:`decimal`,icon:ev},{label:t(`Toggle the decimal with leading zero list style`),tooltip:t(`Decimal with leading zero`),type:`decimal-leading-zero`,icon:$_},{label:t(`Toggle the lower–roman list style`),tooltip:t(`Lower–roman`),type:`lower-roman`,icon:rv},{label:t(`Toggle the upper–roman list style`),tooltip:t(`Upper-roman`),type:`upper-roman`,icon:ov},{label:t(`Toggle the lower–latin list style`),tooltip:t(`Lower-latin`),type:`lower-latin`,icon:nv},{label:t(`Toggle the upper–latin list style`),tooltip:t(`Upper-latin`),type:`upper-latin`,icon:av},{label:t(`Toggle the arabic-indic list style`),tooltip:t(`Arabic-indic`),type:`arabic-indic`,icon:sv}],a=t(`Numbered List`),o=t(`Numbered list styles toolbar`),s=`numberedList`;e.ui.componentFactory.add(s,hB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,buttonIcon:vv,styleGridAriaLabel:o,styleDefinitions:n})),i.includes(`numbered`)&&e.ui.componentFactory.add(`menuBar:${s}`,vB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,styleGridAriaLabel:o,styleDefinitions:n}))}}};function hB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,buttonIcon:i,styleGridAriaLabel:a,styleDefinitions:o}){let s=e.commands.get(n);return c=>{let l=Nx(c,Mx),u=l.buttonView;return l.bind(`isEnabled`).to(s),l.class=`ck-list-styles-dropdown`,u.on(`execute`,()=>{e.execute(n),e.editing.view.focus()}),u.set({label:r,icon:i,tooltip:!0,isToggleable:!0}),u.bind(`isOn`).to(s,`value`,e=>!!e),l.once(`change:isOpen`,()=>{let r=_B({editor:e,normalizedConfig:t,dropdownView:l,parentCommandName:n,styleGridAriaLabel:a,styleDefinitions:o});l.panelView.children.add(r)}),l.on(`execute`,()=>{e.editing.view.focus()}),l}}function gB({editor:e,listStyleCommand:t,parentCommandName:n}){let r=e.locale,i=e.commands.get(n);return({label:a,type:o,icon:s,tooltip:c})=>{let l=new H(r);return l.set({label:a,icon:s,tooltip:c}),l.bind(`isOn`).to(t,`value`,e=>e===o),l.on(`execute`,()=>{i.value?t.value===o?e.execute(n):t.value!==o&&e.execute(`listStyle`,{type:o}):e.model.change(()=>{e.execute(`listStyle`,{type:o})})}),l}}function _B({editor:e,normalizedConfig:t,dropdownView:n,parentCommandName:r,styleDefinitions:i,styleGridAriaLabel:a}){let o=e.locale,s={...t,...r==`numberedList`?null:{startIndex:!1,reversed:!1}},c=r.replace(`List`,``),l=null;if(t.styles.listTypes.includes(c)){let n=e.commands.get(`listStyle`),a=gB({editor:e,parentCommandName:r,listStyleCommand:n}),o=t.styles.listStyleTypes,s=i;if(o){let e=o[c];e&&(s=i.filter(t=>e.includes(t.type)))}let u=yB(n);l=s.filter(u).map(a)}let u=new pB(o,{styleGridAriaLabel:a,enabledProperties:s,styleButtonViews:l});if(t.styles.listTypes.includes(c)&&zx(n,()=>u.stylesView.children.find(e=>e.isOn)),s.startIndex){let t=e.commands.get(`listStart`);u.startIndexFieldView.bind(`isEnabled`).to(t),u.startIndexFieldView.fieldView.bind(`value`).to(t),u.on(`listStart`,(t,n)=>e.execute(`listStart`,n))}if(s.reversed){let t=e.commands.get(`listReversed`);u.reversedSwitchButtonView.bind(`isEnabled`).to(t),u.reversedSwitchButtonView.bind(`isOn`).to(t,`value`,e=>!!e),u.on(`listReversed`,()=>{let n=t.value;e.execute(`listReversed`,{reversed:!n})})}return u.delegate(`execute`).to(n),u}function vB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,styleGridAriaLabel:i,styleDefinitions:a}){return o=>{let s=new uw(o),c=e.commands.get(n),l=e.commands.get(`listStyle`),u=yB(l),d=gB({editor:e,parentCommandName:n,listStyleCommand:l}),f=t.styles.listStyleTypes,p=a;if(f){let e=f[c.type];e&&(p=a.filter(t=>e.includes(t.type)))}let m=p.filter(u).map(d),h=new pB(o,{styleGridAriaLabel:i,enabledProperties:{...t,startIndex:!1,reversed:!1},styleButtonViews:m});return h.delegate(`execute`).to(s),s.buttonView.set({label:r,icon:n===`bulletedList`?o_:vv}),s.panelView.children.add(h),s.bind(`isEnabled`).to(c,`isEnabled`),s.on(`execute`,()=>{e.editing.view.focus()}),s}}function yB(e){return typeof e.isStyleTypeSupported==`function`?t=>e.isStyleTypeSupported(t.type):()=>!0}var bB=class extends F{static get requires(){return[dB,mB]}static get pluginName(){return`ListProperties`}static get isOfficialPlugin(){return!0}},xB=class extends I{constructor(e){super(e),this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){let e=this._getSelectedItems();this.value=this._getValue(e),this.isEnabled=!!e.length}execute(e={}){this.editor.model.change(t=>{let n=this._getSelectedItems(),r=e.forceValue===void 0?!this._getValue(n):e.forceValue;for(let e of n)r?t.setAttribute(`todoListChecked`,!0,e):t.removeAttribute(`todoListChecked`,e)})}_getValue(e){return e.every(e=>e.getAttribute(`todoListChecked`))}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,`todoListChecked`)&&i.push(...kR(r));for(let e of n.getItems({shallow:!0}))t.checkAttribute(e,`todoListChecked`)&&!i.includes(e)&&i.push(...kR(e));return i}},SB=class extends jc{domEventType=[`change`];onDomEvent(e){if(e.target){let t=this.view.domConverter.mapDomToView(e.target);t&&t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&t.findAncestor({classes:`todo-list__label`})&&this.fire(`todoCheckboxChange`,e)}}};const CB=yi(`Ctrl+Enter`);var wB=class extends F{static get pluginName(){return`TodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.model,n=e.editing,r=e.plugins.get(Bz),i=e.config.get(`list.multiBlock`)?`paragraph`:`listItem`;e.commands.add(`todoList`,new QR(e,`todo`)),e.commands.add(`checkTodoList`,new xB(e)),n.view.addObserver(SB),t.schema.extend(`$listItem`,{allowAttributes:`todoListChecked`}),t.schema.addAttributeCheck(e=>{let t=e.last;if(!t.getAttribute(`listItemId`)||t.getAttribute(`listType`)!=`todo`)return!1},`todoListChecked`),e.conversion.for(`upcast`).add(e=>{e.on(`element:input`,EB()),e.on(`element:li`,TB(),{priority:`low`}),e.on(`element:label`,DB({name:`label`,classes:`todo-list__label`})),e.on(`element:label`,DB({name:`label`,classes:[`todo-list__label`,`todo-list__label_without-description`]})),e.on(`element:span`,DB({name:`span`,classes:`todo-list__label__description`})),e.on(`element:ul`,OB({name:`ul`,classes:`todo-list`}))}),e.conversion.for(`downcast`).elementToElement({model:i,view:(e,{writer:t})=>{if(kB(e,r.getListAttributeNames()))return t.createContainerElement(`span`,{class:`todo-list__label__description`})},converterPriority:`highest`}),r.registerDowncastStrategy({scope:`list`,attributeName:`listType`,setAttributeOnDowncast(e,t,n){t==`todo`?e.addClass(`todo-list`,n):e.removeClass(`todo-list`,n)}}),r.registerDowncastStrategy({scope:`itemMarker`,attributeName:`todoListChecked`,createElement(e,t,{dataPipeline:n}){if(t.getAttribute(`listType`)!=`todo`)return null;let r=e.createUIElement(`input`,{type:`checkbox`,...t.getAttribute(`todoListChecked`)?{checked:`checked`}:null,...n?{disabled:`disabled`}:{tabindex:`-1`}});if(n)return r;let i=e.createContainerElement(`span`,{contenteditable:`false`},r);return i.getFillerOffset=()=>null,i},canWrapElement(e){return kB(e,r.getListAttributeNames())},createWrapperElement(e,t,{dataPipeline:n}){let i=[`todo-list__label`];return kB(t,r.getListAttributeNames())||i.push(`todo-list__label_without-description`),e.createAttributeElement(n?`label`:`span`,{class:i.join(` `)})}}),r.on(`checkElement`,(e,{modelElement:t,viewElement:n})=>{let i=kB(t,r.getListAttributeNames());n.hasClass(`todo-list__label__description`)!=i&&(e.return=!0,e.stop())}),r.on(`checkElement`,(t,{modelElement:n,viewElement:r})=>{let i=n.getAttribute(`listType`)==`todo`&&NR(n),a=!1,o=e.editing.view.createPositionBefore(r).getWalker({direction:`backward`});for(let{item:t}of o){if(t.is(`element`)&&e.editing.mapper.toModelElement(t))break;t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&(a=!0)}a!=i&&(t.return=!0,t.stop())}),r.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t){if(!i||i.getAttribute(`listItemId`)!=r.getAttribute(`listItemId`))continue;let t=i.hasAttribute(`todoListChecked`),a=r.hasAttribute(`todoListChecked`);a&&!t?(n.removeAttribute(`todoListChecked`,r),e.return=!0):!a&&t&&(n.setAttribute(`todoListChecked`,!0,r),e.return=!0)}}),t.document.registerPostFixer(e=>{let n=t.document.differ.getChanges(),r=!1;for(let t of n)if(t.type==`attribute`&&t.attributeKey==`listType`){let n=t.range.start.nodeAfter;t.attributeOldValue==`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0)}else if(t.type==`insert`&&t.name!=`$text`)for(let{item:n}of e.createRangeOn(t.position.nodeAfter))n.is(`element`)&&n.getAttribute(`listType`)!=`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0);return r}),this.listenTo(n.view.document,`keydown`,(t,n)=>{vi(n)===CB&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`}),this.listenTo(n.view.document,`todoCheckboxChange`,(e,t)=>{let r=t.target;if(!r||!r.is(`element`,`input`))return;let i=n.view.createPositionAfter(r),a=n.mapper.toModelPosition(i).parent;a&&G(a)&&a.getAttribute(`listType`)==`todo`&&this._handleCheckmarkChange(a)}),this.listenTo(n.view.document,`arrowKey`,jB(t,e.locale),{context:`$text`}),this.listenTo(n.mapper,`viewToModelPosition`,(e,n)=>{let r=n.viewPosition.parent,i=r.is(`attributeElement`,`li`)&&n.viewPosition.offset==0,a=MB(r)&&n.viewPosition.offset<=1,o=r.is(`element`,`span`)&&r.getAttribute(`contenteditable`)==`false`&&MB(r.parent);if(!i&&!a&&!o)return;let s=n.modelPosition.nodeAfter;s&&s.getAttribute(`listType`)==`todo`&&(n.modelPosition=t.createPositionAt(s,0))},{priority:`low`}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=NB(r),o=NB(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function TB(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>e.getAttribute(`listType`)===`todo`&&i.checkAttribute(e,`listItemId`)).reduce((e,t)=>{let n=t.getAttribute(`listItemId`);return e.has(n)||e.set(n,kR(t)),e},new Map);for(let[,e]of a.entries())if(e.some(e=>e.getAttribute(`todoListChecked`)))for(let t of e)r.setAttribute(`todoListChecked`,!0,t)}}function EB(){return(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(!n.consumable.test(a,{name:!0})||a.getAttribute(`type`)!=`checkbox`||!r.isAtStart||!i.hasAttribute(`listType`))return;n.consumable.consume(a,{name:!0});let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)}}function DB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);i&&r.consumable.consume(n.viewItem,i.match)&&Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor))}}function OB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);if(!i)return;let a=i.match;a.name=!1,r.consumable.consume(n.viewItem,a)}}function kB(e,t){return(e.is(`element`,`paragraph`)||e.is(`element`,`listItem`))&&e.getAttribute(`listType`)==`todo`&&NR(e)&&AB(e,t)}function AB(e,t){for(let n of e.getAttributeKeys())if(!n.startsWith(`selection:`)&&!t.includes(n))return!1;return!0}function jB(e,t){return(n,r)=>{let i=Si(r.keyCode,t.contentLanguageDirection),a=e.schema,o=e.document.selection;if(!o.isCollapsed)return;let s=o.getFirstPosition(),c=s.parent;if(i==`right`&&s.isAtEnd){let t=a.getNearestSelectionRange(e.createPositionAfter(c),`forward`);if(!t)return;let i=t.start.parent;i&&G(i)&&i.getAttribute(`listType`)==`todo`&&(e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop())}else if(i==`left`&&s.isAtStart&&G(c)&&c.getAttribute(`listType`)==`todo`){let t=a.getNearestSelectionRange(e.createPositionBefore(c),`backward`);if(!t)return;e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function MB(e){return!!e&&e.is(`attributeElement`)&&e.hasClass(`todo-list__label`)}function NB(e){return!e||!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`)?!1:e.getAttribute(`listType`)==`todo`}var PB=class extends F{static get pluginName(){return`TodoListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;Wz(this.editor,`todoList`,e(`To-do List`),Ey)}},FB=class extends F{static get requires(){return[wB,PB]}static get pluginName(){return`TodoList`}static get isOfficialPlugin(){return!0}},IB=class extends I{type;constructor(e,t){super(e),this.type=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>RB(e,t.schema)),i=e.forceValue===void 0?this.value:!e.forceValue;t.change(e=>{if(i){let t=r[r.length-1].nextSibling,n=1/0,i=[];for(;t&&t.name==`listItem`&&t.getAttribute(`listIndent`)!==0;){let e=t.getAttribute(`listIndent`);e=n;)a>i.getAttribute(`listIndent`)&&(a=i.getAttribute(`listIndent`)),i.getAttribute(`listIndent`)==a&&e[t?`unshift`:`push`](i),i=i[t?`previousSibling`:`nextSibling`]}}function RB(e,t){return t.checkChild(e.parent,`listItem`)&&!t.isObject(e)}var zB=class extends I{_indentBy;constructor(e,t){super(e),this._indentBy=t==`forward`?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model,t=e.document,n=Array.from(t.selection.getSelectedBlocks());e.change(e=>{let t=n[n.length-1],r=t.nextSibling;for(;r&&r.name==`listItem`&&r.getAttribute(`listIndent`)>t.getAttribute(`listIndent`);)n.push(r),r=r.nextSibling;this._indentBy<0&&(n=n.reverse());for(let t of n){let n=t.getAttribute(`listIndent`)+this._indentBy;n<0?e.rename(t,`paragraph`):e.setAttribute(`listIndent`,n,t)}this.fire(`_executeCleanup`,n)})}_checkEnabled(){let e=j(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is(`element`,`listItem`))return!1;if(this._indentBy>0){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.previousSibling;for(;r&&r.is(`element`,`listItem`)&&r.getAttribute(`listIndent`)>=t;){if(r.getAttribute(`listIndent`)==t)return r.getAttribute(`listType`)==n;r=r.previousSibling}return!1}return!0}};function BB(e){let t=e.createContainerElement(`li`);return t.getFillerOffset=QB,t}function VB(e,t){let n=t.mapper,r=t.writer,i=e.getAttribute(`listType`)==`numbered`?`ol`:`ul`,a=BB(r),o=r.createContainerElement(i,null);return r.insert(r.createPositionAt(o,0),a),n.bindElements(e,a),a}function HB(e,t,n,r){let i=t.parent,a=n.mapper,o=n.writer,s=a.toViewPosition(r.createPositionBefore(e)),c=GB(e.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:e.getAttribute(`listIndent`)}),l=e.previousSibling;if(c&&c.getAttribute(`listIndent`)==e.getAttribute(`listIndent`)){let e=a.toViewElement(c);s=o.breakContainer(o.createPositionAfter(e))}else if(l&&l.name==`listItem`){s=a.toViewPosition(r.createPositionAt(l,`end`));let e=a.findMappedViewAncestor(s),t=KB(e);s=t?o.createPositionBefore(t):o.createPositionAt(e,`end`)}else s=a.toViewPosition(r.createPositionBefore(e));if(s=WB(s),o.insert(s,i),l&&l.name==`listItem`){let e=a.toViewElement(l),n=o.createRange(o.createPositionAt(e,0),s).getWalker({ignoreElementEnd:!0});for(let e of n)if(e.item.is(`element`,`li`)){let r=o.breakContainer(o.createPositionBefore(e.item)),i=e.item.parent,a=o.createPositionAt(t,`end`);UB(o,a.nodeBefore,a.nodeAfter),o.move(o.createRangeOn(i),a),n._position=r}}else{let n=i.nextSibling;if(n&&(n.is(`element`,`ul`)||n.is(`element`,`ol`))){let r=null;for(let t of n.getChildren()){let n=a.toModelElement(t);if(n&&n.getAttribute(`listIndent`)>e.getAttribute(`listIndent`))r=t;else break}r&&(o.breakContainer(o.createPositionAfter(r)),o.move(o.createRangeOn(r.parent),o.createPositionAt(t,`end`)))}}UB(o,i,i.nextSibling),UB(o,i.previousSibling,i)}function UB(e,t,n){return!t||!n||t.name!=`ul`&&t.name!=`ol`||t.name!=n.name||t.getAttribute(`class`)!==n.getAttribute(`class`)?null:e.mergeContainers(e.createPositionAfter(t))}function WB(e){return e.getLastMatchingPosition(e=>e.item.is(`uiElement`))}function GB(e,t){let n=!!t.sameIndent,r=!!t.smallerIndent,i=t.listIndent,a=e;for(;a&&a.name==`listItem`;){let e=a.getAttribute(`listIndent`);if(n&&i==e||r&&i>e)return a;a=t.direction===`forward`?a.nextSibling:a.previousSibling}return null}function KB(e){for(let t of e.getChildren())if(t.name==`ul`||t.name==`ol`)return t;return null}function qB(e,t){let n=[],r=e.parent,i={ignoreElementEnd:!1,startPosition:e,shallow:!0,direction:t},a=r.getAttribute(`listIndent`),o=[...new Xc(i)].filter(e=>e.item.is(`element`)).map(e=>e.item);for(let e of o){if(!e.is(`element`,`listItem`)||e.getAttribute(`listIndent`)a)){if(e.getAttribute(`listType`)!==r.getAttribute(`listType`)||e.getAttribute(`listStyle`)!==r.getAttribute(`listStyle`)||e.getAttribute(`listReversed`)!==r.getAttribute(`listReversed`)||e.getAttribute(`listStart`)!==r.getAttribute(`listStart`))break;t===`backward`?n.unshift(e):n.push(e)}}return n}function JB(e){let t=[...e.document.selection.getSelectedBlocks()].filter(e=>e.is(`element`,`listItem`)).map(t=>{let n=e.change(e=>e.createPositionAt(t,0));return[...qB(n,`backward`),...qB(n,`forward`)]}).flat();return t=[...new Set(t)],t}const YB=[`disc`,`circle`,`square`],XB=[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`];function ZB(e){return YB.includes(e)?`bulleted`:XB.includes(e)?`numbered`:null}function QB(){let e=!this.isEmpty&&(this.getChild(0).name==`ul`||this.getChild(0).name==`ol`);return this.isEmpty||e?0:$o.call(this)}var $B=class extends F{static get pluginName(){return`LegacyListUtils`}static get isOfficialPlugin(){return!0}getListTypeFromListStyleType(e){return ZB(e)}getSelectedListItems(e){return JB(e)}getSiblingNodes(e,t){return qB(e,t)}};function eV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`))return;i.consume(n.item,`insert`),i.consume(n.item,`attribute:listType`),i.consume(n.item,`attribute:listIndent`);let a=n.item;HB(a,VB(a,r),r,e)}}function tV(e){return(t,n,r)=>{let i=r.mapper.toViewPosition(n.position).getLastMatchingPosition(e=>!e.item.is(`element`,`li`)).nodeAfter,a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o),l=a.remove(c);s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(r.mapper.toModelElement(i).getAttribute(`listIndent`)+1,n.position,c.start,i,r,e);for(let e of a.createRangeIn(l).getItems())r.mapper.unbindViewElement(e);t.stop()}}const nV=(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let r=n.mapper.toViewElement(t.item),i=n.writer;i.breakContainer(i.createPositionBefore(r)),i.breakContainer(i.createPositionAfter(r));let a=r.parent,o=t.attributeNewValue==`numbered`?`ol`:`ul`;i.rename(o,a)},rV=(e,t,n)=>{n.consumable.consume(t.item,e.name);let r=n.mapper.toViewElement(t.item).parent,i=n.writer;UB(i,r,r.nextSibling),UB(i,r.previousSibling,r)};function iV(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,`attribute:listIndent`))return;let i=r.mapper.toViewElement(n.item),a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o);a.remove(c),s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(n.attributeOldValue+1,n.range.start,c.start,i,r,e),HB(n.item,i,r,e);for(let e of n.item.getChildren())r.consumable.consume(e,`insert`)}}const aV=(e,t,n)=>{if(n.consumable.test(t.item,e.name)&&t.item.name!=`listItem`){let e=n.mapper.toViewPosition(t.range.start),r=n.writer,i=[];for(;(e.parent.name==`ul`||e.parent.name==`ol`)&&(e=r.breakContainer(e),e.parent.name==`li`);){let t=e,n=r.createPositionAt(e.parent,`end`);if(!t.isEqual(n)){let e=r.remove(r.createRange(t,n));i.push(e)}e=r.createPositionAfter(e.parent)}if(i.length>0){for(let t=0;t0){let t=UB(r,n,n.nextSibling);t&&t.parent==n&&e.offset--}}UB(r,e.nodeBefore,e.nodeAfter)}}},oV=(e,t,n)=>{let r=n.mapper.toViewPosition(t.position),i=r.nodeBefore,a=r.nodeAfter;UB(n.writer,i,a)},sV=(e,t,n)=>{if(n.consumable.consume(t.viewItem,{name:!0})){let e=n.writer,r=e.createElement(`listItem`),i=vV(t.viewItem);e.setAttribute(`listIndent`,i,r);let a=t.viewItem.parent&&t.viewItem.parent.name==`ol`?`numbered`:`bulleted`;if(e.setAttribute(`listType`,a,r),!n.safeInsert(r,t.modelCursor))return;let o=mV(r,t.viewItem.getChildren(),n);t.modelRange=e.createRange(t.modelCursor,o),n.updateConversionResult(r,t)}},cV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){let e=Array.from(t.viewItem.getChildren());for(let t of e)t.is(`element`,`li`)||_V(t)||t._remove()}},lV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){if(t.viewItem.childCount===0)return;let e=[...t.viewItem.getChildren()],n=!1;for(let t of e)n&&!_V(t)&&t._remove(),_V(t)&&(n=!0)}};function uV(e){return(t,n)=>{if(n.isPhantom)return;let r=n.modelPosition.nodeBefore;if(r&&r.is(`element`,`listItem`)){let t=n.mapper.toViewElement(r),i=t.getAncestors().find(_V),a=e.createPositionAt(t,0).getWalker();for(let e of a)if(e.type==`elementStart`&&e.item.is(`element`,`li`)){n.viewPosition=e.previousPosition;break}else if(e.type==`elementEnd`&&e.item==i){n.viewPosition=e.nextPosition;break}}}}function dV(e){return(t,n)=>{let r=n.viewPosition,i=r.parent,a=n.mapper;if(i.name==`ul`||i.name==`ol`){if(r.isAtEnd){let t=a.toModelElement(r.nodeBefore),i=a.getModelLength(r.nodeBefore);n.modelPosition=e.createPositionBefore(t).getShiftedBy(i)}else{let t=a.toModelElement(r.nodeAfter);n.modelPosition=e.createPositionBefore(t)}t.stop()}else if(i.name==`li`&&r.nodeBefore&&(r.nodeBefore.name==`ul`||r.nodeBefore.name==`ol`)){let o=a.toModelElement(i),s=1,c=r.nodeBefore;for(;c&&_V(c);)s+=a.getModelLength(c),c=c.previousSibling;n.modelPosition=e.createPositionBefore(o).getShiftedBy(s),t.stop()}}}function fV(e,t){let n=e.document.differ.getChanges(),r=new Map,i=!1;for(let r of n)if(r.type==`insert`&&r.name==`listItem`)a(r.position);else if(r.type==`insert`&&r.name!=`listItem`){if(r.name!=`$text`){let n=r.position.nodeAfter;n.hasAttribute(`listIndent`)&&(t.removeAttribute(`listIndent`,n),i=!0),n.hasAttribute(`listType`)&&(t.removeAttribute(`listType`,n),i=!0),n.hasAttribute(`listStyle`)&&(t.removeAttribute(`listStyle`,n),i=!0),n.hasAttribute(`listReversed`)&&(t.removeAttribute(`listReversed`,n),i=!0),n.hasAttribute(`listStart`)&&(t.removeAttribute(`listStart`,n),i=!0);for(let t of Array.from(e.createRangeIn(n)).filter(e=>e.item.is(`element`,`listItem`)))a(t.previousPosition)}a(r.position.getShiftedBy(r.length))}else r.type==`remove`&&r.name==`listItem`?a(r.position):(r.type==`attribute`&&r.attributeKey==`listIndent`||r.type==`attribute`&&r.attributeKey==`listType`)&&a(r.range.start);for(let e of r.values())o(e),s(e);return i;function a(e){let t=e.nodeBefore;if(!t||!t.is(`element`,`listItem`)){let t=e.nodeAfter;t&&t.is(`element`,`listItem`)&&r.set(t,t)}else{let e=t;if(r.has(e))return;for(let t=e.previousSibling;t&&t.is(`element`,`listItem`);t=e.previousSibling)if(e=t,r.has(e))return;r.set(t,e)}}function o(e){let n=0,r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(a>n){let o;r===null?(r=a-n,o=n):(r>a&&(r=a),o=a-r),t.setAttribute(`listIndent`,o,e),i=!0}else r=null,n=e.getAttribute(`listIndent`)+1;e=e.nextSibling}}function s(e){let n=[],r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(r&&r.getAttribute(`listIndent`)>a&&(n=n.slice(0,a+1)),a!=0)if(n[a]){let r=n[a];e.getAttribute(`listType`)!=r&&(t.setAttribute(`listType`,r,e),i=!0)}else n[a]=e.getAttribute(`listType`);r=e,e=e.nextSibling}}}const pV=function(e,[t,n]){let r=this,i=t.is(`documentFragment`)?t.getChild(0):t,a;if(a=n?r.createSelection(n):r.document.selection,i&&i.is(`element`,`listItem`)){let e=a.getFirstPosition(),t=null;if(e.parent.is(`element`,`listItem`)?t=e.parent:e.nodeBefore&&e.nodeBefore.is(`element`,`listItem`)&&(t=e.nodeBefore),t){let e=t.getAttribute(`listIndent`);if(e>0)for(;i&&i.is(`element`,`listItem`);)i._setAttribute(`listIndent`,i.getAttribute(`listIndent`)+e),i=i.nextSibling}}};function mV(e,t,n){let{writer:r,schema:i}=n,a=r.createPositionAfter(e);for(let o of t)if(o.name==`ul`||o.name==`ol`)a=n.convertItem(o,a).modelCursor;else{let t=n.convertItem(o,r.createPositionAt(e,`end`)),s=t.modelRange.start.nodeAfter;s&&s.is(`element`)&&!i.checkChild(e,s.name)&&(e=t.modelCursor.parent.is(`element`,`listItem`)?t.modelCursor.parent:hV(t.modelCursor),a=r.createPositionAfter(e))}return a}function hV(e){let t=new Xc({startPosition:e}),n;do n=t.next();while(!n.value.item.is(`element`,`listItem`));return n.value.item}function gV(e,t,n,r,i,a){let o=GB(t.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:e}),s=i.mapper,c=i.writer,l=o?o.getAttribute(`listIndent`):null,u;if(!o)u=n;else if(l==e){let e=s.toViewElement(o).parent;u=c.createPositionAfter(e)}else{let e=a.createPositionAt(o,`end`);u=s.toViewPosition(e)}u=WB(u);for(let e of[...r.getChildren()])_V(e)&&(u=c.move(c.createRangeOn(e),u).end,UB(c,e,e.nextSibling),UB(c,e.previousSibling,e))}function _V(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function vV(e){let t=0,n=e.parent;for(;n;){if(n.is(`element`,`li`))t++;else{let e=n.previousSibling;e&&e.is(`element`,`li`)&&t++}n=n.parent}return t}var yV=class extends F{static get pluginName(){return`LegacyListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,$B]}init(){let e=this.editor;e.model.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributes:[`listType`,`listIndent`]});let t=e.data,n=e.editing;e.model.document.registerPostFixer(t=>fV(e.model,t)),n.mapper.registerViewToModelLength(`li`,bV),t.mapper.registerViewToModelLength(`li`,bV),n.mapper.on(`modelToViewPosition`,uV(n.view)),n.mapper.on(`viewToModelPosition`,dV(e.model)),t.mapper.on(`modelToViewPosition`,uV(n.view)),e.conversion.for(`editingDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model)),t.on(`attribute:listType:listItem`,nV,{priority:`high`}),t.on(`attribute:listType:listItem`,rV,{priority:`low`}),t.on(`attribute:listIndent:listItem`,iV(e.model)),t.on(`remove:listItem`,tV(e.model)),t.on(`remove`,oV,{priority:`low`})}),e.conversion.for(`dataDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model))}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ul`,cV,{priority:`high`}),e.on(`element:ol`,cV,{priority:`high`}),e.on(`element:li`,lV,{priority:`high`}),e.on(`element:li`,sV)}),e.model.on(`insertContent`,pV,{priority:`high`}),e.commands.add(`numberedList`,new IB(e,`numbered`)),e.commands.add(`bulletedList`,new IB(e,`bulleted`)),e.commands.add(`indentList`,new zB(e,`forward`)),e.commands.add(`outdentList`,new zB(e,`backward`));let r=n.view.document;this.listenTo(r,`enter`,(e,t)=>{let n=this.editor.model.document,r=n.selection.getLastPosition().parent;n.selection.isCollapsed&&r.name==`listItem`&&r.isEmpty&&(this.editor.execute(`outdentList`),t.preventDefault(),e.stop())},{context:`li`}),this.listenTo(r,`delete`,(e,t)=>{if(t.direction!==`backward`)return;let n=this.editor.model.document.selection;if(!n.isCollapsed)return;let r=n.getFirstPosition();if(!r.isAtStart)return;let i=r.parent;i.name===`listItem`&&(i.previousSibling&&i.previousSibling.name===`listItem`||(this.editor.execute(`outdentList`),t.preventDefault(),e.stop()))},{context:`li`}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`)),n&&n.registerChildCommand(e.get(`outdentList`))}};function bV(e){let t=1;for(let n of e.getChildren())if(n.name==`ul`||n.name==`ol`)for(let e of n.getChildren())t+=bV(e);return t}var xV=class extends F{static get requires(){return[yV,Kz]}static get pluginName(){return`LegacyList`}static get isOfficialPlugin(){return!0}},SV=class extends I{defaultType;constructor(e,t){super(e),this.defaultType=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){this._tryToConvertItemsToList(e);let t=this.editor.model,n=JB(t);n.length&&t.change(t=>{for(let r of n)t.setAttribute(`listStyle`,e.type||this.defaultType,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=ZB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},CV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listReversed`,!!e.reversed,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listReversed`):null}},wV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listStart`,e>=0?e:1,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listStart`):null}};const TV=`default`;var EV=class extends F{static get requires(){return[yV]}static get pluginName(){return`LegacyListPropertiesEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`list`,{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){let e=this.editor,t=e.model,n=DV(e.config.get(`list.properties`));t.schema.extend(`listItem`,{allowAttributes:n.map(e=>e.attributeName)});for(let t of n)t.addCommand(e);this.listenTo(e.commands.get(`indentList`),`_executeCleanup`,AV(e,n)),this.listenTo(e.commands.get(`outdentList`),`_executeCleanup`,jV(e,n)),this.listenTo(e.commands.get(`bulletedList`),`_executeCleanup`,IV(e)),this.listenTo(e.commands.get(`numberedList`),`_executeCleanup`,IV(e)),t.document.registerPostFixer(MV(e,n)),e.conversion.for(`upcast`).add(OV(n)),e.conversion.for(`downcast`).add(kV(n)),this._mergeListAttributesWhileMergingLists(n)}afterInit(){let e=this.editor;e.commands.get(`todoList`)&&e.model.document.registerPostFixer(FV(e))}_mergeListAttributesWhileMergingLists(e){let t=this.editor.model,n;this.listenTo(t,`deleteContent`,(e,[t])=>{let r=t.getFirstPosition(),i=t.getLastPosition();if(r.parent===i.parent||!r.parent.is(`element`,`listItem`))return;let a=i.parent.nextSibling;if(!a||!a.is(`element`,`listItem`))return;let o=GB(r.parent,{sameIndent:!0,listIndent:a.getAttribute(`listIndent`)});o&&o.getAttribute(`listType`)===a.getAttribute(`listType`)&&(n=o)},{priority:`high`}),this.listenTo(t,`deleteContent`,()=>{n&&=(t.change(t=>{let r=GB(n.nextSibling,{sameIndent:!0,listIndent:n.getAttribute(`listIndent`),direction:`forward`});if(!r){n=null;return}let i=[r,...qB(t.createPositionAt(r,0),`forward`)];for(let r of i)for(let i of e)if(i.appliesToListItem(r)){let e=i.attributeName,a=n.getAttribute(e);t.setAttribute(e,a,r)}}),null)},{priority:`low`})}};function DV(e){let t=[];return e.styles&&t.push({attributeName:`listStyle`,defaultValue:TV,addCommand(e){e.commands.add(`listStyle`,new SV(e,TV))},appliesToListItem(){return!0},setAttributeOnDowncast(e,t,n){t&&t!==TV?e.setStyle(`list-style-type`,t,n):e.removeStyle(`list-style-type`,n)},getAttributeOnUpcast(e){return rB(e.getStyle(`list-style-type`))||TV}}),e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,addCommand(e){e.commands.add(`listReversed`,new CV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,addCommand(e){e.commands.add(`listStart`,new wV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}function OV(e){return t=>{t.on(`element:li`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem.parent,a=n.modelRange.start.nodeAfter||n.modelRange.end.nodeBefore;for(let t of e)if(t.appliesToListItem(a)){let e=t.getAttributeOnUpcast(i);r.writer.setAttribute(t.attributeName,e,a)}},{priority:`low`})}}function kV(e){return n=>{for(let r of e)n.on(`attribute:${r.attributeName}:listItem`,(e,n,i)=>{let a=i.writer,o=n.item,s=GB(o.previousSibling,{sameIndent:!0,listIndent:o.getAttribute(`listIndent`),direction:`backward`}),c=i.mapper.toViewElement(o);t(o,s)||a.breakContainer(a.createPositionBefore(c)),r.setAttributeOnDowncast(a,n.attributeNewValue,c.parent)},{priority:`low`})};function t(e,t){return t&&e.getAttribute(`listType`)===t.getAttribute(`listType`)&&e.getAttribute(`listIndent`)===t.getAttribute(`listIndent`)&&e.getAttribute(`listStyle`)===t.getAttribute(`listStyle`)&&e.getAttribute(`listReversed`)===t.getAttribute(`listReversed`)&&e.getAttribute(`listStart`)===t.getAttribute(`listStart`)}}function AV(e,t){return(n,r)=>{let i=r[0],a=i.getAttribute(`listIndent`),o=r.filter(e=>e.getAttribute(`listIndent`)===a),s=null;i.previousSibling.getAttribute(`listIndent`)+1!==a&&(s=GB(i.previousSibling,{sameIndent:!0,direction:`backward`,listIndent:a})),e.model.change(e=>{for(let n of o)for(let r of t)if(r.appliesToListItem(n)){let t=s==null?r.defaultValue:s.getAttribute(r.attributeName);e.setAttribute(r.attributeName,t,n)}})}}function jV(e,t){return(n,r)=>{if(r=r.reverse().filter(e=>e.is(`element`,`listItem`)),!r.length)return;let i=r[0].getAttribute(`listIndent`),a=r[0].getAttribute(`listType`),o=r[0].previousSibling;if(o.is(`element`,`listItem`))for(;o.getAttribute(`listIndent`)!==i;)o=o.previousSibling;else o=null;o||=r[r.length-1].nextSibling,!(!o||!o.is(`element`,`listItem`))&&o.getAttribute(`listType`)===a&&e.model.change(e=>{let n=r.filter(e=>e.getAttribute(`listIndent`)===i);for(let r of n)for(let n of t)if(n.appliesToListItem(r)){let t=n.attributeName,i=o.getAttribute(t);e.setAttribute(t,i,r)}})}}function MV(e,t){return n=>{let r=!1,i=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)!==`todo`);if(!i.length)return r;let a=i[i.length-1].nextSibling;if((!a||!a.is(`element`,`listItem`))&&(a=i[0].previousSibling,a)){let e=i[0].getAttribute(`listIndent`);for(;a.is(`element`,`listItem`)&&a.getAttribute(`listIndent`)!==e&&(a=a.previousSibling,a););}for(let e of t){let t=e.attributeName;for(let o of i){if(!e.appliesToListItem(o)){n.removeAttribute(t,o);continue}if(!o.hasAttribute(t))NV(a,o,e)?n.setAttribute(t,a.getAttribute(t),o):n.setAttribute(t,e.defaultValue,o),r=!0;else{let i=o.previousSibling;PV(i,o,e.attributeName)&&(n.setAttribute(t,i.getAttribute(t),o),r=!0)}}}return r}}function NV(e,t,n){if(!e)return!1;let r=e.getAttribute(n.attributeName);return!(!r||r==n.defaultValue||e.getAttribute(`listType`)!==t.getAttribute(`listType`))}function PV(e,t,n){if(!e||!e.is(`element`,`listItem`)||t.getAttribute(`listType`)!==e.getAttribute(`listType`))return!1;let r=e.getAttribute(`listIndent`);if(r<1||r!==t.getAttribute(`listIndent`))return!1;let i=e.getAttribute(n);return!(!i||i===t.getAttribute(n))}function FV(e){return t=>{let n=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)===`todo`&&(e.hasAttribute(`listStyle`)||e.hasAttribute(`listReversed`)||e.hasAttribute(`listStart`)));if(!n.length)return!1;for(let e of n)t.removeAttribute(`listStyle`,e),t.removeAttribute(`listReversed`,e),t.removeAttribute(`listStart`,e);return!0}}function IV(e){return(t,n)=>{n=n.filter(e=>e.is(`element`,`listItem`)),e.model.change(e=>{for(let t of n)e.removeAttribute(`listStyle`,t)})}}function LV(e){let t=[];for(let n of e){let e=RV(n);e&&e.is(`element`,`listItem`)&&t.push(e)}return t}function RV(e){return e.type===`attribute`?e.range.start.nodeAfter:e.type===`insert`?e.position.nodeAfter:null}var zV=class extends F{static get requires(){return[EV,mB]}static get pluginName(){return`LegacyListProperties`}static get isOfficialPlugin(){return!0}};const BV=`todoListChecked`;var VV=class extends I{_selectedElements;constructor(e){super(e),this._selectedElements=[],this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every(e=>!!e.getAttribute(BV)),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,BV)&&i.push(r);for(let e of n.getItems())t.checkAttribute(e,BV)&&!i.includes(e)&&i.push(e);return i}execute(e={}){this.editor.model.change(t=>{for(let n of this._selectedElements)(e.forceValue===void 0?!this.value:e.forceValue)?t.setAttribute(BV,!0,n):t.removeAttribute(BV,n)})}};function HV(e,t){return(n,r,i)=>{let a=i.consumable;if(!a.test(r.item,`insert`)||!a.test(r.item,`attribute:listType`)||!a.test(r.item,`attribute:listIndent`)||r.item.getAttribute(`listType`)!=`todo`)return;let o=r.item;a.consume(o,`insert`),a.consume(o,`attribute:listType`),a.consume(o,`attribute:listIndent`),a.consume(o,`attribute:todoListChecked`);let s=i.writer,c=VB(o,i),l=JV(o,s,!!o.getAttribute(`todoListChecked`),t),u=s.createContainerElement(`span`,{class:`todo-list__label__description`});s.addClass(`todo-list`,c.parent),s.insert(s.createPositionAt(c,0),l),s.insert(s.createPositionAfter(l),u),HB(o,c,i,e)}}function UV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`)||n.item.getAttribute(`listType`)!=`todo`)return;let a=n.item;i.consume(a,`insert`),i.consume(a,`attribute:listType`),i.consume(a,`attribute:listIndent`),i.consume(a,`attribute:todoListChecked`);let o=r.writer,s=VB(a,r);o.addClass(`todo-list`,s.parent);let c=o.createContainerElement(`label`,{class:`todo-list__label`}),l=o.createEmptyElement(`input`,{type:`checkbox`,disabled:`disabled`}),u=o.createContainerElement(`span`,{class:`todo-list__label__description`});a.getAttribute(`todoListChecked`)&&o.setAttribute(`checked`,`checked`,l),o.insert(o.createPositionAt(s,0),c),o.insert(o.createPositionAt(c,0),l),o.insert(o.createPositionAfter(l),u),HB(a,s,r,e)}}const WV=(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(a.getAttribute(`type`)!=`checkbox`||i.name!=`listItem`||!r.isAtStart||!n.consumable.consume(a,{name:!0}))return;let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)};function GV(e,t){return(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=i.mapper.toViewElement(r.item),o=i.writer,s=YV(a,t);if(r.attributeNewValue==`todo`){let t=!!r.item.getAttribute(`todoListChecked`),n=JV(r.item,o,t,e),i=o.createContainerElement(`span`,{class:`todo-list__label__description`}),s=o.createRangeIn(a),c=KB(a),l=WB(s.start),u=c?o.createPositionBefore(c):s.end,d=o.createRange(l,u);o.addClass(`todo-list`,a.parent),o.move(d,o.createPositionAt(i,0)),o.insert(o.createPositionAt(a,0),n),o.insert(o.createPositionAfter(n),i)}else if(r.attributeOldValue==`todo`){let e=XV(a,t);o.removeClass(`todo-list`,a.parent),o.remove(s),o.move(o.createRangeIn(e),o.createPositionBefore(e)),o.remove(e)}}}function KV(e){return(t,n,r)=>{if(n.item.getAttribute(`listType`)!=`todo`||!r.consumable.consume(n.item,`attribute:todoListChecked`))return;let{mapper:i,writer:a}=r,o=!!n.item.getAttribute(`todoListChecked`),s=i.toViewElement(n.item).getChild(0),c=JV(n.item,a,o,e);a.insert(a.createPositionAfter(s),c),a.remove(s)}}function qV(e){return(t,n)=>{let r=n.modelPosition,i=r.parent;if(!i.is(`element`,`listItem`)||i.getAttribute(`listType`)!=`todo`)return;let a=XV(n.mapper.toViewElement(i),e);a&&(n.viewPosition=n.mapper.findPositionIn(a,r.offset))}}function JV(e,t,n,r){return t.createUIElement(`label`,{class:`todo-list__label`,contenteditable:!1},function(t){let i=mr(document,`input`,{type:`checkbox`,tabindex:`-1`});n&&i.setAttribute(`checked`,`checked`),i.addEventListener(`change`,()=>r(e));let a=this.toDomElement(t);return a.appendChild(i),a})}function YV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`uiElement`,`label`))return e.item}function XV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`containerElement`,`span`)&&e.item.hasClass(`todo-list__label__description`))return e.item}const ZV=yi(`Ctrl+Enter`);var QV=class extends F{static get pluginName(){return`LegacyTodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[yV]}init(){let e=this.editor,{editing:t,data:n,model:r}=e;r.schema.extend(`listItem`,{allowAttributes:[`todoListChecked`]}),r.schema.addAttributeCheck((e,t)=>{let n=e.last;if(t==`todoListChecked`&&n.name==`listItem`&&n.getAttribute(`listType`)!=`todo`)return!1}),e.commands.add(`todoList`,new IB(e,`todo`));let i=new VV(e);e.commands.add(`checkTodoList`,i),e.commands.add(`todoListCheck`,i),n.downcastDispatcher.on(`insert:listItem`,UV(r),{priority:`high`}),n.upcastDispatcher.on(`element:input`,WV,{priority:`high`}),t.downcastDispatcher.on(`insert:listItem`,HV(r,e=>this._handleCheckmarkChange(e)),{priority:`high`}),t.downcastDispatcher.on(`attribute:listType:listItem`,GV(e=>this._handleCheckmarkChange(e),t.view)),t.downcastDispatcher.on(`attribute:todoListChecked:listItem`,KV(e=>this._handleCheckmarkChange(e))),t.mapper.on(`modelToViewPosition`,qV(t.view)),n.mapper.on(`modelToViewPosition`,qV(t.view)),this.listenTo(t.view.document,`arrowKey`,$V(r,e.locale),{context:`li`}),this.listenTo(t.view.document,`keydown`,(t,n)=>{vi(n)===ZV&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`});let a=new Set;this.listenTo(r,`applyOperation`,(e,t)=>{let n=t[0];if(n.type==`rename`&&n.oldName==`listItem`){let e=n.position.nodeAfter;e.hasAttribute(`todoListChecked`)&&a.add(e)}else if(n.type==`changeAttribute`&&n.key==`listType`&&n.oldValue===`todo`)for(let e of n.range.getItems())e.hasAttribute(`todoListChecked`)&&e.getAttribute(`listType`)!==`todo`&&a.add(e)}),r.document.registerPostFixer(e=>{let t=!1;for(let n of a)e.removeAttribute(`todoListChecked`,n),t=!0;return a.clear(),t}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=eH(r),o=eH(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function $V(e,t){return(n,r)=>{if(Si(r.keyCode,t.contentLanguageDirection)!=`left`)return;let i=e.schema,a=e.document.selection;if(!a.isCollapsed)return;let o=a.getFirstPosition(),s=o.parent;if(s.name===`listItem`&&s.getAttribute(`listType`)==`todo`&&o.isAtStart){let t=i.getNearestSelectionRange(e.createPositionBefore(s),`backward`);t&&e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function eH(e){return!!e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)===`todo`}var tH=class extends F{static get requires(){return[QV,PB]}static get pluginName(){return`LegacyTodoList`}static get isOfficialPlugin(){return!0}},nH=class extends F{static get pluginName(){return`AdjacentListsSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`listSeparator`,{allowWhere:`$block`,isBlock:!0}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ol`,rH()),e.on(`element:ul`,rH())}).elementToElement({model:`listSeparator`,view:`ck-list-separator`}),e.conversion.for(`editingDowncast`).elementToElement({model:`listSeparator`,view:{name:`div`,classes:[`ck-list-separator`,`ck-hidden`]}}),e.conversion.for(`dataDowncast`).elementToElement({model:`listSeparator`,view:(e,t)=>{let n=t.writer.createContainerElement(`ck-list-separator`);return t.writer.setCustomProperty(`dataPipeline:transparentRendering`,!0,n),n.getFillerOffset=()=>null,n}})}};function rH(){return(e,t,n)=>{let r=t.viewItem,i=r.nextSibling;if(!i||r.name!==i.name)return;t.modelRange||Object.assign(t,n.convertChildren(t.viewItem,t.modelCursor));let a=n.writer,o=a.createElement(`listSeparator`);if(!n.safeInsert(o,t.modelCursor))return;let s=n.getSplitParts(o);t.modelRange=a.createRange(t.modelRange.start,a.createPositionAfter(s[s.length-1])),n.updateConversionResult(o,t)}}var iH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this._getFirstListItemIfSelectionIsAtListStart(this.editor.model.document.selection);this.isEnabled=!!e&&this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentList`))}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=t.plugins.get(`ListUtils`);n.change(t=>{let a=this._getFirstListItemIfSelectionIsAtListStart(r),o=[];if(e.firstListOnly)o.push(a);else{let e=Array.from(r.getSelectedBlocks());for(let t of e)G(t)&&t.getAttribute(`listIndent`)===0&&n.schema.checkAttribute(t,`blockIndentList`)&&o.push(t)}let s=i.expandListBlocksToCompleteList(o);for(let e of s){let n=e.getAttribute(`blockIndentList`),r=this._indentBehavior.getNextIndent(n);r?t.setAttribute(`blockIndentList`,r,e):t.removeAttribute(`blockIndentList`,e)}})}_getFirstListItemIfSelectionIsAtListStart(e){let t=e.getFirstPosition(),n=this.editor.plugins.get(`ListUtils`),r=t.parent,i=this.editor.model.schema;return t.isAtStart&&G(r)&&r.getAttribute(`listIndent`)==0&&i.checkAttribute(r,`blockIndentList`)&&n.isFirstListItemInList(r)?r:null}},aH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){this.isEnabled=this._getAffectedListItems().length>0}execute(){this.editor.model.change(e=>{for(let t of this._getAffectedListItems())e.removeAttribute(`blockIndentListItem`,t)})}_getAffectedListItems(){let e=this.editor.model.document.selection,t=this.editor.plugins.get(`ListUtils`),n=Array.from(e.getSelectedBlocks());return t.expandListBlocksToCompleteItems(n).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){return e.hasAttribute(`blockIndentListItem`)?this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentListItem`)):!1}},oH=class extends CR{checkEnabled(e){let t=parseFloat(e);return this.isForward&&t<0||!this.isForward&&t>0}},sH=class extends wR{checkEnabled(e){return!this.isForward&&!!e}},cH=class extends F{static get pluginName(){return`IndentBlockListIntegration`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!this.editor.plugins.has(`ListEditing`))return;let t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes,`ol`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`ul`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockList`,new iH(e,new wR({direction:`backward`,classes:t.classes}))),e.commands.add(`indentBlockListItem`,new aH(e,new sH({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockListItem`,new aH(e,new sH({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(`ol`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`ul`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockList`,new iH(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))),e.commands.add(`indentBlockListItem`,new aH(e,new oH({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockListItem`,new aH(e,new oH({direction:`backward`,offset:t.offset,unit:t.unit})))),e.plugins.get(`ListEditing`).on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)i&&i.getAttribute(`listType`)==r.getAttribute(`listType`)&&(uH(`blockIndentList`,r,i,n)&&(e.return=!0),i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)&&uH(`blockIndentListItem`,r,i,n)&&(e.return=!0))}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentBlockList`:`indentBlockList`;this.editor.commands.get(r).isEnabled&&(e.execute(r,{firstListOnly:!0}),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`,priority:`high`})}afterInit(){let e=this.editor,t=e.model,n=t.schema;if(!e.plugins.has(`ListEditing`))return;n.extend(`$listItem`,{allowAttributes:[`blockIndentList`,`blockIndentListItem`]}),n.setAttributeProperties(`blockIndentList`,{isFormatting:!0}),n.setAttributeProperties(`blockIndentListItem`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentList`),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentListItem`);let r=(t,n)=>{e.model.change(e=>{for(let t of n)t.hasAttribute(`listItemId`)&&(t.hasAttribute(`blockIndentList`)&&e.removeAttribute(`blockIndentList`,t),t.hasAttribute(`blockIndentListItem`)&&e.removeAttribute(`blockIndentListItem`,t))})},i=e.commands.get(`indentList`),a=e.commands.get(`outdentList`);i&&this.listenTo(i,`afterExecute`,r),a&&this.listenTo(a,`afterExecute`,r);let o=e.commands.get(`indent`),s=e.commands.get(`outdent`);o.registerChildCommand(e.commands.get(`indentBlockList`),{priority:`highest`}),s.registerChildCommand(e.commands.get(`outdentBlockList`)),o.registerChildCommand(e.commands.get(`indentBlockListItem`)),s.registerChildCommand(e.commands.get(`outdentBlockListItem`))}_setupConversionUsingOffset(e,t,n){let r=this.editor,i=r.locale,a=r.conversion,o=i.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`,s=r.plugins.get(`ListEditing`);a.for(`upcast`).add(n=>{n.on(`element:${e}`,lH(t,e=>e.getStyle(o),(e,t)=>e.consume(t,{styles:o})),{priority:`low`})}),s.registerDowncastStrategy({scope:n,attributeName:t,setAttributeOnDowncast(e,t,n){t&&e.setStyle(o,t,n)}})}_setupConversionUsingClasses(e,t,n,r){let i=this.editor,a=i.conversion,o=i.plugins.get(`ListEditing`);a.for(`upcast`).add(r=>{r.on(`element:${t}`,lH(n,t=>e.find(e=>t.hasClass(e)),(e,t,n)=>e.consume(t,{classes:n})),{priority:`low`})}),o.registerDowncastStrategy({scope:r,attributeName:n,setAttributeOnDowncast(e,t,n){t&&e.addClass(t,n)}})}};function lH(e,t,n){return(r,i,a)=>{let{writer:o,consumable:s}=a;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let c=t(i.viewItem);if(c===void 0)return;let l=!1,u;for(let t of i.modelRange.getItems({shallow:!0}))u===void 0&&(u=t.getAttribute(`listIndent`)),!t.hasAttribute(e)&&t.getAttribute(`listIndent`)===u&&(o.setAttribute(e,c,t),l=!0);l&&n(s,i.viewItem,c)}}function uH(e,t,n,r){let i=n.getAttribute(e);return t.getAttribute(e)===i?!1:(i?r.setAttribute(e,i,t):r.removeAttribute(e,t),!0)}const dH=[`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`];var fH=class extends F{constructor(e){super(e),e.config.define(`indentBlock`,{offset:40,unit:`px`})}static get pluginName(){return`IndentBlock`}static get isOfficialPlugin(){return!0}static get requires(){return[cH]}init(){let e=this.editor,t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes),e.commands.add(`indentBlock`,new SR(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlock`,new SR(e,new wR({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(),e.commands.add(`indentBlock`,new SR(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlock`,new SR(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))))}afterInit(){let e=this.editor,t=e.model.schema,n=e.commands.get(`indent`),r=e.commands.get(`outdent`),i=e.config.get(`heading.options`);(i&&i.map(e=>e.model)||dH).forEach(e=>{t.isRegistered(e)&&t.extend(e,{allowAttributes:`blockIndent`})}),t.setAttributeProperties(`blockIndent`,{isFormatting:!0}),n.registerChildCommand(e.commands.get(`indentBlock`)),r.registerChildCommand(e.commands.get(`outdentBlock`))}_setupConversionUsingOffset(){let e=this.editor.conversion,t=this.editor.locale.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`;e.for(`upcast`).attributeToAttribute({view:{styles:{[t]:/[\\s\\S]+/}},model:{key:`blockIndent`,value:e=>{if(!e.is(`element`,`li`))return e.getStyle(t)}}}),e.for(`downcast`).attributeToAttribute({model:`blockIndent`,view:e=>({key:`style`,value:{[t]:e}})})}_setupConversionUsingClasses(e){let t={model:{key:`blockIndent`,values:[]},view:{}};for(let n of e)t.model.values.push(n),t.view[n]={key:`class`,value:[n]};this.editor.conversion.attributeToAttribute(t)}};function pH(e,t){return t||=Ti(e),`${e}:${t}`}function mH(e){let[t,n]=e.split(`:`);return{languageCode:t,textDirection:n}}var hH=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`language`)}execute({languageCode:e,textDirection:t}={}){let n=this.editor.model,r=n.document.selection,i=e?pH(e,t):!1;n.change(e=>{if(r.isCollapsed)i?e.setSelectionAttribute(`language`,i):e.removeSelectionAttribute(`language`);else{let t=n.schema.getValidRanges(r.getRanges(),`language`,{includeEmptyRanges:!0});for(let n of t){let t=n,r=`language`;n.isCollapsed&&(t=n.start.parent,r=Tl._getStoreAttributeKey(`language`)),i?e.setAttribute(r,i,t):e.removeAttribute(r,t)}}})}_getValueFromFirstAllowedNode(){let e=this.editor.model,t=e.schema,n=e.document.selection;if(n.isCollapsed)return n.getAttribute(`language`)||!1;for(let e of n.getRanges())for(let n of e.getItems())if(t.checkAttribute(n,`language`))return n.getAttribute(`language`)||!1;return!1}},gH=class extends F{static get pluginName(){return`TextPartLanguageEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`language`,{textPartLanguage:[{title:`Arabic`,languageCode:`ar`},{title:`French`,languageCode:`fr`},{title:`Spanish`,languageCode:`es`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`language`}),e.model.schema.setAttributeProperties(`language`,{copyOnEnter:!0}),this._defineConverters(),e.commands.add(`textPartLanguage`,new hH(e))}_defineConverters(){let e=this.editor.conversion;e.for(`upcast`).elementToAttribute({model:{key:`language`,value:e=>pH(e.getAttribute(`lang`),e.getAttribute(`dir`))},view:{name:`span`,attributes:{lang:/[\\s\\S]+/}}}),e.for(`downcast`).attributeToElement({model:`language`,view:(e,{writer:t},n)=>{if(!e||!n.item.is(`$textProxy`)&&!n.item.is(`documentSelection`))return;let{languageCode:r,textDirection:i}=mH(e);return t.createAttributeElement(`span`,{lang:r,dir:i})}})}},_H=class extends F{static get pluginName(){return`TextPartLanguageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=t(`Choose language`),r=t(`Language`);e.ui.componentFactory.add(`textPartLanguage`,t=>{let{definitions:i,titles:a}=this._getItemMetadata(),o=e.commands.get(`textPartLanguage`),s=Nx(t);return Lx(s,i,{ariaLabel:r,role:`menu`}),s.buttonView.set({ariaLabel:r,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:r}),s.extendTemplate({attributes:{class:[`ck-text-fragment-language-dropdown`]}}),s.bind(`isEnabled`).to(o,`isEnabled`),s.buttonView.bind(`label`).to(o,`value`,e=>e&&a[e]||n),s.buttonView.bind(`ariaLabel`).to(o,`value`,e=>{let t=e&&a[e];return t?`${t}, ${r}`:r}),this.listenTo(s,`execute`,t=>{o.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),s}),e.ui.componentFactory.add(`menuBar:textPartLanguage`,n=>{let{definitions:i}=this._getItemMetadata(),a=e.commands.get(`textPartLanguage`),o=new uw(n);o.buttonView.set({label:r});let s=new dw(n);s.set({ariaLabel:t(`Language`),role:`menu`});for(let e of i){if(e.type!=`button`){s.items.add(new fx(n));continue}let t=new rC(n,o),r=new U(n);r.set({role:`menuitemradio`,isToggleable:!0}),r.bind(...Object.keys(e.model)).to(e.model),r.delegate(`execute`).to(o),t.children.add(r),s.items.add(t)}return o.bind(`isEnabled`).to(a,`isEnabled`),o.panelView.children.add(s),o.on(`execute`,t=>{a.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),o})}_getItemMetadata(){let e=this.editor,t=new Fi,n={},r=e.commands.get(`textPartLanguage`),i=e.config.get(`language.textPartLanguage`),a=e.locale.t,o=a(`Remove language`);t.add({type:`button`,model:new RC({label:o,languageCode:!1,withText:!0})}),t.add({type:`separator`});for(let e of i){let i={type:`button`,model:new RC({label:e.title,languageCode:e.languageCode,role:`menuitemradio`,textDirection:e.textDirection,withText:!0})},a=pH(e.languageCode,e.textDirection);i.model.bind(`isOn`).to(r,`value`,e=>e===a),t.add(i),n[a]=e.title}return{definitions:t,titles:n}}},vH=class extends F{static get requires(){return[gH,_H]}static get pluginName(){return`TextPartLanguage`}static get isOfficialPlugin(){return!0}};function yH(e){if(e)throw e}var bH=o(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});ft.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}function wH(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?EH(e.position):`start`in e||`end`in e?EH(e):`line`in e||`column`in e?TH(e):``}function TH(e){return DH(e&&e.line)+`:`+DH(e&&e.column)}function EH(e){return TH(e&&e.start)+`-`+TH(e&&e.end)}function DH(e){return e&&typeof e==`number`?e:1}var OH=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=wH(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};OH.prototype.file=``,OH.prototype.name=``,OH.prototype.reason=``,OH.prototype.message=``,OH.prototype.stack=``,OH.prototype.column=void 0,OH.prototype.line=void 0,OH.prototype.ancestors=void 0,OH.prototype.cause=void 0,OH.prototype.fatal=void 0,OH.prototype.place=void 0,OH.prototype.ruleId=void 0,OH.prototype.source=void 0;const kH={basename:AH,dirname:jH,extname:MH,join:NH,sep:`/`};function AH(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`\"ext\" argument must be a string`);IH(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function jH(e){if(IH(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function MH(e){IH(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function NH(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function FH(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function IH(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}const LH={cwd:RH};function RH(){return`/`}function zH(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function BH(e){if(typeof e==`string`)e=new URL(e);else if(!zH(e)){let t=TypeError('The \"path\" argument must be of type string or an instance of URL. Received `'+e+\"`\");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return VH(e)}function VH(e){if(e.hostname!==``){let e=TypeError(`File URL host must be \"localhost\" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n0){let[r,...a]=t,o=n[i][1];xH(o)&&xH(r)&&(r=(0,YH.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function QH(e,t){if(typeof t!=`function`)throw TypeError(\"Cannot `\"+e+\"` without `parser`\")}function $H(e,t){if(typeof t!=`function`)throw TypeError(\"Cannot `\"+e+\"` without `compiler`\")}function eU(e,t){if(t)throw Error(\"Cannot call `\"+e+\"` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.\")}function tU(e){if(!xH(e)||typeof e.type!=`string`)throw TypeError(\"Expected node, got `\"+e+\"`\")}function nU(e,t,n){if(!n)throw Error(\"`\"+e+\"` finished async. Use `\"+t+\"` instead\")}function rU(e){return iU(e)?e:new UH(e)}function iU(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function aU(e){return typeof e==`string`||oU(e)}function oU(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}function sU(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}const cU=vU(/[A-Za-z]/),lU=vU(/[\\dA-Za-z]/),uU=vU(/[#-'*+\\--9=?A-Z^-~]/);function dU(e){return e!==null&&(e<32||e===127)}const fU=vU(/\\d/),pU=vU(/[\\dA-Fa-f]/),mU=vU(/[!-/:-@[-`{-~]/);function K(e){return e!==null&&e<-2}function hU(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}const gU=vU(/\\p{P}|\\p{S}/u),_U=vU(/\\s/);function vU(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function yU(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,`\\\\$&`).replace(/-/g,`\\\\x2d`)}const bU=(function(e){if(e==null)return TU;if(typeof e==`function`)return wU(e);if(typeof e==`object`)return Array.isArray(e)?xU(e):SU(e);if(typeof e==`string`)return CU(e);throw Error(`Expected function, string, or object as test`)});function xU(e){let t=[],n=-1;for(;++n`:``))+`)`})}return u;function u(){let l=OU,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=AU(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d0?{type:`text`,value:a}:void 0),a===!1?r.lastIndex=n+1:(s!==n&&u.push({type:`text`,value:e.value.slice(s,n)}),Array.isArray(a)?u.push(...a):a&&u.push(a),s=n+d[0].length,l=!0),!r.global)break;d=r.exec(e.value)}return l?(s?\\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(`)`),i=sU(e,`(`),a=sU(e,`)`);for(;r!==-1&&i>a;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(`)`),a++;return[e,n]}function XU(e,t){let n=e.input.charCodeAt(e.index-1);return(e.index===0||_U(n)||gU(n))&&(!t||n!==47)}function ZU(e){return e.replace(/[\\t\\n\\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}sW.peek=oW;function QU(){this.buffer()}function $U(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function eW(){this.buffer()}function tW(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function nW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function rW(e){this.exit(e)}function iW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function aW(e){this.exit(e)}function oW(){return`[`}function sW(e,t,n,r){let i=n.createTracker(r),a=i.move(`[^`),o=n.enter(`footnoteReference`),s=n.enter(`reference`);return a+=i.move(n.safe(n.associationId(e),{after:`]`,before:a})),s(),o(),a+=i.move(`]`),a}function cW(){return{enter:{gfmFootnoteCallString:QU,gfmFootnoteCall:$U,gfmFootnoteDefinitionLabelString:eW,gfmFootnoteDefinition:tW},exit:{gfmFootnoteCallString:nW,gfmFootnoteCall:rW,gfmFootnoteDefinitionLabelString:iW,gfmFootnoteDefinition:aW}}}function lW(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:sW},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function n(e,n,r,i){let a=r.createTracker(i),o=a.move(`[^`),s=r.enter(`footnoteDefinition`),c=r.enter(`label`);return o+=a.move(r.safe(r.associationId(e),{before:o,after:`]`})),c(),o+=a.move(`]:`),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((t?`\n`:` `)+r.indentLines(r.containerFlow(e,a.current()),t?dW:uW))),s(),o}}function uW(e,t,n){return t===0?e:dW(e,t,n)}function dW(e,t,n){return(n?``:` `)+e}const fW=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];_W.peek=vW;function pW(){return{canContainEols:[`delete`],enter:{strikethrough:hW},exit:{strikethrough:gW}}}function mW(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:fW}],handlers:{delete:_W}}}function hW(e){this.enter({type:`delete`,children:[]},e)}function gW(e){this.exit(e)}function _W(e,t,n,r){let i=n.createTracker(r),a=n.enter(`strikethrough`),o=i.move(`~~`);return o+=n.containerPhrasing(e,{...i.current(),before:o,after:`~`}),o+=i.move(`~~`),a(),o}function vW(){return`~`}function yW(e){return e.length}function bW(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||yW,a=[],o=[],s=[],c=[],l=0,u=-1;for(;++ul&&(l=e[u].length);++ac[a])&&(c[a]=e)}t.push(o)}o[u]=t,s[u]=r}let d=-1;if(typeof r==`object`&&`length`in r)for(;++dc[d]&&(c[d]=i),p[d]=i),f[d]=o}o.splice(1,0,f),s.splice(1,0,p),u=-1;let m=[];for(;++u `),a.shift(2);let o=n.indentLines(n.containerFlow(e,a.current()),AW);return i(),o}function AW(e,t,n){return`>`+(n?``:` `)+e}function jW(e,t){return MW(e,t.inConstruct,!0)&&!MW(e,t.notInConstruct,!1)}function MW(e,t,n){if(typeof t==`string`&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ro&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}function FW(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \\r\\n]/.test(e.value)&&!/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(e.value))}function IW(e){let t=e.options.fence||\"`\";if(t!==\"`\"&&t!==`~`)throw Error(\"Cannot serialize code with `\"+t+\"` for `options.fence`, expected `` ` `` or `~`\");return t}function LW(e,t,n,r){let i=IW(n),a=e.value||``,o=i===\"`\"?`GraveAccent`:`Tilde`;if(FW(e,n)){let e=n.enter(`codeIndented`),t=n.indentLines(a,RW);return e(),t}let s=n.createTracker(r),c=i.repeat(Math.max(PW(a,i)+1,3)),l=n.enter(`codeFenced`),u=s.move(c);if(e.lang){let t=n.enter(`codeFencedLang${o}`);u+=s.move(n.safe(e.lang,{before:u,after:` `,encode:[\"`\"],...s.current()})),t()}if(e.lang&&e.meta){let t=n.enter(`codeFencedMeta${o}`);u+=s.move(` `),u+=s.move(n.safe(e.meta,{before:u,after:`\n`,encode:[\"`\"],...s.current()})),t()}return u+=s.move(`\n`),a&&(u+=s.move(a+`\n`)),u+=s.move(c),l(),u}function RW(e,t,n){return(n?``:` `)+e}function zW(e){let t=e.options.quote||`\"`;if(t!==`\"`&&t!==`'`)throw Error(\"Cannot serialize title with `\"+t+\"` for `options.quote`, expected `\\\"`, or `'`\");return t}function BW(e,t,n,r){let i=zW(n),a=i===`\"`?`Quote`:`Apostrophe`,o=n.enter(`definition`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`[`);return l+=c.move(n.safe(n.associationId(e),{before:l,after:`]`,...c.current()})),l+=c.move(`]: `),s(),!e.url||/[\\0- \\u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`\n`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),o(),l}function VW(e){let t=e.options.emphasis||`*`;if(t!==`*`&&t!==`_`)throw Error(\"Cannot serialize emphasis with `\"+t+\"` for `options.emphasis`, expected `*`, or `_`\");return t}function HW(e){return`&#x`+e.toString(16).toUpperCase()+`;`}function UW(e){if(e===null||hU(e)||_U(e))return 1;if(gU(e))return 2}function WW(e,t,n){let r=UW(e),i=UW(t);return r===void 0?i===void 0?n===`_`?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}GW.peek=KW;function GW(e,t,n,r){let i=VW(n),a=n.enter(`emphasis`),o=n.createTracker(r),s=o.move(i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function KW(e,t,n){return n.options.emphasis||`*`}function qW(e,t,n,r){let i,a,o;typeof t==`function`&&typeof n!=`function`?(a=void 0,o=t,i=n):(a=t,o=n,i=r),kU(e,a,s,i);function s(e,t){let n=t[t.length-1],r=n?n.children.indexOf(e):void 0;return o(e,r,n)}}const JW={};function YW(e,t){let n=t||JW;return XW(e,typeof n.includeImageAlt==`boolean`?n.includeImageAlt:!0,typeof n.includeHtml==`boolean`?n.includeHtml:!0)}function XW(e,t,n){if(QW(e)){if(`value`in e)return e.type===`html`&&!n?``:e.value;if(t&&`alt`in e&&e.alt)return e.alt;if(`children`in e)return ZW(e.children,t,n)}return Array.isArray(e)?ZW(e,t,n):``}function ZW(e,t,n){let r=[],i=-1;for(;++i`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function iG(){return`!`}aG.peek=oG;function aG(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function oG(){return`!`}sG.peek=cG;function sG(e,t,n){let r=e.value||``,i=\"`\",a=-1;for(;RegExp(\"(^|[^`])\"+i+\"([^`]|$)\").test(r);)i+=\"`\";for(/[^ \\r\\n]/.test(r)&&(/^[ \\r\\n]/.test(r)&&/[ \\r\\n]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a\\u007F]/.test(e.url))}uG.peek=dG;function uG(e,t,n,r){let i=zW(n),a=i===`\"`?`Quote`:`Apostrophe`,o=n.createTracker(r),s,c;if(lG(e,n)){let t=n.stack;n.stack=[],s=n.enter(`autolink`);let r=o.move(`<`);return r+=o.move(n.containerPhrasing(e,{before:r,after:`>`,...o.current()})),r+=o.move(`>`),s(),n.stack=t,r}s=n.enter(`link`),c=n.enter(`label`);let l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function dG(e,t,n){return lG(e,n)?`<`:`[`}fG.peek=pG;function fG(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function pG(){return`[`}function mG(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error(\"Cannot serialize items with `\"+t+\"` for `options.bullet`, expected `*`, `+`, or `-`\");return t}function hG(e){let t=mG(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error(\"Cannot serialize items with `\"+n+\"` for `options.bulletOther`, expected `*`, `+`, or `-`\");if(n===t)throw Error(\"Expected `bullet` (`\"+t+\"`) and `bulletOther` (`\"+n+\"`) to be different\");return n}function gG(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error(\"Cannot serialize items with `\"+t+\"` for `options.bulletOrdered`, expected `.` or `)`\");return t}function _G(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error(\"Cannot serialize rules with `\"+t+\"` for `options.rule`, expected `*`, `-`, or `_`\");return t}function vG(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?gG(n):mG(n),s=e.ordered?o===`.`?`)`:`.`:hG(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),_G(n)===o&&t){let t=-1;for(;++t-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function xG(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}const SG=bU([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function CG(e,t,n,r){return(e.children.some(function(e){return SG(e)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function wG(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error(\"Cannot serialize strong with `\"+t+\"` for `options.strong`, expected `*`, or `_`\");return t}TG.peek=EG;function TG(e,t,n,r){let i=wG(n),a=n.enter(`strong`),o=n.createTracker(r),s=o.move(i+i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function EG(e,t,n){return n.options.strong||`*`}function DG(e,t,n,r){return n.safe(e.value,r)}function OG(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error(\"Cannot serialize rules with repetition `\"+t+\"` for `options.ruleRepetition`, expected `3` or more\");return t}function kG(e,t,n){let r=(_G(n)+(n.options.ruleSpaces?` `:``)).repeat(OG(n));return n.options.ruleSpaces?r.slice(0,-1):r}const AG={blockquote:kW,break:NW,code:LW,definition:BW,emphasis:GW,hardBreak:NW,heading:eG,html:tG,image:rG,imageReference:aG,inlineCode:sG,link:uG,linkReference:fG,list:vG,listItem:bG,paragraph:xG,root:CG,strong:TG,text:DG,thematicBreak:kG},jG=[MG];function MG(e,t,n,r){if(t.type===`code`&&FW(t,r)&&(e.type===`list`||e.type===t.type&&FW(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&$W(t,r))?void 0:+!!n.spread}const NG=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],PG=[{character:`\t`,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`\t`,before:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`\t`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`\n`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\\\[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`\"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\\r\n]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,before:`\\\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \t\\r\n*])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`+`,after:`(?:[ \t\\r\n])`},{atBreak:!0,character:`-`,after:`(?:[ \t\\r\n-])`},{atBreak:!0,before:`\\\\d+`,character:`.`,after:`(?:[ \t\\r\n]|$)`},{atBreak:!0,character:`<`,after:`[!/?A-Za-z]`},{character:`<`,after:`[!/?A-Za-z]`,inConstruct:`phrasing`,notInConstruct:NG},{character:`<`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`=`},{atBreak:!0,character:`>`},{character:`>`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`[`},{character:`[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`[`,inConstruct:[`label`,`reference`]},{character:`\\\\`,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`]`,inConstruct:[`label`,`reference`]},{atBreak:!0,character:`_`},{character:`_`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:\"`\"},{character:\"`\",inConstruct:[`codeFencedLangGraveAccent`,`codeFencedMetaGraveAccent`]},{character:\"`\",inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`~`}],FG=document.createElement(`i`);function IG(e){let t=`&`+e+`;`;FG.innerHTML=t;let n=FG.textContent;return n.charCodeAt(n.length-1)===59&&e!==`semi`||n===t?!1:n}function LG(e,t){let n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)==65535||(n&65535)==65534||n>1114111?`�`:String.fromCodePoint(n)}const RG=/\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;function zG(e){return e.replace(RG,BG)}function BG(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){let e=n.charCodeAt(1),t=e===120||e===88;return LG(n.slice(t?2:1),t?16:10)}return IG(n)||e}function VG(e){return e.label||!e.identifier?e.label||``:zG(e.identifier)}function HG(e){if(!e._compiled){let t=(e.atBreak?`[\\\\r\\\\n][\\\\t ]*`:``)+(e.before?`(?:`+e.before+`)`:``);e._compiled=RegExp((t?`(`+t+`)`:``)+(/[|\\\\{}()[\\]^$+*?.-]/.test(e.character)?`\\\\`:``)+e.character+(e.after?`(?:`+e.after+`)`:``),`g`)}return e._compiled}function UG(e,t,n){let r=t.indexStack,i=e.children||[],a=[],o=-1,s=n.before,c;r.push(-1);let l=t.createTracker(n);for(;++o0&&(s===`\\r`||s===`\n`)&&u.type===`html`&&(a[a.length-1]=a[a.length-1].replace(/(\\r?\\n|\\r)$/,` `),s=` `,l=t.createTracker(n),l.move(a.join(``)));let f=t.handle(u,e,t,{...l.current(),after:d,before:s});c&&c===f.slice(0,1)&&(f=HW(c.charCodeAt(0))+f.slice(1));let p=t.attentionEncodeSurroundingInfo;t.attentionEncodeSurroundingInfo=void 0,c=void 0,p&&(a.length>0&&p.before&&s===a[a.length-1].slice(-1)&&(a[a.length-1]=a[a.length-1].slice(0,-1)+HW(s.charCodeAt(0))),p.after&&(c=d)),l.move(f),a.push(f),s=f.slice(-1)}return r.pop(),a.join(``)}function WG(e,t,n){let r=t.indexStack,i=e.children||[],a=t.createTracker(n),o=[],s=-1;for(r.push(-1);++s\n\n`}return`\n\n`}const KG=/\\r?\\n|\\r/g;function qG(e,t){let n=[],r=0,i=0,a;for(;a=KG.exec(e);)o(e.slice(r,a.index)),n.push(a[0]),r=a.index+a[0].length,i++;return o(e.slice(r)),n.join(``);function o(e){n.push(t(e,i,!e))}}function JG(e,t,n){let r=(n.before||``)+(t||``)+(n.after||``),i=[],a=[],o={},s=-1;for(;++s=l||e+1i?0:i+t:t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);a0?(xK(e,e.length,0,t),e):t}const CK={}.hasOwnProperty;function wK(e){let t={},n=-1;for(;++n0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}function ZK(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function QK(e,t,n){let r=[],i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let d={...e[r][1].end},f={...e[n][1].start};nq(d,-c),nq(f,c),o={type:c>1?`strongSequence`:`emphasisSequence`,start:d,end:{...e[r][1].end}},s={type:c>1?`strongSequence`:`emphasisSequence`,start:{...e[n][1].start},end:f},a={type:c>1?`strongText`:`emphasisText`,start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?`strong`:`emphasis`,start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},l=[],e[r][1].end.offset-e[r][1].start.offset&&(l=SK(l,[[`enter`,e[r][1],t],[`exit`,e[r][1],t]])),l=SK(l,[[`enter`,i,t],[`enter`,o,t],[`exit`,o,t],[`enter`,a,t]]),l=SK(l,QK(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),l=SK(l,[[`exit`,a,t],[`enter`,s,t],[`exit`,s,t],[`exit`,i,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,l=SK(l,[[`enter`,e[n][1],t],[`exit`,e[n][1],t]])):u=0,xK(e,r-1,n-r+3,l),n=r+l.length-u-2;break}}for(n=-1;++n0&&q(t)?J(e,v,`linePrefix`,a+1)(t):v(t)}function v(t){return t===null||K(t)?e.check(hq,h,ee)(t):(e.enter(`codeFlowValue`),y(t))}function y(t){return t===null||K(t)?(e.exit(`codeFlowValue`),v(t)):(e.consume(t),y)}function ee(n){return e.exit(`codeFenced`),t(n)}function b(e,t,n){let i=0;return a;function a(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),c}function c(t){return e.enter(`codeFencedFence`),q(t)?J(e,l,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):l(t)}function l(t){return t===s?(e.enter(`codeFencedFenceSequence`),u(t)):n(t)}function u(t){return t===s?(i++,e.consume(t),u):i>=o?(e.exit(`codeFencedFenceSequence`),q(t)?J(e,d,`whitespace`)(t):d(t)):n(t)}function d(r){return r===null||K(r)?(e.exit(`codeFencedFence`),t(r)):n(r)}}}function vq(e,t,n){let r=this;return i;function i(t){return t===null?n(t):(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}const yq={name:`codeIndented`,tokenize:xq},bq={partial:!0,tokenize:Sq};function xq(e,t,n){let r=this;return i;function i(t){return e.enter(`codeIndented`),J(e,a,`linePrefix`,5)(t)}function a(e){let t=r.events[r.events.length-1];return t&&t[1].type===`linePrefix`&&t[2].sliceSerialize(t[1],!0).length>=4?o(e):n(e)}function o(t){return t===null?c(t):K(t)?e.attempt(bq,o,c)(t):(e.enter(`codeFlowValue`),s(t))}function s(t){return t===null||K(t)?(e.exit(`codeFlowValue`),o(t)):(e.consume(t),s)}function c(n){return e.exit(`codeIndented`),t(n)}}function Sq(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),i):J(e,a,`linePrefix`,5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&a[1].type===`linePrefix`&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):K(e)?i(e):n(e)}}const Cq={name:`codeText`,previous:Tq,resolve:wq,tokenize:Eq};function wq(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r=this.left.length+this.right.length)throw RangeError(\"Cannot access index `\"+e+\"` in a splice buffer of size `\"+(this.left.length+this.right.length)+\"`\");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){let r=t||0;this.setCursor(Math.trunc(e));let i=this.right.splice(this.right.length-r,1/0);return n&&Oq(this.left,n),i.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),Oq(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Oq(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0))if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}function Iq(e,t,n,r,i,a,o,s,c){let l=c||1/0,u=0;return d;function d(t){return t===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),f):t===null||t===32||t===41||dU(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter(`chunkString`,{contentType:`string`}),h(t))}function f(n){return n===62?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter(`chunkString`,{contentType:`string`}),p(n))}function p(t){return t===62?(e.exit(`chunkString`),e.exit(s),f(t)):t===null||t===60||K(t)?n(t):(e.consume(t),t===92?m:p)}function m(t){return t===60||t===62||t===92?(e.consume(t),p):p(t)}function h(i){return!u&&(i===null||i===41||hU(i))?(e.exit(`chunkString`),e.exit(s),e.exit(o),e.exit(r),t(i)):u999||l===null||l===91||l===93&&!c||l===94&&!s&&`_hiddenFootnoteSupport`in o.parser.constructs?n(l):l===93?(e.exit(a),e.enter(i),e.consume(l),e.exit(i),e.exit(r),t):K(l)?(e.enter(`lineEnding`),e.consume(l),e.exit(`lineEnding`),u):(e.enter(`chunkString`,{contentType:`string`}),d(l))}function d(t){return t===null||t===91||t===93||K(t)||s++>999?(e.exit(`chunkString`),u(t)):(e.consume(t),c||=!q(t),t===92?f:d)}function f(t){return t===91||t===92||t===93?(e.consume(t),s++,d):d(t)}}function Rq(e,t,n,r,i,a){let o;return s;function s(t){return t===34||t===39||t===40?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=t===40?41:t,c):n(t)}function c(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),c(o)):t===null?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),J(e,l,`linePrefix`)):(e.enter(`chunkString`,{contentType:`string`}),u(t))}function u(t){return t===o||t===null||K(t)?(e.exit(`chunkString`),l(t)):(e.consume(t),t===92?d:u)}function d(t){return t===o||t===92?(e.consume(t),u):u(t)}}function zq(e,t){let n;return r;function r(i){return K(i)?(e.enter(`lineEnding`),e.consume(i),e.exit(`lineEnding`),n=!0,r):q(i)?J(e,r,n?`linePrefix`:`lineSuffix`)(i):t(i)}}const Bq={name:`definition`,tokenize:Hq},Vq={partial:!0,tokenize:Uq};function Hq(e,t,n){let r=this,i;return a;function a(t){return e.enter(`definition`),o(t)}function o(t){return Lq.call(r,e,s,n,`definitionLabel`,`definitionLabelMarker`,`definitionLabelString`)(t)}function s(t){return i=ZU(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),c):n(t)}function c(t){return hU(t)?zq(e,l)(t):l(t)}function l(t){return Iq(e,u,n,`definitionDestination`,`definitionDestinationLiteral`,`definitionDestinationLiteralMarker`,`definitionDestinationRaw`,`definitionDestinationString`)(t)}function u(t){return e.attempt(Vq,d,d)(t)}function d(t){return q(t)?J(e,f,`whitespace`)(t):f(t)}function f(a){return a===null||K(a)?(e.exit(`definition`),r.parser.defined.push(i),t(a)):n(a)}}function Uq(e,t,n){return r;function r(t){return hU(t)?zq(e,i)(t):n(t)}function i(t){return Rq(e,a,n,`definitionTitle`,`definitionTitleMarker`,`definitionTitleString`)(t)}function a(t){return q(t)?J(e,o,`whitespace`)(t):o(t)}function o(e){return e===null||K(e)?t(e):n(e)}}const Wq={name:`hardBreakEscape`,tokenize:Gq};function Gq(e,t,n){return r;function r(t){return e.enter(`hardBreakEscape`),e.consume(t),i}function i(r){return K(r)?(e.exit(`hardBreakEscape`),t(r)):n(r)}}const Kq={name:`headingAtx`,resolve:qq,tokenize:Jq};function qq(e,t){let n=e.length-2,r=3,i,a;return e[r][1].type===`whitespace`&&(r+=2),n-2>r&&e[n][1].type===`whitespace`&&(n-=2),e[n][1].type===`atxHeadingSequence`&&(r===n-1||n-4>r&&e[n-2][1].type===`whitespace`)&&(n-=r+1===n?2:4),n>r&&(i={type:`atxHeadingText`,start:e[r][1].start,end:e[n][1].end},a={type:`chunkText`,start:e[r][1].start,end:e[n][1].end,contentType:`text`},xK(e,r,n-r+1,[[`enter`,i,t],[`enter`,a,t],[`exit`,a,t],[`exit`,i,t]])),e}function Jq(e,t,n){let r=0;return i;function i(t){return e.enter(`atxHeading`),a(t)}function a(t){return e.enter(`atxHeadingSequence`),o(t)}function o(t){return t===35&&r++<6?(e.consume(t),o):t===null||hU(t)?(e.exit(`atxHeadingSequence`),s(t)):n(t)}function s(n){return n===35?(e.enter(`atxHeadingSequence`),c(n)):n===null||K(n)?(e.exit(`atxHeading`),t(n)):q(n)?J(e,s,`whitespace`)(n):(e.enter(`atxHeadingText`),l(n))}function c(t){return t===35?(e.consume(t),c):(e.exit(`atxHeadingSequence`),s(t))}function l(t){return t===null||t===35||hU(t)?(e.exit(`atxHeadingText`),s(t)):(e.consume(t),l)}}const Yq=`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`),Xq=[`pre`,`script`,`style`,`textarea`],Zq={concrete:!0,name:`htmlFlow`,resolveTo:eJ,tokenize:tJ},Qq={partial:!0,tokenize:rJ},$q={partial:!0,tokenize:nJ};function eJ(e){let t=e.length;for(;t--&&!(e[t][0]===`enter`&&e[t][1].type===`htmlFlow`););return t>1&&e[t-2][1].type===`linePrefix`&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function tJ(e,t,n){let r=this,i,a,o,s,c;return l;function l(e){return u(e)}function u(t){return e.enter(`htmlFlow`),e.enter(`htmlFlowData`),e.consume(t),d}function d(s){return s===33?(e.consume(s),f):s===47?(e.consume(s),a=!0,h):s===63?(e.consume(s),i=3,r.interrupt?t:fe):cU(s)?(e.consume(s),o=String.fromCharCode(s),g):n(s)}function f(a){return a===45?(e.consume(a),i=2,p):a===91?(e.consume(a),i=5,s=0,m):cU(a)?(e.consume(a),i=4,r.interrupt?t:fe):n(a)}function p(i){return i===45?(e.consume(i),r.interrupt?t:fe):n(i)}function m(i){return i===`CDATA[`.charCodeAt(s++)?(e.consume(i),s===6?r.interrupt?t:ie:m):n(i)}function h(t){return cU(t)?(e.consume(t),o=String.fromCharCode(t),g):n(t)}function g(s){if(s===null||s===47||s===62||hU(s)){let c=s===47,l=o.toLowerCase();return!c&&!a&&Xq.includes(l)?(i=1,r.interrupt?t(s):ie(s)):Yq.includes(o.toLowerCase())?(i=6,c?(e.consume(s),_):r.interrupt?t(s):ie(s)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(s):a?v(s):y(s))}return s===45||lU(s)?(e.consume(s),o+=String.fromCharCode(s),g):n(s)}function _(i){return i===62?(e.consume(i),r.interrupt?t:ie):n(i)}function v(t){return q(t)?(e.consume(t),v):S(t)}function y(t){return t===47?(e.consume(t),S):t===58||t===95||cU(t)?(e.consume(t),ee):q(t)?(e.consume(t),y):S(t)}function ee(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),ee):b(t)}function b(t){return t===61?(e.consume(t),x):q(t)?(e.consume(t),b):y(t)}function x(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),c=t,te):q(t)?(e.consume(t),x):ne(t)}function te(t){return t===c?(e.consume(t),c=null,re):t===null||K(t)?n(t):(e.consume(t),te)}function ne(t){return t===null||t===34||t===39||t===47||t===60||t===61||t===62||t===96||hU(t)?b(t):(e.consume(t),ne)}function re(e){return e===47||e===62||q(e)?y(e):n(e)}function S(t){return t===62?(e.consume(t),C):n(t)}function C(t){return t===null||K(t)?ie(t):q(t)?(e.consume(t),C):n(t)}function ie(t){return t===45&&i===2?(e.consume(t),ce):t===60&&i===1?(e.consume(t),le):t===62&&i===4?(e.consume(t),pe):t===63&&i===3?(e.consume(t),fe):t===93&&i===5?(e.consume(t),de):K(t)&&(i===6||i===7)?(e.exit(`htmlFlowData`),e.check(Qq,me,ae)(t)):t===null||K(t)?(e.exit(`htmlFlowData`),ae(t)):(e.consume(t),ie)}function ae(t){return e.check($q,oe,me)(t)}function oe(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),se}function se(t){return t===null||K(t)?ae(t):(e.enter(`htmlFlowData`),ie(t))}function ce(t){return t===45?(e.consume(t),fe):ie(t)}function le(t){return t===47?(e.consume(t),o=``,ue):ie(t)}function ue(t){if(t===62){let n=o.toLowerCase();return Xq.includes(n)?(e.consume(t),pe):ie(t)}return cU(t)&&o.length<8?(e.consume(t),o+=String.fromCharCode(t),ue):ie(t)}function de(t){return t===93?(e.consume(t),fe):ie(t)}function fe(t){return t===62?(e.consume(t),pe):t===45&&i===2?(e.consume(t),fe):ie(t)}function pe(t){return t===null||K(t)?(e.exit(`htmlFlowData`),me(t)):(e.consume(t),pe)}function me(n){return e.exit(`htmlFlow`),t(n)}}function nJ(e,t,n){let r=this;return i;function i(t){return K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a):n(t)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function rJ(e,t,n){return r;function r(r){return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),e.attempt(aq,t,n)}}const iJ={name:`htmlText`,tokenize:aJ};function aJ(e,t,n){let r=this,i,a,o;return s;function s(t){return e.enter(`htmlText`),e.enter(`htmlTextData`),e.consume(t),c}function c(t){return t===33?(e.consume(t),l):t===47?(e.consume(t),b):t===63?(e.consume(t),y):cU(t)?(e.consume(t),ne):n(t)}function l(t){return t===45?(e.consume(t),u):t===91?(e.consume(t),a=0,m):cU(t)?(e.consume(t),v):n(t)}function u(t){return t===45?(e.consume(t),p):n(t)}function d(t){return t===null?n(t):t===45?(e.consume(t),f):K(t)?(o=d,le(t)):(e.consume(t),d)}function f(t){return t===45?(e.consume(t),p):d(t)}function p(e){return e===62?ce(e):e===45?f(e):d(e)}function m(t){return t===`CDATA[`.charCodeAt(a++)?(e.consume(t),a===6?h:m):n(t)}function h(t){return t===null?n(t):t===93?(e.consume(t),g):K(t)?(o=h,le(t)):(e.consume(t),h)}function g(t){return t===93?(e.consume(t),_):h(t)}function _(t){return t===62?ce(t):t===93?(e.consume(t),_):h(t)}function v(t){return t===null||t===62?ce(t):K(t)?(o=v,le(t)):(e.consume(t),v)}function y(t){return t===null?n(t):t===63?(e.consume(t),ee):K(t)?(o=y,le(t)):(e.consume(t),y)}function ee(e){return e===62?ce(e):y(e)}function b(t){return cU(t)?(e.consume(t),x):n(t)}function x(t){return t===45||lU(t)?(e.consume(t),x):te(t)}function te(t){return K(t)?(o=te,le(t)):q(t)?(e.consume(t),te):ce(t)}function ne(t){return t===45||lU(t)?(e.consume(t),ne):t===47||t===62||hU(t)?re(t):n(t)}function re(t){return t===47?(e.consume(t),ce):t===58||t===95||cU(t)?(e.consume(t),S):K(t)?(o=re,le(t)):q(t)?(e.consume(t),re):ce(t)}function S(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),S):C(t)}function C(t){return t===61?(e.consume(t),ie):K(t)?(o=C,le(t)):q(t)?(e.consume(t),C):re(t)}function ie(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),i=t,ae):K(t)?(o=ie,le(t)):q(t)?(e.consume(t),ie):(e.consume(t),oe)}function ae(t){return t===i?(e.consume(t),i=void 0,se):t===null?n(t):K(t)?(o=ae,le(t)):(e.consume(t),ae)}function oe(t){return t===null||t===34||t===39||t===60||t===61||t===96?n(t):t===47||t===62||hU(t)?re(t):(e.consume(t),oe)}function se(e){return e===47||e===62||hU(e)?re(e):n(e)}function ce(r){return r===62?(e.consume(r),e.exit(`htmlTextData`),e.exit(`htmlText`),t):n(r)}function le(t){return e.exit(`htmlTextData`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),ue}function ue(t){return q(t)?J(e,de,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):de(t)}function de(t){return e.enter(`htmlTextData`),o(t)}}const oJ={name:`labelEnd`,resolveAll:uJ,resolveTo:dJ,tokenize:fJ},sJ={tokenize:pJ},cJ={tokenize:mJ},lJ={tokenize:hJ};function uJ(e){let t=-1,n=[];for(;++t=3&&(a===null||K(a))?(e.exit(`thematicBreak`),t(a)):n(a)}function c(t){return t===i?(e.consume(t),r++,c):(e.exit(`thematicBreakSequence`),q(t)?J(e,s,`whitespace`)(t):s(t))}}const wJ={continuation:{tokenize:OJ},exit:AJ,name:`list`,tokenize:DJ},TJ={partial:!0,tokenize:jJ},EJ={partial:!0,tokenize:kJ};function DJ(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type===`linePrefix`?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(t){let i=r.containerState.type||(t===42||t===43||t===45?`listUnordered`:`listOrdered`);if(i===`listUnordered`?!r.containerState.marker||t===r.containerState.marker:fU(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),i===`listUnordered`)return e.enter(`listItemPrefix`),t===42||t===45?e.check(SJ,n,l)(t):l(t);if(!r.interrupt||t===49)return e.enter(`listItemPrefix`),e.enter(`listItemValue`),c(t)}return n(t)}function c(t){return fU(t)&&++o<10?(e.consume(t),c):(!r.interrupt||o<2)&&(r.containerState.marker?t===r.containerState.marker:t===41||t===46)?(e.exit(`listItemValue`),l(t)):n(t)}function l(t){return e.enter(`listItemMarker`),e.consume(t),e.exit(`listItemMarker`),r.containerState.marker=r.containerState.marker||t,e.check(aq,r.interrupt?n:u,e.attempt(TJ,f,d))}function u(e){return r.containerState.initialBlankLine=!0,a++,f(e)}function d(t){return q(t)?(e.enter(`listItemPrefixWhitespace`),e.consume(t),e.exit(`listItemPrefixWhitespace`),f):n(t)}function f(n){return r.containerState.size=a+r.sliceSerialize(e.exit(`listItemPrefix`),!0).length,t(n)}}function OJ(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(aq,i,a);function i(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,J(e,t,`listItemIndent`,r.containerState.size+1)(n)}function a(n){return r.containerState.furtherBlankLines||!q(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(EJ,t,o)(n))}function o(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,J(e,e.attempt(wJ,t,n),`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(i)}}function kJ(e,t,n){let r=this;return J(e,i,`listItemIndent`,r.containerState.size+1);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`listItemIndent`&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)}}function AJ(e){e.exit(this.containerState.type)}function jJ(e,t,n){let r=this;return J(e,i,`listItemPrefixWhitespace`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:5);function i(e){let i=r.events[r.events.length-1];return!q(e)&&i&&i[1].type===`listItemPrefixWhitespace`?t(e):n(e)}}const MJ={name:`setextUnderline`,resolveTo:NJ,tokenize:PJ};function NJ(e,t){let n=e.length,r,i,a;for(;n--;)if(e[n][0]===`enter`){if(e[n][1].type===`content`){r=n;break}e[n][1].type===`paragraph`&&(i=n)}else e[n][1].type===`content`&&e.splice(n,1),!a&&e[n][1].type===`definition`&&(a=n);let o={type:`setextHeading`,start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type=`setextHeadingText`,a?(e.splice(i,0,[`enter`,o,t]),e.splice(a+1,0,[`exit`,e[r][1],t]),e[r][1].end={...e[a][1].end}):e[r][1]=o,e.push([`exit`,o,t]),e}function PJ(e,t,n){let r=this,i;return a;function a(t){let a=r.events.length,s;for(;a--;)if(r.events[a][1].type!==`lineEnding`&&r.events[a][1].type!==`linePrefix`&&r.events[a][1].type!==`content`){s=r.events[a][1].type===`paragraph`;break}return!r.parser.lazy[r.now().line]&&(r.interrupt||s)?(e.enter(`setextHeadingLine`),i=t,o(t)):n(t)}function o(t){return e.enter(`setextHeadingLineSequence`),s(t)}function s(t){return t===i?(e.consume(t),s):(e.exit(`setextHeadingLineSequence`),q(t)?J(e,c,`lineSuffix`)(t):c(t))}function c(r){return r===null||K(r)?(e.exit(`setextHeadingLine`),t(r)):n(r)}}const FJ={tokenize:UJ,partial:!0};function IJ(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:BJ,continuation:{tokenize:VJ},exit:HJ}},text:{91:{name:`gfmFootnoteCall`,tokenize:zJ},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:LJ,resolveTo:RJ}}}}function LJ(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=ZU(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function RJ(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function zJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||hU(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(ZU(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return hU(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function BJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||hU(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=ZU(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return hU(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),J(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function VJ(e,t,n){return e.check(aq,t,e.attempt(FJ,t,n))}function HJ(e){e.exit(`gfmFootnoteDefinition`)}function UJ(e,t,n){let r=this;return J(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function WJ(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=UW(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var GJ=class{constructor(){this.map=[]}add(e,t,n){KJ(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function KJ(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?x:c;return a===x&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):K(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):q(t)?J(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||hU(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,q(t)?J(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):b(t)}function h(t){return q(t)?J(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||K(t)?ee(t):b(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):b(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return q(t)?J(e,ee,`whitespace`)(t):ee(t)}function ee(n){return n===124?m(n):n===null||K(n)?!o||i!==a?b(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):b(n)}function b(e){return n(e)}function x(t){return e.enter(`tableRow`),te(t)}function te(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),te):n===null||K(n)?(e.exit(`tableRow`),t(n)):q(n)?J(e,te,`whitespace`)(n):(e.enter(`data`),ne(n))}function ne(t){return t===null||t===124||hU(t)?(e.exit(`data`),te(t)):(e.consume(t),t===92?re:ne)}function re(t){return t===92||t===124?(e.consume(t),ne):ne(t)}}function XJ(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new GJ;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},$J(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function QJ(e,t,n,r,i){let a=[],o=$J(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function $J(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}const eY={name:`tasklistCheck`,tokenize:nY};function tY(){return{text:{91:eY}}}function nY(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return hU(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return K(r)?t(r):q(r)?e.check({tokenize:rY},t,n)(r):n(r)}}function rY(e,t,n){return J(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function iY(e){return wK([IK(),IJ(),WJ(e),JJ(),tY()])}const aY={};function oY(e){let t=this,n=e||aY,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(iY(n)),a.push(yK()),o.push(bK(n))}const sY={tokenize:cY};function cY(e){let t=e.attempt(this.parser.constructs.contentInitial,r,i),n;return t;function r(n){if(n===null){e.consume(n);return}return e.enter(`lineEnding`),e.consume(n),e.exit(`lineEnding`),J(e,t,`linePrefix`)}function i(t){return e.enter(`paragraph`),a(t)}function a(t){let r=e.enter(`chunkText`,{contentType:`text`,previous:n});return n&&(n.next=r),n=r,o(t)}function o(t){if(t===null){e.exit(`chunkText`),e.exit(`paragraph`),e.consume(t);return}return K(t)?(e.consume(t),e.exit(`chunkText`),a):(e.consume(t),o)}}const lY={tokenize:dY},uY={tokenize:fY};function dY(e){let t=this,n=[],r=0,i,a,o;return s;function s(i){if(ro))return;let n=t.events.length,a=n,s,c;for(;a--;)if(t.events[a][0]===`exit`&&t.events[a][1].type===`chunkFlow`){if(s){c=t.events[a][1].end;break}s=!0}for(_(r),e=n;er;){let r=n[i];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function fY(e,t,n){return J(e,e.attempt(this.parser.constructs.document,t,n),`linePrefix`,this.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)}const pY={tokenize:mY};function mY(e){let t=this,n=e.attempt(aq,r,e.attempt(this.parser.constructs.flowInitial,i,J(e,e.attempt(this.parser.constructs.flow,i,e.attempt(jq,i)),`linePrefix`)));return n;function r(r){if(r===null){e.consume(r);return}return e.enter(`lineEndingBlank`),e.consume(r),e.exit(`lineEndingBlank`),t.currentConstruct=void 0,n}function i(r){if(r===null){e.consume(r);return}return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),t.currentConstruct=void 0,n}}const hY={resolveAll:yY()},gY=vY(`string`),_Y=vY(`text`);function vY(e){return{resolveAll:yY(e===`text`?bY:void 0),tokenize:t};function t(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return c(e)?i(e):o(e)}function o(e){if(e===null){t.consume(e);return}return t.enter(`data`),t.consume(e),s}function s(e){return c(e)?(t.exit(`data`),i(e)):(t.consume(e),s)}function c(e){if(e===null)return!0;let t=r[e],i=-1;if(t)for(;++ikY,contentInitial:()=>CY,disable:()=>AY,document:()=>SY,flow:()=>TY,flowInitial:()=>wY,insideSpan:()=>OY,string:()=>EY,text:()=>DY});const SY={42:wJ,43:wJ,45:wJ,48:wJ,49:wJ,50:wJ,51:wJ,52:wJ,53:wJ,54:wJ,55:wJ,56:wJ,57:wJ,62:sq},CY={91:Bq},wY={[-2]:yq,[-1]:yq,32:yq},TY={35:Kq,42:SJ,45:[MJ,SJ],60:Zq,61:MJ,95:SJ,96:gq,126:gq},EY={38:pq,92:dq},DY={[-5]:bJ,[-4]:bJ,[-3]:bJ,33:gJ,38:pq,42:$K,60:[rq,iJ],91:vJ,92:[Wq,dq],93:oJ,95:$K,96:Cq},OY={null:[$K,hY]},kY={null:[42,95]},AY={null:[]};function jY(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],c={attempt:te(b),check:te(x),consume:v,enter:y,exit:ee,interrupt:te(x,{interrupt:!0})},l={code:null,containerState:{},defineSkip:h,events:[],now:m,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:d},u=t.tokenize.call(l,c);return t.resolveAll&&a.push(t),l;function d(e){return o=SK(o,e),g(),o[o.length-1]===null?(ne(t,0),l.events=QK(a,l.events,l),l.events):[]}function f(e,t){return NY(p(e),t)}function p(e){return MY(o,e)}function m(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function h(e){i[e.line]=e.column,S()}function g(){let e;for(;r._index-1){let e=o[0];typeof e==`string`?o[0]=e.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function NY(e,t){let n=-1,r=[],i;for(;++n0){let e=a.tokenStack[a.tokenStack.length-1];(e[1]||WY).call(a,void 0,e[0])}for(r.position={start:VY(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:VY(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d{switch(e){case`Function`:case`SharedWorker`:case`Worker`:case`eval`:case`setInterval`:case`setTimeout`:throw TypeError(`unable to deserialize `+e)}return new KY[e](t)},JY=(e,t)=>{let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(qY(e,t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(qY(a,o),i)};return r},YY=e=>JY(new Map,e)(0),{toString:XY}={},{keys:ZY}=Object,QY=e=>{let t=typeof e;if(t!==`object`||!e)return[0,t];let n=XY.call(e).slice(8,-1);switch(n){case`Array`:return[1,``];case`Object`:return[2,``];case`Date`:return[3,``];case`RegExp`:return[4,``];case`Map`:return[5,``];case`Set`:return[6,``];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]},$Y=([e,t])=>e===0&&(t===`function`||t===`symbol`),eX=(e,t,n,r)=>{let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=QY(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize `+s);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of ZY(r))(e||!$Y(QY(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!($Y(QY(n))||$Y(QY(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!$Y(QY(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a},tX=(e,{json:t,lossy:n}={})=>{let r=[];return eX(!(t||n),!!t,new Map,r)(e),r};var nX=typeof structuredClone==`function`?(e,t)=>t&&(`json`in t||`lossy`in t)?YY(tX(e,t)):structuredClone(e):(e,t)=>YY(tX(e,t));function rX(e,t){let n=[{type:`text`,value:`↩`}];return t>1&&n.push({type:`element`,tagName:`sup`,properties:{},children:[{type:`text`,value:String(t)}]}),n}function iX(e,t){return`Back to reference `+(e+1)+(t>1?`-`+t:``)}function aX(e){let t=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,n=e.options.footnoteBackContent||rX,r=e.options.footnoteBackLabel||iX,i=e.options.footnoteLabel||`Footnotes`,a=e.options.footnoteLabelTagName||`h2`,o=e.options.footnoteLabelProperties||{className:[`sr-only`]},s=[],c=-1;for(;++c0&&d.push({type:`text`,value:` `});let e=typeof n==`string`?n:n(c,u);typeof e==`string`&&(e={type:`text`,value:e}),d.push({type:`element`,tagName:`a`,properties:{href:`#`+t+`fnref-`+l+(u>1?`-`+u:``),dataFootnoteBackref:``,ariaLabel:typeof r==`string`?r:r(c,u),className:[`data-footnote-backref`]},children:Array.isArray(e)?e:[e]})}let p=a[a.length-1];if(p&&p.type===`element`&&p.tagName===`p`){let e=p.children[p.children.length-1];e&&e.type===`text`?e.value+=` `:p.children.push({type:`text`,value:` `}),p.children.push(...d)}else a.push(...d);let m={type:`element`,tagName:`li`,properties:{id:t+`fn-`+l},children:e.wrap(a,!0)};e.patch(i,m),s.push(m)}if(s.length!==0)return{type:`element`,tagName:`section`,properties:{dataFootnotes:!0,className:[`footnotes`]},children:[{type:`element`,tagName:a,properties:{...nX(o),id:`footnote-label`},children:[{type:`text`,value:i}]},{type:`text`,value:`\n`},{type:`element`,tagName:`ol`,properties:{},children:e.wrap(s,!0)},{type:`text`,value:`\n`}]}}const oX=cX(`end`),sX=cX(`start`);function cX(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function lX(e){let t=sX(e),n=oX(e);if(t&&n)return{start:t,end:n}}function uX(e,t){let n={type:`element`,tagName:`blockquote`,properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function dX(e,t){let n={type:`element`,tagName:`br`,properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:`text`,value:`\n`}]}function fX(e,t){let n=t.value?t.value+`\n`:``,r={},i=t.lang?t.lang.split(/\\s+/):[];i.length>0&&(r.className=[`language-`+i[0]]);let a={type:`element`,tagName:`code`,properties:r,children:[{type:`text`,value:n}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:`element`,tagName:`pre`,properties:{},children:[a]},e.patch(t,a),a}function pX(e,t){let n={type:`element`,tagName:`del`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function mX(e,t){let n={type:`element`,tagName:`em`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function hX(e,t){let n=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,r=String(t.identifier).toUpperCase(),i=ZK(r.toLowerCase()),a=e.footnoteOrder.indexOf(r),o,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),o=e.footnoteOrder.length):o=a+1,s+=1,e.footnoteCounts.set(r,s);let c={type:`element`,tagName:`a`,properties:{href:`#`+n+`fn-`+i,id:n+`fnref-`+i+(s>1?`-`+s:``),dataFootnoteRef:!0,ariaDescribedBy:[`footnote-label`]},children:[{type:`text`,value:String(o)}]};e.patch(t,c);let l={type:`element`,tagName:`sup`,properties:{},children:[c]};return e.patch(t,l),e.applyData(t,l)}function gX(e,t){let n={type:`element`,tagName:`h`+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function _X(e,t){if(e.options.allowDangerousHtml){let n={type:`raw`,value:t.value};return e.patch(t,n),e.applyData(t,n)}}function vX(e,t){let n=t.referenceType,r=`]`;if(n===`collapsed`?r+=`[]`:n===`full`&&(r+=`[`+(t.label||t.identifier)+`]`),t.type===`imageReference`)return[{type:`text`,value:`![`+t.alt+r}];let i=e.all(t),a=i[0];a&&a.type===`text`?a.value=`[`+a.value:i.unshift({type:`text`,value:`[`});let o=i[i.length-1];return o&&o.type===`text`?o.value+=r:i.push({type:`text`,value:r}),i}function yX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={src:ZK(r.url||``),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`img`,properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)}function bX(e,t){let n={src:ZK(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`img`,properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function xX(e,t){let n={type:`text`,value:t.value.replace(/\\r?\\n|\\r/g,` `)};e.patch(t,n);let r={type:`element`,tagName:`code`,properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function SX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={href:ZK(r.url||``)};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`a`,properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function CX(e,t){let n={href:ZK(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`a`,properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function wX(e,t,n){let r=e.all(t),i=n?TX(n):EX(t),a={},o=[];if(typeof t.checked==`boolean`){let e=r[0],n;e&&e.type===`element`&&e.tagName===`p`?n=e:(n={type:`element`,tagName:`p`,properties:{},children:[]},r.unshift(n)),n.children.length>0&&n.children.unshift({type:`text`,value:` `}),n.children.unshift({type:`element`,tagName:`input`,properties:{type:`checkbox`,checked:t.checked,disabled:!0},children:[]}),a.className=[`task-list-item`]}let s=-1;for(;++s1}function DX(e,t){let n={},r=e.all(t),i=-1;for(typeof t.start==`number`&&t.start!==1&&(n.start=t.start);++i0){let r={type:`element`,tagName:`tbody`,properties:{},children:e.wrap(n,!0)},a=sX(t.children[1]),o=oX(t.children[t.children.length-1]);a&&o&&(r.position={start:a,end:o}),i.push(r)}let a={type:`element`,tagName:`table`,properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)}function MX(e,t,n){let r=n?n.children:void 0,i=(r?r.indexOf(t):1)===0?`th`:`td`,a=n&&n.type===`table`?n.align:void 0,o=a?a.length:t.children.length,s=-1,c=[];for(;++s0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(FX(t.slice(i),i>0,!1)),a.join(``)}function FX(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;t===9||t===32;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;t===9||t===32;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):``}function IX(e,t){let n={type:`text`,value:PX(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function LX(e,t){let n={type:`element`,tagName:`hr`,properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const RX={blockquote:uX,break:dX,code:fX,delete:pX,emphasis:mX,footnoteReference:hX,heading:gX,html:_X,imageReference:yX,image:bX,inlineCode:xX,linkReference:SX,link:CX,listItem:wX,list:DX,paragraph:OX,root:kX,strong:AX,table:jX,tableCell:NX,tableRow:MX,text:IX,thematicBreak:LX,toml:zX,yaml:zX,definition:zX,footnoteDefinition:zX};function zX(){}const BX={}.hasOwnProperty,VX={};function HX(e,t){let n=t||VX,r=new Map,i=new Map,a={all:s,applyData:WX,definitionById:r,footnoteById:i,footnoteCounts:new Map,footnoteOrder:[],handlers:{...RX,...n.handlers},one:o,options:n,patch:UX,wrap:KX};return qW(e,function(e){if(e.type===`definition`||e.type===`footnoteDefinition`){let t=e.type===`definition`?r:i,n=String(e.identifier).toUpperCase();t.has(n)||t.set(n,e)}}),a;function o(e,t){let n=e.type,r=a.handlers[n];if(BX.call(a.handlers,n)&&r)return r(a,e,t);if(a.options.passThrough&&a.options.passThrough.includes(n)){if(`children`in e){let{children:t,...n}=e,r=nX(n);return r.children=a.all(e),r}return nX(e)}return(a.options.unknownHandler||GX)(a,e,t)}function s(e){let t=[];if(`children`in e){let n=e.children,r=-1;for(;++r0&&n.push({type:`text`,value:`\n`}),n}function qX(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function JX(e,t){let n=HX(e,t),r=n.one(e,void 0),i=aX(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(`children`in a,a.children.push({type:`text`,value:`\n`},i)),a}function YX(e,t){return e&&`run`in e?async function(n,r){let i=JX(n,{file:r,...t});await e.run(i,r)}:function(n,r){return JX(n,{file:r,...e||t})}}function XX(e){jU(e,[/\\r?\\n|\\r/g,ZX])}function ZX(){return{type:`break`}}function QX(){return function(e){XX(e)}}var $X=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};$X.prototype.normal={},$X.prototype.property={},$X.prototype.space=void 0;function eZ(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new $X(n,r,t)}function tZ(e){return e.toLowerCase()}var nZ=class{constructor(e,t){this.attribute=t,this.property=e}};nZ.prototype.attribute=``,nZ.prototype.booleanish=!1,nZ.prototype.boolean=!1,nZ.prototype.commaOrSpaceSeparated=!1,nZ.prototype.commaSeparated=!1,nZ.prototype.defined=!1,nZ.prototype.mustUseProperty=!1,nZ.prototype.number=!1,nZ.prototype.overloadedBoolean=!1,nZ.prototype.property=``,nZ.prototype.spaceSeparated=!1,nZ.prototype.space=void 0;var rZ=s({boolean:()=>Y,booleanish:()=>aZ,commaOrSpaceSeparated:()=>lZ,commaSeparated:()=>cZ,number:()=>X,overloadedBoolean:()=>oZ,spaceSeparated:()=>sZ});let iZ=0;const Y=uZ(),aZ=uZ(),oZ=uZ(),X=uZ(),sZ=uZ(),cZ=uZ(),lZ=uZ();function uZ(){return 2**++iZ}const dZ=Object.keys(rZ);var fZ=class extends nZ{constructor(e,t,n,r){let i=-1;if(super(e,t),pZ(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&TZ.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(wZ,OZ);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!wZ.test(e)){let n=e.replace(CZ,DZ);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=fZ}return new i(r,t)}function DZ(e){return`-`+e.toLowerCase()}function OZ(e){return e.charAt(1).toUpperCase()}const kZ=eZ([hZ,vZ,bZ,xZ,SZ],`html`),AZ=eZ([hZ,yZ,bZ,xZ,SZ],`svg`),jZ={html:`http://www.w3.org/1999/xhtml`,mathml:`http://www.w3.org/1998/Math/MathML`,svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`},MZ={}.hasOwnProperty;function NZ(e,t){let n=t||{};return PZ(e,{doc:n.document||document,fragment:n.fragment||!1,namespace:n.namespace||void 0,impliedNamespace:void 0,afterTransform:n.afterTransform||void 0})}function PZ(e,t){let n=FZ(e,t);return t.afterTransform&&t.afterTransform(e,n),n}function FZ(e,t){switch(e.type){case`root`:return IZ(e,t);case`text`:return RZ(e,t);case`doctype`:return LZ(e,t);case`comment`:return zZ(e,t);default:return BZ(e,t)}}function IZ(e,t){let n=e.children||[],r=n.length===0,i=-1,a;for(;++i`;let t=document.createElement(`template`);return t.content.append(e),t.innerHTML}const GZ=[`area`,`base`,`basefont`,`bgsound`,`br`,`col`,`command`,`embed`,`frame`,`hr`,`image`,`img`,`input`,`keygen`,`link`,`meta`,`param`,`source`,`track`,`wbr`],KZ=/[\"&'<>`]/g,qZ=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,JZ=/[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g,YZ=/[|\\\\{}()[\\]^$+*?.]/g,XZ=new WeakMap;function ZZ(e,t){if(e=e.replace(t.subset?QZ(t.subset):KZ,r),t.subset||t.escapeOnly)return e;return e.replace(qZ,n).replace(JZ,r);function n(e,n,r){return t.format((e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536,r.charCodeAt(n+2),t)}function r(e,n,r){return t.format(e.charCodeAt(0),r.charCodeAt(n+1),t)}}function QZ(e){let t=XZ.get(e);return t||(t=$Z(e),XZ.set(e,t)),t}function $Z(e){let t=[],n=-1;for(;++n`,OElig:`Œ`,oelig:`œ`,Scaron:`Š`,scaron:`š`,Yuml:`Ÿ`,circ:`ˆ`,tilde:`˜`,ensp:` `,emsp:` `,thinsp:` `,zwnj:`‌`,zwj:`‍`,lrm:`‎`,rlm:`‏`,ndash:`–`,mdash:`—`,lsquo:`‘`,rsquo:`’`,sbquo:`‚`,ldquo:`“`,rdquo:`”`,bdquo:`„`,dagger:`†`,Dagger:`‡`,permil:`‰`,lsaquo:`‹`,rsaquo:`›`,euro:`€`},oQ=[`cent`,`copy`,`divide`,`gt`,`lt`,`not`,`para`,`times`],sQ={}.hasOwnProperty,cQ={};let lQ;for(lQ in aQ)sQ.call(aQ,lQ)&&(cQ[aQ[lQ]]=lQ);const uQ=/[^\\dA-Za-z]/;function dQ(e,t,n,r){let i=String.fromCharCode(e);if(sQ.call(cQ,i)){let e=cQ[i],a=`&`+e;return n&&iQ.includes(e)&&!oQ.includes(e)&&(!r||t&&t!==61&&uQ.test(String.fromCharCode(t)))?a:a+`;`}return``}function fQ(e,t,n){let r=tQ(e,t,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=dQ(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){let i=rQ(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|`],gQ=[`<`,`>`];function _Q(e,t,n,r){return r.settings.bogusComments?``:``;function i(e){return pQ(e,Object.assign({},r.settings.characterReferences,{subset:gQ}))}}function vQ(e,t,n,r){return``}function yQ(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function bQ(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function xQ(e){let t=String(e||``).trim();return t?t.split(/[ \\t\\n\\r\\f]+/g):[]}function SQ(e){return e.join(` `).trim()}const CQ=/[ \\t\\n\\f\\r]/g;function wQ(e){return typeof e==`object`?e.type===`text`?TQ(e.value):!1:TQ(e)}function TQ(e){return e.replace(CQ,``)===``}const EQ=kQ(1),DQ=kQ(-1),OQ=[];function kQ(e){return t;function t(t,n,r){let i=t?t.children:OQ,a=(n||0)+e,o=i[a];if(!r)for(;o&&wQ(o);)a+=e,o=i[a];return o}}const AQ={}.hasOwnProperty;function jQ(e){return t;function t(t,n,r){return AQ.call(e,t.tagName)&&e[t.tagName](t,n,r)}}const MQ=jQ({body:FQ,caption:NQ,colgroup:NQ,dd:zQ,dt:RQ,head:NQ,html:PQ,li:LQ,optgroup:VQ,option:HQ,p:IQ,rp:BQ,rt:BQ,tbody:WQ,td:qQ,tfoot:GQ,th:qQ,thead:UQ,tr:KQ});function NQ(e,t,n){let r=EQ(n,t,!0);return!r||r.type!==`comment`&&!(r.type===`text`&&wQ(r.value.charAt(0)))}function PQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function FQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function IQ(e,t,n){let r=EQ(n,t);return r?r.type===`element`&&(r.tagName===`address`||r.tagName===`article`||r.tagName===`aside`||r.tagName===`blockquote`||r.tagName===`details`||r.tagName===`div`||r.tagName===`dl`||r.tagName===`fieldset`||r.tagName===`figcaption`||r.tagName===`figure`||r.tagName===`footer`||r.tagName===`form`||r.tagName===`h1`||r.tagName===`h2`||r.tagName===`h3`||r.tagName===`h4`||r.tagName===`h5`||r.tagName===`h6`||r.tagName===`header`||r.tagName===`hgroup`||r.tagName===`hr`||r.tagName===`main`||r.tagName===`menu`||r.tagName===`nav`||r.tagName===`ol`||r.tagName===`p`||r.tagName===`pre`||r.tagName===`section`||r.tagName===`table`||r.tagName===`ul`):!n||!(n.type===`element`&&(n.tagName===`a`||n.tagName===`audio`||n.tagName===`del`||n.tagName===`ins`||n.tagName===`map`||n.tagName===`noscript`||n.tagName===`video`))}function LQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`li`}function RQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`))}function zQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`)}function BQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`rp`||r.tagName===`rt`)}function VQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`optgroup`}function HQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`option`||r.tagName===`optgroup`)}function UQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`))}function WQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`)}function GQ(e,t,n){return!EQ(n,t)}function KQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`tr`}function qQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`td`||r.tagName===`th`)}const JQ=jQ({body:Mne,colgroup:ZQ,head:XQ,html:YQ,tbody:QQ});function YQ(e){let t=EQ(e,-1);return!t||t.type!==`comment`}function XQ(e){let t=new Set;for(let n of e.children)if(n.type===`element`&&(n.tagName===`base`||n.tagName===`title`)){if(t.has(n.tagName))return!1;t.add(n.tagName)}let n=e.children[0];return!n||n.type===`element`}function Mne(e){let t=EQ(e,-1,!0);return!t||t.type!==`comment`&&!(t.type===`text`&&wQ(t.value.charAt(0)))&&!(t.type===`element`&&(t.tagName===`meta`||t.tagName===`link`||t.tagName===`script`||t.tagName===`style`||t.tagName===`template`))}function ZQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1,!0);return n&&r&&r.type===`element`&&r.tagName===`colgroup`&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`col`)}function QQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1);return n&&r&&r.type===`element`&&(r.tagName===`thead`||r.tagName===`tbody`)&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`tr`)}const $Q={name:[[`\t\n\\f\\r &/=>`.split(``),`\t\n\\f\\r \"&'/=>\\``.split(``)],[`\\0\t\n\\f\\r \"&'/<=>`.split(``),`\\0\t\n\\f\\r \"&'/<=>\\``.split(``)]],unquoted:[[`\t\n\\f\\r &>`.split(``),`\\0\t\n\\f\\r \"&'<=>\\``.split(``)],[`\\0\t\n\\f\\r \"&'<=>\\``.split(``),`\\0\t\n\\f\\r \"&'<=>\\``.split(``)]],single:[[`&'`.split(``),`\"&'\\``.split(``)],[`\\0&'`.split(``),`\\0\"&'\\``.split(``)]],double:[[`\"&`.split(``),`\"&'\\``.split(``)],[`\\0\"&`.split(``),`\\0\"&'\\``.split(``)]]};function e$(e,t,n,r){let i=r.schema,a=i.space===`svg`?!1:r.settings.omitOptionalTags,o=i.space===`svg`?r.settings.closeEmptyElements:r.settings.voids.includes(e.tagName.toLowerCase()),s=[],c;i.space===`html`&&e.tagName===`svg`&&(r.schema=AZ);let l=t$(r,e.properties),u=r.all(i.space===`html`&&e.tagName===`template`?e.content:e);return r.schema=i,u&&(o=!1),(l||!a||!JQ(e,t,n))&&(s.push(`<`,e.tagName,l?` `+l:``),o&&(i.space===`svg`||r.settings.closeSelfClosing)&&(c=l.charAt(l.length-1),(!r.settings.tightSelfClosing||c===`/`||c&&c!==`\"`&&c!==`'`)&&s.push(` `),s.push(`/`)),s.push(`>`)),s.push(u),!o&&(!a||!MQ(e,t,n))&&s.push(``),s.join(``)}function t$(e,t){let n=[],r=-1,i;if(t){for(i in t)if(t[i]!==null&&t[i]!==void 0){let r=n$(e,i,t[i]);r&&n.push(r)}}for(;++rsU(n,e.alternative)&&(o=e.alternative),s=o+pQ(n,Object.assign({},e.settings.characterReferences,{subset:(o===`'`?$Q.single:$Q.double)[i][a],attribute:!0}))+o),c+(s&&`=`+s))}const r$=[`<`,`&`];function i$(e,t,n,r){return n&&n.type===`element`&&(n.tagName===`script`||n.tagName===`style`)?e.value:pQ(e.value,Object.assign({},r.settings.characterReferences,{subset:r$}))}function a$(e,t,n,r){return r.settings.allowDangerousHtml?e.value:i$(e,t,n,r)}function o$(e,t,n,r){return r.all(e)}const s$=wW(`type`,{invalid:c$,unknown:l$,handlers:{comment:_Q,doctype:vQ,element:e$,raw:a$,root:o$,text:i$}});function c$(e){throw Error(\"Expected node, not `\"+e+\"`\")}function l$(e){throw Error(\"Cannot compile unknown node `\"+e.type+\"`\")}const u$={},d$={},f$=[];function p$(e,t){let n=t||u$,r=n.quote||`\"`,i=r===`\"`?`'`:`\"`;if(r!==`\"`&&r!==`'`)throw Error(\"Invalid quote `\"+r+\"`, expected `'` or `\\\"`\");return{one:m$,all:h$,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||GZ,characterReferences:n.characterReferences||d$,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space===`svg`?AZ:kZ,quote:r,alternative:i}.one(Array.isArray(e)?{type:`root`,children:e}:e,void 0,void 0)}function m$(e,t,n){return s$(e,t,n,this)}function h$(e){let t=[],n=e&&e.children||f$,r=-1;for(;++r`,``)}};function z$(){return e=>{qW(e,`element`,e=>{(e.tagName===`ul`||e.tagName===`ol`||e.tagName===`li`)&&(e.children=e.children.filter(e=>e.type!==`text`||!!e.value.trim()),delete e.properties.className)})}}function B$(){return e=>{qW(e,[`root`,`element`],e=>{if(!V$(e)||!e.children.some(e=>e.type===`raw`))return;let t=document.createElement(`template`);t.innerHTML=p$({type:`root`,children:e.children},{allowDangerousHtml:!0}),e.children=Array.from(t.content.childNodes).map(e=>O$(e))})}}function V$(e){return(e.type===`root`||e.type===`element`)&&e.children}function H$(e){let t=this,n={...t.data(`settings`),...e};t.parser=r;function r(e){return O$((n.fragment===!1?U$:W$)(e))}}function U$(e){return new DOMParser().parseFromString(e,`text/html`)}function W$(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}const G$=(function(e,t,n,r,i){let a=K$(t);if(n!=null&&(typeof n!=`number`||n<0||n===1/0))throw Error(\"Expected positive finite `index`\");if(r!=null&&(!r.type||!r.children))throw Error(\"Expected valid `parent`\");if(n==null!=(r==null))throw Error(\"Expected both `index` and `parent`\");return Z$(e)?a.call(i,e,n,r):!1}),K$=(function(e){if(e==null)return X$;if(typeof e==`string`)return J$(e);if(typeof e==`object`)return q$(e);if(typeof e==`function`)return Y$(e);throw Error(\"Expected function, string, or array as `test`\")});function q$(e){let t=[],n=-1;for(;++nl&&(l=e):e&&(l!==void 0&&l>-1&&c.push(`\n`.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function N1(e,t,n){return e.type===`element`?P1(e,t,n):e.type===`text`?n.whitespace===`normal`?F1(e,n):I1(e):[]}function P1(e,t,n){let r=R1(e,n),i=e.children||[],a=-1,o=[];if(A1(e))return o;let s,c;for(E1(e)||k1(e)&&C1(t,e,k1)?c=`\n`:O1(e)?(s=2,c=2):j1(e)&&(s=1,c=1);++a0;){let e=t.codePointAt(n-1);if(e!==void 0&&(e===10||e===13))n--;else break}return t.slice(0,n)}function U1(e,t){let n=t.children,r=-1,i,a;if(t.tagName===`pre`)for(;++r`};return e.patch(t,n),n}function G1(e,t){let n={type:`delete`,children:e.all(t)};return e.patch(t,n),n}function K1(e){let t=-1;if(e.length>1){for(;++t0&&o.push({type:`listItem`,spread:t.length>1,checked:null,children:t})}if(o.length>0){let n={type:`list`,ordered:!1,start:null,spread:K1(o),children:o};return e.patch(t,n),n}}function J1(e,t){let n=e.all({type:`root`,children:t}),r=e.toSpecificContent(n,Y1);return r.length===0?[]:r.length===1?r[0].children:[{type:`list`,ordered:!1,start:null,spread:K1(r),children:r}]}function Y1(){return{type:`listItem`,spread:!1,checked:null,children:[]}}function X1(e,t){let n={type:`emphasis`,children:e.all(t)};return e.patch(t,n),n}function Z1(e){let t=0,n=e.length;for(;tt&&e[n-1].type===`break`;)n--;return t===0&&n===e.length?e:e.slice(t,n)}function Q1(e,t){let n={type:`heading`,depth:Number(t.tagName.charAt(1))||1,children:Z1(e.all(t))};return e.patch(t,n),n}function $1(e,t){let n={type:`thematicBreak`};return e.patch(t,n),n}function e0(e,t){let n=t.properties||{},r=String(n.src||``),i=String(n.title||``);if(r&&i){let n={type:`link`,title:null,url:e.resolve(r),children:[{type:`text`,value:i}]};return e.patch(t,n),n}}function t0(e,t){let n=t.properties||{},r={type:`image`,url:e.resolve(String(n.src||``)||null),title:n.title?String(n.title):null,alt:n.alt?String(n.alt):``};return e.patch(t,r),r}function n0(e,t){let n={type:`inlineCode`,value:M1(t)};return e.patch(t,n),n}function r0(e,t){let n=[],r=[],i=t||e.properties||{},a=i0(e),o=Math.min(Number.parseInt(String(i.size),10),0)||(i.multiple?4:1),s=-1;for(;++s0?n:a,l=Math.min(c.length,o);for(s=-1;++s0&&(i.push(...t(a)),a=[]),i.push(n(e)))}return a.length>0&&(i.push(...t(a)),a=[]),i}function S0(e){let t=[],n=-1;for(;++n0){let r={type:`paragraph`,children:n};return e.patch(t,r),r}}const D0=[`\"`];function O0(e,t){let n=e.options.quotes||D0;e.qNesting++;let r=e.all(t);e.qNesting--;let i=n[e.qNesting%n.length],a=r[0],o=r[r.length-1],s=i.charAt(0),c=i.length>1?i.charAt(1):i;return a&&a.type===`text`?a.value=s+a.value:r.unshift({type:`text`,value:s}),o&&o.type===`text`?o.value+=c:r.push({type:`text`,value:c}),r}function k0(e,t){let n=e.all(t);(e.options.document||v0(n))&&(n=y0(n));let r={type:`root`,children:n};return e.patch(t,r),r}function A0(e,t){let n=r0(t),r=-1,i=[];for(;++r0){let n={type:`text`,value:i.join(`, `)};return e.patch(t,n),n}}function j0(e,t){let n={type:`strong`,children:e.all(t)};return e.patch(t,n),n}function M0(e,t){let n={type:`tableCell`,children:e.all(t)};if(e.patch(t,n),t.properties){let e=t.properties.rowSpan,r=t.properties.colSpan;if(e||r){let t=n.data||={};e&&(t.hastUtilToMdastTemporaryRowSpan=e),r&&(t.hastUtilToMdastTemporaryColSpan=r)}}return n}function N0(e,t){let n={type:`tableRow`,children:e.toSpecificContent(e.all(t),P0)};return e.patch(t,n),n}function P0(){return{type:`tableCell`,children:[]}}function F0(e,t){if(e.inTable){let n={type:`text`,value:M1(t)};return e.patch(t,n),n}e.inTable=!0;let{align:n,headless:r}=I0(t),i=e.toSpecificContent(e.all(t),R0);r&&i.unshift(R0());let a=-1;for(;++a1||o>1){let e=a-1;for(;++eo&&(o=e.length)}for(a=-1;++a0&&(t.children.unshift(...i),i=[]),r.push(t);else{let e=t;i.push(e)}}if(i.length>0){let e=r[r.length-1];e||(e=t(),r.push(e)),e.children.push(...i),i=[]}return r;function o(e){return e.type===n.type}}const $0={};function e2(e,t){let n=nX(e),r=t||$0,i=v1({newlines:r.newlines===!0}),a=K0(r),o;i(n),qW(n,function(e){if(e&&e.type===`element`&&e.properties){let t=String(e.properties.id||``)||void 0;t&&!a.elementById.has(t)&&a.elementById.set(t,e)}});let s=a.one(n,void 0);return o=s?Array.isArray(s)?{type:`root`,children:s}:s:{type:`root`,children:[]},qW(o,function(e,t,n){if(e.type===`text`&&t!==void 0&&n){let r=n.children[t-1];if(r&&r.type===e.type)return r.value+=e.value,n.children.splice(t,1),r.position&&e.position&&(r.position.end=e.position.end),t-1;if(e.value=e.value.replace(/[\\t ]*(\\r?\\n|\\r)[\\t ]*/,`$1`),n&&(n.type===`heading`||n.type===`paragraph`||n.type===`root`)&&(t||(e.value=e.value.replace(/^[\\t ]+/,``)),t===n.children.length-1&&(e.value=e.value.replace(/[\\t ]+$/,``))),!e.value)return n.children.splice(t,1),t}}),o}const t2={document:!0};function n2(e,t){return e&&`run`in e?async function(n,r){let i=e2(n,{...t2,...t});await e.run(i,r)}:function(t){return e2(t,{...t2,...e})}}function r2(e){let t=this;t.compiler=n;function n(n){return QG(n,{...t.data(`settings`),...e,extensions:t.data(`toMarkdownExtensions`)||[]})}}var i2=class{_processor;_keepRawTags=[];constructor(){this._buildProcessor()}keep(e){this._keepRawTags.push(e.toLowerCase()),this._buildProcessor()}parse(e){return this._processor.processSync(e).toString().trim()}_getRawTagsHandlers(){return this._keepRawTags.reduce((e,t)=>(e[t]=(e,t)=>{let n=p$(E$(t.tagName,t.properties),{allowDangerousHtml:!0,closeSelfClosing:!0}),r=n.indexOf(`>`),i=n.slice(0,r+1),a=n.slice(r+1);return[{type:`html`,value:i},...e.all(t),{type:`html`,value:a}]},e),{})}_buildProcessor(){this._processor=ZH().use(H$).use(a2).use(n2,{handlers:this._getRawTagsHandlers()}).use(oY,{singleTilde:!0}).use(QX).use(r2,{resourceLink:!0,emphasis:`_`,rule:`-`,handlers:{break:()=>`\n`},unsafe:[{character:`<`}]})}};function a2(){return function(e){qW(e,`element`,(e,t,n)=>{t!==null&&e.tagName===`label`&&n.type===`element`&&n.tagName===`li`&&n.children.splice(t,1,...e.children)})}}var o2=class{_htmlDP;_markdown2html;_html2markdown;constructor(e){this._htmlDP=new Td(e),this._markdown2html=new R$,this._html2markdown=new i2}keepHtml(e){this._html2markdown.keep(e)}toView(e){let t=this._markdown2html.parse(e);return this._htmlDP.toView(t)}toData(e){let t=this._htmlDP.toData(e);return this._html2markdown.parse(t)}registerRawContentMatcher(e){this._htmlDP.registerRawContentMatcher(e)}useFillerType(){}},s2=class extends F{constructor(e){super(e),e.data.processor=new o2(e.data.viewDocument)}static get pluginName(){return`Markdown`}static get isOfficialPlugin(){return!0}};const c2=[`SPAN`,`BR`,`PRE`,`CODE`];var l2=class extends F{_gfmDataProcessor;constructor(e){super(e),this._gfmDataProcessor=new o2(e.data.viewDocument)}static get pluginName(){return`PasteFromMarkdownExperimental`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ClipboardPipeline`),r=!1;this.listenTo(t,`keydown`,(e,t)=>{r=t.shiftKey}),this.listenTo(n,`inputTransformation`,(e,t)=>{if(r)return;let n=t.dataTransfer.getData(`text/html`);if(!n){let e=t.dataTransfer.getData(`text/plain`);t.content=this._gfmDataProcessor.toView(e);return}let i=this._parseMarkdownFromHtml(n);i&&(t.content=this._gfmDataProcessor.toView(i))})}_parseMarkdownFromHtml(e){let t=this._removeOsSpecificTags(e);if(!this._containsOnlyAllowedFirstLevelTags(t))return null;let n=this._removeFirstLevelWrapperTagsAndBrs(t);return this._containsAnyRemainingHtmlTags(n)?null:this._replaceHtmlReservedEntitiesWithCharacters(n)}_removeOsSpecificTags(e){return e.replace(/^]*>/,``).trim().replace(/^/,``).replace(/<\\/html>$/,``).trim().replace(/^/,``).replace(/<\\/body>$/,``).trim().replace(/^/,``).replace(/$/,``).trim()}_containsOnlyAllowedFirstLevelTags(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`);return Array.from(t.children).map(e=>e.tagName).every(e=>c2.includes(e))}_removeFirstLevelWrapperTagsAndBrs(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`),n=t.querySelectorAll(`br`);for(let e of n)e.replaceWith(`\n`);let r=t.querySelectorAll(`:scope > *`);for(let e of r){let t=e.cloneNode(!0);e.replaceWith(...t.childNodes)}return t.innerHTML}_containsAnyRemainingHtmlTags(e){return e.includes(`<`)}_replaceHtmlReservedEntitiesWithCharacters(e){return e.replace(/>/g,`>`).replace(/</g,`<`).replace(/ /g,` `)}};function u2(e,t){let n=(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=r.attributeNewValue,o=i.writer,s=i.mapper.toViewElement(r.item),c=[...s.getChildren()].find(e=>e.getCustomProperty(`media-content`));o.remove(c);let l=e.getMediaViewElement(o,a,t);o.insert(o.createPositionAt(s,0),l)};return e=>{e.on(`attribute:url:media`,n)}}function d2(e,t,n){return t.setCustomProperty(`media`,!0,e),UE(e,t,{label:n})}function f2(e){let t=e.getSelectedElement();return t&&p2(t)?t:null}function p2(e){return!!e.getCustomProperty(`media`)&&HE(e)}function m2(e,t,n,r){return e.createContainerElement(`figure`,{class:`media`},[t.getMediaViewElement(e,n,r),e.createSlot()])}function h2(e){let t=e.getSelectedElement();return t&&t.is(`element`,`media`)?t:null}function g2(e,t,n,r){e.change(i=>{let a=i.createElement(`media`,{url:t});e.insertObject(a,n,null,{setSelection:`on`,findOptimalPosition:r?`auto`:void 0})})}var _2=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=h2(t);this.value=n?n.getAttribute(`url`):void 0,this.isEnabled=y2(t)||v2(t,e)}execute(e){let t=this.editor.model,n=t.document.selection,r=h2(n);r?t.change(t=>{t.setAttribute(`url`,e,r)}):g2(t,e,n,!0)}};function v2(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!t.schema.isLimit(n)&&(n=n.parent),t.schema.checkChild(n,`media`)}function y2(e){let t=e.getSelectedElement();return!!t&&t.name===`media`}var b2=class{locale;providerDefinitions;constructor(e,t){let n=t.providers,r=t.extraProviders||[],i=new Set(t.removeProviders),a=n.concat(r).filter(e=>{let t=e.name;return t?!i.has(t):(T(`media-embed-no-provider-name`,{provider:e}),!1)});this.locale=e,this.providerDefinitions=a}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,n){return this._getMedia(t).getViewElement(e,n)}_getMedia(e){if(!e)return new x2(this.locale);e=e.trim();for(let t of this.providerDefinitions){let n=t.html,r=A(t.url);for(let t of r){let r=this._getUrlMatches(e,t);if(r)return new x2(this.locale,e,r,n)}}return null}_getUrlMatches(e,t){let n=e.match(t);if(n)return n;let r=e.replace(/^https?:\\/\\//,``);return n=r.match(t),n||(r=r.replace(/^www\\./,``),n=r.match(t),n)?n:null}},x2=class{url;_locale;_match;_previewRenderer;constructor(e,t,n,r){this.url=this._getValidUrl(t),this._locale=e,this._match=n,this._previewRenderer=r}getViewElement(e,t){let n={},r;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(n[`data-oembed-url`]=this.url),t.renderForEditingView&&(n.class=`ck-media__wrapper`);let i=this._getPreviewHtml(t);r=e.createRawElement(`div`,n,(e,t)=>{t.setContentOf(e,i)})}else this.url&&(n.url=this.url),r=e.createEmptyElement(t.elementName,n);return e.setCustomProperty(`media-content`,!0,r),r}_getPreviewHtml(e){return this._previewRenderer?this._previewRenderer(this._match):this.url&&e.renderForEditingView?this._getPlaceholderHtml():``}_getPlaceholderHtml(){let e=new Ly,t=this._locale.t;return e.content=fv,e.viewBox=`0 0 64 42`,new ga({tag:`div`,attributes:{class:`ck ck-reset_all ck-media__placeholder`},children:[{tag:`div`,attributes:{class:`ck-media__placeholder__icon`},children:[e]},{tag:`a`,attributes:{class:`ck-media__placeholder__url`,target:`_blank`,rel:`noopener noreferrer`,href:this.url,\"data-cke-tooltip-text\":t(`Open media in new tab`)},children:[{tag:`span`,attributes:{class:`ck-media__placeholder__url__text`},children:[this.url]}]}]}).render().outerHTML}_getValidUrl(e){return e?e.match(/^https?/)?e:`https://`+e:null}},S2=class extends F{static get pluginName(){return`MediaEmbedEditing`}static get isOfficialPlugin(){return!0}registry;constructor(e){super(e),e.config.define(`mediaEmbed`,{elementName:`oembed`,providers:[{name:`dailymotion`,url:[/^dailymotion\\.com\\/video\\/(\\w+)/,/^dai.ly\\/(\\w+)/],html:e=>`
    `},{name:`spotify`,url:[/^open\\.spotify\\.com\\/(artist\\/\\w+)/,/^open\\.spotify\\.com\\/(album\\/\\w+)/,/^open\\.spotify\\.com\\/(track\\/\\w+)/],html:e=>{let t=e[1],n=t.startsWith(`track/`);return`
    `}},{name:`youtube`,url:[/^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,/^(?:m\\.)?youtube\\.com\\/shorts\\/([\\w-]+)(?:\\?t=(\\d+))?/,/^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,/^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,/^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/],html:e=>{let t=e[1],n=e[2];return`
    `}},{name:`vimeo`,url:[/^vimeo\\.com\\/(\\d+)/,/^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,/^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,/^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,/^player\\.vimeo\\.com\\/video\\/(\\d+)/],html:e=>`
    `},{name:`instagram`,url:[/^instagram\\.com\\/p\\/(\\w+)/,/^instagram\\.com\\/reel\\/(\\w+)/]},{name:`twitter`,url:[/^twitter\\.com/,/^x\\.com/]},{name:`googleMaps`,url:[/^google\\.com\\/maps/,/^goo\\.gl\\/maps/,/^maps\\.google\\.com/,/^maps\\.app\\.goo\\.gl/]},{name:`flickr`,url:/^flickr\\.com/},{name:`facebook`,url:/^facebook\\.com/}]}),this.registry=new b2(e.locale,e.config.get(`mediaEmbed`))}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion,i=e.config.get(`mediaEmbed.previewsInData`),a=e.config.get(`mediaEmbed.elementName`),o=this.registry;e.commands.add(`mediaEmbed`,new _2(e)),t.register(`media`,{inheritAllFrom:`$blockObject`,allowAttributes:[`url`]}),r.for(`dataDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>{let n=e.getAttribute(`url`);return m2(t,o,n,{elementName:a,renderMediaPreview:!!n&&i})}}),r.for(`dataDowncast`).add(u2(o,{elementName:a,renderMediaPreview:i})),r.for(`editingDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>d2(m2(t,o,e.getAttribute(`url`),{elementName:a,renderForEditingView:!0}),t,n(`media widget`))}),r.for(`editingDowncast`).add(u2(o,{elementName:a,renderForEditingView:!0})),r.for(`upcast`).elementToElement({view:e=>[`oembed`,a].includes(e.name)&&e.getAttribute(`url`)?{name:!0}:null,model:(e,{writer:t})=>{let n=e.getAttribute(`url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).elementToElement({view:{name:`div`,attributes:{\"data-oembed-url\":!0}},model:(e,{writer:t})=>{let n=e.getAttribute(`data-oembed-url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).add(e=>{e.on(`element:figure`,(e,t,n)=>{if(!n.consumable.consume(t.viewItem,{name:!0,classes:`media`}))return;let{modelRange:r,modelCursor:i}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=r,t.modelCursor=i,j(r.getItems())||n.consumable.revert(t.viewItem,{name:!0,classes:`media`})})})}};const C2=/^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;var w2=class extends F{static get requires(){return[PO,hT,Ik]}static get pluginName(){return`AutoMediaEmbed`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedMediaBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedMediaBetweenPositions(e,t){let n=this.editor,r=n.plugins.get(S2).registry,i=new xl(e,t),a=i.getWalker({ignoreElementEnd:!0}),o=``;for(let e of a)e.item.is(`$textProxy`)&&(o+=e.item.data);if(o=o.trim(),!o.match(C2)){i.detach();return}if(!r.hasMedia(o)){i.detach();return}if(!n.commands.get(`mediaEmbed`).isEnabled){i.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=u.window.setTimeout(()=>{n.model.change(e=>{this._timeoutId=null,e.remove(i),i.detach();let t=null;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert),g2(n.model,o,t,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(hT).requestUndoOnBackspace()},100)}},T2=class extends P{focusTracker;keystrokes;urlInputView;_validators;_urlInputViewInfoDefault;_urlInputViewInfoTip;constructor(e,t){super(t),this.focusTracker=new M,this.keystrokes=new N,this.set(`mediaURLInputValue`,``),this.urlInputView=this._createUrlInput(),this._validators=e,this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-media-form`,`ck-responsive-form`],tabindex:`-1`},children:[this.urlInputView]})}render(){super.render(),Qa({view:this}),this.focusTracker.add(this.urlInputView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.urlInputView.focus()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.value=e.trim()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx),n=t.fieldView;return this._urlInputViewInfoDefault=e(`Paste the media URL in the input.`),this._urlInputViewInfoTip=e(`Tip: Paste the URL into the content to embed faster.`),t.label=e(`Media URL`),t.infoText=this._urlInputViewInfoDefault,n.inputMode=`url`,n.on(`input`,()=>{t.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),t}},E2=class extends F{static get requires(){return[S2,Qy]}static get pluginName(){return`MediaEmbedUI`}static get isOfficialPlugin(){return!0}_formView;init(){let e=this.editor;e.ui.componentFactory.add(`mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(H);return t.tooltip=!0,t.label=e(`Insert media`),t}),e.ui.componentFactory.add(`menuBar:mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(U);return t.label=e(`Media`),t})}_createDialogButton(e){let t=this.editor,n=new e(t.locale),r=t.commands.get(`mediaEmbed`),i=this.editor.plugins.get(`Dialog`);return n.icon=pv,n.bind(`isEnabled`).to(r,`isEnabled`),n.on(`execute`,()=>{i.id===`mediaEmbed`?i.hide():this._showDialog()}),n}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.commands.get(`mediaEmbed`),r=e.locale.t,i=n.value!==void 0;if(!this._formView){let t=e.plugins.get(S2).registry;this._formView=new(Xa(T2))(D2(e.t,t),e.locale),this._formView.on(`submit`,()=>this._handleSubmitForm())}t.show({id:`mediaEmbed`,title:r(`Media embed`),content:this._formView,isModal:!0,onShow:()=>{this._formView.url=n.value||``,this._formView.resetFormStatus(),this._formView.urlInputView.fieldView.select()},actionButtons:[{label:r(`Cancel`),withText:!0,onExecute:()=>t.hide()},{label:r(i?`Save`:`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSubmitForm()}]})}_handleSubmitForm(){let e=this.editor,t=e.plugins.get(`Dialog`);this._formView.isValid()&&(e.execute(`mediaEmbed`,this._formView.url),t.hide(),e.editing.view.focus())}};function D2(e,t){return[t=>{if(!t.url.length)return e(`The URL must not be empty.`)},n=>{if(!t.hasMedia(n.url))return e(`This media URL is not supported.`)}]}var O2=class extends F{static get requires(){return[S2,E2,w2,xD]}static get pluginName(){return`MediaEmbed`}static get isOfficialPlugin(){return!0}};const k2={alignLeft:{name:`alignLeft`,title:`Left aligned media`,icon:xv,className:`media-style-align-left`},alignBlockLeft:{name:`alignBlockLeft`,title:`Left aligned media`,icon:wv,className:`media-style-block-align-left`},alignCenter:{name:`alignCenter`,title:`Centered media`,icon:yv,isDefault:!0},alignBlockRight:{name:`alignBlockRight`,title:`Right aligned media`,icon:Tv,className:`media-style-block-align-right`},alignRight:{name:`alignRight`,title:`Right aligned media`,icon:Sv,className:`media-style-align-right`}},A2={inlineLeft:xv,left:wv,center:yv,right:Tv,inlineRight:Sv},j2=[{name:`mediaEmbed:wrapText`,title:`Wrap text`,items:[`mediaEmbed:alignLeft`,`mediaEmbed:alignRight`],defaultItem:`mediaEmbed:alignLeft`},{name:`mediaEmbed:breakText`,title:`Break text`,items:[`mediaEmbed:alignBlockLeft`,`mediaEmbed:alignCenter`,`mediaEmbed:alignBlockRight`],defaultItem:`mediaEmbed:alignCenter`}];function M2(e){return(e.options||[]).map(e=>N2(e)).filter(e=>P2(e))}function N2(e){let t=typeof e==`string`?{name:e}:e,n={...k2[t.name],...t};return typeof n.icon==`string`&&A2[n.icon]&&(n.icon=A2[n.icon]),n}function P2(e){return!e.name||!e.title||!e.icon||!e.isDefault&&!e.className?(F2({style:e}),!1):!0}function F2(e){T(`media-style-configuration-definition-invalid`,e)}function I2(e){return typeof e==`object`&&!!e&&typeof e.defaultItem==`string`}var L2=class extends F{static get requires(){return[kD]}static get pluginName(){return`MediaEmbedToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t;e.plugins.get(kD).register(`mediaEmbed`,{ariaLabel:t(`Media toolbar`),items:R2(e.ui.componentFactory,e.config.get(`mediaEmbed.toolbar`)||[]),getRelatedElement:f2})}};function R2(e,t){return t.map(e=>I2(e)?e.name:e).filter(t=>typeof t!=`string`||!t.startsWith(`mediaEmbed:`)||e.has(t))}var z2=class extends I{refresh(){let e=h2(this.editor.model.document.selection);this.isEnabled=!!e,!e||!e.hasAttribute(`resizedWidth`)?this.value=null:this.value=e.getAttribute(`resizedWidth`)}execute(e){let t=this.editor.model,n=h2(t.document.selection);n&&t.change(t=>{t.setAttribute(`resizedWidth`,e.width,n)})}};const B2=`media_resized`;var V2=class extends F{static get requires(){return[S2]}static get pluginName(){return`MediaEmbedResizeEditing`}static get licenseFeatureCode(){return`MER`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`mediaEmbed`,{resizeUnit:`%`,resizeOptions:[{name:`resizeMediaEmbed:original`,value:null,icon:`original`},{name:`resizeMediaEmbed:custom`,value:`custom`,icon:`custom`},{name:`resizeMediaEmbed:25`,value:`25`,icon:`small`},{name:`resizeMediaEmbed:50`,value:`50`,icon:`medium`},{name:`resizeMediaEmbed:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor;e.commands.add(`resizeMediaEmbed`,new z2(e)),this._registerConverters()}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;e.extend(`media`,{allowAttributes:[`resizedWidth`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0})}_registerConverters(){let e=this.editor;e.conversion.for(`downcast`).add(e=>e.on(`attribute:resizedWidth:media`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(B2,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(B2,i))})),e.conversion.for(`upcast`).attributeToAttribute({view:{name:`figure`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>e.hasClass(`media`)?e.getStyle(`width`):null}}),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[B2]})})})}},H2=class extends F{static get requires(){return[GD]}static get pluginName(){return`MediaEmbedResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.model,n=e.plugins.get(GD);this.listenTo(t.document,`change:data`,()=>{for(let r of t.document.differ.getChanges()){if(r.type!==`insert`||r.name===`$text`)continue;let i=t.createRange(r.position,r.position.getShiftedBy(r.length));for(let t of i.getItems()){if(!t.is(`element`,`media`))continue;let r=e.editing.mapper.toViewElement(t);r&&(n.getResizerByViewElement(r)||this._attachResizer(t,r))}}},{priority:`low`})}_attachResizer(e,t){let n=this.editor,r=n.editing.view,i=n.plugins.get(GD).attachTo({unit:n.config.get(`mediaEmbed.resizeUnit`),modelElement:e,viewElement:t,editor:n,getHandleHost:e=>e.querySelector(`.ck-media__wrapper`),getResizeHost:e=>e,onCommit:e=>{r.change(e=>e.removeClass(B2,t)),n.execute(`resizeMediaEmbed`,{width:e})}});i.bind(`isEnabled`).to(this),i.on(`updateSize`,()=>{t.hasClass(`media_resized`)||r.change(e=>e.addClass(B2,t))}),r.once(`render`,()=>i.redraw())}};const U2={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var W2=class extends F{static get requires(){return[V2]}static get pluginName(){return`MediaEmbedResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`mediaEmbed.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`mediaEmbed.resizeOptions`),n=e.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerMediaEmbedResizeButton(e);this._registerMediaEmbedResizeDropdown(t)}_registerMediaEmbedResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeMediaEmbed`),s=this._getOptionLabelValue(e,!0);if(!U2[i])throw new w(`mediaembedresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:U2[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let e=t.plugins.get(`MediaEmbedCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,K2(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeMediaEmbed`,{width:e})})}return a})}_registerMediaEmbedResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value);t.ui.componentFactory.add(`resizeMediaEmbed`,i=>{let a=t.commands.get(`resizeMediaEmbed`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize media`);return s.set({tooltip:c,commandValue:r?r.value:null,icon:U2.medium,isToggleable:!0,label:r?this._getOptionLabelValue(r):``,withText:!0,class:`ck-resize-media-embed-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e||(r?this._getOptionLabelValue(r):``)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Media resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o})}_getOptionLabelValue(e,t=!1){let n=this.editor.t;if(e.label)return e.label;let r=G2(e);return t?r?n(`Custom media size`):e.value?n(`Resize media to %0`,e.value+this._resizeUnit):n(`Resize media to the original size`):r?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>G2(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let r=n.plugins.get(`MediaEmbedCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,q2(o))}else a={type:`button`,model:new RC({commandName:`resizeMediaEmbed`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,K2(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function G2(e){return e.value===`custom`}function K2(e){return(t,n)=>t===void 0||!n?!1:t===e}function q2(e){return(t,n)=>!e.some(e=>K2(e)(t,n))}function J2(e){let{editing:t}=e,n=h2(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function Y2(e,t){let n=J2(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}function X2(e,t){let n=J2(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var Z2=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-media-embed-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Media Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize media (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({min:.1,step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}},Q2=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`MediaEmbedCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`);let n=Xa(Z2);this._form=new n(t.locale,e,e4(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeMediaEmbed`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:$2(t)});let r=Y2(t,e),i=r?r.value.toFixed(1):``,a=X2(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function $2(e){let t=e.editing.view,n=ab.defaultPositions;return{target:t.domConverter.mapViewToDom(f2(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}function e4(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var t4=class extends F{static get requires(){return[V2,H2,Q2,W2]}static get pluginName(){return`MediaEmbedResize`}static get isOfficialPlugin(){return!0}},n4=class extends I{_styles;_defaultStyleName;constructor(e,t){super(e),this._styles=new Map(t.map(e=>[e.name,e]));let n=t.find(e=>e.isDefault);this._defaultStyleName=n?n.name:null}refresh(){let e=h2(this.editor.model.document.selection);if(this.isEnabled=!!e,!e)this.value=!1;else if(e.hasAttribute(`mediaStyle`)){let t=e.getAttribute(`mediaStyle`);this.value=this._styles.has(t)?t:this._defaultStyleName??!1}else this.value=this._defaultStyleName??!1}execute(e){let t=this.editor.model,n=h2(t.document.selection),r=e.value;if(!r||this._styles.get(r)?.isDefault){t.change(e=>{e.removeAttribute(`mediaStyle`,n)});return}this._styles.has(r)&&t.change(e=>{e.setAttribute(`mediaStyle`,r,n)})}},r4=class extends F{normalizedStyles;static get requires(){return[S2]}static get pluginName(){return`MediaEmbedStyleEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema;e.config.define(`mediaEmbed.styles`,{options:Object.keys(k2)}),this.normalizedStyles=M2(e.config.get(`mediaEmbed.styles`)),t.extend(`media`,{allowAttributes:[`mediaStyle`]}),t.setAttributeProperties(`mediaStyle`,{isFormatting:!0}),e.commands.add(`mediaStyle`,new n4(e,this.normalizedStyles)),this._registerConverters()}_registerConverters(){let e=this.editor,t=new Map(this.normalizedStyles.filter(e=>!e.isDefault&&e.className).map(e=>[e.name,e.className]));e.conversion.for(`downcast`).add(e=>e.on(`attribute:mediaStyle:media`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=t.get(n.attributeOldValue),s=t.get(n.attributeNewValue);o&&a.removeClass(o,i),s&&a.addClass(s,i)})),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,n,r)=>{if(!n.modelRange)return;let i=j(n.modelRange.getItems());if(!(!i||!i.is(`element`,`media`)))for(let[e,a]of t)r.consumable.consume(n.viewItem,{classes:a})&&r.writer.setAttribute(`mediaStyle`,e,i)},{priority:`low`})})}},i4=class extends F{static get requires(){return[r4]}static get pluginName(){return`MediaEmbedStyleUI`}static get isOfficialPlugin(){return!0}init(){let e=this._getLocalizedTitles();for(let t of this._getButtonDefinitions(e))this._createButton(t);for(let t of this._getDropdownDefinitions(e))this._createDropdown(t)}_getButtonDefinitions(e){return this.editor.plugins.get(r4).normalizedStyles.map(t=>({name:t.name,label:e[t.title]||t.title,icon:t.icon}))}_getLocalizedTitles(){let e=this.editor.t;return{\"Left aligned media\":e(`Left aligned media`),\"Centered media\":e(`Centered media`),\"Right aligned media\":e(`Right aligned media`),\"Wrap text\":e(`Wrap text`),\"Break text\":e(`Break text`)}}_getDropdownDefinitions(e){let t=this.editor.plugins.get(r4),n=new Set(t.normalizedStyles.map(({name:e})=>`mediaEmbed:${e}`)),r=[],i=(t,i)=>{let a=t.items.filter(e=>n.has(e));if(i&&a.length!==t.items.length&&s4({dropdown:t}),a.length<2)return;let o=n.has(t.defaultItem)?t.defaultItem:a[0];r.push({name:t.name,title:e[t.title]||t.title,items:a,defaultItem:o})};for(let e of j2)i(e,!1);for(let e of this._collectCustomDropdowns())i(e,!0);return r}_collectCustomDropdowns(){return(this.editor.config.get(`mediaEmbed.toolbar`)||[]).filter(e=>I2(e)&&o4(e))}_createButton(e){let t=this.editor,n=`mediaEmbed:${e.name}`;t.ui.componentFactory.add(n,n=>{let r=t.commands.get(`mediaStyle`),i=new H(n);return i.set({label:e.label,icon:e.icon,tooltip:!0,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,t=>t===e.name),i.on(`execute`,()=>{t.execute(`mediaStyle`,{value:e.name}),t.editing.view.focus()}),i})}_createDropdown(e){let t=this.editor,n=t.ui.componentFactory;n.add(e.name,r=>{let i=e.items.map(e=>n.create(e)),a=i[e.items.indexOf(e.defaultItem)],o=(...e)=>{let t=e.findIndex(Boolean);return t<0?a:i[t]},s=Nx(r,Mx),c=s.buttonView;return Fx(s,i,{enableActiveItemFocusOnDropdownOpen:!0}),c.set({label:a4(e.title,a.label),class:null,tooltip:!0}),c.arrowView.unbind(`label`),c.arrowView.set({label:e.title}),c.bind(`icon`).toMany(i,`isOn`,(...e)=>o(...e).icon),c.bind(`label`).toMany(i,`isOn`,(...t)=>a4(e.title,o(...t).label)),c.bind(`isOn`).toMany(i,`isOn`,(...e)=>e.some(Boolean)),c.bind(`class`).toMany(i,`isOn`,(...e)=>e.some(Boolean)?`ck-splitbutton_flatten`:void 0),this.listenTo(c,`execute`,()=>{i.some(({isOn:e})=>e)?s.isOpen=!s.isOpen:a.fire(`execute`)}),s.bind(`isEnabled`).toMany(i,`isEnabled`,(...e)=>e.some(Boolean)),this.listenTo(s,`execute`,()=>{t.editing.view.focus()}),s})}};function a4(e,t){return`${e}: ${t}`}function o4(e){let t=e.name.startsWith(`mediaEmbed:`)&&typeof e.title==`string`&&e.title.length>0&&e.items.length>0&&e.items.every(e=>typeof e==`string`&&e.startsWith(`mediaEmbed:`))&&e.items.includes(e.defaultItem);return t||s4({dropdown:e}),t}function s4(e){T(`media-style-configuration-definition-invalid`,e)}var c4=class extends F{static get requires(){return[r4,i4]}static get pluginName(){return`MediaEmbedStyle`}static get isOfficialPlugin(){return!0}};const l4=Wr(`px`);var u4=class extends NC{_options;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`top`,0),this.set(`height`,0),this._options=t,this.extendTemplate({attributes:{tabindex:-1,\"aria-hidden\":`true`,class:[`ck-minimap__iframe`],style:{top:n.to(`top`,e=>l4(e)),height:n.to(`height`,e=>l4(e))}}})}render(){return super.render().then(()=>{this._prepareDocument()})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}_prepareDocument(){let e=this.element.contentWindow.document,t=e.adoptNode(this._options.domRootClone),n=this._options.useSimplePreview?`\n\t\t\t.ck.ck-editor__editable_inline img {\n\t\t\t\tfilter: contrast( 0 );\n\t\t\t}\n\n\t\t\tp, li, a, figcaption, span {\n\t\t\t\tbackground: hsl(0, 0%, 80%) !important;\n\t\t\t\tcolor: hsl(0, 0%, 80%) !important;\n\t\t\t}\n\n\t\t\th1, h2, h3, h4 {\n\t\t\t\tbackground: hsl(0, 0%, 60%) !important;\n\t\t\t\tcolor: hsl(0, 0%, 60%) !important;\n\t\t\t}\n\t\t`:``,r=`\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t${this._options.pageStyles.map(e=>typeof e==`string`?``:``).join(`\n`)}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t`;e.open(),e.write(r),e.close(),e.body.appendChild(t)}};const d4=Wr(`px`);var f4=class extends P{constructor(e){super(e);let t=this.bindTemplate;this.set(`height`,0),this.set(`top`,0),this.set(`scrollProgress`,0),this.set(`_isDragging`,!1),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap__position-tracker`,t.if(`_isDragging`,`ck-minimap__position-tracker_dragging`)],style:{top:t.to(`top`,e=>d4(e)),height:t.to(`height`,e=>d4(e))},\"data-progress\":t.to(`scrollProgress`)},on:{mousedown:t.to(()=>{this._isDragging=!0})}})}render(){super.render(),this.listenTo(u.document,`mousemove`,(e,t)=>{this._isDragging&&this.fire(`drag`,t.movementY)},{useCapture:!0}),this.listenTo(u.document,`mouseup`,()=>{this._isDragging=!1},{useCapture:!0})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}setScrollProgress(e){this.scrollProgress=e}},p4=class extends P{_positionTrackerView;_scaleRatio;_minimapIframeView;constructor({locale:e,scaleRatio:t,pageStyles:n,extraClasses:r,useSimplePreview:i,domRootClone:a}){super(e);let o=this.bindTemplate;this._positionTrackerView=new f4(e),this._positionTrackerView.delegate(`drag`).to(this),this._scaleRatio=t,this._minimapIframeView=new u4(e,{useSimplePreview:i,pageStyles:n,extraClasses:r,scaleRatio:t,domRootClone:a}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap`]},children:[this._positionTrackerView],on:{click:o.to(this._handleMinimapClick.bind(this)),wheel:o.to(this._handleMinimapMouseWheel.bind(this))}})}destroy(){this._minimapIframeView.destroy(),super.destroy()}get height(){return new O(this.element).height}get scrollHeight(){return Math.max(0,Math.min(this.height,this._minimapIframeView.height)-this._positionTrackerView.height)}render(){super.render(),this._minimapIframeView.render(),this.element.appendChild(this._minimapIframeView.element)}setContentHeight(e){this._minimapIframeView.setHeight(e*this._scaleRatio)}setScrollProgress(e){let t=this._minimapIframeView,n=this._positionTrackerView;if(t.heighta.markToSync(`children`,t)),r.on(`change:attributes`,(e,t)=>a.markToSync(`attributes`,t)),r.on(`change:text`,(e,t)=>a.markToSync(`text`,t)),a.render(),e.editing.view.on(`render`,()=>a.render()),e.on(`destroy`,()=>{i.unbindDomElement(o)}),o}function h4(){return Array.from(u.document.styleSheets).map(e=>e.href&&!e.href.startsWith(u.window.location.origin)?{href:e.href}:Array.from(e.cssRules).filter(e=>!(e instanceof CSSMediaRule)).map(e=>e.cssText).join(` \n`))}function g4(e){return new O(e===u.document.body?u.window:e)}function _4(e){return e===u.document.body?u.window.innerHeight:e.clientHeight}function v4(e){return e===u.document.body?u.window:e}var y4=class extends F{static get pluginName(){return`Minimap`}static get isOfficialPlugin(){return!0}_minimapView;_scrollableRootAncestor;_editingRootElement;init(){let e=this.editor;this._minimapView=null,this._scrollableRootAncestor=null,this.listenTo(e.ui,`ready`,this._onUiReady.bind(this))}destroy(){super.destroy(),this._minimapView.destroy(),this._minimapView.element.remove()}_onUiReady(){let e=this.editor,t=this._editingRootElement=e.ui.getEditableElement();if(this._scrollableRootAncestor=wr(t),!t.ownerDocument.body.contains(t)){e.ui.once(`update`,this._onUiReady.bind(this));return}this._initializeMinimapView(),this.listenTo(e.editing.view,`render`,()=>{e.state===`ready`&&this._syncMinimapToEditingRootScrollPosition()}),this._syncMinimapToEditingRootScrollPosition()}_initializeMinimapView(){let e=this.editor,t=e.locale,n=e.config.get(`minimap.useSimplePreview`),r=e.config.get(`minimap.container`),i=this._scrollableRootAncestor,a=g4(this._editingRootElement).width,o=g4(r).width/a,s=this._minimapView=new p4({locale:t,scaleRatio:o,pageStyles:h4(),extraClasses:e.config.get(`minimap.extraClasses`),useSimplePreview:n,domRootClone:m4(e)});s.render(),s.listenTo(u.document,`scroll`,(e,t)=>{if(i===u.document.body){if(t.target!==u.document)return}else if(t.target!==i)return;this._syncMinimapToEditingRootScrollPosition()},{useCapture:!0,usePassive:!0}),s.listenTo(u.window,`resize`,()=>{this._syncMinimapToEditingRootScrollPosition()}),s.on(`drag`,(e,t)=>{let n;n=s.scrollHeight===0?0:t/s.scrollHeight;let r=n*(i.scrollHeight-_4(i));v4(i).scrollBy(0,Math.round(r))}),s.on(`click`,(e,t)=>{let n=t*i.scrollHeight;v4(i).scrollBy(0,Math.round(n))}),r.appendChild(s.element)}_syncMinimapToEditingRootScrollPosition(){let e=this._editingRootElement,t=this._minimapView;t.setContentHeight(e.offsetHeight);let n=g4(e),r=g4(this._scrollableRootAncestor),i;r.getIntersection(n)&&(r.contains(n)||n.top>r.top?i=0:(i=(n.top-r.top)/(r.height-n.height),i=Math.max(0,Math.min(i,1))),t.setPositionTrackerHeight(r.getIntersection(n).height),t.setScrollProgress(i))}},b4=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=x4(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`pageBreak`);e.insertObject(n,null,null,{setSelection:`after`})})}};function x4(e,t,n){let r=S4(e,n);return t.checkChild(r,`pageBreak`)}function S4(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var C4=class extends F{static get pluginName(){return`PageBreakEditing`}static get licenseFeatureCode(){return`PB`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`pageBreak`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>t.createContainerElement(`div`,{class:`page-break`,style:`page-break-after: always`},t.createContainerElement(`span`,{style:`display: none`}))}),r.for(`editingDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>{let r=n(`Page break`),i=t.createContainerElement(`div`),a=t.createRawElement(`span`,{class:`page-break__label`},function(e){e.innerText=n(`Page break`)});return t.addClass(`page-break`,i),t.insert(t.createPositionAt(i,0),a),w4(i,t,r)}}),r.for(`upcast`).elementToElement({view:e=>{let t=e.getStyle(`page-break-before`)==`always`,n=e.getStyle(`page-break-after`)==`always`;if(!t&&!n)return null;if(e.childCount==1){let t=e.getChild(0);if(!t.is(`element`,`span`)||t.getStyle(`display`)!=`none`)return null}else if(e.childCount>1)return null;return{name:!0,styles:[...t?[`page-break-before`]:[],...n?[`page-break-after`]:[]],...e.hasClass(`page-break`)&&{classes:[`page-break`]}}},model:`pageBreak`,converterPriority:`high`}),e.commands.add(`pageBreak`,new b4(e))}};function w4(e,t,n){return t.setCustomProperty(`pageBreak`,!0,e),UE(e,t,{label:n})}var T4=class extends F{static get pluginName(){return`PageBreakUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`pageBreak`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:pageBreak`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`pageBreak`),i=new e(t.locale),a=n.t;return i.set({label:a(`Page break`),icon:Mv}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`pageBreak`),t.editing.view.focus()}),i}},E4=class extends F{static get requires(){return[C4,T4,xD]}static get pluginName(){return`PageBreak`}static get isOfficialPlugin(){return!0}};function D4(e,t){let n=[];for(let r of t.createRangeIn(e)){let e=r.item;e.is(`element`,`a`)&&!e.hasAttribute(`href`)&&(e.hasAttribute(`id`)||e.hasAttribute(`name`))&&n.push(e)}for(let e of n){let n=e.parent.getChildIndex(e)+1,r=e.getChildren();t.insertChild(n,r,e.parent),O4(e)&&t.remove(e)}}function O4(e){let t=e.getAttribute(`name`);return!!t&&t.startsWith(`_`)}function k4(e){let t=parseFloat(e);return e.endsWith(`pt`)?j4(t*96/72):e.endsWith(`pc`)?j4(t*12*96/72):e.endsWith(`in`)?j4(t*96):e.endsWith(`cm`)?j4(t*96/2.54):e.endsWith(`mm`)?j4(t/10*96/2.54):e}function A4(e){return e!==void 0&&e.endsWith(`px`)}function j4(e){return Math.round(e)+`px`}function M4(e,t,n,r=!1){if(!e.childCount)return;let i=new Np(e.document),a=L4(e,i);if(!a.length)return;let o=[],s=[],c=P4();for(let e of a)if(e.indent!==void 0){R4(e)||(F4(i,s,c),c=P4(),o.length=1,s.length=0);let a=`${e.id}:${e.indent}`,l=r?e.indent-1:Math.min(e.indent-1,s.length);l0&&(F4(i,s,c),c=P4()),o.length=l,s.length=l),ls.length-1||s[l].listElement.name!=u.type){u.type==`ol`&&e.id!==void 0&&o[l]&&o[l][a]&&(u.startIndex=o[l][a]);let t=G4(u,i,n);if(s.length==0){let n=e.element.parent,r=n.getChildIndex(e.element)+1;i.insertChild(r,t,n)}else if(l==0){let e=s[0].listElement,n=e.parent,r=n.getChildIndex(e)+1;i.insertChild(r,t,n)}else{let e=s[l-1].listItemElements;i.appendChild(t,e[e.length-1])}s[l]={...e,listElement:t,listItemElements:[]},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1)}else s[l].isIntermediate&&(K4(s[l].listElement,u,i,n),s[l]={...e,listElement:s[l].listElement,listItemElements:s[l].listItemElements},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1));let d=e.element.name==`li`?e.element:i.createElement(`li`);N4(i,s,c,e,d,l),i.appendChild(d,s[l].listElement),s[l].listItemElements.push(d),e.id!==void 0&&o[l]&&o[l][a]++,e.element!=d&&i.appendChild(e.element,d),J4(e.element,i),i.removeStyle(`text-indent`,e.element),i.removeStyle(`margin-left`,e.element)}else{let t=s.find(t=>t.marginLeft==e.marginLeft);if(t){let n=t.listItemElements;i.appendChild(e.element,n[n.length-1]),i.removeStyle(`margin-left`,e.element),s.length=s.indexOf(t)+1,o.length=s.length+1}else F4(i,s,c),c=P4(),s.length=0}F4(i,s,c)}function N4(e,t,n,r,i,a){if(r.marginLeft===void 0){a==0&&(n.canApplyMarginOnList=!1);return}let o=parseFloat(r.marginLeft),s=0;for(let e=0;e0){e.setStyle(`margin-left`,n.marginLeft,t[0].listElement);for(let t of n.topLevelListItemElements)e.removeStyle(`margin-left`,t)}}function I4(e,t){for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`li`)){let n=e.getChild(0);n&&n.is(`element`,`p`)&&t.unwrapElement(n)}}}function L4(e,t){let n=t.createRangeIn(e),r=[],i=new Set;for(let e of n.getItems()){if(!e.is(`element`)||!e.name.match(/^(p|h\\d+|li|div)$/))continue;let t=Y4(e);if(t!==void 0&&parseFloat(t)==0&&!Array.from(e.getClassNames()).find(e=>e.startsWith(`MsoList`))&&(t=void 0),e.hasStyle(`mso-list`)&&e.getStyle(`mso-list`)!==`none`||t!==void 0&&i.has(t)){let n=q4(e);r.push({element:e,id:n.id,order:n.order,indent:n.indent,marginLeft:t}),t!==void 0&&i.add(t)}else i.clear()}return r}function R4(e){let t=e.element.previousSibling;for(;t&&z4(t);)t=t.previousSibling;if(!t){let t=e.element.parent;return B4(t)&&(!t.previousSibling||B4(t.previousSibling))}return B4(t)}function z4(e){return e.is(`element`)&&e.childCount===0&&/^(?:span|a|o:p)$/.test(e.name)}function B4(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function V4(e,t){let n=RegExp(`@list l${e.id}:level${e.indent}\\\\s*({[^}]*)`,`gi`),r=/mso-level-number-format:([^;]{0,100});/gi,i=/mso-level-start-at:\\s{0,100}([0-9]{0,10})\\s{0,100};/gi,a=RegExp(`@list\\\\s+l${e.id}:level\\\\d\\\\s*{[^{]*mso-level-text:\"%\\\\d\\\\\\\\.`,`gi`),o=RegExp(`@list l${e.id}:level\\\\d\\\\s*{[^{]*mso-level-number-format:`,`gi`),s=a.exec(t),c=o.exec(t),l=s&&!c,u=n.exec(t),d=`decimal`,f=`ol`,p=null;if(u&&u[1]){let t=r.exec(u[1]);if(t&&t[1]&&(d=t[1].trim(),f=d!==`bullet`&&d!==`image`?`ol`:`ul`),d===`bullet`){let t=H4(e.element);t&&(d=t)}else{let e=i.exec(u[1]);e&&e[1]&&(p=parseInt(e[1]))}l&&(f=`ol`)}return{type:f,startIndex:p,style:W4(d),isLegalStyleList:l}}function H4(e){if(e.name==`li`&&e.parent.name==`ul`&&e.parent.hasAttribute(`type`))return e.parent.getAttribute(`type`);let t=U4(e);if(!t)return null;let n=t._data;return n===`o`?`circle`:n===`·`?`disc`:n===`§`?`square`:null}function U4(e){if(e.getChild(0).is(`$text`))return null;for(let t of e.getChildren()){if(!t.is(`element`,`span`))continue;let e=t.getChild(0);if(e)return e.is(`$text`)?e:e.getChild(0)}return null}function W4(e){if(e.startsWith(`arabic-leading-zero`))return`decimal-leading-zero`;switch(e){case`alpha-upper`:return`upper-alpha`;case`alpha-lower`:return`lower-alpha`;case`roman-upper`:return`upper-roman`;case`roman-lower`:return`lower-roman`;case`circle`:case`disc`:case`square`:return e;default:return null}}function G4(e,t,n){let r=t.createElement(e.type);return K4(r,e,t,n),r}function K4(e,t,n,r){t.style&&n.setStyle(`list-style-type`,t.style,e),t.startIndex&&t.startIndex>1&&n.setAttribute(`start`,t.startIndex,e),t.isLegalStyleList&&r&&n.addClass(`legal-list`,e)}function q4(e){let t=e.getStyle(`mso-list`);if(t===void 0)return{};let n=t.match(/(^|\\s{1,100})l(\\d+)/i),r=t.match(/\\s{0,100}lfo(\\d+)/i),i=t.match(/\\s{0,100}level(\\d+)/i);return n&&r&&i?{id:n[2],order:r[1],indent:parseInt(i[1])}:{indent:1}}function J4(e,t){let n=new Po({name:`span`,styles:{\"mso-list\":`Ignore`}}),r=t.createRangeIn(e);for(let e of r)e.type===`elementStart`&&n.match(e.item)&&t.remove(e.item)}function Y4(e){let t=e.getStyle(`margin-left`);return t===void 0||t.endsWith(`px`)?t:k4(t)}function X4(e,t){if(!e.childCount)return;let n=new Np(e.document),r=Q4(e,n);$4(r,e,n),t3(r,e,n),e3(e,n);let i=n3(e,n);i.length&&i3(i,r3(t),n)}function Z4(e){return btoa(e.match(/\\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(``))}function Q4(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n){if(e.type!=`elementStart`)continue;let t=e.item,n=t.previousSibling,a=n&&n.is(`element`)?n.name:null,o=[`Chart`],s=r.match(t),c=t.getAttribute(`o:gfxdata`),l=a===`v:shapetype`,u=c&&o.some(e=>t.getAttribute(`id`).includes(e));s&&c&&!l&&!u&&i.push(e.item.getAttribute(`id`))}return i}function $4(e,t,n){let r=n.createRangeIn(t),i=new Po({name:`img`}),a=[];for(let t of r)if(t.item.is(`element`)&&i.match(t.item)){let n=t.item,r=n.getAttribute(`v:shapes`)?n.getAttribute(`v:shapes`).split(` `):[];r.length&&r.every(t=>e.indexOf(t)>-1)?a.push(n):n.getAttribute(`src`)||a.push(n)}for(let e of a)n.remove(e)}function e3(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n)e.type==`elementStart`&&r.match(e.item)&&i.push(e.item);for(let e of i)t.remove(e)}function t3(e,t,n){let r=n.createRangeIn(t),i=[];for(let t of r)if(t.type==`elementStart`&&t.item.is(`element`,`v:shape`)){let n=t.item.getAttribute(`id`);if(e.includes(n))continue;a(t.item.parent.getChildren(),n)||i.push(t.item)}for(let e of i){let t={src:o(e)};e.hasAttribute(`alt`)&&(t.alt=e.getAttribute(`alt`));let r=n.createElement(`img`,t);n.insertChild(e.index+1,r,e.parent)}function a(e,t){for(let n of e)if(n.is(`element`)&&(n.name==`img`&&n.getAttribute(`v:shapes`)==t||a(n.getChildren(),t)))return!0;return!1}function o(e){for(let t of e.getChildren())if(t.is(`element`)&&t.getAttribute(`src`))return t.getAttribute(`src`)}}function n3(e,t){let n=t.createRangeIn(e),r=new Po({name:`img`}),i=[],a=0;for(let e of n)e.item.is(`element`)&&r.match(e.item)&&(e.item.getAttribute(`src`).startsWith(`file://`)&&i.push({element:e.item,imageIndex:a}),a++);return i}function r3(e){if(!e)return[];let t=/{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/,n=RegExp(`(?:(`+t.source+`))([\\\\da-fA-F\\\\s]+)\\\\}`,`g`),r=e.match(n),i=[];if(r)for(let e of r){let n=!1;e.includes(`\\\\pngblip`)?n=`image/png`:e.includes(`\\\\jpegblip`)&&(n=`image/jpeg`),n&&i.push({hex:e.replace(t,``).replace(/[^\\da-fA-F]/g,``),type:n})}return i}function i3(e,t,n){for(let r=0;r!r.hasStyle(`border-${e}-style`)))t.setStyle(`border-style`,`none`,r);else for(let n of e)r.hasStyle(`border-${n}-style`)||t.setStyle(`border-${n}-style`,`none`,r);let i=[`width`,`height`,...e.map(e=>`border-${e}-width`),...e.map(e=>`padding-${e}`)];for(let e of i)r.hasStyle(e)&&t.setStyle(e,k4(r.getStyle(e)),r)}}function s3(e,t){for(let n of t.createRangeIn(e).getItems())n.is(`element`,`table`)&&(n.getStyle(`width`)===`0px`&&t.removeStyle(`width`,n),n.getAttribute(`width`)===`0`&&t.removeAttribute(`width`,n))}function c3(e,t){let n=new Map,r=new Map,i=null;for(let{item:a}of t.createRangeIn(e))if(a.is(`element`)){if(a.getStyle(`mso-element`)===`footnote-list`){i=a;continue}if(a.hasStyle(`mso-footnote-id`)){let e=a.findAncestor(`element`,e=>e.getStyle(`mso-element`)===`footnote`);if(e){let t=e.getAttribute(`id`);r.set(t,e)}else{let e=a.getStyle(`mso-footnote-id`);n.set(e,a)}continue}}if(!n.size||!i)return;let a=u3(t);t.replace(i,a.wrapper);for(let[e,i]of n){let n=r.get(e);if(!n)continue;t.replace(i,d3(t,e));let o=f3(t,e);l3(t,n);for(let e of n.getChildren()){let n=e;e.is(`element`)&&(n=t.clone(e,!0)),t.appendChild(n,o.content)}t.appendChild(o.listItem,a.list)}}function l3(e,t){let n=[],r=[];for(let{item:i}of e.createRangeIn(t))if(i.is(`element`)&&i.getStyle(`mso-footnote-id`)){n.unshift(i);let{nextSibling:e}=i;e?.is(`$text`)&&e.data.startsWith(` `)&&r.unshift(e)}for(let t of n)e.remove(t);for(let t of r){let n=t.data.substring(1);if(n.length>0){let r=t.parent,i=r.getChildIndex(t),a=e.createText(n);e.remove(t),e.insertChild(i,a,r)}else e.remove(t)}return t}function u3(e){let t=e.createElement(`hr`,{class:`footnotes-divider`}),n=e.createElement(`ol`,{class:`footnotes-list`});return{list:n,wrapper:e.createElement(`div`,{class:`footnotes`},[t,n])}}function d3(e,t){let n=e.createElement(`sup`,{class:`footnote`}),r=e.createElement(`a`,{id:`ref-${t}`,href:`#${t}`});return e.appendChild(r,n),n}function f3(e,t){let n=e.createElement(`li`,{id:t,class:`footnote-definition`}),r=e.createElement(`a`,{href:`#ref-${t}`,class:`footnote-backlink`}),i=e.createElement(`div`,{class:`footnote-content`});return e.appendChild(e.createText(`^`),r),e.appendChild(r,n),e.appendChild(i,n),{listItem:n,content:i}}const p3=//i,m3=/xmlns:o=\"urn:schemas-microsoft-com/i,h3=//i;var g3=class{document;hasMultiLevelListPlugin;hasTablePropertiesPlugin;enableSkipLevelLists;constructor(e,t=!1,n=!1,r=!1){this.document=e,this.hasMultiLevelListPlugin=t,this.hasTablePropertiesPlugin=n,this.enableSkipLevelLists=r}isActive(e){return p3.test(e)||m3.test(e)||h3.test(e)}execute(e){let t=new Np(this.document),n=e.extraContent.stylesString;D4(e.content,t),M4(e.content,n,this.hasMultiLevelListPlugin,this.enableSkipLevelLists),X4(e.content,e.dataTransfer.getData(`text/rtf`)),o3(e.content,t,this.hasTablePropertiesPlugin),s3(e.content,t),c3(e.content,t),a3(e.content)}};function _3(e,t){for(let n of e.getChildren())if(n.is(`element`,`b`)&&n.getStyle(`font-weight`)===`normal`){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function v3(e,t){let n=new _c(new Cs(t.document.stylesProcessor),{renderingMode:`data`}),r=n.blockElements,i=n.inlineObjectElements,a=[];for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`br`)){let n=y3(e,`forward`,t,{blockElements:r,inlineObjectElements:i}),o=y3(e,`backward`,t,{blockElements:r,inlineObjectElements:i}),s=b3(n,r);(b3(o,r)||s)&&a.push(e)}}for(let e of a)e.hasClass(`Apple-interchange-newline`)?t.remove(e):t.replace(e,t.createElement(`p`))}function y3(e,t,n,{blockElements:r,inlineObjectElements:i}){let a=n.createPositionAt(e,t==`forward`?`after`:`before`);return a=a.getLastMatchingPosition(({item:e})=>e.is(`element`)&&!r.includes(e.name)&&!i.includes(e.name),{direction:t}),t==`forward`?a.nodeAfter:a.nodeBefore}function b3(e,t){return!!e&&e.is(`element`)&&t.includes(e.name)}function x3(e,t,n){let r=new Set;for(let n of t.createRangeIn(e).getItems())!n.is(`view:$textProxy`)||!n.data.includes(`\t`)||S3(n.parent)&&r.add(n.textNode);for(let e of r)C3(e,t,n)}function S3(e){let t=e;for(;t;){if(t.is(`element`)&&t.getStyle?.(`white-space`)===`pre-wrap`)return!0;t=t.parent}return!1}function C3(e,t,n){let{parent:r,data:i}=e,a=i.replaceAll(`\t`,` `.repeat(n)),o=r.getChildIndex(e);t.remove(e),t.insertChild(o,t.createText(a),r)}const w3=/id=(\"|')docs-internal-guid-[-0-9a-f]+(\"|')/i;var T3=class{document;constructor(e){this.document=e}isActive(e){return w3.test(e)}execute(e){let t=new Np(this.document);_3(e.content,t),I4(e.content,t),v3(e.content,t),x3(e.content,t,8)}};function E3(e,t){for(let n of e.getChildren())n.is(`element`,`table`)&&n.hasAttribute(`xmlns`)&&t.removeAttribute(`xmlns`,n)}function D3(e,t){for(let n of e.getChildren())if(n.is(`element`,`google-sheets-html-origin`)){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function O3(e,t){for(let n of Array.from(e.getChildren()))n.is(`element`,`style`)&&t.remove(n)}const k3=/[^\\S\\r\\n]*?)[\\r\\n]+([^\\S\\r\\n]*<\\/span>)/g,`$1$2`).replace(/<\\/span>/g,``).replace(/()[\\r\\n]+(<\\/span>)/g,`$1 $2`).replace(/ <\\//g,`\\xA0<\\/o:p>/g,`\\xA0`).replace(/( |\\u00A0)<\\/o:p>/g,``).replace(/>([^\\S\\r\\n]*[\\r\\n]\\s*)<`)}function M3(e){e.querySelectorAll(`span[style*=spacerun]`).forEach(e=>{let t=e,n=t.innerText.length||0;t.innerText=Array(n+1).join(`\\xA0 `).substr(0,n)})}function N3(e){return e.replace(/(\\s+)<\\/span>/g,(e,t)=>t.length===1?` `:Array(t.length+1).join(`\\xA0 `).substr(0,t.length))}function P3(e,t){let n=new DOMParser;e=e.replace(/

    abc

    \n\t\t\t//\n\t\t\tif ( isAttribute && child._canMergeAttributesFrom( wrapElement ) ) {\n\t\t\t\tchild._mergeAttributesFrom( wrapElement );\n\t\t\t\twrapPositions.push( new ViewPosition( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// Wrap the child if it is not an attribute element or if it is an attribute element that should be inside\n\t\t\t// `wrapElement` (due to priority).\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//

    abc

    -->

    abc

    \n\t\t\telse if ( isText || !isAttribute || shouldABeOutsideB( wrapElement, child ) ) {\n\t\t\t\t// Clone attribute.\n\t\t\t\tconst newAttribute = wrapElement._clone();\n\n\t\t\t\t// Wrap current node with new attribute.\n\t\t\t\tchild._remove();\n\t\t\t\tnewAttribute._appendChild( child );\n\n\t\t\t\tparent._insertChild( i, newAttribute );\n\t\t\t\tthis._addToClonedElementsGroup( newAttribute );\n\n\t\t\t\twrapPositions.push( new ViewPosition( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// If other nested attribute is found and it wasn't wrapped (see above), continue wrapping inside it.\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//\n\t\t\telse /* if ( isAttribute ) */ {\n\t\t\t\tthis._wrapChildren( child, 0, child.childCount, wrapElement );\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each wrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of wrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn ViewRange._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n\t * `startOffset` and `endOffset` will be unwrapped.\n\t */\n\tprivate _unwrapChildren( parent: ViewElement, startOffset: number, endOffset: number, unwrapElement: ViewAttributeElement ) {\n\t\tlet i = startOffset;\n\t\tconst unwrapPositions: Array = [];\n\n\t\t// Iterate over each element between provided offsets inside parent.\n\t\t// We don't use tree walker or range iterator because we will be removing and merging potentially multiple nodes,\n\t\t// so it could get messy. It is safer to it manually in this case.\n\t\twhile ( i < endOffset ) {\n\t\t\tconst child = parent.getChild( i )!;\n\n\t\t\t// Skip all text nodes. There should be no container element's here either.\n\t\t\tif ( !child.is( 'attributeElement' ) ) {\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// (In all examples, assume that `unwrapElement` is `` element.)\n\t\t\t//\n\t\t\t// If the child is similar to the given attribute element, unwrap it - it will be completely removed.\n\t\t\t//\n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//\n\t\t\tif ( child.isSimilar( unwrapElement ) ) {\n\t\t\t\tconst unwrapped = child.getChildren();\n\t\t\t\tconst count = child.childCount;\n\n\t\t\t\t// Replace wrapper element with its children\n\t\t\t\tchild._remove();\n\t\t\t\tparent._insertChild( i, unwrapped );\n\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\n\t\t\t\t// Save start and end position of moved items.\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew ViewPosition( parent, i ),\n\t\t\t\t\tnew ViewPosition( parent, i + count )\n\t\t\t\t);\n\n\t\t\t\t// Skip elements that were unwrapped. Assuming there won't be another element to unwrap in child elements.\n\t\t\t\ti += count;\n\t\t\t\tendOffset += count - 1;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If the child is not similar but is an attribute element, try partial unwrapping - remove the same attributes/styles/classes.\n\t\t\t// Partial unwrapping will happen only if the elements have the same name.\n\t\t\t//\n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//\n\t\t\tif ( child._canSubtractAttributesOf( unwrapElement ) ) {\n\t\t\t\tchild._subtractAttributesOf( unwrapElement );\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew ViewPosition( parent, i ),\n\t\t\t\t\tnew ViewPosition( parent, i + 1 )\n\t\t\t\t);\n\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If other nested attribute is found, look through it's children for elements to unwrap.\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//\n\t\t\tthis._unwrapChildren( child, 0, child.childCount, unwrapElement );\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each unwrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of unwrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset || position.offset == endOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn ViewRange._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement}.\n\t *\n\t * @returns New range after wrapping, spanning over wrapping attribute element.\n\t */\n\tprivate _wrapRange( range: ViewRange, attribute: ViewAttributeElement ): ViewRange {\n\t\t// Break attributes at range start and end.\n\t\tconst { start: breakStart, end: breakEnd } = this._breakAttributesRange( range, true );\n\t\tconst parentContainer = breakStart.parent as ViewElement;\n\n\t\t// Wrap all children with attribute.\n\t\tconst newRange = this._wrapChildren( parentContainer, breakStart.offset, breakEnd.offset, attribute );\n\n\t\t// Merge attributes at the both ends and return a new range.\n\t\tconst start = this.mergeAttributes( newRange.start );\n\n\t\t// If start position was merged - move end position back.\n\t\tif ( !start.isEqual( newRange.start ) ) {\n\t\t\tnewRange.end.offset--;\n\t\t}\n\t\tconst end = this.mergeAttributes( newRange.end );\n\n\t\treturn new ViewRange( start, end );\n\t}\n\n\t/**\n\t * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement}.\n\t *\n\t * @returns New position after wrapping.\n\t */\n\tprivate _wrapPosition( position: ViewPosition, attribute: ViewAttributeElement ): ViewPosition {\n\t\t// Return same position when trying to wrap with attribute similar to position parent.\n\t\tif ( attribute.isSimilar( position.parent as any ) ) {\n\t\t\treturn movePositionToTextNode( position.clone() );\n\t\t}\n\n\t\t// When position is inside text node - break it and place new position between two text nodes.\n\t\tif ( position.parent.is( '$text' ) ) {\n\t\t\tposition = breakTextNode( position );\n\t\t}\n\n\t\t// Create fake element that will represent position, and will not be merged with other attributes.\n\t\tconst fakeElement = this.createAttributeElement( '_wrapPosition-fake-element' );\n\t\t( fakeElement as any )._priority = Number.POSITIVE_INFINITY;\n\t\tfakeElement.isSimilar = () => false;\n\n\t\t// Insert fake element in position location.\n\t\t( position.parent as ViewElement )._insertChild( position.offset, fakeElement );\n\n\t\t// Range around inserted fake attribute element.\n\t\tconst wrapRange = new ViewRange( position, position.getShiftedBy( 1 ) );\n\n\t\t// Wrap fake element with attribute (it will also merge if possible).\n\t\tthis.wrap( wrapRange, attribute );\n\n\t\t// Remove fake element and place new position there.\n\t\tconst newPosition = new ViewPosition( fakeElement.parent!, fakeElement.index! );\n\t\tfakeElement._remove();\n\n\t\t// If position is placed between text nodes - merge them and return position inside.\n\t\tconst nodeBefore = newPosition.nodeBefore;\n\t\tconst nodeAfter = newPosition.nodeAfter;\n\n\t\tif ( nodeBefore && nodeBefore.is( 'view:$text' ) && nodeAfter && nodeAfter.is( 'view:$text' ) ) {\n\t\t\treturn mergeTextNodes( nodeBefore, nodeAfter );\n\t\t}\n\n\t\t// If position is next to text node - move position inside.\n\t\treturn movePositionToTextNode( newPosition );\n\t}\n\n\t/**\n\t * Helper function used by other `ViewDowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n\t *\n\t * @param range Range which `start` and `end` positions will be used to break attributes.\n\t * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns New range with located at break positions.\n\t */\n\tprivate _breakAttributesRange( range: ViewRange, forceSplitText: boolean = false ) {\n\t\tconst rangeStart = range.start;\n\t\tconst rangeEnd = range.end;\n\n\t\tvalidateRangeContainer( range, this.document );\n\n\t\t// Break at the collapsed position. Return new collapsed range.\n\t\tif ( range.isCollapsed ) {\n\t\t\tconst position = this._breakAttributes( range.start, forceSplitText );\n\n\t\t\treturn new ViewRange( position, position );\n\t\t}\n\n\t\tconst breakEnd = this._breakAttributes( rangeEnd, forceSplitText );\n\t\tconst count = ( breakEnd.parent as ViewElement ).childCount;\n\t\tconst breakStart = this._breakAttributes( rangeStart, forceSplitText );\n\n\t\t// Calculate new break end offset.\n\t\tbreakEnd.offset += ( breakEnd.parent as ViewElement ).childCount - count;\n\n\t\treturn new ViewRange( breakStart, breakEnd );\n\t}\n\n\t/**\n\t * Helper function used by other `ViewDowncastWriter` methods. Breaks attribute elements at given position.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n\t * is placed inside {@link module:engine/view/emptyelement~ViewEmptyElement ViewEmptyElement}.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n\t * is placed inside {@link module:engine/view/uielement~ViewUIElement UIElement}.\n\t *\n\t * @param position Position where to break attributes.\n\t * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns New position after breaking the attributes.\n\t */\n\tprivate _breakAttributes( position: ViewPosition, forceSplitText: boolean = false ): ViewPosition {\n\t\tconst positionOffset = position.offset;\n\t\tconst positionParent = position.parent;\n\n\t\t// If position is placed inside ViewEmptyElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'emptyElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break an `EmptyElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-empty-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-empty-element', this.document );\n\t\t}\n\n\t\t// If position is placed inside UIElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'uiElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break a `UIElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-ui-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-ui-element', this.document );\n\t\t}\n\n\t\t// If position is placed inside RawElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'rawElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break a `RawElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-raw-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-raw-element', this.document );\n\t\t}\n\n\t\t// There are no attributes to break and text nodes breaking is not forced.\n\t\tif ( !forceSplitText && positionParent.is( '$text' ) && isContainerOrFragment( positionParent.parent! ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Position's parent is container, so no attributes to break.\n\t\tif ( isContainerOrFragment( positionParent ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Break text and start again in new position.\n\t\tif ( positionParent.is( '$text' ) ) {\n\t\t\treturn this._breakAttributes( breakTextNode( position ), forceSplitText );\n\t\t}\n\n\t\tconst length = ( positionParent as any ).childCount;\n\n\t\t//

    foobar{}

    \n\t\t//

    foobar[]

    \n\t\t//

    foobar[]

    \n\t\tif ( positionOffset == length ) {\n\t\t\tconst newPosition = new ViewPosition( positionParent.parent as any, ( positionParent as any ).index + 1 );\n\n\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t} else {\n\t\t\t//

    foo{}bar

    \n\t\t\t//

    foo[]bar

    \n\t\t\t//

    foo{}bar

    \n\t\t\tif ( positionOffset === 0 ) {\n\t\t\t\tconst newPosition = new ViewPosition( positionParent.parent as ViewElement, ( positionParent as any ).index );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t\t//

    foob{}ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\telse {\n\t\t\t\tconst offsetAfter = ( positionParent as any ).index + 1;\n\n\t\t\t\t// Break element.\n\t\t\t\tconst clonedNode = ( positionParent as any )._clone();\n\n\t\t\t\t// Insert cloned node to position's parent node.\n\t\t\t\t( positionParent.parent as any )._insertChild( offsetAfter, clonedNode );\n\t\t\t\tthis._addToClonedElementsGroup( clonedNode );\n\n\t\t\t\t// Get nodes to move.\n\t\t\t\tconst count = ( positionParent as any ).childCount - positionOffset;\n\t\t\t\tconst nodesToMove = ( positionParent as any )._removeChildren( positionOffset, count );\n\n\t\t\t\t// Move nodes to cloned node.\n\t\t\t\tclonedNode._appendChild( nodesToMove );\n\n\t\t\t\t// Create new position to work on.\n\t\t\t\tconst newPosition = new ViewPosition( ( positionParent as any ).parent, offsetAfter );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Stores the information that an {@link module:engine/view/attributeelement~ViewAttributeElement attribute element} was\n\t * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n\t * from the group now keep a reference to the given attribute element.\n\t *\n\t * The clones group can be obtained using {@link module:engine/view/attributeelement~ViewAttributeElement#getElementsWithSameId}.\n\t *\n\t * Does nothing if added element has no {@link module:engine/view/attributeelement~ViewAttributeElement#id id}.\n\t *\n\t * @param element Attribute element to save.\n\t */\n\tprivate _addToClonedElementsGroup( element: ViewNode ): void {\n\t\t// Add only if the element is in document tree.\n\t\tif ( !element.root.is( 'rootElement' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Traverse the element's children recursively to find other attribute elements that also might got inserted.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._addToClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = ( element as any ).id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\tgroup = new Set();\n\t\t\tthis._cloneGroups.set( id, group );\n\t\t}\n\n\t\tgroup.add( element as ViewAttributeElement );\n\t\t( element as any )._clonesGroup = group;\n\t}\n\n\t/**\n\t * Removes all the information about the given {@link module:engine/view/attributeelement~ViewAttributeElement attribute element}\n\t * from its clones group.\n\t *\n\t * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n\t * This allows to reference the whole group even if the element was already removed from the tree.\n\t *\n\t * Does nothing if the element has no {@link module:engine/view/attributeelement~ViewAttributeElement#id id}.\n\t *\n\t * @param element Attribute element to remove.\n\t */\n\tprivate _removeFromClonedElementsGroup( element: ViewNode ) {\n\t\t// Traverse the element's children recursively to find other attribute elements that also got removed.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = ( element as any ).id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\treturn;\n\t\t}\n\n\t\tgroup.delete( element as ViewAttributeElement );\n\t\t// Not removing group from element on purpose!\n\t\t// If other parts of code have reference to this element, they will be able to get references to other elements from the group.\n\t}\n}\n\n// Helper function for `view.writer.wrap`. Checks if given element has any children that are not ui elements.\nfunction _hasNonUiChildren( parent: ViewElement ): boolean {\n\treturn Array.from( parent.getChildren() ).some( child => !child.is( 'uiElement' ) );\n}\n\n/**\n * The `attribute` passed to {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#wrap()`}\n * must be an instance of {@link module:engine/view/attributeelement~ViewAttributeElement `AttributeElement`}.\n *\n * @error view-writer-wrap-invalid-attribute\n */\n\n/**\n * Returns first parent container of specified {@link module:engine/view/position~ViewPosition Position}.\n * Position's parent node is checked as first, then next parents are checked.\n * Note that {@link module:engine/view/documentfragment~ViewDocumentFragment DocumentFragment} is treated like a container.\n *\n * @param position Position used as a start point to locate parent container.\n * @returns Parent container element or `undefined` if container is not found.\n */\nfunction getParentContainer( position: ViewPosition ): ViewContainerElement | ViewDocumentFragment | undefined {\n\tlet parent = position.parent;\n\n\twhile ( !isContainerOrFragment( parent ) ) {\n\t\tif ( !parent ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tparent = parent.parent as any;\n\t}\n\n\treturn ( parent as ViewContainerElement | ViewDocumentFragment );\n}\n\n/**\n * Checks if first {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement} provided to the function\n * can be wrapped outside second element. It is done by comparing elements'\n * {@link module:engine/view/attributeelement~ViewAttributeElement#priority priorities}, if both have same priority\n * {@link module:engine/view/element~ViewElement#getIdentity identities} are compared.\n */\nfunction shouldABeOutsideB( a: ViewAttributeElement, b: ViewAttributeElement ): boolean {\n\tif ( a.priority < b.priority ) {\n\t\treturn true;\n\t} else if ( a.priority > b.priority ) {\n\t\treturn false;\n\t}\n\n\t// When priorities are equal and names are different - use identities.\n\treturn a.getIdentity() < b.getIdentity();\n}\n\n/**\n * Returns new position that is moved to near text node. Returns same position if there is no text node before of after\n * specified position.\n *\n * ```html\n *

    foo[]

    ->

    foo{}

    \n *

    []foo

    ->

    {}foo

    \n * ```\n *\n * @returns Position located inside text node or same position if there is no text nodes\n * before or after position location.\n */\nfunction movePositionToTextNode( position: ViewPosition ): ViewPosition {\n\tconst nodeBefore = position.nodeBefore;\n\n\tif ( nodeBefore && nodeBefore.is( '$text' ) ) {\n\t\treturn new ViewPosition( nodeBefore, nodeBefore.data.length );\n\t}\n\n\tconst nodeAfter = position.nodeAfter;\n\n\tif ( nodeAfter && nodeAfter.is( '$text' ) ) {\n\t\treturn new ViewPosition( nodeAfter, 0 );\n\t}\n\n\treturn position;\n}\n\n/**\n * Breaks text node into two text nodes when possible.\n *\n * ```html\n *

    foo{}bar

    ->

    foo[]bar

    \n *

    {}foobar

    ->

    []foobar

    \n *

    foobar{}

    ->

    foobar[]

    \n * ```\n *\n * @param position Position that need to be placed inside text node.\n * @returns New position after breaking text node.\n */\nfunction breakTextNode( position: ViewPosition ): ViewPosition {\n\tif ( position.offset == ( position.parent as ViewText ).data.length ) {\n\t\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! + 1 );\n\t}\n\n\tif ( position.offset === 0 ) {\n\t\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! );\n\t}\n\n\t// Get part of the text that need to be moved.\n\tconst textToMove = ( position.parent as ViewText ).data.slice( position.offset );\n\n\t// Leave rest of the text in position's parent.\n\t( position.parent as ViewText )._data = ( position.parent as ViewText ).data.slice( 0, position.offset );\n\n\t// Insert new text node after position's parent text node.\n\t( position.parent.parent as any )._insertChild(\n\t\t( position.parent as ViewText ).index! + 1,\n\t\tnew ViewText( position.root.document, textToMove )\n\t);\n\n\t// Return new position between two newly created text nodes.\n\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! + 1 );\n}\n\n/**\n * Merges two text nodes into first node. Removes second node and returns merge position.\n *\n * @param t1 First text node to merge. Data from second text node will be moved at the end of this text node.\n * @param t2 Second text node to merge. This node will be removed after merging.\n * @returns Position after merging text nodes.\n */\nfunction mergeTextNodes( t1: ViewText, t2: ViewText ): ViewPosition {\n\t// Merge text data into first text node and remove second one.\n\tconst nodeBeforeLength = t1.data.length;\n\tt1._data += t2.data;\n\tt2._remove();\n\n\treturn new ViewPosition( t1, nodeBeforeLength );\n}\n\nconst validNodesToInsert = [ ViewText, ViewAttributeElement, ViewContainerElement, ViewEmptyElement, ViewRawElement, ViewUIElement ];\n\n/**\n * Checks if provided nodes are valid to insert.\n *\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n * contains instances that are not supported ones (see error description for valid ones.\n */\nfunction validateNodesToInsert( nodes: Iterable, errorContext: ViewDocument ): void {\n\tfor ( const node of nodes ) {\n\t\tif ( !validNodesToInsert.some( validNode => node instanceof validNode ) ) {\n\t\t\t/**\n\t\t\t * One of the nodes to be inserted is of an invalid type.\n\t\t\t *\n\t\t\t * Nodes to be inserted with {@link module:engine/view/downcastwriter~ViewDowncastWriter#insert `ViewDowncastWriter#insert()`}\n\t\t\t * should be of the following types:\n\t\t\t *\n\t\t\t * * {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement},\n\t\t\t * * {@link module:engine/view/containerelement~ViewContainerElement ViewContainerElement},\n\t\t\t * * {@link module:engine/view/emptyelement~ViewEmptyElement ViewEmptyElement},\n\t\t\t * * {@link module:engine/view/uielement~ViewUIElement UIElement},\n\t\t\t * * {@link module:engine/view/rawelement~ViewRawElement RawElement},\n\t\t\t * * {@link module:engine/view/text~ViewText Text}.\n\t\t\t *\n\t\t\t * @error view-writer-insert-invalid-node-type\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-insert-invalid-node-type', errorContext );\n\t\t}\n\n\t\tif ( !node.is( '$text' ) ) {\n\t\t\tvalidateNodesToInsert( ( node as ViewElement ).getChildren(), errorContext );\n\t\t}\n\t}\n}\n\n/**\n * Checks if node is ViewContainerElement or DocumentFragment, because in most cases they should be treated the same way.\n *\n * @returns Returns `true` if node is instance of ViewContainerElement or DocumentFragment.\n */\nfunction isContainerOrFragment( node: ViewNode | ViewDocumentFragment ): boolean {\n\treturn node && ( node.is( 'containerElement' ) || node.is( 'documentFragment' ) );\n}\n\n/**\n * Checks if {@link module:engine/view/range~ViewRange#start range start} and {@link module:engine/view/range~ViewRange#end range end}\n * are placed inside same {@link module:engine/view/containerelement~ViewContainerElement container element}.\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when validation fails.\n */\nfunction validateRangeContainer( range: ViewRange, errorContext: ViewDocument ) {\n\tconst startContainer = getParentContainer( range.start );\n\tconst endContainer = getParentContainer( range.end );\n\n\tif ( !startContainer || !endContainer || startContainer !== endContainer ) {\n\t\t/**\n\t\t * The container of the given range is invalid.\n\t\t *\n\t\t * This may happen if {@link module:engine/view/range~ViewRange#start range start} and\n\t\t * {@link module:engine/view/range~ViewRange#end range end} positions are not placed inside the same container element or\n\t\t * a parent container for these positions cannot be found.\n\t\t *\n\t\t * Methods like {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#remove()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#clean()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#wrap()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#unwrap()`} need to be called\n\t\t * on a range that has its start and end positions located in the same container element. Both positions can be\n\t\t * nested within other elements (e.g. an attribute element) but the closest container ancestor must be the same.\n\t\t *\n\t\t * @error view-writer-invalid-range-container\n\t\t */\n\t\tthrow new CKEditorError( 'view-writer-invalid-range-container', errorContext );\n\t}\n}\n\n/**\n * Checks if the provided argument is a plain object that can be used as options for container element.\n */\nfunction isContainerOptions(\n\tchildrenOrOptions: ViewNode | Iterable | { renderUnsafeAttributes?: Array }\n): childrenOrOptions is { renderUnsafeAttributes?: Array } {\n\treturn isPlainObject( childrenOrOptions );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * Set of utilities related to handling block and inline fillers.\n *\n * Browsers do not allow to put caret in elements which does not have height. Because of it, we need to fill all\n * empty elements which should be selectable with elements or characters called \"fillers\". Unfortunately there is no one\n * universal filler, this is why two types are uses:\n *\n * * Block filler is an element which fill block elements, like `

    `. CKEditor uses `
    ` as a block filler during the editing,\n * as browsers do natively. So instead of an empty `

    ` there will be `


    `. The advantage of block filler is that\n * it is transparent for the selection, so when the caret is before the `
    ` and user presses right arrow he will be\n * moved to the next paragraph, not after the `
    `. The disadvantage is that it breaks a block, so it cannot be used\n * in the middle of a line of text. The {@link module:engine/view/filler~BR_FILLER `
    ` filler} can be replaced with any other\n * character in the data output, for instance {@link module:engine/view/filler~NBSP_FILLER non-breaking space} or\n * {@link module:engine/view/filler~MARKED_NBSP_FILLER marked non-breaking space}.\n *\n * * Inline filler is a filler which does not break a line of text, so it can be used inside the text, for instance in the empty\n * `` surrendered by text: `foobar`, if we want to put the caret there. CKEditor uses a sequence of the zero-width\n * spaces as an {@link module:engine/view/filler~INLINE_FILLER inline filler} having the predetermined\n * {@link module:engine/view/filler~INLINE_FILLER_LENGTH length}. A sequence is used, instead of a single character to\n * avoid treating random zero-width spaces as the inline filler. Disadvantage of the inline filler is that it is not\n * transparent for the selection. The arrow key moves the caret between zero-width spaces characters, so the additional\n * code is needed to handle the caret.\n *\n * Both inline and block fillers are handled by the {@link module:engine/view/renderer~ViewRenderer renderer} and are not present in the\n * view.\n *\n * @module engine/view/filler\n */\n\nimport { keyCodes, isText, type KeystrokeInfo } from '@ckeditor/ckeditor5-utils';\nimport { type EditingView } from './view.js';\nimport { type ViewDocumentDomEventData } from './observer/domeventdata.js';\nimport type { ViewDocumentArrowKeyEvent } from './observer/arrowkeysobserver.js';\n\n/**\n * Non-breaking space filler creator. This function creates the ` ` text node.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n * @internal\n */\nexport const NBSP_FILLER = ( domDocument: Document ): Text => domDocument.createTextNode( '\\u00A0' );\n\n/**\n * Marked non-breaking space filler creator. This function creates the ` ` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n * @internal\n */\nexport const MARKED_NBSP_FILLER = ( domDocument: Document ): HTMLSpanElement => {\n\tconst span = domDocument.createElement( 'span' );\n\tspan.dataset.ckeFiller = 'true';\n\tspan.innerText = '\\u00A0';\n\n\treturn span;\n};\n\n/**\n * `
    ` filler creator. This function creates the `
    ` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n * @internal\n */\nexport const BR_FILLER = ( domDocument: Document ): HTMLBRElement => {\n\tconst fillerBr = domDocument.createElement( 'br' );\n\tfillerBr.dataset.ckeFiller = 'true';\n\n\treturn fillerBr;\n};\n\n/**\n * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.\n *\n * @internal\n */\nexport const INLINE_FILLER_LENGTH = 7;\n\n/**\n * Inline filler which is a sequence of the word joiners.\n *\n * @internal\n */\nexport const INLINE_FILLER: string = '\\u2060'.repeat( INLINE_FILLER_LENGTH );\n\n/**\n * Checks if the node is a text node which starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * startsWithFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * startsWithFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // true\n * startsWithFiller( document.createTextNode( 'foo' ) ); // false\n * startsWithFiller( document.createElement( 'p' ) ); // false\n * ```\n *\n * @param domNode DOM node.\n * @returns True if the text node starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n * @internal\n */\nexport function startsWithFiller( domNode: Node | string ): boolean {\n\tif ( typeof domNode == 'string' ) {\n\t\treturn domNode.substr( 0, INLINE_FILLER_LENGTH ) === INLINE_FILLER;\n\t}\n\n\treturn isText( domNode ) && ( domNode.data.substr( 0, INLINE_FILLER_LENGTH ) === INLINE_FILLER );\n}\n\n/**\n * Checks if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * isInlineFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * isInlineFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // false\n * ```\n *\n * @param domText DOM text node.\n * @returns True if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n * @internal\n */\nexport function isInlineFiller( domText: Text ): boolean {\n\treturn domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller( domText );\n}\n\n/**\n * Get string data from the text node, removing an {@link module:engine/view/filler~INLINE_FILLER inline filler} from it,\n * if text node contains it.\n *\n * ```ts\n * getDataWithoutFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ) == 'foo' // true\n * getDataWithoutFiller( document.createTextNode( 'foo' ) ) == 'foo' // true\n * ```\n *\n * @param domText DOM text node, possible with inline filler.\n * @returns Data without filler.\n * @internal\n */\nexport function getDataWithoutFiller( domText: Text | string ): string {\n\tconst data = typeof domText == 'string' ? domText : domText.data;\n\n\tif ( startsWithFiller( domText ) ) {\n\t\treturn data.slice( INLINE_FILLER_LENGTH );\n\t}\n\n\treturn data;\n}\n\n/**\n * Assign key observer which move cursor from the end of the inline filler to the beginning of it when\n * the left arrow is pressed, so the filler does not break navigation.\n *\n * @param view View controller instance we should inject quirks handling on.\n * @internal\n */\nexport function injectQuirksHandling( view: EditingView ): void {\n\tview.document.on( 'arrowKey', jumpOverInlineFiller, { priority: 'low' } );\n}\n\n/**\n * Move cursor from the end of the inline filler to the beginning of it when, so the filler does not break navigation.\n */\nfunction jumpOverInlineFiller( evt: unknown, data: ViewDocumentDomEventData & KeystrokeInfo ) {\n\tif ( data.keyCode == keyCodes.arrowleft ) {\n\t\tconst domSelection = data.domTarget.ownerDocument.defaultView!.getSelection()!;\n\n\t\tif ( domSelection.rangeCount == 1 && domSelection.getRangeAt( 0 ).collapsed ) {\n\t\t\tconst domParent = domSelection.getRangeAt( 0 ).startContainer;\n\t\t\tconst domOffset = domSelection.getRangeAt( 0 ).startOffset;\n\n\t\t\tif ( startsWithFiller( domParent ) && domOffset <= INLINE_FILLER_LENGTH ) {\n\t\t\t\tdomSelection.collapse( domParent, 0 );\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module engine/view/renderer\n */\n\nimport { ViewText } from './text.js';\nimport { ViewPosition } from './position.js';\nimport { INLINE_FILLER, INLINE_FILLER_LENGTH, startsWithFiller, isInlineFiller } from './filler.js';\n\nimport {\n\tCKEditorError,\n\tObservableMixin,\n\tdiff,\n\tenv,\n\tfastDiff,\n\tinsertAt,\n\tisComment,\n\tisNode,\n\tisText,\n\tremove,\n\tindexOf,\n\ttype DiffResult,\n\ttype ObservableChangeEvent,\n\ttype ObservableMixinConstructor\n} from '@ckeditor/ckeditor5-utils';\n\nimport type { ViewDocumentChangeType } from './document.js';\nimport { type ViewDocumentSelection } from './documentselection.js';\nimport { type ViewDomConverter } from './domconverter.js';\nimport { type ViewElement } from './element.js';\nimport { type ViewNode } from './node.js';\n\n// @if CK_DEBUG_TYPING // const { _buildLogMessage } = require( '../dev-utils/utils.js' );\n\nimport '../../theme/renderer.css';\n\ntype DomText = globalThis.Text;\ntype DomNode = globalThis.Node;\ntype DomDocument = globalThis.Document;\ntype DomElement = globalThis.HTMLElement;\ntype DomSelection = globalThis.Selection;\n\nconst ViewRendererBase: ObservableMixinConstructor = /* #__PURE__ */ ObservableMixin();\n\n/**\n * Renderer is responsible for updating the DOM structure and the DOM selection based on\n * the {@link module:engine/view/renderer~ViewRenderer#markToSync information about updated view nodes}.\n * In other words, it renders the view to the DOM.\n *\n * Its main responsibility is to make only the necessary, minimal changes to the DOM. However, unlike in many\n * virtual DOM implementations, the primary reason for doing minimal changes is not the performance but ensuring\n * that native editing features such as text composition, autocompletion, spell checking, selection's x-index are\n * affected as little as possible.\n *\n * Renderer uses {@link module:engine/view/domconverter~ViewDomConverter} to transform view nodes and positions\n * to and from the DOM.\n */\nexport class ViewRenderer extends ViewRendererBase {\n\t/**\n\t * Set of DOM Documents instances.\n\t */\n\tpublic readonly domDocuments: Set = new Set();\n\n\t/**\n\t * Converter instance.\n\t */\n\tpublic readonly domConverter: ViewDomConverter;\n\n\t/**\n\t * Set of nodes which attributes changed and may need to be rendered.\n\t */\n\tpublic readonly markedAttributes: Set = new Set();\n\n\t/**\n\t * Set of elements which child lists changed and may need to be rendered.\n\t */\n\tpublic readonly markedChildren: Set = new Set();\n\n\t/**\n\t * Set of text nodes which text data changed and may need to be rendered.\n\t */\n\tpublic readonly markedTexts: Set = new Set();\n\n\t/**\n\t * View selection. Renderer updates DOM selection based on the view selection.\n\t */\n\tpublic readonly selection: ViewDocumentSelection;\n\n\t/**\n\t * Indicates if the view document is focused and selection can be rendered. Selection will not be rendered if\n\t * this is set to `false`.\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isFocused: boolean;\n\n\t/**\n\t * Indicates whether the user is making a selection in the document (e.g. holding the mouse button and moving the cursor).\n\t * When they stop selecting, the property goes back to `false`.\n\t *\n\t * Note: In some browsers, the renderer will stop rendering the selection and inline fillers while the user is making\n\t * a selection to avoid glitches in DOM selection\n\t * (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isSelecting: boolean;\n\n\t/**\n\t * True if composition is in progress inside the document.\n\t *\n\t * This property is bound to the {@link module:engine/view/document~ViewDocument#isComposing `Document#isComposing`} property.\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isComposing: boolean;\n\n\t/**\n\t * The text node in which the inline filler was rendered.\n\t */\n\tprivate _inlineFiller: DomText | null = null;\n\n\t/**\n\t * DOM element containing fake selection.\n\t */\n\tprivate _fakeSelectionContainer: DomElement | null = null;\n\n\t/**\n\t * Creates a renderer instance.\n\t *\n\t * @param domConverter Converter instance.\n\t * @param selection View selection.\n\t */\n\tconstructor( domConverter: ViewDomConverter, selection: ViewDocumentSelection ) {\n\t\tsuper();\n\n\t\tthis.domConverter = domConverter;\n\t\tthis.selection = selection;\n\n\t\tthis.set( 'isFocused', false );\n\t\tthis.set( 'isSelecting', false );\n\t\tthis.set( 'isComposing', false );\n\n\t\t// Rendering the selection and inline filler manipulation should be postponed in (non-Android) Blink until the user finishes\n\t\t// creating the selection in DOM to avoid accidental selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\t// When the user stops selecting, all pending changes should be rendered ASAP, though.\n\t\tif ( env.isBlink && !env.isAndroid ) {\n\t\t\tthis.on( 'change:isSelecting', () => {\n\t\t\t\tif ( !this.isSelecting ) {\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n\t *\n\t * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n\t *\n\t * @see #markedAttributes\n\t * @see #markedChildren\n\t * @see #markedTexts\n\t *\n\t * @param type Type of the change.\n\t * @param node ViewNode to be marked.\n\t */\n\tpublic markToSync( type: ViewDocumentChangeType, node: ViewNode ): void {\n\t\tif ( type === 'text' ) {\n\t\t\tif ( this.domConverter.mapViewToDom( node.parent! ) ) {\n\t\t\t\tthis.markedTexts.add( node );\n\t\t\t}\n\t\t} else {\n\t\t\t// If the node has no DOM element it is not rendered yet,\n\t\t\t// its children/attributes do not need to be marked to be sync.\n\t\t\tif ( !this.domConverter.mapViewToDom( node as ViewElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( type === 'attributes' ) {\n\t\t\t\tthis.markedAttributes.add( node as ViewElement );\n\t\t\t} else if ( type === 'children' ) {\n\t\t\t\tthis.markedChildren.add( node as ViewElement );\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t\tconst unreachable: never = type;\n\n\t\t\t\t/**\n\t\t\t\t * Unknown type passed to Renderer.markToSync.\n\t\t\t\t *\n\t\t\t\t * @error view-renderer-unknown-type\n\t\t\t\t */\n\t\t\t\tthrow new CKEditorError( 'view-renderer-unknown-type', this );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n\t * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n\t *\n\t * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n\t * so it does as little as it is needed to update the DOM.\n\t *\n\t * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n\t * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n\t * removed as long as the selection is in the text node which needed it at first.\n\t */\n\tpublic render(): void {\n\t\t// Ignore rendering while in the composition mode. Composition events are not cancellable and browser will modify the DOM tree.\n\t\t// All marked elements, attributes, etc. will wait until next render after the composition ends.\n\t\t// On Android composition events are immediately applied to the model, so we don't need to skip rendering,\n\t\t// and we should not do it because the difference between view and DOM could lead to position mapping problems.\n\t\tif ( this.isComposing && !env.isAndroid ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cRendering aborted while isComposing.',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cRendering',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: bold'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tlet inlineFillerPosition: ViewPosition | null = null;\n\t\tconst isInlineFillerRenderingPossible = env.isBlink && !env.isAndroid ? !this.isSelecting : true;\n\n\t\t// Refresh mappings.\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildrenMappings( element );\n\t\t}\n\n\t\t// Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n\t\t// DOM selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\tif ( isInlineFillerRenderingPossible ) {\n\t\t\t// There was inline filler rendered in the DOM but it's not\n\t\t\t// at the selection position any more, so we can remove it\n\t\t\t// (cause even if it's needed, it must be placed in another location).\n\t\t\tif ( this._inlineFiller && !this._isSelectionInInlineFiller() ) {\n\t\t\t\tthis._removeInlineFiller();\n\t\t\t}\n\n\t\t\t// If we've got the filler, let's try to guess its position in the view.\n\t\t\tif ( this._inlineFiller ) {\n\t\t\t\tinlineFillerPosition = this._getInlineFillerPosition();\n\t\t\t}\n\t\t\t// Otherwise, if it's needed, create it at the selection position.\n\t\t\telse if ( this._needsInlineFillerAtSelection() ) {\n\t\t\t\tinlineFillerPosition = this.selection.getFirstPosition()!;\n\n\t\t\t\t// Do not use `markToSync` so it will be added even if the parent is already added.\n\t\t\t\tthis.markedChildren.add( inlineFillerPosition.parent as ViewElement );\n\t\t\t}\n\t\t}\n\t\t// Make sure the inline filler has any parent, so it can be mapped to view position by ViewDomConverter.\n\t\telse if ( this._inlineFiller && this._inlineFiller.parentNode ) {\n\t\t\t// While the user is making selection, preserve the inline filler at its original position.\n\t\t\tinlineFillerPosition = this.domConverter.domPositionToView( this._inlineFiller )!;\n\n\t\t\t// While down-casting the document selection attributes, all existing empty\n\t\t\t// attribute elements (for selection position) are removed from the view and DOM,\n\t\t\t// so make sure that we were able to map filler position.\n\t\t\t// https://github.com/ckeditor/ckeditor5/issues/12026\n\t\t\tif ( inlineFillerPosition && inlineFillerPosition.parent.is( '$text' ) ) {\n\t\t\t\t// The inline filler position is expected to be before the text node.\n\t\t\t\tinlineFillerPosition = ViewPosition._createBefore( inlineFillerPosition.parent );\n\t\t\t}\n\t\t}\n\n\t\tfor ( const element of this.markedAttributes ) {\n\t\t\tthis._updateAttrs( element );\n\t\t}\n\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildren( element, { inlineFillerPosition } );\n\t\t}\n\n\t\tfor ( const node of this.markedTexts ) {\n\t\t\tif ( !this.markedChildren.has( node.parent as ViewElement ) && this.domConverter.mapViewToDom( node.parent as ViewElement ) ) {\n\t\t\t\tthis._updateText( node as ViewText, { inlineFillerPosition } );\n\t\t\t}\n\t\t}\n\n\t\t// * Check whether the inline filler is required and where it really is in the DOM.\n\t\t// At this point in most cases it will be in the DOM, but there are exceptions.\n\t\t// For example, if the inline filler was deep in the created DOM structure, it will not be created.\n\t\t// Similarly, if it was removed at the beginning of this function and then neither text nor children were updated,\n\t\t// it will not be present. Fix those and similar scenarios.\n\t\t// * Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n\t\t// DOM selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\tif ( isInlineFillerRenderingPossible ) {\n\t\t\tif ( inlineFillerPosition ) {\n\t\t\t\tconst fillerDomPosition = this.domConverter.viewPositionToDom( inlineFillerPosition )!;\n\t\t\t\tconst domDocument = fillerDomPosition.parent.ownerDocument!;\n\n\t\t\t\tif ( !startsWithFiller( fillerDomPosition.parent ) ) {\n\t\t\t\t\t// Filler has not been created at filler position. Create it now.\n\t\t\t\t\tthis._inlineFiller = addInlineFiller( domDocument, fillerDomPosition.parent, fillerDomPosition.offset );\n\t\t\t\t} else {\n\t\t\t\t\t// Filler has been found, save it.\n\t\t\t\t\tthis._inlineFiller = fillerDomPosition.parent as DomText;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// There is no filler needed.\n\t\t\t\tthis._inlineFiller = null;\n\t\t\t}\n\t\t}\n\n\t\t// First focus the new editing host, then update the selection.\n\t\t// Otherwise, FF may throw an error (https://github.com/ckeditor/ckeditor5/issues/721).\n\t\tthis._updateFocus();\n\t\tthis._updateSelection();\n\n\t\tthis.domConverter._clearTemporaryCustomProperties();\n\n\t\tthis.markedTexts.clear();\n\t\tthis.markedAttributes.clear();\n\t\tthis.markedChildren.clear();\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Updates mappings of view element's children.\n\t *\n\t * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n\t * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n\t * Thanks to that these elements do not need to be re-rendered completely.\n\t *\n\t * @param viewElement The view element whose children mappings will be updated.\n\t */\n\tprivate _updateChildrenMappings( viewElement: ViewElement ): void {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM and there is no need to process it.\n\t\t\treturn;\n\t\t}\n\n\t\t// Removing nodes from the DOM as we iterate can cause `actualDomChildren`\n\t\t// (which is a live-updating `NodeList`) to get out of sync with the\n\t\t// indices that we compute as we iterate over `actions`.\n\t\t// This would produce incorrect element mappings.\n\t\t//\n\t\t// Converting live list to an array to make the list static.\n\t\tconst actualDomChildren = Array.from(\n\t\t\tdomElement.childNodes\n\t\t);\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, { withChildren: false } )\n\t\t);\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\t\tconst actions = this._findUpdateActions( diff, actualDomChildren, expectedDomChildren, areSimilarElements );\n\n\t\tif ( actions.indexOf( 'update' ) !== -1 ) {\n\t\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\t\tfor ( const action of actions ) {\n\t\t\t\tif ( action === 'update' ) {\n\t\t\t\t\tconst insertIndex = counter.equal + counter.insert;\n\t\t\t\t\tconst deleteIndex = counter.equal + counter.delete;\n\t\t\t\t\tconst viewChild = viewElement.getChild( insertIndex );\n\n\t\t\t\t\t// UIElement and RawElement are special cases. Their children are not stored in a view.\n\t\t\t\t\t// See https://github.com/ckeditor/ckeditor5/issues/799.\n\t\t\t\t\t// so we cannot use them with replacing flow (since they use view children during rendering\n\t\t\t\t\t// which will always result in rendering empty elements).\n\t\t\t\t\tif ( viewChild && !viewChild.is( 'uiElement' ) && !viewChild.is( 'rawElement' ) ) {\n\t\t\t\t\t\tthis._updateElementMappings( viewChild as ViewElement, actualDomChildren[ deleteIndex ] as DomElement );\n\t\t\t\t\t}\n\n\t\t\t\t\tremove( expectedDomChildren[ insertIndex ] );\n\t\t\t\t\tcounter.equal++;\n\t\t\t\t} else {\n\t\t\t\t\tcounter[ action ]++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates mappings of a given view element.\n\t *\n\t * @param viewElement The view element whose mappings will be updated.\n\t * @param domElement The DOM element representing the given view element.\n\t */\n\tprivate _updateElementMappings( viewElement: ViewElement, domElement: DomElement ): void {\n\t\t// Remap 'DomConverter' bindings.\n\t\tthis.domConverter.unbindDomElement( domElement );\n\t\tthis.domConverter.bindElements( domElement, viewElement );\n\n\t\t// View element may have children which needs to be updated, but are not marked, mark them to update.\n\t\tthis.markedChildren.add( viewElement );\n\n\t\t// Because we replace new view element mapping with the existing one, the corresponding DOM element\n\t\t// will not be rerendered. The new view element may have different attributes than the previous one.\n\t\t// Since its corresponding DOM element will not be rerendered, new attributes will not be added\n\t\t// to the DOM, so we need to mark it here to make sure its attributes gets updated.\n\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1427 for more detailed case study.\n\t\t// Also there are cases where replaced element is removed from the view structure and then has\n\t\t// its attributes changed or removed. In such cases the element will not be present in `markedAttributes`\n\t\t// and also may be the same (`element.isSimilar()`) as the reused element not having its attributes updated.\n\t\t// To prevent such situations we always mark reused element to have its attributes rerenderd.\n\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1560.\n\t\tthis.markedAttributes.add( viewElement );\n\t}\n\n\t/**\n\t * Gets the position of the inline filler based on the current selection.\n\t * Here, we assume that we know that the filler is needed and\n\t * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n\t * it is somewhere at the selection position.\n\t *\n\t * Note: The filler position cannot be restored based on the filler's DOM text node, because\n\t * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n\t * bindings are only dependable after rendering.\n\t */\n\tprivate _getInlineFillerPosition(): ViewPosition {\n\t\tconst firstPos = this.selection.getFirstPosition()!;\n\n\t\tif ( firstPos.parent.is( '$text' ) ) {\n\t\t\treturn ViewPosition._createBefore( firstPos.parent );\n\t\t} else {\n\t\t\treturn firstPos;\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if the selection has not left the inline filler's text node.\n\t * If it is `true`, it means that the filler had been added for a reason and the selection did not\n\t * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n\t *\n\t * @returns `true` if the inline filler and selection are in the same place.\n\t */\n\tprivate _isSelectionInInlineFiller(): boolean {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Note, we can't check if selection's position equals position of the\n\t\t// this._inlineFiller node, because of #663. We may not be able to calculate\n\t\t// the filler's position in the view at this stage.\n\t\t// Instead, we check it the other way – whether selection is anchored in\n\t\t// that text node or next to it.\n\n\t\t// Possible options are:\n\t\t// \"FILLER{}\"\n\t\t// \"FILLERadded-text{}\"\n\t\tconst selectionPosition = this.selection.getFirstPosition()!;\n\t\tconst position = this.domConverter.viewPositionToDom( selectionPosition );\n\n\t\tif ( position && isText( position.parent ) && startsWithFiller( position.parent ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Removes the inline filler.\n\t */\n\tprivate _removeInlineFiller(): void {\n\t\tconst domFillerNode = this._inlineFiller!;\n\n\t\t// Something weird happened and the stored node doesn't contain the filler's text.\n\t\tif ( !startsWithFiller( domFillerNode ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.log( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Inline filler node: ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( domFillerNode.data ) }%c (${ domFillerNode.data.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t/**\n\t\t\t * The inline filler node was lost. Most likely, something overwrote the filler text node\n\t\t\t * in the DOM.\n\t\t\t *\n\t\t\t * @error view-renderer-filler-was-lost\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-renderer-filler-was-lost', this );\n\t\t}\n\n\t\tif ( isInlineFiller( domFillerNode ) ) {\n\t\t\tdomFillerNode.remove();\n\t\t} else {\n\t\t\tdomFillerNode.data = domFillerNode.data.substr( INLINE_FILLER_LENGTH );\n\t\t}\n\n\t\tthis._inlineFiller = null;\n\t}\n\n\t/**\n\t * Checks if the inline {@link module:engine/view/filler filler} should be added.\n\t *\n\t * @returns `true` if the inline filler should be added.\n\t */\n\tprivate _needsInlineFillerAtSelection(): boolean {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selectionPosition = this.selection.getFirstPosition()!;\n\t\tconst selectionParent = selectionPosition.parent;\n\t\tconst selectionOffset = selectionPosition.offset;\n\n\t\t// If there is no DOM root we do not care about fillers.\n\t\tif ( !this.domConverter.mapViewToDom( selectionParent.root ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !( selectionParent.is( 'element' ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Prevent adding inline filler inside elements with contenteditable=false.\n\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/1170\n\t\tif ( !isEditable( selectionParent ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst nodeBefore = selectionPosition.nodeBefore;\n\t\tconst nodeAfter = selectionPosition.nodeAfter;\n\n\t\tif ( nodeBefore instanceof ViewText || nodeAfter instanceof ViewText ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We have block filler, we do not need inline one.\n\t\tif ( selectionOffset === selectionParent.getFillerOffset!() && ( !nodeBefore || !nodeBefore.is( 'element', 'br' ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Do not use inline filler while typing outside inline elements on Android.\n\t\t// The deleteContentBackward would remove part of the inline filler instead of removing last letter in a link.\n\t\tif ( env.isAndroid && ( nodeBefore || nodeAfter ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks if text needs to be updated and possibly updates it.\n\t *\n\t * @param viewText View text to update.\n\t * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n\t */\n\tprivate _updateText( viewText: ViewText, options: { inlineFillerPosition?: ViewPosition | null } ) {\n\t\tconst domText = this.domConverter.findCorrespondingDomText( viewText )!;\n\t\tconst newDomText = this.domConverter.viewToDom( viewText );\n\n\t\tlet expectedText = newDomText.data;\n\t\tconst filler = options.inlineFillerPosition;\n\n\t\tif ( filler && filler.parent == viewText.parent && filler.offset == viewText.index ) {\n\t\t\texpectedText = INLINE_FILLER + expectedText;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate text',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: normal'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tthis._updateTextNode( domText, expectedText );\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Checks if attribute list needs to be updated and possibly updates it.\n\t *\n\t * @param viewElement The view element to update.\n\t */\n\tprivate _updateAttrs( viewElement: ViewElement ): void {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that 'viewElement' is outdated as its mapping was updated\n\t\t\t// in 'this._updateChildrenMappings()'. There is no need to process it as new view element which\n\t\t\t// replaced old 'viewElement' mapping was also added to 'this.markedAttributes'\n\t\t\t// in 'this._updateChildrenMappings()' so it will be processed separately.\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove attributes from DOM elements if they do not exist in the view.\n\t\t//\n\t\t// Note: It is important to first remove DOM attributes and then set new ones, because some view attributes may be renamed\n\t\t// as they are set on DOM (due to unsafe attributes handling). If we set the view attribute first, and then remove\n\t\t// non-existing DOM attributes, then we would remove the attribute that we just set.\n\t\t//\n\t\t// Note: The domElement.attributes is a live collection, so we need to convert it to an array to avoid issues.\n\t\tfor ( const domAttr of Array.from( ( domElement as DomElement ).attributes ) ) {\n\t\t\tconst key = domAttr.name;\n\n\t\t\t// All other attributes not present in the DOM should be removed.\n\t\t\tif ( !viewElement.hasAttribute( key ) ) {\n\t\t\t\tthis.domConverter.removeDomElementAttribute( domElement as DomElement, key );\n\t\t\t}\n\t\t}\n\n\t\t// Add or overwrite attributes.\n\t\tfor ( const key of viewElement.getAttributeKeys() ) {\n\t\t\tthis.domConverter.setDomElementAttribute( domElement as DomElement, key, viewElement.getAttribute( key )!, viewElement );\n\t\t}\n\t}\n\n\t/**\n\t * Checks if elements child list needs to be updated and possibly updates it.\n\t *\n\t * Note that on Android, to reduce the risk of composition breaks, it tries to update data of an existing\n\t * child text nodes instead of replacing them completely.\n\t *\n\t * @param viewElement View element to update.\n\t * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n\t */\n\tprivate _updateChildren( viewElement: ViewElement, options: { inlineFillerPosition: ViewPosition | null } ) {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM.\n\t\t\t// There is no need to process it. It will be processed when re-inserted.\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate children',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: normal'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t// IME on Android inserts a new text node while typing after a link\n\t\t// instead of updating an existing text node that follows the link.\n\t\t// We must normalize those text nodes so the diff won't get confused.\n\t\t// https://github.com/ckeditor/ckeditor5/issues/12574.\n\t\tif ( env.isAndroid ) {\n\t\t\tlet previousDomNode = null;\n\n\t\t\tfor ( const domNode of Array.from( domElement.childNodes ) ) {\n\t\t\t\tif ( previousDomNode && isText( previousDomNode ) && isText( domNode ) ) {\n\t\t\t\t\tdomElement.normalize();\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tpreviousDomNode = domNode;\n\t\t\t}\n\t\t}\n\n\t\tconst inlineFillerPosition = options.inlineFillerPosition;\n\t\tconst actualDomChildren = domElement.childNodes;\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, { bind: true } )\n\t\t);\n\n\t\t// Inline filler element has to be created as it is present in the DOM, but not in the view. It is required\n\t\t// during diffing so text nodes could be compared correctly and also during rendering to maintain\n\t\t// proper order and indexes while updating the DOM.\n\t\tif ( inlineFillerPosition && inlineFillerPosition.parent === viewElement ) {\n\t\t\taddInlineFiller( ( domElement as DomElement ).ownerDocument, expectedDomChildren, inlineFillerPosition.offset );\n\t\t}\n\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\n\t\t// We need to make sure that we update the existing text node and not replace it with another one.\n\t\t// The composition and different \"language\" browser extensions are fragile to text node being completely replaced.\n\t\tconst actions = this._findUpdateActions( diff, actualDomChildren, expectedDomChildren, areTextNodes );\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping && actions.every( a => a == 'equal' ) ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cNothing to update.',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tlet i = 0;\n\t\tconst nodesToUnbind: Set = new Set();\n\n\t\t// Handle deletions first.\n\t\t// This is to prevent a situation where an element that already exists in `actualDomChildren` is inserted at a different\n\t\t// index in `actualDomChildren`. Since `actualDomChildren` is a `NodeList`, this works like move, not like an insert,\n\t\t// and it disrupts the whole algorithm. See https://github.com/ckeditor/ckeditor5/issues/6367.\n\t\t//\n\t\t// It doesn't matter in what order we remove or add nodes, as long as we remove and add correct nodes at correct indexes.\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'delete' ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\tconst node = actualDomChildren[ i ];\n\t\t\t\t// @if CK_DEBUG_TYPING // \tif ( isText( node ) ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'%cRemove text node' +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'color: blue', ''\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // \t} else {\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'%cRemove element' +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: `,\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tnode\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // \t}\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tnodesToUnbind.add( actualDomChildren[ i ] as DomElement );\n\t\t\t\tremove( actualDomChildren[ i ] );\n\t\t\t} else if ( action === 'equal' || action === 'update' ) {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\ti = 0;\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\tconst node = expectedDomChildren[ i ];\n\t\t\t\t// @if CK_DEBUG_TYPING //\tif ( isText( node ) ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'%cInsert text node' +\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'color: blue',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t''\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING //\t} else {\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'%cInsert element:',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'font-weight: normal',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\tnode\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING //\t}\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tinsertAt( domElement as DomElement, i, expectedDomChildren[ i ] );\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// Update the existing text node data.\n\t\t\telse if ( action === 'update' ) {\n\t\t\t\tthis._updateTextNode( actualDomChildren[ i ] as DomText, ( expectedDomChildren[ i ] as DomText ).data );\n\t\t\t\ti++;\n\t\t\t} else if ( action === 'equal' ) {\n\t\t\t\t// Force updating text nodes inside elements which did not change and do not need to be re-rendered.\n\t\t\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1125.\n\t\t\t\t// Do it here (not in the loop above) because only after insertions the `i` index is correct.\n\t\t\t\tthis._markDescendantTextToSync( this.domConverter.domToView( expectedDomChildren[ i ] ) as any );\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\t// Unbind removed nodes. When node does not have a parent it means that it was removed from DOM tree during\n\t\t// comparison with the expected DOM. We don't need to check child nodes, because if child node was reinserted,\n\t\t// it was moved to DOM tree out of the removed node.\n\t\tfor ( const node of nodesToUnbind ) {\n\t\t\tif ( !node.parentNode ) {\n\t\t\t\tthis.domConverter.unbindDomElement( node as DomElement );\n\t\t\t}\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Shorthand for diffing two arrays or node lists of DOM nodes.\n\t *\n\t * @param actualDomChildren Actual DOM children\n\t * @param expectedDomChildren Expected DOM children.\n\t * @returns The list of actions based on the {@link module:utils/diff~diff} function.\n\t */\n\tprivate _diffNodeLists( actualDomChildren: Array | NodeList, expectedDomChildren: Array | NodeList ) {\n\t\tactualDomChildren = filterOutFakeSelectionContainer( actualDomChildren, this._fakeSelectionContainer );\n\n\t\treturn diff( actualDomChildren, expectedDomChildren, sameNodes.bind( null, this.domConverter ) );\n\t}\n\n\t/**\n\t * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n\t * within one `insert`/`delete` action group, for example:\n\t *\n\t * ```\n\t * Actual DOM:\t\t

    FooBarBazBax

    \n\t * Expected DOM:\t

    Bar123Baz456

    \n\t * Input actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n\t * Output actions:\t[ insert, replace, delete, equal, replace ]\n\t * ```\n\t *\n\t * @param actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n\t * @param actualDom Actual DOM children\n\t * @param expectedDom Expected DOM children.\n\t * @param comparator A comparator function that should return `true` if the given node should be reused\n\t * (either by the update of a text node data or an element children list for similar elements).\n\t * @returns Actions array modified with the `update` actions.\n\t */\n\tprivate _findUpdateActions(\n\t\tactions: Array,\n\t\tactualDom: Array | NodeList,\n\t\texpectedDom: Array,\n\t\tcomparator: ( a: DomNode, b: DomNode ) => boolean\n\t): Array {\n\t\t// If there is no both 'insert' and 'delete' actions, no need to check for replaced elements.\n\t\tif ( actions.indexOf( 'insert' ) === -1 || actions.indexOf( 'delete' ) === -1 ) {\n\t\t\treturn actions;\n\t\t}\n\n\t\tlet newActions: Array = [];\n\t\tlet actualSlice = [];\n\t\tlet expectedSlice = [];\n\n\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\texpectedSlice.push( expectedDom[ counter.equal + counter.insert ] );\n\t\t\t} else if ( action === 'delete' ) {\n\t\t\t\tactualSlice.push( actualDom[ counter.equal + counter.delete ] );\n\t\t\t} else { // equal\n\t\t\t\tnewActions = newActions.concat(\n\t\t\t\t\tdiff( actualSlice, expectedSlice, comparator )\n\t\t\t\t\t\t.map( action => action === 'equal' ? 'update' : action )\n\t\t\t\t);\n\n\t\t\t\tnewActions.push( 'equal' );\n\n\t\t\t\t// Reset stored elements on 'equal'.\n\t\t\t\tactualSlice = [];\n\t\t\t\texpectedSlice = [];\n\t\t\t}\n\t\t\tcounter[ action ]++;\n\t\t}\n\n\t\treturn newActions.concat(\n\t\t\tdiff( actualSlice, expectedSlice, comparator )\n\t\t\t\t.map( action => action === 'equal' ? 'update' : action )\n\t\t);\n\t}\n\n\t/**\n\t * Checks if text needs to be updated and possibly updates it by removing and inserting only parts\n\t * of the data from the existing text node to reduce impact on the IME composition.\n\t *\n\t * @param domText DOM text node to update.\n\t * @param expectedText The expected data of a text node.\n\t */\n\tprivate _updateTextNode( domText: DomText, expectedText: string ): void {\n\t\tconst actualText = domText.data;\n\n\t\tif ( actualText == expectedText ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cText node does not need update:%c ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`${ _escapeTextNodeData( actualText ) }%c (${ actualText.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Our approach to interleaving space character with NBSP might differ with the one implemented by the browser.\n\t\t// Avoid modifying the text node in the DOM if only NBSPs and spaces are interchanged.\n\t\t// We should avoid DOM modifications while composing to avoid breakage of composition.\n\t\t// See: https://github.com/ckeditor/ckeditor5/issues/13994.\n\t\tif ( env.isAndroid && this.isComposing && actualText.replace( /\\u00A0/g, ' ' ) == expectedText.replace( /\\u00A0/g, ' ' ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cText node ignore NBSP changes while composing: ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) -> ` +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate text node' +\n\t\t// @if CK_DEBUG_TYPING // \t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) -> ` +\n\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n\t\t// @if CK_DEBUG_TYPING // \t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t// @if CK_DEBUG_TYPING // \t\t'',\n\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tthis._updateTextNodeInternal( domText, expectedText );\n\t}\n\n\t/**\n\t * Part of the `_updateTextNode` method extracted for easier testing.\n\t */\n\tprivate _updateTextNodeInternal( domText: DomText, expectedText: string ): void {\n\t\tconst actions = fastDiff( domText.data, expectedText );\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action.type === 'insert' ) {\n\t\t\t\tdomText.insertData( action.index, action.values.join( '' ) );\n\t\t\t} else { // 'delete'\n\t\t\t\tdomText.deleteData( action.index, action.howMany );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Marks text nodes to be synchronized.\n\t *\n\t * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n\t *\n\t * @param viewNode View node to sync.\n\t */\n\tprivate _markDescendantTextToSync( viewNode: ViewNode | undefined ): void {\n\t\tif ( !viewNode ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( viewNode.is( '$text' ) ) {\n\t\t\tthis.markedTexts.add( viewNode );\n\t\t} else if ( viewNode.is( 'element' ) ) {\n\t\t\tfor ( const child of viewNode.getChildren() ) {\n\t\t\t\tthis._markDescendantTextToSync( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the selection needs to be updated and possibly updates it.\n\t */\n\tprivate _updateSelection(): void {\n\t\t// Block updating DOM selection in (non-Android) Blink while the user is selecting to prevent accidental selection collapsing.\n\t\t// Note: Structural changes in DOM must trigger selection rendering, though. Nodes the selection was anchored\n\t\t// to, may disappear in DOM which would break the selection (e.g. in real-time collaboration scenarios).\n\t\t// https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723\n\t\tif ( env.isBlink && !env.isAndroid && this.isSelecting && !this.markedChildren.size ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is no selection - remove DOM and fake selections.\n\t\tif ( this.selection.rangeCount === 0 ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection: remove all ranges'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\tthis._removeDomSelection();\n\t\t\tthis._removeFakeSelection();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst domEditable = this.domConverter.mapViewToDom( this.selection.editableElement! );\n\n\t\t// Do not update DOM selection if there is no focus, or there is no DOM element corresponding to selection's editable element.\n\t\tif ( !this.isFocused || !domEditable ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Skip updating DOM selection:',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`isFocused: ${ this.isFocused }, hasDomEditable: ${ !!domEditable }`\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t// But if there was a fake selection, and it is not fake anymore - remove it as it can map to no longer existing widget.\n\t\t\t// See https://github.com/ckeditor/ckeditor5/issues/18123.\n\t\t\tif ( !this.selection.isFake && this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t'Remove fake selection (not focused editable)'\n\t\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tthis._removeFakeSelection();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t// Render fake selection - create the fake selection container (if needed) and move DOM selection to it.\n\t\tif ( this.selection.isFake ) {\n\t\t\tthis._updateFakeSelection( domEditable );\n\t\t}\n\t\t// There was a fake selection so remove it and update the DOM selection.\n\t\t// This is especially important on Android because otherwise IME will try to compose over the fake selection container.\n\t\telse if ( this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected ) {\n\t\t\tthis._removeFakeSelection();\n\t\t\tthis._updateDomSelection( domEditable );\n\t\t}\n\t\t// Update the DOM selection in case of a plain selection change (no fake selection is involved).\n\t\t// On non-Android the whole rendering is disabled in composition mode (including DOM selection update),\n\t\t// but updating DOM selection should be also disabled on Android if in the middle of the composition\n\t\t// (to not interrupt it).\n\t\telse if ( !( this.isComposing && env.isAndroid ) ) {\n\t\t\tthis._updateDomSelection( domEditable );\n\t\t}\n\t}\n\n\t/**\n\t * Updates the fake selection.\n\t *\n\t * @param domEditable A valid DOM editable where the fake selection container should be added.\n\t */\n\tprivate _updateFakeSelection( domEditable: DomElement ): void {\n\t\tconst domDocument = domEditable.ownerDocument;\n\n\t\tif ( !this._fakeSelectionContainer ) {\n\t\t\tthis._fakeSelectionContainer = createFakeSelectionContainer( domDocument );\n\t\t}\n\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\t// Bind fake selection container with the current selection *position*.\n\t\tthis.domConverter.bindFakeSelection( container, this.selection );\n\n\t\tif ( !this._fakeSelectionNeedsUpdate( domEditable ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !container.parentElement || container.parentElement != domEditable ) {\n\t\t\tdomEditable.appendChild( container );\n\t\t}\n\n\t\tcontainer.textContent = this.selection.fakeSelectionLabel || '\\u00A0';\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Set DOM fake selection'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tconst domSelection = domDocument.getSelection()!;\n\t\tconst domRange = domDocument.createRange();\n\n\t\tdomSelection.removeAllRanges();\n\t\tdomRange.selectNodeContents( container );\n\t\tdomSelection.addRange( domRange );\n\t}\n\n\t/**\n\t * Updates the DOM selection.\n\t *\n\t * @param domEditable A valid DOM editable where the DOM selection should be rendered.\n\t */\n\tprivate _updateDomSelection( domEditable: DomElement ) {\n\t\tconst domSelection = domEditable.ownerDocument.defaultView!.getSelection()!;\n\n\t\t// Let's check whether DOM selection needs updating at all.\n\t\tif ( !this._domSelectionNeedsUpdate( domSelection ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cDOM selection is already correct',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic;'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Multi-range selection is not available in most browsers, and, at least in Chrome, trying to\n\t\t// set such selection, that is not continuous, throws an error. Because of that, we will just use anchor\n\t\t// and focus of view selection.\n\t\t// Since we are not supporting multi-range selection, we also do not need to check if proper editable is\n\t\t// selected. If there is any editable selected, it is okay (editable is taken from selection anchor).\n\t\tconst anchor = this.domConverter.viewPositionToDom( this.selection.anchor! )!;\n\t\tconst focus = this.domConverter.viewPositionToDom( this.selection.focus! )!;\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection:',\n\t\t// @if CK_DEBUG_TYPING // \t\tanchor,\n\t\t// @if CK_DEBUG_TYPING // \t\tfocus\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tdomSelection.setBaseAndExtent( anchor.parent, anchor.offset, focus.parent, focus.offset );\n\n\t\t// Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n\t\tif ( env.isGecko ) {\n\t\t\tfixGeckoSelectionAfterBr( focus, domSelection );\n\t\t}\n\t}\n\n\t/**\n\t * Checks whether a given DOM selection needs to be updated.\n\t *\n\t * @param domSelection The DOM selection to check.\n\t */\n\tprivate _domSelectionNeedsUpdate( domSelection: Selection ): boolean {\n\t\tif ( !this.domConverter.isDomSelectionCorrect( domSelection ) ) {\n\t\t\t// Current DOM selection is in incorrect position. We need to update it.\n\t\t\treturn true;\n\t\t}\n\n\t\tconst oldViewSelection = domSelection && this.domConverter.domSelectionToView( domSelection );\n\n\t\tif ( oldViewSelection && this.selection.isEqual( oldViewSelection ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If selection is not collapsed, it does not need to be updated if it is similar.\n\t\tif ( !this.selection.isCollapsed && this.selection.isSimilar( oldViewSelection ) ) {\n\t\t\t// Selection did not changed and is correct, do not update.\n\t\t\treturn false;\n\t\t}\n\n\t\t// Selections are not similar.\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks whether the fake selection needs to be updated.\n\t *\n\t * @param domEditable A valid DOM editable where a new fake selection container should be added.\n\t */\n\tprivate _fakeSelectionNeedsUpdate( domEditable: DomElement ): boolean {\n\t\tconst container = this._fakeSelectionContainer;\n\t\tconst domSelection = domEditable.ownerDocument.getSelection()!;\n\n\t\t// Fake selection needs to be updated if there's no fake selection container, or the container currently sits\n\t\t// in a different root.\n\t\tif ( !container || container.parentElement !== domEditable ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Make sure that the selection actually is within the fake selection.\n\t\tif ( domSelection.anchorNode !== container && !container.contains( domSelection.anchorNode ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn container.textContent !== this.selection.fakeSelectionLabel;\n\t}\n\n\t/**\n\t * Removes the DOM selection.\n\t */\n\tprivate _removeDomSelection(): void {\n\t\tfor ( const doc of this.domDocuments ) {\n\t\t\tconst domSelection = doc.getSelection()!;\n\n\t\t\tif ( domSelection.rangeCount ) {\n\t\t\t\tconst activeDomElement = doc.activeElement!;\n\t\t\t\tconst viewElement = this.domConverter.mapDomToView( activeDomElement as DomElement );\n\n\t\t\t\tif ( activeDomElement && viewElement ) {\n\t\t\t\t\tdomSelection.removeAllRanges();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes the fake selection.\n\t */\n\tprivate _removeFakeSelection(): void {\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\tif ( container ) {\n\t\t\tcontainer.remove();\n\t\t}\n\t}\n\n\t/**\n\t * Checks if focus needs to be updated and possibly updates it.\n\t */\n\tprivate _updateFocus(): void {\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t`update focus: ${ this.isFocused ? 'focused' : 'not focused' }`\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tif ( this.isFocused ) {\n\t\t\tconst editable = this.selection.editableElement;\n\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'focus editable:',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t{ editable }\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\tif ( editable ) {\n\t\t\t\tthis.domConverter.focus( editable );\n\t\t\t}\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n}\n\n/**\n * Checks if provided element is editable.\n */\nfunction isEditable( element: ViewElement ): boolean {\n\tif ( element.getAttribute( 'contenteditable' ) == 'false' ) {\n\t\treturn false;\n\t}\n\n\tconst parent = element.findAncestor( element => element.hasAttribute( 'contenteditable' ) );\n\n\treturn !parent || parent.getAttribute( 'contenteditable' ) == 'true';\n}\n\n/**\n * Adds inline filler at a given position.\n *\n * The position can be given as an array of DOM nodes and an offset in that array,\n * or a DOM parent element and an offset in that element.\n *\n * @returns The DOM text node that contains an inline filler.\n */\nfunction addInlineFiller( domDocument: DomDocument, domParentOrArray: DomNode | Array, offset: number ): DomText {\n\tconst childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n\tconst nodeAfterFiller = childNodes[ offset ];\n\n\tif ( isText( nodeAfterFiller ) ) {\n\t\tnodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n\n\t\treturn nodeAfterFiller;\n\t} else {\n\t\tconst fillerNode = domDocument.createTextNode( INLINE_FILLER );\n\n\t\tif ( Array.isArray( domParentOrArray ) ) {\n\t\t\t( childNodes as Array ).splice( offset, 0, fillerNode );\n\t\t} else {\n\t\t\tinsertAt( domParentOrArray as DomElement, offset, fillerNode );\n\t\t}\n\n\t\treturn fillerNode;\n\t}\n}\n\n/**\n * Whether two DOM nodes should be considered as similar.\n * Nodes are considered similar if they have the same tag name.\n */\nfunction areSimilarElements( node1: DomNode, node2: DomNode ): boolean {\n\treturn isNode( node1 ) && isNode( node2 ) &&\n\t\t!isText( node1 ) && !isText( node2 ) &&\n\t\t!isComment( node1 ) && !isComment( node2 ) &&\n\t\t( node1 as DomElement ).tagName.toLowerCase() === ( node2 as DomElement ).tagName.toLowerCase();\n}\n\n/**\n * Whether two DOM nodes are text nodes.\n */\nfunction areTextNodes( node1: DomNode, node2: DomNode ): boolean {\n\treturn isNode( node1 ) && isNode( node2 ) &&\n\t\tisText( node1 ) && isText( node2 );\n}\n\n/**\n * Whether two dom nodes should be considered as the same.\n * Two nodes which are considered the same are:\n *\n * * Text nodes with the same text.\n * * Element nodes represented by the same object.\n * * Two block filler elements.\n *\n * @param blockFillerMode Block filler mode, see {@link module:engine/view/domconverter~ViewDomConverter#blockFillerMode}.\n */\nfunction sameNodes( domConverter: ViewDomConverter, actualDomChild: DomNode, expectedDomChild: DomNode ): boolean {\n\t// Elements.\n\tif ( actualDomChild === expectedDomChild ) {\n\t\treturn true;\n\t}\n\t// Texts.\n\telse if ( isText( actualDomChild ) && isText( expectedDomChild ) ) {\n\t\treturn actualDomChild.data === expectedDomChild.data;\n\t}\n\t// Block fillers.\n\telse if ( domConverter.isBlockFiller( actualDomChild ) &&\n\t\tdomConverter.isBlockFiller( expectedDomChild ) ) {\n\t\treturn true;\n\t}\n\n\t// Not matching types.\n\treturn false;\n}\n\n/**\n * The following is a Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n * When the native DOM selection is at the end of the block and preceded by
    e.g.\n *\n * ```html\n *

    foo
    []

    \n * ```\n *\n * which happens a lot when using the soft line break, the browser fails to (visually) move the\n * caret to the new line. A quick fix is as simple as force–refreshing the selection with the same range.\n */\nfunction fixGeckoSelectionAfterBr( focus: ReturnType, domSelection: DomSelection ) {\n\tlet parent = focus!.parent;\n\tlet offset = focus!.offset;\n\n\tif ( isText( parent ) && isInlineFiller( parent ) ) {\n\t\toffset = indexOf( parent ) + 1;\n\t\tparent = parent.parentNode!;\n\t}\n\n\t// This fix works only when the focus point is at the very end of an element.\n\t// There is no point in running it in cases unrelated to the browser bug.\n\tif ( parent.nodeType != Node.ELEMENT_NODE || offset != parent.childNodes.length - 1 ) {\n\t\treturn;\n\t}\n\n\tconst childAtOffset = parent.childNodes[ offset ];\n\n\t// To stay on the safe side, the fix being as specific as possible, it targets only the\n\t// selection which is at the very end of the element and preceded by
    .\n\tif ( childAtOffset && ( childAtOffset as DomElement ).tagName == 'BR' ) {\n\t\tdomSelection.addRange( domSelection.getRangeAt( 0 ) );\n\t}\n}\n\nfunction filterOutFakeSelectionContainer( domChildList: Array | NodeList, fakeSelectionContainer: DomElement | null ) {\n\tconst childList = Array.from( domChildList );\n\n\tif ( childList.length == 0 || !fakeSelectionContainer ) {\n\t\treturn childList;\n\t}\n\n\tconst last = childList[ childList.length - 1 ];\n\n\tif ( last == fakeSelectionContainer ) {\n\t\tchildList.pop();\n\t}\n\n\treturn childList;\n}\n\n/**\n * Creates a fake selection container for a given document.\n */\nfunction createFakeSelectionContainer( domDocument: DomDocument ): DomElement {\n\tconst container = domDocument.createElement( 'div' );\n\n\tcontainer.className = 'ck-fake-selection-container';\n\n\tObject.assign( container.style, {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: '-9999px',\n\t\t// See https://github.com/ckeditor/ckeditor5/issues/752.\n\t\twidth: '42px'\n\t} );\n\n\t// Fill it with a text node so we can update it later.\n\tcontainer.textContent = '\\u00A0';\n\n\treturn container;\n}\n\n// @if CK_DEBUG_TYPING // function _escapeTextNodeData( text ) {\n// @if CK_DEBUG_TYPING // \tconst escapedText = text\n// @if CK_DEBUG_TYPING // \t\t.replace( /&/g, '&' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u00A0/g, ' ' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u2060/g, '⁠' );\n// @if CK_DEBUG_TYPING //\n// @if CK_DEBUG_TYPING // \treturn `\"${ escapedText }\"`;\n// @if CK_DEBUG_TYPING // }\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module engine/view/domconverter\n */\n\nimport { ViewText } from './text.js';\nimport { ViewElement } from './element.js';\nimport { ViewUIElement } from './uielement.js';\nimport { ViewPosition } from './position.js';\nimport { ViewRange } from './range.js';\nimport { ViewSelection } from './selection.js';\nimport { ViewDocumentFragment } from './documentfragment.js';\nimport { ViewTreeWalker } from './treewalker.js';\nimport { Matcher, type MatcherPattern } from './matcher.js';\nimport {\n\tBR_FILLER, INLINE_FILLER_LENGTH, NBSP_FILLER, MARKED_NBSP_FILLER,\n\tgetDataWithoutFiller, isInlineFiller, startsWithFiller\n} from './filler.js';\n\nimport {\n\tglobal,\n\tlogWarning,\n\tindexOf,\n\tgetAncestors,\n\tisText,\n\tisComment,\n\tisValidAttributeName,\n\tfirst,\n\tenv\n} from '@ckeditor/ckeditor5-utils';\n\nimport { type ViewNode } from './node.js';\nimport { type ViewDocument } from './document.js';\nimport { type ViewDocumentSelection } from './documentselection.js';\nimport { type ViewEditableElement } from './editableelement.js';\nimport { type ViewTextProxy } from './textproxy.js';\nimport { type ViewRawElement } from './rawelement.js';\n\n// @if CK_DEBUG_TYPING // const { _buildLogMessage } = require( '../dev-utils/utils.js' );\n\ntype DomNode = globalThis.Node;\ntype DomElement = globalThis.HTMLElement;\ntype DomDocument = globalThis.Document;\ntype DomDocumentFragment = globalThis.DocumentFragment;\ntype DomComment = globalThis.Comment;\ntype DomRange = globalThis.Range;\ntype DomText = globalThis.Text;\ntype DomSelection = globalThis.Selection;\n\nconst BR_FILLER_REF = BR_FILLER( global.document ); // eslint-disable-line new-cap\nconst NBSP_FILLER_REF = NBSP_FILLER( global.document ); // eslint-disable-line new-cap\nconst MARKED_NBSP_FILLER_REF = MARKED_NBSP_FILLER( global.document ); // eslint-disable-line new-cap\nconst UNSAFE_ATTRIBUTE_NAME_PREFIX = 'data-ck-unsafe-attribute-';\nconst UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE = 'data-ck-unsafe-element';\n\n/**\n * `ViewDomConverter` is a set of tools to do transformations between DOM nodes and view nodes. It also handles\n * {@link module:engine/view/domconverter~ViewDomConverter#bindElements bindings} between these nodes.\n *\n * An instance of the DOM converter is available under\n * {@link module:engine/view/view~EditingView#domConverter `editor.editing.view.domConverter`}.\n *\n * The DOM converter does not check which nodes should be rendered (use {@link module:engine/view/renderer~ViewRenderer}), does not keep the\n * state of a tree nor keeps the synchronization between the tree view and\n * the DOM tree (use {@link module:engine/view/document~ViewDocument}).\n *\n * The DOM converter keeps DOM elements to view element bindings, so when the converter gets destroyed, the bindings are lost.\n * Two converters will keep separate binding maps, so one tree view can be bound with two DOM trees.\n */\nexport class ViewDomConverter {\n\tpublic readonly document: ViewDocument;\n\n\t/**\n\t * Whether to leave the View-to-DOM conversion result unchanged or improve editing experience by filtering out interactive data.\n\t */\n\tpublic readonly renderingMode: 'data' | 'editing';\n\n\t/**\n\t * The mode of a block filler used by the DOM converter.\n\t */\n\tpublic blockFillerMode: ViewBlockFillerMode;\n\n\t/**\n\t * Elements which are considered pre-formatted elements.\n\t */\n\tpublic readonly preElements: Array;\n\n\t/**\n\t * Elements which are considered block elements (and hence should be filled with a\n\t * {@link #isBlockFiller block filler}).\n\t *\n\t * Whether an element is considered a block element also affects handling of trailing whitespaces.\n\t *\n\t * You can extend this array if you introduce support for block elements which are not yet recognized here.\n\t */\n\tpublic readonly blockElements: Array;\n\n\t/**\n\t * A list of elements that exist inline (in text) but their inner structure cannot be edited because\n\t * of the way they are rendered by the browser. They are mostly HTML form elements but there are other\n\t * elements such as `` or `' +\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'spotify',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(album\\/\\w+)/,\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(track\\/\\w+)/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\t\t\t\t\t\tconst isTrack = id.startsWith( 'track/' );\n\t\t\t\t\t\tconst iframeStyle = isTrack ?\n\t\t\t\t\t\t\t'width: 100%; height: 80px; border: 0; display: block;' :\n\t\t\t\t\t\t\t'width: 100%; height: auto; aspect-ratio: 100 / 126; border: 0; display: block;';\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'youtube',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/shorts\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n\t\t\t\t\t\t/^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,\n\t\t\t\t\t\t/^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\t\t\t\t\t\tconst time = match[ 2 ];\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'vimeo',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^vimeo\\.com\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n\t\t\t\t\t\t/^player\\.vimeo\\.com\\/video\\/(\\d+)/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'instagram',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^instagram\\.com\\/p\\/(\\w+)/,\n\t\t\t\t\t\t/^instagram\\.com\\/reel\\/(\\w+)/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'twitter',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^twitter\\.com/,\n\t\t\t\t\t\t/^x\\.com/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'googleMaps',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^google\\.com\\/maps/,\n\t\t\t\t\t\t/^goo\\.gl\\/maps/,\n\t\t\t\t\t\t/^maps\\.google\\.com/,\n\t\t\t\t\t\t/^maps\\.app\\.goo\\.gl/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'flickr',\n\t\t\t\t\turl: /^flickr\\.com/\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'facebook',\n\t\t\t\t\turl: /^facebook\\.com/\n\t\t\t\t}\n\t\t\t]\n\t\t} as MediaEmbedConfig );\n\n\t\tthis.registry = new MediaRegistry( editor.locale, editor.config.get( 'mediaEmbed' )! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\t\tconst t = editor.t;\n\t\tconst conversion = editor.conversion;\n\t\tconst renderMediaPreview = editor.config.get( 'mediaEmbed.previewsInData' );\n\t\tconst elementName = editor.config.get( 'mediaEmbed.elementName' )!;\n\n\t\tconst registry = this.registry;\n\n\t\teditor.commands.add( 'mediaEmbed', new MediaEmbedCommand( editor ) );\n\n\t\t// Configure the schema.\n\t\tschema.register( 'media', {\n\t\t\tinheritAllFrom: '$blockObject',\n\t\t\tallowAttributes: [ 'url' ]\n\t\t} );\n\n\t\t// Model -> Data\n\t\tconversion.for( 'dataDowncast' ).elementToStructure( {\n\t\t\tmodel: 'media',\n\t\t\tview: ( modelElement, { writer } ) => {\n\t\t\t\tconst url = modelElement.getAttribute( 'url' ) as string;\n\n\t\t\t\treturn createMediaFigureElement( writer, registry, url, {\n\t\t\t\t\telementName,\n\t\t\t\t\trenderMediaPreview: !!url && renderMediaPreview\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t// Model -> Data (url -> data-oembed-url)\n\t\tconversion.for( 'dataDowncast' ).add(\n\t\t\tmodelToViewUrlAttributeConverter( registry, {\n\t\t\t\telementName,\n\t\t\t\trenderMediaPreview\n\t\t\t} ) );\n\n\t\t// Model -> View (element)\n\t\tconversion.for( 'editingDowncast' ).elementToStructure( {\n\t\t\tmodel: 'media',\n\t\t\tview: ( modelElement, { writer } ) => {\n\t\t\t\tconst url = modelElement.getAttribute( 'url' ) as string;\n\t\t\t\tconst figure = createMediaFigureElement( writer, registry, url, {\n\t\t\t\t\telementName,\n\t\t\t\t\trenderForEditingView: true\n\t\t\t\t} );\n\n\t\t\t\treturn toMediaWidget( figure, writer, t( 'media widget' ) );\n\t\t\t}\n\t\t} );\n\n\t\t// Model -> View (url -> data-oembed-url)\n\t\tconversion.for( 'editingDowncast' ).add(\n\t\t\tmodelToViewUrlAttributeConverter( registry, {\n\t\t\t\telementName,\n\t\t\t\trenderForEditingView: true\n\t\t\t} ) );\n\n\t\t// View -> Model (data-oembed-url -> url)\n\t\tconversion.for( 'upcast' )\n\t\t\t// Upcast semantic media.\n\t\t\t.elementToElement( {\n\t\t\t\tview: element => [ 'oembed', elementName ].includes( element.name ) && element.getAttribute( 'url' ) ?\n\t\t\t\t\t{ name: true } :\n\t\t\t\t\tnull,\n\t\t\t\tmodel: ( viewMedia, { writer } ) => {\n\t\t\t\t\tconst url = viewMedia.getAttribute( 'url' ) as string;\n\n\t\t\t\t\tif ( registry.hasMedia( url ) ) {\n\t\t\t\t\t\treturn writer.createElement( 'media', { url } );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t// Upcast non-semantic media.\n\t\t\t.elementToElement( {\n\t\t\t\tview: {\n\t\t\t\t\tname: 'div',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-oembed-url': true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodel: ( viewMedia, { writer } ) => {\n\t\t\t\t\tconst url = viewMedia.getAttribute( 'data-oembed-url' ) as string;\n\n\t\t\t\t\tif ( registry.hasMedia( url ) ) {\n\t\t\t\t\t\treturn writer.createElement( 'media', { url } );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t// Consume `
    ` elements, that were left after upcast.\n\t\t\t.add( dispatcher => {\n\t\t\t\tconst converter: GetCallback = ( evt, data, conversionApi ) => {\n\t\t\t\t\tif ( !conversionApi.consumable.consume( data.viewItem, { name: true, classes: 'media' } ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { modelRange, modelCursor } = conversionApi.convertChildren( data.viewItem, data.modelCursor );\n\n\t\t\t\t\tdata.modelRange = modelRange;\n\t\t\t\t\tdata.modelCursor = modelCursor;\n\n\t\t\t\t\tconst modelElement = first( modelRange!.getItems() );\n\n\t\t\t\t\tif ( !modelElement ) {\n\t\t\t\t\t\t// Revert consumed figure so other features can convert it.\n\t\t\t\t\t\tconversionApi.consumable.revert( data.viewItem, { name: true, classes: 'media' } );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tdispatcher.on( 'element:figure', converter );\n\t\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/automediaembed\n */\n\nimport { type Editor, Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { ModelLiveRange, ModelLivePosition } from '@ckeditor/ckeditor5-engine';\nimport { Clipboard, type ClipboardInputTransformationEvent, type ClipboardPipeline } from '@ckeditor/ckeditor5-clipboard';\nimport { Delete } from '@ckeditor/ckeditor5-typing';\nimport { Undo, type UndoCommand } from '@ckeditor/ckeditor5-undo';\nimport { global } from '@ckeditor/ckeditor5-utils';\n\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport { insertMedia } from './utils.js';\nimport { type MediaEmbedCommand } from './mediaembedcommand.js';\n\nconst URL_REGEXP = /^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;\n\n/**\n * The auto-media embed plugin. It recognizes media links in the pasted content and embeds\n * them shortly after they are injected into the document.\n */\nexport class AutoMediaEmbed extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ Clipboard, Delete, Undo ]> {\n\t\treturn [ Clipboard, Delete, Undo ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'AutoMediaEmbed' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * The paste–to–embed `setTimeout` ID. Stored as a property to allow\n\t * cleaning of the timeout.\n\t */\n\tprivate _timeoutId: number | null;\n\n\t/**\n\t * The position where the `` element will be inserted after the timeout,\n\t * determined each time the new content is pasted into the document.\n\t */\n\tprivate _positionToInsert: ModelLivePosition | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\tthis._timeoutId = null;\n\t\tthis._positionToInsert = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\n\t\t// We need to listen on `Clipboard#inputTransformation` because we need to save positions of selection.\n\t\t// After pasting, the content between those positions will be checked for a URL that could be transformed\n\t\t// into media.\n\t\tconst clipboardPipeline: ClipboardPipeline = editor.plugins.get( 'ClipboardPipeline' );\n\t\tthis.listenTo( clipboardPipeline, 'inputTransformation', () => {\n\t\t\tconst firstRange = modelDocument.selection.getFirstRange()!;\n\n\t\t\tconst leftLivePosition = ModelLivePosition.fromPosition( firstRange.start );\n\t\t\tleftLivePosition.stickiness = 'toPrevious';\n\n\t\t\tconst rightLivePosition = ModelLivePosition.fromPosition( firstRange.end );\n\t\t\trightLivePosition.stickiness = 'toNext';\n\n\t\t\tmodelDocument.once( 'change:data', () => {\n\t\t\t\tthis._embedMediaBetweenPositions( leftLivePosition, rightLivePosition );\n\n\t\t\t\tleftLivePosition.detach();\n\t\t\t\trightLivePosition.detach();\n\t\t\t}, { priority: 'high' } );\n\t\t} );\n\n\t\tconst undoCommand: UndoCommand = editor.commands.get( 'undo' )!;\n\t\tundoCommand.on( 'execute', () => {\n\t\t\tif ( this._timeoutId ) {\n\t\t\t\tglobal.window.clearTimeout( this._timeoutId );\n\t\t\t\tthis._positionToInsert!.detach();\n\n\t\t\t\tthis._timeoutId = null;\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t}\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Analyzes the part of the document between provided positions in search for a URL representing media.\n\t * When the URL is found, it is automatically converted into media.\n\t *\n\t * @param leftPosition Left position of the selection.\n\t * @param rightPosition Right position of the selection.\n\t */\n\tprivate _embedMediaBetweenPositions( leftPosition: ModelLivePosition, rightPosition: ModelLivePosition ): void {\n\t\tconst editor = this.editor;\n\t\tconst mediaRegistry = editor.plugins.get( MediaEmbedEditing ).registry;\n\t\t// TODO: Use marker instead of ModelLiveRange & LivePositions.\n\t\tconst urlRange = new ModelLiveRange( leftPosition, rightPosition );\n\t\tconst walker = urlRange.getWalker( { ignoreElementEnd: true } );\n\n\t\tlet url = '';\n\n\t\tfor ( const node of walker ) {\n\t\t\tif ( node.item.is( '$textProxy' ) ) {\n\t\t\t\turl += node.item.data;\n\t\t\t}\n\t\t}\n\n\t\turl = url.trim();\n\n\t\t// If the URL does not match to universal URL regexp, let's skip that.\n\t\tif ( !url.match( URL_REGEXP ) ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// If the URL represents a media, let's use it.\n\t\tif ( !mediaRegistry.hasMedia( url ) ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst mediaEmbedCommand: MediaEmbedCommand = editor.commands.get( 'mediaEmbed' )!;\n\n\t\t// Do not anything if media element cannot be inserted at the current position.\n\t\t// See https://github.com/ckeditor/ckeditor5-media-embed/issues/47.\n\t\tif ( !mediaEmbedCommand.isEnabled ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Position won't be available in the `setTimeout` function so let's clone it.\n\t\tthis._positionToInsert = ModelLivePosition.fromPosition( leftPosition );\n\n\t\t// This action mustn't be executed if undo was called between pasting and auto-embedding.\n\t\tthis._timeoutId = global.window.setTimeout( () => {\n\t\t\teditor.model.change( writer => {\n\t\t\t\tthis._timeoutId = null;\n\n\t\t\t\twriter.remove( urlRange );\n\t\t\t\turlRange.detach();\n\n\t\t\t\tlet insertionPosition: ModelLivePosition | null = null;\n\n\t\t\t\t// Check if position where the media element should be inserted is still valid.\n\t\t\t\t// Otherwise leave it as undefined to use document.selection - default behavior of model.insertContent().\n\t\t\t\tif ( this._positionToInsert!.root.rootName !== '$graveyard' ) {\n\t\t\t\t\tinsertionPosition = this._positionToInsert;\n\t\t\t\t}\n\n\t\t\t\tinsertMedia( editor.model, url, insertionPosition, false );\n\n\t\t\t\tthis._positionToInsert!.detach();\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t} );\n\n\t\t\teditor.plugins.get( Delete ).requestUndoOnBackspace();\n\t\t}, 100 );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/ui/mediaformview\n */\n\nimport {\n\ttype InputTextView,\n\tLabeledFieldView,\n\tView,\n\tcreateLabeledInputText,\n\tsubmitHandler\n} from '@ckeditor/ckeditor5-ui';\nimport { FocusTracker, KeystrokeHandler, type Locale } from '@ckeditor/ckeditor5-utils';\n\nimport '../../theme/mediaform.css';\n\n/**\n * The media form view controller class.\n *\n * See {@link module:media-embed/ui/mediaformview~MediaFormView}.\n */\nexport class MediaFormView extends View {\n\t/**\n\t * Tracks information about the DOM focus in the form.\n\t */\n\tpublic readonly focusTracker: FocusTracker;\n\n\t/**\n\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t */\n\tpublic readonly keystrokes: KeystrokeHandler;\n\n\t/**\n\t * The value of the URL input.\n\t */\n\tdeclare public mediaURLInputValue: string;\n\n\t/**\n\t * The URL input view.\n\t */\n\tpublic urlInputView: LabeledFieldView;\n\n\t/**\n\t * An array of form validators used by {@link #isValid}.\n\t */\n\tprivate readonly _validators: Array<( v: MediaFormView ) => string | undefined>;\n\n\t/**\n\t * The default info text for the {@link #urlInputView}.\n\t */\n\tprivate _urlInputViewInfoDefault?: string;\n\n\t/**\n\t * The info text with an additional tip for the {@link #urlInputView},\n\t * displayed when the input has some value.\n\t */\n\tprivate _urlInputViewInfoTip?: string;\n\n\t/**\n\t * @param validators Form validators used by {@link #isValid}.\n\t * @param locale The localization services instance.\n\t */\n\tconstructor( validators: Array<( v: MediaFormView ) => string | undefined>, locale: Locale ) {\n\t\tsuper( locale );\n\n\t\tthis.focusTracker = new FocusTracker();\n\t\tthis.keystrokes = new KeystrokeHandler();\n\t\tthis.set( 'mediaURLInputValue', '' );\n\t\tthis.urlInputView = this._createUrlInput();\n\n\t\tthis._validators = validators;\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'form',\n\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-media-form',\n\t\t\t\t\t'ck-responsive-form'\n\t\t\t\t],\n\n\t\t\t\ttabindex: '-1'\n\t\t\t},\n\n\t\t\tchildren: [\n\t\t\t\tthis.urlInputView\n\t\t\t]\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override render(): void {\n\t\tsuper.render();\n\n\t\tsubmitHandler( {\n\t\t\tview: this\n\t\t} );\n\n\t\t// Register the view in the focus tracker.\n\t\tthis.focusTracker.add( this.urlInputView.element! );\n\n\t\t// Start listening for the keystrokes coming from #element.\n\t\tthis.keystrokes.listenTo( this.element! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tthis.focusTracker.destroy();\n\t\tthis.keystrokes.destroy();\n\t}\n\n\t/**\n\t * Focuses the {@link #urlInputView}.\n\t */\n\tpublic focus(): void {\n\t\tthis.urlInputView.focus();\n\t}\n\n\t/**\n\t * The native DOM `value` of the {@link #urlInputView} element.\n\t *\n\t * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n\t * which works one way only and may not represent the actual state of the component in the DOM.\n\t */\n\tpublic get url(): string {\n\t\treturn this.urlInputView.fieldView.element!.value.trim();\n\t}\n\n\tpublic set url( url: string ) {\n\t\tthis.urlInputView.fieldView.value = url.trim();\n\t}\n\n\t/**\n\t * Validates the form and returns `false` when some fields are invalid.\n\t */\n\tpublic isValid(): boolean {\n\t\tthis.resetFormStatus();\n\n\t\tfor ( const validator of this._validators ) {\n\t\t\tconst errorText = validator( this );\n\n\t\t\t// One error per field is enough.\n\t\t\tif ( errorText ) {\n\t\t\t\t// Apply updated error.\n\t\t\t\tthis.urlInputView.errorText = errorText;\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Cleans up the supplementary error and information text of the {@link #urlInputView}\n\t * bringing them back to the state when the form has been displayed for the first time.\n\t *\n\t * See {@link #isValid}.\n\t */\n\tpublic resetFormStatus(): void {\n\t\tthis.urlInputView.errorText = null;\n\t\tthis.urlInputView.infoText = this._urlInputViewInfoDefault!;\n\t}\n\n\t/**\n\t * Creates a labeled input view.\n\t *\n\t * @returns Labeled input view instance.\n\t */\n\tprivate _createUrlInput(): LabeledFieldView {\n\t\tconst t = this.locale!.t;\n\n\t\tconst labeledInput = new LabeledFieldView( this.locale, createLabeledInputText );\n\t\tconst inputField = labeledInput.fieldView;\n\n\t\tthis._urlInputViewInfoDefault = t( 'Paste the media URL in the input.' );\n\t\tthis._urlInputViewInfoTip = t( 'Tip: Paste the URL into the content to embed faster.' );\n\n\t\tlabeledInput.label = t( 'Media URL' );\n\t\tlabeledInput.infoText = this._urlInputViewInfoDefault;\n\n\t\tinputField.inputMode = 'url';\n\t\tinputField.on( 'input', () => {\n\t\t\t// Display the tip text only when there is some value. Otherwise fall back to the default info text.\n\t\t\tlabeledInput.infoText = inputField.element!.value ? this._urlInputViewInfoTip! : this._urlInputViewInfoDefault!;\n\t\t\tthis.mediaURLInputValue = inputField.element!.value.trim();\n\t\t} );\n\n\t\treturn labeledInput;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedui\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { IconMedia } from '@ckeditor/ckeditor5-icons';\nimport { ButtonView, CssTransitionDisablerMixin, MenuBarMenuListItemButtonView, Dialog } from '@ckeditor/ckeditor5-ui';\n\nimport { MediaFormView } from './ui/mediaformview.js';\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport type { LocaleTranslate } from '@ckeditor/ckeditor5-utils';\nimport { type MediaRegistry } from './mediaregistry.js';\n\n/**\n * The media embed UI plugin.\n */\nexport class MediaEmbedUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing, Dialog ]> {\n\t\treturn [ MediaEmbedEditing, Dialog ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\tprivate _formView: MediaFormView | undefined;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.ui.componentFactory.add( 'mediaEmbed', () => {\n\t\t\tconst t = this.editor.locale.t;\n\t\t\tconst button = this._createDialogButton( ButtonView );\n\n\t\t\tbutton.tooltip = true;\n\t\t\tbutton.label = t( 'Insert media' );\n\n\t\t\treturn button;\n\t\t} );\n\n\t\teditor.ui.componentFactory.add( 'menuBar:mediaEmbed', () => {\n\t\t\tconst t = this.editor.locale.t;\n\t\t\tconst button = this._createDialogButton( MenuBarMenuListItemButtonView );\n\n\t\t\tbutton.label = t( 'Media' );\n\n\t\t\treturn button;\n\t\t} );\n\t}\n\n\t/**\n\t * Creates a button for menu bar that will show media embed dialog.\n\t */\n\tprivate _createDialogButton( ButtonClass: T ): InstanceType {\n\t\tconst editor = this.editor;\n\t\tconst buttonView = new ButtonClass( editor.locale ) as InstanceType;\n\t\tconst command = editor.commands.get( 'mediaEmbed' )!;\n\t\tconst dialogPlugin = this.editor.plugins.get( 'Dialog' );\n\n\t\tbuttonView.icon = IconMedia;\n\n\t\tbuttonView.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\n\t\tbuttonView.on( 'execute', () => {\n\t\t\tif ( dialogPlugin.id === 'mediaEmbed' ) {\n\t\t\t\tdialogPlugin.hide();\n\t\t\t} else {\n\t\t\t\tthis._showDialog();\n\t\t\t}\n\t\t} );\n\n\t\treturn buttonView;\n\t}\n\n\tprivate _showDialog() {\n\t\tconst editor = this.editor;\n\t\tconst dialog = editor.plugins.get( 'Dialog' );\n\t\tconst command = editor.commands.get( 'mediaEmbed' )!;\n\t\tconst t = editor.locale.t;\n\n\t\tconst isMediaSelected = command.value !== undefined;\n\n\t\tif ( !this._formView ) {\n\t\t\tconst registry = editor.plugins.get( MediaEmbedEditing ).registry;\n\n\t\t\tthis._formView = new ( CssTransitionDisablerMixin( MediaFormView ) )( getFormValidators( editor.t, registry ), editor.locale );\n\t\t\tthis._formView.on( 'submit', () => this._handleSubmitForm() );\n\t\t}\n\n\t\tdialog.show( {\n\t\t\tid: 'mediaEmbed',\n\t\t\ttitle: t( 'Media embed' ),\n\t\t\tcontent: this._formView,\n\t\t\tisModal: true,\n\t\t\tonShow: () => {\n\t\t\t\tthis._formView!.url = command.value || '';\n\t\t\t\tthis._formView!.resetFormStatus();\n\t\t\t\tthis._formView!.urlInputView.fieldView.select();\n\t\t\t},\n\t\t\tactionButtons: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Cancel' ),\n\t\t\t\t\twithText: true,\n\t\t\t\t\tonExecute: () => dialog.hide()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: isMediaSelected ? t( 'Save' ) : t( 'Insert' ),\n\t\t\t\t\tclass: 'ck-button-action',\n\t\t\t\t\twithText: true,\n\t\t\t\t\tonExecute: () => this._handleSubmitForm()\n\t\t\t\t}\n\t\t\t]\n\t\t} );\n\t}\n\n\tprivate _handleSubmitForm() {\n\t\tconst editor = this.editor;\n\t\tconst dialog = editor.plugins.get( 'Dialog' );\n\n\t\tif ( this._formView!.isValid() ) {\n\t\t\teditor.execute( 'mediaEmbed', this._formView!.url );\n\t\t\tdialog.hide();\n\t\t\teditor.editing.view.focus();\n\t\t}\n\t}\n}\n\nfunction getFormValidators( t: LocaleTranslate, registry: MediaRegistry ): Array<( v: MediaFormView ) => string | undefined> {\n\treturn [\n\t\tform => {\n\t\t\tif ( !form.url.length ) {\n\t\t\t\treturn t( 'The URL must not be empty.' );\n\t\t\t}\n\t\t},\n\t\tform => {\n\t\t\tif ( !registry.hasMedia( form.url ) ) {\n\t\t\t\treturn t( 'This media URL is not supported.' );\n\t\t\t}\n\t\t}\n\t];\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembed\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { Widget } from '@ckeditor/ckeditor5-widget';\n\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport { AutoMediaEmbed } from './automediaembed.js';\nimport { MediaEmbedUI } from './mediaembedui.js';\n\nimport '../theme/mediaembed.css';\n\n/**\n * The media embed plugin.\n *\n * For a detailed overview, check the {@glink features/media-embed/media-embed Media Embed feature documentation}.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * The {@link module:media-embed/mediaembedediting~MediaEmbedEditing media embed editing feature},\n * * The {@link module:media-embed/mediaembedui~MediaEmbedUI media embed UI feature} and\n * * The {@link module:media-embed/automediaembed~AutoMediaEmbed auto-media embed feature}.\n */\nexport class MediaEmbed extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget ]> {\n\t\treturn [ MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbed' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/constants\n */\n\nimport {\n\tIconObjectCenter,\n\tIconObjectInlineLeft,\n\tIconObjectInlineRight,\n\tIconObjectLeft,\n\tIconObjectRight\n} from '@ckeditor/ckeditor5-icons';\nimport type { MediaStyleDropdownDefinition, NormalizedMediaStyleOption } from '../mediaembedconfig.js';\n\n/**\n * Built-in style options provided by the plugin. Integrators can refer to these by\n * name in {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * to opt out, override individual fields, or coexist with custom styles.\n *\n * @internal\n */\nexport const DEFAULT_OPTIONS: Record = {\n\talignLeft: {\n\t\tname: 'alignLeft',\n\t\ttitle: 'Left aligned media',\n\t\ticon: IconObjectInlineLeft,\n\t\tclassName: 'media-style-align-left'\n\t},\n\talignBlockLeft: {\n\t\tname: 'alignBlockLeft',\n\t\ttitle: 'Left aligned media',\n\t\ticon: IconObjectLeft,\n\t\tclassName: 'media-style-block-align-left'\n\t},\n\talignCenter: {\n\t\tname: 'alignCenter',\n\t\ttitle: 'Centered media',\n\t\ticon: IconObjectCenter,\n\t\tisDefault: true\n\t},\n\talignBlockRight: {\n\t\tname: 'alignBlockRight',\n\t\ttitle: 'Right aligned media',\n\t\ticon: IconObjectRight,\n\t\tclassName: 'media-style-block-align-right'\n\t},\n\talignRight: {\n\t\tname: 'alignRight',\n\t\ttitle: 'Right aligned media',\n\t\ticon: IconObjectInlineRight,\n\t\tclassName: 'media-style-align-right'\n\t}\n};\n\n/**\n * Short icon-name aliases that can be used as the `icon` value in a media style\n * option definition. Matches the alias set exposed by the image styles feature so\n * the two APIs feel symmetrical.\n *\n * @internal\n */\nexport const DEFAULT_ICONS: Record = {\n\tinlineLeft: IconObjectInlineLeft,\n\tleft: IconObjectLeft,\n\tcenter: IconObjectCenter,\n\tright: IconObjectRight,\n\tinlineRight: IconObjectInlineRight\n};\n\n/**\n * Built-in dropdown groupings. Each entry references built-in style component names. If any\n * items are filtered out by configuration, the dropdown is rebuilt from the remaining names\n * (or skipped entirely if fewer than two remain).\n *\n * @internal\n */\nexport const DEFAULT_DROPDOWN_DEFINITIONS: Array = [\n\t{\n\t\tname: 'mediaEmbed:wrapText',\n\t\ttitle: 'Wrap text',\n\t\titems: [ 'mediaEmbed:alignLeft', 'mediaEmbed:alignRight' ],\n\t\tdefaultItem: 'mediaEmbed:alignLeft'\n\t},\n\t{\n\t\tname: 'mediaEmbed:breakText',\n\t\ttitle: 'Break text',\n\t\titems: [ 'mediaEmbed:alignBlockLeft', 'mediaEmbed:alignCenter', 'mediaEmbed:alignBlockRight' ],\n\t\tdefaultItem: 'mediaEmbed:alignCenter'\n\t}\n];\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/utils\n */\n\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\nimport type { ToolbarConfigItem } from '@ckeditor/ckeditor5-core';\nimport type {\n\tMediaStyleConfig,\n\tMediaStyleDropdownDefinition,\n\tMediaStyleOptionDefinition,\n\tNormalizedMediaStyleOption\n} from '../mediaembedconfig.js';\nimport { DEFAULT_ICONS, DEFAULT_OPTIONS } from './constants.js';\n\n/**\n * In-flight shape used inside the normalizer. After string-to-default resolution every entry\n * carries at least a `name`. The remaining required fields (`title`, `icon`, `className` unless\n * `isDefault`) are checked by {@link ~isValidOption} before the entry reaches the resolved list.\n */\ntype DraftStyle = Partial & { name: string };\n\n/**\n * Normalizes the {@link module:media-embed/mediaembedconfig~MediaStyleConfig#options style options}\n * provided by the integrator. Each entry is resolved into a full\n * {@link module:media-embed/mediaembedconfig~MediaStyleOptionDefinition} and invalid entries\n * are filtered out with a console warning.\n *\n * @internal\n */\nexport function normalizeStyles( configuredStyles: MediaStyleConfig ): Array {\n\tconst configured = configuredStyles.options || [];\n\n\treturn configured\n\t\t.map( entry => normalizeDefinition( entry ) )\n\t\t.filter( ( entry ): entry is NormalizedMediaStyleOption => isValidOption( entry ) );\n}\n\n/**\n * Resolves a single config entry into a style option definition. A string entry is first\n * promoted to its object form (`{ name }`) and then shallow-merged on top of the matching\n * built-in default — entries without a matching built-in pass through unchanged and are\n * rejected by {@link ~isValidOption} if they lack required fields.\n *\n * Also resolves icon-name aliases (`'left'`, `'inlineLeft'`, etc.) to the corresponding\n * SVG sources from {@link module:media-embed/mediaembedstyle/constants~DEFAULT_ICONS}.\n */\nfunction normalizeDefinition( entry: string | DraftStyle ): DraftStyle {\n\t// Spread of `undefined` is a no-op, so unknown-name overrides produce a clean passthrough.\n\tconst override: DraftStyle = typeof entry === 'string' ? { name: entry } : entry;\n\tconst definition: DraftStyle = { ...DEFAULT_OPTIONS[ override.name ], ...override };\n\n\tif ( typeof definition.icon === 'string' && DEFAULT_ICONS[ definition.icon ] ) {\n\t\tdefinition.icon = DEFAULT_ICONS[ definition.icon ];\n\t}\n\n\treturn definition;\n}\n\n/**\n * Validates a normalized style option. `name`, `title`, and `icon` are always required.\n * `className` is required unless the entry is the default style (defaults encode as\n * attribute-absence and intentionally have no class). Emits a console warning and returns\n * `false` when any of these checks fails.\n */\nfunction isValidOption( option: DraftStyle ): boolean {\n\tif ( !option.name || !option.title || !option.icon || ( !option.isDefault && !option.className ) ) {\n\t\twarnInvalidStyle( { style: option } );\n\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nfunction warnInvalidStyle( info: object ): void {\n\t/**\n\t * The media style configuration provided in the editor config is invalid. The warning is\n\t * emitted in two situations:\n\t *\n\t * * An entry in {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles.options`}\n\t * does not reference a built-in style by name (`'alignLeft'`, `'alignBlockLeft'`,\n\t * `'alignCenter'`, `'alignBlockRight'`, `'alignRight'`) and does not follow the\n\t * {@link module:media-embed/mediaembedconfig~MediaStyleOptionDefinition} shape —\n\t * `name`, `title`, `icon`, and (unless `isDefault: true`) `className` are required.\n\t * The offending entry is reported under the `style` parameter.\n\t * * A dropdown entry placed inline in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `config.mediaEmbed.toolbar`}\n\t * does not follow the {@link module:media-embed/mediaembedconfig~MediaStyleDropdownDefinition} shape\n\t * (`name` and every `items[]` entry must use the full `mediaEmbed:` prefix, `defaultItem` must\n\t * be one of the `items`, `title` must be a non-empty string), or its `items[]` reference styles\n\t * that are not in the resolved\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`} list.\n\t * The offending entry is reported under the `dropdown` parameter.\n\t *\n\t * @error media-style-configuration-definition-invalid\n\t */\n\tlogWarning( 'media-style-configuration-definition-invalid', info );\n}\n\n/**\n * Type guard for toolbar config entries shaped like a media style dropdown definition. The\n * discriminator is `defaultItem` — generic toolbar groupings use `items` + `label` and never\n * carry a `defaultItem` field.\n *\n * @internal\n */\nexport function isMediaStyleDropdown(\n\titem: ToolbarConfigItem | MediaStyleDropdownDefinition\n): item is MediaStyleDropdownDefinition {\n\treturn typeof item === 'object' && item !== null && typeof ( item as MediaStyleDropdownDefinition ).defaultItem === 'string';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedtoolbar\n */\n\nimport { Plugin, type PluginDependenciesOf, type ToolbarConfigItem } from '@ckeditor/ckeditor5-core';\nimport type { ComponentFactory } from '@ckeditor/ckeditor5-ui';\nimport { WidgetToolbarRepository } from '@ckeditor/ckeditor5-widget';\n\nimport { getSelectedMediaViewWidget } from './utils.js';\nimport { isMediaStyleDropdown } from './mediaembedstyle/utils.js';\nimport type { MediaStyleDropdownDefinition } from './mediaembedconfig.js';\n\n/**\n * The media embed toolbar plugin. It creates a toolbar for media embed that shows up when the media element is selected.\n *\n * Instances of toolbar components (e.g. buttons) are created based on the\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `media.toolbar` configuration option}.\n */\nexport class MediaEmbedToolbar extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ WidgetToolbarRepository ]> {\n\t\treturn [ WidgetToolbarRepository ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedToolbar' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic afterInit(): void {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\tconst widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );\n\t\twidgetToolbarRepository.register( 'mediaEmbed', {\n\t\t\tariaLabel: t( 'Media toolbar' ),\n\t\t\titems: normalizeDeclarativeConfig(\n\t\t\t\teditor.ui.componentFactory,\n\t\t\t\teditor.config.get( 'mediaEmbed.toolbar' ) || []\n\t\t\t),\n\t\t\tgetRelatedElement: getSelectedMediaViewWidget\n\t\t} );\n\t}\n}\n\n/**\n * Flattens dropdown definitions to their factory names, dropping any `mediaEmbed:`-prefixed\n * name the style UI did not register — otherwise the toolbar crashes with `componentfactory-item-missing`.\n * Non-string entries (e.g. generic `{ label, items }` toolbar groupings) pass through unchanged.\n */\nfunction normalizeDeclarativeConfig(\n\tfactory: ComponentFactory,\n\tconfig: ReadonlyArray\n): Array {\n\treturn config\n\t\t.map( item => isMediaStyleDropdown( item ) ? item.name : item )\n\t\t.filter( item =>\n\t\t\ttypeof item !== 'string' || !item.startsWith( 'mediaEmbed:' ) || factory.has( item )\n\t\t);\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/resizemediaembedcommand\n */\n\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { getSelectedMediaModelWidget } from '../utils.js';\n\n/**\n * The resize media embed command.\n */\nexport class ResizeMediaEmbedCommand extends Command {\n\t/**\n\t * The current width of the selected media embed, or `null` if not resized.\n\t */\n\tdeclare public value: string | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override refresh(): void {\n\t\tconst element = getSelectedMediaModelWidget( this.editor.model.document.selection );\n\n\t\tthis.isEnabled = !!element;\n\n\t\tif ( !element || !element.hasAttribute( 'resizedWidth' ) ) {\n\t\t\tthis.value = null;\n\t\t} else {\n\t\t\tthis.value = element.getAttribute( 'resizedWidth' ) as string;\n\t\t}\n\t}\n\n\t/**\n\t * Executes the command.\n\t *\n\t * ```ts\n\t * // Sets the width as a percentage of the parent width:\n\t * editor.execute( 'resizeMediaEmbed', { width: '50%' } );\n\t *\n\t * // Removes the resize and restores the default width:\n\t * editor.execute( 'resizeMediaEmbed', { width: null } );\n\t * ```\n\t *\n\t * @param options\n\t * @param options.width The new width of the media embed as a CSS `width` value\n\t * (e.g. `'50%'`), or `null` to remove the resize.\n\t * @fires execute\n\t */\n\tpublic override execute( options: { width: string | null } ): void {\n\t\tconst model = this.editor.model;\n\t\tconst mediaElement = getSelectedMediaModelWidget( model.document.selection );\n\n\t\tif ( mediaElement ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.setAttribute( 'resizedWidth', options.width, mediaElement );\n\t\t\t} );\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/constants\n */\n\n/**\n * The view class applied to a resized media embed figure.\n *\n * Shared between the editing plugin (which toggles it via downcast of `resizedWidth` and consumes\n * it on upcast) and the handles plugin (which adds it during drag and strips it on commit), so\n * both layers agree on the exact class name.\n *\n * @internal\n */\nexport const RESIZED_MEDIA_CLASS = 'media_resized';\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizeediting\n */\n\nimport type { ViewElement } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedEditing } from '../mediaembedediting.js';\nimport { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport { RESIZED_MEDIA_CLASS } from './constants.js';\n\n/**\n * The media embed resize editing feature.\n *\n * It adds the ability to resize each media embed using handles.\n */\nexport class MediaEmbedResizeEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing ]> {\n\t\treturn [ MediaEmbedEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeEditing' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t * @internal\n\t */\n\tpublic static get licenseFeatureCode(): string {\n\t\treturn 'MER';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isPremiumPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\teditor.config.define( 'mediaEmbed', {\n\t\t\tresizeUnit: '%',\n\t\t\tresizeOptions: [\n\t\t\t\t{ name: 'resizeMediaEmbed:original', value: null, icon: 'original' },\n\t\t\t\t{ name: 'resizeMediaEmbed:custom', value: 'custom', icon: 'custom' },\n\t\t\t\t{ name: 'resizeMediaEmbed:25', value: '25', icon: 'small' },\n\t\t\t\t{ name: 'resizeMediaEmbed:50', value: '50', icon: 'medium' },\n\t\t\t\t{ name: 'resizeMediaEmbed:75', value: '75', icon: 'large' }\n\t\t\t]\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.commands.add( 'resizeMediaEmbed', new ResizeMediaEmbedCommand( editor ) );\n\n\t\tthis._registerConverters();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic afterInit(): void {\n\t\tthis._registerSchema();\n\t}\n\n\tprivate _registerSchema(): void {\n\t\tconst schema = this.editor.model.schema;\n\n\t\tschema.extend( 'media', { allowAttributes: [ 'resizedWidth' ] } );\n\t\tschema.setAttributeProperties( 'resizedWidth', { isFormatting: true } );\n\t}\n\n\t/**\n\t * Registers media embed resize converters.\n\t */\n\tprivate _registerConverters(): void {\n\t\tconst editor = this.editor;\n\n\t\t// Downcast (model → view): resizedWidth → style.width + class on
    .\n\t\teditor.conversion.for( 'downcast' ).add( dispatcher =>\n\t\t\tdispatcher.on( 'attribute:resizedWidth:media', ( evt, data, conversionApi ) => {\n\t\t\t\tif ( !conversionApi.consumable.consume( data.item, evt.name ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst viewWriter = conversionApi.writer;\n\t\t\t\tconst figure = conversionApi.mapper.toViewElement( data.item );\n\n\t\t\t\tif ( data.attributeNewValue !== null ) {\n\t\t\t\t\tviewWriter.setStyle( 'width', data.attributeNewValue, figure );\n\t\t\t\t\tviewWriter.addClass( RESIZED_MEDIA_CLASS, figure );\n\t\t\t\t} else {\n\t\t\t\t\tviewWriter.removeStyle( 'width', figure );\n\t\t\t\t\tviewWriter.removeClass( RESIZED_MEDIA_CLASS, figure );\n\t\t\t\t}\n\t\t\t} )\n\t\t);\n\n\t\t// Upcast: style.width on
    → resizedWidth.\n\t\t//\n\t\t// The `hasClass` guard lives in the value callback (not the matcher) because the `media`\n\t\t// class is already consumed upstream by MediaEmbedEditing. Without the guard, any figure\n\t\t// with a width style would match and could race image resize's upcast on image figures.\n\t\teditor.conversion.for( 'upcast' )\n\t\t\t.attributeToAttribute( {\n\t\t\t\tview: {\n\t\t\t\t\tname: 'figure',\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\twidth: /.+/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodel: {\n\t\t\t\t\tkey: 'resizedWidth',\n\t\t\t\t\tvalue: ( viewElement: ViewElement ) => {\n\t\t\t\t\t\tif ( !viewElement.hasClass( 'media' ) ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn viewElement.getStyle( 'width' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Consume the media_resized class during upcast so it does not cause conversion issues.\n\t\teditor.conversion.for( 'upcast' ).add( dispatcher => {\n\t\t\tdispatcher.on( 'element:figure', ( evt, data, conversionApi ) => {\n\t\t\t\tconversionApi.consumable.consume( data.viewItem, { classes: [ RESIZED_MEDIA_CLASS ] } );\n\t\t\t} );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizehandles\n */\n\nimport type { ModelElement, ViewContainerElement } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { WidgetResize } from '@ckeditor/ckeditor5-widget';\nimport type { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport { RESIZED_MEDIA_CLASS } from './constants.js';\n\n/**\n * The media embed resize by handles feature.\n *\n * It adds the ability to resize each media embed using handles.\n */\nexport class MediaEmbedResizeHandles extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ WidgetResize ]> {\n\t\treturn [ WidgetResize ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeHandles' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst command: ResizeMediaEmbedCommand = this.editor.commands.get( 'resizeMediaEmbed' )!;\n\t\tthis.bind( 'isEnabled' ).to( command );\n\n\t\tthis._setupResizerCreator();\n\t}\n\n\t/**\n\t * Attaches a resizer to every newly inserted media widget. Walks only the ranges\n\t * reported by the differ — never the whole document — so unrelated inserts (e.g.\n\t * pressing Enter to create a paragraph) cost only the differ check.\n\t *\n\t * Each resizer's `isEnabled` is bound to the plugin in {@link #_attachResizer},\n\t * so it auto-tracks the resize command's state.\n\t */\n\tprivate _setupResizerCreator(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst widgetResize = editor.plugins.get( WidgetResize );\n\n\t\t// Low priority ensures downcast has run before we look up view elements.\n\t\tthis.listenTo( model.document, 'change:data', () => {\n\t\t\tfor ( const change of model.document.differ.getChanges() ) {\n\t\t\t\tif ( change.type !== 'insert' || change.name === '$text' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst insertedRange = model.createRange(\n\t\t\t\t\tchange.position,\n\t\t\t\t\tchange.position.getShiftedBy( change.length )\n\t\t\t\t);\n\n\t\t\t\tfor ( const item of insertedRange.getItems() ) {\n\t\t\t\t\tif ( !item.is( 'element', 'media' ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst viewElement = editor.editing.mapper.toViewElement( item ) as ViewContainerElement | undefined;\n\n\t\t\t\t\t/* v8 ignore next -- @preserve */\n\t\t\t\t\tif ( !viewElement ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* v8 ignore else -- @preserve */\n\t\t\t\t\tif ( !widgetResize.getResizerByViewElement( viewElement ) ) {\n\t\t\t\t\t\tthis._attachResizer( item, viewElement );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * Attaches a resizer to a single media widget.\n\t */\n\tprivate _attachResizer( modelElement: ModelElement, widgetView: ViewContainerElement ) {\n\t\tconst editor = this.editor;\n\t\tconst editingView = editor.editing.view;\n\n\t\tconst resizer = editor.plugins.get( WidgetResize ).attachTo( {\n\t\t\tunit: editor.config.get( 'mediaEmbed.resizeUnit' )!,\n\t\t\tmodelElement,\n\t\t\tviewElement: widgetView,\n\t\t\teditor,\n\n\t\t\tgetHandleHost: domWidgetElement => domWidgetElement.querySelector( '.ck-media__wrapper' )!,\n\t\t\tgetResizeHost: domWidgetElement => domWidgetElement,\n\n\t\t\tonCommit: newValue => {\n\t\t\t\teditingView.change( writer => writer.removeClass( RESIZED_MEDIA_CLASS, widgetView ) );\n\t\t\t\teditor.execute( 'resizeMediaEmbed', { width: newValue } );\n\t\t\t}\n\t\t} );\n\n\t\tresizer.bind( 'isEnabled' ).to( this );\n\n\t\tresizer.on( 'updateSize', () => {\n\t\t\tif ( !widgetView.hasClass( RESIZED_MEDIA_CLASS ) ) {\n\t\t\t\teditingView.change( writer => writer.addClass( RESIZED_MEDIA_CLASS, widgetView ) );\n\t\t\t}\n\t\t} );\n\n\t\t// Redraw once the view has flushed to DOM — otherwise the freshly inserted resizer\n\t\t// UIElement has no inline styles and handles cluster at the top-left corner (visible\n\t\t// after drag-and-drop until another event eventually triggers a redraw).\n\t\teditingView.once( 'render', () => resizer.redraw() );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizebuttons\n */\n\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport {\n\tButtonView,\n\tDropdownButtonView,\n\tUIModel,\n\tcreateDropdown,\n\taddListToDropdown,\n\ttype ListDropdownItemDefinition\n} from '@ckeditor/ckeditor5-ui';\nimport { CKEditorError, Collection, type Locale } from '@ckeditor/ckeditor5-utils';\nimport {\n\tIconObjectSizeCustom,\n\tIconObjectSizeFull,\n\tIconObjectSizeLarge,\n\tIconObjectSizeMedium,\n\tIconObjectSizeSmall\n} from '@ckeditor/ckeditor5-icons';\n\nimport { MediaEmbedResizeEditing } from './mediaembedresizeediting.js';\nimport type { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport type { MediaEmbedResizeOption } from '../mediaembedconfig.js';\n\nconst RESIZE_ICONS = /* #__PURE__ */ ( () => ( {\n\tsmall: IconObjectSizeSmall,\n\tmedium: IconObjectSizeMedium,\n\tlarge: IconObjectSizeLarge,\n\tcustom: IconObjectSizeCustom,\n\toriginal: IconObjectSizeFull\n} ) )();\n\n/**\n * The media embed resize buttons plugin.\n *\n * It adds a possibility to resize media embeds using the toolbar dropdown or individual buttons,\n * depending on the plugin configuration.\n */\nexport class MediaEmbedResizeButtons extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedResizeEditing ]> {\n\t\treturn [ MediaEmbedResizeEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeButtons' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\tprivate readonly _resizeUnit: 'px' | '%';\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\tthis._resizeUnit = editor.config.get( 'mediaEmbed.resizeUnit' )!;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst options = editor.config.get( 'mediaEmbed.resizeOptions' )!;\n\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\n\t\tthis.bind( 'isEnabled' ).to( command );\n\n\t\tfor ( const option of options ) {\n\t\t\tthis._registerMediaEmbedResizeButton( option );\n\t\t}\n\n\t\tthis._registerMediaEmbedResizeDropdown( options );\n\t}\n\n\t/**\n\t * Creates a standalone button component for the given resize option.\n\t */\n\tprivate _registerMediaEmbedResizeButton( option: MediaEmbedResizeOption ): void {\n\t\tconst editor = this.editor;\n\t\tconst { name, value, icon } = option;\n\n\t\teditor.ui.componentFactory.add( name, locale => {\n\t\t\tconst button = new ButtonView( locale );\n\t\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\t\t\tconst labelText = this._getOptionLabelValue( option, true );\n\n\t\t\tif ( !RESIZE_ICONS[ icon as keyof typeof RESIZE_ICONS ] ) {\n\t\t\t\t/**\n\t\t\t\t * When configuring {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#resizeOptions\n\t\t\t\t * `config.mediaEmbed.resizeOptions`} for standalone buttons, a valid `icon` token must be set for each option.\n\t\t\t\t *\n\t\t\t\t * See all valid options described in the\n\t\t\t\t * {@link module:media-embed/mediaembedconfig~MediaEmbedResizeOption plugin configuration}.\n\t\t\t\t *\n\t\t\t\t * @error mediaembedresizebuttons-missing-icon\n\t\t\t\t * @param {module:media-embed/mediaembedconfig~MediaEmbedResizeOption} option Invalid media embed resize option.\n\t\t\t\t */\n\t\t\t\tthrow new CKEditorError(\n\t\t\t\t\t'mediaembedresizebuttons-missing-icon',\n\t\t\t\t\teditor,\n\t\t\t\t\toption\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbutton.set( {\n\t\t\t\tlabel: labelText,\n\t\t\t\ticon: RESIZE_ICONS[ icon as keyof typeof RESIZE_ICONS ],\n\t\t\t\ttooltip: labelText,\n\t\t\t\tisToggleable: true\n\t\t\t} );\n\n\t\t\tbutton.bind( 'isEnabled' ).to( this );\n\n\t\t\tif ( editor.plugins.has( 'MediaEmbedCustomResizeUI' ) && isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\tconst customResizeUI = editor.plugins.get( 'MediaEmbedCustomResizeUI' );\n\n\t\t\t\tthis.listenTo( button, 'execute', () => {\n\t\t\t\t\tcustomResizeUI._showForm( this._resizeUnit );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tconst optionValueWithUnit = value ? value + this._resizeUnit : null;\n\n\t\t\t\tbutton.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnButtonCallback( optionValueWithUnit )\n\t\t\t\t);\n\n\t\t\t\tthis.listenTo( button, 'execute', () => {\n\t\t\t\t\teditor.execute( 'resizeMediaEmbed', { width: optionValueWithUnit } );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn button;\n\t\t} );\n\t}\n\n\t/**\n\t * Creates the dropdown component containing all resize options.\n\t */\n\tprivate _registerMediaEmbedResizeDropdown( options: Array ): void {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\tconst originalSizeOption = options.find( option => !option.value )!;\n\n\t\tconst componentCreator = ( locale: Locale ) => {\n\t\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\t\t\tconst dropdownView = createDropdown( locale, DropdownButtonView );\n\t\t\tconst dropdownButton: typeof dropdownView.buttonView & { commandValue?: string | null } = dropdownView.buttonView;\n\t\t\tconst accessibleLabel = t( 'Resize media' );\n\n\t\t\tdropdownButton.set( {\n\t\t\t\ttooltip: accessibleLabel,\n\t\t\t\tcommandValue: originalSizeOption ? originalSizeOption.value : null,\n\t\t\t\ticon: RESIZE_ICONS.medium,\n\t\t\t\tisToggleable: true,\n\t\t\t\tlabel: originalSizeOption ? this._getOptionLabelValue( originalSizeOption ) : '',\n\t\t\t\twithText: true,\n\t\t\t\tclass: 'ck-resize-media-embed-button',\n\t\t\t\tariaLabel: accessibleLabel,\n\t\t\t\tariaLabelledBy: undefined\n\t\t\t} );\n\n\t\t\tdropdownButton.bind( 'label' ).to( command, 'value', commandValue => {\n\t\t\t\tif ( commandValue ) {\n\t\t\t\t\treturn commandValue;\n\t\t\t\t}\n\n\t\t\t\treturn originalSizeOption ? this._getOptionLabelValue( originalSizeOption ) : '';\n\t\t\t} );\n\t\t\tdropdownView.bind( 'isEnabled' ).to( this );\n\n\t\t\taddListToDropdown( dropdownView, () => this._getResizeDropdownListItemDefinitions( options, command ), {\n\t\t\t\tariaLabel: t( 'Media resize list' ),\n\t\t\t\trole: 'menu'\n\t\t\t} );\n\n\t\t\tthis.listenTo( dropdownView, 'execute', evt => {\n\t\t\t\tif ( 'onClick' in evt.source ) {\n\t\t\t\t\t( evt.source as any ).onClick();\n\t\t\t\t} else {\n\t\t\t\t\teditor.execute( ( evt.source as any ).commandName, { width: ( evt.source as any ).commandValue } );\n\t\t\t\t\teditor.editing.view.focus();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn dropdownView;\n\t\t};\n\n\t\teditor.ui.componentFactory.add( 'resizeMediaEmbed', componentCreator );\n\t}\n\n\t/**\n\t * Returns a label for the given resize option.\n\t */\n\tprivate _getOptionLabelValue( option: MediaEmbedResizeOption, forTooltip: boolean = false ): string {\n\t\tconst t = this.editor.t;\n\n\t\tif ( option.label ) {\n\t\t\treturn option.label;\n\t\t}\n\n\t\tconst isCustom = isCustomMediaEmbedResizeOption( option );\n\n\t\tif ( forTooltip ) {\n\t\t\tif ( isCustom ) {\n\t\t\t\treturn t( 'Custom media size' );\n\t\t\t}\n\n\t\t\treturn option.value ?\n\t\t\t\tt( 'Resize media to %0', option.value + this._resizeUnit ) :\n\t\t\t\tt( 'Resize media to the original size' );\n\t\t}\n\n\t\tif ( isCustom ) {\n\t\t\treturn t( 'Custom' );\n\t\t}\n\n\t\treturn option.value ?\n\t\t\toption.value + this._resizeUnit :\n\t\t\tt( 'Original' );\n\t}\n\n\t/**\n\t * Returns list item definitions for the resize dropdown.\n\t */\n\tprivate _getResizeDropdownListItemDefinitions(\n\t\toptions: Array,\n\t\tcommand: ResizeMediaEmbedCommand\n\t): Collection {\n\t\tconst { editor } = this;\n\t\tconst itemDefinitions = new Collection();\n\n\t\tconst optionsWithSerializedValues = options.map( option => {\n\t\t\tif ( isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\treturn {\n\t\t\t\t\t...option,\n\t\t\t\t\tvalueWithUnits: 'custom'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( !option.value ) {\n\t\t\t\treturn {\n\t\t\t\t\t...option,\n\t\t\t\t\tvalueWithUnits: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tvalueWithUnits: `${ option.value }${ this._resizeUnit }`\n\t\t\t};\n\t\t} );\n\n\t\tfor ( const option of optionsWithSerializedValues ) {\n\t\t\tlet definition: ListDropdownItemDefinition | null = null;\n\n\t\t\tif ( editor.plugins.has( 'MediaEmbedCustomResizeUI' ) && isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\tconst customResizeUI = editor.plugins.get( 'MediaEmbedCustomResizeUI' );\n\n\t\t\t\tdefinition = {\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tmodel: new UIModel( {\n\t\t\t\t\t\tlabel: this._getOptionLabelValue( option ),\n\t\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t\t\twithText: true,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tcustomResizeUI._showForm( this._resizeUnit );\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t};\n\n\t\t\t\tconst allDropdownValues = Object.values( optionsWithSerializedValues ).map( option => option.valueWithUnits );\n\n\t\t\t\tdefinition.model.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnCustomButtonCallback( allDropdownValues )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdefinition = {\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tmodel: new UIModel( {\n\t\t\t\t\t\tcommandName: 'resizeMediaEmbed',\n\t\t\t\t\t\tcommandValue: option.valueWithUnits,\n\t\t\t\t\t\tlabel: this._getOptionLabelValue( option ),\n\t\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t\t\twithText: true,\n\t\t\t\t\t\ticon: null\n\t\t\t\t\t} )\n\t\t\t\t};\n\n\t\t\t\tdefinition.model.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnButtonCallback( option.valueWithUnits )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdefinition.model.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\t\t\titemDefinitions.add( definition );\n\t\t}\n\n\t\treturn itemDefinitions;\n\t}\n}\n\nfunction isCustomMediaEmbedResizeOption( option: MediaEmbedResizeOption ) {\n\treturn option.value === 'custom';\n}\n\nfunction getIsOnButtonCallback( value: string | null ) {\n\treturn ( commandValue: ResizeMediaEmbedCommand['value'], isEnabled: boolean ): boolean => {\n\t\tif ( commandValue === undefined || !isEnabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn commandValue === value;\n\t};\n}\n\nfunction getIsOnCustomButtonCallback( allDropdownValues: Array ) {\n\treturn ( commandValue: ResizeMediaEmbedCommand['value'], isEnabled: boolean ): boolean => !allDropdownValues.some(\n\t\tdropdownValue => getIsOnButtonCallback( dropdownValue )( commandValue, isEnabled )\n\t);\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembededitornodes\n */\n\nimport type { ViewElement, ModelElement } from '@ckeditor/ckeditor5-engine';\nimport type { Editor } from '@ckeditor/ckeditor5-core';\n\nimport { getSelectedMediaModelWidget } from '../../utils.js';\n\n/**\n * Finds model, view and DOM element for selected media embed element.\n * Returns `null` if there is no media embed selected.\n *\n * @param editor Editor instance.\n * @internal\n */\nexport function getSelectedMediaEmbedEditorNodes( editor: Editor ): MediaEmbedEditorNodes | null {\n\tconst { editing } = editor;\n\n\tconst mediaModelElement = getSelectedMediaModelWidget( editor.model.document.selection );\n\n\tif ( !mediaModelElement ) {\n\t\treturn null;\n\t}\n\n\tconst mediaViewElement = editing.mapper.toViewElement( mediaModelElement )!;\n\tconst mediaDOMElement = editing.view.domConverter.mapViewToDom( mediaViewElement )!;\n\n\treturn {\n\t\tmodel: mediaModelElement,\n\t\tview: mediaViewElement,\n\t\tdom: mediaDOMElement\n\t};\n}\n\ntype MediaEmbedEditorNodes = {\n\tmodel: ModelElement;\n\tview: ViewElement;\n\tdom: HTMLElement;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembedwidthinunits\n */\n\nimport { Rect, _tryCastDimensionsToUnit, _tryParseDimensionWithUnit, type _DimensionWithUnit } from '@ckeditor/ckeditor5-utils';\nimport { calculateResizeHostAncestorWidth } from '@ckeditor/ckeditor5-widget';\nimport type { Editor } from '@ckeditor/ckeditor5-core';\n\nimport { getSelectedMediaEmbedEditorNodes } from './getselectedmediaembededitornodes.js';\n\n/**\n * Returns media embed width in specified units after resize.\n *\n * \t* If no media embed is selected or command is disabled, `null` will be returned.\n *\t* If `targetUnit` percentage is passed then it will return width percentage relative to its ancestor.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Parsed media embed width after resize (with unit).\n * @internal\n */\nexport function getSelectedMediaEmbedWidthInUnits( editor: Editor, targetUnit: string ): _DimensionWithUnit | null {\n\tconst mediaNodes = getSelectedMediaEmbedEditorNodes( editor );\n\n\tif ( !mediaNodes ) {\n\t\treturn null;\n\t}\n\n\tconst parsedResizedWidth = _tryParseDimensionWithUnit(\n\t\tmediaNodes.model.getAttribute( 'resizedWidth' ) as string || null\n\t);\n\n\tif ( !parsedResizedWidth ) {\n\t\treturn null;\n\t}\n\n\tif ( parsedResizedWidth.unit === targetUnit ) {\n\t\treturn parsedResizedWidth;\n\t}\n\n\tconst mediaParentWidthPx = calculateResizeHostAncestorWidth( mediaNodes.dom );\n\tconst mediaHolderDimension = {\n\t\tunit: 'px',\n\t\tvalue: new Rect( mediaNodes.dom ).width\n\t};\n\n\treturn _tryCastDimensionsToUnit( mediaParentWidthPx, mediaHolderDimension, targetUnit );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembedpossibleresizerange\n */\n\nimport type { Editor } from '@ckeditor/ckeditor5-core';\nimport { calculateResizeHostAncestorWidth } from '@ckeditor/ckeditor5-widget';\nimport { _tryCastDimensionsToUnit, _tryParseDimensionWithUnit } from '@ckeditor/ckeditor5-utils';\n\nimport { getSelectedMediaEmbedEditorNodes } from './getselectedmediaembededitornodes.js';\n\n/**\n * Returns the min and max resize values for the selected media embed in the specified unit.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Possible resize range in numeric form.\n * @internal\n */\nexport function getSelectedMediaEmbedPossibleResizeRange( editor: Editor, targetUnit: string ): PossibleResizeMediaEmbedRange | null {\n\tconst mediaNodes = getSelectedMediaEmbedEditorNodes( editor );\n\n\tif ( !mediaNodes ) {\n\t\treturn null;\n\t}\n\n\tconst mediaParentWidthPx = calculateResizeHostAncestorWidth( mediaNodes.dom );\n\tconst minimumMediaWidth = _tryParseDimensionWithUnit( window.getComputedStyle( mediaNodes.dom ).minWidth ) || {\n\t\tvalue: 1,\n\t\tunit: 'px'\n\t};\n\n\tconst lower = Math.max( 0.1, _tryCastDimensionsToUnit( mediaParentWidthPx, minimumMediaWidth, targetUnit ).value );\n\tconst upper = targetUnit === 'px' ? mediaParentWidthPx : 100;\n\n\treturn {\n\t\tunit: targetUnit,\n\t\tlower,\n\t\tupper\n\t};\n}\n\n/**\n * @internal\n */\nexport type PossibleResizeMediaEmbedRange = {\n\tunit: string;\n\tlower: number;\n\tupper: number;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/ui/mediaembedcustomresizeformview\n */\n\nimport {\n\tButtonView,\n\tFocusCycler,\n\tFormHeaderView,\n\tFormRowView,\n\tLabeledFieldView,\n\tView,\n\tViewCollection,\n\tcreateLabeledInputNumber,\n\tsubmitHandler,\n\ttype FocusableView,\n\ttype InputNumberView\n} from '@ckeditor/ckeditor5-ui';\n\nimport { FocusTracker, KeystrokeHandler, type Locale } from '@ckeditor/ckeditor5-utils';\nimport { IconPreviousArrow } from '@ckeditor/ckeditor5-icons';\n\nimport '../../../theme/mediaembedcustomresizeform.css';\n\n/**\n * The MediaEmbedCustomResizeFormView class.\n *\n * @internal\n */\nexport class MediaEmbedCustomResizeFormView extends View {\n\t/**\n\t * Tracks information about the DOM focus in the form.\n\t */\n\tpublic readonly focusTracker: FocusTracker;\n\n\t/**\n\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t */\n\tpublic readonly keystrokes: KeystrokeHandler;\n\n\t/**\n\t * Resize unit shortcut.\n\t */\n\tpublic readonly unit: string;\n\n\t/**\n\t * The Back button view displayed in the header.\n\t */\n\tpublic backButtonView: ButtonView;\n\n\t/**\n\t * A button used to submit the form.\n\t */\n\tpublic saveButtonView: ButtonView;\n\n\t/**\n\t * An input with a label.\n\t */\n\tpublic labeledInput: LabeledFieldView;\n\n\t/**\n\t * A collection of child views.\n\t */\n\tpublic readonly children: ViewCollection;\n\n\t/**\n\t * A collection of views which can be focused in the form.\n\t */\n\tprotected readonly _focusables: ViewCollection;\n\n\t/**\n\t * Helps cycling over {@link #_focusables} in the form.\n\t */\n\tprotected readonly _focusCycler: FocusCycler;\n\n\t/**\n\t * An array of form validators used by {@link #isValid}.\n\t */\n\tprivate readonly _validators: Array;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( locale: Locale, unit: string, validators: Array ) {\n\t\tsuper( locale );\n\n\t\tthis.focusTracker = new FocusTracker();\n\t\tthis.keystrokes = new KeystrokeHandler();\n\t\tthis.unit = unit;\n\n\t\tthis.backButtonView = this._createBackButton();\n\t\tthis.saveButtonView = this._createSaveButton();\n\t\tthis.labeledInput = this._createLabeledInputView();\n\n\t\tthis.children = this.createCollection( [ this._createHeaderView() ] );\n\t\tthis.children.add( new FormRowView( locale, {\n\t\t\tchildren: [\n\t\t\t\tthis.labeledInput,\n\t\t\t\tthis.saveButtonView\n\t\t\t],\n\t\t\tclass: [\n\t\t\t\t'ck-form__row_with-submit',\n\t\t\t\t'ck-form__row_large-top-padding'\n\t\t\t]\n\t\t} ) );\n\n\t\tthis._focusables = new ViewCollection();\n\t\tthis._validators = validators;\n\n\t\tthis.keystrokes.set( 'Esc', ( data, cancel ) => {\n\t\t\tthis.fire( 'cancel' );\n\t\t\tcancel();\n\t\t} );\n\n\t\tthis._focusCycler = new FocusCycler( {\n\t\t\tfocusables: this._focusables,\n\t\t\tfocusTracker: this.focusTracker,\n\t\t\tkeystrokeHandler: this.keystrokes,\n\t\t\tactions: {\n\t\t\t\tfocusPrevious: 'shift + tab',\n\t\t\t\tfocusNext: 'tab'\n\t\t\t}\n\t\t} );\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'form',\n\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-form',\n\t\t\t\t\t'ck-media-embed-custom-resize-form',\n\t\t\t\t\t'ck-responsive-form'\n\t\t\t\t],\n\n\t\t\t\t// https://github.com/ckeditor/ckeditor5-image/issues/40\n\t\t\t\ttabindex: '-1'\n\t\t\t},\n\n\t\t\tchildren: this.children\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override render(): void {\n\t\tsuper.render();\n\n\t\tsubmitHandler( {\n\t\t\tview: this\n\t\t} );\n\n\t\tconst childViews = [\n\t\t\tthis.backButtonView,\n\t\t\tthis.labeledInput,\n\t\t\tthis.saveButtonView\n\t\t];\n\n\t\tchildViews.forEach( v => {\n\t\t\tthis._focusables.add( v );\n\t\t\tthis.focusTracker.add( v.element! );\n\t\t} );\n\n\t\tthis.keystrokes.listenTo( this.element! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tthis.focusTracker.destroy();\n\t\tthis.keystrokes.destroy();\n\t}\n\n\tprivate _createBackButton(): ButtonView {\n\t\tconst t = this.locale!.t;\n\t\tconst backButton = new ButtonView( this.locale );\n\n\t\tbackButton.set( {\n\t\t\tclass: 'ck-button-back',\n\t\t\tlabel: t( 'Back' ),\n\t\t\ticon: IconPreviousArrow,\n\t\t\ttooltip: true\n\t\t} );\n\n\t\tbackButton.delegate( 'execute' ).to( this, 'cancel' );\n\n\t\treturn backButton;\n\t}\n\n\tprivate _createSaveButton(): ButtonView {\n\t\tconst t = this.locale!.t;\n\t\tconst saveButton = new ButtonView( this.locale );\n\n\t\tsaveButton.set( {\n\t\t\tlabel: t( 'Save' ),\n\t\t\twithText: true,\n\t\t\ttype: 'submit',\n\t\t\tclass: 'ck-button-action ck-button-bold'\n\t\t} );\n\n\t\treturn saveButton;\n\t}\n\n\tprivate _createHeaderView(): FormHeaderView {\n\t\tconst t = this.locale!.t;\n\n\t\tconst header = new FormHeaderView( this.locale, {\n\t\t\tlabel: t( 'Media Resize' )\n\t\t} );\n\n\t\theader.children.add( this.backButtonView, 0 );\n\n\t\treturn header;\n\t}\n\n\tprivate _createLabeledInputView(): LabeledFieldView {\n\t\tconst t = this.locale!.t;\n\t\tconst labeledInput = new LabeledFieldView( this.locale, createLabeledInputNumber );\n\n\t\tlabeledInput.label = t( 'Resize media (in %0)', this.unit );\n\t\tlabeledInput.class = 'ck-labeled-field-view_full-width';\n\t\tlabeledInput.fieldView.set( {\n\t\t\tmin: 0.1,\n\t\t\tstep: 0.1\n\t\t} );\n\n\t\treturn labeledInput;\n\t}\n\n\t/**\n\t * Validates the form and returns `false` when some fields are invalid.\n\t */\n\tpublic isValid(): boolean {\n\t\tthis.resetFormStatus();\n\n\t\tfor ( const validator of this._validators ) {\n\t\t\tconst errorText = validator( this );\n\n\t\t\tif ( errorText ) {\n\t\t\t\tthis.labeledInput.errorText = errorText;\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Cleans up error and information text of {@link #labeledInput}.\n\t */\n\tpublic resetFormStatus(): void {\n\t\tthis.labeledInput.errorText = null;\n\t}\n\n\t/**\n\t * The native DOM `value` of the input element of {@link #labeledInput}.\n\t */\n\tpublic get rawSize(): string | null {\n\t\tconst { element } = this.labeledInput.fieldView;\n\n\t\tif ( !element ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn element.value;\n\t}\n\n\t/**\n\t * Get numeric value of size. Returns `null` if value is not a number.\n\t */\n\tpublic get parsedSize(): number | null {\n\t\tconst { rawSize } = this;\n\n\t\tif ( rawSize === null ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parsed = Number.parseFloat( rawSize );\n\n\t\tif ( Number.isNaN( parsed ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parsed;\n\t}\n\n\t/**\n\t * Returns serialized media embed input size with unit.\n\t * Returns `null` if value is not a number.\n\t */\n\tpublic get sizeWithUnits(): string | null {\n\t\tconst { parsedSize, unit } = this;\n\n\t\tif ( parsedSize === null ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn `${ parsedSize }${ unit }`;\n\t}\n}\n\n/**\n * Callback used by {@link ~MediaEmbedCustomResizeFormView} to check if passed form value is valid.\n *\n * @internal\n */\nexport type MediaEmbedCustomResizeFormValidatorCallback = ( form: MediaEmbedCustomResizeFormView ) => string | undefined;\n\n/**\n * Fired when the form view is submitted.\n *\n * @eventName ~MediaEmbedCustomResizeFormView#submit\n */\nexport type MediaEmbedCustomResizeFormViewSubmitEvent = {\n\tname: 'submit';\n\targs: [];\n};\n\n/**\n * Fired when the form view is canceled.\n *\n * @eventName ~MediaEmbedCustomResizeFormView#cancel\n */\nexport type MediaEmbedCustomResizeFormViewCancelEvent = {\n\tname: 'cancel';\n\targs: [];\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedcustomresizeui\n */\n\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport {\n\tContextualBalloon,\n\tBalloonPanelView,\n\tclickOutsideHandler,\n\tCssTransitionDisablerMixin,\n\ttype ViewWithCssTransitionDisabler\n} from '@ckeditor/ckeditor5-ui';\nimport type { DomOptimalPositionOptions } from '@ckeditor/ckeditor5-utils';\n\nimport { getSelectedMediaViewWidget } from '../utils.js';\nimport { getSelectedMediaEmbedWidthInUnits } from './utils/getselectedmediaembedwidthinunits.js';\nimport { getSelectedMediaEmbedPossibleResizeRange } from './utils/getselectedmediaembedpossibleresizerange.js';\n\nimport {\n\tMediaEmbedCustomResizeFormView,\n\ttype MediaEmbedCustomResizeFormValidatorCallback,\n\ttype MediaEmbedCustomResizeFormViewCancelEvent,\n\ttype MediaEmbedCustomResizeFormViewSubmitEvent\n} from './ui/mediaembedcustomresizeformview.js';\n\n/**\n * The custom resize media embed UI plugin.\n *\n * The plugin uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon}.\n */\nexport class MediaEmbedCustomResizeUI extends Plugin {\n\t/**\n\t * The contextual balloon plugin instance.\n\t */\n\tprivate _balloon?: ContextualBalloon;\n\n\t/**\n\t * A form used to set the custom resize width.\n\t */\n\tprivate _form?: MediaEmbedCustomResizeFormView & ViewWithCssTransitionDisabler;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ContextualBalloon ]> {\n\t\treturn [ ContextualBalloon ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedCustomResizeUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tif ( this._form ) {\n\t\t\tthis._form.destroy();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the {@link module:media-embed/mediaembedresize/ui/mediaembedcustomresizeformview~MediaEmbedCustomResizeFormView} form.\n\t */\n\tprivate _createForm( unit: string ): void {\n\t\tconst editor = this.editor;\n\n\t\tthis._balloon = this.editor.plugins.get( 'ContextualBalloon' );\n\n\t\tconst FormViewClass = CssTransitionDisablerMixin( MediaEmbedCustomResizeFormView );\n\n\t\tthis._form = new FormViewClass( editor.locale, unit, getFormValidators( editor ) );\n\n\t\tthis._form.render();\n\n\t\tthis.listenTo( this._form, 'submit', () => {\n\t\t\tif ( this._form!.isValid() ) {\n\t\t\t\teditor.execute( 'resizeMediaEmbed', {\n\t\t\t\t\twidth: this._form!.sizeWithUnits\n\t\t\t\t} );\n\n\t\t\t\tthis._hideForm( true );\n\t\t\t}\n\t\t} );\n\n\t\tthis.listenTo( this._form.labeledInput, 'change:errorText', () => {\n\t\t\teditor.ui.update();\n\t\t} );\n\n\t\tthis.listenTo( this._form, 'cancel', () => {\n\t\t\tthis._hideForm( true );\n\t\t} );\n\n\t\tclickOutsideHandler( {\n\t\t\temitter: this._form,\n\t\t\tactivator: () => this._isVisible,\n\t\t\tcontextElements: () => [ this._balloon!.view.element! ],\n\t\t\tcallback: () => this._hideForm()\n\t\t} );\n\t}\n\n\t/**\n\t * Shows the {@link #_form} in the {@link #_balloon}.\n\t *\n\t * @internal\n\t */\n\tpublic _showForm( unit: string ): void {\n\t\tif ( this._isVisible ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this._form ) {\n\t\t\tthis._createForm( unit );\n\t\t}\n\n\t\tconst editor = this.editor;\n\t\tconst labeledInput = this._form!.labeledInput;\n\n\t\tthis._form!.disableCssTransitions();\n\t\tthis._form!.resetFormStatus();\n\n\t\t/* v8 ignore else -- @preserve */\n\t\tif ( !this._isInBalloon ) {\n\t\t\tthis._balloon!.add( {\n\t\t\t\tview: this._form!,\n\t\t\t\tposition: getBalloonPositionData( editor )\n\t\t\t} );\n\t\t}\n\n\t\tconst currentParsedWidth = getSelectedMediaEmbedWidthInUnits( editor, unit );\n\t\tconst initialInputValue = currentParsedWidth ? currentParsedWidth.value.toFixed( 1 ) : '';\n\t\tconst possibleRange = getSelectedMediaEmbedPossibleResizeRange( editor, unit );\n\n\t\tlabeledInput.fieldView.value = labeledInput.fieldView.element!.value = initialInputValue;\n\n\t\tif ( possibleRange ) {\n\t\t\tObject.assign( labeledInput.fieldView, {\n\t\t\t\tmin: possibleRange.lower.toFixed( 1 ),\n\t\t\t\tmax: Math.ceil( possibleRange.upper ).toFixed( 1 )\n\t\t\t} );\n\t\t}\n\n\t\tthis._form!.labeledInput.fieldView.select();\n\t\tthis._form!.enableCssTransitions();\n\t}\n\n\t/**\n\t * Removes the {@link #_form} from the {@link #_balloon}.\n\t *\n\t * @param focusEditable Controls whether the editing view is focused afterwards.\n\t */\n\tprivate _hideForm( focusEditable: boolean = false ): void {\n\t\tif ( !this._isInBalloon ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._form!.focusTracker.isFocused ) {\n\t\t\tthis._form!.saveButtonView.focus();\n\t\t}\n\n\t\tthis._balloon!.remove( this._form! );\n\n\t\tif ( focusEditable ) {\n\t\t\tthis.editor.editing.view.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` when the {@link #_form} is the visible view in the {@link #_balloon}.\n\t */\n\tprivate get _isVisible(): boolean {\n\t\treturn !!this._balloon && this._balloon.visibleView === this._form;\n\t}\n\n\t/**\n\t * Returns `true` when the {@link #_form} is in the {@link #_balloon}.\n\t */\n\tprivate get _isInBalloon(): boolean {\n\t\treturn !!this._balloon && this._balloon.hasView( this._form! );\n\t}\n}\n\nfunction getBalloonPositionData( editor: Editor ): Partial {\n\tconst editingView = editor.editing.view;\n\tconst defaultPositions = BalloonPanelView.defaultPositions;\n\n\treturn {\n\t\ttarget: editingView.domConverter.mapViewToDom(\n\t\t\tgetSelectedMediaViewWidget( editingView.document.selection )!\n\t\t) as HTMLElement,\n\t\tpositions: [\n\t\t\tdefaultPositions.northArrowSouth,\n\t\t\tdefaultPositions.northArrowSouthWest,\n\t\t\tdefaultPositions.northArrowSouthEast,\n\t\t\tdefaultPositions.southArrowNorth,\n\t\t\tdefaultPositions.southArrowNorthWest,\n\t\t\tdefaultPositions.southArrowNorthEast,\n\t\t\tdefaultPositions.viewportStickyNorth\n\t\t]\n\t};\n}\n\nfunction getFormValidators( editor: Editor ): Array {\n\tconst t = editor.t;\n\n\treturn [\n\t\tform => {\n\t\t\tif ( form.rawSize!.trim() === '' ) {\n\t\t\t\treturn t( 'The value must not be empty.' );\n\t\t\t}\n\n\t\t\tif ( form.parsedSize === null ) {\n\t\t\t\treturn t( 'The value should be a plain number.' );\n\t\t\t}\n\t\t}\n\t];\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedResizeEditing } from './mediaembedresize/mediaembedresizeediting.js';\nimport { MediaEmbedResizeHandles } from './mediaembedresize/mediaembedresizehandles.js';\nimport { MediaEmbedResizeButtons } from './mediaembedresize/mediaembedresizebuttons.js';\nimport { MediaEmbedCustomResizeUI } from './mediaembedresize/mediaembedcustomresizeui.js';\n\nimport '../theme/mediaembedresize.css';\n\n/**\n * The media embed resize plugin.\n *\n * It adds a possibility to resize each media embed using handles, toolbar buttons,\n * or a balloon-hosted custom-width input.\n */\nexport class MediaEmbedResize extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[\n\t\tMediaEmbedResizeEditing,\n\t\tMediaEmbedResizeHandles,\n\t\tMediaEmbedCustomResizeUI,\n\t\tMediaEmbedResizeButtons\n\t]> {\n\t\treturn [\n\t\t\tMediaEmbedResizeEditing,\n\t\t\tMediaEmbedResizeHandles,\n\t\t\tMediaEmbedCustomResizeUI,\n\t\t\tMediaEmbedResizeButtons\n\t\t];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResize' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstylecommand\n */\n\nimport { Command, type Editor } from '@ckeditor/ckeditor5-core';\nimport { getSelectedMediaModelWidget } from '../utils.js';\nimport type { NormalizedMediaStyleOption } from '../mediaembedconfig.js';\n\n/**\n * The media embed style command. It is used to apply a style option (e.g. an alignment) to a\n * selected media embed.\n *\n * The set of accepted style values comes from the resolved\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * options. Values not in that set are silently rejected by {@link #execute}.\n */\nexport class MediaEmbedStyleCommand extends Command {\n\t/**\n\t * The currently-applied style name. `false` when no style applies — either no media is\n\t * selected, or the selected media has no `mediaStyle` attribute and no style in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n\t * is marked `isDefault: true`.\n\t */\n\tdeclare public value: string | false;\n\n\t/**\n\t * Resolved styles indexed by `name`. Used to look up the `isDefault` flag at execute time\n\t * (any default-marked style clears the attribute) and to validate that a requested style\n\t * is part of the resolved options list.\n\t */\n\tprivate readonly _styles: Map;\n\n\t/**\n\t * The `name` of the first style with `isDefault: true` in the resolved options, or `null`\n\t * when the integrator did not designate a default. Exposed via {@link #value} when the\n\t * selected media has no `mediaStyle` attribute, so the default-state UI button can light up.\n\t * Does not gate the \"clear attribute\" branch in {@link #execute} — that uses the per-style\n\t * `isDefault` flag so multi-default configs behave consistently with the downcast.\n\t */\n\tprivate readonly _defaultStyleName: string | null;\n\n\t/**\n\t * Creates an instance of the media embed style command.\n\t *\n\t * @param editor The editor instance.\n\t * @param styles The resolved list of style options that this command will accept.\n\t */\n\tconstructor( editor: Editor, styles: Array ) {\n\t\tsuper( editor );\n\n\t\tthis._styles = new Map( styles.map( style => [ style.name, style ] ) );\n\n\t\tconst defaultStyle = styles.find( style => style.isDefault );\n\n\t\tthis._defaultStyleName = defaultStyle ? defaultStyle.name : null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override refresh(): void {\n\t\tconst element = getSelectedMediaModelWidget( this.editor.model.document.selection );\n\n\t\tthis.isEnabled = !!element;\n\n\t\tif ( !element ) {\n\t\t\tthis.value = false;\n\t\t} else if ( element.hasAttribute( 'mediaStyle' ) ) {\n\t\t\tconst styleName = element.getAttribute( 'mediaStyle' ) as string;\n\n\t\t\t// A previously-applied style may have been dropped from the resolved options list\n\t\t\t// (e.g. by a config change). Fall back to the effective default so the UI stays\n\t\t\t// consistent with what the downcast actually renders (no class for unknown names).\n\t\t\tthis.value = this._styles.has( styleName ) ? styleName : ( this._defaultStyleName ?? false );\n\t\t} else {\n\t\t\tthis.value = this._defaultStyleName ?? false;\n\t\t}\n\t}\n\n\t/**\n\t * Executes the command and applies the chosen style to the currently selected media embed.\n\t *\n\t * ```ts\n\t * editor.execute( 'mediaStyle', { value: 'alignLeft' } );\n\t * editor.execute( 'mediaStyle', { value: 'alignCenter' } ); // removes the attribute — alignCenter is the built-in default\n\t * editor.execute( 'mediaStyle', { value: null } ); // removes the attribute\n\t * ```\n\t *\n\t * The default style is encoded on the model as the absence of the `mediaStyle` attribute.\n\t * Passing any `isDefault: true` style name (or `null`) therefore clears the attribute. Values\n\t * that are neither falsy, an `isDefault` style, nor present in the resolved options list are\n\t * silently rejected.\n\t *\n\t * @param options\n\t * @param options.value The name of the style to apply, or `null` to clear the alignment.\n\t * @fires execute\n\t */\n\tpublic override execute( options: { value: string | null } ): void {\n\t\tconst model = this.editor.model;\n\t\tconst element = getSelectedMediaModelWidget( model.document.selection )!;\n\t\tconst requestedStyle = options.value;\n\n\t\t// Falsy value or any `isDefault: true` style clears the attribute. Default styles encode\n\t\t// as attribute-absence on the model. The downcast emits no class for them.\n\t\tif ( !requestedStyle || this._styles.get( requestedStyle )?.isDefault ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.removeAttribute( 'mediaStyle', element );\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Reject names that are not part of the resolved options list.\n\t\tif ( !this._styles.has( requestedStyle ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.change( writer => {\n\t\t\twriter.setAttribute( 'mediaStyle', requestedStyle, element );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstyleediting\n */\n\nimport { first } from '@ckeditor/ckeditor5-utils';\nimport type { UpcastElementEvent } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedEditing } from '../mediaembedediting.js';\nimport { MediaEmbedStyleCommand } from './mediaembedstylecommand.js';\nimport type { NormalizedMediaStyleOption } from '../mediaembedconfig.js';\nimport { DEFAULT_OPTIONS } from './constants.js';\nimport { normalizeStyles } from './utils.js';\n\n/**\n * The media embed style engine plugin. It extends the schema with the `mediaStyle` attribute,\n * registers the {@link module:media-embed/mediaembedstyle/mediaembedstylecommand~MediaEmbedStyleCommand} command,\n * and adds the converters that apply alignment CSS classes to the figure.\n */\nexport class MediaEmbedStyleEditing extends Plugin {\n\t/**\n\t * The resolved list of media style options. Built once from\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n\t * during {@link #init} and consumed by both the command and the UI plugin (single source of truth).\n\t *\n\t * @internal\n\t * @readonly\n\t */\n\tpublic normalizedStyles!: Array;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing ]> {\n\t\treturn [ MediaEmbedEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyleEditing' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\n\t\teditor.config.define( 'mediaEmbed.styles', { options: Object.keys( DEFAULT_OPTIONS ) } );\n\n\t\tthis.normalizedStyles = normalizeStyles( editor.config.get( 'mediaEmbed.styles' )! );\n\n\t\tschema.extend( 'media', { allowAttributes: [ 'mediaStyle' ] } );\n\t\tschema.setAttributeProperties( 'mediaStyle', { isFormatting: true } );\n\n\t\teditor.commands.add( 'mediaStyle', new MediaEmbedStyleCommand( editor, this.normalizedStyles ) );\n\n\t\tthis._registerConverters();\n\t}\n\n\t/**\n\t * Registers the downcast and upcast converters for the `mediaStyle` attribute.\n\t */\n\tprivate _registerConverters(): void {\n\t\tconst editor = this.editor;\n\n\t\t// Runtime lookup of style `name` → CSS `className`. Excludes the default style, which is\n\t\t// encoded as the absence of the attribute (no class). Iteration order follows the configured\n\t\t// options order — the upcast relies on this so the last matching class wins on a figure\n\t\t// that has multiple alignment classes.\n\t\tconst styleClassMap = new Map(\n\t\t\tthis.normalizedStyles\n\t\t\t\t.filter( style => !style.isDefault && style.className )\n\t\t\t\t.map( style => [ style.name, style.className! ] )\n\t\t);\n\n\t\t// Downcast: `mediaStyle` → CSS class on the
    . Covers both editing and data pipelines.\n\t\teditor.conversion.for( 'downcast' ).add( dispatcher =>\n\t\t\tdispatcher.on( 'attribute:mediaStyle:media', ( evt, data, conversionApi ) => {\n\t\t\t\tif ( !conversionApi.consumable.consume( data.item, evt.name ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst figure = conversionApi.mapper.toViewElement( data.item )!;\n\t\t\t\tconst viewWriter = conversionApi.writer;\n\t\t\t\tconst oldClass = styleClassMap.get( data.attributeOldValue as string );\n\t\t\t\tconst newClass = styleClassMap.get( data.attributeNewValue as string );\n\n\t\t\t\tif ( oldClass ) {\n\t\t\t\t\tviewWriter.removeClass( oldClass, figure );\n\t\t\t\t}\n\n\t\t\t\tif ( newClass ) {\n\t\t\t\t\tviewWriter.addClass( newClass, figure );\n\t\t\t\t}\n\t\t\t} )\n\t\t);\n\n\t\t// Upcast: alignment class on a media
    → `mediaStyle` attribute. Runs at `low`\n\t\t// priority so the main media upcast creates the `media` model element first.\n\t\teditor.conversion.for( 'upcast' ).add( dispatcher => {\n\t\t\tdispatcher.on( 'element:figure', ( _evt, data, conversionApi ) => {\n\t\t\t\tif ( !data.modelRange ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst modelElement = first( data.modelRange.getItems() );\n\n\t\t\t\tif ( !modelElement || !modelElement.is( 'element', 'media' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Iterate in insertion order — last consumed class wins when multiple\n\t\t\t\t// alignment classes are present on the same figure.\n\t\t\t\tfor ( const [ styleName, className ] of styleClassMap ) {\n\t\t\t\t\tif ( conversionApi.consumable.consume( data.viewItem, { classes: className } ) ) {\n\t\t\t\t\t\tconversionApi.writer.setAttribute( 'mediaStyle', styleName, modelElement );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, { priority: 'low' } );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstyleui\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { ButtonView, createDropdown, addToolbarToDropdown, SplitButtonView } from '@ckeditor/ckeditor5-ui';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\nimport { MediaEmbedStyleEditing } from './mediaembedstyleediting.js';\nimport { type MediaEmbedStyleCommand } from './mediaembedstylecommand.js';\nimport { DEFAULT_DROPDOWN_DEFINITIONS } from './constants.js';\nimport { isMediaStyleDropdown } from './utils.js';\nimport type { MediaStyleDropdownDefinition } from '../mediaembedconfig.js';\n\n/**\n * Definition of a single alignment button registered by `MediaEmbedStyleUI`.\n */\ntype ButtonDefinition = {\n\tname: string;\n\tlabel: string;\n\ticon: string;\n};\n\n/**\n * The media embed style UI plugin.\n *\n * It registers a button for every style in the resolved\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * list, and the default split-button dropdowns (`mediaEmbed:wrapText`, `mediaEmbed:breakText`)\n * — filtered to the styles that survived configuration. The resulting components can be placed\n * in the {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar media embed toolbar}.\n */\nexport class MediaEmbedStyleUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedStyleEditing ]> {\n\t\treturn [ MediaEmbedStyleEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyleUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst titles = this._getLocalizedTitles();\n\n\t\tfor ( const button of this._getButtonDefinitions( titles ) ) {\n\t\t\tthis._createButton( button );\n\t\t}\n\n\t\tfor ( const dropdown of this._getDropdownDefinitions( titles ) ) {\n\t\t\tthis._createDropdown( dropdown );\n\t\t}\n\t}\n\n\t/**\n\t * Returns the alignment button definitions sourced from the resolved options list.\n\t */\n\tprivate _getButtonDefinitions( titles: Record ): Array {\n\t\tconst editing = this.editor.plugins.get( MediaEmbedStyleEditing );\n\n\t\treturn editing.normalizedStyles.map( option => ( {\n\t\t\tname: option.name,\n\t\t\tlabel: titles[ option.title ] || option.title,\n\t\t\ticon: option.icon\n\t\t} ) );\n\t}\n\n\t/**\n\t * Returns the localized titles of the built-in styles and dropdowns.\n\t */\n\tprivate _getLocalizedTitles(): Record {\n\t\tconst t = this.editor.t;\n\n\t\treturn {\n\t\t\t'Left aligned media': t( 'Left aligned media' ),\n\t\t\t'Centered media': t( 'Centered media' ),\n\t\t\t'Right aligned media': t( 'Right aligned media' ),\n\t\t\t'Wrap text': t( 'Wrap text' ),\n\t\t\t'Break text': t( 'Break text' )\n\t\t};\n\t}\n\n\t/**\n\t * Returns the split-button dropdown definitions, filtered to the styles present in the\n\t * resolved options list. Combines the {@link module:media-embed/mediaembedstyle/constants~DEFAULT_DROPDOWN_DEFINITIONS\n\t * built-in dropdowns} with custom dropdowns declared inline in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `config.mediaEmbed.toolbar`}.\n\t *\n\t * A dropdown with fewer than two items is skipped — a single-item dropdown carries no value\n\t * over the flat button. If the configured `defaultItem` was filtered out, the first surviving\n\t * item becomes the default.\n\t *\n\t * When a *custom* dropdown's items reference styles that are not in the resolved options list,\n\t * a console warning is emitted (the integrator's config was not fully honored). Built-in\n\t * dropdowns auto-skip silently — they are added by the plugin, not the integrator.\n\t */\n\tprivate _getDropdownDefinitions( titles: Record ): Array {\n\t\tconst editor = this.editor;\n\t\tconst editing = editor.plugins.get( MediaEmbedStyleEditing );\n\t\tconst availableComponentNames = new Set(\n\t\t\tediting.normalizedStyles.map( ( { name } ) => `mediaEmbed:${ name }` )\n\t\t);\n\n\t\tconst dropdowns: Array = [];\n\n\t\tconst resolveDropdown = ( definition: MediaStyleDropdownDefinition, warnOnFilter: boolean ): void => {\n\t\t\tconst items = definition.items.filter( itemName => availableComponentNames.has( itemName ) );\n\n\t\t\tif ( warnOnFilter && items.length !== definition.items.length ) {\n\t\t\t\twarnInvalidDropdown( { dropdown: definition } );\n\t\t\t}\n\n\t\t\tif ( items.length < 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst defaultItem = availableComponentNames.has( definition.defaultItem ) ?\n\t\t\t\tdefinition.defaultItem :\n\t\t\t\titems[ 0 ];\n\n\t\t\tdropdowns.push( {\n\t\t\t\tname: definition.name,\n\t\t\t\ttitle: titles[ definition.title ] || definition.title,\n\t\t\t\titems,\n\t\t\t\tdefaultItem\n\t\t\t} );\n\t\t};\n\n\t\tfor ( const definition of DEFAULT_DROPDOWN_DEFINITIONS ) {\n\t\t\tresolveDropdown( definition, false );\n\t\t}\n\n\t\tfor ( const definition of this._collectCustomDropdowns() ) {\n\t\t\tresolveDropdown( definition, true );\n\t\t}\n\n\t\treturn dropdowns;\n\t}\n\n\t/**\n\t * Scans `config.mediaEmbed.toolbar` for entries shaped like a dropdown definition\n\t * (objects with both `items` and `defaultItem`) and returns the valid ones. `defaultItem`\n\t * is the discriminator between our split-button dropdowns and generic toolbar groupings\n\t * (which use `items` + `label` and have no `defaultItem`).\n\t *\n\t * Invalid entries (wrong name prefix, `defaultItem` missing from `items`) are warned and\n\t * dropped here. Items that reference filtered-out styles are filtered later by\n\t * {@link #_getDropdownDefinitions}, alongside the same logic that applies to built-in\n\t * dropdowns.\n\t */\n\tprivate _collectCustomDropdowns(): Array {\n\t\tconst toolbarConfig = this.editor.config.get( 'mediaEmbed.toolbar' ) || [];\n\n\t\treturn toolbarConfig.filter( ( item ): item is MediaStyleDropdownDefinition =>\n\t\t\tisMediaStyleDropdown( item ) && isValidCustomDropdown( item )\n\t\t);\n\t}\n\n\t/**\n\t * Registers a single alignment toggle button in the component factory.\n\t */\n\tprivate _createButton( definition: ButtonDefinition ): void {\n\t\tconst editor = this.editor;\n\t\tconst componentName = `mediaEmbed:${ definition.name }`;\n\n\t\teditor.ui.componentFactory.add( componentName, locale => {\n\t\t\tconst command: MediaEmbedStyleCommand = editor.commands.get( 'mediaStyle' )!;\n\t\t\tconst view = new ButtonView( locale );\n\n\t\t\tview.set( {\n\t\t\t\tlabel: definition.label,\n\t\t\t\ticon: definition.icon,\n\t\t\t\ttooltip: true,\n\t\t\t\tisToggleable: true\n\t\t\t} );\n\n\t\t\tview.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\t\t\tview.bind( 'isOn' ).to( command, 'value', value => value === definition.name );\n\n\t\t\tview.on( 'execute', () => {\n\t\t\t\teditor.execute( 'mediaStyle', { value: definition.name } );\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn view;\n\t\t} );\n\t}\n\n\t/**\n\t * Registers a split-button dropdown grouping a set of alignment buttons. The action button\n\t * reflects whichever child option is currently `isOn`, falling back to the dropdown's\n\t * `defaultItem` when nothing is active.\n\t */\n\tprivate _createDropdown( definition: MediaStyleDropdownDefinition ): void {\n\t\tconst editor = this.editor;\n\t\tconst factory = editor.ui.componentFactory;\n\n\t\tfactory.add( definition.name, locale => {\n\t\t\t// Build child buttons via the factory; pick the default by name.\n\t\t\tconst buttonViews = definition.items.map(\n\t\t\t\titemName => factory.create( itemName ) as ButtonView\n\t\t\t);\n\t\t\tconst defaultButton = buttonViews[ definition.items.indexOf( definition.defaultItem ) ];\n\n\t\t\t// Resolve the currently-active child or fall back to the default. Used by the\n\t\t\t// reactive `icon` and `label` bindings on the split button.\n\t\t\tconst activeOrDefault = ( ...areOn: Array ): ButtonView => {\n\t\t\t\tconst index = areOn.findIndex( Boolean );\n\n\t\t\t\treturn index < 0 ? defaultButton : buttonViews[ index ];\n\t\t\t};\n\n\t\t\t// Build the dropdown shell.\n\t\t\tconst dropdownView = createDropdown( locale, SplitButtonView );\n\t\t\tconst splitButtonView = dropdownView.buttonView as SplitButtonView;\n\n\t\t\taddToolbarToDropdown( dropdownView, buttonViews, { enableActiveItemFocusOnDropdownOpen: true } );\n\n\t\t\tsplitButtonView.set( {\n\t\t\t\tlabel: getDropdownButtonTitle( definition.title, defaultButton.label! ),\n\t\t\t\tclass: null,\n\t\t\t\ttooltip: true\n\t\t\t} );\n\n\t\t\tsplitButtonView.arrowView.unbind( 'label' );\n\t\t\tsplitButtonView.arrowView.set( { label: definition.title } );\n\n\t\t\t// Reactive: action button mirrors the active child's icon and label.\n\t\t\tsplitButtonView.bind( 'icon' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => activeOrDefault( ...areOn ).icon\n\t\t\t);\n\n\t\t\tsplitButtonView.bind( 'label' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => getDropdownButtonTitle( definition.title, activeOrDefault( ...areOn ).label! )\n\t\t\t);\n\n\t\t\t// Reactive: split button shows the \"active\" state when any child is on.\n\t\t\tsplitButtonView.bind( 'isOn' ).toMany( buttonViews, 'isOn', ( ...areOn ) => areOn.some( Boolean ) );\n\n\t\t\tsplitButtonView.bind( 'class' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => areOn.some( Boolean ) ? 'ck-splitbutton_flatten' : undefined\n\t\t\t);\n\n\t\t\t// Action click: re-fire the default child when nothing is active; otherwise toggle the dropdown.\n\t\t\tthis.listenTo( splitButtonView, 'execute', () => {\n\t\t\t\tif ( buttonViews.some( ( { isOn } ) => isOn ) ) {\n\t\t\t\t\tdropdownView.isOpen = !dropdownView.isOpen;\n\t\t\t\t} else {\n\t\t\t\t\tdefaultButton.fire( 'execute' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Reactive: dropdown is enabled when any child is enabled.\n\t\t\tdropdownView.bind( 'isEnabled' ).toMany( buttonViews, 'isEnabled',\n\t\t\t\t( ...areEnabled ) => areEnabled.some( Boolean )\n\t\t\t);\n\n\t\t\t// Refocus the editing view so the dropdown action doesn't steal caret position.\n\t\t\tthis.listenTo( dropdownView, 'execute', () => {\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn dropdownView;\n\t\t} );\n\t}\n}\n\n/**\n * Combines the dropdown title and the default action item label for the split-button label.\n */\nfunction getDropdownButtonTitle( dropdownTitle: string, buttonTitle: string ): string {\n\treturn `${ dropdownTitle }: ${ buttonTitle }`;\n}\n\n/**\n * Validates a user-supplied dropdown definition. Emits a console warning under\n * `media-style-configuration-definition-invalid` and returns `false` when any of these rules is\n * broken: `name` must start with `mediaEmbed:`, `title` must be a non-empty string, `items` must\n * be non-empty and every entry must be a `mediaEmbed:`-prefixed string, and `defaultItem` must be\n * one of the `items`.\n *\n * Item-membership against the resolved styles is checked separately, downstream, alongside the\n * same logic that applies to built-in dropdowns.\n */\nfunction isValidCustomDropdown( definition: MediaStyleDropdownDefinition ): boolean {\n\tconst valid =\n\t\tdefinition.name.startsWith( 'mediaEmbed:' ) &&\n\t\ttypeof definition.title === 'string' && definition.title.length > 0 &&\n\t\tdefinition.items.length > 0 &&\n\t\tdefinition.items.every( name => typeof name === 'string' && name.startsWith( 'mediaEmbed:' ) ) &&\n\t\tdefinition.items.includes( definition.defaultItem );\n\n\tif ( !valid ) {\n\t\twarnInvalidDropdown( { dropdown: definition } );\n\t}\n\n\treturn valid;\n}\n\n/**\n * Emits a console warning under `media-style-configuration-definition-invalid` for an invalid\n * or partially-honored dropdown definition. Called from {@link ~isValidCustomDropdown} for\n * structural problems and from {@link MediaEmbedStyleUI#_getDropdownDefinitions} when items\n * reference styles that are not in the resolved options list.\n */\nfunction warnInvalidDropdown( info: object ): void {\n\tlogWarning( 'media-style-configuration-definition-invalid', info );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedStyleEditing } from './mediaembedstyle/mediaembedstyleediting.js';\nimport { MediaEmbedStyleUI } from './mediaembedstyle/mediaembedstyleui.js';\n\nimport '../theme/mediaembedstyle.css';\n\n/**\n * The media embed style plugin.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:media-embed/mediaembedstyle/mediaembedstyleediting~MediaEmbedStyleEditing},\n * * {@link module:media-embed/mediaembedstyle/mediaembedstyleui~MediaEmbedStyleUI}\n *\n * For a detailed overview, check the {@glink features/media-embed/media-embed-styles Media embed styles feature documentation}.\n */\nexport class MediaEmbedStyle extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedStyleEditing, MediaEmbedStyleUI ]> {\n\t\treturn [ MediaEmbedStyleEditing, MediaEmbedStyleUI ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyle' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module minimap/minimapiframeview\n */\n\nimport { IframeView } from '@ckeditor/ckeditor5-ui';\nimport { toUnit, type Locale } from '@ckeditor/ckeditor5-utils';\nimport type { MinimapViewOptions } from './minimapview.js';\n\nconst toPx = /* #__PURE__ */ toUnit( 'px' );\n\n/**\n * The internal ``},{name:`spotify`,url:[/^open\.spotify\.com\/(artist\/\w+)/,/^open\.spotify\.com\/(album\/\w+)/,/^open\.spotify\.com\/(track\/\w+)/],html:e=>{let t=e[1],n=t.startsWith(`track/`);return`
    `}},{name:`youtube`,url:[/^(?:m\.)?youtube\.com\/watch\?v=([\w-]+)(?:&t=(\d+))?/,/^(?:m\.)?youtube\.com\/shorts\/([\w-]+)(?:\?t=(\d+))?/,/^(?:m\.)?youtube\.com\/v\/([\w-]+)(?:\?t=(\d+))?/,/^youtube\.com\/embed\/([\w-]+)(?:\?start=(\d+))?/,/^youtu\.be\/([\w-]+)(?:\?t=(\d+))?/],html:e=>{let t=e[1],n=e[2];return`
    `}},{name:`vimeo`,url:[/^vimeo\.com\/(\d+)/,/^vimeo\.com\/[^/]+\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/album\/[^/]+\/video\/(\d+)/,/^vimeo\.com\/channels\/[^/]+\/(\d+)/,/^vimeo\.com\/groups\/[^/]+\/videos\/(\d+)/,/^vimeo\.com\/ondemand\/[^/]+\/(\d+)/,/^player\.vimeo\.com\/video\/(\d+)/],html:e=>`
    `},{name:`instagram`,url:[/^instagram\.com\/p\/(\w+)/,/^instagram\.com\/reel\/(\w+)/]},{name:`twitter`,url:[/^twitter\.com/,/^x\.com/]},{name:`googleMaps`,url:[/^google\.com\/maps/,/^goo\.gl\/maps/,/^maps\.google\.com/,/^maps\.app\.goo\.gl/]},{name:`flickr`,url:/^flickr\.com/},{name:`facebook`,url:/^facebook\.com/}]}),this.registry=new C2(e.locale,e.config.get(`mediaEmbed`))}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion,i=e.config.get(`mediaEmbed.previewsInData`),a=e.config.get(`mediaEmbed.elementName`),o=this.registry;e.commands.add(`mediaEmbed`,new b2(e)),t.register(`media`,{inheritAllFrom:`$blockObject`,allowAttributes:[`url`]}),r.for(`dataDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>{let n=e.getAttribute(`url`);return _2(t,o,n,{elementName:a,renderMediaPreview:!!n&&i})}}),r.for(`dataDowncast`).add(p2(o,{elementName:a,renderMediaPreview:i})),r.for(`editingDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>m2(_2(t,o,e.getAttribute(`url`),{elementName:a,renderForEditingView:!0}),t,n(`media widget`))}),r.for(`editingDowncast`).add(p2(o,{elementName:a,renderForEditingView:!0})),r.for(`upcast`).elementToElement({view:e=>[`oembed`,a].includes(e.name)&&e.getAttribute(`url`)?{name:!0}:null,model:(e,{writer:t})=>{let n=e.getAttribute(`url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).elementToElement({view:{name:`div`,attributes:{"data-oembed-url":!0}},model:(e,{writer:t})=>{let n=e.getAttribute(`data-oembed-url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).add(e=>{e.on(`element:figure`,(e,t,n)=>{if(!n.consumable.consume(t.viewItem,{name:!0,classes:`media`}))return;let{modelRange:r,modelCursor:i}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=r,t.modelCursor=i,j(r.getItems())||n.consumable.revert(t.viewItem,{name:!0,classes:`media`})})})}};let E2=/^(?:http(s)?:\/\/)?[\w-]+\.[\w-.~:/?#[\]@!$&'()*+,;=%]+$/;var D2=class extends F{static get requires(){return[LO,vT,zk]}static get pluginName(){return`AutoMediaEmbed`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=gf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=gf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedMediaBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(d.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedMediaBetweenPositions(e,t){let n=this.editor,r=n.plugins.get(T2).registry,i=new wl(e,t),a=i.getWalker({ignoreElementEnd:!0}),o=``;for(let e of a)e.item.is(`$textProxy`)&&(o+=e.item.data);if(o=o.trim(),!o.match(E2)){i.detach();return}if(!r.hasMedia(o)){i.detach();return}if(!n.commands.get(`mediaEmbed`).isEnabled){i.detach();return}this._positionToInsert=gf.fromPosition(e),this._timeoutId=d.window.setTimeout(()=>{n.model.change(e=>{this._timeoutId=null,e.remove(i),i.detach();let t=null;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert),y2(n.model,o,t,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(vT).requestUndoOnBackspace()},100)}},O2=class extends P{focusTracker;keystrokes;urlInputView;_validators;_urlInputViewInfoDefault;_urlInputViewInfoTip;constructor(e,t){super(t),this.focusTracker=new M,this.keystrokes=new N,this.set(`mediaURLInputValue`,``),this.urlInputView=this._createUrlInput(),this._validators=e,this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-media-form`,`ck-responsive-form`],tabindex:`-1`},children:[this.urlInputView]})}render(){super.render(),to({view:this}),this.focusTracker.add(this.urlInputView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.urlInputView.focus()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.value=e.trim()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){let e=this.locale.t,t=new tx(this.locale,Zx),n=t.fieldView;return this._urlInputViewInfoDefault=e(`Paste the media URL in the input.`),this._urlInputViewInfoTip=e(`Tip: Paste the URL into the content to embed faster.`),t.label=e(`Media URL`),t.infoText=this._urlInputViewInfoDefault,n.inputMode=`url`,n.on(`input`,()=>{t.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),t}},k2=class extends F{static get requires(){return[T2,tb]}static get pluginName(){return`MediaEmbedUI`}static get isOfficialPlugin(){return!0}_formView;init(){let e=this.editor;e.ui.componentFactory.add(`mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(H);return t.tooltip=!0,t.label=e(`Insert media`),t}),e.ui.componentFactory.add(`menuBar:mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(U);return t.label=e(`Media`),t})}_createDialogButton(e){let t=this.editor,n=new e(t.locale),r=t.commands.get(`mediaEmbed`),i=this.editor.plugins.get(`Dialog`);return n.icon=gv,n.bind(`isEnabled`).to(r,`isEnabled`),n.on(`execute`,()=>{i.id===`mediaEmbed`?i.hide():this._showDialog()}),n}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.commands.get(`mediaEmbed`),r=e.locale.t,i=n.value!==void 0;if(!this._formView){let t=e.plugins.get(T2).registry;this._formView=new($a(O2))(A2(e.t,t),e.locale),this._formView.on(`submit`,()=>this._handleSubmitForm())}t.show({id:`mediaEmbed`,title:r(`Media embed`),content:this._formView,isModal:!0,onShow:()=>{this._formView.url=n.value||``,this._formView.resetFormStatus(),this._formView.urlInputView.fieldView.select()},actionButtons:[{label:r(`Cancel`),withText:!0,onExecute:()=>t.hide()},{label:r(i?`Save`:`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSubmitForm()}]})}_handleSubmitForm(){let e=this.editor,t=e.plugins.get(`Dialog`);this._formView.isValid()&&(e.execute(`mediaEmbed`,this._formView.url),t.hide(),e.editing.view.focus())}};function A2(e,t){return[t=>{if(!t.url.length)return e(`The URL must not be empty.`)},n=>{if(!t.hasMedia(n.url))return e(`This media URL is not supported.`)}]}var j2=class extends F{static get requires(){return[T2,k2,D2,wD]}static get pluginName(){return`MediaEmbed`}static get isOfficialPlugin(){return!0}};let M2={alignLeft:{name:`alignLeft`,title:`Left aligned media`,icon:wv,className:`media-style-align-left`},alignBlockLeft:{name:`alignBlockLeft`,title:`Left aligned media`,icon:Dv,className:`media-style-block-align-left`},alignCenter:{name:`alignCenter`,title:`Centered media`,icon:Sv,isDefault:!0},alignBlockRight:{name:`alignBlockRight`,title:`Right aligned media`,icon:Ov,className:`media-style-block-align-right`},alignRight:{name:`alignRight`,title:`Right aligned media`,icon:Tv,className:`media-style-align-right`}},N2={inlineLeft:wv,left:Dv,center:Sv,right:Ov,inlineRight:Tv},P2=[{name:`mediaEmbed:wrapText`,title:`Wrap text`,items:[`mediaEmbed:alignLeft`,`mediaEmbed:alignRight`],defaultItem:`mediaEmbed:alignLeft`},{name:`mediaEmbed:breakText`,title:`Break text`,items:[`mediaEmbed:alignBlockLeft`,`mediaEmbed:alignCenter`,`mediaEmbed:alignBlockRight`],defaultItem:`mediaEmbed:alignCenter`}];function F2(e){return(e.options||[]).map(e=>I2(e)).filter(e=>L2(e))}function I2(e){let t=typeof e==`string`?{name:e}:e,n={...M2[t.name],...t};return typeof n.icon==`string`&&N2[n.icon]&&(n.icon=N2[n.icon]),n}function L2(e){return!e.name||!e.title||!e.icon||!e.isDefault&&!e.className?(R2({style:e}),!1):!0}function R2(e){T(`media-style-configuration-definition-invalid`,e)}function z2(e){return typeof e==`object`&&!!e&&typeof e.defaultItem==`string`}var B2=class extends F{static get requires(){return[MD]}static get pluginName(){return`MediaEmbedToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t;e.plugins.get(MD).register(`mediaEmbed`,{ariaLabel:t(`Media toolbar`),items:V2(e.ui.componentFactory,e.config.get(`mediaEmbed.toolbar`)||[]),getRelatedElement:h2})}};function V2(e,t){return t.map(e=>z2(e)?e.name:e).filter(t=>typeof t!=`string`||!t.startsWith(`mediaEmbed:`)||e.has(t))}var H2=class extends I{refresh(){let e=v2(this.editor.model.document.selection);this.isEnabled=!!e,!e||!e.hasAttribute(`resizedWidth`)?this.value=null:this.value=e.getAttribute(`resizedWidth`)}execute(e){let t=this.editor.model,n=v2(t.document.selection);n&&t.change(t=>{t.setAttribute(`resizedWidth`,e.width,n)})}};let U2=`media_resized`;var W2=class extends F{static get requires(){return[T2]}static get pluginName(){return`MediaEmbedResizeEditing`}static get licenseFeatureCode(){return`MER`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`mediaEmbed`,{resizeUnit:`%`,resizeOptions:[{name:`resizeMediaEmbed:original`,value:null,icon:`original`},{name:`resizeMediaEmbed:custom`,value:`custom`,icon:`custom`},{name:`resizeMediaEmbed:25`,value:`25`,icon:`small`},{name:`resizeMediaEmbed:50`,value:`50`,icon:`medium`},{name:`resizeMediaEmbed:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor;e.commands.add(`resizeMediaEmbed`,new H2(e)),this._registerConverters()}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;e.extend(`media`,{allowAttributes:[`resizedWidth`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0})}_registerConverters(){let e=this.editor;e.conversion.for(`downcast`).add(e=>e.on(`attribute:resizedWidth:media`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(U2,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(U2,i))})),e.conversion.for(`upcast`).attributeToAttribute({view:{name:`figure`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>e.hasClass(`media`)?e.getStyle(`width`):null}}),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[U2]})})})}},G2=class extends F{static get requires(){return[JD]}static get pluginName(){return`MediaEmbedResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.model,n=e.plugins.get(JD);this.listenTo(t.document,`change:data`,()=>{for(let r of t.document.differ.getChanges()){if(r.type!==`insert`||r.name===`$text`)continue;let i=t.createRange(r.position,r.position.getShiftedBy(r.length));for(let t of i.getItems()){if(!t.is(`element`,`media`))continue;let r=e.editing.mapper.toViewElement(t);r&&(n.getResizerByViewElement(r)||this._attachResizer(t,r))}}},{priority:`low`})}_attachResizer(e,t){let n=this.editor,r=n.editing.view,i=n.plugins.get(JD).attachTo({unit:n.config.get(`mediaEmbed.resizeUnit`),modelElement:e,viewElement:t,editor:n,getHandleHost:e=>e.querySelector(`.ck-media__wrapper`),getResizeHost:e=>e,onCommit:e=>{r.change(e=>e.removeClass(U2,t)),n.execute(`resizeMediaEmbed`,{width:e})}});i.bind(`isEnabled`).to(this),i.on(`updateSize`,()=>{t.hasClass(`media_resized`)||r.change(e=>e.addClass(U2,t))}),r.once(`render`,()=>i.redraw())}};let K2={small:Nv,medium:Mv,large:jv,custom:kv,original:Av};var q2=class extends F{static get requires(){return[W2]}static get pluginName(){return`MediaEmbedResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`mediaEmbed.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`mediaEmbed.resizeOptions`),n=e.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerMediaEmbedResizeButton(e);this._registerMediaEmbedResizeDropdown(t)}_registerMediaEmbedResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeMediaEmbed`),s=this._getOptionLabelValue(e,!0);if(!K2[i])throw new w(`mediaembedresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:K2[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`MediaEmbedCustomResizeUI`)&&J2(e)){let e=t.plugins.get(`MediaEmbedCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,Y2(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeMediaEmbed`,{width:e})})}return a})}_registerMediaEmbedResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value);t.ui.componentFactory.add(`resizeMediaEmbed`,i=>{let a=t.commands.get(`resizeMediaEmbed`),o=Ix(i,dx),s=o.buttonView,c=n(`Resize media`);return s.set({tooltip:c,commandValue:r?r.value:null,icon:K2.medium,isToggleable:!0,label:r?this._getOptionLabelValue(r):``,withText:!0,class:`ck-resize-media-embed-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e||(r?this._getOptionLabelValue(r):``)),o.bind(`isEnabled`).to(this),Bx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Media resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o})}_getOptionLabelValue(e,t=!1){let n=this.editor.t;if(e.label)return e.label;let r=J2(e);return t?r?n(`Custom media size`):e.value?n(`Resize media to %0`,e.value+this._resizeUnit):n(`Resize media to the original size`):r?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Ri,i=e.map(e=>J2(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`MediaEmbedCustomResizeUI`)&&J2(e)){let r=n.plugins.get(`MediaEmbedCustomResizeUI`);a={type:`button`,model:new VC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,X2(o))}else a={type:`button`,model:new VC({commandName:`resizeMediaEmbed`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,Y2(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function J2(e){return e.value===`custom`}function Y2(e){return(t,n)=>t===void 0||!n?!1:t===e}function X2(e){return(t,n)=>!e.some(e=>Y2(e)(t,n))}function Z2(e){let{editing:t}=e,n=v2(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function Q2(e,t){let n=Z2(e);if(!n)return null;let r=ma(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:ha(rD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}function $2(e,t){let n=Z2(e);if(!n)return null;let r=rD(n.dom),i=ma(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,ha(r,i,t).value),upper:t===`px`?r:100}}var e4=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new FC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new ga,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Gy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-media-embed-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),to({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:qv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new Uy(this.locale,{label:e(`Media Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new tx(this.locale,Qx);return t.label=e(`Resize media (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({min:.1,step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}},t4=class extends F{_balloon;_form;static get requires(){return[UC]}static get pluginName(){return`MediaEmbedCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`);let n=$a(e4);this._form=new n(t.locale,e,r4(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeMediaEmbed`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Qa({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:n4(t)});let r=Q2(t,e),i=r?r.value.toFixed(1):``,a=$2(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function n4(e){let t=e.editing.view,n=cb.defaultPositions;return{target:t.domConverter.mapViewToDom(h2(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}function r4(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var i4=class extends F{static get requires(){return[W2,G2,t4,q2]}static get pluginName(){return`MediaEmbedResize`}static get isOfficialPlugin(){return!0}},a4=class extends I{_styles;_defaultStyleName;constructor(e,t){super(e),this._styles=new Map(t.map(e=>[e.name,e]));let n=t.find(e=>e.isDefault);this._defaultStyleName=n?n.name:null}refresh(){let e=v2(this.editor.model.document.selection);if(this.isEnabled=!!e,!e)this.value=!1;else if(e.hasAttribute(`mediaStyle`)){let t=e.getAttribute(`mediaStyle`);this.value=this._styles.has(t)?t:this._defaultStyleName??!1}else this.value=this._defaultStyleName??!1}execute(e){let t=this.editor.model,n=v2(t.document.selection),r=e.value;if(!r||this._styles.get(r)?.isDefault){t.change(e=>{e.removeAttribute(`mediaStyle`,n)});return}this._styles.has(r)&&t.change(e=>{e.setAttribute(`mediaStyle`,r,n)})}},o4=class extends F{normalizedStyles;static get requires(){return[T2]}static get pluginName(){return`MediaEmbedStyleEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema;e.config.define(`mediaEmbed.styles`,{options:Object.keys(M2)}),this.normalizedStyles=F2(e.config.get(`mediaEmbed.styles`)),t.extend(`media`,{allowAttributes:[`mediaStyle`]}),t.setAttributeProperties(`mediaStyle`,{isFormatting:!0}),e.commands.add(`mediaStyle`,new a4(e,this.normalizedStyles)),this._registerConverters()}_registerConverters(){let e=this.editor,t=new Map(this.normalizedStyles.filter(e=>!e.isDefault&&e.className).map(e=>[e.name,e.className]));e.conversion.for(`downcast`).add(e=>e.on(`attribute:mediaStyle:media`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=t.get(n.attributeOldValue),s=t.get(n.attributeNewValue);o&&a.removeClass(o,i),s&&a.addClass(s,i)})),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,n,r)=>{if(!n.modelRange)return;let i=j(n.modelRange.getItems());if(!(!i||!i.is(`element`,`media`)))for(let[e,a]of t)r.consumable.consume(n.viewItem,{classes:a})&&r.writer.setAttribute(`mediaStyle`,e,i)},{priority:`low`})})}},s4=class extends F{static get requires(){return[o4]}static get pluginName(){return`MediaEmbedStyleUI`}static get isOfficialPlugin(){return!0}init(){let e=this._getLocalizedTitles();for(let t of this._getButtonDefinitions(e))this._createButton(t);for(let t of this._getDropdownDefinitions(e))this._createDropdown(t)}_getButtonDefinitions(e){return this.editor.plugins.get(o4).normalizedStyles.map(t=>({name:t.name,label:e[t.title]||t.title,icon:t.icon}))}_getLocalizedTitles(){let e=this.editor.t;return{"Left aligned media":e(`Left aligned media`),"Centered media":e(`Centered media`),"Right aligned media":e(`Right aligned media`),"Wrap text":e(`Wrap text`),"Break text":e(`Break text`)}}_getDropdownDefinitions(e){let t=this.editor.plugins.get(o4),n=new Set(t.normalizedStyles.map(({name:e})=>`mediaEmbed:${e}`)),r=[],i=(t,i)=>{let a=t.items.filter(e=>n.has(e));if(i&&a.length!==t.items.length&&u4({dropdown:t}),a.length<2)return;let o=n.has(t.defaultItem)?t.defaultItem:a[0];r.push({name:t.name,title:e[t.title]||t.title,items:a,defaultItem:o})};for(let e of P2)i(e,!1);for(let e of this._collectCustomDropdowns())i(e,!0);return r}_collectCustomDropdowns(){return(this.editor.config.get(`mediaEmbed.toolbar`)||[]).filter(e=>z2(e)&&l4(e))}_createButton(e){let t=this.editor,n=`mediaEmbed:${e.name}`;t.ui.componentFactory.add(n,n=>{let r=t.commands.get(`mediaStyle`),i=new H(n);return i.set({label:e.label,icon:e.icon,tooltip:!0,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,t=>t===e.name),i.on(`execute`,()=>{t.execute(`mediaStyle`,{value:e.name}),t.editing.view.focus()}),i})}_createDropdown(e){let t=this.editor,n=t.ui.componentFactory;n.add(e.name,r=>{let i=e.items.map(e=>n.create(e)),a=i[e.items.indexOf(e.defaultItem)],o=(...e)=>{let t=e.findIndex(Boolean);return t<0?a:i[t]},s=Ix(r,Fx),c=s.buttonView;return Rx(s,i,{enableActiveItemFocusOnDropdownOpen:!0}),c.set({label:c4(e.title,a.label),class:null,tooltip:!0}),c.arrowView.unbind(`label`),c.arrowView.set({label:e.title}),c.bind(`icon`).toMany(i,`isOn`,(...e)=>o(...e).icon),c.bind(`label`).toMany(i,`isOn`,(...t)=>c4(e.title,o(...t).label)),c.bind(`isOn`).toMany(i,`isOn`,(...e)=>e.some(Boolean)),c.bind(`class`).toMany(i,`isOn`,(...e)=>e.some(Boolean)?`ck-splitbutton_flatten`:void 0),this.listenTo(c,`execute`,()=>{i.some(({isOn:e})=>e)?s.isOpen=!s.isOpen:a.fire(`execute`)}),s.bind(`isEnabled`).toMany(i,`isEnabled`,(...e)=>e.some(Boolean)),this.listenTo(s,`execute`,()=>{t.editing.view.focus()}),s})}};function c4(e,t){return`${e}: ${t}`}function l4(e){let t=e.name.startsWith(`mediaEmbed:`)&&typeof e.title==`string`&&e.title.length>0&&e.items.length>0&&e.items.every(e=>typeof e==`string`&&e.startsWith(`mediaEmbed:`))&&e.items.includes(e.defaultItem);return t||u4({dropdown:e}),t}function u4(e){T(`media-style-configuration-definition-invalid`,e)}var d4=class extends F{static get requires(){return[o4,s4]}static get pluginName(){return`MediaEmbedStyle`}static get isOfficialPlugin(){return!0}};let f4=qr(`px`);var p4=class extends IC{_options;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`top`,0),this.set(`height`,0),this._options=t,this.extendTemplate({attributes:{tabindex:-1,"aria-hidden":`true`,class:[`ck-minimap__iframe`],style:{top:n.to(`top`,e=>f4(e)),height:n.to(`height`,e=>f4(e))}}})}render(){return super.render().then(()=>{this._prepareDocument()})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}_prepareDocument(){let e=this.element.contentWindow.document,t=e.adoptNode(this._options.domRootClone),n=this._options.useSimplePreview?` - .ck.ck-editor__editable_inline img { - filter: contrast( 0 ); - } - - p, li, a, figcaption, span { - background: hsl(0, 0%, 80%) !important; - color: hsl(0, 0%, 80%) !important; - } - - h1, h2, h3, h4 { - background: hsl(0, 0%, 60%) !important; - color: hsl(0, 0%, 60%) !important; - } - `:``,r=` - - - - ${this._options.pageStyles.map(e=>typeof e==`string`?``:``).join(` -`)} - - - - `;e.open(),e.write(r),e.close(),e.body.appendChild(t)}};let m4=qr(`px`);var h4=class extends P{constructor(e){super(e);let t=this.bindTemplate;this.set(`height`,0),this.set(`top`,0),this.set(`scrollProgress`,0),this.set(`_isDragging`,!1),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap__position-tracker`,t.if(`_isDragging`,`ck-minimap__position-tracker_dragging`)],style:{top:t.to(`top`,e=>m4(e)),height:t.to(`height`,e=>m4(e))},"data-progress":t.to(`scrollProgress`)},on:{mousedown:t.to(()=>{this._isDragging=!0})}})}render(){super.render(),this.listenTo(d.document,`mousemove`,(e,t)=>{this._isDragging&&this.fire(`drag`,t.movementY)},{useCapture:!0}),this.listenTo(d.document,`mouseup`,()=>{this._isDragging=!1},{useCapture:!0})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}setScrollProgress(e){this.scrollProgress=e}},g4=class extends P{_positionTrackerView;_scaleRatio;_minimapIframeView;constructor({locale:e,scaleRatio:t,pageStyles:n,extraClasses:r,useSimplePreview:i,domRootClone:a}){super(e);let o=this.bindTemplate;this._positionTrackerView=new h4(e),this._positionTrackerView.delegate(`drag`).to(this),this._scaleRatio=t,this._minimapIframeView=new p4(e,{useSimplePreview:i,pageStyles:n,extraClasses:r,scaleRatio:t,domRootClone:a}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap`]},children:[this._positionTrackerView],on:{click:o.to(this._handleMinimapClick.bind(this)),wheel:o.to(this._handleMinimapMouseWheel.bind(this))}})}destroy(){this._minimapIframeView.destroy(),super.destroy()}get height(){return new O(this.element).height}get scrollHeight(){return Math.max(0,Math.min(this.height,this._minimapIframeView.height)-this._positionTrackerView.height)}render(){super.render(),this._minimapIframeView.render(),this.element.appendChild(this._minimapIframeView.element)}setContentHeight(e){this._minimapIframeView.setHeight(e*this._scaleRatio)}setScrollProgress(e){let t=this._minimapIframeView,n=this._positionTrackerView;if(t.heighta.markToSync(`children`,t)),r.on(`change:attributes`,(e,t)=>a.markToSync(`attributes`,t)),r.on(`change:text`,(e,t)=>a.markToSync(`text`,t)),a.render(),e.editing.view.on(`render`,()=>a.render()),e.on(`destroy`,()=>{i.unbindDomElement(o)}),o}function v4(){return Array.from(d.document.styleSheets).map(e=>e.href&&!e.href.startsWith(d.window.location.origin)?{href:e.href}:Array.from(e.cssRules).filter(e=>!(e instanceof CSSMediaRule)).map(e=>e.cssText).join(` -`))}function y4(e){return new O(e===d.document.body?d.window:e)}function b4(e){return e===d.document.body?d.window.innerHeight:e.clientHeight}function x4(e){return e===d.document.body?d.window:e}var S4=class extends F{static get pluginName(){return`Minimap`}static get isOfficialPlugin(){return!0}_minimapView;_scrollableRootAncestor;_editingRootElement;init(){let e=this.editor;this._minimapView=null,this._scrollableRootAncestor=null,this.listenTo(e.ui,`ready`,this._onUiReady.bind(this))}destroy(){super.destroy(),this._minimapView.destroy(),this._minimapView.element.remove()}_onUiReady(){let e=this.editor,t=this._editingRootElement=e.ui.getEditableElement();if(this._scrollableRootAncestor=Dr(t),!t.ownerDocument.body.contains(t)){e.ui.once(`update`,this._onUiReady.bind(this));return}this._initializeMinimapView(),this.listenTo(e.editing.view,`render`,()=>{e.state===`ready`&&this._syncMinimapToEditingRootScrollPosition()}),this._syncMinimapToEditingRootScrollPosition()}_initializeMinimapView(){let e=this.editor,t=e.locale,n=e.config.get(`minimap.useSimplePreview`),r=e.config.get(`minimap.container`),i=this._scrollableRootAncestor,a=y4(this._editingRootElement).width,o=y4(r).width/a,s=this._minimapView=new g4({locale:t,scaleRatio:o,pageStyles:v4(),extraClasses:e.config.get(`minimap.extraClasses`),useSimplePreview:n,domRootClone:_4(e)});s.render(),s.listenTo(d.document,`scroll`,(e,t)=>{if(i===d.document.body){if(t.target!==d.document)return}else if(t.target!==i)return;this._syncMinimapToEditingRootScrollPosition()},{useCapture:!0,usePassive:!0}),s.listenTo(d.window,`resize`,()=>{this._syncMinimapToEditingRootScrollPosition()}),s.on(`drag`,(e,t)=>{let n;n=s.scrollHeight===0?0:t/s.scrollHeight;let r=n*(i.scrollHeight-b4(i));x4(i).scrollBy(0,Math.round(r))}),s.on(`click`,(e,t)=>{let n=t*i.scrollHeight;x4(i).scrollBy(0,Math.round(n))}),r.appendChild(s.element)}_syncMinimapToEditingRootScrollPosition(){let e=this._editingRootElement,t=this._minimapView;t.setContentHeight(e.offsetHeight);let n=y4(e),r=y4(this._scrollableRootAncestor),i;r.getIntersection(n)&&(r.contains(n)||n.top>r.top?i=0:(i=(n.top-r.top)/(r.height-n.height),i=Math.max(0,Math.min(i,1))),t.setPositionTrackerHeight(r.getIntersection(n).height),t.setScrollProgress(i))}},C4=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=w4(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`pageBreak`);e.insertObject(n,null,null,{setSelection:`after`})})}};function w4(e,t,n){let r=T4(e,n);return t.checkChild(r,`pageBreak`)}function T4(e,t){let n=$E(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var E4=class extends F{static get pluginName(){return`PageBreakEditing`}static get licenseFeatureCode(){return`PB`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`pageBreak`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>t.createContainerElement(`div`,{class:`page-break`,style:`page-break-after: always`},t.createContainerElement(`span`,{style:`display: none`}))}),r.for(`editingDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>{let r=n(`Page break`),i=t.createContainerElement(`div`),a=t.createRawElement(`span`,{class:`page-break__label`},function(e){e.innerText=n(`Page break`)});return t.addClass(`page-break`,i),t.insert(t.createPositionAt(i,0),a),D4(i,t,r)}}),r.for(`upcast`).elementToElement({view:e=>{let t=e.getStyle(`page-break-before`)==`always`,n=e.getStyle(`page-break-after`)==`always`;if(!t&&!n)return null;if(e.childCount==1){let t=e.getChild(0);if(!t.is(`element`,`span`)||t.getStyle(`display`)!=`none`)return null}else if(e.childCount>1)return null;return{name:!0,styles:[...t?[`page-break-before`]:[],...n?[`page-break-after`]:[]],...e.hasClass(`page-break`)&&{classes:[`page-break`]}}},model:`pageBreak`,converterPriority:`high`}),e.commands.add(`pageBreak`,new C4(e))}};function D4(e,t,n){return t.setCustomProperty(`pageBreak`,!0,e),KE(e,t,{label:n})}var O4=class extends F{static get pluginName(){return`PageBreakUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`pageBreak`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:pageBreak`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`pageBreak`),i=new e(t.locale),a=n.t;return i.set({label:a(`Page break`),icon:Fv}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`pageBreak`),t.editing.view.focus()}),i}},k4=class extends F{static get requires(){return[E4,O4,wD]}static get pluginName(){return`PageBreak`}static get isOfficialPlugin(){return!0}};function A4(e,t){let n=[];for(let r of t.createRangeIn(e)){let e=r.item;e.is(`element`,`a`)&&!e.hasAttribute(`href`)&&(e.hasAttribute(`id`)||e.hasAttribute(`name`))&&n.push(e)}for(let e of n){let n=e.parent.getChildIndex(e)+1,r=e.getChildren();t.insertChild(n,r,e.parent),j4(e)&&t.remove(e)}}function j4(e){let t=e.getAttribute(`name`);return!!t&&t.startsWith(`_`)}function M4(e){let t=parseFloat(e);return e.endsWith(`pt`)?P4(t*96/72):e.endsWith(`pc`)?P4(t*12*96/72):e.endsWith(`in`)?P4(t*96):e.endsWith(`cm`)?P4(t*96/2.54):e.endsWith(`mm`)?P4(t/10*96/2.54):e}function N4(e){return e!==void 0&&e.endsWith(`px`)}function P4(e){return Math.round(e)+`px`}function F4(e,t,n,r=!1){if(!e.childCount)return;let i=new Ip(e.document),a=B4(e,i);if(!a.length)return;let o=[],s=[],c=L4();for(let e of a)if(e.indent!==void 0){V4(e)||(R4(i,s,c),c=L4(),o.length=1,s.length=0);let a=`${e.id}:${e.indent}`,l=r?e.indent-1:Math.min(e.indent-1,s.length);l0&&(R4(i,s,c),c=L4()),o.length=l,s.length=l),ls.length-1||s[l].listElement.name!=u.type){u.type==`ol`&&e.id!==void 0&&o[l]&&o[l][a]&&(u.startIndex=o[l][a]);let t=J4(u,i,n);if(s.length==0){let n=e.element.parent,r=n.getChildIndex(e.element)+1;i.insertChild(r,t,n)}else if(l==0){let e=s[0].listElement,n=e.parent,r=n.getChildIndex(e)+1;i.insertChild(r,t,n)}else{let e=s[l-1].listItemElements;i.appendChild(t,e[e.length-1])}s[l]={...e,listElement:t,listItemElements:[]},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1)}else s[l].isIntermediate&&(Y4(s[l].listElement,u,i,n),s[l]={...e,listElement:s[l].listElement,listItemElements:s[l].listItemElements},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1));let d=e.element.name==`li`?e.element:i.createElement(`li`);I4(i,s,c,e,d,l),i.appendChild(d,s[l].listElement),s[l].listItemElements.push(d),e.id!==void 0&&o[l]&&o[l][a]++,e.element!=d&&i.appendChild(e.element,d),Z4(e.element,i),i.removeStyle(`text-indent`,e.element),i.removeStyle(`margin-left`,e.element)}else{let t=s.find(t=>t.marginLeft==e.marginLeft);if(t){let n=t.listItemElements;i.appendChild(e.element,n[n.length-1]),i.removeStyle(`margin-left`,e.element),s.length=s.indexOf(t)+1,o.length=s.length+1}else R4(i,s,c),c=L4(),s.length=0}R4(i,s,c)}function I4(e,t,n,r,i,a){if(r.marginLeft===void 0){a==0&&(n.canApplyMarginOnList=!1);return}let o=parseFloat(r.marginLeft),s=0;for(let e=0;e0){e.setStyle(`margin-left`,n.marginLeft,t[0].listElement);for(let t of n.topLevelListItemElements)e.removeStyle(`margin-left`,t)}}function z4(e,t){for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`li`)){let n=e.getChild(0);n&&n.is(`element`,`p`)&&t.unwrapElement(n)}}}function B4(e,t){let n=t.createRangeIn(e),r=[],i=new Set;for(let e of n.getItems()){if(!e.is(`element`)||!e.name.match(/^(p|h\d+|li|div)$/))continue;let t=Q4(e);if(t!==void 0&&parseFloat(t)==0&&!Array.from(e.getClassNames()).find(e=>e.startsWith(`MsoList`))&&(t=void 0),e.hasStyle(`mso-list`)&&e.getStyle(`mso-list`)!==`none`||t!==void 0&&i.has(t)){let n=X4(e);r.push({element:e,id:n.id,order:n.order,indent:n.indent,marginLeft:t}),t!==void 0&&i.add(t)}else i.clear()}return r}function V4(e){let t=e.element.previousSibling;for(;t&&H4(t);)t=t.previousSibling;if(!t){let t=e.element.parent;return U4(t)&&(!t.previousSibling||U4(t.previousSibling))}return U4(t)}function H4(e){return e.is(`element`)&&e.childCount===0&&/^(?:span|a|o:p)$/.test(e.name)}function U4(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function W4(e,t){let n=RegExp(`@list l${e.id}:level${e.indent}\\s*({[^}]*)`,`gi`),r=/mso-level-number-format:([^;]{0,100});/gi,i=/mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi,a=RegExp(`@list\\s+l${e.id}:level\\d\\s*{[^{]*mso-level-text:"%\\d\\\\.`,`gi`),o=RegExp(`@list l${e.id}:level\\d\\s*{[^{]*mso-level-number-format:`,`gi`),s=a.exec(t),c=o.exec(t),l=s&&!c,u=n.exec(t),d=`decimal`,f=`ol`,p=null;if(u&&u[1]){let t=r.exec(u[1]);if(t&&t[1]&&(d=t[1].trim(),f=d!==`bullet`&&d!==`image`?`ol`:`ul`),d===`bullet`){let t=G4(e.element);t&&(d=t)}else{let e=i.exec(u[1]);e&&e[1]&&(p=parseInt(e[1]))}l&&(f=`ol`)}return{type:f,startIndex:p,style:q4(d),isLegalStyleList:l}}function G4(e){if(e.name==`li`&&e.parent.name==`ul`&&e.parent.hasAttribute(`type`))return e.parent.getAttribute(`type`);let t=K4(e);if(!t)return null;let n=t._data;return n===`o`?`circle`:n===`·`?`disc`:n===`§`?`square`:null}function K4(e){if(e.getChild(0).is(`$text`))return null;for(let t of e.getChildren()){if(!t.is(`element`,`span`))continue;let e=t.getChild(0);if(e)return e.is(`$text`)?e:e.getChild(0)}return null}function q4(e){if(e.startsWith(`arabic-leading-zero`))return`decimal-leading-zero`;switch(e){case`alpha-upper`:return`upper-alpha`;case`alpha-lower`:return`lower-alpha`;case`roman-upper`:return`upper-roman`;case`roman-lower`:return`lower-roman`;case`circle`:case`disc`:case`square`:return e;default:return null}}function J4(e,t,n){let r=t.createElement(e.type);return Y4(r,e,t,n),r}function Y4(e,t,n,r){t.style&&n.setStyle(`list-style-type`,t.style,e),t.startIndex&&t.startIndex>1&&n.setAttribute(`start`,t.startIndex,e),t.isLegalStyleList&&r&&n.addClass(`legal-list`,e)}function X4(e){let t=e.getStyle(`mso-list`);if(t===void 0)return{};let n=t.match(/(^|\s{1,100})l(\d+)/i),r=t.match(/\s{0,100}lfo(\d+)/i),i=t.match(/\s{0,100}level(\d+)/i);return n&&r&&i?{id:n[2],order:r[1],indent:parseInt(i[1])}:{indent:1}}function Z4(e,t){let n=new Lo({name:`span`,styles:{"mso-list":`Ignore`}}),r=t.createRangeIn(e);for(let e of r)e.type===`elementStart`&&n.match(e.item)&&t.remove(e.item)}function Q4(e){let t=e.getStyle(`margin-left`);return t===void 0||t.endsWith(`px`)?t:M4(t)}function $4(e,t){if(!e.childCount)return;let n=new Ip(e.document),r=t3(e,n);n3(r,e,n),i3(r,e,n),r3(e,n);let i=a3(e,n);i.length&&s3(i,o3(t),n)}function e3(e){return btoa(e.match(/\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(``))}function t3(e,t){let n=t.createRangeIn(e),r=new Lo({name:/v:(.+)/}),i=[];for(let e of n){if(e.type!=`elementStart`)continue;let t=e.item,n=t.previousSibling,a=n&&n.is(`element`)?n.name:null,o=[`Chart`],s=r.match(t),c=t.getAttribute(`o:gfxdata`),l=a===`v:shapetype`,u=c&&o.some(e=>t.getAttribute(`id`).includes(e));s&&c&&!l&&!u&&i.push(e.item.getAttribute(`id`))}return i}function n3(e,t,n){let r=n.createRangeIn(t),i=new Lo({name:`img`}),a=[];for(let t of r)if(t.item.is(`element`)&&i.match(t.item)){let n=t.item,r=n.getAttribute(`v:shapes`)?n.getAttribute(`v:shapes`).split(` `):[];r.length&&r.every(t=>e.indexOf(t)>-1)?a.push(n):n.getAttribute(`src`)||a.push(n)}for(let e of a)n.remove(e)}function r3(e,t){let n=t.createRangeIn(e),r=new Lo({name:/v:(.+)/}),i=[];for(let e of n)e.type==`elementStart`&&r.match(e.item)&&i.push(e.item);for(let e of i)t.remove(e)}function i3(e,t,n){let r=n.createRangeIn(t),i=[];for(let t of r)if(t.type==`elementStart`&&t.item.is(`element`,`v:shape`)){let n=t.item.getAttribute(`id`);if(e.includes(n))continue;a(t.item.parent.getChildren(),n)||i.push(t.item)}for(let e of i){let t={src:o(e)};e.hasAttribute(`alt`)&&(t.alt=e.getAttribute(`alt`));let r=n.createElement(`img`,t);n.insertChild(e.index+1,r,e.parent)}function a(e,t){for(let n of e)if(n.is(`element`)&&(n.name==`img`&&n.getAttribute(`v:shapes`)==t||a(n.getChildren(),t)))return!0;return!1}function o(e){for(let t of e.getChildren())if(t.is(`element`)&&t.getAttribute(`src`))return t.getAttribute(`src`)}}function a3(e,t){let n=t.createRangeIn(e),r=new Lo({name:`img`}),i=[],a=0;for(let e of n)e.item.is(`element`)&&r.match(e.item)&&(e.item.getAttribute(`src`).startsWith(`file://`)&&i.push({element:e.item,imageIndex:a}),a++);return i}function o3(e){if(!e)return[];let t=/{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/,n=RegExp(`(?:(`+t.source+`))([\\da-fA-F\\s]+)\\}`,`g`),r=e.match(n),i=[];if(r)for(let e of r){let n=!1;e.includes(`\\pngblip`)?n=`image/png`:e.includes(`\\jpegblip`)&&(n=`image/jpeg`),n&&i.push({hex:e.replace(t,``).replace(/[^\da-fA-F]/g,``),type:n})}return i}function s3(e,t,n){for(let r=0;r!r.hasStyle(`border-${e}-style`)))t.setStyle(`border-style`,`none`,r);else for(let n of e)r.hasStyle(`border-${n}-style`)||t.setStyle(`border-${n}-style`,`none`,r);let i=[`width`,`height`,...e.map(e=>`border-${e}-width`),...e.map(e=>`padding-${e}`)];for(let e of i)r.hasStyle(e)&&t.setStyle(e,M4(r.getStyle(e)),r)}}function u3(e,t){for(let n of t.createRangeIn(e).getItems())n.is(`element`,`table`)&&(n.getStyle(`width`)===`0px`&&t.removeStyle(`width`,n),n.getAttribute(`width`)===`0`&&t.removeAttribute(`width`,n))}function d3(e,t){let n=new Map,r=new Map,i=null;for(let{item:a}of t.createRangeIn(e))if(a.is(`element`)){if(a.getStyle(`mso-element`)===`footnote-list`){i=a;continue}if(a.hasStyle(`mso-footnote-id`)){let e=a.findAncestor(`element`,e=>e.getStyle(`mso-element`)===`footnote`);if(e){let t=e.getAttribute(`id`);r.set(t,e)}else{let e=a.getStyle(`mso-footnote-id`);n.set(e,a)}continue}}if(!n.size||!i)return;let a=p3(t);t.replace(i,a.wrapper);for(let[e,i]of n){let n=r.get(e);if(!n)continue;t.replace(i,m3(t,e));let o=h3(t,e);f3(t,n);for(let e of n.getChildren()){let n=e;e.is(`element`)&&(n=t.clone(e,!0)),t.appendChild(n,o.content)}t.appendChild(o.listItem,a.list)}}function f3(e,t){let n=[],r=[];for(let{item:i}of e.createRangeIn(t))if(i.is(`element`)&&i.getStyle(`mso-footnote-id`)){n.unshift(i);let{nextSibling:e}=i;e?.is(`$text`)&&e.data.startsWith(` `)&&r.unshift(e)}for(let t of n)e.remove(t);for(let t of r){let n=t.data.substring(1);if(n.length>0){let r=t.parent,i=r.getChildIndex(t),a=e.createText(n);e.remove(t),e.insertChild(i,a,r)}else e.remove(t)}return t}function p3(e){let t=e.createElement(`hr`,{class:`footnotes-divider`}),n=e.createElement(`ol`,{class:`footnotes-list`});return{list:n,wrapper:e.createElement(`div`,{class:`footnotes`},[t,n])}}function m3(e,t){let n=e.createElement(`sup`,{class:`footnote`}),r=e.createElement(`a`,{id:`ref-${t}`,href:`#${t}`});return e.appendChild(r,n),n}function h3(e,t){let n=e.createElement(`li`,{id:t,class:`footnote-definition`}),r=e.createElement(`a`,{href:`#ref-${t}`,class:`footnote-backlink`}),i=e.createElement(`div`,{class:`footnote-content`});return e.appendChild(e.createText(`^`),r),e.appendChild(r,n),e.appendChild(i,n),{listItem:n,content:i}}let g3=//i,_3=/xmlns:o="urn:schemas-microsoft-com/i,v3=//i;var y3=class{document;hasMultiLevelListPlugin;hasTablePropertiesPlugin;enableSkipLevelLists;constructor(e,t=!1,n=!1,r=!1){this.document=e,this.hasMultiLevelListPlugin=t,this.hasTablePropertiesPlugin=n,this.enableSkipLevelLists=r}isActive(e){return g3.test(e)||_3.test(e)||v3.test(e)}execute(e){let t=new Ip(this.document),n=e.extraContent.stylesString;A4(e.content,t),F4(e.content,n,this.hasMultiLevelListPlugin,this.enableSkipLevelLists),$4(e.content,e.dataTransfer.getData(`text/rtf`)),l3(e.content,t,this.hasTablePropertiesPlugin),u3(e.content,t),d3(e.content,t),c3(e.content)}};function b3(e,t){for(let n of e.getChildren())if(n.is(`element`,`b`)&&n.getStyle(`font-weight`)===`normal`){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function x3(e,t){let n=new yc(new Es(t.document.stylesProcessor),{renderingMode:`data`}),r=n.blockElements,i=n.inlineObjectElements,a=[];for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`br`)){let n=S3(e,`forward`,t,{blockElements:r,inlineObjectElements:i}),o=S3(e,`backward`,t,{blockElements:r,inlineObjectElements:i}),s=C3(n,r);(C3(o,r)||s)&&a.push(e)}}for(let e of a)e.hasClass(`Apple-interchange-newline`)?t.remove(e):t.replace(e,t.createElement(`p`))}function S3(e,t,n,{blockElements:r,inlineObjectElements:i}){let a=n.createPositionAt(e,t==`forward`?`after`:`before`);return a=a.getLastMatchingPosition(({item:e})=>e.is(`element`)&&!r.includes(e.name)&&!i.includes(e.name),{direction:t}),t==`forward`?a.nodeAfter:a.nodeBefore}function C3(e,t){return!!e&&e.is(`element`)&&t.includes(e.name)}function w3(e,t,n){let r=new Set;for(let n of t.createRangeIn(e).getItems())!n.is(`view:$textProxy`)||!n.data.includes(` `)||T3(n.parent)&&r.add(n.textNode);for(let e of r)E3(e,t,n)}function T3(e){let t=e;for(;t;){if(t.is(`element`)&&t.getStyle?.(`white-space`)===`pre-wrap`)return!0;t=t.parent}return!1}function E3(e,t,n){let{parent:r,data:i}=e,a=i.replaceAll(` `,` `.repeat(n)),o=r.getChildIndex(e);t.remove(e),t.insertChild(o,t.createText(a),r)}let D3=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;var O3=class{document;constructor(e){this.document=e}isActive(e){return D3.test(e)}execute(e){let t=new Ip(this.document);b3(e.content,t),z4(e.content,t),x3(e.content,t),w3(e.content,t,8)}};function k3(e,t){for(let n of e.getChildren())n.is(`element`,`table`)&&n.hasAttribute(`xmlns`)&&t.removeAttribute(`xmlns`,n)}function A3(e,t){for(let n of e.getChildren())if(n.is(`element`,`google-sheets-html-origin`)){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function j3(e,t){for(let n of Array.from(e.getChildren()))n.is(`element`,`style`)&&t.remove(n)}let M3=/[^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,`$1$2`).replace(/<\/span>/g,``).replace(/()[\r\n]+(<\/span>)/g,`$1 $2`).replace(/ <\//g,`\xA0<\/o:p>/g,`\xA0`).replace(/( |\u00A0)<\/o:p>/g,``).replace(/>([^\S\r\n]*[\r\n]\s*)<`)}function F3(e){e.querySelectorAll(`span[style*=spacerun]`).forEach(e=>{let t=e,n=t.innerText.length||0;t.innerText=Array(n+1).join(`\xA0 `).substr(0,n)})}function I3(e){return e.replace(/(\s+)<\/span>/g,(e,t)=>t.length===1?` `:Array(t.length+1).join(`\xA0 `).substr(0,t.length))}function L3(e,t){let n=new DOMParser;e=e.replace(//g,``)}const dO=[`figcaption`,`li`],fO=[`ol`,`ul`];function pO(e,t){if(t.is(`$text`)||t.is(`$textProxy`))return t.data;if(t.is(`element`,`img`)&&t.hasAttribute(`alt`))return t.getAttribute(`alt`);if(t.is(`element`,`br`))return`\n`;let n=``,r=null;for(let i of t.getChildren())n+=hO(i,r)+pO(e,i),r=i;if(t.is(`rawElement`)){let r=document.implementation.createHTMLDocument(``).createElement(`div`);t.render(r,e),n+=mO(r)}return n}function mO(e){let t=``;if(e.nodeType===Node.TEXT_NODE)return e.textContent;if(e.tagName===`BR`)return`\n`;for(let n of e.childNodes)t+=mO(n);return t}function hO(e,t){return t?e.is(`element`,`li`)&&!e.isEmpty&&e.getChild(0).is(`containerElement`)||fO.includes(e.name)&&fO.includes(t.name)?`\n\n`:!e.is(`containerElement`)&&!t.is(`containerElement`)?``:dO.includes(e.name)||dO.includes(t.name)?`\n`:e.is(`element`)&&e.getCustomProperty(`dataPipeline:transparentRendering`)||t.is(`element`)&&t.getCustomProperty(`dataPipeline:transparentRendering`)?``:`\n\n`:``}var gO=class extends F{_markersToCopy=new Map;static get pluginName(){return`ClipboardMarkersUtils`}static get isOfficialPlugin(){return!0}_registerMarkerToCopy(e,t){this._markersToCopy.set(e,t)}_copySelectedFragmentWithMarkers(e,t,n=e=>e.model.getSelectedContent(e.model.document.selection)){return this.editor.model.change(r=>{let i=r.model.document.selection;r.setSelection(t);let a=this._insertFakeMarkersIntoSelection(r,r.model.document.selection,e),o=n(r),s=this._removeFakeMarkersInsideElement(r,o);for(let[e,t]of Object.entries(a)){s[e]||=r.createRangeIn(o);for(let e of t)r.remove(e)}o.markers.clear();for(let[e,t]of Object.entries(s))o.markers.set(e,t);return r.setSelection(i),o})}_pasteMarkersIntoTransformedElement(e,t){let n=this._getPasteMarkersFromRangeMap(e);return this.editor.model.change(e=>{let r=this._insertFakeMarkersElements(e,n),i=t(e),a=this._removeFakeMarkersInsideElement(e,i);for(let t of Object.values(r).flat())e.remove(t);for(let[t,n]of Object.entries(a))e.model.markers.has(t)||e.addMarker(t,{usingOperation:!0,affectsData:!0,range:n});return i})}_pasteFragmentWithMarkers(e){let t=this._getPasteMarkersFromRangeMap(e.markers);e.markers.clear();for(let n of t)e.markers.set(n.name,n.range);return this.editor.model.insertContent(e)}_forceMarkersCopy(e,t,n={allowedActions:`all`,copyPartiallySelected:!0,duplicateOnPaste:!0}){let r=this._markersToCopy.get(e);this._markersToCopy.set(e,n),t(),r?this._markersToCopy.set(e,r):this._markersToCopy.delete(e)}_isMarkerCopyable(e,t){let n=this._getMarkerClipboardConfig(e);if(!n)return!1;if(!t)return!0;let{allowedActions:r}=n;return r===`all`||r.includes(t)}_hasMarkerConfiguration(e){return!!this._getMarkerClipboardConfig(e)}_getMarkerClipboardConfig(e){let[t]=e.split(`:`);return this._markersToCopy.get(t)||null}_insertFakeMarkersIntoSelection(e,t,n){let r=this._getCopyableMarkersFromSelection(e,t,n);return this._insertFakeMarkersElements(e,r)}_getCopyableMarkersFromSelection(e,t,n){let r=Array.from(t.getRanges()),i=new Set(r.flatMap(t=>Array.from(e.model.markers.getMarkersIntersectingRange(t))));return Array.from(i).filter(e=>{if(!this._isMarkerCopyable(e.name,n))return!1;let{copyPartiallySelected:t}=this._getMarkerClipboardConfig(e.name);if(!t){let t=e.getRange();return r.some(e=>e.containsRange(t,!0))}return!0}).map(e=>({name:n===`dragstart`?this._getUniqueMarkerName(e.name):e.name,range:e.getRange()}))}_getPasteMarkersFromRangeMap(e,t=null){let{model:n}=this.editor;return(e instanceof Map?Array.from(e.entries()):Object.entries(e)).flatMap(([e,r])=>{if(!this._hasMarkerConfiguration(e))return[{name:e,range:r}];if(this._isMarkerCopyable(e,t)){let t=this._getMarkerClipboardConfig(e),i=n.markers.has(e)&&n.markers.get(e).getRange().root.rootName===`$graveyard`;return(t.duplicateOnPaste||i)&&(e=this._getUniqueMarkerName(e)),[{name:e,range:r}]}return[]})}_insertFakeMarkersElements(e,t){let n={},r=t.flatMap(e=>{let{start:t,end:n}=e.range;return[{position:t,marker:e,type:`start`},{position:n,marker:e,type:`end`}]}).sort(({position:e},{position:t})=>e.isBefore(t)?1:-1);for(let{position:t,marker:i,type:a}of r){let r=e.createElement(`$marker`,{\"data-name\":i.name,\"data-type\":a});n[i.name]||(n[i.name]=[]),n[i.name].push(r),e.insert(r,t)}return n}_removeFakeMarkersInsideElement(e,t){return vn(this._getAllFakeMarkersFromElement(e,t).reduce((t,n)=>{let r=n.markerElement&&e.createPositionBefore(n.markerElement),i=t[n.name],a=!1;return i?.start&&i?.end&&(this._getMarkerClipboardConfig(n.name).duplicateOnPaste?t[this._getUniqueMarkerName(n.name)]=t[n.name]:a=!0,i=null),a||(t[n.name]={...i,[n.type]:r}),n.markerElement&&e.remove(n.markerElement),t},{}),n=>new B(n.start||e.createPositionFromPath(t,[0]),n.end||e.createPositionAt(t,`end`)))}_getAllFakeMarkersFromElement(e,t){let n=Array.from(e.createRangeIn(t)).flatMap(({item:e})=>e.is(`element`,`$marker`)?[{markerElement:e,name:e.getAttribute(`data-name`),type:e.getAttribute(`data-type`)}]:[]),r=[],i=[];for(let e of n)e.type===`end`&&(n.some(t=>t.name===e.name&&t.type===`start`)||r.push({markerElement:null,name:e.name,type:`start`})),e.type===`start`&&(n.some(t=>t.name===e.name&&t.type===`end`)||i.unshift({markerElement:null,name:e.name,type:`end`}));return[...r,...n,...i]}_getUniqueMarkerName(e){let t=e.split(`:`),n=he().substring(1,6);return t.length===3?`${t.slice(0,2).join(`:`)}:${n}`:`${t.join(`:`)}:${n}`}},_O=class extends F{static get pluginName(){return`ClipboardPipeline`}static get isOfficialPlugin(){return!0}static get requires(){return[gO]}init(){this.editor.editing.view.addObserver(lO),this._setupPasteDrop(),this._setupCopyCut()}_fireOutputTransformationEvent(e,t,n){let r=this.editor.plugins.get(`ClipboardMarkersUtils`);this.editor.model.enqueueChange({isUndoable:n===`cut`},()=>{let i=r._copySelectedFragmentWithMarkers(n,t);this.fire(`outputTransformation`,{dataTransfer:e,content:i,method:n})})}_setupPasteDrop(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=this.editor.plugins.get(`ClipboardMarkersUtils`);this.listenTo(r,`clipboardInput`,(t,n)=>{n.method==`paste`&&!e.model.canEditAt(e.model.document.selection)&&t.stop()},{priority:`highest`}),this.listenTo(r,`clipboardInput`,(e,t)=>{let r=t.dataTransfer,i=new pe(this,`inputTransformation`),a=r.getData(`application/ckeditor5-editor-id`)||null,o=typeof t.content==`string`?this.editor.data.htmlProcessor.toView(uO(t.content)):t.content;this.fire(i,{content:o,dataTransfer:r,sourceEditorId:a,extraContent:t.extraContent,targetRanges:t.targetRanges,method:t.method}),i.stop.called&&e.stop(),n.scrollToTheSelection()},{priority:`low`}),this.listenTo(this,`inputTransformation`,(e,n)=>{if(n.content.isEmpty)return;let r=this.editor.data.toModel(n.content,`$clipboardHolder`);r.childCount!=0&&(e.stop(),t.change(()=>{this.fire(`contentInsertion`,{content:r,method:n.method,sourceEditorId:n.sourceEditorId,dataTransfer:n.dataTransfer,targetRanges:n.targetRanges})}))},{priority:`low`}),this.listenTo(this,`contentInsertion`,(e,t)=>{t.resultRange=i._pasteFragmentWithMarkers(t.content)},{priority:`low`})}_setupCopyCut(){let e=this.editor,t=e.model.document,n=e.editing.view.document,r=(e,n)=>{let r=n.dataTransfer;n.preventDefault(),this._fireOutputTransformationEvent(r,t.selection,e.name)};this.listenTo(n,`copy`,r,{priority:`low`}),this.listenTo(n,`cut`,(t,n)=>{e.model.canEditAt(e.model.document.selection)?r(t,n):n.preventDefault()},{priority:`low`}),this.listenTo(this,`outputTransformation`,(t,r)=>{let i=e.data.toView(r.content,{isClipboardPipeline:!0});n.fire(`clipboardOutput`,{dataTransfer:r.dataTransfer,content:i,method:r.method})},{priority:`low`}),this.listenTo(n,`clipboardOutput`,(n,r)=>{r.content.isEmpty||(r.dataTransfer.setData(`text/html`,this.editor.data.htmlProcessor.toData(r.content)),r.dataTransfer.setData(`text/plain`,pO(e.data.htmlProcessor.domConverter,r.content)),r.dataTransfer.setData(`application/ckeditor5-editor-id`,this.editor.id)),r.method==`cut`&&e.model.deleteContent(t.selection)},{priority:`low`})}};const vO=Wr(`px`);var yO=class extends P{constructor(){super();let e=this.bindTemplate;this.set({isVisible:!1,left:null,top:null,width:null}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-clipboard-drop-target-line`,e.if(`isVisible`,`ck-hidden`,e=>!e)],style:{left:e.to(`left`,e=>vO(e)),top:e.to(`top`,e=>vO(e)),width:e.to(`width`,e=>vO(e))}}})}},bO=class extends F{removeDropMarkerDelayed=Yi(()=>this.removeDropMarker(),40);_updateDropMarkerThrottled=qt(e=>this._updateDropMarker(e),40);_reconvertMarkerThrottled=qt(()=>{this.editor.model.markers.has(`drop-target`)&&this.editor.editing.reconvertMarker(`drop-target`)},0);_dropTargetLineView=new yO;_domEmitter=new(br());_scrollables=new Map;static get pluginName(){return`DragDropTarget`}static get isOfficialPlugin(){return!0}init(){this._setupDropMarker()}destroy(){this._domEmitter.stopListening();for(let{resizeObserver:e}of this._scrollables.values())e.destroy();return this._updateDropMarkerThrottled.cancel(),this.removeDropMarkerDelayed.cancel(),this._reconvertMarkerThrottled.cancel(),super.destroy()}updateDropMarker(e,t,n,r,i,a){this.removeDropMarkerDelayed.cancel();let o=xO(this.editor,e,t,n,r,i,a);return o?a&&a.containsRange(o)||o&&!this.editor.model.canEditAt(o)?(this.removeDropMarker(),null):(this._updateDropMarkerThrottled(o),o):null}getFinalDropRange(e,t,n,r,i,a){let o=xO(this.editor,e,t,n,r,i,a);return this.removeDropMarker(),o}removeDropMarker(){let e=this.editor.model;this.removeDropMarkerDelayed.cancel(),this._updateDropMarkerThrottled.cancel(),this._dropTargetLineView.isVisible=!1,e.markers.has(`drop-target`)&&e.change(e=>{e.removeMarker(`drop-target`)})}_setupDropMarker(){let e=this.editor;e.ui.view.body.add(this._dropTargetLineView),e.conversion.for(`editingDowncast`).markerToHighlight({model:`drop-target`,view:{classes:[`ck-clipboard-drop-target-range`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:`drop-target`,view:(t,{writer:n})=>{if(e.model.schema.checkChild(t.markerRange.start,`$text`))return this._dropTargetLineView.isVisible=!1,this._createDropTargetPosition(n);t.markerRange.isCollapsed?this._updateDropTargetLine(t.markerRange):this._dropTargetLineView.isVisible=!1}})}_updateDropMarker(e){let t=this.editor,n=t.model.markers;t.model.change(t=>{n.has(`drop-target`)?n.get(`drop-target`).getRange().isEqual(e)||t.updateMarker(`drop-target`,{range:e}):t.addMarker(`drop-target`,{range:e,usingOperation:!1,affectsData:!1})})}_createDropTargetPosition(e){return e.createUIElement(`span`,{class:`ck ck-clipboard-drop-target-position`},function(e){let t=this.toDomElement(e);return t.append(`⁠`,e.createElement(`span`),`⁠`),t})}_updateDropTargetLine(e){let t=this.editor.editing,n=e.start.nodeBefore,r=e.start.nodeAfter,i=e.start.parent,a=n?t.mapper.toViewElement(n):null,o=a?t.view.domConverter.mapViewToDom(a):null,s=r?t.mapper.toViewElement(r):null,c=s?t.view.domConverter.mapViewToDom(s):null,l=t.mapper.toViewElement(i);if(!l)return;let d=t.view.domConverter.mapViewToDom(l),f=this._getScrollableRect(l),{scrollX:p,scrollY:m}=u.window,h=o?new O(o):null,g=c?new O(c):null,_=new O(d).excludeScrollbarsAndBorders(),v=h?h.bottom:_.top,y=g?g.top:_.bottom,ee=u.window.getComputedStyle(d),b=v<=y?(v+y)/2:y;if(f.tops.schema.checkChild(a,e))){if(s.schema.checkChild(a,`$text`))return s.createRange(a);if(t)return CO(e,TO(e,t.parent),r,i)}}}else if(s.schema.isInline(l))return CO(e,l,r,i)}if(s.schema.isBlock(l))return CO(e,l,r,i);if(s.schema.checkChild(l,`$block`)){let t=Array.from(l.getChildren()).filter(t=>t.is(`element`)&&!SO(e,t)),n=0,a=t.length;if(a==0)return s.createRange(s.createPositionAt(l,`end`));for(;n{n?(this.forceDisabled(`readOnlyMode`),this._isBlockDragging=!1):this.clearForceDisabled(`readOnlyMode`)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`),e.plugins.has(`BlockToolbar`)){let t=e.plugins.get(`BlockToolbar`).buttonView.element;this._domEmitter.listenTo(t,`dragstart`,(e,t)=>this._handleBlockDragStart(t)),this._domEmitter.listenTo(u.document,`dragover`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`drop`,(e,t)=>this._handleBlockDragging(t)),this._domEmitter.listenTo(u.document,`dragend`,()=>this._handleBlockDragEnd(),{useCapture:!0}),this.isEnabled&&t.setAttribute(`draggable`,`true`),this.on(`change:isEnabled`,(e,n,r)=>{t.setAttribute(`draggable`,r?`true`:`false`)})}}destroy(){return this._domEmitter.stopListening(),super.destroy()}_handleBlockDragStart(e){if(!this.isEnabled)return;let t=this.editor.model,n=t.document.selection,r=this.editor.editing.view,i=Array.from(n.getSelectedBlocks()),a=t.createRange(t.createPositionBefore(i[0]),t.createPositionAfter(i[i.length-1]));t.change(e=>e.setSelection(a)),this._isBlockDragging=!0,r.focus(),r.getObserver(lO).onDomEvent(e)}_handleBlockDragging(e){if(!this.isEnabled||!this._isBlockDragging)return;let t=e.clientX+(this.editor.locale.contentLanguageDirection==`ltr`?100:-100),n=e.clientY,r=document.elementFromPoint(t,n),i=this.editor.editing.view;!r||!r.closest(`.ck-editor__editable`)||i.getObserver(lO).onDomEvent({...e,type:e.type,dataTransfer:e.dataTransfer,target:r,clientX:t,clientY:n,preventDefault:()=>e.preventDefault(),stopPropagation:()=>e.stopPropagation()})}_handleBlockDragEnd(){this._isBlockDragging=!1}},OO=class extends F{_draggedRange;_draggingUid;_draggableElement;_clearDraggableAttributesDelayed=Yi(()=>this._clearDraggableAttributes(),40);_blockMode=!1;_domEmitter=new(br());_previewContainer;static get pluginName(){return`DragDrop`}static get isOfficialPlugin(){return!0}static get requires(){return[_O,xD,bO,DO]}init(){let e=this.editor,t=e.editing.view;this._draggedRange=null,this._draggingUid=``,this._draggableElement=null,t.addObserver(lO),t.addObserver(Mp),this._setupDragging(),this._setupContentInsertionIntegration(),this._setupClipboardInputIntegration(),this._setupDraggableAttributeHandling(),this.listenTo(e,`change:isReadOnly`,(e,t,n)=>{n?this.forceDisabled(`readOnlyMode`):this.clearForceDisabled(`readOnlyMode`)}),this.on(`change:isEnabled`,(e,t,n)=>{n||this._finalizeDragging(!1)}),p.isAndroid&&this.forceDisabled(`noAndroidSupport`)}destroy(){return this._draggedRange&&=(this._draggedRange.detach(),null),this._previewContainer&&this._previewContainer.remove(),this._domEmitter.stopListening(),this._clearDraggableAttributesDelayed.cancel(),super.destroy()}_setupDragging(){let e=this.editor,t=e.model,n=e.editing.view,r=n.document,i=e.plugins.get(bO);this.listenTo(r,`dragstart`,(n,r)=>{if(r.target?.is(`editableElement`)){r.preventDefault();return}if(this._prepareDraggedRange(r.target),!this._draggedRange){r.preventDefault();return}this._draggingUid=he();let i=this.isEnabled&&e.model.canEditAt(this._draggedRange);r.dataTransfer.effectAllowed=i?`copyMove`:`copy`,r.dataTransfer.setData(`application/ckeditor5-dragging-uid`,this._draggingUid);let a=t.createSelection(this._draggedRange.toRange());this.editor.plugins.get(`ClipboardPipeline`)._fireOutputTransformationEvent(r.dataTransfer,a,`dragstart`);let{dataTransfer:o,domTarget:s,domEvent:c}=r,{clientX:l}=c;this._updatePreview({dataTransfer:o,domTarget:s,clientX:l}),r.stopPropagation(),i||(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``)},{priority:`low`}),this.listenTo(r,`dragend`,(e,t)=>{this._finalizeDragging(!t.dataTransfer.isCanceled&&t.dataTransfer.dropEffect==`move`)},{priority:`low`}),this._domEmitter.listenTo(u.document,`dragend`,()=>{this._blockMode=!1},{useCapture:!0}),this.listenTo(r,`dragenter`,()=>{this.isEnabled&&n.focus()}),this.listenTo(r,`dragleave`,()=>{i.removeDropMarkerDelayed()}),this.listenTo(r,`dragging`,(e,t)=>{if(!this.isEnabled){t.dataTransfer.dropEffect=`none`;return}let{clientX:n,clientY:r}=t.domEvent;if(!i.updateDropMarker(t.target,t.targetRanges,n,r,this._blockMode,this._draggedRange)){t.dataTransfer.dropEffect=`none`;return}this._draggedRange||(t.dataTransfer.dropEffect=`copy`),p.isGecko||(t.dataTransfer.effectAllowed==`copy`?t.dataTransfer.dropEffect=`copy`:[`all`,`copyMove`].includes(t.dataTransfer.effectAllowed)&&(t.dataTransfer.dropEffect=`move`)),e.stop()},{priority:`low`})}_setupClipboardInputIntegration(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(bO);this.listenTo(t,`clipboardInput`,(t,r)=>{if(r.method!=`drop`)return;let{clientX:i,clientY:a}=r.domEvent,o=n.getFinalDropRange(r.target,r.targetRanges,i,a,this._blockMode,this._draggedRange);if(!o){this._finalizeDragging(!1),t.stop();return}if(this._draggedRange&&this._draggingUid!=r.dataTransfer.getData(`application/ckeditor5-dragging-uid`)&&(this._draggedRange.detach(),this._draggedRange=null,this._draggingUid=``),kO(r.dataTransfer)==`move`&&this._draggedRange&&this._draggedRange.containsRange(o,!0)){this._finalizeDragging(!1),t.stop();return}r.targetRanges=[e.editing.mapper.toViewRange(o)]},{priority:`high`})}_setupContentInsertionIntegration(){let e=this.editor.plugins.get(_O);e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=t.targetRanges.map(e=>this.editor.editing.mapper.toModelRange(e));this.editor.model.change(e=>e.setSelection(n))},{priority:`high`}),e.on(`contentInsertion`,(e,t)=>{if(!this.isEnabled||t.method!==`drop`)return;let n=kO(t.dataTransfer)==`move`,r=!t.resultRange||!t.resultRange.isCollapsed;this._finalizeDragging(r&&n)},{priority:`lowest`})}_setupDraggableAttributeHandling(){let e=this.editor,t=e.editing.view,n=t.document;this.listenTo(n,`pointerdown`,(r,i)=>{if(p.isAndroid||!i)return;this._clearDraggableAttributesDelayed.cancel();let a=AO(i.target);if(p.isBlink&&!e.isReadOnly&&!a&&!n.selection.isCollapsed){let e=n.selection.getSelectedElement();(!e||!HE(e))&&(a=n.selection.editableElement)}a&&(t.change(e=>{e.setAttribute(`draggable`,`true`,a)}),this._draggableElement=e.editing.mapper.toModelElement(a))}),this.listenTo(n,`pointerup`,()=>{p.isAndroid||this._clearDraggableAttributesDelayed()})}_clearDraggableAttributes(){let e=this.editor.editing;e.view.change(t=>{this._draggableElement&&this._draggableElement.root.rootName!=`$graveyard`&&t.removeAttribute(`draggable`,e.mapper.toViewElement(this._draggableElement)),this._draggableElement=null})}_finalizeDragging(e){let t=this.editor,n=t.model;t.plugins.get(bO).removeDropMarker(),this._clearDraggableAttributes(),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).clearForceDisabled(`dragDrop`),this._draggingUid=``,this._previewContainer&&=(this._previewContainer.remove(),void 0),this._draggedRange&&=(e&&this.isEnabled&&n.change(e=>{let t=n.createSelection(this._draggedRange);n.deleteContent(t,{doNotAutoparagraph:!0});let r=t.getFirstPosition().parent;r.isEmpty&&!n.schema.checkChild(r,`$text`)&&n.schema.checkChild(r,`paragraph`)&&e.insertElement(`paragraph`,r,0)}),this._draggedRange.detach(),null)}_prepareDraggedRange(e){let t=this.editor,n=t.model,r=n.document.selection,i=e?AO(e):null;if(i){let e=t.editing.mapper.toModelElement(i);this._draggedRange=xl.fromRange(n.createRangeOn(e)),this._blockMode=n.schema.isBlock(e),t.plugins.has(`WidgetToolbarRepository`)&&t.plugins.get(`WidgetToolbarRepository`).forceDisabled(`dragDrop`);return}if(r.isCollapsed&&!r.getFirstPosition().parent.isEmpty)return;let a=Array.from(r.getSelectedBlocks()),o=r.getFirstRange();if(a.length==0){this._draggedRange=xl.fromRange(o);return}let s=jO(n,a);if(a.length>1)this._draggedRange=xl.fromRange(s),this._blockMode=!0;else if(a.length==1){let e=o.start.isTouching(s.start)&&o.end.isTouching(s.end);this._draggedRange=xl.fromRange(e?s:o),this._blockMode=e}n.change(e=>e.setSelection(this._draggedRange.toRange()))}_updatePreview({dataTransfer:e,domTarget:t,clientX:n}){let r=this.editor.editing.view,i=r.document.selection.editableElement,a=r.domConverter.mapViewToDom(i),o=u.window.getComputedStyle(a);this._previewContainer?this._previewContainer.firstElementChild&&this._previewContainer.removeChild(this._previewContainer.firstElementChild):(this._previewContainer=mr(u.document,`div`,{style:`position: fixed; left: -999999px;`}),u.document.body.appendChild(this._previewContainer));let s=mr(u.document,`div`);s.className=`ck ck-content ck-clipboard-preview`;let c=new O(a),l=parseFloat(o.paddingLeft),d=parseFloat(o.paddingRight),f=parseFloat(o.width)-l-d;if(!a.contains(t))if(p.isiOS)s.style.width=`${f}px`,s.style.backgroundColor=`var(--ck-color-base-background)`;else{let e=c.left-n+l;s.style.width=`${f+e}px`,s.style.paddingLeft=`${e}px`}else if(p.isiOS)s.style.maxWidth=`${f}px`,s.style.padding=`10px`,s.style.minWidth=`200px`,s.style.minHeight=`20px`,s.style.boxSizing=`border-box`,s.style.backgroundColor=`var(--ck-color-base-background)`;else return;r.domConverter.setContentOf(s,e.getData(`text/html`)),e.setDragImage(s,0,0),this._previewContainer.appendChild(s)}};function kO(e){return p.isGecko?e.dropEffect:[`all`,`copyMove`].includes(e.effectAllowed)?`move`:`copy`}function AO(e){if(e.is(`editableElement`))return null;if(e.hasClass(`ck-widget__selection-handle`))return e.findAncestor(HE);if(HE(e))return e;let t=e.findAncestor(e=>HE(e)||e.is(`editableElement`));return HE(t)?t:null}function jO(e,t){let n=t[0],r=t[t.length-1],i=n.getCommonAncestor(r),a=e.createPositionBefore(n),o=e.createPositionAfter(r);if(i&&i.is(`element`)&&!e.schema.isLimit(i)){let t=e.createRangeOn(i),n=a.isTouching(t.start),r=o.isTouching(t.end);if(n&&r)return jO(e,[i])}return e.createRange(a,o)}var MO=class extends F{static get pluginName(){return`PastePlainText`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.model,n=e.editing.view,r=t.document.selection;n.addObserver(lO),e.plugins.get(_O).on(`contentInsertion`,(e,n)=>{NO(n.content,t)&&t.change(e=>{let i=Array.from(r.getAttributes()).filter(([e])=>t.schema.getAttributeProperties(e).isFormatting);r.isCollapsed||t.deleteContent(r,{doNotAutoparagraph:!0}),i.push(...r.getAttributes());let a=e.createRangeIn(n.content);for(let n of a.getItems())for(let r of i)t.schema.checkAttribute(n,r[0])&&e.setAttribute(r[0],r[1],n)})})}};function NO(e,t){let n=t.createRangeIn(e);if(e.childCount==1){let r=e.getChild(0);r.is(`element`)&&t.schema.isBlock(r)&&!t.schema.isObject(r)&&!t.schema.isLimit(r)&&(n=t.createRangeIn(r))}for(let e of n.getItems())if(!t.schema.isInline(e)||Array.from(e.getAttributeKeys()).find(e=>t.schema.getAttributeProperties(e).isFormatting))return!1;return!0}var PO=class extends F{static get pluginName(){return`Clipboard`}static get isOfficialPlugin(){return!0}static get requires(){return[gO,_O,OO,MO]}init(){let e=this.editor,t=this.editor.t;e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Copy selected content`),keystroke:`CTRL+C`},{label:t(`Paste content`),keystroke:`CTRL+V`},{label:t(`Paste content as plain text`),keystroke:`CTRL+SHIFT+V`}]})}},FO=class{_definitions=new Set;_conflictChecker;get length(){return this._definitions.size}setConflictChecker(e){this._conflictChecker=e}add(e){Array.isArray(e)?e.forEach(e=>this._definitions.add(e)):this._definitions.add(e)}getDispatcher(){return e=>{let t=(e,t)=>{let n=t.createAttributeElement(`a`,e.attributes,{priority:5});e.classes&&t.addClass(e.classes,n);for(let r in e.styles)t.setStyle(r,e.styles[r],n);return t.setCustomProperty(`link`,!0,n),n},n=e=>(n,r,i)=>{if(r.attributeKey.startsWith(`link`)&&!(r.attributeKey==`linkHref`&&!i.consumable.test(r.item,`attribute:linkHref`))&&!(!r.item.is(`selection`)&&!i.schema.isInline(r.item)))for(let n of this._definitions)n.callback(r.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(n,r.item)&&e?r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(n,i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(n,i.writer)):i.writer.unwrap(i.mapper.toViewRange(r.range),t(n,i.writer))};e.on(`attribute`,n(!1),{priority:ge.high-1}),e.on(`attribute`,n(!0),{priority:ge.high-2})}}getDispatcherForLinkedImage(){return e=>{let t=e=>(t,n,{writer:r,mapper:i})=>{if(!n.item.is(`element`,`imageBlock`)||!n.attributeKey.startsWith(`link`))return;let a=i.toViewElement(n.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o)for(let t of this._definitions){let i=Ui(t.attributes);if(t.callback(n.item.getAttribute(`linkHref`))&&!this._conflictChecker?.(t,n.item)&&e){for(let[e,t]of i)e===`class`?r.addClass(t,o):r.setAttribute(e,t,!1,o);t.classes&&r.addClass(t.classes,o);for(let e in t.styles)r.setStyle(e,t.styles[e],o)}else{for(let[e,t]of i)e===`class`?r.removeClass(t,o):r.removeAttribute(e,t,o);t.classes&&r.removeClass(t.classes,o);for(let e in t.styles)r.removeStyle(e,o)}}};e.on(`attribute`,t(!1),{priority:ge.high-1}),e.on(`attribute`,t(!0),{priority:ge.high-2})}}};const IO=/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g,LO=/^[\\S]+@((?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.))+(?:[a-z\\u00a1-\\uffff]{2,})$/i,RO=/^((\\w+:(\\/{2,})?)|(\\W))/i,zO=[`https?`,`ftps?`,`mailto`],BO=`Ctrl+K`;function VO(e){return e.is(`attributeElement`)&&!!e.getCustomProperty(`link`)}function HO(e,{writer:t}){let n=t.createAttributeElement(`a`,{href:e},{priority:5});return t.setCustomProperty(`link`,!0,n),n}function UO(e,t=zO){let n=String(e),r=t.join(`|`);return WO(n,RegExp(`${`^(?:(?:):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))`.replace(``,r)}`,`i`))?n:`#`}function WO(e,t){return!!e.replace(IO,``).match(t)}function GO(e,t){let n={\"Open in a new tab\":e(`Open in a new tab`),Downloadable:e(`Downloadable`)};return t.forEach(e=>(`label`in e&&n[e.label]&&(e.label=n[e.label]),e)),t}function KO(e){let t=[];if(e)for(let[n,r]of Object.entries(e)){let e=Object.assign({},r,{id:`link${Yn(n)}`});t.push(e)}return t}function qO(e,t){return e?t.checkAttribute(e.name,`linkHref`):!1}function JO(e){return LO.test(e)}function YO(e,t){let n=JO(e)?`mailto:`:t,r=!!n&&!XO(e);return e&&r?n+e:e}function XO(e){return RO.test(e)}function ZO(e){window.open(e,`_blank`,`noopener`)}function QO(e){let t=``;for(let n of e.getItems()){if(!n.is(`$text`)&&!n.is(`$textProxy`))return;t+=n.data}return t}function $O(e,t){if(e.attributes&&t.attributes&&Object.keys(e.attributes).some(e=>!n(e)&&e in t.attributes)||e.styles&&t.styles&&Object.keys(e.styles).some(e=>e in t.styles))return!0;return!1;function n(e){return e===`class`||e===`style`||e===`rel`}}function ek({decoratorStates:e,allDecorators:t}){let n={...e};for(let i in e)if(e[i]&&r(i)){let e=tk(i,t);for(let t of e)n[t]=!1}function r(e){return t.some(t=>t.id===e&&!t.value)}return n}function tk(e,t){let n=t.find(t=>t.id===e);return n?t.filter(t=>t.id!==e&&$O(n,t)).map(e=>e.id):[]}var nk=class extends I{manualDecorators=new Fi;automaticDecorators=new FO;restoreManualDecoratorStates(){for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement()||j(t.getSelectedBlocks());qO(n,e.schema)?(this.value=n.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttribute(n,`linkHref`)):(this.value=t.getAttribute(`linkHref`),this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`));for(let e of this.manualDecorators)e.value=this._getDecoratorStateFromModel(e.id)}execute(e,t={},n){let r=this.editor.model,i=r.document.selection,a=ek({allDecorators:Array.from(this.manualDecorators),decoratorStates:t}),o=[],s=[];for(let e in a)a[e]?o.push(e):s.push(e);r.change(t=>{let a=n=>{t.setAttribute(`linkHref`,e,n),o.forEach(e=>t.setAttribute(e,!0,n)),s.forEach(e=>t.removeAttribute(e,n))},c=(i,o)=>{let s=QO(i);if(!s)return i;let c=n;if(c||=o&&o==s?e:s,c!=s){let e=t.createDocumentFragment();for(let n of i.getItems()){let r=n;t.append(t.createText(r.data,r.getAttributes()),e)}let n=t.createRangeIn(e),o=rk(s,c),l=0;for(let{offset:e,actual:i,expected:s}of o){let o=e+l,c=t.createRange(n.start.getShiftedBy(o),n.start.getShiftedBy(o+i.length)),u=ik(c,n).getAttributes(),d=Array.from(u).filter(([e])=>r.schema.getAttributeProperties(e).isFormatting),f=t.createText(s,d);a(f),t.remove(c),t.insert(f,c.start),l+=s.length}return r.insertContent(e,i),t.createRange(i.start,i.start.getShiftedBy(c.length))}},l=e=>{let{plugins:n}=this.editor;if(t.setSelection(e.end),n.has(`TwoStepCaretMovement`))n.get(`TwoStepCaretMovement`)._handleForwardMovement();else for(let e of[`linkHref`,...o,...s])t.removeSelectionAttribute(e)};if(i.isCollapsed){let s=i.getFirstPosition();if(i.hasAttribute(`linkHref`)){let e=i.getAttribute(`linkHref`),t=LT(s,`linkHref`,e,r),n=c(t,e);a(n||t),n&&l(n)}else if(e!==``){let a=Ui(i.getAttributes());a.set(`linkHref`,e),o.forEach(e=>{a.set(e,!0)}),l(r.insertContent(t.createText(n||e,a),s))}}else{let e=Array.from(i.getRanges()),n=r.schema.getValidRanges(e,`linkHref`),o=[];for(let e of i.getSelectedBlocks())r.schema.checkAttribute(e,`linkHref`)&&o.push(t.createRangeOn(e));let s=o.slice();for(let e of n)this._isRangeToUpdate(e,o)&&s.push(e);let l=e.map(e=>({start:pf.fromPosition(e.start,`toPrevious`),end:pf.fromPosition(e.end,`toNext`)}));for(let e of s){let t=(e.start.textNode||e.start.nodeAfter).getAttribute(`linkHref`);e=c(e,t)||e,a(e)}t.setSelection(l.map(e=>{let t=e.start.toPosition(),n=e.end.toPosition();return e.start.detach(),e.end.detach(),r.createRange(t,n)}))}}),this.restoreManualDecoratorStates()}_getDecoratorStateFromModel(e){let t=this.editor.model,n=t.document.selection,r=n.getSelectedElement();return qO(r,t.schema)?r.getAttribute(e):n.getAttribute(e)}_isRangeToUpdate(e,t){for(let n of t)if(n.containsRange(e))return!1;return!0}};function rk(e,t){let n=oe(e,t),r={equal:0,insert:0,delete:0},i=[],a=``,o=``;for(let s of[...n,null])s==`insert`?o+=t[r.equal+r.insert]:s==`delete`?a+=e[r.equal+r.delete]:(a.length||o.length)&&(i.push({offset:r.equal,actual:a,expected:o}),a=``,o=``),s&&r[s]++;return i}function ik(e,t){if(!e.isCollapsed)return j(e.getItems());let n=e.start;return n.textNode?n.textNode:!n.nodeBefore||n.isEqual(t.start)?n.nodeAfter:n.nodeBefore}var ak=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=t.getSelectedElement();qO(n,e.schema)?this.isEnabled=e.schema.checkAttribute(n,`linkHref`):this.isEnabled=e.schema.checkAttributeInSelection(t,`linkHref`)}execute(){let e=this.editor,t=this.editor.model,n=t.document.selection,r=e.commands.get(`link`);t.change(e=>{let i=n.isCollapsed?[LT(n.getFirstPosition(),`linkHref`,n.getAttribute(`linkHref`),t)]:t.schema.getValidRanges(n.getRanges(),`linkHref`);for(let t of i)if(e.removeAttribute(`linkHref`,t),r)for(let n of r.manualDecorators)e.removeAttribute(n.id,t)})}};const ok=D();var sk=class extends ok{id;defaultValue;label;attributes;classes;styles;constructor({id:e,label:t,attributes:n,classes:r,styles:i,defaultValue:a}){super(),this.id=e,this.set(`value`,void 0),this.defaultValue=a,this.label=t,this.attributes=n,this.classes=r,this.styles=i}_createPattern(){return{attributes:this.attributes,classes:this.classes,styles:this.styles}}};const ck=`automatic`,lk=/^(https?:)?\\/\\//;var uk=class extends F{_linkOpeners=[];static get pluginName(){return`LinkEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[bT,tT,_O]}constructor(e){super(e),e.config.define(`link`,{allowCreatingEmptyLinks:!1,addTargetToExternalLinks:!1,toolbar:[`linkPreview`,`|`,`editLink`,`linkProperties`,`unlink`]})}init(){let e=this.editor,t=this.editor.config.get(`link.allowedProtocols`);e.model.schema.extend(`$text`,{allowAttributes:`linkHref`}),e.conversion.for(`dataDowncast`).attributeToElement({model:`linkHref`,view:HO}),e.conversion.for(`editingDowncast`).attributeToElement({model:`linkHref`,view:(e,n)=>HO(UO(e,t),n)}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,attributes:{href:!0}},model:{key:`linkHref`,value:e=>e.getAttribute(`href`)}}),e.commands.add(`link`,new nk(e)),e.commands.add(`unlink`,new ak(e));let n=GO(e.t,KO(e.config.get(`link.decorators`)));this._enableAutomaticDecorators(n.filter(e=>e.mode===ck)),this._enableManualDecorators(n.filter(e=>e.mode===`manual`)),e.plugins.get(bT).registerAttribute(`linkHref`),zT(e,`linkHref`,`a`,`ck-link_selected`),this._enableLinkOpen(),this._enableSelectionAttributesFixer(),this._enableClipboardIntegration(),this._enableDecoratorConflictPostfixer()}_registerLinkOpener(e){this._linkOpeners.push(e)}_enableAutomaticDecorators(e){let t=this.editor,n=t.commands.get(`link`),r=n.automaticDecorators;t.config.get(`link.addTargetToExternalLinks`)&&r.add({id:`linkIsExternal`,mode:ck,callback:e=>!!e&&lk.test(e),attributes:{target:`_blank`,rel:`noopener noreferrer`}}),r.add(e),r.setConflictChecker((e,t)=>{for(let r of n.manualDecorators)if(t.hasAttribute(r.id)&&$O(e,r))return!0}),r.length&&t.conversion.for(`downcast`).add(r.getDispatcher())}_enableManualDecorators(e){if(!e.length)return;let t=this.editor,n=t.commands.get(`link`).manualDecorators;e.forEach(e=>{t.model.schema.extend(`$text`,{allowAttributes:e.id});let r=new sk(e);n.add(r),t.conversion.for(`downcast`).add(e=>{let t=e=>{let t=e.createAttributeElement(`a`,r.attributes,{priority:5});r.classes&&e.addClass(r.classes,t);for(let n in r.styles)e.setStyle(n,r.styles[n],t);return e.setCustomProperty(`link`,!0,t),t},n=e=>(n,r,i)=>{if(!(!r.item.is(`selection`)&&!i.schema.isInline(r.item))){if(!e&&r.attributeOldValue){if(!i.consumable.test(r.item,n.name))return;i.writer.unwrap(i.mapper.toViewRange(r.range),t(i.writer))}if(e&&r.attributeNewValue){if(!i.consumable.consume(r.item,n.name))return;r.item.is(`selection`)?i.writer.wrap(i.writer.document.selection.getFirstRange(),t(i.writer)):i.writer.wrap(i.mapper.toViewRange(r.range),t(i.writer))}}};e.on(`attribute:${r.id}`,n(!1),{priority:ge.high-1}),e.on(`attribute:${r.id}`,n(!0),{priority:ge.high-2})}),t.conversion.for(`upcast`).elementToAttribute({view:{name:`a`,...r._createPattern()},model:{key:r.id}})})}_enableLinkOpen(){let e=this.editor,t=e.editing.view.document,n=e=>{this._linkOpeners.some(t=>t(e))||ZO(e)};this.listenTo(t,`click`,(e,t)=>{if(!(p.isMac?t.domEvent.metaKey:t.domEvent.ctrlKey))return;let r=t.domTarget;if(r.tagName.toLowerCase()!=`a`&&(r=r.closest(`a`)),!r)return;let i=r.getAttribute(`href`);i&&(e.stop(),t.preventDefault(),n(i))},{context:`$capture`}),this.listenTo(t,`keydown`,(t,r)=>{let i=e.commands.get(`link`).value;i&&r.keyCode===k.enter&&r.altKey&&(t.stop(),n(i))})}_enableSelectionAttributesFixer(){let e=this.editor.model,t=e.document.selection;this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{!r.includes(`linkHref`)||t.hasAttribute(`linkHref`)||e.change(t=>{dk(t,fk(e.schema))})})}_enableClipboardIntegration(){let e=this.editor,t=e.model,n=this.editor.config.get(`link.defaultProtocol`);n&&this.listenTo(e.plugins.get(`ClipboardPipeline`),`contentInsertion`,(e,r)=>{t.change(e=>{let t=e.createRangeIn(r.content);for(let r of t.getItems())if(r.hasAttribute(`linkHref`)){let t=YO(r.getAttribute(`linkHref`),n);e.setAttribute(`linkHref`,t,r)}})})}_enableDecoratorConflictPostfixer(){let e=this.editor,t=e.model,n=e.commands.get(`link`);t.document.registerPostFixer(e=>{let r=!1,i=t.document.differ.getChanges(),a=new Set,o=new Set(n.manualDecorators.map(e=>e.id));for(let e of i){if(e.type===`attribute`){if(e.attributeKey!==`linkHref`&&!o.has(e.attributeKey))continue;for(let t of e.range.getItems())t.hasAttribute(`linkHref`)&&a.add(t)}e.type===`insert`&&e.attributes.has(`linkHref`)&&e.position.nodeAfter&&a.add(e.position.nodeAfter)}for(let t of a){let i=[];for(let a of n.manualDecorators)if(t.hasAttribute(a.id)){for(let n=i.length-1;n>=0;n--){let o=i[n];$O(o,a)&&(e.removeAttribute(o.id,t),i.splice(n,1),r=!0)}i.push(a)}}return r})}};function dk(e,t){e.removeSelectionAttribute(`linkHref`);for(let n of t)e.removeSelectionAttribute(n)}function fk(e){return e.getDefinition(`$text`).allowAttributes.filter(e=>e.startsWith(`link`))}var pk=class extends H{constructor(e){super(e);let t=this.bindTemplate;this.set({href:void 0,withText:!0}),this.extendTemplate({attributes:{class:[`ck-link-toolbar__preview`],href:t.to(`href`),target:`_blank`,rel:`noopener noreferrer`},on:{click:t.to(e=>{this.href&&this.fire(`navigate`,this.href,()=>e.preventDefault())})}}),this.template.tag=`a`}},mk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;saveButtonView;displayedTextInputView;urlInputView;children;providersListChildren;_validators;_focusables=new pa;_focusCycler;constructor(e,t){super(e),this._validators=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.displayedTextInputView=this._createDisplayedTextInput(),this.urlInputView=this._createUrlInput(),this.providersListChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView()]),this._createFormChildren(),this.listenTo(this.providersListChildren,`add`,()=>{this.stopListening(this.providersListChildren,`add`),this.children.add(this._createProvidersListView())}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-link-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.urlInputView,this.saveButtonView,...this.providersListChildren,this.backButtonView,this.displayedTextInputView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Insert`),tooltip:!1,withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link`)});return t.children.add(this.backButtonView,0),t}_createProvidersListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-form__providers-list`]}}),e.items.bindTo(this.providersListChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createDisplayedTextInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Displayed text`),t.class=`ck-labeled-field-view_full-width`,t}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.fieldView.inputMode=`url`,t.label=e(`Link URL`),t.class=`ck-labeled-field-view_full-width`,t}_createFormChildren(){this.children.add(new MC(this.locale,{children:[this.displayedTextInputView],class:[`ck-form__row_large-top-padding`]})),this.children.add(new MC(this.locale,{children:[this.urlInputView,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`,`ck-form__row_large-bottom-padding`]}))}get url(){let{element:e}=this.urlInputView.fieldView;return e?e.value.trim():null}},hk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;listView;listChildren;emptyListInformation;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.listChildren=this.createCollection(),this.backButtonView=this._createBackButton(),this.listView=this._createListView(),this.emptyListInformation=this._createEmptyLinksListItemView(),this.children=this.createCollection([this._createHeaderView(),this.emptyListInformation]),this.set(`title`,``),this.set(`emptyListPlaceholder`,``),this.set(`hasItems`,!1),this.listenTo(this.listChildren,`change`,()=>{this.hasItems=this.listChildren.length>0}),this.on(`change:hasItems`,(e,t,n)=>{n?(this.children.remove(this.emptyListInformation),this.children.add(this.listView)):(this.children.remove(this.listView),this.children.add(this.emptyListInformation))}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-providers`],tabindex:`-1`},children:this.children})}render(){super.render(),[this.listView,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link-providers__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=new By(this.locale);return e.bind(`label`).to(this,`title`),e.children.add(this.backButtonView,0),e}_createEmptyLinksListItemView(){let e=new P(this.locale);return e.setTemplate({tag:`p`,attributes:{class:[`ck`,`ck-link__empty-list-info`]},children:[{text:this.bindTemplate.to(`emptyListPlaceholder`)}]}),e}},gk=class extends P{focusTracker=new M;keystrokes=new N;backButtonView;children;listChildren;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.listChildren=this.createCollection(),this.children=this.createCollection([this._createHeaderView(),this._createListView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-link-properties`],tabindex:`-1`},children:this.children}),this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`back`),t()})}render(){super.render(),[...this.listChildren,this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`back`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Link properties`)});return t.children.add(this.backButtonView,0),t}_createListView(){let e=new mx(this.locale);return e.extendTemplate({attributes:{class:[`ck-link__list`]}}),e.items.bindTo(this.listChildren).using(e=>{let t=new dx(this.locale);return t.children.add(e),t}),e}},_k=class extends H{arrowView;constructor(e){super(e),this.set({withText:!0}),this.arrowView=this._createArrowView(),this.extendTemplate({attributes:{class:[`ck-link__button`]}})}render(){super.render(),this.children.add(this.arrowView)}_createArrowView(){let e=new Ly;return e.content=gv,e}};const vk=`link-ui`;var yk=class extends F{toolbarView=null;formView=null;linkProviderItemsView=null;propertiesView=null;_balloon;_linksProviders=new Fi;static get requires(){return[BC,uk]}static get pluginName(){return`LinkUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=this.editor.t;this.set(`selectedLinkableText`,void 0),e.editing.view.addObserver(kp),this._balloon=e.plugins.get(BC),this._registerComponents(),this._registerEditingOpeners(),this._enableBalloonActivators(),e.conversion.for(`editingDowncast`).markerToHighlight({model:vk,view:{classes:[`ck-fake-link-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:vk,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-link-selection`,`ck-fake-link-selection_collapsed`],n),n}}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Create link`),keystroke:BO},{label:t(`Move out of a link`),keystroke:[[`arrowleft`,`arrowleft`],[`arrowright`,`arrowright`]]}]})}destroy(){super.destroy(),this.propertiesView&&this.propertiesView.destroy(),this.formView&&this.formView.destroy(),this.toolbarView&&this.toolbarView.destroy(),this.linkProviderItemsView&&this.linkProviderItemsView.destroy()}registerLinksListProvider(e){let t=this._linksProviders.filter(t=>(t.order||0)<=(e.order||0)).length;this._linksProviders.add(e,t)}_createViews(){let e=this.editor.commands.get(`link`);this.toolbarView=this._createToolbarView(),this.formView=this._createFormView(),e.manualDecorators.length&&(this.propertiesView=this._createPropertiesView()),this._enableUserBalloonInteractions()}_createToolbarView(){let e=this.editor,t=new Ox(e.locale),n=e.commands.get(`link`);t.class=`ck-link-toolbar`;let r=e.config.get(`link.toolbar`);return n.manualDecorators.length||(r=r.filter(e=>e!==`linkProperties`)),t.fillFromConfig(r,e.ui.componentFactory),t.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),t.keystrokes.set(BO,(e,t)=>{this._addFormView(),t()}),e.ui.addToolbar(t,{isContextual:!0,beforeFocus:()=>{this._getSelectedLinkElement()&&!this._isToolbarVisible&&this._showUI(!0)},afterBlur:()=>{this._hideUI(!1)}}),t}_createFormView(){let e=this.editor,t=e.locale.t,n=e.commands.get(`link`),r=e.config.get(`link.defaultProtocol`),i=new(Xa(mk))(e.locale,xk(e));return i.displayedTextInputView.bind(`isEnabled`).to(this,`selectedLinkableText`,e=>e!==void 0),i.urlInputView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`isEnabled`).to(n,`isEnabled`),i.saveButtonView.bind(`label`).to(n,`value`,e=>t(e?`Update`:`Insert`)),this.listenTo(i,`submit`,()=>{if(i.isValid()){let t=i.urlInputView.fieldView.element.value,n=YO(t,r),a=i.displayedTextInputView.fieldView.element.value;e.execute(`link`,n,this._getDecoratorSwitchesState(),a===this.selectedLinkableText?void 0:a),this._closeFormView()}}),this.listenTo(i.urlInputView,`change:errorText`,()=>{e.ui.update()}),this.listenTo(i,`cancel`,()=>{this._closeFormView()}),i.keystrokes.set(`Esc`,(e,t)=>{this._closeFormView(),t()}),i.providersListChildren.bindTo(this._linksProviders).using(e=>this._createLinksListProviderButton(e)),i}_createLinkProviderListView(e){return e.getListItems().map(({href:e,label:t,icon:n})=>{let r=new H;return r.set({label:t,icon:n,tooltip:!1,withText:!0}),r.on(`execute`,()=>{this.formView.resetFormStatus(),this.formView.urlInputView.fieldView.value=e,this.editor.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r})}_createLinkProviderItemsView(e){let t=this.editor,n=t.locale.t,r=new hk(t.locale),{emptyListPlaceholder:i,label:a}=e;return r.emptyListPlaceholder=i||n(`No links available`),r.title=a,this.listenTo(r,`cancel`,()=>{t.editing.view.focus(),this._removeLinksProviderView(),this.formView.focus()}),r}_createPropertiesView(){let e=this.editor,t=this.editor.commands.get(`link`),n=new(Xa(gk))(e.locale);return this.listenTo(n,`back`,()=>{e.editing.view.focus(),this._removePropertiesView()}),n.listChildren.bindTo(t.manualDecorators).using(n=>{let r=new mb(e.locale);return r.set({label:n.label,withText:!0}),r.bind(`isOn`).toMany([n,t],`value`,(e,t)=>t===void 0&&e===void 0?!!n.defaultValue:!!e),r.on(`execute`,()=>{e.execute(`link`,t.value,{...this._getDecoratorSwitchesState(),[n.id]:!r.isOn})}),r}),n}_getDecoratorSwitchesState(){let e=this.editor.commands.get(`link`);return Array.from(e.manualDecorators).reduce((t,n)=>{let r=e.value===void 0&&n.value===void 0?n.defaultValue:n.value;return{...t,[n.id]:!!r}},{})}_registerEditingOpeners(){this.editor.plugins.get(uk)._registerLinkOpener(e=>{let t=this._getLinkProviderLinkByHref(e);if(!t)return!1;let{item:n,provider:r}=t;return r.navigate?r.navigate(n):!1})}_registerComponents(){let e=this.editor;e.ui.componentFactory.add(`link`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:link`,()=>{let e=this._createButton(U);return e.set({role:`menuitemcheckbox`}),e}),e.ui.componentFactory.add(`linkPreview`,t=>{let n=new pk(t),r=e.config.get(`link.allowedProtocols`),i=e.commands.get(`link`),a=t.t;n.bind(`isEnabled`).to(i,`value`,e=>!!e),n.bind(`href`).to(i,`value`,e=>e&&UO(e,r));let o=e=>{if(e===``){n.label=a(`This link has no URL`),n.icon=void 0,n.tooltip=!1;return}if(!e){n.label=void 0,n.icon=void 0,n.tooltip=a(`Open link in new tab`);return}let t=this._getLinkProviderLinkByHref(e);if(t){let{label:e,tooltip:r,icon:i}=t.item;n.label=e,n.tooltip=r||!1,n.icon=i}else n.label=e,n.icon=void 0,n.tooltip=a(`Open link in new tab`)};return o(i.value),this.listenTo(i,`change:value`,(e,t,n)=>{o(n)}),this.listenTo(n,`navigate`,(e,t,n)=>{let r=this._getLinkProviderLinkByHref(t);if(!r)return;let{provider:i,item:a}=r,{navigate:o}=i;o&&o(a)&&(e.stop(),n())}),n}),e.ui.componentFactory.add(`unlink`,t=>{let n=e.commands.get(`unlink`),r=new H(t),i=t.t;return r.set({label:i(`Unlink`),icon:ky,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{e.execute(`unlink`),this._hideUI()}),r}),e.ui.componentFactory.add(`editLink`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Edit link`),icon:Rv,tooltip:!0}),r.bind(`isEnabled`).to(n),this.listenTo(r,`execute`,()=>{this._addFormView()}),r}),e.ui.componentFactory.add(`linkProperties`,t=>{let n=e.commands.get(`link`),r=new H(t),i=t.t;return r.set({label:i(`Link properties`),icon:iy,tooltip:!0}),r.bind(`isEnabled`).to(n,`isEnabled`,n,`value`,n,`manualDecorators`,(e,t,n)=>e&&!!t&&n.length>0),this.listenTo(r,`execute`,()=>{this._addPropertiesView()}),r})}_createLinksListProviderButton(e){let t=this.editor.locale,n=new _k(t);return n.set({label:e.label}),this.listenTo(n,`execute`,()=>{this._showLinksProviderView(e)}),n}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`link`),i=new e(t.locale),a=n.t;return i.set({label:a(`Link`),icon:Z_,keystroke:BO,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{t.editing.view.scrollToTheSelection(),this._showUI(!0),this._getSelectedLinkElement()&&this._addFormView()}),i}_enableBalloonActivators(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,()=>{this._getSelectedLinkElement()&&this._showUI()}),e.keystrokes.set(BO,(t,n)=>{n(),e.commands.get(`link`).isEnabled&&(e.editing.view.scrollToTheSelection(),this._showUI(!0))})}_enableUserBalloonInteractions(){this.editor.keystrokes.set(`Tab`,(e,t)=>{this._isToolbarVisible&&!this.toolbarView.focusTracker.isFocused&&(this.toolbarView.focus(),t())},{priority:`high`}),this.editor.keystrokes.set(`Esc`,(e,t)=>{this._isUIVisible&&(this._hideUI(),t())}),Ya({emitter:this.formView,activator:()=>this._isUIInPanel,contextElements:()=>[this._balloon.view.element],callback:()=>{this._hideUI(!1)}})}_addToolbarView(){this.toolbarView||this._createViews(),!this._isToolbarInPanel&&this._balloon.add({view:this.toolbarView,position:this._getBalloonPositionData(),balloonClassName:`ck-toolbar-container`})}_addFormView(){if(this.formView||this._createViews(),this._isFormInPanel)return;let e=this.editor.commands.get(`link`);this.formView.disableCssTransitions(),this.formView.resetFormStatus(),this.formView.backButtonView.isVisible=e.isEnabled&&e.value!==void 0,this._balloon.add({view:this.formView,position:this._getBalloonPositionData()}),this.selectedLinkableText=this._getSelectedLinkableText(),this.formView.displayedTextInputView.fieldView.value=this.selectedLinkableText||``,this.formView.urlInputView.fieldView.value=e.value||``,this._balloon.visibleView===this.formView&&this.formView.urlInputView.fieldView.select(),this.formView.enableCssTransitions()}_addPropertiesView(){this.propertiesView||this._createViews(),!this._arePropertiesInPanel&&(this.propertiesView.disableCssTransitions(),this._balloon.add({view:this.propertiesView,position:this._getBalloonPositionData()}),this.propertiesView.enableCssTransitions(),this.propertiesView.focus())}_showLinksProviderView(e){this.linkProviderItemsView&&this._removeLinksProviderView(),this.linkProviderItemsView=this._createLinkProviderItemsView(e),this._addLinkProviderItemsView(e)}_addLinkProviderItemsView(e){this.linkProviderItemsView.listChildren.clear(),this.linkProviderItemsView.listChildren.addMany(this._createLinkProviderListView(e)),this._balloon.add({view:this.linkProviderItemsView,position:this._getBalloonPositionData()}),this.linkProviderItemsView.focus()}_closeFormView(){let e=this.editor.commands.get(`link`);this.selectedLinkableText=void 0,e.value===void 0?this._hideUI():this._removeFormView()}_removePropertiesView(){this._arePropertiesInPanel&&this._balloon.remove(this.propertiesView)}_removeLinksProviderView(){this._isLinksListInPanel&&this._balloon.remove(this.linkProviderItemsView)}_removeFormView(e=!0){this._isFormInPanel&&(this.formView.saveButtonView.focus(),this.formView.displayedTextInputView.fieldView.reset(),this.formView.urlInputView.fieldView.reset(),this._balloon.remove(this.formView),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection())}_showUI(e=!1){this.formView||this._createViews(),this._getSelectedLinkElement()?(this._isToolbarVisible?this._addFormView():this._addToolbarView(),e&&this._balloon.showStack(`main`)):(this._showFakeVisualSelection(),this._addToolbarView(),e&&this._balloon.showStack(`main`),this._addFormView()),this._startUpdatingUI()}_hideUI(e=!0){let t=this.editor;this._isUIInPanel&&(this.stopListening(t.ui,`update`),this.stopListening(this._balloon,`change:visibleView`),e&&t.editing.view.focus(),this._removeLinksProviderView(),this._removePropertiesView(),this._removeFormView(e),this._isToolbarInPanel&&this._balloon.remove(this.toolbarView),this._hideFakeVisualSelection())}_startUpdatingUI(){let e=this.editor,t=e.editing.view.document,n=this._getSelectedLinkElement(),r=a(),i=()=>{let e=this._getSelectedLinkElement(),t=a();n&&!e||!n&&t!==r?this._hideUI():this._isUIVisible&&this._balloon.updatePosition(this._getBalloonPositionData()),n=e,r=t};function a(){return t.selection.focus.getAncestors().reverse().find(e=>e.is(`element`))}this.listenTo(e.ui,`update`,i),this.listenTo(this._balloon,`change:visibleView`,i)}get _arePropertiesInPanel(){return!!this.propertiesView&&this._balloon.hasView(this.propertiesView)}get _isLinksListInPanel(){return!!this.linkProviderItemsView&&this._balloon.hasView(this.linkProviderItemsView)}get _isFormInPanel(){return!!this.formView&&this._balloon.hasView(this.formView)}get _isToolbarInPanel(){return!!this.toolbarView&&this._balloon.hasView(this.toolbarView)}get _isPropertiesVisible(){return!!this.propertiesView&&this._balloon.visibleView===this.propertiesView}get _isFormVisible(){return!!this.formView&&this._balloon.visibleView==this.formView}get _isToolbarVisible(){return!!this.toolbarView&&this._balloon.visibleView===this.toolbarView}get _isUIInPanel(){return this._arePropertiesInPanel||this._isLinksListInPanel||this._isFormInPanel||this._isToolbarInPanel}get _isUIVisible(){return this._isPropertiesVisible||this._isLinksListInPanel||this._isFormVisible||this._isToolbarVisible}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;if(this.editor.model.markers.has(vk)){let t=this.editor.editing.mapper.markerNameToElements(vk);if(t){let n=Array.from(t),r=e.createRange(e.createPositionBefore(n[0]),e.createPositionAfter(n[n.length-1]));return{target:e.domConverter.viewRangeToDom(r)}}}return{target:()=>{let n=this._getSelectedLinkElement();return n?e.domConverter.mapViewToDom(n):e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}}_getSelectedLinkElement(){let e=this.editor.editing.view,t=e.document.selection,n=t.getSelectedElement();if(t.isCollapsed||n&&HE(n))return bk(t.getFirstPosition());{let n=t.getFirstRange().getTrimmed(),r=bk(n.start),i=bk(n.end);return!r||r!=i?null:e.createRangeIn(r).getTrimmed().isEqual(n)?r:null}}_getSelectedLinkableText(){let e=this.editor.model,t=this.editor.editing,n=this._getSelectedLinkElement();if(!n)return QO(e.document.selection.getFirstRange());let r=t.view.createRangeOn(n);return QO(t.mapper.toModelRange(r))}_getLinkProviderLinkByHref(e){if(!e)return null;for(let t of this._linksProviders){let n=t.getItem?t.getItem(e):t.getListItems().find(t=>t.href===e);if(n)return{provider:t,item:n}}return null}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(vk))t.updateMarker(vk,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(vk,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(vk)&&e.change(e=>{e.removeMarker(vk)})}};function bk(e){return e.getAncestors().find(e=>VO(e))||null}function xk(e){let t=e.t,n=e.config.get(`link.allowCreatingEmptyLinks`);return[e=>{if(!n&&!e.url.length)return t(`Link URL must not be empty.`)}]}const Sk=RegExp(`(^|\\\\s)(((?:(?:(?:https?|ftp):)?\\\\/\\\\/)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(((?!www\\\\.)|(www\\\\.))(?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.)+(?:[a-z\\\\u00a1-\\\\uffff]{2,63}))|localhost)(?::\\\\d{2,5})?(?:[/?#]\\\\S*)?)|((www.|(\\\\S+@))((?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.))+(?:[a-z\\\\u00a1-\\\\uffff]{2,63})))$`,`i`);var Ck=class extends F{static get requires(){return[hT,uk]}static get pluginName(){return`AutoLink`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.model.document.selection;e.on(`change:range`,()=>{this.isEnabled=!e.anchor.parent.is(`element`,`codeBlock`)}),this._enableTypingHandling()}afterInit(){this._enableEnterHandling(),this._enableShiftEnterHandling(),this._enablePasteLinking()}_expandLinkRange(e,t){return t.textNode&&t.textNode.hasAttribute(`linkHref`)?LT(t,`linkHref`,t.textNode.getAttribute(`linkHref`),e):null}_selectEntireLinks(e,t){let n=this.editor.model,r=n.document.selection,i=r.getFirstPosition(),a=r.getLastPosition(),o=t.getJoined(this._expandLinkRange(n,i)||t);o&&=o.getJoined(this._expandLinkRange(n,a)||t),o&&(o.start.isBefore(i)||o.end.isAfter(a))&&e.setSelection(o)}_enablePasteLinking(){let e=this.editor,t=e.model,n=t.document.selection,r=e.plugins.get(`ClipboardPipeline`),i=e.commands.get(`link`);r.on(`inputTransformation`,(e,r)=>{if(!this.isEnabled||!i.isEnabled||n.isCollapsed||r.method!==`paste`||n.rangeCount>1)return;let a=n.getFirstRange(),o=r.dataTransfer.getData(`text/plain`);if(!o)return;let s=o.match(Sk);s&&s[2]===o&&(t.change(e=>{this._selectEntireLinks(e,a),i.execute(o)}),e.stop())},{priority:`high`})}_enableTypingHandling(){let e=this.editor,t=new yT(e.model,e=>{let t=e;if(!wk(t))return;t=t.slice(0,-1),`!.:,;?`.includes(t[t.length-1])&&(t=t.slice(0,-1));let n=Tk(t);if(n)return{url:n,removedTrailingCharacters:e.length-t.length}});t.on(`matched:data`,(t,n)=>{let{batch:r,range:i,url:a,removedTrailingCharacters:o}=n;if(!r.isTyping)return;let s=i.end.getShiftedBy(-o),c=s.getShiftedBy(-a.length),l=e.model.createRange(c,s);this._applyAutoLink(a,l)}),t.bind(`isEnabled`).to(this)}_enableEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`enter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n;n=e.parent.previousSibling?.is(`element`)?t.createRangeIn(e.parent.previousSibling):t.createRange(t.createPositionAt(e.parent,0),e),this._checkAndApplyAutoLinkOnRange(n)})}_enableShiftEnterHandling(){let e=this.editor,t=e.model,n=e.commands.get(`shiftEnter`);n&&n.on(`execute`,()=>{let e=t.document.selection.getFirstPosition(),n=t.createRange(t.createPositionAt(e.parent,0),e.getShiftedBy(-1));this._checkAndApplyAutoLinkOnRange(n)})}_checkAndApplyAutoLinkOnRange(e){let t=this.editor.model,{text:n,range:r}=_T(e,t),i=Tk(n);if(i){let e=t.createRange(r.end.getShiftedBy(-i.length),r.end);this._applyAutoLink(i,e)}}_applyAutoLink(e,t){let n=this.editor.model,r=YO(e,this.editor.config.get(`link.defaultProtocol`));!this.isEnabled||!Ek(t,n)||!XO(r)||Dk(t)||this._persistAutoLink(r,t)}_persistAutoLink(e,t){let n=this.editor.model,r=this.editor.plugins.get(`Delete`);n.enqueueChange(i=>{i.setAttribute(`linkHref`,e,t),n.enqueueChange(()=>{r.requestUndoOnBackspace()})})}};function wk(e){return e.length>4&&e[e.length-1]===` `&&e[e.length-2]!==` `}function Tk(e){let t=Sk.exec(e);return t?t[2]:null}function Ek(e,t){return t.schema.checkAttributeInSelection(t.createSelection(e),`linkHref`)}function Dk(e){let t=e.start.nodeAfter;return!!t&&t.hasAttribute(`linkHref`)}var Ok=class extends F{static get requires(){return[uk,yk,Ck]}static get pluginName(){return`Link`}static get isOfficialPlugin(){return!0}},kk=class extends I{_stack=[];_createdBatches=new WeakSet;constructor(e){super(e),this.refresh(),this._isEnabledBasedOnSelection=!1,this.listenTo(e.data,`set`,(e,t)=>{t[1]={...t[1]};let n=t[1];n.batchType||={isUndoable:!1}},{priority:`high`}),this.listenTo(e.data,`set`,(e,t)=>{t[1].batchType.isUndoable||this.clearStack()})}refresh(){this.isEnabled=this._stack.length>0}get createdBatches(){return this._createdBatches}addBatch(e){let t=this.editor.model.document.selection,n={ranges:t.hasOwnRange?Array.from(t.getRanges()):[],isBackward:t.isBackward};this._stack.push({batch:e,selection:n}),this.refresh()}clearStack(){this._stack=[],this.refresh()}_restoreSelection(e,t,n){let r=this.editor.model,i=r.document,a=[],o=e.map(e=>e.getTransformedByOperations(n)),s=o.flat();for(let e of o){let t=e.filter(e=>e.root!=i.graveyard).filter(e=>!jk(e,s));t.length&&(Ak(t),a.push(t[0]))}a.length&&r.change(e=>{e.setSelection(a,{backward:t})})}_undo(e,t){let n=this.editor.model,r=n.document;this._createdBatches.add(t);let i=e.operations.slice().filter(e=>e.isDocumentOperation);i.reverse();for(let e of i){let i=e.baseVersion+1,a=Array.from(r.history.getOperations(i)),o=nf([e.getReversed()],a,{useRelations:!0,document:this.editor.model.document,padWithNoOps:!1,forceWeakRemove:!0}).operationsA;for(let i of o){let a=i.affectedSelectable;a&&!n.canEditAt(a)&&(i=new Kd(i.baseVersion)),t.addOperation(i),n.applyOperation(i),r.history.setOperationAsUndone(e,i)}}}};function Ak(e){e.sort((e,t)=>e.start.isBefore(t.start)?-1:1);for(let t=1;tt!==e&&t.containsRange(e,!0))}var Mk=class extends kk{execute(e=null){let t=e?this._stack.findIndex(t=>t.batch==e):this._stack.length-1,n=this._stack.splice(t,1)[0],r=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(r,()=>{this._undo(n.batch,r);let e=this.editor.model.document.history.getOperations(n.batch.baseVersion);this._restoreSelection(n.selection.ranges,n.selection.isBackward,e)}),this.fire(`revert`,n.batch,r),this.refresh()}},Nk=class extends kk{execute(){let e=this._stack.pop(),t=this.editor.model.createBatch({isUndo:!0});this.editor.model.enqueueChange(t,()=>{let n=e.batch.operations[e.batch.operations.length-1].baseVersion+1,r=this.editor.model.document.history.getOperations(n);this._restoreSelection(e.selection.ranges,e.selection.isBackward,r),this._undo(e.batch,t)}),this.fire(`revert`,e.batch,t),this.refresh()}},Pk=class extends F{_undoCommand;_redoCommand;_batchRegistry=new WeakSet;static get pluginName(){return`UndoEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t;this._undoCommand=new Mk(e),this._redoCommand=new Nk(e),e.commands.add(`undo`,this._undoCommand),e.commands.add(`redo`,this._redoCommand),this.listenTo(e.model,`applyOperation`,(e,t)=>{let n=t[0];if(!n.isDocumentOperation)return;let r=n.batch,i=this._redoCommand.createdBatches.has(r),a=this._undoCommand.createdBatches.has(r);this._batchRegistry.has(r)||(this._batchRegistry.add(r),r.isUndoable&&(i?this._undoCommand.addBatch(r):a||(this._undoCommand.addBatch(r),this._redoCommand.clearStack())))},{priority:`highest`}),this.listenTo(this._undoCommand,`revert`,(e,t,n)=>{this._redoCommand.addBatch(n)}),e.keystrokes.set(`CTRL+Z`,`undo`),e.keystrokes.set(`CTRL+Y`,`redo`),e.keystrokes.set(`CTRL+SHIFT+Z`,`redo`),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Undo`),keystroke:`CTRL+Z`},{label:t(`Redo`),keystroke:[[`CTRL+Y`],[`CTRL+SHIFT+Z`]]}]})}},Fk=class extends F{static get pluginName(){return`UndoUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?Oy:Jv,i=t.uiLanguageDirection==`ltr`?Jv:Oy;this._addButtonsToFactory(`undo`,n(`Undo`),`CTRL+Z`,r),this._addButtonsToFactory(`redo`,n(`Redo`),`CTRL+Y`,i)}_addButtonsToFactory(e,t,n,r){let i=this.editor;i.ui.componentFactory.add(e,()=>{let i=this._createButton(H,e,t,n,r);return i.set({tooltip:!0}),i}),i.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n,r))}_createButton(e,t,n,r,i){let a=this.editor,o=a.locale,s=a.commands.get(t),c=new e(o);return c.set({label:n,icon:i,keystroke:r}),c.bind(`isEnabled`).to(s,`isEnabled`),this.listenTo(c,`execute`,()=>{a.execute(t),a.editing.view.focus()}),c}},Ik=class extends F{static get requires(){return[Pk,Fk]}static get pluginName(){return`Undo`}static get isOfficialPlugin(){return!0}};function Lk(e){return e.createContainerElement(`span`,{class:`image-inline`},e.createEmptyElement(`img`))}function Rk(e){return e.createContainerElement(`figure`,{class:`image`},[e.createEmptyElement(`img`),e.createSlot(`children`)])}function zk(e,t){let n=e.plugins.get(`ImageUtils`),r=e.plugins.has(`ImageInlineEditing`)&&e.plugins.has(`ImageBlockEditing`);return e=>n.isInlineImageView(e)?r?Bk(e,n)===t?i(e):null:i(e):null;function i(e){let t={name:!0};return e.hasAttribute(`src`)&&(t.attributes=[`src`]),t}}function Bk(e,t){return e.getStyle(`display`)==`block`||e.findAncestor(t.isBlockImageView)?`imageBlock`:`imageInline`}function Vk(e,t,n){return!!e.findAllowedParent(t,n)||ku(t,n,e)}function Hk(e,t){let n=j(t.getSelectedBlocks());return!n||e.isObject(n)||n.isEmpty&&n.name!=`listItem`?`imageBlock`:`imageInline`}function Uk(e){return e&&e.endsWith(`px`)?parseInt(e):null}function Wk(e){let t=Uk(e.getStyle(`width`)),n=Uk(e.getStyle(`height`));return!!(t&&n)}const Gk=/^(image|image-inline)$/;var Kk=class extends F{_domEmitter=new(br());static get pluginName(){return`ImageUtils`}static get isOfficialPlugin(){return!0}isImage(e){return this.isInlineImage(e)||this.isBlockImage(e)}isInlineImageView(e){return!!e&&e.is(`element`,`img`)}isBlockImageView(e){return!!e&&e.is(`element`,`figure`)&&e.hasClass(`image`)}insertImage(e={},t=null,n=null,r={}){let i=this.editor,a=i.model,o=a.document.selection,s=Zk(i,t||o,n);e={...Object.fromEntries(o.getAttributes()),...e};for(let t in e)a.schema.checkAttribute(s,t)||delete e[t];return a.change(n=>{let{setImageSizes:i=!0}=r,o=n.createElement(s,e);return a.insertObject(o,t,null,{setSelection:`on`,findOptimalPosition:!t&&s!=`imageInline`?`auto`:void 0}),o.parent?(i&&this.setImageNaturalSizeAttributes(o),o):null})}setImageNaturalSizeAttributes(e){let t=e.getAttribute(`src`);t&&(e.getAttribute(`width`)||e.getAttribute(`height`)||this.editor.model.change(n=>{let r=new u.window.Image;this._domEmitter.listenTo(r,`load`,()=>{!e.getAttribute(`width`)&&!e.getAttribute(`height`)&&this.editor.model.enqueueChange(n.batch,t=>{t.setAttribute(`width`,r.naturalWidth,e),t.setAttribute(`height`,r.naturalHeight,e)}),this._domEmitter.stopListening(r,`load`)}),r.src=t}))}getClosestSelectedImageWidget(e){let t=e.getFirstPosition();if(!t)return null;let n=e.getSelectedElement();if(n&&this.isImageWidget(n))return n;let r=t.parent;for(;r;){if(r.is(`element`)&&this.isImageWidget(r))return r;r=r.parent}return null}getClosestSelectedImageElement(e){let t=e.getSelectedElement();return this.isImage(t)?t:e.getFirstPosition().findAncestor(`imageBlock`)}getImageWidgetFromImageView(e){return e.findAncestor({classes:Gk})}isImageAllowed(){let e=this.editor.model.document.selection;return qk(this.editor,e)&&Jk(e)}toImageWidget(e,t,n){return t.setCustomProperty(`image`,!0,e),UE(e,t,{label:()=>{let t=this.findViewImgElement(e).getAttribute(`alt`);return t?`${t} ${n}`:n}})}isImageWidget(e){return!!e.getCustomProperty(`image`)&&HE(e)}isBlockImage(e){return!!e&&e.is(`element`,`imageBlock`)}isInlineImage(e){return!!e&&e.is(`element`,`imageInline`)}findViewImgElement(e){if(this.isInlineImageView(e))return e;let t=this.editor.editing.view;for(let{item:n}of t.createRangeIn(e))if(this.isInlineImageView(n))return n}destroy(){return this._domEmitter.stopListening(),super.destroy()}};function qk(e,t){return Zk(e,t,null)==`imageBlock`?Xk(e.model,t):e.model.schema.checkChild(t.focus,`imageInline`)}function Jk(e){return[...e.focus.getAncestors()].every(e=>!e.is(`element`,`imageBlock`))}function Yk(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function Xk(e,t){let n=Yk(t.is(`position`)?e.createSelection(t):t,e);return e.schema.checkChild(n,`imageBlock`)}function Zk(e,t,n){let r=e.model.schema,i=e.config.get(`image.insert.type`);return e.plugins.has(`ImageBlockEditing`)?e.plugins.has(`ImageInlineEditing`)?n||(!Xk(e.model,t)||i===`inline`?`imageInline`:i===`auto`?t.is(`selection`)?Hk(r,t):r.checkChild(t,`imageInline`)?`imageInline`:`imageBlock`:`imageBlock`):`imageBlock`:`imageInline`}const Qk=RegExp(`^(http(s)?:\\\\/\\\\/)?[\\\\w-]+\\\\.[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]+\\\\.(jpg|jpeg|png|gif|ico|webp|JPG|JPEG|PNG|GIF|ICO|WEBP)(\\\\?[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]*)?(#[\\\\w.~:/[\\\\]@!$&'()*+,;=%-]*)?$`);var $k=class extends F{static get requires(){return[PO,Kk,Ik,hT]}static get pluginName(){return`AutoImage`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedImageBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedImageBetweenPositions(e,t){let n=this.editor,r=new xl(e,t),i=r.getWalker({ignoreElementEnd:!0}),a=Object.fromEntries(n.model.document.selection.getAttributes()),o=this.editor.plugins.get(`ImageUtils`),s=``;for(let e of i)e.item.is(`$textProxy`)&&(s+=e.item.data);if(s=s.trim(),!s.match(Qk)){r.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=setTimeout(()=>{if(!n.commands.get(`insertImage`).isEnabled){r.detach();return}n.model.change(e=>{this._timeoutId=null,e.remove(r),r.detach();let t;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert.toPosition()),o.insertImage({...a,src:s},t),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(`Delete`).requestUndoOnBackspace()},100)}},eA=class extends I{refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled&&e.hasAttribute(`alt`)?this.value=e.getAttribute(`alt`):this.value=!1}execute(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=t.model,i=n.getClosestSelectedImageElement(r.document.selection);r.change(t=>{t.setAttribute(`alt`,e.newValue,i)})}},tA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageTextAlternativeEditing`}static get isOfficialPlugin(){return!0}init(){this.editor.commands.add(`imageTextAlternative`,new eA(this.editor))}},nA=class extends P{focusTracker;keystrokes;labeledInput;backButtonView;saveButtonView;children;_focusables;_focusCycler;constructor(e){super(e),this.focusTracker=new M,this.keystrokes=new N,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-text-alternative-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Text Alternative`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Jx);return t.label=e(`Text alternative`),t.class=`ck-labeled-field-view_full-width`,t}};function rA(e){let t=e.plugins.get(`ContextualBalloon`);if(e.plugins.get(`ImageUtils`).getClosestSelectedImageWidget(e.editing.view.document.selection)){let n=iA(e);t.updatePosition(n)}}function iA(e){let t=e.editing.view,n=ab.defaultPositions,r=e.plugins.get(`ImageUtils`);return{target:t.domConverter.mapViewToDom(r.getClosestSelectedImageWidget(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}var aA=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageTextAlternativeUI`}static get isOfficialPlugin(){return!0}init(){this._createButton()}destroy(){super.destroy(),this._form&&this._form.destroy()}_createButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`imageTextAlternative`,n=>{let r=e.commands.get(`imageTextAlternative`),i=new H(n);return i.set({label:t(`Change image text alternative`),icon:Cy,tooltip:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,e=>!!e),this.listenTo(i,`execute`,()=>{this._showForm()}),i})}_createForm(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ImageUtils`);this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(nA))(e.locale),this._form.render(),this.listenTo(this._form,`submit`,()=>{e.execute(`imageTextAlternative`,{newValue:this._form.labeledInput.fieldView.element.value}),this._hideForm(!0)}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),this.listenTo(e.ui,`update`,()=>{n.getClosestSelectedImageWidget(t.selection)?this._isVisible&&rA(e):this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(){if(this._isVisible)return;this._form||this._createForm();let e=this.editor,t=e.commands.get(`imageTextAlternative`),n=this._form.labeledInput;this._form.disableCssTransitions(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(e)}),n.fieldView.value=n.fieldView.element.value=t.value||``,this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}},oA=class extends F{static get requires(){return[tA,aA]}static get pluginName(){return`ImageTextAlternative`}static get isOfficialPlugin(){return!0}};function sA(e){let t=(t,n,r)=>{if(!r.consumable.test(n.viewItem,{name:!0,classes:`image`}))return;let i=e.findViewImgElement(n.viewItem);if(!i||!r.consumable.test(i,{name:!0})||!Vk(r.schema,n.modelCursor,`imageBlock`))return;r.consumable.consume(n.viewItem,{name:!0,classes:`image`});let a=r.convertItem(i,n.modelCursor);if(!a.modelRange){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}let o=j(a.modelRange.getItems());if(!o){r.consumable.revert(n.viewItem,{name:!0,classes:`image`});return}r.convertChildren(n.viewItem,o),r.updateConversionResult(o,n)};return e=>{e.on(`element:figure`,t)}}function cA(e,t){let n=(n,r,i)=>{let a=Bk(r.viewItem,t),o=r.viewItem.hasAttribute(`src`)?{src:r.viewItem.getAttribute(`src`)}:void 0,s={name:!0,attributes:Object.keys(o||{})};if(!i.consumable.test(r.viewItem,s))return;a!=e&&!Vk(i.schema,r.modelCursor,a)&&(a=e);let c=i.writer.createElement(a,o);i.safeInsert(c,r.modelCursor)&&(i.consumable.consume(r.viewItem,s),i.convertChildren(r.viewItem,c),i.updateConversionResult(c,r))};return e=>{e.on(`element:img`,n)}}function lA(e){let t=[`srcset`,`media`,`type`,`sizes`],n=(n,r,i)=>{let a=r.viewItem;if(!i.consumable.test(a,{name:!0}))return;let o=new Map;for(let e of a.getChildren())if(e.is(`element`,`source`)){let n={};for(let r of t)e.hasAttribute(r)&&i.consumable.test(e,{attributes:r})&&(n[r]=e.getAttribute(r));Object.keys(n).length&&o.set(e,n)}let s=e.findViewImgElement(a);if(!s)return;let c=r.modelCursor.parent;if(!c.is(`element`,`imageBlock`)){let e=i.convertItem(s,r.modelCursor);if(r.modelRange=e.modelRange,r.modelCursor=e.modelCursor,!e.modelRange||(c=j(e.modelRange.getItems()),!c))return}i.consumable.consume(a,{name:!0});for(let[e,t]of o)i.consumable.consume(e,{attributes:Object.keys(t)});o.size&&i.writer.setAttribute(`sources`,Array.from(o.values()),c),i.convertChildren(a,c)};return e=>{e.on(`element:picture`,n)}}function uA(e,t){let n=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);n.attributeNewValue===null?(i.removeAttribute(`srcset`,o),i.removeAttribute(`sizes`,o)):n.attributeNewValue&&(i.setAttribute(`srcset`,n.attributeNewValue,o),i.setAttribute(`sizes`,`100vw`,o))};return e=>{e.on(`attribute:srcset:${t}`,n)}}function dA(e){let t=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a),s=n.attributeNewValue;if(s&&s.length){let e=[],t=o.parent;for(;t&&t.is(`attributeElement`);){let n=t.parent;i.unwrap(i.createRangeOn(o),t),e.unshift(t),t=n}let n=o.parent.is(`element`,`picture`),r=n?o.parent:i.createContainerElement(`picture`,null);n||i.insert(i.createPositionBefore(o),r),i.remove(i.createRangeIn(r)),i.insert(i.createPositionAt(r,`end`),s.map(e=>i.createEmptyElement(`source`,e))),i.move(i.createRangeOn(o),i.createPositionAt(r,`end`));for(let t of e)i.wrap(i.createRangeOn(r),t)}else if(o.parent.is(`element`,`picture`)){let e=o.parent;i.move(i.createRangeOn(o),i.createPositionBefore(e)),i.remove(e)}};return e=>{e.on(`attribute:sources:imageBlock`,t),e.on(`attribute:sources:imageInline`,t)}}function fA(e,t,n){let r=(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=r.writer,a=r.mapper.toViewElement(n.item),o=e.findViewImgElement(a);i.setAttribute(n.attributeKey,n.attributeNewValue||``,o)};return e=>{e.on(`attribute:${n}:${t}`,r)}}var pA=class extends kc{observe(e){this.listenTo(e,`load`,(e,t)=>{let n=t.target;this.checkShouldIgnoreEventFromTarget(n)||n.tagName==`IMG`&&this._fireEvents(t)},{useCapture:!0})}stopObserving(e){this.stopListening(e)}_fireEvents(e){this.isEnabled&&(this.document.fire(`layoutChanged`),this.document.fire(`imageLoaded`,e))}},mA=class extends I{constructor(e){super(e);let t=e.config.get(`image.insert.type`);e.plugins.has(`ImageBlockEditing`)||t===`block`&&T(`image-block-plugin-required`),e.plugins.has(`ImageInlineEditing`)||t===`inline`&&T(`image-inline-plugin-required`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`);this.isEnabled=e.isImageAllowed()}execute(e){let t=A(e.source),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((t,a)=>{let o=n.getSelectedElement();if(typeof t==`string`&&(t={src:t}),a&&o&&r.isImage(o)){let n=this.editor.model.createPositionAfter(o);r.insertImage({...t,...i},n,e.imageType)}else e.breakBlock?r.insertImage({...t,...i},n.getFirstPosition(),e.imageType):r.insertImage({...t,...i},null,e.imageType)})}},hA=class extends I{constructor(e){super(e),this.decorate(`cleanupImage`)}refresh(){let e=this.editor.plugins.get(`ImageUtils`),t=this.editor.model.document.selection.getSelectedElement();this.isEnabled=e.isImage(t),this.value=this.isEnabled?t.getAttribute(`src`):null}execute(e){let t=this.editor.model.document.selection.getSelectedElement(),n=this.editor.plugins.get(`ImageUtils`);this.editor.model.change(r=>{r.setAttribute(`src`,e.source,t),this.cleanupImage(r,t),n.setImageNaturalSizeAttributes(t)})}cleanupImage(e,t){e.removeAttribute(`srcset`,t),e.removeAttribute(`sizes`,t),e.removeAttribute(`sources`,t),e.removeAttribute(`width`,t),e.removeAttribute(`height`,t),e.removeAttribute(`alt`,t)}},gA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.conversion;e.editing.view.addObserver(pA),t.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`alt`},model:`alt`}).attributeToAttribute({view:{name:`img`,key:`srcset`},model:`srcset`});let n=new mA(e),r=new hA(e);e.commands.add(`insertImage`,n),e.commands.add(`replaceImageSource`,r),e.commands.add(`imageInsert`,n)}},_A=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageSizeAttributes`}static get isOfficialPlugin(){return!0}afterInit(){this._registerSchema(),this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`)}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&e.extend(`imageBlock`,{allowAttributes:[`width`,`height`]}),this.editor.plugins.has(`ImageInlineEditing`)&&e.extend(`imageInline`,{allowAttributes:[`width`,`height`]})}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`),r=e===`imageBlock`?`figure`:`img`;t.conversion.for(`upcast`).attributeToAttribute({view:{name:r,styles:{width:/.+/}},model:{key:`width`,value:e=>Wk(e)?Uk(e.getStyle(`width`)):null}}).attributeToAttribute({view:{name:r,key:`width`},model:`width`}).attributeToAttribute({view:{name:r,styles:{height:/.+/}},model:{key:`height`,value:e=>Wk(e)?Uk(e.getStyle(`height`)):null}}).attributeToAttribute({view:{name:r,key:`height`},model:`height`}),t.conversion.for(`editingDowncast`).add(e=>{i(e,`width`,`width`,!0,!0),i(e,`height`,`height`,!0,!0)}),t.conversion.for(`dataDowncast`).add(e=>{i(e,`width`,`width`,!1),i(e,`height`,`height`,!1)}),t.conversion.for(`upcast`).add(e=>{e.on(`element:img`,(e,t,n)=>{let r=t.viewItem.getAttribute(`width`),i=t.viewItem.getAttribute(`height`);r&&i&&n.consumable.consume(t.viewItem,{styles:[`aspect-ratio`]})})});function i(t,r,i,a,o=!1){t.on(`attribute:${r}:${e}`,(t,r,s)=>{if(!s.consumable.consume(r.item,t.name))return;let c=s.writer,l=s.mapper.toViewElement(r.item),u=n.findViewImgElement(l);r.attributeNewValue===null?c.removeAttribute(i,u):c.setAttribute(i,r.attributeNewValue,u);let d=r.item.getAttribute(`width`),f=r.item.getAttribute(`height`),p=d&&f;if(p&&o&&c.setAttribute(`loading`,`lazy`,u),r.item.hasAttribute(`sources`))return;let m=r.item.hasAttribute(`resizedWidth`);e===`imageInline`&&!m&&!a||p&&c.setStyle(`aspect-ratio`,`${d}/${f}`,u)})}}},vA=class extends I{_modelElementName;constructor(e,t){super(e),this._modelElementName=t}refresh(){let e=this.editor,t=e.model,n=t.schema,r=e.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(t.document.selection);if(!(this._modelElementName===`imageBlock`?r.isInlineImage(i):r.isBlockImage(i))){this.isEnabled=!1;return}let a=t.createPositionBefore(i);this.isEnabled=Vk(n,a,this._modelElementName)}execute(e={}){let t=this.editor,n=this.editor.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection),a=Object.fromEntries(i.getAttributes());return!a.src&&!a.uploadId?null:n.change(t=>{let{setImageSizes:o=!0}=e,s=Array.from(n.markers).filter(e=>e.getRange().containsItem(i)),c=r.insertImage(a,n.createSelection(i,`on`),this._modelElementName,{setImageSizes:o});if(!c)return null;let l=t.createRangeOn(c);for(let e of s){let n=e.getRange(),r=n.root.rootName==`$graveyard`?l:n.getJoined(l,!0);t.updateMarker(e,{range:r})}return{oldElement:i,newElement:c}})}},yA=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImagePlaceholder`}static get isOfficialPlugin(){return!0}afterInit(){this._setupSchema(),this._setupConversion(),this._setupLoadListener()}_setupSchema(){let e=this.editor.model.schema;e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`placeholder`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`placeholder`]})}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`editingDowncast`).add(e=>{e.on(`attribute:placeholder`,(e,t,r)=>{if(!r.consumable.test(t.item,e.name)||!t.item.is(`element`,`imageBlock`)&&!t.item.is(`element`,`imageInline`))return;r.consumable.consume(t.item,e.name);let i=r.writer,a=r.mapper.toViewElement(t.item),o=n.findViewImgElement(a);t.attributeNewValue?(i.addClass(`image_placeholder`,o),i.setStyle(`background-image`,`url(${t.attributeNewValue})`,o),i.setCustomProperty(`editingPipeline:doNotReuseOnce`,!0,o)):(i.removeClass(`image_placeholder`,o),i.removeStyle(`background-image`,o))})})}_setupLoadListener(){let e=this.editor,t=e.model,n=e.editing,r=n.view,i=e.plugins.get(`ImageUtils`);r.addObserver(pA),this.listenTo(r.document,`imageLoaded`,(e,a)=>{let o=r.domConverter.mapDomToView(a.target);if(!o)return;let s=i.getImageWidgetFromImageView(o);if(!s)return;let c=n.mapper.toModelElement(s);!c||!c.hasAttribute(`placeholder`)||t.enqueueChange({isUndoable:!1},e=>{e.removeAttribute(`placeholder`,c)})})}},bA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageBlockEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageBlock`,{inheritAllFrom:`$blockObject`,allowAttributes:[`alt`,`src`,`srcset`]}),this._setupConversion(),e.plugins.has(`ImageInlineEditing`)&&(e.commands.add(`imageTypeBlock`,new vA(this.editor,`imageBlock`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:t})=>Rk(t)}),n.for(`editingDowncast`).elementToStructure({model:`imageBlock`,view:(e,{writer:n})=>r.toImageWidget(Rk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageBlock`,`src`)).add(fA(r,`imageBlock`,`alt`)).add(uA(r,`imageBlock`)),n.for(`upcast`).add(cA(`imageBlock`,r)).add(sA(r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isInlineImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(l&&Vk(t.schema,l,`imageBlock`)&&Hk(t.schema,c)===`imageBlock`){let e=new Np(n.document),t=o.map(t=>e.createElement(`figure`,{class:`image`},t));a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageBlock`)&&r.setImageNaturalSizeAttributes(e)})})}},xA=class extends P{focusTracker;keystrokes;_focusables;_focusCycler;children;constructor(e,t=[]){super(e),this.focusTracker=new M,this.keystrokes=new N,this._focusables=new pa,this.children=this.createCollection(),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}});for(let e of t)this.children.add(e),this._focusables.add(e),e instanceof xb&&this._focusables.addMany(e.children);this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-form`],tabindex:-1},children:this.children})}render(){super.render(),Qa({view:this});for(let e of this._focusables)this.focusTracker.add(e.element);this.keystrokes.listenTo(this.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}},SA=class extends F{static get pluginName(){return`ImageInsertUI`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}dropdownView;_integrations=new Map;constructor(e){super(e),e.config.define(`image.insert.integrations`,[`upload`,`assetManager`,`url`])}init(){let e=this.editor,t=e.model.document.selection,n=e.plugins.get(`ImageUtils`);this.set(`isImageSelected`,!1),this.listenTo(e.model.document,`change`,()=>{this.isImageSelected=n.isImage(t.getSelectedElement())});let r=e=>this._createToolbarComponent(e);e.ui.componentFactory.add(`insertImage`,r),e.ui.componentFactory.add(`imageInsert`,r),e.ui.componentFactory.add(`menuBar:insertImage`,e=>this._createMenuBarComponent(e))}registerIntegration({name:e,observable:t,buttonViewCreator:n,formViewCreator:r,menuBarButtonViewCreator:i,requiresForm:a=!1,override:o=!1}){this._integrations.has(e)&&!o&&T(`image-insert-integration-exists`,{name:e}),this._integrations.set(e,{observable:t,buttonViewCreator:n,menuBarButtonViewCreator:i,formViewCreator:r,requiresForm:a})}_createToolbarComponent(e){let t=this.editor,n=e.t,r=this._prepareIntegrations();if(!r.length)return null;let i,a=r[0];if(r.length==1){if(!a.requiresForm)return a.buttonViewCreator(!0);i=a.buttonViewCreator(!0)}else i=new Mx(e,a.buttonViewCreator(!1)),i.tooltip=!0,i.bind(`label`).to(this,`isImageSelected`,e=>n(e?`Replace image`:`Insert image`));let o=this.dropdownView=Nx(e,i),s=r.map(({observable:e})=>typeof e==`function`?e():e);return o.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),o.once(`change:isOpen`,()=>{let e=r.flatMap(({formViewCreator:e})=>e(r.length==1)),n=new xA(t.locale,e);o.panelView.children.add(n)}),o}_createMenuBarComponent(e){let t=e.t,n=this._prepareIntegrations();if(!n.length)return null;let r=n.flatMap(({menuBarButtonViewCreator:e})=>e(n.length==1)),i=new uw(e),a=new dw(e);i.panelView.children.add(a),i.buttonView.set({icon:B_,label:t(`Image`)});for(let t of r){let n=new rC(e,i);n.children.add(t),a.items.add(n),t.delegate(`execute`).to(i)}return i}_prepareIntegrations(){let e=this.editor.config.get(`image.insert.integrations`),t=[];if(!e.length)return T(`image-insert-integrations-not-specified`),t;for(let n of e){if(!this._integrations.has(n)){[`upload`,`assetManager`,`url`].includes(n)||T(`image-insert-unknown-integration`,{item:n});continue}t.push(this._integrations.get(n))}return t.length||T(`image-insert-integrations-not-registered`),t}},CA=class extends F{static get requires(){return[bA,xD,oA,SA]}static get pluginName(){return`ImageBlock`}static get isOfficialPlugin(){return!0}},wA=class extends F{static get requires(){return[gA,_A,Kk,yA,_O]}static get pluginName(){return`ImageInlineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`imageInline`,{inheritAllFrom:`$inlineObject`,allowAttributes:[`alt`,`src`,`srcset`],disallowIn:[`caption`]}),this._setupConversion(),e.plugins.has(`ImageBlockEditing`)&&(e.commands.add(`imageTypeInline`,new vA(this.editor,`imageInline`)),this._setupClipboardIntegration())}_setupConversion(){let e=this.editor,t=e.t,n=e.conversion,r=e.plugins.get(`ImageUtils`);n.for(`dataDowncast`).elementToElement({model:`imageInline`,view:(e,{writer:t})=>t.createEmptyElement(`img`)}),n.for(`editingDowncast`).elementToStructure({model:`imageInline`,view:(e,{writer:n})=>r.toImageWidget(Lk(n),n,t(`image widget`))}),n.for(`downcast`).add(fA(r,`imageInline`,`src`)).add(fA(r,`imageInline`,`alt`)).add(uA(r,`imageInline`)),n.for(`upcast`).add(cA(`imageInline`,r))}_setupClipboardIntegration(){let e=this.editor,t=e.model,n=e.editing.view,r=e.plugins.get(`ImageUtils`),i=e.plugins.get(`ClipboardPipeline`);this.listenTo(i,`inputTransformation`,(i,a)=>{let o=Array.from(a.content.getChildren()),s;if(!o.every(r.isBlockImageView))return;s=a.targetRanges?e.editing.mapper.toModelRange(a.targetRanges[0]):t.document.selection.getFirstRange();let c=t.createSelection(s),l=c.getFirstPosition();if(!(l&&Vk(t.schema,l,`imageBlock`))||Hk(t.schema,c)===`imageInline`){let e=new Np(n.document),t=o.map(t=>t.childCount===1?(Array.from(t.getAttributes()).forEach(n=>e.setAttribute(...n,r.findViewImgElement(t))),t.getChild(0)):t);a.content=e.createDocumentFragment(t)}}),this.listenTo(i,`contentInsertion`,(e,n)=>{n.method===`paste`&&t.change(e=>{let t=e.createRangeIn(n.content);for(let e of t.getItems())e.is(`element`,`imageInline`)&&r.setImageNaturalSizeAttributes(e)})})}},TA=class extends F{static get requires(){return[wA,xD,oA,SA]}static get pluginName(){return`ImageInline`}static get isOfficialPlugin(){return!0}},EA=class extends F{static get requires(){return[CA,TA]}static get pluginName(){return`Image`}static get isOfficialPlugin(){return!0}},DA=class extends F{static get pluginName(){return`ImageCaptionUtils`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}getCaptionFromImageModelElement(e){for(let t of e.getChildren())if(t&&t.is(`element`,`caption`))return t;return null}getCaptionFromModelSelection(e){let t=this.editor.plugins.get(`ImageUtils`),n=e.getFirstPosition().findAncestor(`caption`);return n&&t.isBlockImage(n.parent)?n:null}matchImageCaptionViewElement(e){let t=this.editor.plugins.get(`ImageUtils`);return e.name==`figcaption`&&t.isBlockImageView(e.parent)?{name:!0}:null}},OA=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageCaptionUtils`),n=e.plugins.get(`ImageUtils`);if(!e.plugins.has(bA)){this.isEnabled=!1,this.value=!1;return}let r=e.model.document.selection,i=r.getSelectedElement();if(!i){let e=t.getCaptionFromModelSelection(r);this.isEnabled=!!e,this.value=!!e;return}if(this.isEnabled=n.isImage(i),this.isEnabled&&n.isInlineImage(i)){let t=e.model.createPositionBefore(i);this.isEnabled=Vk(e.model.schema,t,`imageBlock`)}this.isEnabled?this.value=!!t.getCaptionFromImageModelElement(i):this.value=!1}execute(e={}){let{focusCaptionOnShow:t}=e;this.editor.model.change(e=>{this.value?this._hideImageCaption(e):this._showImageCaption(e,t)})}_showImageCaption(e,t){let n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageCaptionEditing`),i=this.editor.plugins.get(`ImageUtils`),a=n.getSelectedElement(),o=r._getSavedCaption(a);i.isInlineImage(a)&&(this.editor.execute(`imageTypeBlock`),a=n.getSelectedElement());let s=o||e.createElement(`caption`);e.append(s,a),t&&e.setSelection(s,`in`)}_hideImageCaption(e){let t=this.editor,n=t.model.document.selection,r=t.plugins.get(`ImageCaptionEditing`),i=t.plugins.get(`ImageCaptionUtils`),a=n.getSelectedElement(),o;a?o=i.getCaptionFromImageModelElement(a):(o=i.getCaptionFromModelSelection(n),a=o.parent),r._saveCaption(a,o),e.setSelection(a,`on`),e.remove(o)}},kA=class extends F{static get requires(){return[Kk,DA]}static get pluginName(){return`ImageCaptionEditing`}static get isOfficialPlugin(){return!0}_savedCaptionsMap;constructor(e){super(e),this._savedCaptionsMap=new WeakMap}init(){let e=this.editor,t=e.model.schema;t.isRegistered(`caption`)?t.extend(`caption`,{allowIn:`imageBlock`}):t.register(`caption`,{allowIn:`imageBlock`,allowContentOf:`$block`,isLimit:!0}),e.commands.add(`toggleImageCaption`,new OA(this.editor)),this._setupConversion(),this._setupImageTypeCommandsIntegration(),this._registerCaptionReconversion()}_setupConversion(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`),i=e.t;e.conversion.for(`upcast`).elementToElement({view:e=>r.matchImageCaptionViewElement(e),model:`caption`}),e.conversion.for(`dataDowncast`).elementToElement({model:`caption`,view:(e,{writer:t})=>n.isBlockImage(e.parent)?t.createContainerElement(`figcaption`):null}),e.conversion.for(`editingDowncast`).elementToElement({model:`caption`,view:(e,{writer:r})=>{if(!n.isBlockImage(e.parent))return null;let a=r.createEditableElement(`figcaption`);r.setCustomProperty(`imageCaption`,!0,a),a.placeholder=i(`Enter image caption`),yo({view:t,element:a,keepOnFocus:!0});let o=e.parent.getAttribute(`alt`);return YE(a,r,{label:o?i(`Caption for image: %0`,[o]):i(`Caption for the image`)})}})}_setupImageTypeCommandsIntegration(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.plugins.get(`ImageCaptionUtils`),r=e.commands.get(`imageTypeInline`),i=e.commands.get(`imageTypeBlock`),a=e=>{if(!e.return)return;let{oldElement:r,newElement:i}=e.return;if(!r)return;if(t.isBlockImage(r)){let e=n.getCaptionFromImageModelElement(r);if(e){this._saveCaption(i,e);return}}let a=this._getSavedCaption(r);a&&this._saveCaption(i,a)};r&&this.listenTo(r,`execute`,a,{priority:`low`}),i&&this.listenTo(i,`execute`,a,{priority:`low`})}_getSavedCaption(e){let t=this._savedCaptionsMap.get(e);return t?Ml.fromJSON(t):null}_saveCaption(e,t){this._savedCaptionsMap.set(e,t.toJSON())}_registerCaptionReconversion(){let e=this.editor,t=e.model,n=e.plugins.get(`ImageUtils`),r=e.plugins.get(`ImageCaptionUtils`);t.document.on(`change:data`,()=>{let i=t.document.differ.getChanges();for(let t of i){if(t.attributeKey!==`alt`)continue;let i=t.range.start.nodeAfter;if(n.isBlockImage(i)){let t=r.getCaptionFromImageModelElement(i);if(!t)return;e.editing.reconvertItem(t)}}})}},AA=class extends F{static get requires(){return[DA]}static get pluginName(){return`ImageCaptionUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageCaptionUtils`),r=e.t;e.ui.componentFactory.add(`toggleImageCaption`,i=>{let a=e.commands.get(`toggleImageCaption`),o=new H(i);return o.set({icon:c_,tooltip:!0,isToggleable:!0}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.bind(`label`).to(a,`value`,e=>r(e?`Toggle caption off`:`Toggle caption on`)),this.listenTo(o,`execute`,()=>{e.execute(`toggleImageCaption`,{focusCaptionOnShow:!0});let r=n.getCaptionFromModelSelection(e.model.document.selection);if(r){let n=e.editing.mapper.toViewElement(r);t.scrollToTheSelection(),t.change(e=>{e.addClass(`image__caption_highlighted`,n)})}e.editing.view.focus()}),o})}},jA=class extends F{static get requires(){return[kA,AA]}static get pluginName(){return`ImageCaption`}static get isOfficialPlugin(){return!0}};function MA(e){let t=e.map(e=>e.replace(`+`,`\\\\+`));return RegExp(`^image\\\\/(${t.join(`|`)})$`)}function NA(e){return new Promise((t,n)=>{let r=e.getAttribute(`src`);fetch(r).then(e=>e.blob()).then(e=>{let n=FA(e,r),i=`image.${n.replace(`image/`,``)}`;t(new File([e],i,{type:n}))}).catch(e=>e&&e.name===`TypeError`?IA(r).then(t).catch(n):n(e))})}function PA(e,t){return!e.isInlineImageView(t)||!t.getAttribute(`src`)?!1:!!t.getAttribute(`src`).match(/^data:image\\/\\w+;base64,/g)||!!t.getAttribute(`src`).match(/^blob:/g)}function FA(e,t){return e.type?e.type:t.match(/data:(image\\/\\w+);base64/)?t.match(/data:(image\\/\\w+);base64/)[1].toLowerCase():`image/jpeg`}function IA(e){return LA(e).then(t=>{let n=FA(t,e),r=`image.${n.replace(`image/`,``)}`;return new File([t],r,{type:n})})}function LA(e){return new Promise((t,n)=>{let r=u.document.createElement(`img`);r.addEventListener(`load`,()=>{let e=u.document.createElement(`canvas`);e.width=r.width,e.height=r.height,e.getContext(`2d`).drawImage(r,0,0),e.toBlob(e=>e?t(e):n())}),r.addEventListener(`error`,()=>n()),r.src=e})}var RA=class extends F{static get pluginName(){return`ImageUploadUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`uploadImage`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`imageUpload`,()=>this._createToolbarButton()),e.ui.componentFactory.add(`menuBar:uploadImage`,()=>this._createMenuBarButton(`standalone`)),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`upload`,observable:()=>e.commands.get(`uploadImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`uploadImage`),i=t.config.get(`image.upload.types`),a=MA(i),o=new e(t.locale),s=n.t;return o.set({acceptedType:i.map(e=>`image/${e}`).join(`,`),allowMultipleFiles:!0,label:s(`Upload from computer`),icon:V_}),o.bind(`isEnabled`).to(r),o.on(`done`,(e,n)=>{let r=Array.from(n).filter(e=>a.test(e.type));r.length&&(t.execute(`uploadImage`,{file:r}),t.editing.view.focus())}),o}_createToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this.editor.commands.get(`uploadImage`),r=this._createButton(_b);return r.tooltip=!0,r.bind(`label`).to(t,`isImageSelected`,n,`isAccessAllowed`,(t,n)=>e(n?t?`Replace image from computer`:`Upload image from computer`:`You have no image upload permissions.`)),r}_createDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(_b);return n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace from computer`:`Upload from computer`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createButton(mw);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image from computer`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`From computer`);break}return n}},zA=class extends F{static get pluginName(){return`ImageUploadProgress`}static get isOfficialPlugin(){return!0}placeholder;constructor(e){super(e),this.placeholder=`data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==`}init(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageBlock`,this.uploadStatusChange),e.plugins.has(`ImageInlineEditing`)&&e.editing.downcastDispatcher.on(`attribute:uploadStatus:imageInline`,this.uploadStatusChange)}uploadStatusChange=(e,t,n)=>{let r=this.editor,i=t.item,a=i.getAttribute(`uploadId`);if(!n.consumable.consume(t.item,e.name))return;let o=r.plugins.get(`ImageUtils`),s=r.plugins.get(bw),c=a?t.attributeNewValue:null,l=this.placeholder,u=r.editing.mapper.toViewElement(i),d=n.writer;if(c==`reading`){BA(u,d),HA(o,l,u,d);return}if(c==`uploading`){let e=s.loaders.get(a);BA(u,d),e?(UA(u,d),WA(u,d,e,r.editing.view),ZA(o,u,d,e)):HA(o,l,u,d);return}c==`complete`&&s.loaders.get(a)&&KA(u,d,r.editing.view),GA(u,d),UA(u,d),VA(u,d)}};function BA(e,t){e.hasClass(`ck-appear`)||t.addClass(`ck-appear`,e)}function VA(e,t){t.removeClass(`ck-appear`,e)}function HA(e,t,n,r){n.hasClass(`ck-image-upload-placeholder`)||r.addClass(`ck-image-upload-placeholder`,n);let i=e.findViewImgElement(n);i.getAttribute(`src`)!==t&&r.setAttribute(`src`,t,i),YA(n,`placeholder`)||r.insert(r.createPositionAfter(i),JA(r))}function UA(e,t){e.hasClass(`ck-image-upload-placeholder`)&&t.removeClass(`ck-image-upload-placeholder`,e),XA(e,t,`placeholder`)}function WA(e,t,n,r){let i=qA(t);t.insert(t.createPositionAt(e,`end`),i),n.on(`change:uploadedPercent`,(e,t,n)=>{r.change(e=>{e.setStyle(`width`,n+`%`,i)})})}function GA(e,t){XA(e,t,`progressBar`)}function KA(e,t,n){let r=t.createUIElement(`div`,{class:`ck-image-upload-complete-icon`});t.insert(t.createPositionAt(e,`end`),r),setTimeout(()=>{n.change(e=>e.remove(e.createRangeOn(r)))},3e3)}function qA(e){let t=e.createUIElement(`div`,{class:`ck-progress-bar`});return e.setCustomProperty(`progressBar`,!0,t),t}function JA(e){let t=e.createUIElement(`div`,{class:`ck-upload-placeholder-loader`});return e.setCustomProperty(`placeholder`,!0,t),t}function YA(e,t){for(let n of e.getChildren())if(n.getCustomProperty(t))return n}function XA(e,t,n){let r=YA(e,n);r&&t.remove(t.createRangeOn(r))}function ZA(e,t,n,r){if(r.data){let i=e.findViewImgElement(t);n.setAttribute(`src`,r.data,i)}}var QA=class extends I{constructor(e){super(e),this.set(`isAccessAllowed`,!0)}refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`),n=e.model.document.selection.getSelectedElement();this.isEnabled=t.isImageAllowed()||t.isImage(n)}execute(e){let t=A(e.file),n=this.editor.model.document.selection,r=this.editor.plugins.get(`ImageUtils`),i=Object.fromEntries(n.getAttributes());t.forEach((e,t)=>{let a=n.getSelectedElement();if(t&&a&&r.isImage(a)){let t=this.editor.model.createPositionAfter(a);this._uploadImage(e,i,t)}else this._uploadImage(e,i)})}_uploadImage(e,t,n){let r=this.editor,i=r.plugins.get(bw).createLoader(e),a=r.plugins.get(`ImageUtils`);i&&a.insertImage({...t,uploadId:i.id},n)}},$A=class extends F{static get requires(){return[bw,IC,_O,Kk]}static get pluginName(){return`ImageUploadEditing`}static get isOfficialPlugin(){return!0}_uploadImageElements;_uploadedImages=new Map;constructor(e){super(e),e.config.define(`image`,{upload:{types:[`jpeg`,`png`,`gif`,`bmp`,`webp`,`tiff`]}}),this._uploadImageElements=new Map}init(){let e=this.editor,t=e.model.document,n=e.conversion,r=e.plugins.get(bw),i=e.plugins.get(`ImageUtils`),a=e.plugins.get(`ClipboardPipeline`),o=MA(e.config.get(`image.upload.types`)),s=new QA(e);e.commands.add(`uploadImage`,s),e.commands.add(`imageUpload`,s),n.for(`upcast`).attributeToAttribute({view:{name:`img`,key:`uploadId`},model:`uploadId`}).add(e=>e.on(`element:img`,(e,t,n)=>{if(!n.consumable.test(t.viewItem,{attributes:[`data-ck-upload-id`]}))return;let i=t.viewItem.getAttribute(`data-ck-upload-id`);if(!i||!t.modelRange)return;let[a]=Array.from(t.modelRange.getItems({shallow:!0})),o=r.loaders.get(i);a&&(n.writer.setAttribute(`uploadId`,i,a),n.consumable.consume(t.viewItem,{attributes:[`data-ck-upload-id`]}),o&&o.data&&n.writer.setAttribute(`uploadStatus`,o.status,a))},{priority:`low`})),this.listenTo(e.editing.view.document,`clipboardInput`,(t,n)=>{if(ej(n.dataTransfer))return;let r=Array.from(n.dataTransfer.files).filter(e=>e?o.test(e.type):!1);if(r.length&&(t.stop(),e.model.change(t=>{n.targetRanges&&t.setSelection(n.targetRanges.map(t=>e.editing.mapper.toModelRange(t))),e.execute(`uploadImage`,{file:r})}),!e.commands.get(`uploadImage`).isAccessAllowed)){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`You have no image upload permissions.`),{namespace:`image`})}}),this.listenTo(a,`inputTransformation`,(t,n)=>{let a=Array.from(e.editing.view.createRangeIn(n.content)).map(e=>e.item).filter(e=>PA(i,e)&&!e.getAttribute(`uploadProcessed`)).map(e=>({promise:NA(e),imageElement:e}));if(!a.length)return;let o=new Np(e.editing.view.document);for(let e of a){o.setAttribute(`uploadProcessed`,!0,e.imageElement);let t=r.createLoader(e.promise);t&&(o.setAttribute(`src`,``,e.imageElement),o.setAttribute(`uploadId`,t.id,e.imageElement))}}),e.editing.view.document.on(`dragover`,(e,t)=>{t.preventDefault()}),t.on(`change`,()=>{let n=t.differ.getChanges({includeChangesInGraveyard:!0}).reverse(),i=new Set;for(let t of n)if(t.type==`insert`&&t.name!=`$text`){let n=t.position.nodeAfter,a=t.position.root.rootName==`$graveyard`;for(let t of tj(e,n)){let n=t.getAttribute(`uploadId`),o=t.getAttribute(`uploadStatus`);if(!n||o==`complete`)continue;let s=r.loaders.get(n);if(!s){!a&&this._uploadedImages.has(n)&&e.model.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:this._uploadedImages.get(n),imageElement:t})});continue}a?i.has(n)||Array.from(this._uploadImageElements.get(n)).every(e=>e.root.rootName==`$graveyard`)&&s.abort():(i.add(n),this._uploadImageElements.has(n)?this._uploadImageElements.get(n).add(t):this._uploadImageElements.set(n,new Set([t])),s.status==`idle`&&this._readAndUpload(s))}}}),this.on(`uploadComplete`,(e,{imageElement:t,data:n})=>{let r=n.urls?n.urls:n;this.editor.model.change(e=>{e.setAttribute(`src`,r.default,t),this._parseAndSetSrcsetAttributeOnImage(r,t,e),i.setImageNaturalSizeAttributes(t)})},{priority:`low`})}afterInit(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageBlock`)),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`uploadId`,`uploadStatus`]}),this._registerConverters(`imageInline`))}_readAndUpload(e){let t=this.editor,n=t.model,r=t.locale.t,i=t.plugins.get(bw),a=t.plugins.get(IC),o=t.plugins.get(`ImageUtils`),s=this._uploadImageElements;return n.enqueueChange({isUndoable:!1},t=>{let n=s.get(e.id);for(let e of n)t.setAttribute(`uploadStatus`,`reading`,e)}),e.read().then(()=>{let i=e.upload();t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Uploading image`));for(let r of s.get(e.id)){if(p.isSafari){let e=t.editing.mapper.toViewElement(r),n=o.findViewImgElement(e);t.editing.view.once(`render`,()=>{if(!n.parent)return;let e=t.editing.view.domConverter.mapViewToDom(n.parent);if(!e)return;let r=e.style.display;e.style.display=`none`,e._ckHack=e.offsetHeight,e.style.display=r})}n.enqueueChange({isUndoable:!1},e=>{e.setAttribute(`uploadStatus`,`uploading`,r)})}return i}).then(i=>{n.enqueueChange({isUndoable:!1},n=>{for(let t of s.get(e.id))n.setAttribute(`uploadStatus`,`complete`,t),this.fire(`uploadComplete`,{data:i,imageElement:t});t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Image upload complete`)),this._uploadedImages.set(e.id,i)}),c()}).catch(i=>{if(t.ui&&t.ui.ariaLiveAnnouncer.announce(r(`Error during image upload`)),e.status!==`error`&&e.status!==`aborted`)throw i;e.status==`error`&&i&&a.showWarning(i,{title:r(`Upload failed`),namespace:`upload`}),n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))n.root.rootName!==`$graveyard`&&t.remove(n)}),c()});function c(){n.enqueueChange({isUndoable:!1},t=>{for(let n of s.get(e.id))t.removeAttribute(`uploadId`,n),t.removeAttribute(`uploadStatus`,n);s.delete(e.id)}),i.destroyLoader(e)}}_parseAndSetSrcsetAttributeOnImage(e,t,n){let r=0,i=Object.keys(e).filter(e=>{let t=parseInt(e,10);if(!isNaN(t))return r=Math.max(r,t),!0}).map(t=>`${e[t]} ${t}w`).join(`, `);if(i!=``){let e={srcset:i};!t.hasAttribute(`width`)&&!t.hasAttribute(`height`)&&(e.width=r),n.setAttributes(e,t)}}_registerConverters(e){let{conversion:t,plugins:n}=this.editor,r=n.get(bw),i=n.get(Kk);t.for(`dataDowncast`).add(t=>{t.on(`attribute:uploadId:${e}`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let a=r.loaders.get(t.attributeNewValue);if(!a||!a.data)return null;let o=n.mapper.toViewElement(t.item),s=i.findViewImgElement(o);s&&(n.consumable.consume(t.item,e.name),n.writer.setAttribute(`data-ck-upload-id`,a.id,s))})})}};function ej(e){return Array.from(e.types).includes(`text/html`)&&e.getData(`text/html`)!==``}function tj(e,t){let n=e.plugins.get(`ImageUtils`);return Array.from(e.model.createRangeOn(t)).filter(e=>n.isImage(e.item)).map(e=>e.item)}var nj=class extends F{static get pluginName(){return`ImageUpload`}static get isOfficialPlugin(){return!0}static get requires(){return[$A,RA,zA]}},rj=class extends P{urlInputView;keystrokes;constructor(e){super(e),this.set(`imageURLInputValue`,``),this.set(`isImageSelected`,!1),this.set(`isEnabled`,!0),this.keystrokes=new N,this.urlInputView=this._createUrlInputView(),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-image-insert-url`],tabindex:`-1`},children:[this.urlInputView,{tag:`div`,attributes:{class:[`ck`,`ck-image-insert-url__action-row`]}}]})}render(){super.render(),Qa({view:this}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy()}_createUrlInputView(){let e=this.locale,t=e.t,n=new Qb(e,Jx);return n.bind(`label`).to(this,`isImageSelected`,e=>t(e?`Update image URL`:`Insert image via URL`)),n.bind(`isEnabled`).to(this),n.fieldView.inputMode=`url`,n.fieldView.placeholder=`https://example.com/image.png`,n.fieldView.bind(`value`).to(this,`imageURLInputValue`,e=>e||``),n.fieldView.on(`input`,()=>{this.imageURLInputValue=n.fieldView.element.value.trim()}),n}focus(){this.urlInputView.focus()}},ij=class extends F{_imageInsertUI;_formView;static get pluginName(){return`ImageInsertViaUrlUI`}static get isOfficialPlugin(){return!0}static get requires(){return[SA,Qy]}init(){this.editor.ui.componentFactory.add(`insertImageViaUrl`,()=>this._createToolbarButton()),this.editor.ui.componentFactory.add(`menuBar:insertImageViaUrl`,()=>this._createMenuBarButton(`standalone`))}afterInit(){this._imageInsertUI=this.editor.plugins.get(`ImageInsertUI`),this._imageInsertUI.registerIntegration({name:`url`,observable:()=>this.editor.commands.get(`insertImage`),buttonViewCreator:()=>this._createToolbarButton(),formViewCreator:()=>this._createDropdownButton(),menuBarButtonViewCreator:e=>this._createMenuBarButton(e?`insertOnly`:`insertNested`)})}_createInsertUrlButton(e){let t=new e(this.editor.locale);return t.icon=H_,t.on(`execute`,()=>{this._showModal()}),t}_createToolbarButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.tooltip=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert image via URL`)),t}_createDropdownButton(){let e=this.editor.locale.t,t=this._createInsertUrlButton(H);return t.withText=!0,t.bind(`label`).to(this._imageInsertUI,`isImageSelected`,t=>e(t?`Update image URL`:`Insert via URL`)),t}_createMenuBarButton(e){let t=this.editor.locale.t,n=this._createInsertUrlButton(U);switch(n.withText=!0,e){case`standalone`:n.label=t(`Image via URL`);break;case`insertOnly`:n.label=t(`Image`);break;case`insertNested`:n.label=t(`Via URL`);break}return n}_createInsertUrlView(){let e=this.editor,t=e.locale,n=e.commands.get(`replaceImageSource`),r=e.commands.get(`insertImage`),i=new rj(t);return i.bind(`isImageSelected`).to(this._imageInsertUI),i.bind(`isEnabled`).toMany([r,n],`isEnabled`,(...e)=>e.some(e=>e)),i}_showModal(){let e=this.editor,t=e.locale.t,n=e.plugins.get(`Dialog`);this._formView||(this._formView=this._createInsertUrlView(),this._formView.on(`submit`,()=>this._handleSave()));let r=e.commands.get(`replaceImageSource`);this._formView.imageURLInputValue=r.value||``,n.show({id:`insertImageViaUrl`,title:t(`Image via URL`),isModal:!0,content:this._formView,actionButtons:[{label:t(`Cancel`),withText:!0,onExecute:()=>n.hide()},{label:this._imageInsertUI.isImageSelected?t(`Save`):t(`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSave()}]})}_handleSave(){this.editor.commands.get(`replaceImageSource`).isEnabled?this.editor.execute(`replaceImageSource`,{source:this._formView.imageURLInputValue}):this.editor.execute(`insertImage`,{source:this._formView.imageURLInputValue}),this.editor.plugins.get(`Dialog`).hide()}},aj=class extends F{static get pluginName(){return`ImageInsertViaUrl`}static get isOfficialPlugin(){return!0}static get requires(){return[ij,SA]}},oj=class extends F{static get pluginName(){return`ImageInsert`}static get isOfficialPlugin(){return!0}static get requires(){return[nj,aj,SA]}},sj=class extends I{refresh(){let e=this.editor,t=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);this.isEnabled=!!t,!t||!t.hasAttribute(`resizedWidth`)?this.value=null:this.value={width:t.getAttribute(`resizedWidth`),height:null}}execute(e){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`),i=r.getClosestSelectedImageElement(n.document.selection);this.value={width:e.width,height:null},i&&n.change(t=>{t.setAttribute(`resizedWidth`,e.width,i),t.removeAttribute(`resizedHeight`,i),r.setImageNaturalSizeAttributes(i)})}},cj=class extends F{static get requires(){return[Kk]}static get pluginName(){return`ImageResizeEditing`}static get licenseFeatureCode(){return`IR`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`image`,{resizeUnit:`%`,resizeOptions:[{name:`resizeImage:original`,value:null,icon:`original`},{name:`resizeImage:custom`,value:`custom`,icon:`custom`},{name:`resizeImage:25`,value:`25`,icon:`small`},{name:`resizeImage:50`,value:`50`,icon:`medium`},{name:`resizeImage:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor,t=new sj(e);this._registerConverters(`imageBlock`),this._registerConverters(`imageInline`),e.commands.add(`resizeImage`,t),e.commands.add(`imageResize`,t)}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;this.editor.plugins.has(`ImageBlockEditing`)&&(e.extend(`imageBlock`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0})),this.editor.plugins.has(`ImageInlineEditing`)&&(e.extend(`imageInline`,{allowAttributes:[`resizedWidth`,`resizedHeight`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0}),e.setAttributeProperties(`resizedHeight`,{isFormatting:!0}))}_registerConverters(e){let t=this.editor,n=t.plugins.get(`ImageUtils`);t.conversion.for(`downcast`).add(t=>t.on(`attribute:resizedWidth:${e}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(`image_resized`,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(`image_resized`,i))})),t.conversion.for(`dataDowncast`).attributeToAttribute({model:{name:e,key:`resizedHeight`},view:e=>({key:`style`,value:{height:e}})}),t.conversion.for(`editingDowncast`).add(t=>t.on(`attribute:resizedHeight:${e}`,(t,r,i)=>{if(!i.consumable.consume(r.item,t.name))return;let a=i.writer,o=i.mapper.toViewElement(r.item),s=e===`imageInline`?n.findViewImgElement(o):o;r.attributeNewValue===null?a.removeStyle(`height`,s):a.setStyle(`height`,r.attributeNewValue,s)})),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>Wk(e)?null:e.getStyle(`width`)}}),t.conversion.for(`upcast`).attributeToAttribute({view:{name:e===`imageBlock`?`figure`:`img`,styles:{height:/.+/}},model:{key:`resizedHeight`,value:e=>Wk(e)?null:e.getStyle(`height`)}}),t.conversion.for(`upcast`).add(t=>{t.on(`element:${e===`imageBlock`?`figure`:`img`}`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[`image_resized`]})})})}};const lj={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var uj=class extends F{static get requires(){return[cj]}static get pluginName(){return`ImageResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`image.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`image.resizeOptions`),n=e.commands.get(`resizeImage`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerImageResizeButton(e);this._registerImageResizeDropdown(t)}_registerImageResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeImage`),s=this._getOptionLabelValue(e,!0);if(!lj[i])throw new w(`imageresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:lj[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let e=t.plugins.get(`ImageCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,fj(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeImage`,{width:e})})}return a})}_registerImageResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value),i=i=>{let a=t.commands.get(`resizeImage`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize image`);return s.set({tooltip:c,commandValue:r.value,icon:lj.medium,isToggleable:!0,label:this._getOptionLabelValue(r),withText:!0,class:`ck-resize-image-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e&&e.width?e.width:this._getOptionLabelValue(r)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Image resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o};t.ui.componentFactory.add(`resizeImage`,i),t.ui.componentFactory.add(`imageResize`,i)}_getOptionLabelValue(e,t=!1){let n=this.editor.t;return e.label?e.label:t?dj(e)?n(`Custom image size`):e.value?n(`Resize image to %0`,e.value+this._resizeUnit):n(`Resize image to the original size`):dj(e)?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>dj(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`ImageCustomResizeUI`)&&dj(e)){let r=n.plugins.get(`ImageCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,pj(o))}else a={type:`button`,model:new RC({commandName:`resizeImage`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,fj(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function dj(e){return e.value===`custom`}function fj(e){return(t,n)=>{let r=t;return r===void 0||!n?!1:e===null&&r===e?!0:r!==null&&r.width===e}}function pj(e){return(t,n)=>!e.some(e=>fj(e)(t,n))}const mj=`image_resized`;var hj=class extends F{static get requires(){return[GD,Kk]}static get pluginName(){return`ImageResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeImage`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.editing.view,n=e.plugins.get(`ImageUtils`);t.addObserver(pA),this.listenTo(t.document,`imageLoaded`,(r,i)=>{if(!i.target.matches(`figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img`))return;let a=e.editing.view.domConverter,o=a.domToView(i.target),s=n.getImageWidgetFromImageView(o),c=this.editor.plugins.get(GD).getResizerByViewElement(s);if(c){c.redraw();return}let l=e.editing.mapper,u=l.toModelElement(s);c=e.plugins.get(GD).attachTo({unit:e.config.get(`image.resizeUnit`),modelElement:u,viewElement:s,editor:e,getHandleHost(e){return e.querySelector(`img`)},getResizeHost(){return a.mapViewToDom(l.toViewElement(u))},isCentered(){return u.getAttribute(`imageStyle`)==`alignCenter`},onCommit(n){t.change(e=>{e.removeClass(mj,s)}),e.execute(`resizeImage`,{width:n})}}),c.on(`updateSize`,()=>{s.hasClass(mj)||t.change(e=>{e.addClass(mj,s)});let e=u.name===`imageInline`?o:s;e.getStyle(`height`)&&t.change(t=>{t.removeStyle(`height`,e)})}),c.bind(`isEnabled`).to(this)})}};function gj(e){let{editing:t}=e,n=e.plugins.get(`ImageUtils`).getClosestSelectedImageElement(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function _j(e,t){let n=gj(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}var vj=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-image-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Image Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize image (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}};function yj(e,t){let n=gj(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var bj=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`ImageCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`),this._form=new(Xa(vj))(t.locale,e,xj(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeImage`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:iA(t)});let r=_j(t,e),i=r?r.value.toFixed(1):``,a=yj(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function xj(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var Sj=class extends F{static get requires(){return[cj,hj,bj,uj]}static get pluginName(){return`ImageResize`}static get isOfficialPlugin(){return!0}},Cj=class extends I{_defaultStyles;_styles;constructor(e,t){super(e),this._defaultStyles={imageBlock:!1,imageInline:!1},this._styles=new Map(t.map(e=>{if(e.isDefault)for(let t of e.modelElements)this._defaultStyles[t]=e.name;return[e.name,e]}))}refresh(){let e=this.editor.plugins.get(`ImageUtils`).getClosestSelectedImageElement(this.editor.model.document.selection);this.isEnabled=!!e,this.isEnabled?e.hasAttribute(`imageStyle`)?this.value=e.getAttribute(`imageStyle`):this.value=this._defaultStyles[e.name]:this.value=!1}isStyleEnabled(e){if(!this.isEnabled)return!1;let t=this.editor.plugins.get(`ImageUtils`),n=t.getClosestSelectedImageElement(this.editor.model.document.selection);if(!n||!this._styles.has(e))return!1;if(!this.shouldConvertImageType(e,n))return!0;let r=t.isBlockImage(n)?`imageTypeInline`:`imageTypeBlock`,i=this.editor.commands.get(r);return!!i&&i.isEnabled}execute(e={}){let t=this.editor,n=t.model,r=t.plugins.get(`ImageUtils`);e.value&&!this.isStyleEnabled(e.value)||n.change(t=>{let i=e.value,{setImageSizes:a=!0}=e,o=r.getClosestSelectedImageElement(n.document.selection);i&&this.shouldConvertImageType(i,o)&&(this.editor.execute(r.isBlockImage(o)?`imageTypeInline`:`imageTypeBlock`,{setImageSizes:a}),o=r.getClosestSelectedImageElement(n.document.selection)),!i||this._styles.get(i).isDefault?t.removeAttribute(`imageStyle`,o):t.setAttribute(`imageStyle`,i,o),a&&r.setImageNaturalSizeAttributes(o)})}shouldConvertImageType(e,t){return!this._styles.get(e).modelElements.includes(t.name)}};const wj={get inline(){return{name:`inline`,title:`In line`,icon:Cv,modelElements:[`imageInline`],isDefault:!0}},get alignLeft(){return{name:`alignLeft`,title:`Left aligned image`,icon:xv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-left`}},get alignBlockLeft(){return{name:`alignBlockLeft`,title:`Left aligned image`,icon:wv,modelElements:[`imageBlock`],className:`image-style-block-align-left`}},get alignCenter(){return{name:`alignCenter`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],className:`image-style-align-center`}},get alignRight(){return{name:`alignRight`,title:`Right aligned image`,icon:Sv,modelElements:[`imageBlock`,`imageInline`],className:`image-style-align-right`}},get alignBlockRight(){return{name:`alignBlockRight`,title:`Right aligned image`,icon:Tv,modelElements:[`imageBlock`],className:`image-style-block-align-right`}},get block(){return{name:`block`,title:`Centered image`,icon:yv,modelElements:[`imageBlock`],isDefault:!0}},get side(){return{name:`side`,title:`Side image`,icon:Sv,modelElements:[`imageBlock`],className:`image-style-side`}}},Tj={full:bv,left:wv,right:Tv,center:yv,inlineLeft:xv,inlineRight:Sv,inline:Cv},Ej=[{name:`imageStyle:wrapText`,title:`Wrap text`,defaultItem:`imageStyle:alignLeft`,items:[`imageStyle:alignLeft`,`imageStyle:alignRight`]},{name:`imageStyle:breakText`,title:`Break text`,defaultItem:`imageStyle:block`,items:[`imageStyle:alignBlockLeft`,`imageStyle:block`,`imageStyle:alignBlockRight`]}];function Dj(e,t){for(let n of t)if(n.name===e)return n}function Oj(e){return(e.configuredStyles.options||[]).map(e=>jj(e)).filter(t=>Mj(t,e))}function kj(e,t){return e&&t?{options:[`inline`,`alignLeft`,`alignRight`,`alignCenter`,`alignBlockLeft`,`alignBlockRight`,`block`,`side`]}:e?{options:[`block`,`side`]}:t?{options:[`inline`,`alignLeft`,`alignRight`]}:{}}function Aj(e){return e.has(`ImageBlockEditing`)&&e.has(`ImageInlineEditing`)?[...Ej]:[]}function jj(e){return e=typeof e==`string`?wj[e]?{...wj[e]}:{name:e}:Nj(wj[e.name],e),typeof e.icon==`string`&&(e.icon=Tj[e.icon]||e.icon),e}function Mj(e,{isBlockPluginLoaded:t,isInlinePluginLoaded:n}){let{modelElements:r,name:i}=e;if(!r||!r.length||!i)return Pj({style:e}),!1;{let i=[t?`imageBlock`:null,n?`imageInline`:null];if(!r.some(e=>i.includes(e)))return T(`image-style-missing-dependency`,{style:e,missingPlugins:r.map(e=>e===`imageBlock`?`ImageBlockEditing`:`ImageInlineEditing`)}),!1}return!0}function Nj(e,t){let n={...t};for(let r in e)Object.prototype.hasOwnProperty.call(t,r)||(n[r]=e[r]);return n}function Pj(e){T(`image-style-configuration-definition-invalid`,e)}const Fj={normalizeStyles:Oj,getDefaultStylesConfiguration:kj,getDefaultDropdownDefinitions:Aj,warnInvalidStyle:Pj};function Ij(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let i=Dj(n.attributeNewValue,e),a=Dj(n.attributeOldValue,e),o=r.mapper.toViewElement(n.item),s=r.writer;a&&s.removeClass(a.className,o),i&&s.addClass(i.className,o)}}function Lj(e){let t={imageInline:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageInline`)),imageBlock:e.filter(e=>!e.isDefault&&e.modelElements.includes(`imageBlock`))};return(n,r,i)=>{if(!r.modelRange)return;let a=r.viewItem,o=j(r.modelRange.getItems());if(o&&i.schema.checkAttribute(o,`imageStyle`)){for(let e of t[o.name])i.consumable.consume(a,{classes:e.className})&&i.writer.setAttribute(`imageStyle`,e.name,o);Rj(i,a,o,e)}}}function Rj(e,t,n,r){if(!e.consumable.test(t,{styles:[`float`]}))return;let i=null;switch(t.getStyle(`float`)){case`left`:i=`alignLeft`;break;case`right`:i=`alignRight`;break}if(!i)return;let a=Dj(i,r);if(!a)return;let o=wj[a.name];$t(a,o)&&(e.writer.setAttribute(`imageStyle`,i,n),e.consumable.consume(t,{styles:[`float`]}))}var zj=class extends F{static get pluginName(){return`ImageStyleEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Kk]}normalizedStyles;init(){let e=this.editor,t=e.plugins.has(`ImageBlockEditing`),n=e.plugins.has(`ImageInlineEditing`);e.config.define(`image.styles`,Fj.getDefaultStylesConfiguration(t,n)),this.normalizedStyles=Fj.normalizeStyles({configuredStyles:e.config.get(`image.styles`),isBlockPluginLoaded:t,isInlinePluginLoaded:n}),this._setupConversion(t,n),this._setupPostFixer(),e.commands.add(`imageStyle`,new Cj(e,this.normalizedStyles))}_setupConversion(e,t){let n=this.editor,r=n.model.schema,i=Ij(this.normalizedStyles),a=Lj(this.normalizedStyles);n.editing.downcastDispatcher.on(`attribute:imageStyle`,i),n.data.downcastDispatcher.on(`attribute:imageStyle`,i),e&&(r.extend(`imageBlock`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0,blockAlignment:Bj(this.normalizedStyles)}),n.data.upcastDispatcher.on(`element:figure`,a,{priority:`low`})),t&&(r.extend(`imageInline`,{allowAttributes:`imageStyle`}),r.setAttributeProperties(`imageStyle`,{isFormatting:!0}),n.data.upcastDispatcher.on(`element:img`,a,{priority:`low`}))}_setupPostFixer(){let e=this.editor,t=e.model.document,n=e.plugins.get(Kk),r=new Map(this.normalizedStyles.map(e=>[e.name,e]));t.registerPostFixer(e=>{let i=!1;for(let a of t.differ.getChanges())if(a.type==`insert`||a.type==`attribute`&&a.attributeKey==`imageStyle`){let t=a.type==`insert`?a.position.nodeAfter:a.range.start.nodeAfter;if(t&&t.is(`element`,`paragraph`)&&t.childCount>0&&(t=t.getChild(0)),!n.isImage(t))continue;let o=t.getAttribute(`imageStyle`);if(!o)continue;let s=r.get(o);(!s||!s.modelElements.includes(t.name))&&(e.removeAttribute(`imageStyle`,t),i=!0)}return i})}};function Bj(e){let t=(...t)=>{let n=t.map(t=>Dj(t,e)).find(e=>e?.modelElements.includes(`imageBlock`));if(n)return{isDefault:!!n.isDefault,value:n.name}};return Object.fromEntries(Object.entries({left:[`alignBlockLeft`,`alignLeft`],right:[`alignBlockRight`,`alignRight`],center:[`block`,`alignCenter`]}).map(([e,n])=>[e,t(...n)]).filter(([,e])=>e!==void 0))}var Vj=class extends F{static get requires(){return[zj]}static get pluginName(){return`ImageStyleUI`}static get isOfficialPlugin(){return!0}get localizedDefaultStylesTitles(){let e=this.editor.t;return{\"Wrap text\":e(`Wrap text`),\"Break text\":e(`Break text`),\"In line\":e(`In line`),\"Full size image\":e(`Full size image`),\"Side image\":e(`Side image`),\"Left aligned image\":e(`Left aligned image`),\"Centered image\":e(`Centered image`),\"Right aligned image\":e(`Right aligned image`)}}init(){let e=this.editor.plugins,t=this.editor.config.get(`image.toolbar`)||[],n=Hj(e.get(`ImageStyleEditing`).normalizedStyles,this.localizedDefaultStylesTitles);for(let e of n)this._createButton(e);let r=Hj([...t.filter(Xe),...Fj.getDefaultDropdownDefinitions(e)],this.localizedDefaultStylesTitles);for(let e of r)this._createDropdown(e,n)}_createDropdown(e,t){let n=this.editor.ui.componentFactory;n.add(e.name,r=>{let i,{defaultItem:a,items:o,title:s}=e,c=o.filter(e=>t.find(({name:t})=>Uj(t)===e)).map(e=>{let t=n.create(e);return e===a&&(i=t),t});o.length!==c.length&&Fj.warnInvalidStyle({dropdown:e});let l=Nx(r,Mx),u=l.buttonView,d=u.arrowView;return Fx(l,c,{enableActiveItemFocusOnDropdownOpen:!0}),u.set({label:Wj(s,i.label),class:null,tooltip:!0}),d.unbind(`label`),d.set({label:s}),u.bind(`icon`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return t<0?i.icon:c[t].icon}),u.bind(`label`).toMany(c,`isOn`,(...e)=>{let t=e.findIndex(en);return Wj(s,t<0?i.label:c[t].label)}),u.bind(`isOn`).toMany(c,`isOn`,(...e)=>e.some(en)),u.bind(`class`).toMany(c,`isOn`,(...e)=>e.some(en)?`ck-splitbutton_flatten`:void 0),u.on(`execute`,()=>{c.some(({isOn:e})=>e)?l.isOpen=!l.isOpen:i.fire(`execute`)}),l.bind(`isEnabled`).toMany(c,`isEnabled`,(...e)=>e.some(en)),this.listenTo(l,`execute`,()=>{this.editor.editing.view.focus()}),l})}_createButton(e){let t=e.name;this.editor.ui.componentFactory.add(Uj(t),n=>{let r=this.editor,i=r.commands.get(`imageStyle`),a=new H(n);a.set({label:e.title,icon:e.icon,tooltip:!0,isToggleable:!0});let o=[i],s=r.commands.get(`imageTypeBlock`),c=r.commands.get(`imageTypeInline`);return s&&o.push(s),c&&o.push(c),a.bind(`isEnabled`).toMany(o,`isEnabled`,()=>i.isStyleEnabled(t)),a.bind(`isOn`).to(i,`value`,e=>e===t),a.on(`execute`,this._executeCommand.bind(this,t)),a})}_executeCommand(e){this.editor.execute(`imageStyle`,{value:e}),this.editor.editing.view.focus()}};function Hj(e,t){for(let n of e)t[n.title]&&(n.title=t[n.title]);return e}function Uj(e){return`imageStyle:${e}`}function Wj(e,t){return(e?e+`: `:``)+t}var Gj=class extends F{static get requires(){return[zj,Vj]}static get pluginName(){return`ImageStyle`}static get isOfficialPlugin(){return!0}},Kj=class extends F{static get requires(){return[kD,Kk]}static get pluginName(){return`ImageToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t,n=e.plugins.get(kD),r=e.plugins.get(`ImageUtils`);n.register(`image`,{ariaLabel:t(`Image toolbar`),items:qj(e.config.get(`image.toolbar`)||[]),getRelatedElement:e=>r.getClosestSelectedImageWidget(e)})}};function qj(e){return e.map(e=>Xe(e)?e.name:e)}var Jj=class extends F{static get requires(){return[gA,Kk]}static get pluginName(){return`PictureEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor;e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:[`sources`]}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:[`sources`]}),this._setupConversion(),this._setupImageUploadEditingIntegration()}_setupConversion(){let e=this.editor,t=e.conversion,n=e.plugins.get(`ImageUtils`);t.for(`upcast`).add(lA(n)),t.for(`downcast`).add(dA(n))}_setupImageUploadEditingIntegration(){let e=this.editor;if(!e.plugins.has(`ImageUploadEditing`))return;let t=e.plugins.get(`ImageUploadEditing`);this.listenTo(t,`uploadComplete`,(t,{imageElement:n,data:r})=>{let i=r.sources;i&&e.model.change(e=>{e.setAttributes({sources:i},n)})})}},Yj=class extends F{static get requires(){return[gA,Kk,uk]}static get pluginName(){return`LinkImageEditing`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.model.schema;e.plugins.has(`ImageBlockEditing`)&&t.extend(`imageBlock`,{allowAttributes:[`linkHref`]}),e.conversion.for(`upcast`).add(Xj(e)),e.conversion.for(`downcast`).add(Zj(e)),this._enableAutomaticDecorators(),this._enableManualDecorators()}_enableAutomaticDecorators(){let e=this.editor,t=e.commands.get(`link`).automaticDecorators;t.length&&e.conversion.for(`downcast`).add(t.getDispatcherForLinkedImage())}_enableManualDecorators(){let e=this.editor,t=e.commands.get(`link`);for(let n of t.manualDecorators)e.plugins.has(`ImageBlockEditing`)&&e.model.schema.extend(`imageBlock`,{allowAttributes:n.id}),e.plugins.has(`ImageInlineEditing`)&&e.model.schema.extend(`imageInline`,{allowAttributes:n.id}),e.conversion.for(`downcast`).add(Qj(n)),e.conversion.for(`upcast`).add($j(e,n))}};function Xj(e){let t=e.plugins.has(`ImageInlineEditing`),n=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,r,i)=>{let a=r.viewItem,o=n.findViewImgElement(a);if(!o)return;let s=o.findAncestor(e=>n.isBlockImageView(e));if(t&&!s)return;let c={attributes:[`href`]};if(!i.consumable.test(a,c))return;let l=a.getAttribute(`href`),u=r.modelCursor.parent;u.is(`element`,`imageBlock`)&&(i.writer.setAttribute(`linkHref`,l,u),i.consumable.consume(a,c))},{priority:`high`})}}function Zj(e){let t=e.plugins.get(`ImageUtils`);return e=>{e.on(`attribute:linkHref:imageBlock`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=Array.from(i.getChildren()).find(e=>e.is(`element`,`a`)),s=t.findViewImgElement(i),c=s.parent.is(`element`,`picture`)?s.parent:s;if(o)n.attributeNewValue?a.setAttribute(`href`,n.attributeNewValue,o):(a.move(a.createRangeOn(c),a.createPositionAt(i,0)),a.remove(o));else{let e=a.createContainerElement(`a`,{href:n.attributeNewValue});a.insert(a.createPositionAt(i,0),e),a.move(a.createRangeOn(c),a.createPositionAt(e,0))}},{priority:`high`})}}function Qj(e){return t=>{let n=t=>(n,r,i)=>{let a=i.mapper.toViewElement(r.item),o=Array.from(a.getChildren()).find(e=>e.is(`element`,`a`));if(o){if(!t&&r.attributeOldValue){for(let[t,n]of Ui(e.attributes))i.writer.removeAttribute(t,n,o);e.classes&&i.writer.removeClass(e.classes,o);for(let t in e.styles)i.writer.removeStyle(t,o)}if(t&&r.attributeNewValue){for(let[t,n]of Ui(e.attributes))i.writer.setAttribute(t,n,!1,o);e.classes&&i.writer.addClass(e.classes,o);for(let t in e.styles)i.writer.setStyle(t,e.styles[t],o)}}};t.on(`attribute:${e.id}:imageBlock`,n(!1),{priority:ge.high-1}),t.on(`attribute:${e.id}:imageBlock`,n(!0),{priority:ge.high-2})}}function $j(e,t){let n=e.plugins.has(`ImageInlineEditing`),r=e.plugins.get(`ImageUtils`);return e=>{e.on(`element:a`,(e,i,a)=>{let o=i.viewItem,s=r.findViewImgElement(o);if(!s)return;let c=s.findAncestor(e=>r.isBlockImageView(e));if(n&&!c)return;let l=new Po(t._createPattern()).match(o);if(!l||!a.consumable.test(o,l.match))return;let u=i.modelCursor.parent;u?.is(`element`,`imageBlock`)&&(a.writer.setAttribute(t.id,!0,u),a.consumable.consume(o,l.match))},{priority:`high`})}}var eM=class extends F{static get requires(){return[uk,yk,bA]}static get pluginName(){return`LinkImageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.editing.view.document;this.listenTo(t,`click`,(t,n)=>{this._isSelectedLinkedImage(e.model.document.selection)&&(n.preventDefault(),t.stop())},{priority:`high`}),this._createToolbarLinkImageButton()}_createToolbarLinkImageButton(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`linkImage`,n=>{let r=new H(n),i=e.plugins.get(`LinkUI`),a=e.commands.get(`link`);return r.set({isEnabled:!0,label:t(`Link image`),icon:Z_,keystroke:BO,tooltip:!0,isToggleable:!0}),r.bind(`isEnabled`).to(a,`isEnabled`),r.bind(`isOn`).to(a,`value`,e=>!!e),this.listenTo(r,`execute`,()=>{this._isSelectedLinkedImage(e.model.document.selection)?i._addToolbarView():i._showUI(!0)}),r})}_isSelectedLinkedImage(e){let t=e.getSelectedElement();return this.editor.plugins.get(`ImageUtils`).isImage(t)&&t.hasAttribute(`linkHref`)}},tM=class extends F{static get requires(){return[Yj,eM]}static get pluginName(){return`LinkImage`}static get isOfficialPlugin(){return!0}},nM=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~`.split(``),rM=e=>{let t=0;for(let n=0;n{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4},aM=e=>{let t=Math.max(0,Math.min(1,e));return Math.trunc(t<=.0031308?t*12.92*255+.5:(1.055*t**.4166666666666667-.055)*255+.5)},oM=e=>e<0?-1:1,sM=(e,t)=>oM(e)*Math.abs(e)**+t,cM=class extends Error{constructor(e){super(e),this.name=`ValidationError`,this.message=e}},lM=e=>{if(!e||e.length<6)throw new cM(`The blurhash string must be at least 6 characters`);let t=rM(e[0]),n=Math.floor(t/9)+1,r=t%9+1;if(e.length!==4+2*r*n)throw new cM(`blurhash length mismatch: length is ${e.length} but it should be ${4+2*r*n}`)},uM=e=>{let t=e>>16,n=e>>8&255,r=e&255;return[iM(t),iM(n),iM(r)]},dM=(e,t)=>{let n=Math.floor(e/361),r=Math.floor(e/19)%19,i=e%19;return[sM((n-9)/9,2)*t,sM((r-9)/9,2)*t,sM((i-9)/9,2)*t]},fM=(e,t,n,r)=>{lM(e),r|=1;let i=rM(e[0]),a=Math.floor(i/9)+1,o=i%9+1,s=(rM(e[1])+1)/166,c=Array(o*a);for(let t=0;tn&&(n=i),t.push(`${e[r]} ${r}w`))}let r=[{srcset:t.join(`,`),sizes:`(max-width: ${n}px) 100vw, ${n}px`,type:`image/webp`}];return{imageFallbackUrl:e.default,imageSources:r}}function mM(e,t){let[,n]=e.value.split(`.`),r=JSON.parse(atob(n)),i=r.auth?.ckbox?.workspaces||[r.aud];return t?r.auth?.ckbox?.role==`superadmin`||i.includes(t)?t:null:i[0]}function hM(e){if(e)try{let t=`32px`,n=document.createElement(`canvas`);n.setAttribute(`width`,t),n.setAttribute(`height`,t);let r=n.getContext(`2d`);if(!r)return;let i=r.createImageData(32,32),a=fM(e,32,32);return i.data.set(a),r.putImageData(i,0,0),n.toDataURL()}catch{return}}function gM({url:e,method:t=`GET`,data:n,onUploadProgress:r,signal:i,authorization:a}){let o=new XMLHttpRequest;o.open(t,e.toString()),o.setRequestHeader(`Authorization`,a),o.setRequestHeader(`CKBox-Version`,`CKEditor 5`),o.responseType=`json`;let s=()=>{o.abort()};return new Promise((e,t)=>{i.throwIfAborted(),i.addEventListener(`abort`,s),o.addEventListener(`loadstart`,()=>{i.addEventListener(`abort`,s)}),o.addEventListener(`loadend`,()=>{i.removeEventListener(`abort`,s)}),o.addEventListener(`error`,()=>{t()}),o.addEventListener(`abort`,()=>{t()}),o.addEventListener(`load`,()=>{let n=o.response;if(!n||n.statusCode>=400)return t(n&&n.message);e(n)}),r&&o.upload.addEventListener(`progress`,e=>{r(e)}),o.send(n)})}const _M={\"image/gif\":`gif`,\"image/jpeg\":`jpg`,\"image/png\":`png`,\"image/webp\":`webp`,\"image/bmp\":`bmp`,\"image/tiff\":`tiff`};function vM(e){return _M[e]}async function yM(e,t){try{let n=await fetch(e,{method:`HEAD`,cache:`force-cache`,...t});return n.ok&&n.headers.get(`content-type`)||``}catch{return``}}function bM(e){return e.name.match(/\\.(?[^.]+)$/).groups.ext.toLowerCase()}var xM=class extends I{_chosenAssets=new Set;_wrapper=null;constructor(e){super(e),this._initListeners()}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(){this.fire(`ckbox:open`)}_getValue(){return this._wrapper!==null}_checkEnabled(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);return!(!e.isEnabled&&!t.isEnabled)}_prepareOptions(){let e=this.editor.config.get(`ckbox`),t=e.dialog,n=e.categories,r=e.view,i=e.upload;return{theme:e.theme,language:e.language,tokenUrl:e.tokenUrl,serviceOrigin:e.serviceOrigin,forceDemoLabel:e.forceDemoLabel,choosableFileExtensions:e.choosableFileExtensions,assets:{onChoose:e=>this.fire(`ckbox:choose`,e)},dialog:{onClose:()=>this.fire(`ckbox:close`),width:t&&t.width,height:t&&t.height},categories:n&&{icons:n.icons},view:r&&{openLastView:r.openLastView,startupFolderId:r.startupFolderId,startupCategoryId:r.startupCategoryId,hideMaximizeButton:r.hideMaximizeButton},upload:i&&{componentsHideTimeout:i.componentsHideTimeout,dialogMinimizeTimeout:i.dialogMinimizeTimeout}}}_initListeners(){let e=this.editor,t=e.model,n=!e.config.get(`ckbox.ignoreDataId`),r=e.config.get(`ckbox.downloadableFiles`);this.on(`ckbox`,()=>{this.refresh()},{priority:`low`}),this.on(`ckbox:open`,()=>{!this.isEnabled||this.value||(this._wrapper=mr(document,`div`,{class:`ck ckbox-wrapper`}),document.body.appendChild(this._wrapper),window.CKBox.mount(this._wrapper,this._prepareOptions()))}),this.on(`ckbox:close`,()=>{this.value&&(this._wrapper.remove(),this._wrapper=null,e.editing.view.focus())}),this.on(`ckbox:choose`,(i,a)=>{if(!this.isEnabled)return;let o=e.commands.get(`insertImage`),s=e.commands.get(`link`),c=SM({assets:a,downloadableFilesConfig:r,isImageAllowed:o.isEnabled,isLinkAllowed:s.isEnabled}),l=c.length;l!==0&&(t.change(e=>{for(let t of c){let r=t===c[l-1],i=l===1;this._insertAsset(t,r,e,i),n&&(setTimeout(()=>this._chosenAssets.delete(t),1e3),this._chosenAssets.add(t))}}),e.editing.view.focus())}),this.listenTo(e,`destroy`,()=>{this.fire(`ckbox:close`),this._chosenAssets.clear()})}_insertAsset(e,t,n,r){let i=this.editor.model.document.selection;n.removeSelectionAttribute(`linkHref`),e.type===`image`?this._insertImage(e):this._insertLink(e,n,r),t||n.setSelection(i.getLastPosition())}_insertImage(e){let t=this.editor,{imageFallbackUrl:n,imageSources:r,imageTextAlternative:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=e.attributes;t.execute(`insertImage`,{source:{src:n,sources:r,alt:i,width:a,height:o,...s?{placeholder:s}:null}})}_insertLink(e,t,n){let r=this.editor,i=r.model,a=i.document.selection,{linkName:o,linkHref:s}=e.attributes;if(a.isCollapsed){let e=Ui(a.getAttributes()),c=t.createText(o,e);if(!n){let e=a.getLastPosition(),n=e.parent;n.name===`paragraph`&&n.isEmpty||r.execute(`insertParagraph`,{position:e});let o=i.insertContent(c);t.setSelection(o),r.execute(`link`,s);return}let l=i.insertContent(c);t.setSelection(l)}r.execute(`link`,s)}};function SM({downloadableFilesConfig:e,assets:t,isImageAllowed:n,isLinkAllowed:r}){return t.map(t=>TM(t)?{id:t.data.id,type:`image`,attributes:CM(t)}:{id:t.data.id,type:`link`,attributes:wM(t,e)}).filter(e=>e.type===`image`?n:r)}function CM(e){let{imageFallbackUrl:t,imageSources:n}=pM(e.data.imageUrls),{description:r,width:i,height:a,blurHash:o}=e.data.metadata,s=hM(o);return{imageFallbackUrl:t,imageSources:n,imageTextAlternative:r||``,imageWidth:i,imageHeight:a,...s?{imagePlaceholder:s}:null}}function wM(e,t){return{linkName:e.data.name,linkHref:EM(e,t)}}function TM(e){let t=e.data.metadata;return t?t.width&&t.height:!1}function EM(e,t){let n=new URL(e.data.url);return DM(e,t)&&n.searchParams.set(`download`,`true`),n.toString()}function DM(e,t){return typeof t==`function`?t(e):!0}const OM={autoRefresh:!0},kM=36e5,AM=D();var jM=class e extends AM{_refresh;_options;_tokenRefreshTimeout;_isDestroyed=!1;constructor(e,t={}){if(super(),!e)throw new w(`token-missing-token-url`,this);t.initValue&&this._validateTokenValue(t.initValue),this.set(`value`,t.initValue),typeof e==`function`?this._refresh=e:this._refresh=()=>MM(e),this._options={...OM,...t}}init(){return new Promise((e,t)=>{if(!this.value){this.refreshToken().then(e).catch(t);return}this._options.autoRefresh&&this._registerRefreshTokenTimeout(),e(this)})}refreshToken(){let e=this._options.autoRefresh;return this._refresh().then(t=>(this._validateTokenValue(t),this.set(`value`,t),e&&this._registerRefreshTokenTimeout(),this)).catch(t=>{throw T(`token-refresh-failed`,{autoRefresh:e}),e&&this._registerRefreshTokenTimeout(5e3),t})}destroy(){this._isDestroyed=!0,clearTimeout(this._tokenRefreshTimeout)}_validateTokenValue(e){let t=typeof e==`string`,n=!/^\".*\"$/.test(e),r=t&&e.split(`.`).length===3;if(!(n&&r))throw new w(`token-not-in-jwt-format`,this)}_registerRefreshTokenTimeout(e){if(clearTimeout(this._tokenRefreshTimeout),this._isDestroyed)return;let t=e||this._getTokenRefreshTimeoutTime();this._tokenRefreshTimeout=setTimeout(()=>{this.refreshToken()},t)}_getTokenRefreshTimeoutTime(){try{let[,e]=this.value.split(`.`),{exp:t}=JSON.parse(atob(e));return t?(t>2147483647&&console.warn(`Token expiration time exceeds 32-bit integer range. This might cause unpredictable token refresh timing. Token expiration time should always be provided in seconds.`,{tokenExpireTime:t}),Math.floor((t*1e3-Date.now())/2)):kM}catch{return kM}}static create(t,n={}){return new e(t,n).init()}};function MM(e){return new Promise((t,n)=>{let r=new XMLHttpRequest;r.open(`GET`,e),r.addEventListener(`load`,()=>{let e=r.status,i=r.response;return e<200||e>299?n(new w(`token-cannot-download-new-token`,null)):t(i)}),r.addEventListener(`error`,()=>n(Error(`Network Error`))),r.addEventListener(`abort`,()=>n(Error(`Abort`))),r.send()})}const NM=/^data:(\\S*?);base64,/,PM=E();var FM=class extends PM{file;xhr;_token;_apiAddress;constructor(e,t,n){if(super(),!e)throw new w(`fileuploader-missing-file`,null);if(!t)throw new w(`fileuploader-missing-token`,null);if(!n)throw new w(`fileuploader-missing-api-address`,null);this.file=LM(e)?IM(e):e,this._token=t,this._apiAddress=n}onProgress(e){return this.on(`progress`,(t,n)=>e(n)),this}onError(e){return this.once(`error`,(t,n)=>e(n)),this}abort(){this.xhr.abort()}send(){return this._prepareRequest(),this._attachXHRListeners(),this._sendRequest()}_prepareRequest(){let e=new XMLHttpRequest;e.open(`POST`,this._apiAddress),e.setRequestHeader(`Authorization`,this._token.value),e.responseType=`json`,this.xhr=e}_attachXHRListeners(){let e=this.xhr,t=e=>()=>this.fire(`error`,e);e.addEventListener(`error`,t(`Network Error`)),e.addEventListener(`abort`,t(`Abort`)),e.upload&&e.upload.addEventListener(`progress`,e=>{e.lengthComputable&&this.fire(`progress`,{total:e.total,uploaded:e.loaded})}),e.addEventListener(`load`,()=>{let t=e.status,n=e.response;if(t<200||t>299)return this.fire(`error`,n.message||n.error)})}_sendRequest(){let e=new FormData,t=this.xhr;return e.append(`file`,this.file),new Promise((n,r)=>{t.addEventListener(`load`,()=>{let e=t.status,i=t.response;return e<200||e>299?i.message?r(new w(`fileuploader-uploading-data-failed`,this,{message:i.message})):r(i.error):n(i)}),t.addEventListener(`error`,()=>r(Error(`Network Error`))),t.addEventListener(`abort`,()=>r(Error(`Abort`))),t.send(e)})}};function IM(e,t=512){try{let n=e.match(NM)[1],r=atob(e.replace(NM,``)),i=[];for(let e=0;e(await this._authorizePrivateCategoriesAccess(e.value),e))}getToken(){return this._token}async getWorkspaceId(){let e=this.editor.t,t=e(`Cannot access default workspace.`),n=this.editor.config.get(`ckbox.defaultUploadWorkspaceId`),r=mM(await this._token,n);if(r==null)throw ye(`ckbox-access-default-workspace-error`),t;return r}async getCategoryIdForFile(e,t){let n=this.editor.t,r=n(`Cannot determine a category for the uploaded file.`),i=this.editor.config.get(`ckbox.defaultUploadCategories`),a=this._getAvailableCategories(t),o=typeof e==`string`?vM(await yM(e,t)):bM(e),s=await a;if(!s)throw r;if(i){let e=Object.keys(i).find(e=>i[e].find(e=>e.toLowerCase()==o));if(e){let t=s.find(t=>t.id===e||t.name===e);if(!t)throw r;return t.id}}let c=s.find(e=>e.extensions.find(e=>e.toLowerCase()==o));if(!c)throw r;return c.id}async _getAvailableCategories(e){let t=this.editor,n=this._token,{signal:r}=e,i=t.config.get(`ckbox.serviceOrigin`),a=await this.getWorkspaceId();try{let e=[],t=0,n;do{let r=await o(t);e.push(...r.items),n=r.totalCount-(t+50),t+=50}while(n>0);return e}catch{r.throwIfAborted(),ye(`ckbox-fetch-category-http-error`);return}async function o(e){let t=new URL(`categories`,i);return t.searchParams.set(`limit`,`50`),t.searchParams.set(`offset`,String(e)),t.searchParams.set(`workspaceId`,a),gM({url:t,signal:r,authorization:(await n).value})}}async _authorizePrivateCategoriesAccess(e){let t=this.editor.config.get(`ckbox.serviceOrigin`),n=new FormData;n.set(`token`,e),await fetch(`${t}/categories/authorizePrivateAccess`,{method:`POST`,credentials:`include`,mode:`no-cors`,body:n})}},HM=class extends F{static get requires(){return[$A,zA,bw,GM]}static get pluginName(){return`CKBoxUploadAdapter`}static get isOfficialPlugin(){return!0}async afterInit(){let e=this.editor,t=!!e.config.get(`ckbox`),n=!!window.CKBox;if(!t&&!n)return;let r=e.plugins.get(bw),i=e.plugins.get(VM);r.createUploadAdapter=t=>new UM(t,e,i);let a=!e.config.get(`ckbox.ignoreDataId`),o=e.plugins.get($A);a&&o.on(`uploadComplete`,(t,{imageElement:n,data:r})=>{e.model.change(e=>{e.setAttribute(`ckboxImageId`,r.ckboxImageId,n)})})}},UM=class{loader;token;editor;controller;serviceOrigin;ckboxUtils;constructor(e,t,n){this.loader=e,this.token=n.getToken(),this.ckboxUtils=n,this.editor=t,this.controller=new AbortController,this.serviceOrigin=t.config.get(`ckbox.serviceOrigin`)}async upload(){let e=this.ckboxUtils,t=this.editor.t,n=await this.loader.file,r=await e.getCategoryIdForFile(n,{signal:this.controller.signal}),i=new URL(`assets`,this.serviceOrigin),a=new FormData;return i.searchParams.set(`workspaceId`,await e.getWorkspaceId()),a.append(`categoryId`,r),a.append(`file`,n),gM({method:`POST`,url:i,data:a,onUploadProgress:e=>{e.lengthComputable&&(this.loader.uploadTotal=e.total,this.loader.uploaded=e.loaded)},signal:this.controller.signal,authorization:(await this.token).value}).then(async e=>{let t=pM(e.imageUrls);return{ckboxImageId:e.id,default:t.imageFallbackUrl,sources:t.imageSources}}).catch(()=>{let e=t(`Cannot upload file:`)+` ${n.name}.`;return Promise.reject(e)})}abort(){this.controller.abort()}};const WM=`NoPermission`;var GM=class extends F{static get pluginName(){return`CKBoxEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[uk,Jj,HM,VM]}init(){let e=this.editor;this._shouldBeInitialised()&&(this._checkImagePlugins(),ZM()&&e.commands.add(`ckbox`,new xM(e)),QM(e).then(e=>{e||this._blockImageCommands()}))}afterInit(){let e=this.editor;this._shouldBeInitialised()&&(e.config.get(`ckbox.ignoreDataId`)||(this._initSchema(),this._initConversion(),this._initFixers()))}_shouldBeInitialised(){return!!this.editor.config.get(`ckbox`)||ZM()}_blockImageCommands(){let e=this.editor,t=e.commands.get(`uploadImage`),n=e.commands.get(`ckboxImageEdit`);t&&(t.isAccessAllowed=!1,t.forceDisabled(WM)),n&&n.forceDisabled(WM)}_checkImagePlugins(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&ye(`ckbox-plugin-image-feature-missing`,e)}_initSchema(){let e=this.editor.model.schema;e.extend(`$text`,{allowAttributes:`ckboxLinkId`}),e.isRegistered(`imageBlock`)&&e.extend(`imageBlock`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.isRegistered(`imageInline`)&&e.extend(`imageInline`,{allowAttributes:[`ckboxImageId`,`ckboxLinkId`]}),e.addAttributeCheck(e=>{if(!e.last.getAttribute(`linkHref`))return!1},`ckboxLinkId`)}_initConversion(){let e=this.editor;e.conversion.for(`downcast`).add(e=>{e.on(`attribute:ckboxLinkId:imageBlock`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(!a.consume(t.item,e.name))return;let o=[...i.toViewElement(t.item).getChildren()].find(e=>e.name===`a`);o&&(t.item.hasAttribute(`ckboxLinkId`)?r.setAttribute(`data-ckbox-resource-id`,t.item.getAttribute(`ckboxLinkId`),o):r.removeAttribute(`data-ckbox-resource-id`,o))},{priority:`low`}),e.on(`attribute:ckboxLinkId`,(e,t,n)=>{let{writer:r,mapper:i,consumable:a}=n;if(a.consume(t.item,e.name)){if(t.attributeOldValue){let e=YM(r,t.attributeOldValue);r.unwrap(i.toViewRange(t.range),e)}if(t.attributeNewValue){let e=YM(r,t.attributeNewValue);if(t.item.is(`selection`)){let t=r.document.selection;r.wrap(t.getFirstRange(),e)}else r.wrap(i.toViewRange(t.range),e)}}},{priority:`low`})}),e.conversion.for(`upcast`).add(e=>{e.on(`element:a`,(e,t,n)=>{let{writer:r,consumable:i}=n;if(!t.viewItem.getAttribute(`href`)||!i.consume(t.viewItem,{attributes:[`data-ckbox-resource-id`]}))return;let a=t.viewItem.getAttribute(`data-ckbox-resource-id`);if(a)if(t.modelRange)for(let e of t.modelRange.getItems())e.is(`$textProxy`)&&(e=e.textNode),XM(e)&&r.setAttribute(`ckboxLinkId`,a,e);else{let e=t.modelCursor.nodeBefore||t.modelCursor.parent;r.setAttribute(`ckboxLinkId`,a,e)}},{priority:`low`})}),e.conversion.for(`downcast`).attributeToAttribute({model:`ckboxImageId`,view:`data-ckbox-resource-id`}),e.conversion.for(`upcast`).elementToAttribute({model:{key:`ckboxImageId`,value:e=>e.getAttribute(`data-ckbox-resource-id`)},view:{attributes:{\"data-ckbox-resource-id\":/[\\s\\S]+/}}});let t=e.commands.get(`replaceImageSource`);t&&this.listenTo(t,`cleanupImage`,(e,[t,n])=>{t.removeAttribute(`ckboxImageId`,n)})}_initFixers(){let e=this.editor,t=e.model,n=t.document.selection;t.document.registerPostFixer(KM(e)),t.document.registerPostFixer(qM(n))}};function KM(e){return t=>{let n=!1,r=e.model,i=e.commands.get(`ckbox`);if(!i)return n;for(let e of r.document.differ.getChanges()){if(e.type!==`insert`&&e.type!==`attribute`)continue;let r=e.type===`insert`?new B(e.position,e.position.getShiftedBy(e.length)):e.range,a=e.type===`attribute`&&e.attributeKey===`linkHref`&&e.attributeNewValue===null;for(let e of r.getItems()){if(a&&e.hasAttribute(`ckboxLinkId`)){t.removeAttribute(`ckboxLinkId`,e),n=!0;continue}let r=JM(e,i._chosenAssets);for(let i of r){let r=i.type===`image`?`ckboxImageId`:`ckboxLinkId`;i.id!==e.getAttribute(r)&&(t.setAttribute(r,i.id,e),n=!0)}}}return n}}function qM(e){return t=>!e.hasAttribute(`linkHref`)&&e.hasAttribute(`ckboxLinkId`)?(t.removeSelectionAttribute(`ckboxLinkId`),!0):!1}function JM(e,t){let n=e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`),r=e.hasAttribute(`linkHref`);return[...t].filter(t=>{if(t.type===`image`&&n)return t.attributes.imageFallbackUrl===e.getAttribute(`src`);if(t.type===`link`&&r)return t.attributes.linkHref===e.getAttribute(`linkHref`)})}function YM(e,t){let n=e.createAttributeElement(`a`,{\"data-ckbox-resource-id\":t},{priority:5});return e.setCustomProperty(`link`,!0,n),n}function XM(e){return!!(e.is(`$text`)||e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`))}function ZM(){return!!window.CKBox}async function QM(e){let t=e.plugins.get(VM),n=e.config.get(`ckbox.serviceOrigin`),r=new URL(`permissions`,n),{value:i}=await t.getToken(),a=await gM({url:r,authorization:i,signal:new AbortController().signal});return Object.values(a).some(e=>e[`asset:create`])}var $M=class extends F{static get pluginName(){return`CKBox`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,sO]}};function eN(e){let t=tN(e);return e=>e.is(`element`,`imageInline`)||e.is(`element`,`imageBlock`)?e.hasAttribute(`ckboxImageId`)?!0:e.hasAttribute(`src`)?t(e.getAttribute(`src`)):!1:!1}function tN(e){if(Array.isArray(e)){let t=e.map(tN);return e=>t.some(t=>t(e))}if(e==`origin`){let e=u.window.location.origin;return t=>new URL(t,u.document.baseURI).origin==e}return typeof e==`function`?e:e instanceof RegExp?t=>!!(t.match(e)||t.replace(/^https?:\\/\\//,``).match(e)):()=>!1}var nN=class extends I{_wrapper=null;_processInProgress=new Set;_canEdit;_prepareOptions;_updateUiDelayed=Yi(()=>this.editor.ui.update(),0);constructor(e){super(e),this.value=!1,this._canEdit=eN(e.config.get(`ckbox.allowExternalImagesEditing`)),this._prepareOptions=ur((e,t)=>this._prepareOptionsAbortable(e,t)),this._prepareListeners()}refresh(){let e=this.editor;this.value=this._getValue();let t=e.model.document.selection.getSelectedElement();this.isEnabled=!!t&&this._canEdit(t)&&!this._checkIfElementIsBeingProcessed(t)}execute(){if(this._getValue())return;let e=mr(document,`div`,{class:`ck ckbox-wrapper`});this._wrapper=e,this.value=!0,document.body.appendChild(this._wrapper);let t={element:this.editor.model.document.selection.getSelectedElement(),controller:new AbortController};this._prepareOptions(t).then(t=>window.CKBox.mountImageEditor(e,t),e=>{let t=this.editor,n=t.t;t.plugins.get(IC).showWarning(n(`Failed to determine category of edited image.`),{namespace:`ckbox`}),console.error(e),this._handleImageEditorClose()})}destroy(){this._handleImageEditorClose(),this._prepareOptions.abort(),this._updateUiDelayed.cancel();for(let e of this._processInProgress.values())e.controller.abort();super.destroy()}_getValue(){return this._wrapper!==null}async _prepareOptionsAbortable(e,t){let n=this.editor,r=n.config.get(`ckbox`),i=n.plugins.get(VM),{element:a}=t,o,s=a.getAttribute(`ckboxImageId`);if(s)o={assetId:s};else{let t=new URL(a.getAttribute(`src`),document.baseURI).href;o={imageUrl:t,uploadCategoryId:await i.getCategoryIdForFile(t,{signal:e})}}return{...o,imageEditing:{allowOverwrite:!1},tokenUrl:r.tokenUrl,language:r.language,...r.serviceOrigin&&{serviceOrigin:r.serviceOrigin},onClose:()=>this._handleImageEditorClose(),onSave:e=>this._handleImageEditorSave(t,e)}}_prepareListeners(){this.listenTo(this.editor.model.document,`change:data`,()=>{this._getProcessingStatesOfDeletedImages().forEach(e=>{e.controller.abort()})})}_getProcessingStatesOfDeletedImages(){let e=[];for(let t of this._processInProgress.values())t.element.root.rootName==`$graveyard`&&e.push(t);return e}_checkIfElementIsBeingProcessed(e){for(let{element:t}of this._processInProgress)if($t(t,e))return!0;return!1}_handleImageEditorClose(){this._wrapper&&(this._wrapper.remove(),this._wrapper=null,this.editor.editing.view.focus(),this._updateUiDelayed(),this.refresh())}_handleImageEditorSave(e,t){let n=this.editor.locale.t,r=this.editor.plugins.get(IC),i=this.editor.plugins.get(wg),a=i.add(n(`Processing the edited image.`));this._processInProgress.add(e),this._showImageProcessingIndicator(e.element,t),this.refresh(),this._waitForAssetProcessed(t.data.id,e.controller.signal).then(t=>{this._replaceImage(e.element,t)},t=>{this.editor.editing.reconvertItem(e.element),!e.controller.signal.aborted&&(!t||t instanceof w?r.showWarning(n(`Server failed to process the image.`),{namespace:`ckbox`}):console.error(t))}).finally(()=>{this._processInProgress.delete(e),i.remove(a),this.refresh()})}async _getAssetStatusFromServer(e,t){let n=this.editor.plugins.get(VM),r=await gM({url:new URL(`assets/`+e,this.editor.config.get(`ckbox.serviceOrigin`)),signal:t,authorization:(await n.getToken()).value}),i=r.metadata.metadataProcessingStatus;if(!i||i==`queued`)throw new w(`ckbox-image-not-processed`);return{data:{...r}}}async _waitForAssetProcessed(e,t){let n=await Ki(()=>this._getAssetStatusFromServer(e,t),{signal:t,maxAttempts:5});if(n.data.metadata.metadataProcessingStatus!=`success`)throw new w(`ckbox-image-processing-failed`);return n}_showImageProcessingIndicator(e,t){let n=this.editor;n.editing.view.change(r=>{let i=n.editing.mapper.toViewElement(e),a=this.editor.plugins.get(`ImageUtils`).findViewImgElement(i);r.removeStyle(`aspect-ratio`,a),r.setAttribute(`width`,t.data.metadata.width,a),r.setAttribute(`height`,t.data.metadata.height,a),r.setStyle(`width`,`${t.data.metadata.width}px`,a),r.setStyle(`height`,`${t.data.metadata.height}px`,a),r.addClass(`image-processing`,i)})}_replaceImage(e,t){let n=this.editor,{imageFallbackUrl:r,imageSources:i,imageWidth:a,imageHeight:o,imagePlaceholder:s}=CM(t),c=Array.from(n.model.document.selection.getRanges());n.model.change(l=>{l.setSelection(e,`on`),n.execute(`insertImage`,{imageType:e.is(`element`,`imageInline`)?`imageInline`:null,source:{src:r,sources:i,width:a,height:o,...s?{placeholder:s}:null,...e.hasAttribute(`alt`)?{alt:e.getAttribute(`alt`)}:null}});let u=e.getChildren();e=n.model.document.selection.getSelectedElement();for(let t of u)l.append(l.cloneElement(t),e);l.setAttribute(`ckboxImageId`,t.data.id,e),l.setSelection(c)})}},rN=class extends F{static get pluginName(){return`CKBoxImageEditEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[GM,VM,wg,IC,Kk,gA]}init(){let{editor:e}=this;e.commands.add(`ckboxImageEdit`,new nN(e))}},iN=class extends F{static get pluginName(){return`CKBoxImageEditUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckboxImageEdit`,t=>{let n=e.commands.get(`ckboxImageEdit`),r=e.commands.get(`uploadImage`),i=new H(t),a=t.t;return i.set({icon:u_,tooltip:!0}),i.bind(`label`).to(r,`isAccessAllowed`,e=>a(e?`Edit image`:`You have no image editing permissions.`)),i.bind(`isOn`).to(n,`value`,n,`isEnabled`,(e,t)=>e&&t),i.bind(`isEnabled`).to(n),this.listenTo(i,`execute`,()=>{e.execute(`ckboxImageEdit`),e.editing.view.focus()}),i})}},aN=class extends F{static get pluginName(){return`CKBoxImageEdit`}static get isOfficialPlugin(){return!0}static get requires(){return[rN,iN]}},oN=class extends F{static get pluginName(){return`CKFinderUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`ckfinder`,()=>this._createFileToolbarButton()),e.ui.componentFactory.add(`menuBar:ckfinder`,()=>this._createFileMenuBarButton()),e.plugins.has(`ImageInsertUI`)&&e.plugins.get(`ImageInsertUI`).registerIntegration({name:`assetManager`,observable:()=>e.commands.get(`ckfinder`),buttonViewCreator:()=>this._createImageToolbarButton(),formViewCreator:()=>this._createImageDropdownButton(),menuBarButtonViewCreator:e=>this._createImageMenuBarButton(e?`insertOnly`:`insertNested`)})}_createButton(e){let t=this.editor,n=t.locale,r=new e(n),i=t.commands.get(`ckfinder`);return r.bind(`isEnabled`).to(i),r.on(`execute`,()=>{t.execute(`ckfinder`),t.editing.view.focus()}),r}_createFileToolbarButton(){let e=this.editor.locale.t,t=this._createButton(H);return t.icon=a_,t.label=e(`Insert image or file`),t.tooltip=!0,t}_createImageToolbarButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace image with file manager`:`Insert image with file manager`)),n.tooltip=!0,n}_createImageDropdownButton(){let e=this.editor.locale.t,t=this.editor.plugins.get(`ImageInsertUI`),n=this._createButton(H);return n.icon=z_,n.withText=!0,n.bind(`label`).to(t,`isImageSelected`,t=>e(t?`Replace with file manager`:`Insert with file manager`)),n.on(`execute`,()=>{t.dropdownView.isOpen=!1}),n}_createFileMenuBarButton(){let e=this.editor.locale.t,t=this._createButton(U);return t.icon=a_,t.withText=!0,t.label=e(`File`),t}_createImageMenuBarButton(e){let t=this.editor.locale.t,n=this.editor.locale.t,r=this._createButton(U);switch(r.icon=z_,r.withText=!0,e){case`insertOnly`:r.label=t(`Image`);break;case`insertNested`:r.label=n(`With file manager`);break}return r}},sN=class extends I{constructor(e){super(e),this.affectsData=!1,this.stopListening(this.editor.model.document,`change`),this.listenTo(this.editor.model.document,`change`,()=>this.refresh(),{priority:`low`})}refresh(){let e=this.editor.commands.get(`insertImage`),t=this.editor.commands.get(`link`);this.isEnabled=e.isEnabled||t.isEnabled}execute(){let e=this.editor,t=this.editor.config.get(`ckfinder.openerMethod`)||`modal`;if(t!=`popup`&&t!=`modal`)throw new w(`ckfinder-unknown-openermethod`,e);let n=this.editor.config.get(`ckfinder.options`)||{};n.chooseFiles=!0;let r=n.onInit;n.language||=e.locale.uiLanguage,n.onInit=t=>{r&&r(t),t.on(`files:choose`,n=>{let r=n.data.files.toArray(),i=r.filter(e=>!e.isImage()),a=r.filter(e=>e.isImage());for(let t of i)e.execute(`link`,t.getUrl());let o=[];for(let e of a){let n=e.getUrl();o.push(n||t.request(`file:getProxyUrl`,{file:e}))}o.length&&cN(e,o)}),t.on(`file:choose:resizedImage`,t=>{let n=t.data.resizedUrl;if(!n){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not obtain resized image URL.`),{title:n(`Selecting resized image failed`),namespace:`ckfinder`});return}cN(e,[n])})},window.CKFinder[t](n)}};function cN(e,t){if(!e.commands.get(`insertImage`).isEnabled){let t=e.plugins.get(`Notification`),n=e.locale.t;t.showWarning(n(`Could not insert image at the current position.`),{title:n(`Inserting image failed`),namespace:`ckfinder`});return}e.execute(`insertImage`,{source:t})}var lN=class extends F{static get pluginName(){return`CKFinderEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[IC,uk]}init(){let e=this.editor;if(!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`))throw new w(`ckfinder-missing-image-plugin`,e);e.commands.add(`ckfinder`,new sN(e))}},uN=class extends F{static get pluginName(){return`CKFinder`}static get isOfficialPlugin(){return!0}static get requires(){return[Ok,jw,lN,oN]}};function dN(e){let t=e.t,n=e.config.get(`codeBlock.languages`);for(let e of n)e.label===`Plain text`&&(e.label=t(`Plain text`)),e.class===void 0&&(e.class=`language-${e.language}`);return n}function fN(e,t,n){let r={};for(let i of e)if(t===`class`){let e=i[t].split(` `).shift();r[e]=i[n]}else r[i[t]]=i[n];return r}function pN(e){return e.data.match(/^(\\s*)/)[0]}function mN(e,t){let n=e.createDocumentFragment(),r=t.split(`\n`),i=r.reduce((t,n,i)=>(t.push(n),i!e.isEqual(o))&&n.push(o)}return n}function gN(e){let t=j(e.getSelectedBlocks());return!!t&&t.is(`element`,`codeBlock`)}function _N(e,t){return t.is(`rootElement`)||e.isLimit(t)?!1:e.checkChild(t.parent,`codeBlock`)}function vN(e,t,n,r){let i=fN(t,`language`,`label`),a=n.getAttribute(`language`);if(a in i){let t=i[a];return e(r===`enter`?`Entering %0 code snippet`:`Leaving %0 code snippet`,t)}return e(r===`enter`?`Entering code snippet`:`Leaving code snippet`)}function yN(e,t){for(e.textNode&&(e=t.createPositionBefore(e.textNode));e.nodeBefore&&!e.nodeBefore.is(`element`,`softBreak`);)e=t.createPositionBefore(e.nodeBefore);let n=e.nodeAfter;return n&&n.is(`$text`)?n:null}var bN=class extends I{_lastLanguage;constructor(e){super(e),this._lastLanguage=null}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=dN(t)[0],a=Array.from(r.getSelectedBlocks()),o=e.forceValue==null?!this.value:e.forceValue,s=xN(e,this._lastLanguage,i.language);n.change(e=>{o?this._applyCodeBlock(e,a,s):this._removeCodeBlock(e,a)})}_getValue(){let e=this.editor.model.document.selection,t=j(e.getSelectedBlocks());return t?.is(`element`,`codeBlock`)?t.getAttribute(`language`):!1}_checkEnabled(){if(this.value)return!0;let e=this.editor.model.document.selection,t=this.editor.model.schema,n=j(e.getSelectedBlocks());return n?_N(t,n):!1}_applyCodeBlock(e,t,n){this._lastLanguage=n;let r=this.editor.model.schema,i=t.filter(e=>_N(r,e));for(let t of i)e.rename(t,`codeBlock`),e.setAttribute(`language`,n,t),r.removeDisallowedAttributes([t],e),Array.from(t.getChildren()).filter(e=>!r.checkChild(t,e)).forEach(t=>e.remove(t));i.reverse().forEach((t,n)=>{let r=i[n+1];t.previousSibling===r&&(e.appendElement(`softBreak`,r),e.merge(e.createPositionBefore(t)))})}_removeCodeBlock(e,t){let n=t.filter(e=>e.is(`element`,`codeBlock`));for(let t of n){let n=e.createRangeOn(t);for(let t of Array.from(n.getItems()).reverse())if(t.is(`element`,`softBreak`)&&t.parent.is(`element`,`codeBlock`)){let{position:n}=e.split(e.createPositionBefore(t)),r=n.nodeAfter;e.rename(r,`paragraph`),e.removeAttribute(`language`,r),e.remove(t)}e.rename(t,`paragraph`),e.removeAttribute(`language`,t)}}};function xN(e,t,n){return e.language?e.language:e.usePreviousLanguageChoice&&t?t:n}var SN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(t=>{let n=hN(e);for(let r of n){let n=t.createText(this._indentSequence);e.insertContent(n,r)}})}_checkEnabled(){return this._indentSequence?gN(this.editor.model.document.selection):!1}},CN=class extends I{_indentSequence;constructor(e){super(e),this._indentSequence=e.config.get(`codeBlock.indentSequence`)}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model;e.change(()=>{let t=hN(e);for(let n of t){let t=wN(e,n,this._indentSequence);t&&e.deleteContent(e.createSelection(t))}})}_checkEnabled(){if(!this._indentSequence)return!1;let e=this.editor.model;return gN(e.document.selection)?hN(e).some(t=>wN(e,t,this._indentSequence)):!1}};function wN(e,t,n){let r=yN(t,e);if(!r)return null;let i=pN(r),a=i.lastIndexOf(n);if(a+n.length!==i.length||a===-1)return null;let{parent:o,startOffset:s}=r;return e.createRange(e.createPositionAt(o,s+a),e.createPositionAt(o,s+a+n.length))}function TN(e,t,n=!1){let r=fN(t,`language`,`class`),i=fN(t,`language`,`label`);return(t,a,o)=>{let{writer:s,mapper:c,consumable:l}=o;if(!l.consume(a.item,`insert`))return;let u=a.item.getAttribute(`language`),d=c.toViewPosition(e.createPositionBefore(a.item)),f={};n&&(f[`data-language`]=i[u],f.spellcheck=`false`);let p=r[u]?{class:r[u]}:void 0,m=s.createContainerElement(`code`,p),h=s.createContainerElement(`pre`,f,m);s.insert(d,h),c.bindElements(a.item,m)}}function EN(e){return(t,n,r)=>{if(n.item.parent.name!==`codeBlock`)return;let{writer:i,mapper:a,consumable:o}=r;if(!o.consume(n.item,`insert`))return;let s=a.toViewPosition(e.createPositionBefore(n.item));i.insert(s,i.createText(`\n`))}}function DN(e,t){let n=fN(t,`class`,`language`),r=t[0].language;return(e,t,i)=>{let a=t.viewItem,o=a.parent;if(!o||!o.is(`element`,`pre`)||t.modelCursor.findAncestor(`codeBlock`))return;let{consumable:s,writer:c}=i;if(!s.test(a,{name:!0}))return;let l=c.createElement(`codeBlock`),u=[...a.getClassNames()];u.length||u.push(``);for(let e of u){let t=n[e];if(t){s.consume(a,{classes:[e]}),c.setAttribute(`language`,t,l);break}}l.hasAttribute(`language`)||c.setAttribute(`language`,r,l),i.convertChildren(a,l),i.safeInsert(l,t.modelCursor)&&(s.consume(a,{name:!0}),i.updateConversionResult(l,t))}}function ON(){return(e,t,{consumable:n,writer:r})=>{let i=t.modelCursor;if(!n.test(t.viewItem)||!i.findAncestor(`codeBlock`))return;n.consume(t.viewItem);let a=t.viewItem.data.split(`\n`).map(e=>r.createText(e)),o=a[a.length-1];for(let e of a)if(r.insert(e,i),i=i.getShiftedBy(e.offsetSize),e!==o){let e=r.createElement(`softBreak`);r.insert(e,i),i=r.createPositionAfter(e)}t.modelRange=r.createRange(t.modelCursor,i),t.modelCursor=i}}function kN(){return(e,t,{consumable:n})=>{let r=t.viewItem;if(r.findAncestor(`pre`))return;let i=Array.from(r.getChildren()),a=i.find(e=>e.is(`element`,`code`));if(a)for(let e of i)e===a||!e.is(`$text`)||n.consume(e,{name:!0})}}const AN=`paragraph`;var jN=class extends F{static get pluginName(){return`CodeBlockEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[kE]}constructor(e){super(e),e.config.define(`codeBlock`,{languages:[{language:`plaintext`,label:`Plain text`},{language:`c`,label:`C`},{language:`cs`,label:`C#`},{language:`cpp`,label:`C++`},{language:`css`,label:`CSS`},{language:`diff`,label:`Diff`},{language:`go`,label:`Go`},{language:`html`,label:`HTML`},{language:`java`,label:`Java`},{language:`javascript`,label:`JavaScript`},{language:`php`,label:`PHP`},{language:`python`,label:`Python`},{language:`ruby`,label:`Ruby`},{language:`typescript`,label:`TypeScript`},{language:`xml`,label:`XML`}],indentSequence:`\t`})}init(){let e=this.editor,t=e.model.schema,n=e.model,r=e.editing.view,i=dN(e);e.commands.add(`codeBlock`,new bN(e)),e.commands.add(`indentCodeBlock`,new SN(e)),e.commands.add(`outdentCodeBlock`,new CN(e)),this.listenTo(r.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentCodeBlock`:`indentCodeBlock`;e.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`pre`}),t.register(`codeBlock`,{allowWhere:`$block`,allowChildren:`$text`,disallowChildren:`$inlineObject`,allowAttributes:[`language`],allowAttributesOf:`$listItem`,isBlock:!0}),t.addAttributeCheck((e,n)=>{let r=e.getItem(e.length-2);if(t.getAttributeProperties(n).isFormatting&&r&&r.name==`codeBlock`)return!1}),e.editing.downcastDispatcher.on(`insert:codeBlock`,TN(n,i,!0)),e.data.downcastDispatcher.on(`insert:codeBlock`,TN(n,i)),e.data.downcastDispatcher.on(`insert:softBreak`,EN(n),{priority:`high`}),e.data.upcastDispatcher.on(`element:code`,DN(r,i)),e.data.upcastDispatcher.on(`text`,ON()),e.data.upcastDispatcher.on(`element:pre`,kN(),{priority:`high`}),this.listenTo(e.editing.view.document,`clipboardInput`,(t,r)=>{let i=n.createRange(n.document.selection.anchor);if(r.targetRanges&&(i=e.editing.mapper.toModelRange(r.targetRanges[0])),!i.start.parent.is(`element`,`codeBlock`))return;let a=r.dataTransfer.getData(`text/plain`);r.content=mN(new Np(e.editing.view.document),a)}),e.plugins.has(`ClipboardPipeline`)&&e.plugins.get(_O).on(`contentInsertion`,(n,r)=>{let i=e.model,a=i.document.selection;a.anchor.parent.is(`element`,`codeBlock`)&&i.change(e=>{let n=e.createRangeIn(r.content);for(let r of[...n.getItems()])r.is(`node`)&&!t.checkChild(a.anchor,r)&&e.remove(r)})}),this.listenTo(n,`getSelectedContent`,(e,[r])=>{let i=r.anchor;r.isCollapsed||!i.parent.is(`element`,`codeBlock`)||!i.hasSameParentAs(r.focus)||n.change(n=>{let a=e.return;if(i.parent.is(`element`)&&(a.childCount>1||r.containsEntireContent(i.parent))){let t=n.createElement(`codeBlock`,i.parent.getAttributes());n.append(a,t);let r=n.createDocumentFragment();n.append(t,r),e.return=r;return}let o=a.getChild(0);t.checkAttribute(o,`code`)&&n.setAttribute(`code`,!0,o)})})}afterInit(){let e=this.editor,t=e.commands,n=t.get(`indent`),r=t.get(`outdent`);n&&n.registerChildCommand(t.get(`indentCodeBlock`),{priority:`highest`}),r&&r.registerChildCommand(t.get(`outdentCodeBlock`)),this.listenTo(e.editing.view.document,`enter`,(t,n)=>{e.model.document.selection.getLastPosition().parent.is(`element`,`codeBlock`)&&(!NN(e,n.isSoft)&&!PN(e,n.isSoft)&&MN(e),n.preventDefault(),t.stop())},{context:`pre`}),this._initAriaAnnouncements()}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=dN(this.editor),i=null;e.document.selection.on(`change:range`,()=>{let a=e.document.selection.focus.parent;!t||i===a||!a.is(`element`)||(i&&i.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,i,`leave`)),a.is(`element`,`codeBlock`)&&t.ariaLiveAnnouncer.announce(vN(n,r,a,`enter`)),i=a)})}};function MN(e){let t=e.model,n=t.document,r=n.selection.getLastPosition(),i,a=yN(r,t);a&&a.is(`$text`)&&(i=pN(a)),e.model.change(t=>{e.execute(`shiftEnter`),i&&t.insertText(i,n.selection.anchor)})}function NN(e,t){let n=e.model.document,r=e.editing.view,i=n.selection.getLastPosition(),a=i.nodeAfter;return t||!n.selection.isCollapsed||!i.isAtStart||!IN(a)?!1:(e.model.change(t=>{e.execute(`enter`);let r=n.selection.anchor.parent.previousSibling;t.rename(r,AN),t.setSelection(r,`in`),e.model.schema.removeDisallowedAttributes([r],t),t.remove(a)}),r.scrollToTheSelection(),!0)}function PN(e,t){let n=e.model,r=n.document,i=e.editing.view,a=r.selection.getLastPosition(),o=a.nodeBefore,s;if(t||!r.selection.isCollapsed||!a.isAtEnd||!o||!o.previousSibling)return!1;if(IN(o)&&IN(o.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&IN(o.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling),n.createPositionAfter(o));else if(FN(o)&&IN(o.previousSibling)&&FN(o.previousSibling.previousSibling)&&o.previousSibling.previousSibling&&IN(o.previousSibling.previousSibling.previousSibling))s=n.createRange(n.createPositionBefore(o.previousSibling.previousSibling.previousSibling),n.createPositionAfter(o));else return!1;return e.model.change(t=>{t.remove(s),e.execute(`enter`);let n=r.selection.anchor.parent;t.rename(n,AN),e.model.schema.removeDisallowedAttributes([n],t)}),i.scrollToTheSelection(),!0}function FN(e){return e&&e.is(`$text`)&&!e.data.match(/\\S/)}function IN(e){return e&&e.is(`element`,`softBreak`)}var LN=class extends F{static get pluginName(){return`CodeBlockUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.ui.componentFactory,r=dN(e),i=this._getLanguageListItemDefinitions(r),a=e.commands.get(`codeBlock`);n.add(`codeBlock`,n=>{let r=Nx(n,Mx),o=r.buttonView,s=t(`Insert code block`);return o.set({label:s,tooltip:!0,icon:d_,isToggleable:!0}),o.bind(`isOn`).to(a,`value`,e=>!!e),o.on(`execute`,()=>{e.execute(`codeBlock`,{usePreviousLanguageChoice:!0}),e.editing.view.focus()}),r.on(`execute`,t=>{e.execute(`codeBlock`,{language:t.source._codeBlockLanguage,forceValue:!0}),e.editing.view.focus()}),r.class=`ck-code-block-dropdown`,r.bind(`isEnabled`).to(a),Lx(r,i,{role:`menu`,ariaLabel:s}),r}),n.add(`menuBar:codeBlock`,n=>{let r=new uw(n);r.buttonView.set({role:`menuitem`,label:t(`Code block`),icon:d_}),r.bind(`isEnabled`).to(a);let o=new dw(n);o.set({ariaLabel:t(`Insert code block`)});for(let t of i){let i=new rC(n,r),s=new U(n);s.bind(...Object.keys(t.model)).to(t.model),s.set({isToggleable:!0,role:`menuitemcheckbox`}),s.delegate(`execute`).to(r),s.on(`execute`,()=>{e.execute(`codeBlock`,{language:t.model._codeBlockLanguage,forceValue:a.value!=t.model._codeBlockLanguage}),e.editing.view.focus()}),i.children.add(s),o.items.add(i)}return r.panelView.children.add(o),r})}_getLanguageListItemDefinitions(e){let t=this.editor.commands.get(`codeBlock`),n=new Fi;for(let r of e){let e={type:`button`,model:new RC({_codeBlockLanguage:r.language,label:r.label,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,t=>t===e.model._codeBlockLanguage),n.add(e)}return n}},RN=class extends F{static get requires(){return[jN,LN]}static get pluginName(){return`CodeBlock`}static get isOfficialPlugin(){return!0}},zN=class extends F{_uploadGateway;static get pluginName(){return`CloudServicesUploadAdapter`}static get isOfficialPlugin(){return!0}static get requires(){return[BM,bw]}init(){let e=this.editor,t=e.plugins.get(BM),n=t.token,r=t.uploadUrl;if(!n)return;let i=e.plugins.get(`CloudServicesCore`);this._uploadGateway=i.createUploadGateway(n,r),e.plugins.get(bw).createUploadAdapter=e=>new BN(this._uploadGateway,e)}},BN=class{uploadGateway;loader;fileUploader;constructor(e,t){this.uploadGateway=e,this.loader=t}upload(){return this.loader.file.then(e=>(this.fileUploader=this.uploadGateway.upload(e),this.fileUploader.on(`progress`,(e,t)=>{this.loader.uploadTotal=t.total,this.loader.uploaded=t.uploaded}),this.fileUploader.send()))}abort(){this.fileUploader.abort()}},VN=class extends F{static get pluginName(){return`EasyImage`}static get isOfficialPlugin(){return!0}static get requires(){return[zN,nj]}init(){let e=this.editor;!e.plugins.has(`ImageBlockEditing`)&&!e.plugins.has(`ImageInlineEditing`)&&T(`easy-image-image-feature-missing`,e)}},HN=class extends TC{view;constructor(e,t){super(e),this.view=t}get element(){return this.view.editable.element}init(){let e=this.editor,t=this.view,n=e.editing.view,r=t.editable,i=n.document.getRoot();r.name=i.rootName,r.isInlineRoot=!Cg(e,i.rootName),t.render();let a=r.element;this.setEditableElement(r.name,a),r.bind(`isFocused`).to(this.focusTracker),n.attachDomRoot(a),this._initPlaceholder(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}},UN=class extends DC{editable;menuBarView;constructor(e,t,n,r){super(e),this.editable=new jC(e,t,n,{label:r}),this.menuBarView=new gw(e),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}render(){super.render(),this.registerChild(this.editable),this.registerChild(this.menuBarView)}};const WN=sg(rg);var GN=class extends WN{static get editorName(){return`BalloonEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;KN(i)&&(this.sourceElement=i,cg(this,i));let a=this.config.get(`plugins`);a.push(nw),this.config.set(`plugins`,a),this.config.define(`balloonToolbar`,this.config.get(`toolbar`)),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let o=new UN(this.locale,this.editing.view,i,this.config.get(`roots`).main.label);this.ui=new HN(this,o),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function KN(e){return jn(e)}var qN=class extends TC{view;_toolbarConfig;_elementReplacer;constructor(e,t){super(e),this.view=t,this._toolbarConfig=Ex(e.config.get(`toolbar`)),this._elementReplacer=new lr,this.listenTo(e.editing.view,`scrollToTheSelection`,this._handleScrollToTheSelectionWithStickyPanel.bind(this))}get element(){return this.view.element}init(e){let t=this.editor,n=this.view,r=t.editing.view,i=n.editable,a=r.document.getRoot();i.name=a.rootName,i.isInlineRoot=!Cg(t,a.rootName),n.render();let o=i.element;this.setEditableElement(i.name,o),n.editable.bind(`isFocused`).to(this.focusTracker),r.attachDomRoot(o),e&&this._elementReplacer.replace(e,this.element),this._initPlaceholder(),this._initToolbar(),n.menuBarView&&this.initMenuBar(n.menuBarView),this._initDialogPluginIntegration(),this._initContextualBalloonIntegration(),this.fire(`ready`)}destroy(){super.destroy();let e=this.view,t=this.editor.editing.view;this._elementReplacer.restore(),t.getDomRoot(e.editable.name)&&t.detachDomRoot(e.editable.name),e.destroy()}_initToolbar(){let e=this.view;e.stickyPanel.bind(`isActive`).to(this.focusTracker,`isFocused`),e.stickyPanel.limiterElement=e.element,e.stickyPanel.bind(`viewportTopOffset`).to(this,`viewportOffset`,({visualTop:e})=>e||0),e.toolbar.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(e.toolbar)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.sourceElement,i,a=e.config.get(`roots`)[this.view.editable.name].placeholder;a&&(i=a),!i&&r&&r.tagName.toLowerCase()===`textarea`&&(i=r.getAttribute(`placeholder`)),i&&(n.placeholder=i),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}_initContextualBalloonIntegration(){if(!this.editor.plugins.has(`ContextualBalloon`))return;let{stickyPanel:e}=this.view,t=this.editor.plugins.get(`ContextualBalloon`);t.on(`getPositionOptions`,t=>{let n=t.return;if(!n||!e.isSticky||!e.element)return;let r=new O(e.element).height,i=typeof n.target==`function`?n.target():n.target,a=typeof n.limiter==`function`?n.limiter():n.limiter;if(i&&a&&new O(i).height>=new O(a).height-r)return;let o={...n.viewportOffsetConfig},s=(o.top||0)+r;t.return={...n,viewportOffsetConfig:{...o,top:s}}},{priority:`low`});let n=()=>{t.visibleView&&t.updatePosition()};this.listenTo(e,`change:isSticky`,n),this.listenTo(this.editor.ui,`change:viewportOffset`,n)}_handleScrollToTheSelectionWithStickyPanel(e,t,n){let r=this.view.stickyPanel;if(r.isSticky){let e=new O(r.element).height;t.viewportOffset.top+=e}else{let e=()=>{this.editor.editing.view.scrollToTheSelection(n)};this.listenTo(r,`change:isSticky`,e),setTimeout(()=>{this.stopListening(r,`change:isSticky`,e)},20)}}_initDialogPluginIntegration(){if(!this.editor.plugins.has(`Dialog`))return;let e=this.view.stickyPanel,t=this.editor.plugins.get(`Dialog`);t.on(`show`,()=>{let n=t.view;n.on(`moveTo`,(t,r)=>{if(!e.isSticky||n.wasMoved||n.isModal)return;let i=new O(e.contentPanelElement);r[1]e||0),t.listenTo(e.ui,`update`,()=>{t.panel.isVisible&&t.panel.pin({target:n,positions:t.panelPositions})}),r.fillFromConfig(this._toolbarConfig,this.componentFactory),this.addToolbar(r)}_initPlaceholder(){let e=this.editor,t=e.editing.view,n=t.document.getRoot(),r=e.config.get(`roots`)[n.rootName].placeholder;r&&(n.placeholder=r),yo({view:t,element:n,isDirectHost:this.view.editable.isInlineRoot,keepOnFocus:!0})}};const iP=Wr(`px`);var aP=class extends DC{toolbar;panel;panelPositions;editable;_resizeObserver;constructor(e,t,n,r={}){super(e),this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull,isFloating:!0}),r.useMenuBar&&(this.menuBarView=new gw(e)),this.set(`viewportTopOffset`,0),this.panel=new ab(e),this.panelPositions=this._getPanelPositions(),this.panel.extendTemplate({attributes:{class:`ck-toolbar-container`}}),this.editable=new jC(e,t,n,{label:r.label}),this._resizeObserver=null}render(){if(super.render(),this.body.add(this.panel),this.registerChild(this.editable),this.menuBarView?this.panel.content.addMany([this.menuBarView,this.toolbar]):this.panel.content.add(this.toolbar),this.toolbar.options.shouldGroupWhenFull){let e=this.editable.element;this._resizeObserver=new Hr(e,()=>{this.toolbar.maxWidth=iP(new O(e).width)})}}destroy(){super.destroy(),this._resizeObserver&&this._resizeObserver.destroy()}_getPanelPositionTop(e,t){let n;return n=e.top>t.height+this.viewportTopOffset?e.top-t.height:e.bottom>t.height+this.viewportTopOffset+50?this.viewportTopOffset:e.bottom,n}_getPanelPositions(){let e=[(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left,name:`toolbar_west`,config:{withArrow:!1}}),(e,t)=>({top:this._getPanelPositionTop(e,t),left:e.left+e.width-t.width,name:`toolbar_east`,config:{withArrow:!1}})];return this.locale.uiLanguageDirection===`ltr`?e:e.reverse()}};const oP=sg(rg);var sP=class extends oP{static get editorName(){return`InlineEditor`}ui;constructor(e,t={}){let{sourceElementOrData:n,editorConfig:r}=fg(e,t);super(r),dg(n,this.config);let i=this.config.get(`roots`).main.element;cP(i)&&(this.sourceElement=i,cg(this,i)),this.config.define(`menuBar.isVisible`,!1),this.model.document.createRoot(this.config.get(`roots`).main.modelElement),ug(this);let a=!this.config.get(`toolbar.shouldNotGroupWhenFull`),o=this.config.get(`menuBar`),s=new aP(this.locale,this.editing.view,i,{shouldToolbarGroupWhenFull:a,useMenuBar:o.isVisible,label:this.config.get(`roots`).main.label});this.ui=new rP(this,s),ag(this)}async destroy(){let e=this.getData();this.ui.destroy(),await super.destroy(),this.sourceElement&&this.updateSourceElement(e)}static async create(e,t={}){let n=new this(e,t);return await n.initPlugins(),Sg(n),await n.ui.init(),await n.data.init(n.config.get(`roots`).main.initialData),n.fire(`ready`),n}};function cP(e){return jn(e)}var lP=class extends TC{view;_lastFocusedEditableElement;constructor(e,t){super(e),this.view=t,this._lastFocusedEditableElement=null}init(){let e=this.view,t=this.editor;for(let e of Object.values(this.view.editables))e.isInlineRoot=!Cg(t,e.name);e.render(),this.focusTracker.on(`change:focusedElement`,(e,t,n)=>{for(let e of Object.values(this.view.editables))n===e.element&&(this._lastFocusedEditableElement=e.element)}),this.focusTracker.on(`change:isFocused`,(e,t,n)=>{n||(this._lastFocusedEditableElement=null)});for(let e of Object.values(this.view.editables))this.addEditable(e);this._initToolbar(),this.initMenuBar(this.view.menuBarView),this.fire(`ready`)}addEditable(e,t){let n=e.element;this.editor.editing.view.attachDomRoot(n,e.name),this.setEditableElement(e.name,n),e.bind(`isFocused`).to(this.focusTracker,`isFocused`,this.focusTracker,`focusedElement`,(e,t)=>e?t===n?!0:this._lastFocusedEditableElement===n:!1),this._initPlaceholder(e,t)}removeEditable(e){let t=this.editor.editing.view;t.getDomRoot(e.name)&&t.detachDomRoot(e.name),e.unbind(`isFocused`),this.removeEditableElement(e.name)}destroy(){super.destroy();for(let e of Object.values(this.view.editables))this.removeEditable(e);this.view.destroy()}_initToolbar(){let e=this.editor,t=this.view;t.toolbar.fillFromConfig(e.config.get(`toolbar`),this.componentFactory),this.addToolbar(t.toolbar)}_initPlaceholder(e,t){t||=this.editor.config.get(`roots`)[e.name]?.placeholder;let n=this.editor.editing.view,r=n.document.getRoot(e.name);t&&(r.placeholder=t),yo({view:n,element:r,isDirectHost:e.isInlineRoot,keepOnFocus:!0})}},uP=class extends DC{toolbar;editables;editable;menuBarView;_editingView;constructor(e,t,n,r={}){super(e),this._editingView=t,this.toolbar=new Ox(e,{shouldGroupWhenFull:r.shouldToolbarGroupWhenFull}),this.menuBarView=new gw(e),this.editables={};for(let e of n){let t=r.editableElements?.[e],{label:n}=r;typeof n==`object`&&(n=n[e]),this.createEditable(e,t,n)}this.editable=Object.values(this.editables)[0],this.toolbar.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}}),this.menuBarView.extendTemplate({attributes:{class:[`ck-reset_all`,`ck-rounded-corners`],dir:e.uiLanguageDirection}})}createEditable(e,t,n){let r=new jC(this.locale,this._editingView,t,{label:n});return this.editables[e]=r,r.name=e,this.isRendered&&this.registerChild(r),r}removeEditable(e){let t=this.editables[e];this.isRendered&&this.deregisterChild(t),delete this.editables[e],t.destroy()}render(){super.render(),this.registerChild(Object.values(this.editables)),this.registerChild(this.toolbar),this.registerChild(this.menuBarView)}},dP=class extends rg{static get editorName(){return`MultiRootEditor`}ui;sourceElements;_readOnlyRootLocks=new Map;constructor(e,t={}){let{sourceElementsOrData:n,editorConfig:r}=pg(e,t);if(super(r),dg(n,this.config,!1),mP(this.config),hP(this.config),this.config.get(`lazyRoots`))throw new w(`multi-root-editor-root-deprecated-config-lazy-roots`,null);let i=Object.entries(this.config.get(`roots`));this.sourceElements={};let a={};for(let[e,t]of i){let n=vP(t);n&&(_P(n)&&(this.sourceElements[e]=n,cg(this,n)),a[e]=n)}this.editing.view.document.roots.on(`add`,(e,t)=>{t.unbind(`isReadOnly`),t.bind(`isReadOnly`).to(this.editing.view.document,`isReadOnly`,e=>e||this._readOnlyRootLocks.has(t.rootName)),t.on(`change:isReadOnly`,(e,n,r)=>{let i=this.editing.view.createRangeIn(t);for(let e of i.getItems())e.is(`editableElement`)&&(e.unbind(`isReadOnly`),e.isReadOnly=r)})});for(let[e,t]of i){let n=this.model.document.createRoot(t.modelElement,e);t.lazyLoad&&(n._isLoaded=!1)}this.registerRootAttribute(`$rootEditableOptions`),ug(this);let o={shouldToolbarGroupWhenFull:!this.config.get(`toolbar.shouldNotGroupWhenFull`),editableElements:a,label:pP(this.config.get(`roots`),`label`)},s=new uP(this.locale,this.editing.view,fP(i),o);this.ui=new lP(this,s),this.model.document.on(`change:data`,()=>{let e=this.model.document.differ.getChangedRoots();for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`detached`&&this.fire(`detachRoot`,e)}for(let t of e){let e=this.model.document.getRoot(t.name);t.state==`attached`&&this.fire(`addRoot`,e)}}),this.listenTo(this.model,`canEditAt`,(e,[t])=>{if(!t)return;let n=!1;for(let e of t.getRanges()){let t=e.root;if(this._readOnlyRootLocks.has(t.rootName)){n=!0;break}}n&&(e.return=!1,e.stop())},{priority:`high`}),this.decorate(`loadRoot`),this.on(`loadRoot`,(e,[t])=>{let n=this.model.document.getRoot(t);if(!n)throw new w(`multi-root-editor-load-root-no-root`,this,{rootName:t});n._isLoaded&&(T(`multi-root-editor-load-root-already-loaded`),e.stop())},{priority:`highest`}),c(this);function c(e){let t=ca(e.config.get(`licenseKey`));t&&ua(t,`MRE`)&&(e.enableReadOnlyMode(Symbol(`invalidLicense`)),e._showLicenseError(`featureNotAllowed`,`Multi-root editor`))}}async destroy(){let e=this.config.get(`updateSourceElementOnDestroy`),t={};for(let n of Object.keys(this.sourceElements))t[n]=e?this.getData({rootName:n}):``;this.ui.destroy(),await super.destroy();for(let e of Object.keys(this.sourceElements))Ur(this.sourceElements[e],t[e])}addRoot(e,t={}){let n=t.initialData||t.data||``,r={...t.modelAttributes||t.attributes},i=t.modelElement||t.elementName||`$root`;if(!this.model.schema.isLimit(i))throw new w(`multi-root-editor-add-root-element-is-not-limit`,this,{rootName:e,elementName:i});_P(t.element)&&T(`multi-root-editor-add-root-element-option-ignored`),gP(r,t),t.description!=null&&!(`$description`in r)&&(r.$description=t.description),t.title!=null&&!(`$title`in r)&&(r.$title=t.title);let a=t=>{let a=t.addRoot(e,i);n&&t.insert(this.data.parse(n,a),a,0);for(let e of Object.keys(r))this.registerRootAttribute(e),t.setAttribute(e,r[e],a)};t.isUndoable?this.model.change(a):this.model.enqueueChange({isUndoable:!1},a)}detachRoot(e,t=!1){t?this.model.change(t=>t.detachRoot(e)):this.model.enqueueChange({isUndoable:!1},t=>t.detachRoot(e))}createEditable(e,t,n){let r,i;!t||typeof t==`string`?r=t:(r=t?.placeholder,n=t?.label,i=t?.element);let a=e.getAttribute(`$rootEditableOptions`)||{},o=vg(i||a.element),s=this.ui.view.createEditable(e.rootName,o,n||a.label);return s.isInlineRoot=!Cg(this,e.rootName),this.ui.addEditable(s,r||a.placeholder),this.editing.view.forceRender(),s.element}detachEditable(e){let t=e.rootName,n=this.ui.view.editables[t];return this.ui.removeEditable(n),this.ui.view.removeEditable(t),n.element}loadRoot(e,{data:t=``,attributes:n={}}={}){let r=this.model.document.getRoot(e);this.model.enqueueChange({isUndoable:!1},e=>{t&&e.insert(this.data.parse(t,r),r,0);for(let t of Object.keys(n))this.registerRootAttribute(t),e.setAttribute(t,n[t],r);r._isLoaded=!0,this.model.document.differ._bufferRootLoad(r)})}getFullData(e){let t={};for(let n of this.model.document.getRootNames())t[n]=this.data.get({...e,rootName:n});return t}getRootsAttributes(){let e={};for(let t of this.model.document.getRootNames())e[t]=this.getRootAttributes(t);return e}disableRoot(e,t){if(e==`$graveyard`)throw new w(`multi-root-editor-cannot-disable-graveyard-root`,this);let n=this._readOnlyRootLocks.get(e);if(n)n.add(t);else{this._readOnlyRootLocks.set(e,new Set([t]));let n=this.editing.view.document.getRoot(e);n.isReadOnly=!0,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}}enableRoot(e,t){let n=this._readOnlyRootLocks.get(e);if(!(!n||!n.has(t)))if(n.size===1){this._readOnlyRootLocks.delete(e);let t=this.editing.view.document.getRoot(e);t.isReadOnly=this.isReadOnly,Array.from(this.commands.commands()).forEach(e=>e.affectsData&&e.refresh())}else n.delete(t)}static async create(e,t={}){let n=new this(e,t);await n.initPlugins(),Sg(n),await n.ui.init();let r=pP(n.config.get(`roots`),`initialData`);return n._verifyRootsWithInitialData(r),await n.data.init(r),n.fire(`ready`),n}_verifyRootsWithInitialData(e){for(let t of this.model.document.getRootNames())if(!(t in e))throw new w(`multi-root-editor-root-initial-data-mismatch`,null);for(let t of Object.keys(e)){let e=this.model.document.getRoot(t);if(!e||!e.isAttached())throw new w(`multi-root-editor-root-initial-data-mismatch`,null)}}};function fP(e){return e.filter(([,{lazyLoad:e}])=>!e).map(([e])=>e)}function pP(e,t){return Object.fromEntries(Object.entries(e).filter(([,e])=>!e.lazyLoad).map(([e,n])=>[e,n[t]]).filter(([,e])=>e!==void 0))}function mP(e){if(e.get(`rootsAttributes`)){let t=e.get(`rootsAttributes`),n=e.get(`roots`);for(let[r,i]of Object.entries(t)){let t=n[r];if(!t)throw new w(`multi-root-editor-root-attributes-no-root`,null);if(Object.keys(t.modelAttributes||{}).length)throw new w(`multi-root-editor-root-attributes-conflict`,null);e.set(`roots.${r}.modelAttributes`,i)}}}function hP(e){let t=e.get(`roots`);for(let[n,r]of Object.entries(t)){if(r.modelAttributes?.$rootEditableOptions)continue;let t={...r.modelAttributes};gP(t,r),e.set(`roots.${n}.modelAttributes`,t)}}function gP(e,{placeholder:t,label:n,element:r}){if(`$rootEditableOptions`in e)return;let i=_P(r)?void 0:vg(r);e.$rootEditableOptions={...t&&{placeholder:t},...n&&{label:n},...i&&{element:i}}}function _P(e){return jn(e)}function vP(e){let t=e.modelAttributes?.$rootEditableOptions;return vg(e.element||t?.element)}const yP={\"(\":`)`,\"[\":`]`,\"{\":`}`};var bP=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document;this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`mention`)}execute(e){let t=this.editor.model,n=t.document.selection,r=typeof e.mention==`string`?{id:e.mention}:e.mention,i=r.id,a=e.range||n.getFirstRange();if(!t.canEditAt(a))return;let o=e.text||i,s=SP({_text:o,id:i},r);if(!i.startsWith(e.marker))throw new w(`mentioncommand-incorrect-id`,this);t.change(e=>{let r=Ui(n.getAttributes()),i=new Map(r.entries());i.set(`mention`,s);let c=t.insertContent(e.createText(o,i),a),l=c.start.nodeBefore,u=c.end.nodeAfter,d=u&&u.is(`$text`)&&u.data.startsWith(` `),f=!1;if(l&&u&&l.is(`$text`)&&u.is(`$text`)){let e=l.data.slice(-1),t=e in yP,n=t&&u.data.startsWith(yP[e]);f=t&&n}!f&&!d&&t.insertContent(e.createText(` `,r),a.start.getShiftedBy(o.length))})}},xP=class extends F{static get pluginName(){return`MentionEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model,n=t.document;t.schema.extend(`$text`,{allowAttributes:`mention`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`codeBlock $text`))return!1},`mention`),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,attributes:`data-mention`,classes:`mention`},model:{key:`mention`,value:e=>CP(e)}}),e.conversion.for(`downcast`).attributeToElement({model:`mention`,view:TP}),e.conversion.for(`downcast`).add(wP),n.registerPostFixer(e=>OP(e,n,t.schema)),n.registerPostFixer(e=>kP(e,n)),n.registerPostFixer(e=>EP(e,n)),e.commands.add(`mention`,new bP(e))}};function SP(e,t){return Object.assign({uid:he().slice(0,8)},e,t||{})}function CP(e,t){let n=e.getAttribute(`data-mention`),r=e.getChild(0);if(!r)return;let i=e.getAttribute(`data-mention-uid`);return SP({id:n,_text:r.data},i?{uid:i,...t}:t)}function wP(e){e.on(`attribute:mention`,(e,t,n)=>{let r=t.attributeNewValue;if(!t.item.is(`$textProxy`)||!r)return;let i=t.range.start;(i.textNode||i.nodeAfter).data!=r._text&&n.consumable.consume(t.item,e.name)},{priority:`highest`})}function TP(e,{writer:t,options:n}){if(e)return t.createAttributeElement(`span`,{class:`mention`,\"data-mention\":e.id,...!n.isClipboardPipeline&&{\"data-mention-uid\":e.uid}},{id:e.uid,priority:20})}function EP(e,t){let n=t.selection,r=n.focus;return n.isCollapsed&&n.hasAttribute(`mention`)&&DP(r)?(e.removeSelectionAttribute(`mention`),!0):!1}function DP(e){let t=e.isAtStart;return e.nodeBefore&&e.nodeBefore.is(`$text`)||t}function OP(e,t,n){let r=t.differ.getChanges(),i=!1;for(let t of r){if(t.type==`attribute`)continue;let r=t.position;if(t.name==`$text`){let t=r.textNode&&r.textNode.nextSibling;i=jP(r.textNode,e)||i,i=jP(t,e)||i,i=jP(r.nodeBefore,e)||i,i=jP(r.nodeAfter,e)||i}if(t.name!=`$text`&&t.type==`insert`){let t=r.nodeAfter;for(let n of e.createRangeIn(t).getItems())i=jP(n,e)||i}if(t.type==`insert`&&n.isInline(t.name)){let t=r.nodeAfter&&r.nodeAfter.nextSibling;i=jP(r.nodeBefore,e)||i,i=jP(t,e)||i}}return i}function kP(e,t){let n=t.differ.getChanges(),r=!1;for(let t of n)if(t.type===`attribute`&&t.attributeKey!=`mention`){let n=t.range.start.nodeBefore,i=t.range.end.nodeAfter;for(let a of[n,i])AP(a)&&a.getAttribute(t.attributeKey)!=t.attributeNewValue&&(e.setAttribute(t.attributeKey,t.attributeNewValue,a),r=!0)}return r}function AP(e){return!e||!(e.is(`$text`)||e.is(`$textProxy`))||!e.hasAttribute(`mention`)?!1:e.data!=e.getAttribute(`mention`)._text}function jP(e,t){return AP(e)?(t.removeAttribute(`mention`,e),!0):!1}var MP=class extends mx{selected;position;constructor(e){super(e),this.extendTemplate({attributes:{class:[`ck-mentions`],tabindex:`-1`}})}selectFirst(){this.select(0)}selectNext(){let e=this.selected,t=this.items.getIndex(e);this.select(t+1)}selectPrevious(){let e=this.selected,t=this.items.getIndex(e);this.select(t-1)}select(e){let t=0;e>0&&e{n?(this.domElement.classList.add(`ck-on`),this.domElement.classList.remove(`ck-off`)):(this.domElement.classList.add(`ck-off`),this.domElement.classList.remove(`ck-on`))}),this.listenTo(this.domElement,`click`,()=>{this.fire(`execute`)})}render(){super.render(),this.element=this.domElement}focus(){this.domElement.focus()}},PP=class extends dx{item;marker;highlight(){let e=this.children.first;e.isOn=!0}removeHighlight(){let e=this.children.first;e.isOn=!1}};const FP=[k.arrowup,k.arrowdown,k.esc],IP=[k.enter,k.tab];var LP=class extends F{_mentionsView;_mentionsConfigurations;_balloon;_items=new Fi;_lastRequested;_requestFeedDebounced;static get pluginName(){return`MentionUI`}static get isOfficialPlugin(){return!0}static get requires(){return[BC]}constructor(e){super(e),this._mentionsView=this._createMentionView(),this._mentionsConfigurations=new Map,this._requestFeedDebounced=Kt(this._requestFeed,100),e.config.define(`mention`,{feeds:[]})}init(){let e=this.editor,t=e.config.get(`mention.commitKeys`)||IP,n=FP.concat(t);this._balloon=e.plugins.get(BC),e.editing.view.document.on(`keydown`,(e,n)=>{i(n.keyCode)&&this._isUIVisible&&(n.preventDefault(),e.stop(),n.keyCode==k.arrowdown&&this._mentionsView.selectNext(),n.keyCode==k.arrowup&&this._mentionsView.selectPrevious(),t.includes(n.keyCode)&&this._mentionsView.executeSelected(),n.keyCode==k.esc&&this._hideUIAndRemoveMarker())},{priority:`highest`}),Ya({emitter:this._mentionsView,activator:()=>this._isUIVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideUIAndRemoveMarker()});let r=e.config.get(`mention.feeds`);for(let e of r){let{feed:t,marker:n,dropdownLimit:r}=e;if(!KP(n))throw new w(`mentionconfig-incorrect-marker`,null,{marker:n});let i={marker:n,feedCallback:typeof t==`function`?t.bind(this.editor):UP(t),itemRenderer:e.itemRenderer,dropdownLimit:r};this._mentionsConfigurations.set(n,i)}this._setupTextWatcher(r),this.listenTo(e,`change:isReadOnly`,()=>{this._hideUIAndRemoveMarker()}),this.on(`requestFeed:response`,(e,t)=>this._handleFeedResponse(t)),this.on(`requestFeed:error`,()=>this._hideUIAndRemoveMarker());function i(e){return n.includes(e)}}destroy(){super.destroy(),this._mentionsView.destroy()}get _isUIVisible(){return this._balloon.visibleView===this._mentionsView}_createMentionView(){let e=this.editor.locale,t=new MP(e);return t.items.bindTo(this._items).using(n=>{let{item:r,marker:i}=n,{dropdownLimit:a}=this._mentionsConfigurations.get(i),o=a||this.editor.config.get(`mention.dropdownLimit`)||10;if(t.items.length>=o)return null;let s=new PP(e),c=this._renderItem(r,i);return c.delegate(`execute`).to(s),s.children.add(c),s.item=r,s.marker=i,s.on(`execute`,()=>{t.fire(`execute`,{item:r,marker:i})}),s}),t.on(`execute`,(e,t)=>{let n=this.editor,r=n.model,i=t.item,a=t.marker,o=n.model.markers.get(`mention`),s=r.createPositionAt(r.document.selection.focus),c=r.createPositionAt(o.getStart()),l=r.createRange(c,s);this._hideUIAndRemoveMarker(),n.execute(`mention`,{mention:i,text:i.text,marker:a,range:l}),n.editing.view.focus()}),t}_getItemRenderer(e){let{itemRenderer:t}=this._mentionsConfigurations.get(e);return t}_requestFeed(e,t){this._lastRequested=t;let{feedCallback:n}=this._mentionsConfigurations.get(e),r=n(t);if(!(r instanceof Promise)){this.fire(`requestFeed:response`,{feed:r,marker:e,feedText:t});return}r.then(n=>{this._lastRequested==t?this.fire(`requestFeed:response`,{feed:n,marker:e,feedText:t}):this.fire(`requestFeed:discarded`,{feed:n,marker:e,feedText:t})}).catch(t=>{this.fire(`requestFeed:error`,{error:t}),T(`mention-feed-callback-error`,{marker:e})})}_setupTextWatcher(e){let t=this.editor,n=e.map(e=>({...e,pattern:BP(e.marker,e.minimumCharacters||0)})),r=new yT(t.model,VP(n));r.on(`matched`,(e,r)=>{let i=zP(n,r.text),a=t.model.document.selection.focus,o=t.model.createPositionAt(a.parent,i.position);if(WP(a)||GP(o)){this._hideUIAndRemoveMarker();return}let s=HP(i,r.text),c=i.marker.length+s.length,l=a.getShiftedBy(-c),u=a.getShiftedBy(-s.length),d=t.model.createRange(l,u);if(qP(t)){let e=t.model.markers.get(`mention`);t.model.change(t=>{t.updateMarker(e,{range:d})})}else t.model.change(e=>{e.addMarker(`mention`,{range:d,usingOperation:!1,affectsData:!1})});this._requestFeedDebounced(i.marker,s)}),r.on(`unmatched`,()=>{this._hideUIAndRemoveMarker()});let i=t.commands.get(`mention`);return r.bind(`isEnabled`).to(i),r}_handleFeedResponse(e){let{feed:t,marker:n}=e;if(!qP(this.editor))return;if(!this.editor.commands.get(`mention`).isEnabled){this._hideUIAndRemoveMarker();return}this._items.clear();for(let e of t){let t=typeof e==`object`?e:{id:e,text:e};this._items.add({item:t,marker:n})}let r=this.editor.model.markers.get(`mention`);this._items.length?this._showOrUpdateUI(r):this._hideUIAndRemoveMarker()}_showOrUpdateUI(e){this._isUIVisible?this._balloon.updatePosition(this._getBalloonPanelPositionData(e,this._mentionsView.position)):this._balloon.add({view:this._mentionsView,position:this._getBalloonPanelPositionData(e,this._mentionsView.position),singleViewMode:!0,balloonClassName:`ck-mention-balloon`}),this._mentionsView.position=this._balloon.view.position,this._mentionsView.selectFirst()}_hideUIAndRemoveMarker(){this._balloon.hasView(this._mentionsView)&&this._balloon.remove(this._mentionsView),qP(this.editor)&&this.editor.model.change(e=>e.removeMarker(`mention`)),this._mentionsView.position=void 0}_renderItem(e,t){let n=this.editor,r,i=e.id,a=this._getItemRenderer(t);if(a){let t=a(e);typeof t==`string`?i=t:r=new NP(n.locale,t)}if(!r){let e=new H(n.locale);e.label=i,e.withText=!0,r=e}return r}_getBalloonPanelPositionData(e,t){let n=this.editor,r=n.editing,i=r.view.domConverter,a=r.mapper,o=n.locale.uiLanguageDirection;return{target:()=>{let t=e.getRange();t.start.root.rootName==`$graveyard`&&(t=n.model.document.selection.getFirstRange());let r=a.toViewRange(t);return O.getDomRangeRects(i.viewRangeToDom(r)).pop()},limiter:()=>{let e=this.editor.editing.view,t=e.document.selection.editableElement;return t?e.domConverter.mapViewToDom(t.root):null},positions:RP(t,o)}}};function RP(e,t){let n={caret_se:e=>({top:e.bottom+3,left:e.right,name:`caret_se`,config:{withArrow:!1}}),caret_ne:(e,t)=>({top:e.top-t.height-3,left:e.right,name:`caret_ne`,config:{withArrow:!1}}),caret_sw:(e,t)=>({top:e.bottom+3,left:e.right-t.width,name:`caret_sw`,config:{withArrow:!1}}),caret_nw:(e,t)=>({top:e.top-t.height-3,left:e.right-t.width,name:`caret_nw`,config:{withArrow:!1}})};return Object.prototype.hasOwnProperty.call(n,e)?[n[e]]:t===`rtl`?[n.caret_sw,n.caret_se,n.caret_nw,n.caret_ne]:[n.caret_se,n.caret_sw,n.caret_ne,n.caret_nw]}function zP(e,t){let n;for(let r of e){let e=t.lastIndexOf(r.marker);e>0&&!t.substring(e-1).match(r.pattern)||(!n||e>=n.position)&&(n={marker:r.marker,position:e,minimumCharacters:r.minimumCharacters,pattern:r.pattern})}return n}function BP(e,t){let n=t==0?`*`:`{${t},}`,r=p.features.isRegExpUnicodePropertySupported?`\\\\p{Ps}\\\\p{Pi}\"'`:`\\\\(\\\\[{\"'`;e=e.replace(/[.*+?^${}()\\-|[\\]\\\\]/g,`\\\\$&`);let i=`(?:^|[ ${r}])(${e})(.${n})$`;return new RegExp(i,`u`)}function VP(e){return t=>{let n=zP(e,t);if(!n)return!1;let r=0;n.position!==0&&(r=n.position-1);let i=t.substring(r);return n.pattern.test(i)}}function HP(e,t){let n=0;e.position!==0&&(n=e.position-1);let r=BP(e.marker,0);return t.substring(n).match(r)[2]}function UP(e){return t=>e.filter(e=>(typeof e==`string`?e:String(e.id)).toLowerCase().includes(t.toLowerCase()))}function WP(e){let t=e.textNode&&e.textNode.hasAttribute(`mention`),n=e.nodeBefore;return t||n&&n.is(`$text`)&&n.hasAttribute(`mention`)}function GP(e){let t=e.nodeAfter;return t&&t.is(`$text`)&&t.hasAttribute(`mention`)}function KP(e){return!!e}function qP(e){return e.model.markers.has(`mention`)}var JP=class extends F{toMentionAttribute(e,t){return CP(e,t)}static get pluginName(){return`Mention`}static get isOfficialPlugin(){return!0}static get requires(){return[xP,LP]}},YP=o(((e,t)=>{((e,n)=>{typeof define==`function`&&define.amd?define([],n):typeof t==`object`&&t.exports?t.exports=n():e.fuzzysort=n()})(e,e=>{var t=(e,t)=>{if(!e||!t)return de;var n=p(e);se(t)||(t=f(t));var r=n.bitflags;return(r&t._bitflags)===r?h(n,t):de},n=(e,t,n)=>{if(!e)return n?.all?m(t,n):ue;var r=p(e),i=r.bitflags,a=r.containsSpace,o=u(n?.threshold||0),c=n?.limit||ce,l=0,d=0,g=t.length;function _(e){lpe.peek()._score&&pe.replaceTop(e))}if(n?.key)for(var v=n.key,y=0;y-1e3&&S[e]>le){var he=(S[e]+C[e])/4;he>S[e]&&(S[e]=he)}C[e]>S[e]&&(S[e]=C[e])}}if(a){for(let e=0;e-1e3&&ve>le){var he=(ve+x._score)/4;he>ve&&(ve=he)}x._score>ve&&(ve=x._score)}}if(_e.obj=ee,_e._score=ve,n?.scoreFn){if(ve=n.scoreFn(_e),!ve)continue;ve=u(ve),_e._score=ve}ve=0;--y)w[y]=pe.poll();return w.total=l+d,w},r=(e,t=``,n=``)=>{for(var r=typeof t==`function`?t:void 0,i=e.target,a=i.length,o=e.indexes,s=``,c=0,l=0,u=!1,d=[],f=0;f{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``);var t=v(e);return c(e,{_targetLower:t._lower,_targetLowerCodes:t.lowerCodes,_bitflags:t.bitflags})},a=()=>{b.clear(),x.clear()};class o{get indexes(){return this._indexes.slice(0,this._indexes.len).sort((e,t)=>e-t)}set indexes(e){return this._indexes=e}highlight(e,t){return r(this,e,t)}get score(){return l(this._score)}set score(e){this._score=u(e)}}class s extends Array{get score(){return l(this._score)}set score(e){this._score=u(e)}}var c=(e,t)=>{let n=new o;return n.target=e,n.obj=t.obj??de,n._score=t._score??le,n._indexes=t._indexes??[],n._targetLower=t._targetLower??``,n._targetLowerCodes=t._targetLowerCodes??de,n._nextBeginningIndexes=t._nextBeginningIndexes??de,n._bitflags=t._bitflags??0,n},l=e=>e===le?0:e>1?e:Math.E**(((-e+1)**.04307-1)*-2),u=e=>e===0?le:e>1?e:1-(Math.log(e)/-2+1)**(1/.04307),d=e=>{typeof e==`number`?e=``+e:typeof e!=`string`&&(e=``),e=e.trim();var t=v(e),n=[];if(t.containsSpace){var r=e.split(/\\s+/);r=[...new Set(r)];for(var i=0;i{if(e.length>999)return i(e);var t=b.get(e);return t===void 0?(t=i(e),b.set(e,t),t):t},p=e=>{if(e.length>999)return d(e);var t=x.get(e);return t===void 0?(t=d(e),x.set(e,t),t):t},m=(e,t)=>{var n=[];n.total=e.length;var r=t?.limit||ce;if(t?.key)for(var i=0;i=r)return n}}else if(t?.keys)for(var i=0;i=0;--d){var o=oe(a,t.keys[d]);if(!o){u[d]=fe;continue}se(o)||(o=f(o)),o._score=le,o._indexes.len=0,u[d]=o}if(u.obj=a,u._score=le,n.push(u),n.length>=r)return n}else for(var i=0;i=r))return n}return n},h=(e,t,n=!1,r=!1)=>{if(n===!1&&e.containsSpace)return g(e,t,r);for(var i=e._lower,a=e.lowerCodes,s=a[0],c=t._targetLowerCodes,l=a.length,u=c.length,d=0,f=0,p=0;;){var m=s===c[f];if(m){if(te[p++]=f,++d,d===l)break;s=a[d]}if(++f,f>=u)return de}var d=0,h=!1,_=0,v=t._nextBeginningIndexes;v===de&&(v=t._nextBeginningIndexes=ee(t.target)),f=te[0]===0?0:v[te[0]-1];var y=0;if(f!==u)for(;;)if(f>=u){if(d<=0||(++y,y>200))break;--d;var b=ne[--_];f=v[b]}else{var m=a[d]===c[f];if(m){if(ne[_++]=f,++d,d===l){h=!0;break}++f}else f=v[f]}var x=l<=1?-1:t._targetLower.indexOf(i,te[0]),re=!!~x,S=re?x===0||t._nextBeginningIndexes[x-1]===x:!1;if(re&&!S){for(var C=0;C{for(var t=0,n=0,r=1;r24&&(t*=(a-24)*10)}return t-=(u-l)/2,re&&(t/=1+l*l*1),S&&(t/=1+l*l*1),t-=(u-l)/2,t};if(!h){if(re)for(var C=0;C{for(var r=new Set,i=0,a=de,o=0,s=e.spaceSearches,c=s.length,l=0,u=()=>{for(let e=l-1;e>=0;e--)t._nextBeginningIndexes[re[e*2+0]]=re[e*2+1]},d=!1,f=0;f=0&&v===t._nextBeginningIndexes[e];e--)t._nextBeginningIndexes[e]=_,re[l*2+0]=e,re[l*2+1]=v,l++}}i+=a._score/c,C[f]=a._score/c,a._indexes[0]i){if(n)for(var f=0;fe.replace(/\\p{Script=Latin}+/gu,e=>e.normalize(`NFD`)).replace(/[\\u0300-\\u036f]/g,``),v=e=>{e=_(e);for(var t=e.length,n=e.toLowerCase(),r=[],i=0,a=!1,o=0;o=97&&s<=122?s-97:s>=48&&s<=57?26:s<=127?30:31;i|=1<{for(var t=e.length,n=[],r=0,i=!1,a=!1,o=0;o=65&&s<=90,l=c||s>=97&&s<=122||s>=48&&s<=57,u=c&&!i||!a||!l;i=c,a=l,u&&(n[r++]=o)}return n},ee=e=>{e=_(e);for(var t=e.length,n=y(e),r=[],i=n[0],a=0,o=0;oo?r[o]=i:(i=n[++a],r[o]=i===void 0?t:i);return r},b=new Map,x=new Map,te=[],ne=[],re=[],S=[],C=[],ie=[],ae=[],oe=(e,t)=>{var n=e[t];if(n!==void 0)return n;if(typeof t==`function`)return t(e);var r=t;Array.isArray(t)||(r=t.split(`.`));for(var i=r.length,a=-1;e&&++atypeof e==`object`&&typeof e._bitflags==`number`,ce=1/0,le=-ce,ue=[];ue.total=0;var de=null,fe=i(``),pe=(e=>{var t=[],n=0,r={},i=e=>{for(var r=0,i=t[r],a=1;a>1]=t[r],a=1+(r<<1)}for(var s=r-1>>1;r>0&&i._score>1)t[r]=t[s];t[r]=i};return r.add=(e=>{var r=n;t[n++]=e;for(var i=r-1>>1;r>0&&e._score>1)t[r]=t[i];t[r]=e}),r.poll=(e=>{if(n!==0){var r=t[0];return t[0]=t[--n],i(),r}}),r.peek=(e=>{if(n!==0)return t[0]}),r.replaceTop=(e=>{t[0]=e,i()}),r})();return{single:t,go:n,prepare:i,cleanup:a}})}));function XP(e){let t=ZP();if(!t)return!1;t.font=`12px Arial, Sans-Serif`,t.textBaseline=`top`,t.canvas.width=40,t.canvas.height=25,t.clearRect(0,0,40,25),t.fillStyle=`#FF0000`,t.fillText(e,0,22),t.fillStyle=`#0000FF`,t.fillText(e,20,22);let n=t.getImageData(0,0,20,25).data,r=n.length,i=0;for(;i=r)return!1;let a=20+i/4%20,o=Math.floor(i/4/20),s=t.getImageData(a,o,1,1).data;return!(n[i]!==s[0]||n[i+2]!==s[2]||t.measureText(e).width>=20)}function ZP(){try{return document.createElement(`canvas`).getContext(`2d`,{willReadFrequently:!0})}catch{return null}}const QP={0:`default`,1:`light`,2:`medium-light`,3:`medium`,4:`medium-dark`,5:`dark`},$P={\"🪎\":17,\"🫩\":16,\"🫨\":15.1,\"🫠\":14,\"😶‍🌫️\":13.1,\"🧑‍💻\":12.1,\"🥰\":11,\"🤪\":5,\"⚕️\":4,\"🤣\":3,\"👋🏽\":2,\"😀\":1,\"😐\":.7,\"😂\":.6};var eF=class e extends F{_emojiCanvas=null;static get pluginName(){return`EmojiUtils`}static get isOfficialPlugin(){return!0}init(){this._emojiCanvas=document.createElement(`canvas`).getContext(`2d`)}isEmojiSupported(e,t,n){return e.version<=t?this.hasZwj(e.emoji)?this.isEmojiZwjSupported(e,n):!0:!1}getEmojiSupportedVersionByOs(){for(let[t,n]of Object.entries($P))if(e._isEmojiSupported(t))return n;return 0}hasZwj(e){return e.includes(`‍`)}isEmojiZwjSupported(e,t){return this.getNodeWidthUsingCanvas(t,e.emoji)<24*1.8?!0:this.getNodeWidth(t,e.emoji)<24*1.8}getNodeWidth(e,t){let n=document.createElement(`span`);n.textContent=t,e.appendChild(n);let r=n.offsetWidth;return e.removeChild(n),r}getNodeWidthUsingCanvas(e,t){let n=getComputedStyle(e);return this._emojiCanvas.font=[n.fontStyle,n.fontVariant,n.fontWeight,`24px`,`\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", ${n.fontFamily}`].join(` `),Math.ceil(this._emojiCanvas.measureText(t).width)}createEmojiWidthTestingContainer(){let e=document.createElement(`div`);return e.setAttribute(`aria-hidden`,`true`),e.style.position=`absolute`,e.style.left=`-9999px`,e.style.whiteSpace=`nowrap`,e.style.fontSize=`24px`,e}normalizeEmojiSkinTone(e){let t={...e,skins:{default:e.emoji}};return e.skins&&e.skins.forEach(e=>{let n=QP[e.tone];t.skins[n]=e.emoji}),t}isEmojiCategoryAllowed(e){return e.group!==2}static _isEmojiSupported=XP},tF=class{_cache=new Map;async fetch({url:e,cacheKeys:t,transform:n}){let r=nF(e,t);if(this._cache.has(r))return this._cache.get(r).promise;let i=fetch(e,{cache:`force-cache`}).then(e=>e.ok?e.json():Promise.resolve([])).then(e=>n(e)).catch(()=>(this._cache.delete(r),[]));return this._cache.set(r,rF(i)),i}getSync({url:e,cacheKeys:t}){let n=this._cache.get(nF(e,t));return!n||n.status!==`fulfilled`?null:n.value}clear(){this._cache.clear()}};function nF(e,t){return[e,...t].join(`|`)}function rF(e){let t={promise:e,status:`pending`,value:void 0};return e.then(e=>{Object.assign(t,{status:`fulfilled`,value:e})}),t}var iF=l(YP(),1),aF=class e extends F{_url;static get requires(){return[eF]}static get pluginName(){return`EmojiRepository`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`emoji`,{version:void 0,skinTone:`default`,definitionsUrl:void 0,useCustomFont:!1}),this.set(`isRepositoryReady`,null),this._url=this._getUrl()}init(){this._warnAboutCdnUse(),e._cache.fetch({url:this._url.toString(),cacheKeys:this._cacheKeys,transform:e=>this._normalizeEmoji(e)}).then(()=>{if(this.editor.state===`destroyed`)return;let e=!!this._getItems();e||T(`emoji-repository-empty`),this.isRepositoryReady=e})}onReady(e){if(this.editor.state!==`destroyed`){if(this.isRepositoryReady!==null){e(this.isRepositoryReady);return}this.once(`change:isRepositoryReady`,(t,n,r)=>{e(!!r)})}}getEmojiByQuery(e){let t=this._getItems();return!t||!e.split(/\\s/).filter(Boolean).some(e=>e.length>=2)?[]:iF.default.go(e,t,{threshold:.6,keys:[`emoticon`,`annotation`,t=>e.split(/\\s/).filter(Boolean).flatMap(e=>t.tags?.filter(t=>t.startsWith(e))).join()]}).map(e=>e.obj)}getEmojiCategories(){let e=this._getItems();if(!e)return[];let{t}=this.editor.locale,n=[{title:t(`Smileys & Expressions`),icon:`😄`,groupId:0},{title:t(`Gestures & People`),icon:`👋`,groupId:1},{title:t(`Animals & Nature`),icon:`🐻`,groupId:3},{title:t(`Food & Drinks`),icon:`🍎`,groupId:4},{title:t(`Travel & Places`),icon:`🚘`,groupId:5},{title:t(`Activities`),icon:`🏀`,groupId:6},{title:t(`Objects`),icon:`💡`,groupId:7},{title:t(`Symbols`),icon:`🔵`,groupId:8},{title:t(`Flags`),icon:`🏁`,groupId:9}],r=Wt(e,e=>e.group);return n.map(e=>({...e,items:r[e.groupId]}))}getSkinTones(){let{t:e}=this.editor.locale;return[{id:`default`,icon:`👋`,tooltip:e(`Default skin tone`)},{id:`light`,icon:`👋🏻`,tooltip:e(`Light skin tone`)},{id:`medium-light`,icon:`👋🏼`,tooltip:e(`Medium Light skin tone`)},{id:`medium`,icon:`👋🏽`,tooltip:e(`Medium skin tone`)},{id:`medium-dark`,icon:`👋🏾`,tooltip:e(`Medium Dark skin tone`)},{id:`dark`,icon:`👋🏿`,tooltip:e(`Dark skin tone`)}]}isReady(){return new Promise((e,t)=>{let n=()=>t(Error(`The editor was destroyed before the emoji repository finished loading.`));this.editor.state===`destroyed`?n():(this.onReady(e),this.editor.once(`destroy`,n))})}_getUrl(){let{definitionsUrl:e,version:t}=this.editor.config.get(`emoji`);if(!e||e===`cdn`){let e=t||16,n=new URL(`https://cdn.ckeditor.com/ckeditor5/data/emoji/{version}/en.json`.replace(`{version}`,e.toString()));return n.searchParams.set(`editorVersion`,Ce),n}return t&&T(`emoji-repository-redundant-version`),new URL(e)}_warnAboutCdnUse(){let e=this.editor,t=e.config.get(`emoji`),n=e.config.get(`licenseKey`),r=window[Symbol.for(`cke distribution`)];n!==`GPL`&&r!==`cloud`&&(t&&t.definitionsUrl||T(`emoji-repository-cdn-use`))}_getItems(){let t=e._cache.getSync({url:this._url.toString(),cacheKeys:this._cacheKeys});return t&&t.length?t:null}_normalizeEmoji(e){let t=this.editor,n=t.config.get(`emoji.useCustomFont`),r=t.plugins.get(`EmojiUtils`),i=e.filter(e=>r.isEmojiCategoryAllowed(e));if(n)return i.map(e=>r.normalizeEmojiSkinTone(e));let a=r.getEmojiSupportedVersionByOs(),o=r.createEmojiWidthTestingContainer();document.body.appendChild(o);let s=i.filter(e=>r.isEmojiSupported(e,a,o)).map(e=>r.normalizeEmojiSkinTone(e));return o.remove(),s}get _cacheKeys(){return[`useCustomFont:${!!this.editor.config.get(`emoji.useCustomFont`)}`]}static _cache=new tF};const oF=`:__EMOJI_SHOW_ALL:`,sF=`:__EMOJI_HINT:`;var cF=class extends F{_emojiDropdownLimit;_skinTone;static get requires(){return[aF,gT,JP]}static get pluginName(){return`EmojiMention`}static get isOfficialPlugin(){return!0}constructor(e){super(e),this.editor.config.define(`emoji`,{dropdownLimit:6}),this._emojiDropdownLimit=e.config.get(`emoji.dropdownLimit`),this._skinTone=e.config.get(`emoji.skinTone`),this._setupMentionConfiguration(e)}_setupMentionConfiguration(e){let t=e.config.get(`mergeFields.prefix`),n=e.config.get(`mention.feeds`),r=t?t[0]===`:`:!1;if(n.filter(e=>!e._isEmojiMarker).some(e=>e.marker===`:`)||r){T(`emoji-config-marker-already-used`,{marker:`:`});return}if(n.some(e=>e._isEmojiMarker))return;let i={_isEmojiMarker:!0,marker:`:`,dropdownLimit:this._emojiDropdownLimit,itemRenderer:this._customItemRendererFactory(this.editor.t),feed:this._queryEmojiCallbackFactory()};this.editor.config.set(`mention.feeds`,[...n,i])}init(){let{editor:e}=this;this.emojiPickerPlugin=e.plugins.has(`EmojiPicker`)?e.plugins.get(`EmojiPicker`):null,this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`),this._overrideMentionExecuteListener()}_customItemRendererFactory(e){return t=>{let n=document.createElement(`button`);n.classList.add(`ck`),n.classList.add(`ck-button`),n.classList.add(`ck-button_with-text`),n.id=`mention-list-item-id${t.id.slice(0,-1)}`,n.type=`button`,n.tabIndex=-1;let r=document.createElement(`span`);return r.classList.add(`ck`),r.classList.add(`ck-button__label`),n.appendChild(r),t.id===sF?(n.classList.add(`ck-list-item-button`),n.classList.add(`ck-disabled`),r.textContent=e(`Keep on typing to see the emoji.`)):t.id===oF?r.textContent=e(`Show all emoji...`):r.textContent=`${t.text} ${t.id}`,n}}_overrideMentionExecuteListener(){let{editor:e}=this;e.commands.get(`mention`).on(`execute`,(t,n)=>{if(!this.emojiRepositoryPlugin.isRepositoryReady)return;let r=n[0];if(r.marker===`:`&&(t.stop(),r.mention.id!==sF))if(r.mention.id===oF){let t=[...r.range.getItems()].filter(e=>e.is(`$textProxy`)).map(e=>e.data).reduce((e,t)=>e+t,``);e.model.change(t=>{e.model.deleteContent(t.createSelection(r.range))});let n=this.emojiPickerPlugin;n.showUI(t.slice(1)),setTimeout(()=>{n.emojiPickerView.focus()})}else e.execute(`insertText`,{text:r.mention.text,range:r.range})},{priority:`high`})}_queryEmojiCallbackFactory(){return e=>{if(e.startsWith(` `)||e.startsWith(`:`)||!this.emojiRepositoryPlugin.isRepositoryReady)return[];let t=this.emojiRepositoryPlugin.getEmojiByQuery(e).map(e=>{let t=e.skins[this._skinTone]||e.skins.default;return this.emojiPickerPlugin&&(t=e.skins[this.emojiPickerPlugin.skinTone]||e.skins.default),{id:`:${e.annotation}:`,text:t}});if(!this.emojiPickerPlugin)return t.slice(0,this._emojiDropdownLimit);let n={id:e.length>1?oF:sF};return[...t.slice(0,this._emojiDropdownLimit-1),n]}}},lF=class extends I{constructor(e){super(e);let t=e.plugins.get(`EmojiRepository`);this.listenTo(t,`change:isRepositoryReady`,()=>this.refresh())}refresh(){let e=this.editor,t=e.plugins.get(`EmojiRepository`),n=e.model,r=n.schema,i=n.document.selection;this.isEnabled=!!t.isRepositoryReady&&r.checkChild(i.getFirstPosition(),`$text`)}execute(e=``){this.editor.plugins.get(`EmojiPicker`).showUI(e)}},uF=class extends P{tiles;focusTracker;keystrokes;emojiCategories;cachedTiles;_getEmojiByQuery;constructor(e,{categoryName:t,emojiCategories:n,getEmojiByQuery:r,skinTone:i}){super(e),this.set(`isEmpty`,!0),this.set(`categoryName`,t),this.set(`skinTone`,i),this.tiles=this.createCollection(),this.cachedTiles=this.createCollection(),this.focusTracker=new M,this.keystrokes=new N,this._getEmojiByQuery=r,this.emojiCategories=n;let a=this.bindTemplate;this.setTemplate({tag:`div`,children:[{tag:`div`,attributes:{role:`grid`,class:[`ck`,`ck-emoji__grid`]},children:this.tiles}],attributes:{role:`tabpanel`,class:[`ck`,`ck-emoji__tiles`,a.if(`isEmpty`,`ck-hidden`,e=>e)]}}),$a({keystrokeHandler:this.keystrokes,focusTracker:this.focusTracker,gridItems:this.tiles,numberOfColumns:()=>u.window.getComputedStyle(this.element.firstChild).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}render(){super.render(),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.keystrokes.destroy(),this.focusTracker.destroy()}focus(){let e=this.tiles.first;e&&e.focus()}filter(e){let{matchingItems:t,allItems:n}=e?this._getItemsByQuery(e.source):this._getItemsByCategory();return this._updateGrid(t),this.set(`isEmpty`,t.length===0),{resultsCount:t.length,totalItemsCount:n.length}}_getItemsByQuery(e){return{matchingItems:this._getEmojiByQuery(e),allItems:this.emojiCategories.flatMap(e=>e.items)}}_getItemsByCategory(){let e=this.emojiCategories.find(e=>e.title===this.categoryName);if(!e)return{matchingItems:[],allItems:[]};let{items:t}=e;return{matchingItems:t,allItems:t}}_updateGrid(e){[...this.tiles].forEach(e=>{this.focusTracker.remove(e),this.tiles.remove(e)}),e.map(e=>{let t=e.skins[this.skinTone]||e.skins.default;return this.cachedTiles.get(t)||this._createTile(t,e.annotation)}).forEach(e=>{this.tiles.add(e),this.focusTracker.add(e)})}_createTile(e,t){let n=new H(this.locale);return n.viewUid=e,n.extendTemplate({attributes:{class:[`ck-emoji__tile`]}}),n.set({label:e,tooltip:t,withText:!0,ariaLabel:t,ariaLabelledBy:void 0}),n.on(`execute`,()=>{this.fire(`execute`,{name:t,emoji:e})}),this.cachedTiles.add(n),n}},dF=class extends P{focusTracker;keystrokes;focusCycler;buttonViews;constructor(e,{emojiCategories:t,categoryName:n}){super(e),this.buttonViews=this.createCollection(t.map(e=>this._createCategoryButton(e))),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.buttonViews,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`arrowleft`,focusNext:`arrowright`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__categories-list`],role:`tablist`},children:this.buttonViews}),this.on(`change:categoryName`,(e,t,n,r)=>{let i=this.buttonViews.find(e=>e.tooltip===r);i&&(i.isOn=!1);let a=this.buttonViews.find(e=>e.tooltip===n);a&&(a.isOn=!0)}),this.set(`categoryName`,n)}render(){super.render(),this.buttonViews.forEach(e=>{this.focusTracker.add(e)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy(),this.buttonViews.destroy()}focus(){this.buttonViews.first.focus()}setCategories(e){for(let e of this.buttonViews)this.focusTracker.remove(e),e.destroy();this.buttonViews.clear();for(let t of e){let e=this._createCategoryButton(t);this.buttonViews.add(e),this.isRendered&&this.focusTracker.add(e)}}enableCategories(){this.buttonViews.forEach(e=>{e.isEnabled=!0})}disableCategories(){this.buttonViews.forEach(e=>{e.set({class:``,isEnabled:!1,isOn:!1})})}_createCategoryButton(e){let t=new H,n=t.bindTemplate;return t.extendTemplate({attributes:{\"aria-selected\":n.to(`isOn`,e=>e.toString()),class:[`ck-emoji__category-item`]}}),t.set({ariaLabel:e.title,label:e.icon,role:`tab`,tooltip:e.title,withText:!0,ariaLabelledBy:void 0}),t.on(`execute`,()=>{this.categoryName=e.title}),t.on(`change:isEnabled`,()=>{t.isEnabled&&t.tooltip===this.categoryName&&(t.isOn=!0)}),t}},fF=class extends P{inputView;gridView;constructor(e,{gridView:t,resultsView:n}){super(e),this.gridView=t;let r=e.t;this.inputView=new JC(this.locale,{queryView:{label:r(`Find an emoji (min. 2 characters)`),creator:Jx},filteredView:this.gridView,infoView:{instance:n}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-search`],tabindex:`-1`},children:[this.inputView.queryView]}),this.inputView.delegate(`search`).to(this)}destroy(){super.destroy(),this.inputView.destroy()}search(e){let t=e?new RegExp(Bn(e),`ig`):null,n=this.gridView.filter(t);this.inputView.fire(`search`,{query:e,...n})}setInputValue(e){e?this.inputView.queryView.fieldView.value=e:this.inputView.queryView.fieldView.reset()}getInputValue(){return this.inputView.queryView.fieldView.element.value}focus(){this.inputView.focus()}},pF=class extends P{dropdownView;_skinTones;constructor(e,{skinTone:t,skinTones:n}){super(e),this.set(`skinTone`,t),this._skinTones=n;let r=e.t,i=r(`Select skin tone`),a=Nx(e),o=new Fi;for(let{id:e,icon:t,tooltip:n}of this._skinTones){let r={type:`button`,model:new RC({value:e,label:t,ariaLabel:n,tooltip:n,tooltipPosition:`e`,role:`menuitemradio`,withText:!0,ariaLabelledBy:void 0})};r.model.bind(`isOn`).to(this,`skinTone`,t=>t===e),o.add(r)}Lx(a,o,{ariaLabel:i,role:`menu`}),a.buttonView.set({label:this._getSkinTone().icon,ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),this.dropdownView=a,this.listenTo(a,`execute`,e=>{this.skinTone=e.source.value}),a.buttonView.bind(`label`).to(this,`skinTone`,()=>this._getSkinTone().icon),a.buttonView.bind(`ariaLabel`).to(this,`skinTone`,()=>`${this._getSkinTone().tooltip}, ${i}`),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-emoji__skin-tone`]},children:[a]})}focus(){this.dropdownView.buttonView.focus()}_getSkinTone(){return this._skinTones.find(e=>e.id===this.skinTone)}},mF=class extends P{items;focusTracker;keystrokes;focusCycler;searchView;toneView;categoriesView;gridView;infoView;constructor(e,{emojiCategories:t,getEmojiByQuery:n,skinTone:r,skinTones:i}){super(e);let a=t[0]?.title??``;this.gridView=new uF(e,{categoryName:a,emojiCategories:t,getEmojiByQuery:n,skinTone:r}),this.infoView=new KC,this.searchView=new fF(e,{gridView:this.gridView,resultsView:this.infoView}),this.categoriesView=new dF(e,{emojiCategories:t,categoryName:a}),this.toneView=new pF(e,{skinTone:r,skinTones:i}),this.items=this.createCollection([this.searchView,this.toneView,this.categoriesView,this.gridView,this.infoView]),this.focusTracker=new M,this.keystrokes=new N,this.focusCycler=new Hy({focusables:this.items,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,children:[{tag:`div`,children:[this.searchView,this.toneView],attributes:{class:[`ck`,`ck-emoji__search`]}},this.categoriesView,this.gridView,{tag:`div`,children:[this.infoView],attributes:{class:[`ck`,`ck-search__results`]}}],attributes:{tabindex:`-1`,class:[`ck`,`ck-emoji`,`ck-search`]}}),this._setupEventListeners()}render(){super.render(),this.focusTracker.add(this.searchView.element),this.focusTracker.add(this.toneView.element),this.focusTracker.add(this.categoriesView.element),this.focusTracker.add(this.gridView.element),this.focusTracker.add(this.infoView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.searchView.focus()}setCategories(e){let{emojiCategories:t}=this.gridView,n=e[0].title;t.splice(0,t.length,...e),this.categoriesView.setCategories(e),this.categoriesView.categoryName=n,this.gridView.categoryName=n,this.searchView.search(this.searchView.getInputValue())}_setupEventListeners(){let e=this.locale.t;this.searchView.on(`search`,(e,t)=>{t.query?this.categoriesView.disableCategories():this.categoriesView.enableCategories()}),this.searchView.on(`search`,(t,n)=>{this.categoriesView.buttonViews.length&&(n.query.length===1?this.infoView.set({primaryText:e(`Keep on typing to see the emoji.`),secondaryText:e(`The query must contain at least two characters.`),isVisible:!0}):n.resultsCount?this.infoView.set({isVisible:!1}):this.infoView.set({primaryText:e(`No emojis were found matching \"%0\".`,n.query),secondaryText:e(`Please try a different phrase or check the spelling.`),isVisible:!0}))}),this.searchView.on(`search`,()=>{this.fire(`update`),this.gridView.element.scrollTo(0,0)}),this.categoriesView.on(`change:categoryName`,(e,t,n)=>{this.gridView.categoryName=n,this.searchView.search(``)}),this.toneView.on(`change:skinTone`,(e,t,n)=>{this.gridView.skinTone=n,this.searchView.search(this.searchView.getInputValue())})}},hF=class extends P{backButtonView;focusTracker=new M;keystrokes=new N;children;_focusables=new pa;_focusCycler;constructor(e){super(e),this.backButtonView=this._createBackButton(),this.children=this.createCollection([this._createHeaderView()]),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-form`,`ck-emoji-picker-form`],tabindex:`-1`},children:this.children})}render(){super.render(),[...this.children.filter(Wy),this.backButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element),Gy(e)&&this._focusCycler.chain(e.focusCycler)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this._focusCycler.focusFirst()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Emoji picker`)});return t.children.add(this.backButtonView,0),t}};const gF=`emoji-picker`;var _F=class extends F{static get requires(){return[aF,BC,Qy,gT]}static get pluginName(){return`EmojiPicker`}static get isOfficialPlugin(){return!0}init(){let{editor:e}=this;this.balloonPlugin=e.plugins.get(`ContextualBalloon`),this.emojiRepositoryPlugin=e.plugins.get(`EmojiRepository`);let t=new lF(e);e.commands.add(`emoji`,t),e.ui.componentFactory.add(`emoji`,()=>{let e=this._createButton(H,t);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:emoji`,()=>this._createButton(U,t)),this._setupConversion()}destroy(){super.destroy(),this.emojiPickerView&&this.emojiPickerView.destroy()}get skinTone(){return this.emojiPickerView?this.emojiPickerView.gridView.skinTone:this.editor.config.get(`emoji.skinTone`)}showUI(e=``){this._showFakeVisualSelection(),this.emojiPickerView||=this._createEmojiPickerView(),e&&this.emojiPickerView.searchView.setInputValue(e),this.emojiPickerView.searchView.search(e),this.emojiPickerFormView||=this._createEmojiPickerFormView(),this.balloonPlugin.hasView(this.emojiPickerFormView)||(this.emojiPickerFormView.backButtonView.isVisible=!!this.balloonPlugin.visibleView,this.balloonPlugin.add({view:this.emojiPickerFormView,position:this._getBalloonPositionData(),balloonClassName:`ck-emoji-picker-balloon`})),this.emojiPickerView.focus()}_createButton(e,t){let n=new e(this.editor.locale),r=this.editor.locale.t;return n.bind(`isEnabled`).to(t,`isEnabled`),n.set({label:r(`Emoji`),icon:x_,isToggleable:!0}),n.on(`execute`,()=>{this.editor.editing.view.scrollToTheSelection(),this.showUI()}),n}_createEmojiPickerView(){let e=[...this.emojiRepositoryPlugin.getEmojiCategories()],t=new mF(this.editor.locale,{emojiCategories:e,skinTone:this.editor.config.get(`emoji.skinTone`),skinTones:this.emojiRepositoryPlugin.getSkinTones(),getEmojiByQuery:e=>this.emojiRepositoryPlugin.getEmojiByQuery(e)});return this.emojiRepositoryPlugin.isRepositoryReady||this.emojiRepositoryPlugin.onReady(e=>{if(!e)return;let n=this.emojiRepositoryPlugin.getEmojiCategories();n.length&&t.setCategories(n)}),this.listenTo(t.gridView,`execute`,(e,t)=>{let n=this.editor,r=t.emoji;this._hideUI(),n.execute(`insertText`,{text:r})}),t}_createEmojiPickerFormView(){let e=new hF(this.editor.locale);return e.children.add(this.emojiPickerView),this.listenTo(this.emojiPickerView,`update`,()=>{this.balloonPlugin.visibleView===e&&this.balloonPlugin.updatePosition()}),this.listenTo(e,`cancel`,()=>{this._hideUI()}),e.keystrokes.set(`Esc`,(e,t)=>{this._hideUI(),t()}),Ya({emitter:e,contextElements:[this.balloonPlugin.view.element],callback:()=>{this._hideUI(!1)},activator:()=>this.balloonPlugin.visibleView===e}),e}_hideUI(e=!0){this.balloonPlugin.remove(this.emojiPickerFormView),this.emojiPickerView.searchView.setInputValue(``),e&&this.editor.editing.view.focus(),this._hideFakeVisualSelection()}_setupConversion(){let e=this.editor;e.conversion.for(`editingDowncast`).markerToHighlight({model:gF,view:{classes:[`ck-fake-emoji-selection`]}}),e.conversion.for(`editingDowncast`).markerToElement({model:gF,view:(e,{writer:t})=>{if(!e.markerRange.isCollapsed)return null;let n=t.createUIElement(`span`);return t.addClass([`ck-fake-emoji-selection`,`ck-fake-emoji-selection_collapsed`],n),n}})}_getBalloonPositionData(){let e=this.editor.editing.view,t=e.document;return{target:()=>e.domConverter.viewRangeToDom(t.selection.getFirstRange())}}_showFakeVisualSelection(){let e=this.editor.model;e.change(t=>{let n=e.document.selection.getFirstRange();if(e.markers.has(gF))t.updateMarker(gF,{range:n});else if(n.start.isAtEnd){let r=n.start.getLastMatchingPosition(({item:t})=>!e.schema.isContent(t),{boundaries:n});t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:t.createRange(r,n.end)})}else t.addMarker(gF,{usingOperation:!1,affectsData:!1,range:n})})}_hideFakeVisualSelection(){let e=this.editor.model;e.markers.has(gF)&&e.change(e=>{e.removeMarker(gF)})}},tne=class extends F{static get requires(){return[cF,_F]}static get pluginName(){return`Emoji`}static get isOfficialPlugin(){return!0}},vF=class extends I{constructor(e){super(e),this.affectsData=!1}execute(){let e=this.editor.model,t=e.document.selection,n=e.schema.getLimitElement(t);if(t.containsEntireContent(n)||!yF(e.schema,n))do if(n=n.parent,!n)return;while(!yF(e.schema,n));e.change(e=>{e.setSelection(n,`in`)})}};function yF(e,t){return e.isLimit(t)&&(e.checkChild(t,`$text`)||e.checkChild(t,`paragraph`))}const nne=yi(`Ctrl+A`);var bF=class extends F{static get pluginName(){return`SelectAllEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=e.editing.view.document;e.commands.add(`selectAll`,new vF(e)),this.listenTo(n,`keydown`,(t,n)=>{vi(n)===nne&&(e.execute(`selectAll`),n.preventDefault())}),e.accessibility.addKeystrokeInfos({keystrokes:[{label:t(`Select all`),keystroke:`CTRL+A`}]})}},xF=class extends F{static get pluginName(){return`SelectAllUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`selectAll`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:selectAll`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`selectAll`),i=new e(t.locale),a=n.t;return i.set({label:a(`Select all`),icon:ny,keystroke:`Ctrl+A`}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`selectAll`),t.editing.view.focus()}),i}},SF=class extends F{static get requires(){return[bF,xF]}static get pluginName(){return`SelectAll`}static get isOfficialPlugin(){return!0}},rne=class extends F{static get requires(){return[tb,PO,TE,SF,kE,gT,Ik]}static get pluginName(){return`Essentials`}static get isOfficialPlugin(){return!0}},CF=class extends P{children;_findInputView;_replaceInputView;_findButtonView;_findPrevButtonView;_findNextButtonView;_advancedOptionsCollapsibleView;_matchCaseSwitchView;_wholeWordsOnlySwitchView;_replaceButtonView;_replaceAllButtonView;_inputsDivView;_actionButtonsDivView;_focusTracker;_keystrokes;_focusables;focusCycler;constructor(e){super(e);let t=e.t;this.children=this.createCollection(),this.set(`matchCount`,0),this.set(`highlightOffset`,0),this.set(`isDirty`,!1),this.set(`_areCommandsEnabled`,{}),this.set(`_resultsCounterText`,``),this.set(`_matchCase`,!1),this.set(`_wholeWordsOnly`,!1),this.bind(`_searchResultsFound`).to(this,`matchCount`,this,`isDirty`,(e,t)=>e>0&&!t),this._findInputView=this._createInputField(t(`Find in text…`)),this._findPrevButtonView=this._createButton({label:t(`Previous result`),class:`ck-button-prev`,icon:Wv,keystroke:`Shift+F3`,tooltip:!0}),this._findNextButtonView=this._createButton({label:t(`Next result`),class:`ck-button-next`,icon:Wv,keystroke:`F3`,tooltip:!0}),this._replaceInputView=this._createInputField(t(`Replace with…`),`ck-labeled-field-replace`),this._inputsDivView=this._createInputsDiv(),this._matchCaseSwitchView=this._createMatchCaseSwitch(),this._wholeWordsOnlySwitchView=this._createWholeWordsOnlySwitch(),this._advancedOptionsCollapsibleView=this._createAdvancedOptionsCollapsible(),this._replaceAllButtonView=this._createButton({label:t(`Replace all`),class:`ck-button-replaceall`,withText:!0}),this._replaceButtonView=this._createButton({label:t(`Replace`),class:`ck-button-replace`,withText:!0}),this._findButtonView=this._createButton({label:t(`Find`),class:`ck-button-find ck-button-action`,withText:!0}),this._actionButtonsDivView=this._createActionButtonsDiv(),this._focusTracker=new M,this._keystrokes=new N,this._focusables=new pa,this.focusCycler=new Hy({focusables:this._focusables,focusTracker:this._focusTracker,keystrokeHandler:this._keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.children.addMany([this._inputsDivView,this._advancedOptionsCollapsibleView,this._actionButtonsDivView]),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-find-and-replace-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),this._initFocusCycling(),this._initKeystrokeHandling()}destroy(){super.destroy(),this._focusTracker.destroy(),this._keystrokes.destroy()}focus(e){e===-1?this.focusCycler.focusLast():this.focusCycler.focusFirst()}reset(){this._findInputView.errorText=null,this.isDirty=!0}get _textToFind(){return this._findInputView.fieldView.element.value}get _textToReplace(){return this._replaceInputView.fieldView.element.value}_createInputsDiv(){let e=this.locale,t=e.t,n=new P(e);return this._findInputView.fieldView.on(`input`,()=>{this.isDirty=!0}),this._findPrevButtonView.delegate(`execute`).to(this,`findPrevious`),this._findNextButtonView.delegate(`execute`).to(this,`findNext`),this._findPrevButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findPrevious:e})=>e),this._findNextButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,({findNext:e})=>e),this._injectFindResultsCounter(),this._replaceInputView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceInputView.bind(`infoText`).to(this._replaceInputView,`isEnabled`,this._replaceInputView,`isFocused`,(e,n)=>e||!n?``:t(`Tip: Find some text first in order to replace it.`)),n.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__inputs`]},children:[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView]}),n}_onFindButtonExecute(){if(!this._textToFind){let e=this.t;this._findInputView.errorText=e(`Text to find must not be empty.`);return}this.isDirty=!1,this.fire(`findNext`,{searchText:this._textToFind,matchCase:this._matchCase,wholeWords:this._wholeWordsOnly})}_injectFindResultsCounter(){let e=this.locale,t=e.t,n=this.bindTemplate,r=new P(this.locale);this.bind(`_resultsCounterText`).to(this,`highlightOffset`,this,`matchCount`,(e,n)=>t(`%0 of %1`,[e,n])),r.setTemplate({tag:`span`,attributes:{class:[`ck`,`ck-results-counter`,n.if(`isDirty`,`ck-hidden`)]},children:[{text:n.to(`_resultsCounterText`)}]});let i=()=>{let t=this._findInputView.fieldView.element;if(!t||!Yr(t))return;let n=new O(r.element).width,i=e.uiLanguageDirection===`ltr`?`paddingRight`:`paddingLeft`;n?t.style[i]=`calc( 2 * var(--ck-spacing-standard) + ${n}px )`:t.style[i]=``};this.on(`change:_resultsCounterText`,i,{priority:`low`}),this.on(`change:isDirty`,i,{priority:`low`}),this._findInputView.template.children[0].children.push(r)}_createAdvancedOptionsCollapsible(){let e=this.locale.t,t=new xb(this.locale,[this._matchCaseSwitchView,this._wholeWordsOnlySwitchView]);return t.set({label:e(`Advanced options`),isCollapsed:!0}),t}_createActionButtonsDiv(){let e=new P(this.locale);return this._replaceButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replace:e},t)=>e&&t),this._replaceAllButtonView.bind(`isEnabled`).to(this,`_areCommandsEnabled`,this,`_searchResultsFound`,({replaceAll:e},t)=>e&&t),this._replaceButtonView.on(`execute`,()=>{this.fire(`replace`,{searchText:this._textToFind,replaceText:this._textToReplace})}),this._replaceAllButtonView.on(`execute`,()=>{this.fire(`replaceAll`,{searchText:this._textToFind,replaceText:this._textToReplace}),this.focus()}),this._findButtonView.on(`execute`,this._onFindButtonExecute.bind(this)),e.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-find-and-replace-form__actions`]},children:[this._replaceAllButtonView,this._replaceButtonView,this._findButtonView]}),e}_createMatchCaseSwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Match case`),withText:!0}),t.bind(`isOn`).to(this,`_matchCase`),t.on(`execute`,()=>{this._matchCase=!this._matchCase,this.isDirty=!0}),t}_createWholeWordsOnlySwitch(){let e=this.locale.t,t=new mb(this.locale);return t.set({label:e(`Whole words only`),withText:!0}),t.bind(`isOn`).to(this,`_wholeWordsOnly`),t.on(`execute`,()=>{this._wholeWordsOnly=!this._wholeWordsOnly,this.isDirty=!0}),t}_initFocusCycling(){[this._findInputView,this._findPrevButtonView,this._findNextButtonView,this._replaceInputView,this._advancedOptionsCollapsibleView.buttonView,this._matchCaseSwitchView,this._wholeWordsOnlySwitchView,this._replaceAllButtonView,this._replaceButtonView,this._findButtonView].forEach(e=>{this._focusables.add(e),this._focusTracker.add(e.element)})}_initKeystrokeHandling(){let e=e=>e.stopPropagation(),t=e=>{e.stopPropagation(),e.preventDefault()};this._keystrokes.listenTo(this.element),this._keystrokes.set(`f3`,e=>{t(e),this._findNextButtonView.fire(`execute`)}),this._keystrokes.set(`shift+f3`,e=>{t(e),this._findPrevButtonView.fire(`execute`)}),this._keystrokes.set(`enter`,e=>{let n=e.target;n===this._findInputView.fieldView.element?(this._areCommandsEnabled.findNext?this._findNextButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e)):n===this._replaceInputView.fieldView.element&&!this.isDirty&&(this._replaceButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`shift+enter`,e=>{e.target===this._findInputView.fieldView.element&&(this._areCommandsEnabled.findPrevious?this._findPrevButtonView.fire(`execute`):this._findButtonView.fire(`execute`),t(e))}),this._keystrokes.set(`arrowright`,e),this._keystrokes.set(`arrowleft`,e),this._keystrokes.set(`arrowup`,e),this._keystrokes.set(`arrowdown`,e)}_createButton(e){let t=new H(this.locale);return t.set(e),t}_createInputField(e,t){let n=new Qb(this.locale,Jx);return n.label=e,n.class=t,n}},wF=class extends F{static get requires(){return[Qy]}static get pluginName(){return`FindAndReplaceUI`}static get isOfficialPlugin(){return!0}formView;constructor(e){super(e),e.config.define(`findAndReplace.uiType`,`dialog`),this.formView=null}init(){let e=this.editor,t=e.config.get(`findAndReplace.uiType`)===`dropdown`,n=e.commands.get(`find`),r=this.editor.t;e.ui.componentFactory.add(`findAndReplace`,()=>{let r;return t?(r=this._createDropdown(),r.bind(`isEnabled`).to(n)):r=this._createDialogButtonForToolbar(),e.keystrokes.set(`Ctrl+F`,(t,i)=>{if(n.isEnabled){if(r instanceof sx){let e=r.buttonView;e.isOn||e.fire(`execute`)}else r.isOn?e.plugins.get(`Dialog`).view.focus():r.fire(`execute`);i()}}),r}),t||e.ui.componentFactory.add(`menuBar:findAndReplace`,()=>this._createDialogButtonForMenuBar()),e.accessibility.addKeystrokeInfos({keystrokes:[{label:r(`Find in the document`),keystroke:`CTRL+F`}]})}_createDropdown(){let e=this.editor,t=e.locale.t,n=Nx(e.locale);return n.once(`change:isOpen`,()=>{this.formView=this._createFormView(),this.formView.children.add(new By(e.locale,{label:t(`Find and replace`)}),0),n.panelView.children.add(this.formView)}),n.on(`change:isOpen`,(e,t,n)=>{n?this._setupFormView():this.fire(`searchReseted`)},{priority:`low`}),n.buttonView.set({icon:C_,label:t(`Find and replace`),keystroke:`CTRL+F`,tooltip:!0}),n}_createDialogButtonForToolbar(){let e=this.editor,t=this._createButton(H),n=e.plugins.get(`Dialog`);return t.set({tooltip:!0}),t.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),t.on(`execute`,()=>{t.isOn?n.hide():this._showDialog()}),t}_createDialogButtonForMenuBar(){let e=this._createButton(U),t=this.editor.plugins.get(`Dialog`),n=this.editor.plugins.get(`Dialog`);return e.set({role:`menuitemcheckbox`,isToggleable:!0}),e.bind(`isOn`).to(n,`id`,e=>e===`findAndReplace`),e.on(`execute`,()=>{if(t.id===`findAndReplace`){t.hide();return}this._showDialog()}),e}_createButton(e){let t=this.editor,n=t.commands.get(`find`),r=new e(t.locale),i=t.locale.t;return r.bind(`isEnabled`).to(n),r.set({icon:C_,label:i(`Find and replace`),keystroke:`CTRL+F`}),r}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.locale.t;this.formView||=this._createFormView(),t.show({id:`findAndReplace`,title:n(`Find and replace`),content:this.formView,position:Jy.EDITOR_TOP_SIDE,onShow:()=>{this._setupFormView()},onHide:()=>{this.fire(`searchReseted`)}})}_createFormView(){let e=this.editor,t=new(Xa(CF))(e.locale),n=e.commands,r=this.editor.plugins.get(`FindAndReplaceEditing`).state;t.bind(`highlightOffset`).to(r,`highlightedOffset`),t.listenTo(r.results,`change`,()=>{t.matchCount=r.results.length});let i=n.get(`findNext`),a=n.get(`findPrevious`),o=n.get(`replace`),s=n.get(`replaceAll`);return t.bind(`_areCommandsEnabled`).to(i,`isEnabled`,a,`isEnabled`,o,`isEnabled`,s,`isEnabled`,(e,t,n,r)=>({findNext:e,findPrevious:t,replace:n,replaceAll:r})),t.delegate(`findNext`,`findPrevious`,`replace`,`replaceAll`).to(this),t.on(`change:isDirty`,(e,t,n)=>{n&&this.fire(`searchReseted`)}),t}_setupFormView(){this.formView.disableCssTransitions(),this.formView.reset(),this.formView._findInputView.fieldView.select(),this.formView.enableCssTransitions()}},TF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this.affectsData=!1,this._state=t}execute(e,{matchCase:t,wholeWords:n}={}){let{editor:r}=this,{model:i}=r,a=r.plugins.get(`FindAndReplaceUtils`),o,s=``;o=typeof e==`string`?(...r)=>({results:a.findByTextCallback(e,{matchCase:t,wholeWords:n})(...r),searchText:e}):e;let c=o;o=(...e)=>{let t=c(...e);return t&&`searchText`in t&&(s=t.searchText),t};let l=i.document.getRootNames().reduce(((e,t)=>a.updateFindResultFromRange(i.createRangeIn(i.document.getRoot(t)),i,o,e)),null);return this._state.clear(i),this._state.results.addMany(l),this._state.highlightedResult=l.get(0),this._state.searchText=s,o&&(this._state.lastSearchCallback=o),this._state.matchCase=!!t,this._state.matchWholeWords=!!n,{results:l,findCallback:o}}};const ine=D();var EF=class extends ine{constructor(e){super(),this.set(`results`,new Fi),this.set(`highlightedResult`,null),this.set(`highlightedOffset`,0),this.set(`searchText`,``),this.set(`replaceText`,``),this.set(`lastSearchCallback`,null),this.set(`matchCase`,!1),this.set(`matchWholeWords`,!1),this.results.on(`change`,(t,{removed:n,index:r})=>{if(Array.from(n).length){let t=!1;if(e.change(r=>{for(let i of n)this.highlightedResult===i&&(t=!0),e.markers.has(i.marker.name)&&r.removeMarker(i.marker)}),t){let e=r>=this.results.length?0:r;this.highlightedResult=this.results.get(e)}}}),this.on(`change:highlightedResult`,()=>{this.refreshHighlightOffset(e)})}clear(e){this.searchText=``,e.change(t=>{if(this.highlightedResult){let n=this.highlightedResult.marker.name.split(`:`)[1],r=e.markers.get(`findResultHighlighted:${n}`);r&&t.removeMarker(r)}[...this.results].forEach(({marker:e})=>{t.removeMarker(e)})}),this.results.clear()}refreshHighlightOffset(e){let{highlightedResult:t,results:n}=this;t?this.highlightedOffset=DF(e,[...n]).indexOf(t)+1:this.highlightedOffset=0}};function DF(e,t){let n={before:-1,same:0,after:1,different:1};return e.document.getRootNames().flatMap(e=>t.filter(t=>t.marker.getStart().root.rootName===e).sort((e,t)=>n[e.marker.getStart().compareWith(t.marker.getStart())]))}var OF=class extends I{_state;constructor(e,t){super(e),this.isEnabled=!0,this._state=t,this._isEnabledBasedOnSelection=!1}_replace(e,t){let{model:n}=this.editor,r=t.marker.getRange();n.canEditAt(r)&&n.change(i=>{if(r.root.rootName===`$graveyard`){this._state.results.remove(t);return}let a={};for(let e of r.getItems())if(e.is(`$text`)||e.is(`$textProxy`)){a=e.getAttributes();break}n.insertContent(i.createText(e,a),r),this._state.results.has(t)&&this._state.results.remove(t)})}},kF=class extends OF{execute(e,t){let n=Math.max(this._state.highlightedOffset-1,0);if(this._replace(e,t),this._state.results.length){let e=DF(this.editor.model,[...this._state.results]);this._state.highlightedResult=e[n%e.length]}}},AF=class extends OF{execute(e,t){let{editor:n}=this,{model:r}=n,i=n.plugins.get(`FindAndReplaceUtils`),a=t instanceof Fi?t:r.document.getRootNames().reduce(((e,n)=>i.updateFindResultFromRange(r.createRangeIn(r.document.getRoot(n)),r,i.findByTextCallback(t,this._state),e)),null);a.length&&r.change(()=>{[...a].forEach(t=>{this._replace(e,t)})})}},jF=class extends I{_state;constructor(e,t){super(e),this.affectsData=!1,this._state=t,this.isEnabled=!1,this.listenTo(this._state.results,`change`,()=>{this.isEnabled=this._state.results.length>1})}refresh(){this.isEnabled=this._state.results.length>1}execute(){let e=this._state.results,t=e.getIndex(this._state.highlightedResult),n=t+1>=e.length?0:t+1;this._state.highlightedResult=this._state.results.get(n)}},MF=class extends jF{execute(){let e=this._state.results.getIndex(this._state.highlightedResult),t=e-1<0?this._state.results.length-1:e-1;this._state.highlightedResult=this._state.results.get(t)}},NF=class extends F{static get pluginName(){return`FindAndReplaceUtils`}static get isOfficialPlugin(){return!0}updateFindResultFromRange(e,t,n,r){let i=r||new Fi,a=e=>i.find(t=>{let{marker:n}=t,r=n.getRange(),i=e.getRange();return r.isEqual(i)});return t.change(r=>{[...e].forEach(({type:e,item:o})=>{if(e===`elementStart`&&t.schema.checkChild(o,`$text`)){let e=n({item:o,text:this.rangeToText(t.createRangeIn(o))});if(!e)return;`results`in e&&(e=e.results),e.forEach(e=>{let t=`findResult:${he()}`,n=r.addMarker(t,{usingOperation:!1,affectsData:!1,range:r.createRange(r.createPositionAt(o,e.start),r.createPositionAt(o,e.end))}),s=ane(i,n);a(n)||i.add({id:t,label:e.label,marker:n},s)})}})}),i}rangeToText(e){return Array.from(e.getItems({shallow:!0})).reduce((e,t)=>t.is(`$text`)||t.is(`$textProxy`)?e+t.data:`${e}\\n`,``)}findByTextCallback(e,t){let n=`gu`;t.matchCase||(n+=`i`);let r=`(${Bn(e)})`;if(t.wholeWords){let t=`[^a-zA-ZÀ-ɏḀ-ỿ]`;RegExp(`^[^a-zA-ZÀ-ɏḀ-ỿ]`).test(e)||(r=`(^|${t}|_)${r}`),RegExp(`[^a-zA-ZÀ-ɏḀ-ỿ]$`).test(e)||(r=`${r}(?=_|${t}|$)`)}let i=new RegExp(r,n);function a({text:e}){return[...e.matchAll(i)].map(one)}return a}};function ane(e,t){let n=e.find(({marker:e})=>t.getStart().isBefore(e.getStart()));return n?e.getIndex(n):e.length}function one(e){let t=e.length-1,n=e.index;return e.length===3&&(n+=e[1].length),{label:e[t],start:n,end:n+e[t].length}}var PF=class extends F{static get requires(){return[NF]}static get pluginName(){return`FindAndReplaceEditing`}static get licenseFeatureCode(){return`FAR`}static get isPremiumPlugin(){return!0}static get isOfficialPlugin(){return!0}state;init(){this.state=new EF(this.editor.model),this.set(`_isSearchActive`,!1),this._defineConverters(),this._defineCommands(),this.listenTo(this.state,`change:highlightedResult`,(e,t,n,r)=>{let{model:i}=this.editor;i.change(e=>{if(r){let t=r.marker.name.split(`:`)[1],n=i.markers.get(`findResultHighlighted:${t}`);n&&e.removeMarker(n)}if(n){let t=n.marker.name.split(`:`)[1];e.addMarker(`findResultHighlighted:${t}`,{usingOperation:!1,affectsData:!1,range:n.marker.getRange()})}})});let e=Kt(((e,t,n)=>{if(n){let e=this.editor.editing.view.domConverter,t=this.editor.editing.mapper.toViewRange(n.marker.getRange());ni({target:e.viewRangeToDom(t),viewportOffset:40})}}).bind(this),32);this.listenTo(this.state,`change:highlightedResult`,e,{priority:`low`}),this.listenTo(this.editor,`destroy`,e.cancel),this.on(`change:_isSearchActive`,(e,t,n)=>{n?this.listenTo(this.editor.model.document,`change:data`,this._onDocumentChange):this.stopListening(this.editor.model.document,`change:data`,this._onDocumentChange)})}find(e,t){return this._isSearchActive=!0,this.editor.execute(`find`,e,t),this.state.results}stop(){this.state.clear(this.editor.model),this._isSearchActive=!1}_defineCommands(){this.editor.commands.add(`find`,new TF(this.editor,this.state)),this.editor.commands.add(`findNext`,new jF(this.editor,this.state)),this.editor.commands.add(`findPrevious`,new MF(this.editor,this.state)),this.editor.commands.add(`replace`,new kF(this.editor,this.state)),this.editor.commands.add(`replaceAll`,new AF(this.editor,this.state))}_defineConverters(){let{editor:e}=this;e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResult`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result`],attributes:{\"data-find-result\":t}}}}),e.conversion.for(`editingDowncast`).markerToHighlight({model:`findResultHighlighted`,view:({markerName:e})=>{let[,t]=e.split(`:`);return{name:`span`,classes:[`ck-find-result_selected`],attributes:{\"data-find-result\":t}}}})}_onDocumentChange=()=>{let e=new Set,t=new Set,n=this.editor.model,{results:r}=this.state,i=n.document.differ.getChanges(),a=n.document.differ.getChangedMarkers();i.forEach(r=>{r.position&&(r.name===`$text`||r.position.nodeAfter&&n.schema.isInline(r.position.nodeAfter)?(e.add(r.position.parent),[...n.markers.getMarkersAtPosition(r.position)].forEach(e=>{t.add(e.name)})):r.type===`insert`&&r.position.nodeAfter&&e.add(r.position.nodeAfter))}),a.forEach(({name:e,data:{newRange:n}})=>{n&&n.start.root.rootName===`$graveyard`&&t.add(e)}),e.forEach(e=>{[...n.markers.getMarkersIntersectingRange(n.createRangeIn(e))].forEach(e=>t.add(e.name))}),t.forEach(e=>{r.has(e)&&(r.get(e)===this.state.highlightedResult&&(this.state.highlightedResult=null),r.remove(e))});let o=[],s=this.editor.plugins.get(`FindAndReplaceUtils`);e.forEach(e=>{let t=s.updateFindResultFromRange(n.createRangeOn(e),n,this.state.lastSearchCallback,r);o.push(...t)}),a.forEach(e=>{if(e.data.newRange){let t=s.updateFindResultFromRange(e.data.newRange,n,this.state.lastSearchCallback,r);o.push(...t)}}),!this.state.highlightedResult&&o.length?this.state.highlightedResult=o[0]:this.state.refreshHighlightOffset(n)}},sne=class extends F{static get requires(){return[PF,wF]}static get pluginName(){return`FindAndReplace`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(`FindAndReplaceUI`),t=this.editor.plugins.get(`FindAndReplaceEditing`),n=t.state;e.on(`findNext`,(e,r)=>{r?(n.searchText=r.searchText,t.find(r.searchText,r)):this.editor.execute(`findNext`)}),e.on(`findPrevious`,(e,r)=>{r&&n.searchText!==r.searchText?t.find(r.searchText):this.editor.execute(`findPrevious`)}),e.on(`replace`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText);let i=n.highlightedResult;i&&this.editor.execute(`replace`,r.replaceText,i)}),e.on(`replaceAll`,(e,r)=>{n.searchText!==r.searchText&&t.find(r.searchText),this.editor.execute(`replaceAll`,r.replaceText,n.results)}),e.on(`searchReseted`,()=>{n.clear(this.editor.model),t.stop()})}},FF=class extends I{attributeKey;constructor(e,t){super(e),this.attributeKey=t}refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(this.attributeKey),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,this.attributeKey)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value,i=e.batch,a=e=>{if(n.isCollapsed)r?e.setSelectionAttribute(this.attributeKey,r):e.removeSelectionAttribute(this.attributeKey);else{let i=t.schema.getValidRanges(n.getRanges(),this.attributeKey,{includeEmptyRanges:!0});for(let t of i){let n=t,i=this.attributeKey;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(this.attributeKey)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}};i?t.enqueueChange(i,e=>{a(e)}):t.change(e=>{a(e)})}};const IF=`fontSize`,LF=`fontFamily`,RF=`fontColor`,zF=`fontBackgroundColor`;function BF(e,t){let n={model:{key:e,values:[]},view:{},upcastAlso:{}};for(let e of t)n.model.values.push(e.model),n.view[e.model]=e.view,e.upcastAlso&&(n.upcastAlso[e.model]=e.upcastAlso);return n}function VF(e){return t=>cne(t.getStyle(e))}function HF(e){return(t,{writer:n})=>n.createAttributeElement(`span`,{style:`${e}:${t}`},{priority:7})}function UF({dropdownView:e,colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s}){let c=e.locale,l=new GS(c,{colors:t,columns:n,removeButtonLabel:r,colorPickerLabel:i,documentColorsLabel:a,documentColorsCount:o,colorPickerViewConfig:s});return e.colorSelectorView=l,e.panelView.children.add(l),l}function cne(e){return e.replace(/\\s/g,``)}var WF=class extends FF{constructor(e){super(e,LF)}};function GF(e){return e.map(lne).filter(e=>e!==void 0)}function KF(e){return e.replace(/[\"']/g,``).split(`,`).map(e=>e.trim())}function lne(e){if(typeof e==`object`)return e;if(e===\"default\")return{title:`Default`,model:void 0};if(typeof e==`string`)return une(e)}function une(e){let t=KF(e),n=t[0],r=t.map(dne).join(`, `);return{title:n,model:r,view:{name:`span`,styles:{\"font-family\":r},priority:7}}}function dne(e){return e=e.trim(),e.indexOf(` `)>0&&(e=`'${e}'`),e}var qF=class extends F{static get pluginName(){return`FontFamilyEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(LF,{options:[`default`,`Arial, Helvetica, sans-serif`,`Courier New, Courier, monospace`,`Georgia, serif`,`Lucida Sans Unicode, Lucida Grande, sans-serif`,`Tahoma, Geneva, sans-serif`,`Times New Roman, Times, serif`,`Trebuchet MS, Helvetica, sans-serif`,`Verdana, Geneva, sans-serif`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:LF}),e.model.schema.setAttributeProperties(LF,{isFormatting:!0,copyOnEnter:!0});let t=BF(LF,GF(e.config.get(`fontFamily.options`)).filter(e=>e.model));e.config.get(`fontFamily.supportAllValues`)?(this._prepareAnyValueConverters(),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(t),e.commands.add(LF,new WF(e))}_prepareAnyValueConverters(){let e=this.editor;e.conversion.for(`downcast`).attributeToElement({model:LF,view:(e,{writer:t})=>t.createAttributeElement(`span`,{style:`font-family:`+e},{priority:7})}),e.conversion.for(`upcast`).elementToAttribute({model:{key:LF,value:e=>e.getStyle(`font-family`)},view:{name:`span`,styles:{\"font-family\":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{face:/.*/}},model:{key:LF,value:e=>e.getAttribute(`face`)}})}},JF=class extends F{static get pluginName(){return`FontFamilyUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(LF),i=t(`Font Family`),a=fne(n,r);e.ui.componentFactory.add(LF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:E_,tooltip:!0}),n.extendTemplate({attributes:{class:`ck-font-family-dropdown`}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${LF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:E_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t;return GF(e.config.get(LF).options).map(e=>(e.title===`Default`&&(e.title=t(`Default`)),e))}};function fne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:LF,commandParam:r.model,label:r.title,role:`menuitemradio`,withText:!0})};e.model.bind(`isOn`).to(t,`value`,e=>e===r.model?!0:!e||!r.model?!1:KF(e)[0].toLowerCase()===KF(r.model)[0].toLowerCase()),r.view&&typeof r.view!=`string`&&r.view.styles&&e.model.set(`labelStyle`,`font-family: ${r.view.styles[`font-family`]}`),n.add(e)}return n}var YF=class extends F{static get requires(){return[qF,JF]}static get pluginName(){return`FontFamily`}static get isOfficialPlugin(){return!0}},XF=class extends FF{constructor(e){super(e,IF)}};function ZF(e){return e.map(e=>pne(e)).filter(e=>e!==void 0)}const QF={get tiny(){return{title:`Tiny`,model:`tiny`,view:{name:`span`,classes:`text-tiny`,priority:7}}},get small(){return{title:`Small`,model:`small`,view:{name:`span`,classes:`text-small`,priority:7}}},get big(){return{title:`Big`,model:`big`,view:{name:`span`,classes:`text-big`,priority:7}}},get huge(){return{title:`Huge`,model:`huge`,view:{name:`span`,classes:`text-huge`,priority:7}}}};function pne(e){if(typeof e==`number`&&(e=String(e)),typeof e==`object`&&gne(e))return $F(e);let t=hne(e);if(t)return $F(t);if(e===\"default\")return{model:void 0,title:`Default`};if(!_ne(e))return mne(e)}function mne(e){return typeof e==`string`&&(e={title:e,model:`${parseFloat(e)}px`}),e.view={name:`span`,styles:{\"font-size\":e.model}},$F(e)}function $F(e){return e.view&&typeof e.view!=`string`&&!e.view.priority&&(e.view.priority=7),e}function hne(e){return typeof e==`string`?QF[e]:QF[e.model]}function gne(e){return e.title&&e.model&&e.view}function _ne(e){let t;if(typeof e==`object`)if(e.model)t=parseFloat(e.model);else throw new w(`font-size-invalid-definition`,null,e);else t=parseFloat(e);return isNaN(t)}const eI=[`x-small`,`x-small`,`small`,`medium`,`large`,`x-large`,`xx-large`,`xxx-large`];var tI=class extends F{static get pluginName(){return`FontSizeEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(IF,{options:[`tiny`,`small`,`default`,`big`,`huge`],supportAllValues:!1})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:IF}),e.model.schema.setAttributeProperties(IF,{isFormatting:!0,copyOnEnter:!0});let t=e.config.get(`fontSize.supportAllValues`),n=BF(IF,ZF(this.editor.config.get(`fontSize.options`)).filter(e=>e.model));t?(this._prepareAnyValueConverters(n),this._prepareCompatibilityConverter()):e.conversion.attributeToElement(n),e.commands.add(IF,new XF(e))}_prepareAnyValueConverters(e){let t=this.editor,n=e.model.values.filter(e=>!Gp(String(e))&&!qp(String(e)));if(n.length)throw new w(`font-size-invalid-use-of-named-presets`,null,{presets:n});t.conversion.for(`downcast`).attributeToElement({model:IF,view:(e,{writer:t})=>{if(e)return t.createAttributeElement(`span`,{style:`font-size:`+e},{priority:7})}}),t.conversion.for(`upcast`).elementToAttribute({model:{key:IF,value:e=>e.getStyle(`font-size`)},view:{name:`span`,styles:{\"font-size\":/.*/}}})}_prepareCompatibilityConverter(){this.editor.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{size:/^[+-]?\\d{1,3}$/}},model:{key:IF,value:e=>{let t=e.getAttribute(`size`),n=t[0]===`-`||t[0]===`+`,r=parseInt(t,10);n&&(r=3+r);let i=eI.length-1;return eI[Math.min(Math.max(r,0),i)]}}})}},nI=class extends F{static get pluginName(){return`FontSizeUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=this._getLocalizedOptions(),r=e.commands.get(IF),i=t(`Font Size`),a=vne(n,r);e.ui.componentFactory.add(IF,t=>{let n=Nx(t);return Lx(n,a,{role:`menu`,ariaLabel:i}),n.buttonView.set({label:i,icon:D_,tooltip:!0}),n.extendTemplate({attributes:{class:[`ck-font-size-dropdown`]}}),n.bind(`isEnabled`).to(r),this.listenTo(n,`execute`,t=>{e.execute(t.source.commandName,{value:t.source.commandParam}),e.editing.view.focus()}),n}),e.ui.componentFactory.add(`menuBar:${IF}`,t=>{let n=new uw(t);n.buttonView.set({label:i,icon:D_}),n.bind(`isEnabled`).to(r);let o=new dw(t);for(let r of a){let i=new rC(t,n),a=new U(t);a.set({role:`menuitemradio`,isToggleable:!0}),a.bind(...Object.keys(r.model)).to(r.model),a.delegate(`execute`).to(n),a.on(`execute`,()=>{e.execute(r.model.commandName,{value:r.model.commandParam}),e.editing.view.focus()}),i.children.add(a),o.items.add(i)}return n.panelView.children.add(o),n})}_getLocalizedOptions(){let e=this.editor,t=e.t,n={Default:t(`Default`),Tiny:t(`Tiny`),Small:t(`Small`),Big:t(`Big`),Huge:t(`Huge`)};return ZF(e.config.get(IF).options).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e=Object.assign({},e,{title:t})),e})}};function vne(e,t){let n=new Fi;for(let r of e){let e={type:`button`,model:new RC({commandName:IF,commandParam:r.model,label:r.title,class:`ck-fontsize-option`,role:`menuitemradio`,withText:!0})};r.view&&typeof r.view!=`string`&&(r.view.styles&&e.model.set(`labelStyle`,`font-size:${r.view.styles[`font-size`]}`),r.view.classes&&e.model.set(`class`,`${e.model.class} ${r.view.classes}`)),e.model.bind(`isOn`).to(t,`value`,e=>e===r.model),n.add(e)}return n}var rI=class extends F{static get requires(){return[tI,nI]}static get pluginName(){return`FontSize`}static get isOfficialPlugin(){return!0}normalizeSizeOptions(e){return ZF(e)}},iI=class extends FF{constructor(e){super(e,RF)}},aI=class extends F{static get pluginName(){return`FontColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(RF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{color:/[\\s\\S]+/}},model:{key:RF,value:VF(`color`)}}),e.conversion.for(`upcast`).elementToAttribute({view:{name:`font`,attributes:{color:/^#?\\w+$/}},model:{key:RF,value:e=>e.getAttribute(`color`)}}),e.conversion.for(`downcast`).attributeToElement({model:RF,view:HF(`color`)}),e.commands.add(RF,new iI(e)),e.model.schema.extend(`$text`,{allowAttributes:RF}),e.model.schema.setAttributeProperties(RF,{isFormatting:!0,copyOnEnter:!0})}},oI=class extends F{commandName;componentName;icon;dropdownLabel;columns;constructor(e,{commandName:t,componentName:n,icon:r,dropdownLabel:i}){super(e),this.commandName=t,this.componentName=n,this.icon=r,this.dropdownLabel=i,this.columns=e.config.get(`${this.componentName}.columns`)}init(){let e=this.editor,t=e.locale,n=t.t,r=e.commands.get(this.commandName),i=e.config.get(this.componentName),a=Sb(t,Cb(i.colors)),o=i.documentColors,s=i.colorPicker!==!1;e.ui.componentFactory.add(this.componentName,t=>{let c=Nx(t),l=!1,u=UF({dropdownView:c,colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:s?i.colorPicker||{}:!1});return u.bind(`selectedColor`).to(r,`value`),c.buttonView.set({label:this.dropdownLabel,icon:this.icon,tooltip:!0}),c.extendTemplate({attributes:{class:`ck-color-ui-dropdown`}}),c.bind(`isEnabled`).to(r),u.on(`execute`,(t,n)=>{c.isOpen&&e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),n.source!==`colorPicker`&&e.editing.view.focus(),n.source===`colorPickerSaveButton`&&(c.isOpen=!1)}),u.on(`colorPicker:show`,()=>{this._undoStepBatch=e.model.createBatch()}),u.on(`colorPicker:cancel`,()=>{this._undoStepBatch.operations.length&&(c.isOpen=!1,e.execute(`undo`,this._undoStepBatch)),e.editing.view.focus()}),c.on(`change:isOpen`,(t,n,r)=>{l||(l=!0,c.colorSelectorView.appendUI()),r&&(o!==0&&u.updateDocumentColors(e.model,this.componentName),u.updateSelectedColors(),u.showColorGridsFragment())}),zx(c,()=>c.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find(e=>e.isOn)),c}),e.ui.componentFactory.add(`menuBar:${this.componentName}`,t=>{let i=new uw(t);i.buttonView.set({label:this.dropdownLabel,icon:this.icon}),i.bind(`isEnabled`).to(r);let s=!1,c=new GS(t,{colors:a.map(e=>({label:e.label,color:e.model,options:{hasBorder:e.hasBorder}})),columns:this.columns,removeButtonLabel:n(`Remove color`),colorPickerLabel:n(`Color picker`),documentColorsLabel:o===0?``:n(`Document colors`),documentColorsCount:o===void 0?this.columns:o,colorPickerViewConfig:!1});return c.bind(`selectedColor`).to(r,`value`),c.delegate(`execute`).to(i),c.on(`execute`,(t,n)=>{e.execute(this.commandName,{value:n.value,batch:this._undoStepBatch}),e.editing.view.focus()}),i.on(`change:isOpen`,(t,n,r)=>{s||(s=!0,c.appendUI()),r&&(o!==0&&c.updateDocumentColors(e.model,this.componentName),c.updateSelectedColors(),c.showColorGridsFragment())}),i.panelView.children.add(c),i})}},sI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:RF,componentName:RF,icon:T_,dropdownLabel:t(`Font Color`)})}static get pluginName(){return`FontColorUI`}},cI=class extends F{static get requires(){return[aI,sI]}static get pluginName(){return`FontColor`}static get isOfficialPlugin(){return!0}},lI=class extends FF{constructor(e){super(e,zF)}},uI=class extends F{static get pluginName(){return`FontBackgroundColorEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(zF,{colors:[{color:`hsl(0, 0%, 0%)`,label:`Black`},{color:`hsl(0, 0%, 30%)`,label:`Dim grey`},{color:`hsl(0, 0%, 60%)`,label:`Grey`},{color:`hsl(0, 0%, 90%)`,label:`Light grey`},{color:`hsl(0, 0%, 100%)`,label:`White`,hasBorder:!0},{color:`hsl(0, 75%, 60%)`,label:`Red`},{color:`hsl(30, 75%, 60%)`,label:`Orange`},{color:`hsl(60, 75%, 60%)`,label:`Yellow`},{color:`hsl(90, 75%, 60%)`,label:`Light green`},{color:`hsl(120, 75%, 60%)`,label:`Green`},{color:`hsl(150, 75%, 60%)`,label:`Aquamarine`},{color:`hsl(180, 75%, 60%)`,label:`Turquoise`},{color:`hsl(210, 75%, 60%)`,label:`Light blue`},{color:`hsl(240, 75%, 60%)`,label:`Blue`},{color:`hsl(270, 75%, 60%)`,label:`Purple`}],columns:5}),e.data.addStyleProcessorRules(hm),e.conversion.for(`upcast`).elementToAttribute({view:{name:`span`,styles:{\"background-color\":/[\\s\\S]+/}},model:{key:zF,value:VF(`background-color`)}}),e.conversion.for(`downcast`).attributeToElement({model:zF,view:HF(`background-color`)}),e.commands.add(zF,new lI(e)),e.model.schema.extend(`$text`,{allowAttributes:zF}),e.model.schema.setAttributeProperties(zF,{isFormatting:!0,copyOnEnter:!0})}},dI=class extends oI{constructor(e){let t=e.locale.t;super(e,{commandName:zF,componentName:zF,icon:w_,dropdownLabel:t(`Font Background Color`)})}static get pluginName(){return`FontBackgroundColorUI`}},fI=class extends F{static get requires(){return[uI,dI]}static get pluginName(){return`FontBackgroundColor`}static get isOfficialPlugin(){return!0}},yne=class extends F{static get requires(){return[YF,rI,cI,fI]}static get pluginName(){return`Font`}static get isOfficialPlugin(){return!0}},pI=class{_placeholderMap;_wrapper=null;_document;_annotationsUIsData=null;_paginationBodyCollection=null;_hasLeftCollapseButton=!1;_collapseLeftSidebarButton=null;_resizeObserver=null;_sidebarsWidths={left:0,right:0};_keepLeftSidebarHidden=!1;_forceShowLeftSidebar=!1;_sourceEditingCallback=(e,t,n)=>{this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=n?`none`:``};_hiddenElements=new Map;_savedAncestorsScrollPositions=new Map;_showRevisionViewerCallback=null;_closeRevisionViewerCallback=null;_aiTabsData=null;constructor(e){this._placeholderMap=new Map,e.plugins.has(`RevisionHistory`)&&(this._showRevisionViewerCallback=e.config.get(`revisionHistory`).showRevisionViewerCallback,this._closeRevisionViewerCallback=e.config.get(`revisionHistory`).closeRevisionViewerCallback),this._editor=e,this._document=this._editor.sourceElement?this._editor.sourceElement.ownerDocument:u.document,this._editor.config.define(`fullscreen.container`,this._document.body),e.on(`destroy`,()=>{this._wrapper&&this.destroy(),this._resizeObserver&&this._resizeObserver.destroy()})}moveToFullscreen(e,t){let n=mr(this._document,`div`);n.setAttribute(`data-ck-fullscreen-placeholder`,t),e.replaceWith(n),this.getWrapper().querySelector(`[data-ck-fullscreen=\"${t}\"]`).append(e),this._placeholderMap.set(t,{placeholderElement:n,movedElement:e})}restoreMovedElementLocation(e){if(!this._placeholderMap.has(e))return;let{placeholderElement:t,movedElement:n}=this._placeholderMap.get(e);t.replaceWith(n),t.remove(),this._placeholderMap.delete(e),this._placeholderMap.size===0&&this._destroyContainer()}getWrapper(){return this._wrapper||(this._wrapper=mr(this._document,`div`,{class:`ck ck-fullscreen__main-wrapper`}),this._wrapper.innerHTML=`\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t`,this._editor.config.get(`fullscreen.container`).appendChild(this._wrapper)),this._wrapper}enable(){if(this._saveAncestorsScrollPositions(this._editor.ui.getEditableElement()),this.defaultOnEnter(),this._editor.config.get(`fullscreen.container`)===this._document.body&&(this._document.body.classList.add(`ck-fullscreen`),this._document.body.parentElement.classList.add(`ck-fullscreen`)),this._editor.plugins.has(`PresenceListUI`)&&this._generatePresenceListContainer(),this._editor.plugins.has(`DocumentOutlineUI`)&&this._generateDocumentOutlineContainer(),this._hasLeftCollapseButton&&this._generateCollapseButton(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),this._paginationBodyCollection=new nb(this._editor.locale),this._paginationBodyCollection.attachToDom(),e.linesRepository.setViewCollection(this._paginationBodyCollection),this._editor.once(`destroy`,()=>{this._paginationBodyCollection.detachFromDom()}),this.moveToFullscreen(this._paginationBodyCollection.bodyCollectionContainer,`body-wrapper`)}this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&(this._editor.plugins.get(`RevisionHistory`).isRevisionViewerOpen&&this._editor.config.get(`revisionHistory.closeRevisionViewerCallback`)(),this._overrideRevisionHistoryCallbacks()),this._editor.plugins.has(`AITabs`)&&this._handleAITabsTransfer(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).on(`change:isSourceEditingMode`,this._sourceEditingCallback),this._editor.plugins.has(`Dialog`)&&this._registerFullscreenDialogPositionAdjustments();for(let e of this._editor.config.get(`fullscreen.container`).children)e!==this._wrapper&&!e.classList.contains(`ck-body-wrapper`)&&!e.classList.contains(`ckbox-wrapper`)&&e.style.display!==`none`&&(this._hiddenElements.set(e,e.style.display),e.style.display=`none`);this._sidebarsWidths={left:this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).scrollWidth,right:this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).scrollWidth},this._adjustVisibleElements(),this._setupResizeObserver(),this._editor.config.get(`fullscreen.onEnterCallback`)&&this._editor.config.get(`fullscreen.onEnterCallback`)(this.getWrapper())}disable(){this._editor.config.get(`fullscreen.onLeaveCallback`)&&this._editor.config.get(`fullscreen.onLeaveCallback`)(this.getWrapper()),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`),this._editor.plugins.has(`DocumentOutlineUI`)&&this._restoreDocumentOutlineDefaultContainer(),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.plugins.has(`RevisionHistory`)&&this._restoreRevisionHistoryCallbacks(),this._editor.plugins.has(`AITabs`)&&this._restoreAITabs(),this._editor.plugins.has(`SourceEditing`)&&this._editor.plugins.has(`DocumentOutlineUI`)&&this._editor.plugins.get(`SourceEditing`).off(`change:isSourceEditingMode`,this._sourceEditingCallback);for(let e of this._placeholderMap.keys())this.restoreMovedElementLocation(e);this._destroyContainer(),this._editor.ui.view.toolbar&&this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`);for(let[e,t]of this._savedAncestorsScrollPositions)e.scrollTo({left:t.scrollLeft,top:t.scrollTop,behavior:`instant`});if(this._savedAncestorsScrollPositions.clear(),this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled){let e=this._editor.plugins.get(`PaginationRenderer`);e.setupScrollableAncestor(),e.linesRepository.setViewCollection(this._editor.ui.view.body),this._paginationBodyCollection.detachFromDom(),this._paginationBodyCollection?.destroy()}this._editor.plugins.has(`Dialog`)&&this._unregisterFullscreenDialogPositionAdjustments(),this._keepLeftSidebarHidden=!1,this._resizeObserver?.destroy()}destroy(){for(let{placeholderElement:e,movedElement:t}of this._placeholderMap.values())e.remove(),t.remove();this._destroyContainer(),this._document.body.classList.remove(`ck-fullscreen`),this._document.body.parentElement.classList.remove(`ck-fullscreen`)}defaultOnEnter(){return this.getWrapper()}_destroyContainer(){if(this._wrapper){this._wrapper.remove(),this._wrapper=null;for(let[e,t]of this._hiddenElements)e.style.display=t;this._hiddenElements.clear()}}_generatePresenceListContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item`});t.innerHTML=`\n\t\t\t
    \n\t\t\t
    \n\t\t`,t.firstElementChild.innerText=e(`Connected users`),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`)||document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,\"data-ck-fullscreen\":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`).appendChild(t);let n=this._editor.plugins.get(`PresenceListUI`);this.moveToFullscreen(n.view.element,`presence-list`),this._hasLeftCollapseButton=!0}_generateDocumentOutlineContainer(){let e=this._editor.t,t=mr(document,`div`,{class:`ck-fullscreen__left-sidebar-item ck-fullscreen__left-sidebar-item--no-margin`});t.innerHTML=`\n\t\t\t
    \n\t\t`,t.firstElementChild.innerText=e(`Document outline`);let n=mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-item ck-fullscreen__document-outline-wrapper`});n.innerHTML=`\n\t\t\t
    \n\t\t`,document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`)||document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(mr(document,`div`,{class:`ck ck-fullscreen__left-sidebar-sticky`,\"data-ck-fullscreen\":`left-sidebar-sticky`})),document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`).appendChild(n),document.querySelector(`[data-ck-fullscreen=\"left-sidebar-sticky\"]`).appendChild(t);let r=this._editor.plugins.get(`DocumentOutlineUI`);r.view.documentOutlineContainer=document.querySelector(`[data-ck-fullscreen=\"left-sidebar\"]`),this.moveToFullscreen(r.view.element,`document-outline`),this._hasLeftCollapseButton=!0}_restoreDocumentOutlineDefaultContainer(){let e=this._editor.plugins.get(`DocumentOutlineUI`);e.view.documentOutlineContainer=e.view.element}_generateCollapseButton(){let e=new H(this._editor.locale),t=document.querySelector(`.ck-fullscreen__left-sidebar`),n=this._editor.t;e.set({label:n(`Toggle sidebar`),class:`ck-fullscreen__left-sidebar-toggle-button`,tooltip:n(`Hide left sidebar`),tooltipPosition:`se`,icon:Wv}),e.on(`execute`,()=>{t.classList.contains(`ck-fullscreen__left-sidebar--collapsed`)?(this._forceShowLeftSidebar=!0,this._keepLeftSidebarHidden=!1,this._showLeftSidebar()):(this._keepLeftSidebarHidden=!0,this._hideLeftSidebar()),this._editor.editing.view.focus()}),e.render(),this._collapseLeftSidebarButton=e,t.prepend(e.element)}_overrideAnnotationsUIs(){let e=this._editor.plugins.get(`AnnotationsUIs`);this._annotationsUIsData=new Map(e.uisData),e.deactivateAll();let t=this._editor.plugins.get(`Sidebar`);t.container?(this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`),t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen=\"right-sidebar\"]`))):(t.setContainer(this.getWrapper().querySelector(`[data-ck-fullscreen=\"right-sidebar\"]`)),this._switchAnnotationsUI(`wideSidebar`),this.moveToFullscreen(t.container.firstElementChild,`right-sidebar`))}_restoreAnnotationsUIs(){let e=this._editor.plugins.get(`Sidebar`),t=e.context.config.get(`sidebar.container`);t&&e.setContainer(t);let n=this._editor.plugins.get(`AnnotationsUIs`);n.deactivateAll();for(let[e,t]of[...this._annotationsUIsData])n.activate(e,t.filter);this._annotationsUIsData=null}_overrideRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>{let e=await this._showRevisionViewerCallback();return this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=`none`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`right-sidebar`),this._annotationsUIsData&&this._restoreAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.disable(),this.moveToFullscreen(e.ui.getEditableElement(),`editable`),this.moveToFullscreen(e.ui.view.toolbar.element,`toolbar`),this.moveToFullscreen(this._editor.config.get(`revisionHistory.viewerSidebarContainer`),`right-sidebar`),e}),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>{this.restoreMovedElementLocation(`toolbar`),this.restoreMovedElementLocation(`editable`),this.restoreMovedElementLocation(`right-sidebar`),this._editor.plugins.has(`DocumentOutlineUI`)&&(this.getWrapper().querySelector(`.ck-fullscreen__document-outline-header`).style.display=``),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),await this._closeRevisionViewerCallback(),this._editor.plugins.has(`AnnotationsUIs`)&&this._overrideAnnotationsUIs(),this._editor.ui.view.menuBarView&&this._editor.ui.view.menuBarView.enable()})}_restoreRevisionHistoryCallbacks(){this._editor.config.set(`revisionHistory.showRevisionViewerCallback`,async()=>this._showRevisionViewerCallback()),this._editor.config.set(`revisionHistory.closeRevisionViewerCallback`,async()=>this._closeRevisionViewerCallback())}_registerFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`);this._setNewDialogPosition(),e.on(`change:isOpen`,this.updateDialogPositionCallback,{priority:`highest`})}_unregisterFullscreenDialogPositionAdjustments(){let e=this._editor.plugins.get(`Dialog`),t=e.view;t&&t.position===null&&(t.position=Jy.EDITOR_TOP_SIDE),t&&t.updatePosition(),e.off(`change:isOpen`,this.updateDialogPositionCallback)}updateDialogPositionCallback=this._updateDialogPosition.bind(this);_updateDialogPosition(e,t,n){n&&this._setNewDialogPosition()}_setNewDialogPosition(){let e=this._editor.plugins.get(`Dialog`).view;if(!e||e.position!==Jy.EDITOR_TOP_SIDE)return;let t=new O(this._wrapper.querySelector(`.ck-fullscreen__right-edge`)).getVisible(),n=new O(t?this._wrapper.querySelector(`.ck-fullscreen__right-edge`):this._wrapper).getVisible(),r=new O(document.querySelector(`.ck-fullscreen__editable`)).getVisible(),i=new O(e.element.querySelector(`.ck-dialog`)).getVisible(),a=new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).excludeScrollbarsAndBorders().getVisible().width-new O(document.querySelector(`.ck-fullscreen__editable-wrapper`)).getVisible().width;if(n&&r&&i){e.position=null;let o=t?n.left-i.width-28:n.left+n.width-i.width-28+a;e.moveTo(o,r.top)}}_saveAncestorsScrollPositions(e){let t=e.parentElement;if(t)for(;t;){let e=t.style.overflowY||u.window.getComputedStyle(t).overflowY,n=t.style.overflowX||u.window.getComputedStyle(t).overflowX;(e===`auto`||e===`scroll`||n===`auto`||n===`scroll`||t.tagName===`HTML`)&&this._savedAncestorsScrollPositions.set(t,{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}),t=t.parentElement}}_handleAITabsTransfer(){let e=this._editor.plugins.get(`AITabs`);this._aiTabsData={side:e.side,type:e.type},this.moveToFullscreen(e.view.element,`right-edge`),e.side=`right`,e.type=`sidebar`,e.view.element.addEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_handleAISidebarTransitions(e){let t=this._editor.plugins.get(`AITabs`);e.target===t.view.element&&e.propertyName.includes(`width`)&&this._adjustVisibleElements()}_restoreAITabs(){let e=this._editor.plugins.get(`AITabs`);e.side=this._aiTabsData?.side,e.type=this._aiTabsData?.type,this._aiTabsData=null,e.view.element.removeEventListener(`transitionend`,this._aiTabsTransitionEndCallback)}_adjustVisibleElements(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);if(this._forceShowLeftSidebar){this._forceShowLeftSidebar=!1;return}if(e.scrollWidth>e.clientWidth)this._hideLeftSidebar(),e.scrollWidth>e.clientWidth&&this._hideRightSidebar();else{let t=[...e.children].reduce((e,t)=>e+t.scrollWidth,0);t+this._sidebarsWidths.righte+t.scrollWidth,0)),t+this._sidebarsWidths.left[...n.values()].some(t=>t(e))):t.switchTo(e)}_setupResizeObserver(){let e=this._wrapper.querySelector(`.ck-fullscreen__editable-wrapper`);this._resizeObserver&&this._resizeObserver.destroy(),this._resizeObserver=new Hr(e,()=>{this._adjustVisibleElements()})}_hideLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.add(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=__,this._collapseLeftSidebarButton.tooltip=e(`Show left sidebar`))}_showLeftSidebar(){let e=this._editor.t;this._collapseLeftSidebarButton&&(this._wrapper.querySelector(`.ck-fullscreen__left-sidebar`).classList.remove(`ck-fullscreen__left-sidebar--collapsed`),this._collapseLeftSidebarButton.icon=Wv,this._collapseLeftSidebarButton.tooltip=e(`Hide left sidebar`))}_hideRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`narrowSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.add(`ck-fullscreen__right-sidebar--collapsed`))}_showRightSidebar(){this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).firstChild&&(this._switchAnnotationsUI(`wideSidebar`),this._wrapper.querySelector(`.ck-fullscreen__right-sidebar`).classList.remove(`ck-fullscreen__right-sidebar--collapsed`))}_aiTabsTransitionEndCallback=e=>{this._handleAISidebarTransitions(e)}},mI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){let e=this._editor.ui,t=e.view;return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(e.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(e.getEditableElement(),`editable`),this.moveToFullscreen(t.toolbar.element,`toolbar`),t.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this.getWrapper().setAttribute(`dir`,t.element.getAttribute(`dir`)),this.getWrapper().classList.add(`ck-rounded-corners`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&(t.menuBarView||(t.menuBarView=new gw(this._editor.locale),t.menuBarView.render(),e.initMenuBar(t.menuBarView)),this.moveToFullscreen(t.menuBarView.element,`menu-bar`)),this.getWrapper()}},hI=class extends pI{_editor;constructor(e){super(e),this._editor=e}defaultOnEnter(){return this._editor.plugins.has(`Pagination`)&&this._editor.plugins.get(`Pagination`).isEnabled&&this.moveToFullscreen(this._editor.ui.getEditableElement().parentElement.querySelector(`.ck-pagination-view`),`pagination-view`),this.moveToFullscreen(this._editor.ui.getEditableElement(),`editable`),this.moveToFullscreen(this._editor.ui.view.toolbar.element,`toolbar`),this._editor.ui.view.toolbar.switchBehavior(this._editor.config.get(`fullscreen.toolbar.shouldNotGroupWhenFull`)===!0?`static`:`dynamic`),this._editor.config.get(`fullscreen.menuBar.isVisible`)&&this.moveToFullscreen(this._editor.ui.view.menuBarView.element,`menu-bar`),this.getWrapper()}},gI=class extends I{fullscreenHandler;constructor(e){super(e),this.affectsData=!1,this.isEnabled=!0,this.value=!1,bne(e)?this.fullscreenHandler=new mI(e):xne(e)?this.fullscreenHandler=new hI(e):this.fullscreenHandler=new pI(e)}execute(){this.value?this._disableFullscreenMode():this._enableFullscreenMode()}_enableFullscreenMode(){this.fullscreenHandler.enable(),this.value=!0}_disableFullscreenMode(){this.fullscreenHandler.disable(),this.value=!1}};function bne(e){return e.constructor.editorName===`ClassicEditor`}function xne(e){return e.constructor.editorName===`DecoupledEditor`}var _I=class extends F{static get pluginName(){return`FullscreenEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`fullscreen.menuBar.isVisible`,!0),e.config.define(`fullscreen.toolbar.shouldNotGroupWhenFull`,e.config.get(`toolbar.shouldNotGroupWhenFull`)===!0)}init(){this.editor.commands.add(`toggleFullscreen`,new gI(this.editor));let e=this.editor.locale.t;this.editor.keystrokes.set(`Ctrl+Shift+F`,(e,t)=>{this.editor.execute(`toggleFullscreen`),p.isBlink||(this.editor.editing.view.document.isFocused=!1,this.editor.ui.view.toolbar.focusTracker.focusedElement=null),this.editor.editing.view.scrollToTheSelection(),this.editor.editing.view.focus(),t()}),this.editor.accessibility.addKeystrokeInfos({keystrokes:[{label:e(`Toggle fullscreen mode`),keystroke:`CTRL+SHIFT+F`}],categoryId:`navigation`})}};const vI=`toggleFullscreen`;var yI=class extends F{static get requires(){return[_I]}static get pluginName(){return`FullscreenUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`fullscreen`,()=>this._createButton(H)),e.ui.componentFactory.add(`menuBar:fullscreen`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.t,r=t.commands.get(vI),i=new e(t.locale);return i.set({isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`),i instanceof U?i.set({role:`menuitemcheckbox`,label:n(`Fullscreen mode`)}):(i.bind(`icon`).to(r,`value`,e=>e?k_:O_),i.bind(`label`).to(r,`value`,e=>n(e?`Leave fullscreen mode`:`Enter fullscreen mode`)),i.set({tooltip:!0})),this.listenTo(i,`execute`,()=>{t.execute(vI),p.isBlink||(this.editor.ui.view.toolbar.focusTracker.focusedElement=null),t.editing.view.scrollToTheSelection(),t.editing.view.focus()}),i}},Sne=class extends F{static get requires(){return[_I,yI]}static get pluginName(){return`Fullscreen`}static get isOfficialPlugin(){return!0}},bI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}refresh(){let e=this.editor.model,t=e.document,n=j(t.selection.getSelectedBlocks());this.value=!!n&&n.is(`element`,`paragraph`),this.isEnabled=!!n&&xI(n,e.schema)}execute(e={}){let t=this.editor.model,n=t.document,r=e.selection||n.selection;t.canEditAt(r)&&t.change(e=>{let n=r.getSelectedBlocks();for(let r of n)!r.is(`element`,`paragraph`)&&xI(r,t.schema)&&e.rename(r,`paragraph`)})}};function xI(e,t){return t.checkChild(e.parent,`paragraph`)&&!t.isObject(e)}var SI=class extends I{constructor(e){super(e),this._isEnabledBasedOnSelection=!1}execute(e){let t=this.editor.model,n=e.attributes,r=e.position;return t.canEditAt(r)?t.change(e=>{if(r=this._findPositionToInsertParagraph(r,e),!r)return null;let i=e.createElement(`paragraph`);return n&&t.schema.setAllowedAttributes(i,n,e),t.insertContent(i,r),e.setSelection(i,`in`),e.createPositionAt(i,0)}):null}_findPositionToInsertParagraph(e,t){let n=this.editor.model;if(n.schema.checkChild(e,`paragraph`))return e;let r=n.schema.findAllowedParent(e,`paragraph`);if(!r)return null;let i=e.parent,a=n.schema.checkChild(i,`$text`);return i.isEmpty||a&&e.isAtEnd?n.createPositionAfter(i):!i.isEmpty&&a&&e.isAtStart?n.createPositionBefore(i):t.split(e,r).position}},CI=class e extends F{static get pluginName(){return`Paragraph`}static get isOfficialPlugin(){return!0}init(){let t=this.editor,n=t.model;t.commands.add(`paragraph`,new bI(t)),t.commands.add(`insertParagraph`,new SI(t)),n.schema.register(`paragraph`,{inheritAllFrom:`$block`}),t.conversion.elementToElement({model:`paragraph`,view:`p`}),t.conversion.for(`upcast`).elementToElement({model:(t,{writer:n})=>!e.paragraphLikeElements.has(t.name)||t.isEmpty?null:n.createElement(`paragraph`),view:/.+/,converterPriority:`low`})}static paragraphLikeElements=new Set([`blockquote`,`dd`,`div`,`dt`,`h1`,`h2`,`h3`,`h4`,`h5`,`h6`,`li`,`p`,`td`,`th`])},Cne=class extends F{static get requires(){return[CI]}init(){let e=this.editor,t=e.t;e.ui.componentFactory.add(`paragraph`,n=>{let r=new H(n),i=e.commands.get(`paragraph`);return r.label=t(`Paragraph`),r.icon=Lv,r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`),r.on(`execute`,()=>{e.execute(`paragraph`)}),r})}},wI=class extends I{modelElements;constructor(e,t){super(e),this.modelElements=t}refresh(){let e=j(this.editor.model.document.selection.getSelectedBlocks());this.value=!!e&&this.modelElements.includes(e.name)&&e.name,this.isEnabled=!!e&&this.modelElements.some(t=>TI(e,t,this.editor.model.schema))}execute(e){let t=this.editor.model,n=t.document,r=e.value;t.change(e=>{let i=Array.from(n.selection.getSelectedBlocks()).filter(e=>TI(e,r,t.schema));for(let t of i)t.is(`element`,r)||e.rename(t,r)})}};function TI(e,t,n){return n.checkChild(e.parent,t)&&!n.isObject(e)}const EI=`paragraph`;var DI=class extends F{static get pluginName(){return`HeadingEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`heading`,{options:[{model:`paragraph`,title:`Paragraph`,class:`ck-heading_paragraph`},{model:`heading1`,view:`h2`,title:`Heading 1`,class:`ck-heading_heading1`},{model:`heading2`,view:`h3`,title:`Heading 2`,class:`ck-heading_heading2`},{model:`heading3`,view:`h4`,title:`Heading 3`,class:`ck-heading_heading3`}]})}static get requires(){return[CI]}init(){let e=this.editor,t=e.config.get(`heading.options`),n=[];for(let r of t)r.model!==`paragraph`&&(e.model.schema.register(r.model,{inheritAllFrom:`$block`}),e.conversion.elementToElement(r),n.push(r.model));this._addDefaultH1Conversion(e),e.commands.add(`heading`,new wI(e,n))}afterInit(){let e=this.editor,t=e.commands.get(`enter`),n=e.config.get(`heading.options`);t&&this.listenTo(t,`afterExecute`,(t,r)=>{let i=e.model.document.selection.getFirstPosition().parent;n.some(e=>i.is(`element`,e.model))&&!i.is(`element`,EI)&&i.childCount===0&&r.writer.rename(i,EI)})}_addDefaultH1Conversion(e){e.conversion.for(`upcast`).elementToElement({model:`heading1`,view:`h1`,converterPriority:ge.low+1})}};function OI(e){let t=e.t,n={Paragraph:t(`Paragraph`),\"Heading 1\":t(`Heading 1`),\"Heading 2\":t(`Heading 2`),\"Heading 3\":t(`Heading 3`),\"Heading 4\":t(`Heading 4`),\"Heading 5\":t(`Heading 5`),\"Heading 6\":t(`Heading 6`)};return e.config.get(`heading.options`).map(e=>{let t=n[e.title];return t&&t!=e.title&&(e.title=t),e})}var kI=class extends F{static get pluginName(){return`HeadingUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=OI(e),r=t(`Choose heading`),i=t(`Heading`);e.ui.componentFactory.add(`heading`,t=>{let a={},o=new Fi,s=e.commands.get(`heading`),c=e.commands.get(`paragraph`),l=[s];for(let e of n){let t={type:`button`,model:new RC({label:e.title,class:e.class,role:`menuitemradio`,withText:!0})};e.model===`paragraph`?(t.model.bind(`isOn`).to(c,`value`),t.model.set(`commandName`,`paragraph`),l.push(c)):(t.model.bind(`isOn`).to(s,`value`,t=>t===e.model),t.model.set({commandName:`heading`,commandValue:e.model})),o.add(t),a[e.model]=e.title}let u=Nx(t);return Lx(u,o,{ariaLabel:i,role:`menu`}),u.buttonView.set({ariaLabel:i,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:i}),u.extendTemplate({attributes:{class:[`ck-heading-dropdown`]}}),u.bind(`isEnabled`).toMany(l,`isEnabled`,(...e)=>e.some(e=>e)),u.buttonView.bind(`label`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?r:a[n]}),u.buttonView.bind(`ariaLabel`).to(s,`value`,c,`value`,(e,t)=>{let n=t?`paragraph`:e;return typeof n==`boolean`||!a[n]?i:`${a[n]}, ${i}`}),this.listenTo(u,`execute`,t=>{let{commandName:n,commandValue:r}=t.source;e.execute(n,r?{value:r}:void 0),e.editing.view.focus()}),u}),e.ui.componentFactory.add(`menuBar:heading`,r=>{let i=new uw(r),a=e.commands.get(`heading`),o=e.commands.get(`paragraph`),s=[a],c=new dw(r);i.set({class:`ck-heading-dropdown`}),c.set({ariaLabel:t(`Heading`),role:`menu`}),i.buttonView.set({label:t(`Heading`)}),i.panelView.children.add(c);for(let t of n){let n=new rC(r,i),l=new U(r);n.children.add(l),c.items.add(n),l.set({isToggleable:!0,label:t.title,role:`menuitemradio`,class:t.class}),l.delegate(`execute`).to(i),l.on(`execute`,()=>{let n=t.model===`paragraph`?`paragraph`:`heading`;e.execute(n,{value:t.model}),e.editing.view.focus()}),t.model===`paragraph`?(l.bind(`isOn`).to(o,`value`),s.push(o)):l.bind(`isOn`).to(a,`value`,e=>e===t.model)}return i.bind(`isEnabled`).toMany(s,`isEnabled`,(...e)=>e.some(e=>e)),i})}},wne=class extends F{static get requires(){return[DI,kI]}static get pluginName(){return`Heading`}static get isOfficialPlugin(){return!0}};const Tne={heading1:A_,heading2:j_,heading3:M_,heading4:N_,heading5:P_,heading6:F_};var Ene=class extends F{init(){OI(this.editor).filter(e=>e.model!==`paragraph`).map(e=>this._createButton(e))}_createButton(e){let t=this.editor;t.ui.componentFactory.add(e.model,n=>{let r=new H(n),i=t.commands.get(`heading`);return r.label=e.title,r.icon=e.icon||Tne[e.model],r.tooltip=!0,r.isToggleable=!0,r.bind(`isEnabled`).to(i),r.bind(`isOn`).to(i,`value`,t=>t==e.model),r.on(`execute`,()=>{t.execute(`heading`,{value:e.model}),t.editing.view.focus()}),r})}};const AI=new Set([`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`]);var Dne=class extends F{_bodyPlaceholder=new Map;static get pluginName(){return`Title`}static get isOfficialPlugin(){return!0}static get requires(){return[CI]}init(){let e=this.editor,t=e.model;t.schema.register(`title`,{isBlock:!0,allowIn:`$root`}),t.schema.register(`title-content`,{isBlock:!0,allowIn:`title`,allowAttributes:[`alignment`]}),t.schema.extend(`$text`,{allowIn:`title-content`}),t.schema.addAttributeCheck(e=>{if(e.endsWith(`title-content $text`))return!1}),e.editing.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.data.mapper.on(`modelToViewPosition`,MI(e.editing.view)),e.conversion.for(`downcast`).elementToElement({model:`title-content`,view:`h1`}),e.conversion.for(`downcast`).add(e=>e.on(`insert:title`,(e,t,n)=>{n.consumable.consume(t.item,e.name)})),e.data.upcastDispatcher.on(`element:h1`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h2`,jI,{priority:`high`}),e.data.upcastDispatcher.on(`element:h3`,jI,{priority:`high`}),t.document.registerPostFixer(e=>this._fixTitleContent(e)),t.document.registerPostFixer(e=>this._fixTitleElement(e)),t.document.registerPostFixer(e=>this._fixBodyElement(e)),t.document.registerPostFixer(e=>this._fixExtraParagraph(e)),this._attachPlaceholders(),this._attachTabPressHandling(),this._warnIfNoSupportedRoot()}_warnIfNoSupportedRoot(){let e=this.editor.model;for(let t of e.document.getRoots())if(e.schema.checkChild(t,`title`))return;T(`title-no-supported-root`)}getTitle(e={}){let t=e.rootName?e.rootName:void 0,n=this._getTitleElement(t);if(!n)return``;let r=n.getChild(0);return this.editor.data.stringify(r,e)}getBody(e={}){let t=this.editor,n=t.data,r=t.model,i=e.rootName?e.rootName:void 0,a=t.model.document.getRoot(i);if(!r.schema.checkChild(a,`title`))return n.get({...e,rootName:a.rootName});let o=a.getChild(0);if(!o||!o.is(`element`,`title`))return``;let s=t.editing.view,c=new Rs(s.document),l=r.createRangeIn(a),u=c.createDocumentFragment(),d=r.createPositionAfter(o),f=r.createRange(d,r.createPositionAt(a,`end`)),p=new Map;for(let e of r.markers){let t=f.getIntersection(e.getRange());t&&p.set(e.name,t)}return n.mapper.clearBindings(),n.mapper.bindElements(a,u),n.downcastDispatcher.convert(l,p,c,e),c.remove(c.createRangeOn(u.getChild(0))),t.data.processor.toData(u)}_getTitleElement(e){let t=this.editor.model,n=t.document.getRoot(e);if(t.schema.checkChild(n,`title`)){for(let e of n.getChildren())if(NI(e))return e}}_fixTitleContent(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this._getTitleElement(n);if(!r||r.maxOffset===1)continue;let i=Array.from(r.getChildren());i.shift();for(let t of i)e.move(e.createRangeOn(t),r,`after`),e.rename(t,`paragraph`);t=!0}return t}_fixTitleElement(e){let t=!1,n=this.editor.model;for(let r of this.editor.model.document.getRoots()){if(!n.schema.checkChild(r,`title`))continue;let i=Array.from(r.getChildren()).filter(NI),a=i[0],o=r.getChild(0);if(o.is(`element`,`title`)){i.length>1&&(PI(i,e,n),t=!0);continue}if(!a&&!AI.has(o.name)){let n=e.createElement(`title`);e.insert(n,r),e.insertElement(`title-content`,n),t=!0;continue}AI.has(o.name)?One(o,e,n):e.move(e.createRangeOn(a),r,0),PI(i,e,n),t=!0}return t}_fixBodyElement(e){let t=this.editor.model.schema,n=!1;for(let r of this.editor.model.document.getRootNames()){let i=this.editor.model.document.getRoot(r);if(i.childCount<2&&t.checkChild(i,`title`)){let t=e.createElement(`paragraph`);e.insert(t,i,1),this._bodyPlaceholder.set(r,t),n=!0}}return n}_fixExtraParagraph(e){let t=!1;for(let n of this.editor.model.document.getRootNames()){let r=this.editor.model.document.getRoot(n),i=this._bodyPlaceholder.get(n);i&&Ane(i,r)&&(this._bodyPlaceholder.delete(n),e.remove(i),t=!0)}return t}_attachPlaceholders(){let e=this.editor,t=e.t,n=e.editing.view,r=e.sourceElement,i=e.config.get(`title.placeholder`)||t(`Type your title`);e.editing.downcastDispatcher.on(`insert:title-content`,(e,t,r)=>{let a=r.mapper.toViewElement(t.item);a.placeholder=i,yo({view:n,element:a,keepOnFocus:!0})});let a=new Map;n.document.registerPostFixer(i=>{let o=!1;for(let s of n.document.roots){if(s.isEmpty)continue;let n=e.editing.mapper.toModelElement(s);if(!e.model.schema.checkChild(n,`title`))continue;let c=s.getChild(1),l=a.get(s.rootName);if(c!==l){l&&(So(i,l),i.removeAttribute(`data-placeholder`,l));let n=e.config.get(`roots`)[s.rootName]?.placeholder||jne(r)&&r.getAttribute(`placeholder`)||t(`Type or paste your content here.`);i.setAttribute(`data-placeholder`,n,c),a.set(s.rootName,c),o=!0}o=Co(c,!0)&&s.childCount===2&&c.name===`p`?xo(i,c)?!0:o:So(i,c)?!0:o}return o})}_attachTabPressHandling(){let e=this.editor,t=e.model;e.keystrokes.set(`TAB`,(e,n)=>{t.change(e=>{let r=t.document.selection,i=Array.from(r.getSelectedBlocks());if(i.length===1&&i[0].is(`element`,`title-content`)){let t=r.getFirstPosition().root.getChild(1);e.setSelection(t,0),n()}})}),e.keystrokes.set(`SHIFT + TAB`,(n,r)=>{t.change(n=>{let i=t.document.selection;if(!i.isCollapsed)return;let a=j(i.getSelectedBlocks()),o=i.getFirstPosition(),s=e.model.document.getRoot(o.root.rootName);if(!t.schema.checkChild(s,`title`))return;let c=s.getChild(0);a===s.getChild(1)&&o.isAtStart&&(n.setSelection(c.getChild(0),0),r())})})}};function jI(e,t,n){let r=t.modelCursor,i=t.viewItem;if(!r.isAtStart||!r.parent.is(`element`,`$root`)||!n.consumable.consume(i,{name:!0}))return;let a=n.writer,o=a.createElement(`title`),s=a.createElement(`title-content`);a.append(s,o),a.insert(o,r),n.convertChildren(i,s),n.updateConversionResult(o,t)}function MI(e){return(t,n)=>{let r=n.modelPosition.parent;if(!r.is(`element`,`title`))return;let i=r.parent,a=n.mapper.toViewElement(i);n.viewPosition=e.createPositionAt(a,0),t.stop()}}function NI(e){return e.is(`element`,`title`)}function One(e,t,n){let r=t.createElement(`title`);t.insert(r,e,`before`),t.insert(e,r,0),t.rename(e,`title-content`),n.schema.removeDisallowedAttributes([e],t)}function PI(e,t,n){let r=!1;for(let i of e)i.index!==0&&(kne(i,t,n),r=!0);return r}function kne(e,t,n){let r=e.getChild(0);if(r.isEmpty){t.remove(e);return}t.move(t.createRangeOn(r),e,`before`),t.rename(r,`paragraph`),t.remove(e),n.schema.removeDisallowedAttributes([r],t)}function Ane(e,t){return!(!e.is(`element`,`paragraph`)||e.childCount||t.childCount<=2||t.getChild(t.childCount-1)!==e)}function jne(e){return!!e&&e.tagName.toLowerCase()===`textarea`}var FI=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=t.selection.getAttribute(`highlight`),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`highlight`)}execute(e={}){let t=this.editor.model,n=t.document.selection,r=e.value;t.change(e=>{if(n.isCollapsed){let t=n.getFirstPosition();if(n.hasAttribute(`highlight`)){let n=e=>e.item.hasAttribute(`highlight`)&&e.item.getAttribute(`highlight`)===this.value,i=t.getLastMatchingPosition(n,{direction:`backward`}),a=t.getLastMatchingPosition(n),o=e.createRange(i,a);!r||this.value===r?(t.isEqual(a)||e.removeAttribute(`highlight`,o),e.removeSelectionAttribute(`highlight`)):(t.isEqual(a)||e.setAttribute(`highlight`,r,o),e.setSelectionAttribute(`highlight`,r))}else r&&e.setSelectionAttribute(`highlight`,r)}else{let i=t.schema.getValidRanges(n.getRanges(),`highlight`,{includeEmptyRanges:!0});for(let t of i){let n=t,i=`highlight`;t.isCollapsed&&(n=t.start.parent,i=Tl._getStoreAttributeKey(`highlight`)),r?e.setAttribute(i,r,n):e.removeAttribute(i,n)}}})}},II=class extends F{static get pluginName(){return`HighlightEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`highlight`,{options:[{model:`yellowMarker`,class:`marker-yellow`,title:`Yellow marker`,color:`var(--ck-content-highlight-marker-yellow)`,type:`marker`},{model:`greenMarker`,class:`marker-green`,title:`Green marker`,color:`var(--ck-content-highlight-marker-green)`,type:`marker`},{model:`pinkMarker`,class:`marker-pink`,title:`Pink marker`,color:`var(--ck-content-highlight-marker-pink)`,type:`marker`},{model:`blueMarker`,class:`marker-blue`,title:`Blue marker`,color:`var(--ck-content-highlight-marker-blue)`,type:`marker`},{model:`redPen`,class:`pen-red`,title:`Red pen`,color:`var(--ck-content-highlight-pen-red)`,type:`pen`},{model:`greenPen`,class:`pen-green`,title:`Green pen`,color:`var(--ck-content-highlight-pen-green)`,type:`pen`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`highlight`});let t=e.config.get(`highlight.options`);e.conversion.attributeToElement(LI(t)),e.commands.add(`highlight`,new FI(e))}};function LI(e){let t={model:{key:`highlight`,values:[]},view:{}};for(let n of e)t.model.values.push(n.model),t.view[n.model]={name:`mark`,classes:n.class};return t}var RI=class extends F{get localizedOptionTitles(){let e=this.editor.t;return{\"Yellow marker\":e(`Yellow marker`),\"Green marker\":e(`Green marker`),\"Pink marker\":e(`Pink marker`),\"Blue marker\":e(`Blue marker`),\"Red pen\":e(`Red pen`),\"Green pen\":e(`Green pen`)}}static get pluginName(){return`HighlightUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.config.get(`highlight.options`);for(let t of e)this._addHighlighterButton(t);this._addRemoveHighlightButton(),this._addDropdown(e),this._addMenuBarButton(e)}_addRemoveHighlightButton(){let e=this.editor.t,t=this.editor.commands.get(`highlight`);this._addButton(`removeHighlight`,e(`Remove highlight`),S_,null,e=>{e.bind(`isEnabled`).to(t,`isEnabled`)})}_addHighlighterButton(e){let t=this.editor.commands.get(`highlight`);this._addButton(`highlight:`+e.model,e.title,BI(e.type),e.model,n);function n(n){n.bind(`isEnabled`).to(t,`isEnabled`),n.bind(`isOn`).to(t,`value`,t=>t===e.model),n.iconView.fillColor=e.color,n.isToggleable=!0}}_addButton(e,t,n,r,i){let a=this.editor;a.ui.componentFactory.add(e,e=>{let o=new H(e),s=this.localizedOptionTitles[t]?this.localizedOptionTitles[t]:t;return o.set({label:s,icon:n,tooltip:!0}),o.on(`execute`,()=>{a.execute(`highlight`,{value:r}),a.editing.view.focus()}),i(o),o})}_addDropdown(e){let t=this.editor,n=t.t,r=t.ui.componentFactory,i=e[0],a=e.reduce((e,t)=>(e[t.model]=t,e),{});r.add(`highlight`,o=>{let s=t.commands.get(`highlight`),c=Nx(o,Mx),l=c.buttonView;l.set({label:n(`Highlight`),tooltip:!0,lastExecuted:i.model,commandValue:i.model,isToggleable:!0}),l.bind(`icon`).to(s,`value`,e=>BI(u(e,`type`))),l.bind(`color`).to(s,`value`,e=>u(e,`color`)),l.bind(`commandValue`).to(s,`value`,e=>u(e,`model`)),l.bind(`isOn`).to(s,`value`,e=>!!e),l.delegate(`execute`).to(c),c.bind(`isEnabled`).to(s,`isEnabled`),Fx(c,()=>{let t=e.map(e=>{let t=r.create(`highlight:`+e.model);return this.listenTo(t,`execute`,()=>{c.buttonView.set({lastExecuted:e.model})}),t});return t.push(new Cx),t.push(r.create(`removeHighlight`)),t},{enableActiveItemFocusOnDropdownOpen:!0,ariaLabel:n(`Text highlight toolbar`)}),zI(c),l.on(`execute`,()=>{t.execute(`highlight`,{value:l.commandValue})}),this.listenTo(c,`execute`,()=>{t.editing.view.focus()});function u(e,t){return a[!e||e===l.lastExecuted?l.lastExecuted:e][t]}return c})}_addMenuBarButton(e){let t=this.editor,n=t.t,r=t.commands.get(`highlight`);t.ui.componentFactory.add(`menuBar:highlight`,i=>{let a=new uw(i);a.buttonView.set({label:n(`Highlight`),icon:BI(`marker`)}),a.bind(`isEnabled`).to(r),a.buttonView.iconView.fillColor=`transparent`;let o=new dw(i);for(let n of e){let e=new rC(i,a),s=new U(i);s.set({label:n.title,icon:BI(n.type),role:`menuitemradio`,isToggleable:!0}),s.iconView.fillColor=n.color,s.delegate(`execute`).to(a),s.bind(`isOn`).to(r,`value`,e=>e===n.model),s.on(`execute`,()=>{t.execute(`highlight`,{value:n.model}),t.editing.view.focus()}),e.children.add(s),o.items.add(e)}o.items.add(new fx(i));let s=new rC(i,a),c=new U(i);return c.set({label:n(`Remove highlight`),icon:S_}),c.delegate(`execute`).to(a),c.on(`execute`,()=>{t.execute(`highlight`,{value:null}),t.editing.view.focus()}),s.children.add(c),o.items.add(s),a.panelView.children.add(o),a})}};function zI(e){e.buttonView.actionView.iconView.bind(`fillColor`).to(e.buttonView,`color`)}function BI(e){return e===`marker`?uv:zv}var VI=class extends F{static get requires(){return[II,RI]}static get pluginName(){return`Highlight`}static get isOfficialPlugin(){return!0}},HI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=UI(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`horizontalLine`);e.insertObject(n,null,null,{setSelection:`after`})})}};function UI(e,t,n){let r=WI(e,n);return t.checkChild(r,`horizontalLine`)}function WI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var GI=class extends F{static get pluginName(){return`HorizontalLineEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`horizontalLine`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToElement({model:`horizontalLine`,view:(e,{writer:t})=>t.createEmptyElement(`hr`)}),r.for(`editingDowncast`).elementToStructure({model:`horizontalLine`,view:(e,{writer:t})=>{let r=n(`Horizontal line`),i=t.createContainerElement(`div`,null,t.createEmptyElement(`hr`));return t.addClass(`ck-horizontal-line`,i),t.setCustomProperty(`hr`,!0,i),KI(i,t,r)}}),r.for(`upcast`).elementToElement({view:`hr`,model:`horizontalLine`}),e.commands.add(`horizontalLine`,new HI(e))}};function KI(e,t,n){return t.setCustomProperty(`horizontalLine`,!0,e),UE(e,t,{label:n})}var qI=class extends F{static get pluginName(){return`HorizontalLineUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`horizontalLine`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:horizontalLine`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`horizontalLine`),i=new e(t.locale),a=n.t;return i.set({label:a(`Horizontal line`),icon:L_}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`horizontalLine`),t.editing.view.focus()}),i}},JI=class extends F{static get requires(){return[GI,qI,xD]}static get pluginName(){return`HorizontalLine`}static get isOfficialPlugin(){return!0}},YI=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=QI(n);this.isEnabled=XI(n,t,e),this.value=r?r.getAttribute(`value`)||``:null}execute(e){let t=this.editor.model,n=t.document.selection;t.change(r=>{let i;this.value===null?(i=r.createElement(`rawHtml`),t.insertObject(i,null,null,{setSelection:`on`})):i=QI(n),r.setAttribute(`value`,e,i)})}};function XI(e,t,n){let r=ZI(e,n);return t.checkChild(r,`rawHtml`)}function ZI(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}function QI(e){let t=e.getSelectedElement();return t&&t.is(`element`,`rawHtml`)?t:null}var $I=class extends F{_widgetButtonViewReferences=new Set;static get pluginName(){return`HtmlEmbedEditing`}static get licenseFeatureCode(){return`HE`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlEmbed`,{showPreviews:!1,sanitizeHtml:e=>(T(`html-embed-provide-sanitize-function`),{html:e,hasChanged:!1})})}init(){let e=this.editor;e.model.schema.register(`rawHtml`,{inheritAllFrom:`$blockObject`,allowAttributes:[`value`]}),e.commands.add(`htmlEmbed`,new YI(e)),this._setupConversion()}_setupConversion(){let e=this.editor,t=e.t,n=e.editing.view,r=this._widgetButtonViewReferences,i=e.config.get(`htmlEmbed`);this.editor.editing.view.on(`render`,()=>{for(let e of r){if(e.element&&e.element.isConnected)return;e.destroy(),r.delete(e)}},{priority:`lowest`}),e.data.registerRawContentMatcher({name:`div`,classes:`raw-html-embed`}),e.conversion.for(`upcast`).elementToElement({view:{name:`div`,classes:`raw-html-embed`},model:(e,{writer:t})=>t.createElement(`rawHtml`,{value:e.getCustomProperty(`$rawContent`)})}),e.conversion.for(`dataDowncast`).elementToElement({model:`rawHtml`,view:(e,{writer:t})=>t.createRawElement(`div`,{class:`raw-html-embed`},function(t){t.innerHTML=e.getAttribute(`value`)||``})}),e.conversion.for(`editingDowncast`).elementToStructure({model:{name:`rawHtml`,attributes:[`value`]},view:(r,{writer:o})=>{let s,c,l,u=o.createRawElement(`div`,{class:`raw-html-embed__content-wrapper`},function(t){s=t,a({editor:e,domElement:t,state:c,props:l}),s.addEventListener(`mousedown`,()=>{if(c.isEditable){let t=e.model;t.document.selection.getSelectedElement()!==r&&t.change(e=>e.setSelection(r,`on`))}},!0)}),d={makeEditable(){c=Object.assign({},c,{isEditable:!0}),a({domElement:s,editor:e,state:c,props:l}),n.change(e=>{e.setAttribute(`data-cke-ignore-events`,`true`,u)}),s.querySelector(`textarea`).focus()},save(t){t===c.getRawHtmlValue()?this.cancel():(e.execute(`htmlEmbed`,t),e.editing.view.focus())},cancel(){c=Object.assign({},c,{isEditable:!1}),a({domElement:s,editor:e,state:c,props:l}),e.editing.view.focus(),n.change(e=>{e.removeAttribute(`data-cke-ignore-events`,u)})}};c={showPreviews:i.showPreviews,isEditable:!1,getRawHtmlValue:()=>r.getAttribute(`value`)||``},l={sanitizeHtml:i.sanitizeHtml,textareaPlaceholder:t(`Paste raw HTML here...`),onEditClick(){d.makeEditable()},onSaveClick(e){d.save(e)},onCancelClick(){d.cancel()}};let f=o.createContainerElement(`div`,{class:`raw-html-embed`,\"data-html-embed-label\":t(`HTML snippet`),dir:e.locale.uiLanguageDirection},u);return o.setCustomProperty(`rawHtmlApi`,d,f),o.setCustomProperty(`rawHtml`,!0,f),UE(f,o,{label:t(`HTML snippet`),hasSelectionHandle:!0})}});function a({editor:e,domElement:t,state:n,props:r}){t.textContent=``;let i=t.ownerDocument,a;if(n.isEditable)a=s({domDocument:i,state:n,props:{isDisabled:!1,placeholder:r.textareaPlaceholder}}),t.append(a);else if(n.showPreviews){let a={sanitizeHtml:r.sanitizeHtml};t.append(c({domDocument:i,state:n,props:a,editor:e}))}else{let e={isDisabled:!0,placeholder:r.textareaPlaceholder};t.append(s({domDocument:i,state:n,props:e}))}let l={onEditClick:r.onEditClick,onSaveClick:()=>{r.onSaveClick(a.value)},onCancelClick:r.onCancelClick};t.prepend(o({editor:e,domDocument:i,state:n,props:l}))}function o({editor:e,domDocument:t,state:n,props:i}){let a=mr(t,`div`,{class:`raw-html-embed__buttons-wrapper`});if(n.isEditable){let t=eL(e,`save`,i.onSaveClick),n=eL(e,`cancel`,i.onCancelClick);a.append(t.element,n.element),r.add(t).add(n)}else{let t=eL(e,`edit`,i.onEditClick);a.append(t.element),r.add(t)}return a}function s({domDocument:e,state:t,props:n}){let r=mr(e,`textarea`,{placeholder:n.placeholder,class:`ck ck-reset ck-input ck-input-text raw-html-embed__source`});return r.disabled=n.isDisabled,r.value=t.getRawHtmlValue(),r}function c({editor:e,domDocument:n,state:r,props:i}){let a=i.sanitizeHtml(r.getRawHtmlValue()),o=mr(n,`div`,{class:`ck ck-reset_all raw-html-embed__preview-placeholder`},r.getRawHtmlValue().length>0?t(`No preview available`):t(`Empty snippet content`)),s=mr(n,`div`,{class:`raw-html-embed__preview-content`,dir:e.locale.contentLanguageDirection}),c=n.createRange().createContextualFragment(a.html);return s.appendChild(c),mr(n,`div`,{class:`raw-html-embed__preview`},[o,s])}}};function eL(e,t,n){let{t:r}=e.locale,i=new H(e.locale),a=e.commands.get(`htmlEmbed`);return i.set({class:`raw-html-embed__${t}-button`,icon:Rv,tooltip:!0,tooltipPosition:e.locale.uiLanguageDirection===`rtl`?`e`:`w`}),i.render(),t===`edit`?(i.set({icon:Rv,label:r(`Edit source`)}),i.bind(`isEnabled`).to(a)):t===`save`?(i.set({icon:l_,label:r(`Save changes`)}),i.bind(`isEnabled`).to(a)):i.set({icon:s_,label:r(`Cancel`)}),i.on(`execute`,n),i}var tL=class extends F{static get pluginName(){return`HtmlEmbedUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t;e.ui.componentFactory.add(`htmlEmbed`,()=>{let e=this._createButton(H);return e.set({tooltip:!0,label:t(`Insert HTML`)}),e}),e.ui.componentFactory.add(`menuBar:htmlEmbed`,()=>{let e=this._createButton(U);return e.set({label:t(`HTML snippet`)}),e})}_createButton(e){let t=this.editor,n=t.commands.get(`htmlEmbed`),r=new e(t.locale);return r.set({icon:R_}),r.bind(`isEnabled`).to(n,`isEnabled`),this.listenTo(r,`execute`,()=>{t.execute(`htmlEmbed`),t.editing.view.focus(),t.editing.view.document.selection.getSelectedElement().getCustomProperty(`rawHtmlApi`).makeEditable()}),r}},nL=class extends F{static get requires(){return[$I,tL,xD]}static get pluginName(){return`HtmlEmbed`}static get isOfficialPlugin(){return!0}};function rL(e,t,n,r){t&&aL(e,t,r),n&&iL(e,n,r)}function iL(e,t,n){if(t.attributes)for(let[r,i]of Object.entries(t.attributes))e.setAttribute(r,i,n);t.styles&&e.setStyle(t.styles,n),t.classes&&e.addClass(t.classes,n)}function aL(e,t,n){if(t.attributes)for(let[r]of Object.entries(t.attributes))e.removeAttribute(r,n);if(t.styles)for(let r of Object.keys(t.styles))e.removeStyle(r,n);t.classes&&e.removeClass(t.classes,n)}function oL(e,t){let n=Rt(e),r=`attributes`;for(r in t)r==`classes`?n[r]=Array.from(new Set([...e[r]||[],...t[r]])):n[r]={...e[r],...t[r]};return n}function sL(e,t,n,r,i){let a=t.getAttribute(n),o={};for(let e of[`attributes`,`styles`,`classes`]){if(e!=r){a&&a[e]&&(o[e]=a[e]);continue}if(r==`classes`){let t=new Set(a&&a.classes||[]);i(t),t.size&&(o[e]=Array.from(t));continue}let t=new Map(Object.entries(a&&a[e]||{}));i(t),t.size&&(o[e]=Object.fromEntries(t))}Object.keys(o).length?t.is(`documentSelection`)?e.setSelectionAttribute(n,o):e.setAttribute(n,o,t):a&&(t.is(`documentSelection`)?e.removeSelectionAttribute(n):e.removeAttribute(n,t))}function cL(e,t,n){for(let r of t.getItems({shallow:!0})){let t=r.getAttribute(e);t&&t.attributes&&Object.keys(t.attributes).length?Object.keys(t).length>1&&n.setAttribute(e,{attributes:t.attributes},r):n.removeAttribute(e,r)}}function lL(e){return qn(e).replace(/ /g,``)}function uL(e){return`html${lL(e)}Attributes`}function dL({model:e}){return(t,n)=>n.writer.createElement(e,{htmlContent:t.getCustomProperty(`$rawContent`)})}function fL(e,{view:t,isInline:n}){let r=e.t;return(e,{writer:i})=>{let a=r(`HTML object`),o=pL(t,e,i),s=e.getAttribute(uL(t));return i.addClass(`html-object-embed__content`,o),s&&iL(i,s,o),UE(i.createContainerElement(n?`span`:`div`,{class:`html-object-embed`,\"data-html-object-embed-label\":a},o),i,{label:a})}}function pL(e,t,n){return n.createRawElement(e,null,(e,n)=>{n.setContentOf(e,t.getAttribute(`htmlContent`))})}function mL({view:e,model:t,allowEmpty:n},r){return t=>{t.on(`element:${e}`,(e,t,a)=>{let o=r.processViewAttributes(t.viewItem,a);if(!(!o&&!a.consumable.test(t.viewItem,{name:!0}))){if(o||={},a.consumable.consume(t.viewItem,{name:!0}),t.modelRange||(t=Object.assign(t,a.convertChildren(t.viewItem,t.modelCursor))),n&&t.modelRange.isCollapsed&&Object.keys(o).length){let e=a.writer.createElement(`htmlEmptyElement`);if(!a.safeInsert(e,t.modelCursor))return;let n=a.getSplitParts(e);t.modelRange=a.writer.createRange(t.modelRange.start,a.writer.createPositionAfter(n[n.length-1])),a.updateConversionResult(e,t),i(e,o,a);return}for(let e of t.modelRange.getItems())i(e,o,a)}},{priority:`low`})};function i(e,n,r){if(r.schema.checkAttribute(e,t)){let i=oL(n,e.getAttribute(t)||{});r.writer.setAttribute(t,i,e)}}}function hL({model:e,view:t},n){return(r,{writer:i,consumable:a})=>{if(!r.hasAttribute(e))return null;let o=i.createContainerElement(t),s=r.getAttribute(e);return a.consume(r,`attribute:${e}`),iL(i,s,o),o.getFillerOffset=()=>null,n?UE(o,i):o}}function gL({priority:e,view:t}){return(n,r)=>{if(!n)return;let{writer:i}=r,a=i.createAttributeElement(t,null,{priority:e});return iL(i,n,a),a}}function _L({view:e},t){return n=>{n.on(`element:${e}`,(e,n,r)=>{if(!n.modelRange||n.modelRange.isCollapsed)return;let i=t.processViewAttributes(n.viewItem,r);i&&r.writer.setAttribute(uL(n.viewItem.name),i,n.modelRange)},{priority:`low`})}}function vL({view:e,model:t}){return n=>{n.on(`attribute:${uL(e)}:${t}`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.writer;rL(a,r,i,n.mapper.toViewElement(t.item))})}}const yL={block:[{model:`codeBlock`,view:`pre`},{model:`paragraph`,view:`p`},{model:`blockQuote`,view:`blockquote`},{model:`listItem`,view:`li`},{model:`pageBreak`,view:`div`},{model:`rawHtml`,view:`div`},{model:`table`,view:`table`},{model:`tableRow`,view:`tr`},{model:`tableCell`,view:`td`},{model:`tableCell`,view:`th`},{model:`tableColumnGroup`,view:`colgroup`},{model:`tableColumn`,view:`col`},{model:`caption`,view:`caption`},{model:`caption`,view:`figcaption`},{model:`imageBlock`,view:`img`},{model:`imageInline`,view:`img`},{model:`horizontalLine`,view:`hr`},{model:`htmlP`,view:`p`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlBlockquote`,view:`blockquote`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlTable`,view:`table`,modelSchema:{allowWhere:`$block`,isBlock:!0}},{model:`htmlTbody`,view:`tbody`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlThead`,view:`thead`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlTfoot`,view:`tfoot`,modelSchema:{allowIn:`htmlTable`,isBlock:!1}},{model:`htmlCaption`,view:`caption`,modelSchema:{allowIn:`htmlTable`,allowChildren:`$text`,isBlock:!1}},{model:`htmlColgroup`,view:`colgroup`,modelSchema:{allowIn:`htmlTable`,allowChildren:`col`,isBlock:!1}},{model:`htmlCol`,view:`col`,modelSchema:{allowIn:`htmlColgroup`,isBlock:!1}},{model:`htmlTr`,view:`tr`,modelSchema:{allowIn:[`htmlTable`,`htmlThead`,`htmlTbody`,`htmlTfoot`],isLimit:!0}},{model:`htmlTd`,view:`td`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlTh`,view:`th`,modelSchema:{allowIn:`htmlTr`,allowContentOf:`$container`,isLimit:!0,isBlock:!1}},{model:`htmlFigure`,view:`figure`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFigcaption`,view:`figcaption`,modelSchema:{allowIn:`htmlFigure`,allowChildren:`$text`,isBlock:!1}},{model:`htmlAddress`,view:`address`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlAside`,view:`aside`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlMain`,view:`main`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDetails`,view:`details`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSummary`,view:`summary`,modelSchema:{allowChildren:[`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`,`$text`],allowIn:`htmlDetails`,isBlock:!1}},{model:`htmlDiv`,view:`div`,paragraphLikeModel:`htmlDivParagraph`,modelSchema:{inheritAllFrom:`$container`}},{model:`htmlFieldset`,view:`fieldset`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlLegend`,view:`legend`,modelSchema:{allowIn:`htmlFieldset`,allowChildren:`$text`}},{model:`htmlHeader`,view:`header`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlFooter`,view:`footer`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlForm`,view:`form`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHgroup`,view:`hgroup`,modelSchema:{allowWhere:`$container`,allowChildren:[`paragraph`,`htmlP`,`htmlH1`,`htmlH2`,`htmlH3`,`htmlH4`,`htmlH5`,`htmlH6`],isBlock:!1}},{model:`htmlH1`,view:`h1`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH2`,view:`h2`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH3`,view:`h3`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH4`,view:`h4`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH5`,view:`h5`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlH6`,view:`h6`,modelSchema:{inheritAllFrom:`$block`}},{model:`$htmlList`,modelSchema:{allowWhere:`$container`,allowChildren:[`$htmlList`,`htmlLi`],isBlock:!1}},{model:`htmlDir`,view:`dir`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlMenu`,view:`menu`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlUl`,view:`ul`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlOl`,view:`ol`,modelSchema:{inheritAllFrom:`$htmlList`}},{model:`htmlLi`,view:`li`,modelSchema:{allowIn:`$htmlList`,allowChildren:`$text`,isBlock:!1}},{model:`htmlPre`,view:`pre`,modelSchema:{inheritAllFrom:`$block`}},{model:`htmlArticle`,view:`article`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlSection`,view:`section`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlNav`,view:`nav`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlDl`,view:`dl`,modelSchema:{allowWhere:`$container`,allowChildren:[`htmlDt`,`htmlDd`,`htmlDiv`],allowAttributesOf:[`$container`],isBlock:!1}},{model:`htmlDt`,view:`dt`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlDd`,view:`dd`,modelSchema:{allowChildren:`$block`,allowIn:`htmlDiv`,isBlock:!1}},{model:`htmlCenter`,view:`center`,modelSchema:{inheritAllFrom:`$container`,isBlock:!1}},{model:`htmlHr`,view:`hr`,isEmpty:!0,modelSchema:{inheritAllFrom:`$blockObject`}}],inline:[{model:`htmlLiAttributes`,view:`li`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlOlAttributes`,view:`ol`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlUlAttributes`,view:`ul`,appliesToBlock:!0,coupledAttribute:`listItemId`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`table`},{model:`htmlTheadAttributes`,view:`thead`,appliesToBlock:`table`},{model:`htmlTfootAttributes`,view:`tfoot`,appliesToBlock:`table`},{model:`htmlTbodyAttributes`,view:`tbody`,appliesToBlock:`table`},{model:`htmlFigureAttributes`,view:`figure`,appliesToBlock:`imageBlock`},{model:`htmlAcronym`,view:`acronym`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTt`,view:`tt`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlFont`,view:`font`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlTime`,view:`time`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlVar`,view:`var`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBig`,view:`big`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSmall`,view:`small`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSamp`,view:`samp`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlQ`,view:`q`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlOutput`,view:`output`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlKbd`,view:`kbd`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdi`,view:`bdi`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlBdo`,view:`bdo`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlAbbr`,view:`abbr`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlA`,view:`a`,priority:5,coupledAttribute:`linkHref`,attributeProperties:{isFormatting:!0}},{model:`htmlStrong`,view:`strong`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlB`,view:`b`,coupledAttribute:`bold`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlI`,view:`i`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlEm`,view:`em`,coupledAttribute:`italic`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlS`,view:`s`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDel`,view:`del`,coupledAttribute:`strikethrough`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlIns`,view:`ins`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlU`,view:`u`,coupledAttribute:`underline`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSub`,view:`sub`,coupledAttribute:`subscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSup`,view:`sup`,coupledAttribute:`superscript`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCode`,view:`code`,coupledAttribute:`code`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlMark`,view:`mark`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlSpan`,view:`span`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlCite`,view:`cite`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlLabel`,view:`label`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlDfn`,view:`dfn`,attributeProperties:{copyOnEnter:!0,isFormatting:!0}},{model:`htmlObject`,view:`object`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlIframe`,view:`iframe`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlInput`,view:`input`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlButton`,view:`button`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlTextarea`,view:`textarea`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlSelect`,view:`select`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlVideo`,view:`video`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlEmbed`,view:`embed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlOembed`,view:`oembed`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlAudio`,view:`audio`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlImg`,view:`img`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlCanvas`,view:`canvas`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlMeter`,view:`meter`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlProgress`,view:`progress`,isObject:!0,modelSchema:{inheritAllFrom:`$inlineObject`}},{model:`htmlScript`,view:`script`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlStyle`,view:`style`,modelSchema:{allowWhere:[`$text`,`$block`],isInline:!0}},{model:`htmlCustomElement`,view:`$customElement`,modelSchema:{allowWhere:[`$text`,`$block`],allowAttributesOf:`$inlineObject`,isInline:!0}}]};var bL=class extends F{_definitions=[];static get pluginName(){return`DataSchema`}static get isOfficialPlugin(){return!0}init(){for(let e of yL.block)this.registerBlockElement(e);for(let e of yL.inline)this.registerInlineElement(e)}registerBlockElement(e){this._definitions.push({...e,isBlock:!0})}registerInlineElement(e){this._definitions.push({...e,isInline:!0})}extendBlockElement(e){this._extendDefinition({...e,isBlock:!0})}extendInlineElement(e){this._extendDefinition({...e,isInline:!0})}getDefinitionsForView(e,t=!1){let n=new Set;for(let r of this._getMatchingViewDefinitions(e)){if(t)for(let e of this._getReferences(r.model))n.add(e);n.add(r)}return n}getDefinitionsForModel(e){return this._definitions.filter(t=>t.model==e)}_getMatchingViewDefinitions(e){return this._definitions.filter(t=>t.view&&xL(e,t.view))}*_getReferences(e){let t=[`inheritAllFrom`,`inheritTypesFrom`,`allowWhere`,`allowContentOf`,`allowAttributesOf`],n=this._definitions.filter(t=>t.model==e);for(let{modelSchema:r}of n)if(r)for(let n of t)for(let t of A(r[n]||[])){let n=this._definitions.filter(e=>e.model==t);for(let r of n)t!==e&&(yield*this._getReferences(r.model),yield r)}}_extendDefinition(e){let t=Array.from(this._definitions.entries()).filter(([,t])=>t.model==e.model);if(t.length==0){this._definitions.push(e);return}for(let[n,r]of t)this._definitions[n]=Sn({},r,e,(e,t)=>Array.isArray(e)?e.concat(t):void 0)}};function xL(e,t){return typeof e==`string`?e===t:e instanceof RegExp?e.test(t):!1}var SL=class extends F{_dataSchema;_allowedAttributes;_disallowedAttributes;_allowedElements;_disallowedElements;_dataInitialized;_coupledAttributes;constructor(e){super(e),this._dataSchema=e.plugins.get(`DataSchema`),this._allowedAttributes=new Po,this._disallowedAttributes=new Po,this._allowedElements=new Set,this._disallowedElements=new Set,this._dataInitialized=!1,this._coupledAttributes=null,this._registerElementsAfterInit(),this._registerElementHandlers(),this._registerCoupledAttributesPostFixer(),this._registerAssociatedHtmlAttributesPostFixer()}static get pluginName(){return`DataFilter`}static get isOfficialPlugin(){return!0}static get requires(){return[bL,xD]}loadAllowedConfig(e){for(let t of e){let e=t.name||/[\\s\\S]+/,n=OL(t);this.allowElement(e),n.forEach(e=>this.allowAttributes(e))}}loadDisallowedConfig(e){for(let t of e){let e=t.name||/[\\s\\S]+/,n=OL(t);n.length==0?this.disallowElement(e):n.forEach(e=>this.disallowAttributes(e))}}loadAllowedEmptyElementsConfig(e){for(let t of e)this.allowEmptyElement(t)}allowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))this._addAllowedElement(t),this._coupledAttributes=null}disallowElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!1))this._disallowedElements.add(t.view)}allowEmptyElement(e){for(let t of this._dataSchema.getDefinitionsForView(e,!0))t.isInline&&this._dataSchema.extendInlineElement({...t,allowEmpty:!0})}allowAttributes(e){this._allowedAttributes.add(e)}disallowAttributes(e){this._disallowedAttributes.add(e)}processViewAttributes(e,t){let{consumable:n}=t;return CL(e,this._disallowedAttributes,n),wL(e,CL(e,this._allowedAttributes,n))}_addAllowedElement(e){if(!this._allowedElements.has(e)){if(this._allowedElements.add(e),`appliesToBlock`in e&&typeof e.appliesToBlock==`string`)for(let t of this._dataSchema.getDefinitionsForModel(e.appliesToBlock))t.isBlock&&this._addAllowedElement(t);this._dataInitialized&&this.editor.data.once(`set`,()=>{this._fireRegisterEvent(e)},{priority:ge.highest+1})}}_registerElementsAfterInit(){this.editor.data.on(`init`,()=>{this._dataInitialized=!0;for(let e of this._allowedElements)this._fireRegisterEvent(e)},{priority:ge.highest+1})}_registerElementHandlers(){this.on(`register`,(e,t)=>{let n=this.editor.model.schema;if(t.isObject&&!n.isRegistered(t.model))this._registerObjectElement(t);else if(t.isBlock)this._registerBlockElement(t);else if(t.isInline)this._registerInlineElement(t);else throw new w(`data-filter-invalid-definition`,null,t);e.stop()},{priority:`lowest`})}_registerCoupledAttributesPostFixer(){let e=this.editor.model,t=e.document.selection;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1,i=this._getCoupledAttributesMap();for(let e of n){if(e.type!=`attribute`||e.attributeNewValue!==null)continue;let n=i.get(e.attributeKey);if(n)for(let{item:i}of e.range.getWalker())for(let e of n)i.hasAttribute(e)&&(t.removeAttribute(e,i),r=!0)}return r}),this.listenTo(t,`change:attribute`,(n,{attributeKeys:r})=>{let i=new Set,a=this._getCoupledAttributesMap();for(let e of r){if(t.hasAttribute(e))continue;let n=a.get(e);if(n)for(let e of n)t.hasAttribute(e)&&i.add(e)}i.size!=0&&e.change(e=>{for(let t of i)e.removeSelectionAttribute(t)})})}_registerAssociatedHtmlAttributesPostFixer(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=!1;for(let i of n)if(!(i.type!==`insert`||i.name===`$text`))for(let n of i.attributes.keys())!n.startsWith(`html`)||!n.endsWith(`Attributes`)||e.schema.checkAttribute(i.name,n)||(t.removeAttribute(n,i.position.nodeAfter),r=!0);return r})}_getCoupledAttributesMap(){if(this._coupledAttributes)return this._coupledAttributes;this._coupledAttributes=new Map;for(let e of this._allowedElements)if(e.coupledAttribute&&e.model){let t=this._coupledAttributes.get(e.coupledAttribute);t?t.push(e.model):this._coupledAttributes.set(e.coupledAttribute,[e.model])}return this._coupledAttributes}_fireRegisterEvent(e){e.view&&this._disallowedElements.has(e.view)||this.fire(e.view?`register:${e.view}`:`register`,e)}_registerObjectElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;n.register(a,e.modelSchema),i&&(n.extend(e.model,{allowAttributes:[uL(i),`htmlContent`]}),t.data.registerRawContentMatcher({name:i}),r.for(`upcast`).elementToElement({view:i,model:dL(e),converterPriority:ge.low+2}),r.for(`upcast`).add(_L(e,this)),r.for(`editingDowncast`).elementToStructure({model:{name:a,attributes:[uL(i)]},view:fL(t,e)}),r.for(`dataDowncast`).elementToElement({model:a,view:(e,{writer:t})=>pL(i,e,t)}),r.for(`dataDowncast`).add(vL(e)))}_registerBlockElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,{view:i,model:a}=e;if(!n.isRegistered(e.model)){if(!e.modelSchema||(n.register(e.model,e.modelSchema),!i))return;r.for(`upcast`).elementToElement({model:a,view:i,converterPriority:ge.low+2}),r.for(`downcast`).elementToElement({model:a,view:(t,{writer:n})=>e.isEmpty?n.createEmptyElement(i):n.createContainerElement(i)})}i&&(n.extend(e.model,{allowAttributes:uL(i)}),r.for(`upcast`).add(_L(e,this)),r.for(`downcast`).add(vL(e)))}_registerInlineElement(e){let t=this.editor,n=t.model.schema,r=t.conversion,i=e.model;if(!e.appliesToBlock&&(n.extend(`$text`,{allowAttributes:i}),e.attributeProperties&&n.setAttributeProperties(i,e.attributeProperties),r.for(`upcast`).add(mL(e,this)),r.for(`downcast`).attributeToElement({model:i,view:gL(e)}),e.allowEmpty)){if(n.setAttributeProperties(i,{copyFromObject:!1}),!n.isRegistered(`htmlEmptyElement`)){n.register(`htmlEmptyElement`,{inheritAllFrom:`$inlineObject`});let e=e=>Array.from(e.getAttributeKeys()).some(e=>e.startsWith(`html`));t.model.document.registerPostFixer(n=>{let r=t.model.document.differ.getChanges(),i=new Set;for(let t of r)if(t.type!==`remove`){if(t.type===`attribute`&&t.attributeNewValue===null)for(let{item:n}of t.range)n.is(`element`,`htmlEmptyElement`)&&!e(n)&&i.add(n);if(t.type===`insert`&&t.position.nodeAfter){let r=t.position.nodeAfter;for(let{item:t}of n.createRangeOn(r))t.is(`element`,`htmlEmptyElement`)&&!e(t)&&i.add(t)}}for(let e of i)n.remove(e);return i.size>0})}t.data.htmlProcessor.domConverter.registerInlineObjectMatcher(t=>t.name==e.view&&t.isEmpty&&Array.from(t.getAttributeKeys()).length?{name:!0}:null),r.for(`editingDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e,!0)}),r.for(`dataDowncast`).elementToElement({model:`htmlEmptyElement`,view:hL(e)})}}};function CL(e,t,n){let r=t.matchAll(e)||[],i=e.document.stylesProcessor;return r.reduce((t,{match:r})=>{for(let[a,o]of r.attributes||[])if(a==`style`){let r=o,a=i.getRelatedStyles(r).filter(e=>e.split(`-`).length>r.split(`-`).length).sort((e,t)=>t.split(`-`).length-e.split(`-`).length);for(let r of a)n.consume(e,{styles:[r]})&&t.styles.push(r);n.consume(e,{styles:[r]})&&t.styles.push(r)}else if(a==`class`){let r=o;n.consume(e,{classes:[r]})&&t.classes.push(r)}else n.consume(e,{attributes:[a]})&&t.attributes.push(a);return t},{attributes:[],classes:[],styles:[]})}function wL(e,{attributes:t,classes:n,styles:r}){return!t.length&&!n.length&&!r.length?null:{...t.length&&{attributes:TL(e,t)},...r.length&&{styles:EL(e,r)},...n.length&&{classes:n}}}function TL(e,t){let n={};for(let r of t){let t=e.getAttribute(r);t!==void 0&&Jr(r)&&(n[r]=t)}return n}function EL(e,t){let n=new Vo(e.document.stylesProcessor);for(let r of t){let t=e.getStyle(r);t!==void 0&&n.set(r,t)}return Object.fromEntries(n.getStylesEntries())}function DL(e,t){let{name:n}=e,r=e[t];return xn(r)?Object.entries(r).map(([e,r])=>({name:n,[t]:{[e]:r}})):Array.isArray(r)?r.map(e=>({name:n,[t]:[e]})):[e]}function OL(e){let{name:t,attributes:n,classes:r,styles:i}=e,a=[];return n&&a.push(...DL({name:t,attributes:n},`attributes`)),r&&a.push(...DL({name:t,classes:r},`classes`)),i&&a.push(...DL({name:t,styles:i},`styles`)),a}var kL=class extends F{static get requires(){return[SL]}static get pluginName(){return`CodeBlockElementSupport`}static get isOfficialPlugin(){return!0}init(){if(!this.editor.plugins.has(`CodeBlockEditing`))return;let e=this.editor.plugins.get(SL);e.on(`register:pre`,(t,n)=>{if(n.model!==`codeBlock`)return;let r=this.editor,i=r.model.schema,a=r.conversion;i.extend(`codeBlock`,{allowAttributes:[`htmlPreAttributes`,`htmlContentAttributes`]}),a.for(`upcast`).add(AL(e)),a.for(`downcast`).add(jL()),t.stop()})}};function AL(e){return t=>{t.on(`element:code`,(t,n,r)=>{let i=n.viewItem,a=i.parent;if(!a||!a.is(`element`,`pre`)||!n.modelRange)return;o(a,`htmlPreAttributes`),o(i,`htmlContentAttributes`);function o(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function jL(){return e=>{e.on(`attribute:htmlPreAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item).parent;rL(n.writer,r,i,a)}),e.on(`attribute:htmlContentAttributes:codeBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)})}}var ML=class extends F{static get requires(){return[SL]}static get pluginName(){return`DualContentModelElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.plugins.get(SL).on(`register`,(e,t)=>{let n=t,r=this.editor,i=r.model.schema,a=r.conversion;if(!n.paragraphLikeModel||i.isRegistered(n.model)||i.isRegistered(n.paragraphLikeModel))return;let o={model:n.paragraphLikeModel,view:n.view};i.register(n.model,n.modelSchema),i.register(o.model,{inheritAllFrom:`$block`}),a.for(`upcast`).elementToElement({view:n.view,model:(e,{writer:t})=>this._hasBlockContent(e)?t.createElement(n.model):t.createElement(o.model),converterPriority:ge.low+.5}),a.for(`downcast`).elementToElement({view:n.view,model:n.model}),this._addAttributeConversion(n),a.for(`downcast`).elementToElement({view:o.view,model:o.model}),this._addAttributeConversion(o),e.stop()})}_hasBlockContent(e){let t=this.editor.editing.view,n=t.domConverter.blockElements;for(let r of t.createRangeIn(e).getItems())if(r.is(`element`)&&n.includes(r.name))return!0;return!1}_addAttributeConversion(e){let t=this.editor,n=t.conversion,r=t.plugins.get(SL);t.model.schema.extend(e.model,{allowAttributes:uL(e.view)}),n.for(`upcast`).add(_L(e,r)),n.for(`downcast`).add(vL(e))}},NL=class extends F{static get requires(){return[bL,TE]}static get pluginName(){return`HeadingElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HeadingEditing`))return;let t=e.config.get(`heading.options`);this.registerHeadingElements(e,t)}registerHeadingElements(e,t){let n=e.plugins.get(bL),r=[];for(let e of t)`model`in e&&`view`in e&&(n.registerBlockElement({view:e.view,model:e.model}),r.push(e.model));n.extendBlockElement({model:`htmlHgroup`,modelSchema:{allowChildren:r}}),n.extendBlockElement({model:`htmlSummary`,modelSchema:{allowChildren:r}})}};function PL(e,t,n){let r=e.createRangeOn(t);for(let{item:e}of r.getWalker())if(e.is(`element`,n))return e}var FL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ImageElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ImageInlineEditing`)&&!e.plugins.has(`ImageBlockEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:figure`,()=>{n.for(`upcast`).add(RL(r))}),r.on(`register:img`,(i,a)=>{a.model!==`imageBlock`&&a.model!==`imageInline`||(t.isRegistered(`imageBlock`)&&t.extend(`imageBlock`,{allowAttributes:[`htmlImgAttributes`,`htmlFigureAttributes`,`htmlLinkAttributes`]}),t.isRegistered(`imageInline`)&&t.extend(`imageInline`,{allowAttributes:[`htmlA`,`htmlImgAttributes`]}),n.for(`upcast`).add(IL(r)),n.for(`downcast`).add(zL()),e.plugins.has(`LinkImage`)&&n.for(`upcast`).add(LL(r,e)),i.stop())})}};function IL(e){return t=>{t.on(`element:img`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem,a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlImgAttributes`,a,n.modelRange)},{priority:`low`})}}function LL(e,t){let n=t.plugins.get(`ImageUtils`);return t=>{t.on(`element:a`,(t,r,i)=>{let a=r.viewItem;if(!n.findViewImgElement(a))return;let o=r.modelCursor.parent;if(!o.is(`element`,`imageBlock`))return;let s=e.processViewAttributes(a,i);s&&i.writer.setAttribute(`htmlLinkAttributes`,s,o)},{priority:`low`})}}function RL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`image`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function zL(){return e=>{t(`htmlImgAttributes`),n(`img`,`htmlImgAttributes`),n(`figure`,`htmlFigureAttributes`),n(`a`,`htmlLinkAttributes`);function t(t){e.on(`attribute:${t}:imageInline`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item);rL(n.writer,r,i,a)},{priority:`low`})}function n(t,n){e.on(`attribute:${n}:imageBlock`,(e,n,r)=>{if(!r.consumable.test(n.item,e.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,t);s&&(rL(r.writer,i,a,s),r.consumable.consume(n.item,e.name))},{priority:`low`}),t===`a`&&e.on(`attribute:linkHref:imageBlock`,(e,t,n)=>{if(!n.consumable.consume(t.item,`attribute:htmlLinkAttributes:imageBlock`))return;let r=n.mapper.toViewElement(t.item),i=PL(n.writer,r,`a`);iL(n.writer,t.item.getAttribute(`htmlLinkAttributes`),i)},{priority:`low`})}}}var BL=class extends F{static get requires(){return[SL]}static get pluginName(){return`MediaEmbedElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`MediaEmbed`)||e.config.get(`mediaEmbed.previewsInData`))return;let t=e.model.schema,n=e.conversion,r=this.editor.plugins.get(SL),i=this.editor.plugins.get(bL),a=e.config.get(`mediaEmbed.elementName`);i.registerBlockElement({model:`media`,view:a}),r.on(`register:figure`,()=>{n.for(`upcast`).add(HL(r))}),r.on(`register:${a}`,(e,i)=>{i.model===`media`&&(t.extend(`media`,{allowAttributes:[uL(a),`htmlFigureAttributes`]}),n.for(`upcast`).add(VL(r,a)),n.for(`dataDowncast`).add(UL(a)),e.stop())})}};function VL(e,t){let n=(n,r,i)=>{let a=r.viewItem;o(a,uL(t));function o(t,n){let a=e.processViewAttributes(t,i);a&&i.writer.setAttribute(n,a,r.modelRange)}};return e=>{e.on(`element:${t}`,n,{priority:`low`})}}function HL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`media`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function UL(e){return t=>{n(e,uL(e)),n(`figure`,`htmlFigureAttributes`);function n(e,n){t.on(`attribute:${n}:media`,(t,n,r)=>{if(!r.consumable.consume(n.item,t.name))return;let{attributeOldValue:i,attributeNewValue:a}=n,o=r.mapper.toViewElement(n.item),s=PL(r.writer,o,e);rL(r.writer,i,a,s)})}}}var WL=class extends F{static get requires(){return[SL]}static get pluginName(){return`ScriptElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:script`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlScript`,n.modelSchema),i.extend(`htmlScript`,{allowAttributes:[`htmlScriptAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`script`}),a.for(`upcast`).elementToElement({view:`script`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlScript`,view:(e,{writer:t})=>pL(`script`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}};const GL=[`width`,`max-width`,`min-width`,`height`,`min-height`,`max-height`];var KL=class extends F{static get requires(){return[SL]}static get pluginName(){return`TableElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`TableEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`TableUtils`);r.on(`register:figure`,()=>{n.for(`upcast`).add(YL(r))}),r.on(`register:table`,(a,o)=>{o.model===`table`&&(t.extend(`table`,{allowAttributes:[`htmlTableAttributes`,`htmlFigureAttributes`,`htmlTheadAttributes`,`htmlTbodyAttributes`,`htmlTfootAttributes`]}),n.for(`upcast`).add(JL(r)),n.for(`downcast`).add(XL()),e.model.document.registerPostFixer(qL(e.model,i)),a.stop())})}};function qL(e,t){return n=>{let r=e.document.differ.getChanges(),i=!1;for(let e of r){if(e.type!=`attribute`||e.attributeKey!=`headingRows`&&e.attributeKey!=`footerRows`)continue;let r=e.range.start.nodeAfter,a=r.getAttribute(`htmlTheadAttributes`),o=r.getAttribute(`htmlTbodyAttributes`),s=r.getAttribute(`htmlTfootAttributes`);a&&e.attributeKey===`headingRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTheadAttributes`,r),i=!0),s&&e.attributeKey===`footerRows`&&!e.attributeNewValue&&(n.removeAttribute(`htmlTfootAttributes`,r),i=!0),o&&(r.getAttribute(`headingRows`)||0)+(r.getAttribute(`footerRows`)||0)==t.getRows(r)&&(n.removeAttribute(`htmlTbodyAttributes`,r),i=!0)}return i}}function JL(e){return t=>{t.on(`element:table`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem;r.consumable.consume(i,{classes:`table`}),a(i,`htmlTableAttributes`);for(let e of i.getChildren())e.is(`element`,`thead`)&&a(e,`htmlTheadAttributes`),e.is(`element`,`tfoot`)&&a(e,`htmlTfootAttributes`),e.is(`element`,`tbody`)&&a(e,`htmlTbodyAttributes`);function a(t,i){let a=e.processViewAttributes(t,r);a&&r.writer.setAttribute(i,a,n.modelRange)}},{priority:`low`})}}function YL(e){return t=>{t.on(`element:figure`,(t,n,r)=>{let i=n.viewItem;if(!n.modelRange||!i.hasClass(`table`))return;let a=e.processViewAttributes(i,r);a&&r.writer.setAttribute(`htmlFigureAttributes`,a,n.modelRange)},{priority:`low`})}}function XL(){return e=>{t(`table`,`htmlTableAttributes`),t(`figure`,`htmlFigureAttributes`),t(`thead`,`htmlTheadAttributes`),t(`tbody`,`htmlTbodyAttributes`),t(`tfoot`,`htmlTfootAttributes`);function t(t,n){e.on(`attribute:${n}:table`,(e,r,i)=>{if(!i.consumable.test(r.item,e.name))return;let a=i.mapper.toViewElement(r.item),o=PL(i.writer,a,t);if(o)if(i.consumable.consume(r.item,e.name),n===`htmlTableAttributes`&&a!==o){let e=ZL(r.attributeOldValue),t=ZL(r.attributeNewValue);rL(i.writer,e.tableAttributes,t.tableAttributes,o),rL(i.writer,e.figureAttributes,t.figureAttributes,a)}else rL(i.writer,r.attributeOldValue,r.attributeNewValue,o)})}}}function ZL(e){let t={},n={...e};if(!e||!(`styles`in e))return{figureAttributes:t,tableAttributes:n};n.styles={};for(let[r,i]of Object.entries(e.styles))GL.includes(r)?t.styles={...t.styles,[r]:i}:n.styles={...n.styles,[r]:i};return{figureAttributes:t,tableAttributes:n}}var QL=class extends F{static get requires(){return[SL]}static get pluginName(){return`StyleElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL);e.on(`register:style`,(t,n)=>{let r=this.editor,i=r.model.schema,a=r.conversion;i.register(`htmlStyle`,n.modelSchema),i.extend(`htmlStyle`,{allowAttributes:[`htmlStyleAttributes`,`htmlContent`],isContent:!0}),r.data.registerRawContentMatcher({name:`style`}),a.for(`upcast`).elementToElement({view:`style`,model:dL(n)}),a.for(`upcast`).add(_L(n,e)),a.for(`downcast`).elementToElement({model:`htmlStyle`,view:(e,{writer:t})=>pL(`style`,e,t)}),a.for(`downcast`).add(vL(n)),t.stop()})}},$L=class extends F{static get requires(){return[SL]}static get pluginName(){return`ListElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`ListEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL),i=e.plugins.get(`ListEditing`),a=e.plugins.get(`ListUtils`),o=[`ul`,`ol`,`li`];i.registerDowncastStrategy({scope:`item`,attributeName:`htmlLiAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlUlAttributes`,setAttributeOnDowncast:iL}),i.registerDowncastStrategy({scope:`list`,attributeName:`htmlOlAttributes`,setAttributeOnDowncast:iL}),r.on(`register`,(e,i)=>{if(!o.includes(i.view)||(e.stop(),t.checkAttribute(`$block`,`htmlLiAttributes`)))return;let a=o.map(e=>uL(e));t.extend(`$listItem`,{allowAttributes:a}),n.for(`upcast`).add(e=>{e.on(`element:ul`,eR(`htmlUlAttributes`,`list`,r),{priority:`low`}),e.on(`element:ol`,eR(`htmlOlAttributes`,`list`,r),{priority:`low`}),e.on(`element:li`,eR(`htmlLiAttributes`,`item`,r),{priority:`low`})})}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)if(i){if(i.getAttribute(`listType`)==r.getAttribute(`listType`)){let t=nR(i.getAttribute(`listType`)),a=i.getAttribute(t);!$t(r.getAttribute(t),a)&&n.model.schema.checkAttribute(r,t)&&(a===void 0?n.removeAttribute(t,r):n.setAttribute(t,a,r),e.return=!0)}if(i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)){let t=i.getAttribute(`htmlLiAttributes`);!$t(r.getAttribute(`htmlLiAttributes`),t)&&n.model.schema.checkAttribute(r,`htmlLiAttributes`)&&(t===void 0?n.removeAttribute(`htmlLiAttributes`,r):n.setAttribute(`htmlLiAttributes`,t,r),e.return=!0)}}}),i.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r}of t){let t=r.getAttribute(`listType`);!a.isNumberedListType(t)&&r.getAttribute(`htmlOlAttributes`)&&(n.removeAttribute(`htmlOlAttributes`,r),e.return=!0),a.isNumberedListType(t)&&r.getAttribute(`htmlUlAttributes`)&&(n.removeAttribute(`htmlUlAttributes`,r),e.return=!0)}})}afterInit(){let e=this.editor;if(!e.commands.get(`indentList`))return;let t=e.commands.get(`indentList`);this.listenTo(t,`afterExecute`,(t,n)=>{e.model.change(t=>{for(let r of n){let n=nR(r.getAttribute(`listType`));e.model.schema.checkAttribute(r,n)&&t.removeAttribute(n,r)}})})}};function eR(e,t,n){return(r,i,a)=>{let o=i.viewItem;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let s=n.processViewAttributes(o,a);if(t===`list`&&!s)return;let c=a.store;c.htmlSupportItemToClosestList??=new Map;let l=c.htmlSupportItemToClosestList,u=t===`item`?tR(o):null;for(let n of i.modelRange.getItems({shallow:!0}))if(n.hasAttribute(`listItemId`)){if(t===`item`){if(l.has(n))continue;l.set(n,u)}else if(l.get(n)!==o)continue;s&&a.writer.model.schema.checkAttribute(n,e)&&a.writer.setAttribute(e,s,n)}}}function tR(e){let t=e.parent;for(;t;){if(t.is(`element`,`ul`)||t.is(`element`,`ol`))return t;t=t.parent}return null}function nR(e){return e===`numbered`||e==`customNumbered`?`htmlOlAttributes`:`htmlUlAttributes`}var rR=class extends F{static get requires(){return[SL]}static get pluginName(){return`HorizontalLineElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!e.plugins.has(`HorizontalLineEditing`))return;let t=e.model.schema,n=e.conversion,r=e.plugins.get(SL);r.on(`register:hr`,(e,i)=>{i.model===`horizontalLine`&&(t.extend(`horizontalLine`,{allowAttributes:[`htmlHrAttributes`]}),n.for(`upcast`).add(_L(i,r)),n.for(`downcast`).add(iR()),e.stop())})}};function iR(){return e=>{e.on(`attribute:htmlHrAttributes:horizontalLine`,(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let{attributeOldValue:r,attributeNewValue:i}=t,a=n.mapper.toViewElement(t.item),o=PL(n.writer,a,`hr`);o&&(rL(n.writer,r,i,o),n.consumable.consume(t.item,e.name))},{priority:`low`})}}var aR=class extends F{static get requires(){return[SL]}static get pluginName(){return`IframeElementSupport`}static get isOfficialPlugin(){return!0}init(){this.editor.config.define(`htmlSupport.htmlIframeSandbox`,!0),this._setupSandboxConversion()}_setupSandboxConversion(){let{plugins:e,config:t,conversion:n}=this.editor,r=e.get(SL),i=t.get(`htmlSupport.htmlIframeSandbox`);if(i===!1)return;let a=Array.isArray(i)?Array.from(i):[];r.on(`register:iframe`,(e,t)=>{n.for(`editingDowncast`).add(e=>{e.on(`insert:${t.model}`,(e,t,n)=>{let{mapper:r,writer:i}=n,o=r.toViewElement(t.item);for(let{item:e}of i.createRangeOn(o))if(e.is(`element`,`iframe`))if(e.hasAttribute(`sandbox`)){let t=new Set,n=e.getAttribute(`sandbox`);for(let e of n.trim().split(/\\s+/))a.includes(e)&&t.add(e);i.setAttribute(`sandbox`,Array.from(t).join(` `),e)}else i.setAttribute(`sandbox`,a.join(` `),e)},{priority:`lowest`})})})}},oR=class extends F{static get requires(){return[SL,bL]}static get pluginName(){return`CustomElementSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.plugins.get(SL),t=this.editor.plugins.get(bL);e.on(`register:$customElement`,(n,r)=>{n.stop();let i=this.editor,a=i.model.schema,o=i.conversion,s=i.editing.view.domConverter.unsafeElements,c=i.data.htmlProcessor.domConverter.preElements;a.register(r.model,r.modelSchema),a.extend(r.model,{allowAttributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`],isContent:!0}),i.data.htmlProcessor.domConverter.registerRawContentMatcher({name:`template`}),o.for(`upcast`).elementToElement({view:/.*/,model:(n,a)=>{if(n.name==`$comment`||!sR(n.name)||t.getDefinitionsForView(n.name).size)return null;s.includes(n.name)||s.push(n.name),c.includes(n.name)||c.push(n.name);let o=a.writer.createElement(r.model,{htmlElementName:n.name}),l=e.processViewAttributes(n,a);l&&a.writer.setAttribute(`htmlCustomElementAttributes`,l,o);let u;if(n.is(`element`,`template`)&&n.getCustomProperty(`$rawContent`))u=n.getCustomProperty(`$rawContent`);else{let e=new Np(n.document).createDocumentFragment(n),t=i.data.htmlProcessor.domConverter.viewToDom(e),r=t.firstChild;for(;r.firstChild;)t.appendChild(r.firstChild);r.remove(),u=i.data.htmlProcessor.htmlWriter.getHtml(t)}a.writer.setAttribute(`htmlContent`,u,o);for(let{item:e}of i.editing.view.createRangeIn(n))a.consumable.consume(e,{name:!0});return o},converterPriority:`low`}),o.for(`editingDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=t.createRawElement(n);return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),r),r}}),o.for(`dataDowncast`).elementToElement({model:{name:r.model,attributes:[`htmlElementName`,`htmlCustomElementAttributes`,`htmlContent`]},view:(e,{writer:t})=>{let n=e.getAttribute(`htmlElementName`),r=e.getAttribute(`htmlContent`),i=t.createRawElement(n,null,(e,t)=>{t.setContentOf(e,r)});return e.hasAttribute(`htmlCustomElementAttributes`)&&iL(t,e.getAttribute(`htmlCustomElementAttributes`),i),i}})})}};function sR(e){try{document.createElement(e)}catch{return!1}return!0}var cR=class extends F{static get pluginName(){return`GeneralHtmlSupport`}static get isOfficialPlugin(){return!0}static get requires(){return[SL,kL,ML,NL,FL,BL,WL,KL,QL,$L,rR,aR,oR]}init(){let e=this.editor,t=e.plugins.get(SL);t.loadAllowedEmptyElementsConfig(e.config.get(`htmlSupport.allowEmpty`)||[]),t.loadAllowedConfig(e.config.get(`htmlSupport.allow`)||[]),t.loadDisallowedConfig(e.config.get(`htmlSupport.disallow`)||[])}afterInit(){this.editor.commands.get(`removeFormat`)?.registerCustomAttribute(e=>e.startsWith(`html`)&&e.endsWith(`Attributes`),cL)}getGhsAttributeNameForElement(e){let t=this.editor.plugins.get(`DataSchema`),n=Array.from(t.getDefinitionsForView(e,!1)),r=n.find(e=>e.isInline&&!n[0].isObject);return r?r.model:uL(e)}addModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.add(n)})})}removeModelHtmlClass(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`classes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlAttributes(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`attributes`,e=>{for(let n of A(t))e.delete(n)})})}setModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let[n,r]of Object.entries(t))e.set(n,r)})})}removeModelHtmlStyles(e,t,n){let r=this.editor.model,i=this.getGhsAttributeNameForElement(e);r.change(e=>{for(let a of lR(r,n,i))sL(e,a,i,`styles`,e=>{for(let n of A(t))e.delete(n)})})}};function*lR(e,t,n){if(t)if(!(Symbol.iterator in t)&&t.is(`documentSelection`)&&t.isCollapsed)e.schema.checkAttributeInSelection(t,n)&&(yield t);else for(let r of uR(e,t,n))yield*r.getItems({shallow:!0})}function uR(e,t,n){return!(Symbol.iterator in t)&&(t.is(`node`)||t.is(`$text`)||t.is(`$textProxy`))?e.schema.checkAttribute(t,n)?[e.createRangeOn(t)]:[]:e.schema.getValidRanges(e.createSelection(t).getRanges(),n)}var dR=class extends F{static get pluginName(){return`HtmlComment`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=new Map;e.data.processor.skipComments=!1,e.model.schema.extend(`$root`,{allowAttributes:`$comment`}),e.model.schema.addAttributeCheck((t,n)=>{if(n.startsWith(`$comment:`)&&e.model.schema.checkAttribute(t,`$comment`))return!0}),e.conversion.for(`upcast`).elementToMarker({view:`$comment`,model:e=>{let n=`$comment:${he()}`,r=e.getCustomProperty(`$rawContent`);return t.set(n,r),n}}),e.conversion.for(`dataDowncast`).markerToElement({model:`$comment`,view:(e,{writer:t})=>{let n;for(let t of this.editor.model.document.getRootNames())if(n=this.editor.model.document.getRoot(t),n.hasAttribute(e.markerName))break;let r=e.markerName,i=n.getAttribute(r),a=t.createUIElement(`$comment`);return t.setCustomProperty(`$rawContent`,i,a),a}}),e.model.document.registerPostFixer(n=>{let r=!1,i=e.model.document.differ.getChangedMarkers().filter(e=>e.name.startsWith(`$comment:`));for(let e of i){let{oldRange:i,newRange:a}=e.data;if(!(i&&a&&i.root==a.root)){if(i){let t=i.root;t.hasAttribute(e.name)&&(n.removeAttribute(e.name,t),r=!0)}if(a){let i=a.root;i.rootName==`$graveyard`?(n.removeMarker(e.name),r=!0):i.hasAttribute(e.name)||(n.setAttribute(e.name,t.get(e.name)||``,i),r=!0)}}}return r}),e.data.on(`set`,()=>{for(let t of e.model.markers.getMarkersGroup(`$comment`))this.removeHtmlComment(t.name)},{priority:`high`}),e.model.on(`deleteContent`,(t,[n])=>{for(let t of n.getRanges()){let n=e.model.schema.getLimitElement(t),r=e.model.createPositionAt(n,0),i=e.model.createPositionAt(n,`end`),a;a=r.isTouching(t.start)&&i.isTouching(t.end)?this.getHtmlCommentsInRange(e.model.createRange(r,i)):this.getHtmlCommentsInRange(t,{skipBoundaries:!0});for(let e of a)this.removeHtmlComment(e)}},{priority:`high`})}createHtmlComment(e,t){let n=he(),r=this.editor.model,i=r.document.getRoot(e.root.rootName),a=`$comment:${n}`;return r.change(n=>{let r=n.createRange(e);return n.addMarker(a,{usingOperation:!0,affectsData:!0,range:r}),n.setAttribute(a,t,i),a})}removeHtmlComment(e){let t=this.editor,n=t.model.markers.get(e);return n?(t.model.change(e=>{e.removeMarker(n)}),!0):!1}getHtmlCommentData(e){let t=this.editor.model.markers.get(e);if(!t)return null;let n=``;for(let t of this.editor.model.document.getRoots())if(t.hasAttribute(e)){n=t.getAttribute(e);break}return{content:n,position:t.getStart()}}getHtmlCommentsInRange(e,{skipBoundaries:t=!1}={}){let n=!t;return Array.from(this.editor.model.markers.getMarkersGroup(`$comment`)).filter(t=>r(t,e)).map(e=>e.name);function r(e,t){let r=e.getRange().start;return(r.isAfter(t.start)||n&&r.isEqual(t.start))&&(r.isBefore(t.end)||n&&r.isEqual(t.end))}}},fR=class extends Td{toView(e){if(!/<(?:html|body|head|meta)(?:\\s[^>]*)?>/i.test(e.trim().slice(0,1e4)))return super.toView(e);let t=``,n=``;e=e.trim().replace(/<\\?xml\\s[^?]*\\?>/i,e=>(n=e,``)),e=e.trim().replace(/^]*?>/i,e=>(t=e,``));let r=this._toDom(e),i=this.domConverter.domToView(r,{skipComments:this.skipComments}),a=new Np(i.document);a.setCustomProperty(`$fullPageDocument`,r.ownerDocument.documentElement.outerHTML,i);let o=Array.from(r.ownerDocument.querySelectorAll(`head style`));return a.setCustomProperty(`$fullPageHeadStyles`,o,i),t&&a.setCustomProperty(`$fullPageDocType`,t,i),n&&a.setCustomProperty(`$fullPageXmlDeclaration`,n,i),i}toData(e){let t=super.toData(e),n=e.getCustomProperty(`$fullPageDocument`),r=e.getCustomProperty(`$fullPageDocType`),i=e.getCustomProperty(`$fullPageXmlDeclaration`);return n&&(t=n.replace(/<\\/body\\s*>/,t+`$&`),r&&(t=r+`\n`+t),i&&(t=i+`\n`+t)),t}},pR=class extends F{static get pluginName(){return`FullPage`}static get licenseFeatureCode(){return`FPH`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`htmlSupport.fullPage`,{allowRenderStylesFromHead:!1,sanitizeCss:e=>(T(`css-full-page-provide-sanitize-function`),{css:e,hasChanged:!1})}),e.data.processor=new fR(e.data.viewDocument)}init(){let e=this.editor,t=[`$fullPageDocument`,`$fullPageDocType`,`$fullPageXmlDeclaration`,`$fullPageHeadStyles`];e.model.schema.extend(`$root`,{allowAttributes:t}),e.data.on(`toModel`,(n,[r])=>{let i=e.model.document.getRoot();e.model.change(e=>{for(let n of t){let t=r.getCustomProperty(n);t&&e.setAttribute(n,t,i)}}),mR(e)&&this._renderStylesFromHead(i)},{priority:`low`}),e.data.on(`toView`,(e,[n])=>{if(!n.is(`rootElement`))return;let r=n,i=e.return;if(!r.hasAttribute(`$fullPageDocument`))return;let a=new Np(i.document);for(let e of t){let t=r.getAttribute(e);t&&a.setCustomProperty(e,t,i)}},{priority:`low`}),e.data.on(`set`,()=>{let n=e.model.document.getRoot();e.model.change(e=>{for(let r of t)n.hasAttribute(r)&&e.removeAttribute(r,n)})},{priority:`high`}),e.data.on(`get`,(e,t)=>{t[0]||={},t[0].trim=!1},{priority:`high`})}destroy(){super.destroy(),mR(this.editor)&&this._removeStyleElementsFromDom()}_removeStyleElementsFromDom(){let e=Array.from(u.document.querySelectorAll(`[data-full-page-style-id=\"${this.editor.id}\"]`));for(let t of e)t.remove()}_renderStyleElementsInDom(e){let t=this.editor,n=e.getAttribute(`$fullPageHeadStyles`);if(!n)return;let r=t.config.get(`htmlSupport.fullPage.sanitizeCss`);for(let e of n){e.setAttribute(`data-full-page-style-id`,t.id);let n=r(e.innerText);n.hasChanged&&(e.innerText=n.css),u.document.head.append(e)}}_renderStylesFromHead(e){this._removeStyleElementsFromDom(),this._renderStyleElementsInDom(e)}};function mR(e){return e.config.get(`htmlSupport.fullPage.allowRenderStylesFromHead`)}const hR=`htmlEmptyBlock`;var gR=class extends F{static get pluginName(){return`EmptyBlock`}static get isOfficialPlugin(){return!0}afterInit(){let{model:e,conversion:t,plugins:n,config:r}=this.editor,i=e.schema,a=r.get(`htmlSupport.preserveEmptyBlocksInEditingView`);i.extend(`$block`,{allowAttributes:[hR]}),i.extend(`$container`,{allowAttributes:[hR]}),i.isRegistered(`tableCell`)&&i.extend(`tableCell`,{allowAttributes:[hR]}),a?t.for(`downcast`).add(_R()):t.for(`dataDowncast`).add(_R()),t.for(`upcast`).add(vR(i)),n.has(`ClipboardPipeline`)&&this._registerClipboardPastingHandler()}_registerClipboardPastingHandler(){let e=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`contentInsertion`,(e,t)=>{t.sourceEditorId!==this.editor.id&&this.editor.model.change(e=>{for(let{item:n}of e.createRangeIn(t.content))n.is(`element`)&&n.hasAttribute(hR)&&e.removeAttribute(hR,n)})})}};function _R(){return e=>{e.on(`attribute:${hR}`,(e,t,n)=>{let{mapper:r,consumable:i}=n,{item:a}=t;if(!i.consume(a,e.name))return;let o=r.toViewElement(a);o&&t.attributeNewValue&&(o.getFillerOffset=()=>null)})}}function vR(e){return t=>{t.on(`element`,(t,n,r)=>{let{viewItem:i,modelRange:a}=n;if(!i.is(`element`)||!i.isEmpty||i.getCustomProperty(`$hasBlockFiller`))return;let o=a&&a.start.nodeAfter;if(!o||!e.checkAttribute(o,hR)||(r.writer.setAttribute(hR,!0,o),o.childCount!=1))return;let s=o.getChild(0);s.is(`element`,`paragraph`)&&e.checkAttribute(s,hR)&&r.writer.setAttribute(hR,!0,s)},{priority:`lowest`})}}var yR=class extends F{static get pluginName(){return`IndentEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.commands.add(`indent`,new co(e)),e.commands.add(`outdent`,new co(e))}},bR=class extends F{static get pluginName(){return`IndentUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale,n=e.t,r=t.uiLanguageDirection==`ltr`?G_:jv,i=t.uiLanguageDirection==`ltr`?jv:G_;this._defineButton(`indent`,n(`Increase indent`),r),this._defineButton(`outdent`,n(`Decrease indent`),i)}_defineButton(e,t,n){let r=this.editor;r.ui.componentFactory.add(e,()=>{let r=this._createButton(H,e,t,n);return r.set({tooltip:!0}),r}),r.ui.componentFactory.add(`menuBar:`+e,()=>this._createButton(U,e,t,n))}_createButton(e,t,n,r){let i=this.editor,a=i.commands.get(t),o=new e(i.locale);return o.set({label:n,icon:r}),o.bind(`isEnabled`).to(a,`isEnabled`),this.listenTo(o,`execute`,()=>{i.execute(t),i.editing.view.focus()}),o}},xR=class extends F{static get pluginName(){return`Indent`}static get isOfficialPlugin(){return!0}static get requires(){return[yR,bR]}},SR=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this.editor.model,t=j(e.document.selection.getSelectedBlocks());if(!t||!this._isIndentationChangeAllowed(t)){this.isEnabled=!1;return}this.isEnabled=this._indentBehavior.checkEnabled(t.getAttribute(`blockIndent`))}execute(){let e=this.editor.model,t=this._getBlocksToChange();e.change(e=>{for(let n of t){let t=n.getAttribute(`blockIndent`),r=this._indentBehavior.getNextIndent(t);r?e.setAttribute(`blockIndent`,r,n):e.removeAttribute(`blockIndent`,n)}})}_getBlocksToChange(){let e=this.editor.model.document.selection;return Array.from(e.getSelectedBlocks()).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){let t=this.editor;return t.model.schema.checkAttribute(e,`blockIndent`)?!t.plugins.has(`ListUtils`)||!this._indentBehavior.isForward?!0:!t.plugins.get(`ListUtils`).isListItemBlock(e):!1}},CR=class{isForward;offset;unit;constructor(e){this.isForward=e.direction===`forward`,this.offset=e.offset,this.unit=e.unit}checkEnabled(e){let t=parseFloat(e||`0`);return this.isForward||t>0}getNextIndent(e){let t=parseFloat(e||`0`),n=!e||e.endsWith(this.unit);if(t<0)return;if(!n)return this.isForward?this.offset+this.unit:void 0;let r=t+(this.isForward?this.offset:-this.offset);return r>0?r+this.unit:void 0}},wR=class{isForward;classes;constructor(e){this.isForward=e.direction===`forward`,this.classes=e.classes}checkEnabled(e){let t=this.classes.indexOf(e);return this.isForward?t=0}getNextIndent(e){let t=this.classes.indexOf(e)+(this.isForward?1:-1),n=Math.min(t,this.classes.length-1);return this.classes[n]}},TR=class{_startElement;_referenceIndent;_isForward;_includeSelf;_sameAttributes;_sameIndent;_lowerIndent;_higherIndent;constructor(e,t){this._startElement=e,this._referenceIndent=e.getAttribute(`listIndent`),this._isForward=t.direction==`forward`,this._includeSelf=!!t.includeSelf,this._sameAttributes=A(t.sameAttributes||[]),this._sameIndent=!!t.sameIndent,this._lowerIndent=!!t.lowerIndent,this._higherIndent=!!t.higherIndent}static first(e,t){return j(new this(e,t)[Symbol.iterator]())}*[Symbol.iterator](){let e=[];for(let{node:t}of new ER(this._getStartNode(),this._isForward?`forward`:`backward`)){let n=t.getAttribute(`listIndent`);if(nthis._referenceIndent){if(!this._higherIndent)continue;if(!this._isForward){e.push(t);continue}}else{if(!this._sameIndent){if(this._higherIndent){e.length&&=(yield*e,0);break}continue}if(this._sameAttributes.some(e=>t.getAttribute(e)!==this._startElement.getAttribute(e)))break}e.length&&=(yield*e,0),yield t}}_getStartNode(){return this._includeSelf?this._startElement:this._isForward?this._startElement.nextSibling:this._startElement.previousSibling}},ER=class{_node;_isForward;_previousNodesByIndent=[];_previous=null;_previousNodeIndent=null;constructor(e,t=`forward`){this._node=e,this._isForward=t===`forward`}[Symbol.iterator](){return this}next(){if(!G(this._node))return{done:!0,value:void 0};let e=this._node.getAttribute(`listIndent`),t=null;if(this._previous){let n=this._previousNodeIndent;e>n?this._previousNodesByIndent[n]=this._previous:ee.getAttribute(`listIndent`))),o=new Map;for(let e of r)o.set(e,TR.first(e,{lowerIndent:!0}));for(let e of r){if(i.has(e))continue;i.add(e);let r=e.getAttribute(`listIndent`)-1;if(r<0){VR(e,t,n);continue}if(e.getAttribute(`listIndent`)==a&&o.get(e)){let n=YR(e,o.get(e),t);for(let e of n)i.add(e);if(n.length)continue}t.setAttribute(`listIndent`,r,e)}return WR(i)}function VR(e,t,n){e=A(e);for(let n of e)n.is(`element`,`listItem`)&&t.rename(n,`paragraph`);for(let r of e)for(let e of r.getAttributeKeys())n.includes(e)&&t.removeAttribute(e,r);return e}function HR(e){if(!e.length)return!1;let t=e[0].getAttribute(`listItemId`);return t?!e.some(e=>e.getAttribute(`listItemId`)!=t):!1}function UR(e,t){let n=[],r=1/0;for(let{node:i}of new ER(e.nextSibling)){let e=i.getAttribute(`listIndent`);if(e==0)break;ee.root.rootName!==`$graveyard`).sort((e,t)=>e.index-t.index)}function GR(e){let t=e.document.selection.getSelectedElement();return t&&e.schema.isObject(t)&&e.schema.isBlock(t)?t:null}function KR(e,t){return t.checkChild(e.parent,`listItem`)&&t.checkChild(e,`$text`)&&!t.isObject(e)}function qR(e){return e==`numbered`||e==`customNumbered`}function JR(e){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.getAttribute(`listItemId`),i=e.previousSibling,a=!1;for(;G(i);){let e=i.getAttribute(`listIndent`);if(ee.index?RR(e,t,n):[]}var XR=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor,t=e.model,n=ZR(t.document.selection),r=e.plugins.get(`ListEditing`).getListAttributeNames();t.change(e=>{let t=[];HR(n)&&!NR(n[0])?(this._direction==`forward`&&t.push(...zR(n,e,{attributeNames:r})),t.push(...LR(n[0],e))):this._direction==`forward`?t.push(...zR(n,e,{expand:!0,attributeNames:r})):t.push(...BR(n,e,{attributeNames:r}));for(let n of t){if(!n.hasAttribute(`listType`))continue;let t=TR.first(n,{sameIndent:!0});t&&e.setAttribute(`listType`,t.getAttribute(`listType`),n)}this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=ZR(this.editor.model.document.selection),t=e[0];if(!t)return!1;if(this._direction==`backward`||HR(e)&&!NR(e[0])||this.editor.config.get(`list.enableSkipLevelLists`))return!0;e=FR(e),t=e[0];let n=TR.first(t,{sameIndent:!0});return n?n.getAttribute(`listType`)==t.getAttribute(`listType`):!1}};function ZR(e){let t=Array.from(e.getSelectedBlocks()),n=t.findIndex(e=>!G(e));return n!=-1&&(t.length=n),t}var QR=class extends I{type;_listWalkerOptions;constructor(e,t,n={}){super(e),this.type=t,this._listWalkerOptions=n.multiLevel?{higherIndent:!0,lowerIndent:!0,sameAttributes:[]}:void 0}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=GR(t),i=Array.from(n.selection.getSelectedBlocks()).filter(e=>t.schema.checkAttribute(e,`listType`)||KR(e,t.schema)),a=e.forceValue===void 0?this.value:!e.forceValue;t.change(o=>{if(a){let e=i[i.length-1],t=this.editor.plugins.get(`ListEditing`).getListAttributeNames(),n=AR(e,{direction:`forward`}),r=[];n.length>1&&r.push(...LR(n[1],o)),r.push(...VR(i,o,t)),r.push(...UR(e,o)),this._fireAfterExecute(r)}else if((r||n.selection.isCollapsed)&&G(i[0])){let t=MR(r||i[0],this._listWalkerOptions);for(let n of t)o.setAttributes({...e.additionalAttributes,listType:this.type},n);this._fireAfterExecute(t)}else{let n=[];for(let r of i)if(!r.hasAttribute(`listType`))!r.is(`element`,`listItem`)&&KR(r,t.schema)&&o.rename(r,`listItem`),o.setAttributes({...e.additionalAttributes,listIndent:0,listItemId:OR.next(),listType:this.type},r),n.push(r);else for(let t of FR(r,{withNested:!1}))t.getAttribute(`listType`)!=this.type&&(o.setAttributes({...e.additionalAttributes,listType:this.type},t),n.push(t));this._fireAfterExecute(n)}})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_getValue(){let e=this.editor.model.document.selection,t=Array.from(e.getSelectedBlocks());if(!t.length)return!1;for(let e of t)if(e.getAttribute(`listType`)!=this.type)return!1;return!0}_checkEnabled(){let e=this.editor.model,t=e.schema,n=e.document.selection,r=Array.from(n.getSelectedBlocks());if(!r.length)return!1;if(this.value)return!0;for(let e of r)if(t.checkAttribute(e,`listType`)||KR(e,t))return!0;return!1}},$R=class extends I{_direction;constructor(e,t){super(e),this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute({shouldMergeOnBlocksContentLevel:e=!1}={}){let t=this.editor,n=t.model,r=n.document.selection,i=[],a=t.plugins.get(`ListEditing`).getListAttributeNames();n.change(t=>{let{firstElement:o,lastElement:s}=this._getMergeSubjectElements(r,e);if(!o||!s)return;let c=o.getAttribute(`listIndent`)||0,l=s.getAttribute(`listIndent`),u=s.getAttribute(`listItemId`);if(c!=l){let e=jR(s);i.push(...zR([s,...e],t,{indentBy:c-l,expand:c{let t=LR(this._getStartBlock(),e);this._fireAfterExecute(t)})}_fireAfterExecute(e){this.fire(`afterExecute`,WR(new Set(e)))}_checkEnabled(){let e=this.editor.model.document.selection,t=this._getStartBlock();return e.isCollapsed&&G(t)&&!NR(t)}_getStartBlock(){let e=this.editor.model.document.selection.getFirstPosition().parent;return this._direction==`before`?e:e.nextSibling}},tz=class extends F{static get pluginName(){return`ListItemBoldIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`bold`,`listItemBold`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemBold`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-bold`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-bold`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`BoldEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemBold`}),t.schema.setAttributeProperties(`listItemBold`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemBold`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemBold`,view:{name:`li`,classes:`ck-list-marker-bold`}}))}},nz=class extends F{static get pluginName(){return`ListItemItalicIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`italic`,`listItemItalic`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemItalic`,setAttributeOnDowncast(e,t,n,r){t&&(e.addClass(`ck-list-marker-italic`,n),p.isSafari&&!(r&&r.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-italic`,`0`,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`ItalicEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemItalic`}),t.schema.setAttributeProperties(`listItemItalic`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemItalic`),e.conversion.for(`upcast`).attributeToAttribute({model:`listItemItalic`,view:{name:`li`,classes:`ck-list-marker-italic`}}))}},rz=class extends F{static get pluginName(){return`ListItemFontSizeIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;let r=ZF(e.config.get(`fontSize.options`));t.registerFormatAttribute(`fontSize`,`listItemFontSize`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontSize`,setAttributeOnDowncast(e,t,n,i){if(t){let a=r.find(e=>e.model==t);a&&a.view&&typeof a.view!=`string`?a.view.styles?(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,a.view.styles[`font-size`],n)):a.view.classes&&(e.addClass(`ck-list-marker-font-size-${t}`,n),p.isSafari&&!(i&&i.dataPipeline)&&e.setStyle(`--ck-content-list-marker-dummy-font-size`,`0`,n)):(e.addClass(`ck-list-marker-font-size`,n),e.setStyle(`--ck-content-list-marker-font-size`,t,n))}}})}afterInit(){let e=this.editor,t=e.model;if(!e.plugins.has(`FontSizeEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`))return;t.schema.extend(`$listItem`,{allowAttributes:`listItemFontSize`}),t.schema.setAttributeProperties(`listItemFontSize`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontSize`),e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:e=>e.getStyle(`--ck-content-list-marker-font-size`)},view:{name:`li`,classes:`ck-list-marker-font-size`,styles:{\"--ck-content-list-marker-font-size\":/.*/}}});let n=ZF(e.config.get(`fontSize.options`));for(let t of n)t.model&&t.view&&e.conversion.for(`upcast`).elementToAttribute({model:{key:`listItemFontSize`,value:t.model},view:{name:`li`,classes:`ck-list-marker-font-size-${t.model}`}})}},iz=class extends F{static get pluginName(){return`ListItemFontColorIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontColor`,`listItemFontColor`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontColor`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-color`,n),e.setStyle(`--ck-content-list-marker-color`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontColorEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontColor`}),t.schema.setAttributeProperties(`listItemFontColor`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontColor`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontColor`,value:e=>e.getStyle(`--ck-content-list-marker-color`)},view:{name:`li`,classes:`ck-list-marker-color`,styles:{\"--ck-content-list-marker-color\":/.*/}}}))}},az=class extends F{static get pluginName(){return`ListItemFontFamilyIntegration`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.plugins.get(`ListFormatting`),n=e.plugins.get(Bz);!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.registerFormatAttribute(`fontFamily`,`listItemFontFamily`),n.registerDowncastStrategy({scope:`item`,attributeName:`listItemFontFamily`,setAttributeOnDowncast(e,t,n){t&&(e.addClass(`ck-list-marker-font-family`,n),e.setStyle(`--ck-content-list-marker-font-family`,t,n))}}))}afterInit(){let e=this.editor,t=e.model;!e.plugins.has(`FontFamilyEditing`)||!this.editor.config.get(`list.enableListItemMarkerFormatting`)||(t.schema.extend(`$listItem`,{allowAttributes:`listItemFontFamily`}),t.schema.setAttributeProperties(`listItemFontFamily`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`listItemFontFamily`),e.conversion.for(`upcast`).attributeToAttribute({model:{key:`listItemFontFamily`,value:e=>e.getStyle(`--ck-content-list-marker-font-family`)},view:{name:`li`,classes:`ck-list-marker-font-family`,styles:{\"--ck-content-list-marker-font-family\":/.*/}}}))}},oz=class extends F{_loadedFormatting={};static get pluginName(){return`ListFormatting`}static get isOfficialPlugin(){return!0}static get requires(){return[tz,nz,rz,iz,az]}constructor(e){super(e),e.config.define(`list.enableListItemMarkerFormatting`,!0)}afterInit(){this.editor.config.get(`list.enableListItemMarkerFormatting`)&&this._registerPostfixerForListItemFormatting()}_registerPostfixerForListItemFormatting(){let e=this.editor.model;e.document.registerPostFixer(t=>{let n=e.document.differ.getChanges(),r=new Set,i=!1;for(let e of n)if(e.type===`attribute`)(e.attributeKey==`listItemId`||e.attributeKey==`listType`||this._isInlineOrSelectionFormatting(e.attributeKey)||Object.values(this._loadedFormatting).includes(e.attributeKey))&&(G(e.range.start.nodeAfter)?r.add(e.range.start.nodeAfter):G(e.range.start.parent)&&r.add(e.range.start.parent));else if(G(e.position.nodeAfter)&&r.add(e.position.nodeAfter),G(e.position.nodeBefore)&&r.add(e.position.nodeBefore),G(e.position.parent)&&r.add(e.position.parent),e.type==`insert`&&e.name!=`$text`){let n=t.createRangeIn(e.position.nodeAfter);for(let e of n.getItems())G(e)&&r.add(e)}for(let n of r){let r=sz(e,n,Object.keys(this._loadedFormatting));for(let[e,a]of Object.entries(r)){let r=this._loadedFormatting[e];(a&&lz(t,n,r,a)||!a&&uz(t,n,r))&&(i=!0)}}return i})}registerFormatAttribute(e,t){this._loadedFormatting[e]=t}_isInlineOrSelectionFormatting(e){return e.replace(/^selection:/,``)in this._loadedFormatting}};function sz(e,t,n){return NR(t)?cz(e,t,n):cz(e,kR(t)[0],n)}function cz(e,t,n){if(!dz(t)||e.schema.isLimit(t))return Object.fromEntries(n.map(e=>[e]));if(t.isEmpty)return Object.fromEntries(n.map(e=>[e,t.getAttribute(`selection:${e}`)]));let r=new Set(n),i={},a=e.createRangeIn(t).getWalker({ignoreElementEnd:!0});for(let{item:t}of a){for(let n of r)if(e.schema.checkAttribute(t,n)){let e=t.getAttribute(n);e===void 0?(r.delete(n),i[n]=void 0):i[n]===void 0?i[n]=e:i[n]!==e&&(r.delete(n),i[n]=void 0)}else n in i||(i[n]=void 0);if(!r.size)break;e.schema.isLimit(t)&&a.jumpTo(e.createPositionAfter(t))}return i}function lz(e,t,n,r){let i=kR(t),a=!1;for(let t of i)(!t.hasAttribute(n)||t.getAttribute(n)!==r)&&(e.setAttribute(n,r,t),a=!0);return a}function uz(e,t,n){let r=kR(t),i=!1;for(let t of r)t.hasAttribute(n)&&(e.removeAttribute(n,t),i=!0);return i}function dz(e){return[`numbered`,`bulleted`,`customNumbered`,`customBulleted`].includes(e.getAttribute(`listType`))}var fz=class extends F{static get pluginName(){return`ListUtils`}static get isOfficialPlugin(){return!0}expandListBlocksToCompleteList(e){return IR(e)}isFirstBlockOfListItem(e){return NR(e)}isListItemBlock(e){return G(e)}expandListBlocksToCompleteItems(e,t={}){return FR(e,t)}isNumberedListType(e){return qR(e)}isFirstListItemInList(e){return JR(e)}};function pz(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function mz(e){return e.is(`element`,`li`)}function hz(e){let t=0,n=e.parent;for(;n;){if(mz(n))t++;else{let e=n.previousSibling;e&&mz(e)&&t++}n=n.parent}return t}function gz(e,t,n,r=yz(n,t)){return e.createAttributeElement(vz(n),null,{priority:2*t/100-100,id:r})}function _z(e,t,n){return e.createAttributeElement(`li`,null,{priority:(2*t+1)/100-100,id:n})}function vz(e){return e==`numbered`||e==`customNumbered`?`ol`:`ul`}function yz(e,t){return`list-${e}-${t}`}function bz(e,t,n){let r=e.nodeBefore;if(G(r)){let e=r;for(let{node:i}of new ER(e,`backward`))if(e=i,n.has(e)||(n.add(e),t.has(r)))return;t.add(e)}else{let n=e.nodeAfter;G(n)&&t.add(n)}}function xz(e,t){let n=0,r=-1,i=null,a=!1;for(let{node:o}of e){let e=o.getAttribute(`listIndent`);if(e>n){let s;i===null?(i=e-n,s=n):(i>e&&(i=e),s=e-i),s>r+1&&(s=r+1),t.setAttribute(`listIndent`,s,o),a=!0,r=s}else i=null,n=e+1,r=e}return a}function Sz(e,t,n){let r=new Set,i=!1;for(let{node:a}of e){if(r.has(a))continue;let e=a.getAttribute(`listType`),o=a.getAttribute(`listItemId`);if(t.has(o)&&(o=OR.next()),t.add(o),a.is(`element`,`listItem`)){a.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,a),i=!0);continue}for(let t of AR(a,{direction:`forward`}))r.add(t),t.getAttribute(`listType`)!=e&&(o=OR.next(),e=t.getAttribute(`listType`)),t.getAttribute(`listItemId`)!=o&&(n.setAttribute(`listItemId`,o,t),i=!0)}return i}function Cz(){return(e,t,n)=>{let r=t.viewItem;if(r.getStyle(`list-style-type`)!==`none`||!wz(r)||!n.consumable.consume(r,{name:!0}))return;let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a}}function wz(e){let t=!1;for(let n of e.getChildren()){if(n.is(`element`,`ul`)||n.is(`element`,`ol`)){t=!0;continue}return!1}return t}function Tz(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>i.checkAttribute(e,`listItemId`));if(!a.length||a.every(e=>e.hasAttribute(`listItemId`)))return;let o=t.viewItem.getAttribute(`data-list-item-id`)||OR.next();n.consumable.consume(t.viewItem,{attributes:`data-list-item-id`});let s=hz(t.viewItem),c=t.viewItem.parent&&t.viewItem.parent.is(`element`,`ol`)?`numbered`:`bulleted`,l=a[0].getAttribute(`listType`);l&&(c=l);let u={listItemId:o,listIndent:s,listType:c};for(let e of a)e.hasAttribute(`listItemId`)||r.setAttributes(u,e);a.length>1&&a[1].getAttribute(`listItemId`)!=u.listItemId&&n.keepEmptyElement(a[0])}}function Ez(e,t,n,r){return()=>{let r=e.document.differ.getChanges(),a=[],o=new Set,c=new Set,l=new Set;for(let e of r)if(e.type==`insert`&&e.name!=`$text`)bz(e.position,o,l),e.attributes.has(`listItemId`)?c.add(e.position.nodeAfter):bz(e.position.getShiftedBy(e.length),o,l);else if(e.type==`remove`&&e.attributes.has(`listItemId`))bz(e.position,o,l);else if(e.type==`attribute`){let t=e.range.start.nodeAfter;n.includes(e.attributeKey)?(bz(e.range.start,o,l),e.attributeNewValue===null?(bz(e.range.start.getShiftedBy(1),o,l),s(t)&&a.push(t)):c.add(t)):G(t)&&s(t)&&a.push(t)}for(let e of o.values())a.push(...i(e,c));for(let e of new Set(a))t.reconvertItem(e)};function i(e,t){let n=[],r=new Set,i=[];for(let{node:c,previous:u}of new ER(e)){if(r.has(c))continue;let e=c.getAttribute(`listIndent`);u&&en.includes(e)))}function o(e,t,n){for(let r=t-1;r>=0&&!n[r];r--){let t=Iz(e,r),i=null;if(!t){for(let e=r-1;e>=0;e--)if(n[e]){i=n[e].modelElement;break}}let o=t||i||e;n[r]={modelAttributes:{...a(o),listItemId:`list-item-skip-${r}`,listIndent:r},modelElement:o}}}function s(e,i){let a=t.mapper.toViewElement(e);if(!a)return!1;if(c(a)||r.fire(`checkElement`,{modelElement:e,viewElement:a}))return!0;if(!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`))return!1;let o=Rz(e,n,i);return o&&a.is(`element`,`p`)?!0:!!(!o&&a.is(`element`,`span`))}function c(e){for(e=e.parent;e.is(`attributeElement`)&&[`ol`,`ul`,`li`].includes(e.name);)e=e.parent;return!!(e.getCustomProperty(`$structureSlotParent`)&&!t.mapper.toModelElement(e))}function l(e,n,i){if(i.has(e))return!1;let a=t.mapper.toViewElement(e),o=n.length-1;for(let e=a.parent;!e.is(`editableElement`);e=e.parent){let t=mz(e),i=pz(e);if(!(!i&&!t)){if(n[o]){let i=`checkAttributes:${t?`item`:`list`}`;if(r.fire(i,{viewElement:e,modelAttributes:n[o].modelAttributes,modelReferenceElement:n[o].modelElement}))break}if(i&&(o--,o<0))return!1}}return!0}}function Dz(e,t,n,{dataPipeline:r,enableSkipLevelLists:i}){let a=Lz(e,t);return(o,s,c)=>{let{writer:l,mapper:u,consumable:d}=c,f=s.item;if(!e.includes(s.attributeKey)||!a(f,d))return;let p={...c.options,dataPipeline:r,enableSkipLevelLists:i},m=Az(f,u,n,l);Mz(m,l,u),Pz(m,l),Fz(f,Nz(f,m,t,l,p),t,l,p)}}function Oz(e){return(t,n,r)=>{let{writer:i,mapper:a}=r,o=t.name.split(`:`)[1];if(!e.checkAttribute(o,`listItemId`))return;let s=a.toViewPosition(n.position),c=n.position.getShiftedBy(n.length),l=a.toViewPosition(c,{isPhantom:!0}),u=i.createRange(s,l).getTrimmed().end.nodeBefore;u&&Mz(u,i,a)}}function kz(e,{dataPipeline:t}={}){return(n,{writer:r})=>{if(!Rz(n,e))return null;if(!t)return r.createContainerElement(`span`,{class:`ck-list-bogus-paragraph`});let i=r.createContainerElement(`p`);return r.setCustomProperty(`dataPipeline:transparentRendering`,!0,i),i}}function Az(e,t,n,r){let i=n.createRangeOn(e),a=t.toViewRange(i).getTrimmed().getWalker();for(let{item:e}of a)if(e.is(`element`)&&e.getCustomProperty(`listItemMarker`))a.jumpTo(r.createPositionAfter(e));else if(e.is(`element`)&&!e.getCustomProperty(`listItemWrapper`))return e}function jz(e,t){return(n,r)=>{if(r.modelPosition.offset>0)return;let i=r.modelPosition.parent;if(!G(i)||!e.some(e=>e.scope==`itemMarker`&&e.canInjectMarkerIntoElement&&e.canInjectMarkerIntoElement(i)))return;let a=r.mapper.toViewElement(i),o=t.createRangeIn(a),s=o.getWalker(),c=o.start;for(let{item:e}of s){if(e.is(`element`)&&r.mapper.toModelElement(e)||e.is(`$textProxy`))break;e.is(`element`)&&e.getCustomProperty(`listItemMarker`)&&(c=t.createPositionAfter(e),s.skip(({previousPosition:e})=>!e.isEqual(c)))}r.viewPosition=c}}function Mz(e,t,n){for(;e.parent.is(`attributeElement`)&&e.parent.getCustomProperty(`listItemWrapper`);)t.unwrap(t.createRangeOn(e),e.parent);let r=[];i(t.createPositionBefore(e).getWalker({direction:`backward`})),i(t.createRangeIn(e).getWalker());for(let e of r)t.remove(e);function i(e){for(let{item:t}of e){if(t.is(`element`)&&n.toModelElement(t))break;t.is(`element`)&&t.getCustomProperty(`listItemMarker`)&&r.push(t)}}}function Nz(e,t,n,r,{dataPipeline:i}){let a=r.createRangeOn(t);if(!NR(e))return a;for(let o of n){if(o.scope!=`itemMarker`)continue;let n=o.createElement(r,e,{dataPipeline:i});if(!n||(r.setCustomProperty(`listItemMarker`,!0,n),o.canInjectMarkerIntoElement&&o.canInjectMarkerIntoElement(e)?r.insert(r.createPositionAt(t,0),n):(r.insert(a.start,n),a=r.createRange(r.createPositionBefore(n),r.createPositionAfter(t))),!o.createWrapperElement||!o.canWrapElement))continue;let s=o.createWrapperElement(r,e,{dataPipeline:i});r.setCustomProperty(`listItemWrapper`,!0,s),o.canWrapElement(e)?a=r.wrap(a,s):(a=r.wrap(r.createRangeOn(n),s),a=r.createRange(a.start,r.createPositionAfter(t)))}return a}function Pz(e,t){let n=e.parent;for(;n.is(`attributeElement`)&&[`ul`,`ol`,`li`].includes(n.name);){let r=n.parent;t.unwrap(t.createRangeOn(e),n),n=r}}function Fz(e,t,n,r,i){if(!e.hasAttribute(`listIndent`))return;let a=e.getAttribute(`listIndent`),o=i.enableSkipLevelLists,s=e;for(let c=a;c>=0;c--){let a=s.getAttribute(`listIndent`)!==c;if(a){let a=Iz(e,c)||s,o=a.getAttribute(`listType`),l=_z(r,c,`list-item-skip-${c}`),u=gz(r,c,o);r.setStyle(`list-style-type`,`none`,l);for(let e of n)e.scope==`list`&&a.hasAttribute(e.attributeName)&&e.setAttributeOnDowncast(r,a.getAttribute(e.attributeName),u,i,a);t=r.wrap(t,l),t=r.wrap(t,u)}else{let e=_z(r,c,s.getAttribute(`listItemId`)),a=gz(r,c,s.getAttribute(`listType`));for(let t of n)(t.scope==`list`||t.scope==`item`)&&s.hasAttribute(t.attributeName)&&t.setAttributeOnDowncast(r,s.getAttribute(t.attributeName),t.scope==`list`?a:e,i,s);t=r.wrap(t,e),t=r.wrap(t,a)}if(c==0)break;if(!a){let e=TR.first(s,{lowerIndent:!0});if(e)s=e;else if(!o)break}}}function Iz(e,t){let n=e.nextSibling;for(;n&&G(n);){let e=n.getAttribute(`listIndent`);if(ee.consume===!1).map(e=>e.attributeName);return(t,r)=>{let i=[];for(let r of e)t.hasAttribute(r)&&!n.includes(r)&&i.push(`attribute:${r}`);return i.every(e=>r.test(t,e)!==!1)?(i.forEach(e=>r.consume(t,e)),!0):!1}}function Rz(e,t,n=kR(e)){if(!G(e))return!1;for(let n of e.getAttributeKeys())if(!(n.startsWith(`selection:`)||n==`htmlEmptyBlock`)&&!t.includes(n))return!1;return n.length<2}const zz=[`listType`,`listIndent`,`listItemId`];var Bz=class extends F{_downcastStrategies=[];static get pluginName(){return`ListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,fz,_O,oz]}constructor(e){super(e),e.config.define(`list.multiBlock`,!0)}init(){let e=this.editor,t=e.model,n=e.config.get(`list.multiBlock`);if(e.plugins.has(`LegacyListEditing`))throw new w(`list-feature-conflict`,this,{conflictPlugin:`LegacyListEditing`});t.schema.register(`$listItem`,{allowAttributes:zz}),n?(t.schema.extend(`$container`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$block`,{allowAttributesOf:`$listItem`}),t.schema.extend(`$blockObject`,{allowAttributesOf:`$listItem`})):t.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributesOf:`$listItem`});for(let e of zz)t.schema.setAttributeProperties(e,{copyOnReplace:!0});e.commands.add(`numberedList`,new QR(e,`numbered`)),e.commands.add(`bulletedList`,new QR(e,`bulleted`)),e.commands.add(`customNumberedList`,new QR(e,`customNumbered`,{multiLevel:!0})),e.commands.add(`customBulletedList`,new QR(e,`customBulleted`,{multiLevel:!0})),e.commands.add(`indentList`,new XR(e,`forward`)),e.commands.add(`outdentList`,new XR(e,`backward`)),e.commands.add(`splitListItemBefore`,new ez(e,`before`)),e.commands.add(`splitListItemAfter`,new ez(e,`after`)),n&&(e.commands.add(`mergeListItemBackward`,new $R(e,`backward`)),e.commands.add(`mergeListItemForward`,new $R(e,`forward`))),this._setupDeleteIntegration(),this._setupEnterIntegration(),this._setupTabIntegration(),this._setupClipboardIntegration(),this._setupAccessibilityIntegration(),this._setupListItemIdConversionStrategy()}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`),{priority:`high`}),n&&n.registerChildCommand(e.get(`outdentList`),{priority:`lowest`}),this._setupModelPostFixing(),this._setupConversion()}registerDowncastStrategy(e){this._downcastStrategies.push(e)}getListAttributeNames(){return[...zz,...this._downcastStrategies.map(e=>e.attributeName)]}_setupDeleteIntegration(){let e=this.editor,t=e.commands.get(`mergeListItemBackward`),n=e.commands.get(`mergeListItemForward`);this.listenTo(e.editing.view.document,`delete`,(r,i)=>{let a=e.model.document.selection;GR(e.model)||e.model.change(()=>{let o=a.getFirstPosition();if(a.isCollapsed&&i.direction==`backward`){if(!o.isAtStart)return;let n=o.parent;if(!G(n))return;let a=TR.first(n,{sameAttributes:`listType`,sameIndent:!0}),s=n.getAttribute(`listIndent`)===0||!G(n.previousSibling);if(!a&&s)PR(n)||e.execute(`splitListItemAfter`),e.execute(`outdentList`);else{if(!t||!t.isEnabled)return;t.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`backward`)})}i.preventDefault(),r.stop()}else{if(a.isCollapsed&&!a.getLastPosition().isAtEnd||!n||!n.isEnabled)return;n.execute({shouldMergeOnBlocksContentLevel:Uz(e.model,`forward`)}),i.preventDefault(),r.stop()}})},{context:`li`})}_setupEnterIntegration(){let e=this.editor,t=e.model,n=e.commands,r=n.get(`enter`);this.listenTo(e.editing.view.document,`enter`,(n,r)=>{let i=t.document,a=i.selection.getFirstPosition().parent;if(i.selection.isCollapsed&&G(a)&&a.isEmpty&&!r.isSoft){let t=NR(a),i=PR(a);t&&i?(e.execute(`outdentList`),r.preventDefault(),n.stop()):t&&!i?(e.execute(`splitListItemAfter`),r.preventDefault(),n.stop()):i&&(e.execute(`splitListItemBefore`),r.preventDefault(),n.stop())}},{context:`li`}),this.listenTo(r,`afterExecute`,()=>{let t=n.get(`splitListItemBefore`);if(t.refresh(),!t.isEnabled)return;let r=e.model.document.selection.getLastPosition().parent;kR(r).length===2&&t.execute()})}_setupTabIntegration(){let e=this.editor;this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}_setupConversion(){let e=this.editor,t=e.model,n=this.getListAttributeNames(),r=e.config.get(`list.multiBlock`),i=r?`paragraph`:`listItem`,a=!!e.config.get(`list.enableSkipLevelLists`);e.conversion.for(`upcast`).elementToElement({view:`li`,model:(e,{writer:t})=>t.createElement(i,{listType:``})}).elementToElement({view:`p`,model:(e,{writer:t})=>e.parent&&e.parent.is(`element`,`li`)?t.createElement(i,{listType:``}):null,converterPriority:`high`}).add(e=>{e.on(`element:p`,(e,t,n)=>{let r=t.viewItem;if(!r.parent||!r.parent.is(`element`,`li`)||r.isEmpty||!r.getAttributeKeys().next().done)return;for(let e of r.parent.getChildren())if(e!==r&&!(e.is(`element`,`ol`)||e.is(`element`,`ul`)))return;n.consumable.consume(r,{name:!0});let{modelRange:i,modelCursor:a}=n.convertChildren(r,t.modelCursor);t.modelRange=i,t.modelCursor=a},{priority:`highest`}),a&&e.on(`element:li`,Cz(),{priority:`high`}),e.on(`element:li`,Tz())}),r||e.conversion.for(`downcast`).elementToElement({model:`listItem`,view:`p`}),e.conversion.for(`editingDowncast`).elementToElement({model:i,view:kz(n),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{enableSkipLevelLists:a})),e.on(`remove`,Oz(t.schema))}),e.conversion.for(`dataDowncast`).elementToElement({model:i,view:kz(n,{dataPipeline:!0}),converterPriority:`high`}).add(e=>{e.on(`attribute`,Dz(n,this._downcastStrategies,t,{dataPipeline:!0,enableSkipLevelLists:a}))});let o=jz(this._downcastStrategies,e.editing.view);e.editing.mapper.on(`modelToViewPosition`,o),e.data.mapper.on(`modelToViewPosition`,o),this.listenTo(t.document,`change:data`,Ez(t,e.editing,n,this),{priority:`high`}),this.on(`checkAttributes:item`,(e,{viewElement:t,modelAttributes:n})=>{t.id!=n.listItemId&&(e.return=!0,e.stop())}),this.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n})=>{(t.name!=vz(n.listType)||t.id!=yz(n.listType,n.listIndent))&&(e.return=!0,e.stop())})}_setupModelPostFixing(){let e=this.editor.model,t=this.getListAttributeNames();e.document.registerPostFixer(n=>Vz(e,n,t,this)),this.editor.config.get(`list.enableSkipLevelLists`)||this.on(`postFixer`,(e,{listNodes:t,writer:n})=>{e.return=xz(t,n)||e.return},{priority:`high`}),this.on(`postFixer`,(e,{listNodes:t,writer:n,seenIds:r})=>{e.return=Sz(t,r,n)||e.return},{priority:`high`})}_setupClipboardIntegration(){let e=this.editor.model,t=this.editor.plugins.get(`ClipboardPipeline`);this.listenTo(e,`insertContent`,Hz(e),{priority:`high`}),this.listenTo(t,`outputTransformation`,(t,n)=>{e.change(e=>{let t=Array.from(n.content.getChildren()),r=t[t.length-1];if(t.length>1&&r.is(`element`)&&r.isEmpty&&t.slice(0,-1).every(G)&&e.remove(r),n.method==`copy`||n.method==`cut`){let t=Array.from(n.content.getChildren());HR(t)&&VR(t,e,this.getListAttributeNames())}})})}_setupAccessibilityIntegration(){let e=this.editor,t=e.t;e.accessibility.addKeystrokeInfoGroup({id:`list`,label:t(`Keystrokes that can be used in a list`),keystrokes:[{label:t(`Increase list item indent`),keystroke:`Tab`},{label:t(`Decrease list item indent`),keystroke:`Shift+Tab`}]})}_setupListItemIdConversionStrategy(){this.registerDowncastStrategy({scope:`item`,attributeName:`listItemId`,setAttributeOnDowncast(e,t,n,r){r&&(r.skipListItemIds||r.isClipboardPipeline)||e.setAttribute(`data-list-item-id`,t,n)}})}};function Vz(e,t,n,r){let i=e.document.differ.getChanges(),a=new Set,o=new Set,s=r.editor.config.get(`list.multiBlock`),c=!1;for(let r of i){if(r.type==`insert`&&r.name!=`$text`){let i=r.position.nodeAfter;if(!e.schema.checkAttribute(i,`listItemId`))for(let e of Array.from(i.getAttributeKeys()))n.includes(e)&&(t.removeAttribute(e,i),c=!0);bz(r.position,o,a),r.attributes.has(`listItemId`)||bz(r.position.getShiftedBy(r.length),o,a);for(let{item:t,previousPosition:n}of e.createRangeIn(i))G(t)&&bz(n,o,a)}else r.type==`remove`?bz(r.position,o,a):r.type==`attribute`&&n.includes(r.attributeKey)&&(bz(r.range.start,o,a),r.attributeNewValue===null&&bz(r.range.start.getShiftedBy(1),o,a));if(!s&&r.type==`attribute`&&zz.includes(r.attributeKey)){let e=r.range.start.nodeAfter;r.attributeNewValue===null&&e&&e.is(`element`,`listItem`)?(t.rename(e,`paragraph`),c=!0):r.attributeOldValue===null&&e&&e.is(`element`)&&e.name!=`listItem`&&(t.rename(e,`listItem`),c=!0)}}let l=new Set;for(let e of o.values())c=r.fire(`postFixer`,{listNodes:new DR(e),listHead:e,writer:t,seenIds:l})||c;return c}function Hz(e){return(t,[n,r])=>{let i=(n.is(`documentFragment`)?Array.from(n.getChildren()):[n]).filter(t=>!e.schema.isInline(t));if(!i.length)return;let a=(r?e.createSelection(r):e.document.selection).getFirstPosition(),o;if(G(a.parent))o=a.parent;else if(G(a.nodeBefore)&&G(a.nodeAfter))o=a.nodeBefore;else return;e.change(e=>{let t=o.getAttribute(`listType`),n=o.getAttribute(`listIndent`),r=i[0].getAttribute(`listIndent`)||0,a=Math.max(n-r,0);for(let n of i){let r=G(n);o.is(`element`,`listItem`)&&n.is(`element`,`paragraph`)&&e.rename(n,`listItem`),e.setAttributes({listIndent:(r?n.getAttribute(`listIndent`):0)+a,listItemId:r?n.getAttribute(`listItemId`):OR.next(),listType:t},n)}})}}function Uz(e,t){let n=e.document.selection;if(!n.isCollapsed)return!GR(e);if(t===`forward`)return!0;let r=n.getFirstPosition().parent,i=r.previousSibling;return e.schema.isObject(i)?!1:i.isEmpty?!0:HR([r,i])}function Wz(e,t,n,r){e.ui.componentFactory.add(t,()=>{let i=Gz(H,e,t,n,r);return i.set({tooltip:!0,isToggleable:!0}),i}),e.ui.componentFactory.add(`menuBar:${t}`,()=>{let i=Gz(U,e,t,n,r);return i.set({role:`menuitemcheckbox`,isToggleable:!0}),i})}function Gz(e,t,n,r,i){let a=t.commands.get(n),o=new e(t.locale);return o.set({label:r,icon:i}),o.bind(`isOn`,`isEnabled`).to(a,`value`,`isEnabled`),o.on(`execute`,()=>{t.execute(n),t.editing.view.focus()}),o}var Kz=class extends F{static get pluginName(){return`ListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;this.editor.ui.componentFactory.has(`numberedList`)||Wz(this.editor,`numberedList`,e(`Numbered List`),vv),this.editor.ui.componentFactory.has(`bulletedList`)||Wz(this.editor,`bulletedList`,e(`Bulleted List`),o_)}},qz=class extends F{static get requires(){return[Bz,Kz]}static get pluginName(){return`List`}static get isOfficialPlugin(){return!0}},Jz=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&qR(e.getAttribute(`listType`)));r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listStart`,e>=0?e:1,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return t&&G(t)&&qR(t.getAttribute(`listType`))?t.getAttribute(`listStart`):null}};const Yz={},Xz={},Zz={},Qz=[{listStyle:`disc`,typeAttribute:`disc`,listType:`bulleted`},{listStyle:`circle`,typeAttribute:`circle`,listType:`bulleted`},{listStyle:`square`,typeAttribute:`square`,listType:`bulleted`},{listStyle:`decimal`,typeAttribute:`1`,listType:`numbered`},{listStyle:`decimal-leading-zero`,typeAttribute:null,listType:`numbered`},{listStyle:`lower-roman`,typeAttribute:`i`,listType:`numbered`},{listStyle:`upper-roman`,typeAttribute:`I`,listType:`numbered`},{listStyle:`lower-alpha`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-alpha`,typeAttribute:`A`,listType:`numbered`},{listStyle:`lower-latin`,typeAttribute:`a`,listType:`numbered`},{listStyle:`upper-latin`,typeAttribute:`A`,listType:`numbered`},{listStyle:`arabic-indic`,typeAttribute:null,listType:`numbered`}];for(let{listStyle:e,typeAttribute:t,listType:n}of Qz)Yz[e]=n,Xz[e]=t,t&&(Zz[t]=e);function $z(){return Qz.map(e=>e.listStyle)}function eB(e){return Yz[e]||null}function tB(e){return Zz[e]||null}function nB(e){return Xz[e]||null}function rB(e){switch(e){case`lower-alpha`:return`lower-latin`;case`upper-alpha`:return`upper-latin`;default:return e}}var iB=class extends I{defaultType;_supportedTypes;constructor(e,t,n){super(e),this.defaultType=t,this._supportedTypes=n}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document;t.change(t=>{this._tryToConvertItemsToList(e);let r=Array.from(n.selection.getSelectedBlocks()).filter(e=>e.hasAttribute(`listType`));if(r.length){r=IR(r);for(let n of r)t.setAttribute(`listStyle`,e.type||this.defaultType,n)}})}isStyleTypeSupported(e){return this._supportedTypes?this._supportedTypes.includes(e):!0}_getValue(){let e=j(this.editor.model.document.selection.getSelectedBlocks());return G(e)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=eB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},aB=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>G(e)&&e.getAttribute(`listType`)==`numbered`);r=IR(r),t.change(t=>{for(let n of r)t.setAttribute(`listReversed`,!!e.reversed,n)})}_getValue(){let e=this.editor.model.document,t=j(e.selection.getSelectedBlocks());return G(t)&&t.getAttribute(`listType`)==`numbered`?t.getAttribute(`listReversed`):null}};function oB(e){return(t,n,r)=>{let{writer:i,schema:a,consumable:o}=r;if(o.test(n.viewItem,e.viewConsumables)===!1)return;n.modelRange||Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor));let s=!1;for(let t of n.modelRange.getItems({shallow:!0}))a.checkAttribute(t,e.attributeName)&&e.appliesToListItem(t)&&(t.hasAttribute(e.attributeName)||(i.setAttribute(e.attributeName,e.getAttributeOnUpcast(n.viewItem),t),s=!0));s&&o.consume(n.viewItem,e.viewConsumables)}}var sB=class extends F{static get pluginName(){return`ListPropertiesUtils`}static get isOfficialPlugin(){return!0}getAllSupportedStyleTypes(){return $z()}getListTypeFromListStyleType(e){return eB(e)}getListStyleTypeFromTypeAttribute(e){return tB(e)}getTypeAttributeFromListStyleType(e){return nB(e)}};function cB(e){let{startIndex:t,reversed:n,styles:r}=e;return{styles:lB(r),startIndex:t||!1,reversed:n||!1}}function lB(e){let t={listTypes:[`bulleted`,`numbered`],useAttribute:!1,listStyleTypes:{numbered:[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`],bulleted:[`disc`,`circle`,`square`]}};return e===!0||(e?Array.isArray(e)||typeof e==`string`?(t.listTypes=A(e),t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=e.listTypes?A(e.listTypes):t.listTypes,t.useAttribute=!!e.useAttribute,e.listStyleTypes?t.listStyleTypes=e.listStyleTypes:t.listStyleTypes=kn(t.listStyleTypes,t.listTypes)):(t.listTypes=[],t.listStyleTypes={})),t}const uB=`default`;var dB=class extends F{static get requires(){return[Bz,sB]}static get pluginName(){return`ListPropertiesEditing`}static get licenseFeatureCode(){return`LP`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`list.properties`,{styles:!0,startIndex:!1,reversed:!1})}init(){let e=this.editor,t=e.model,n=e.plugins.get(Bz),r=fB(e.config.get(`list.properties`));for(let i of r)i.addCommand(e),t.schema.extend(`$listItem`,{allowAttributes:i.attributeName}),n.registerDowncastStrategy({scope:`list`,attributeName:i.attributeName,setAttributeOnDowncast(e,t,n){i.setAttributeOnDowncast(e,t,n)}});e.conversion.for(`upcast`).add(e=>{for(let t of r)e.on(`element:ol`,oB(t)),e.on(`element:ul`,oB(t))}),n.on(`checkAttributes:list`,(e,{viewElement:t,modelAttributes:n,modelReferenceElement:i})=>{for(let a of r)a.appliesToListItem(i)&&a.getAttributeOnUpcast(t)!=n[a.attributeName]&&(e.return=!0,e.stop())}),this.listenTo(e.commands.get(`indentList`),`afterExecute`,(e,n)=>{t.change(e=>{for(let t of n)for(let n of r)n.appliesToListItem(t)&&e.setAttribute(n.attributeName,n.defaultValue,t)})}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i}of t)for(let t of r)t.hasValidAttribute(i)||(t.appliesToListItem(i)?n.setAttribute(t.attributeName,t.defaultValue,i):n.removeAttribute(t.attributeName,i),e.return=!0)}),n.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:i,previousNodeInList:a}of t)if(a&&a.getAttribute(`listType`)==i.getAttribute(`listType`))for(let t of r){let{attributeName:r}=t;if(!t.appliesToListItem(i))continue;let o=a.getAttribute(r);i.getAttribute(r)!=o&&(n.setAttribute(r,o,i),e.return=!0)}})}};function fB(e){let t=[],n=cB(e);if(e.styles){let e=n.styles.useAttribute;t.push({attributeName:`listStyle`,defaultValue:uB,viewConsumables:{styles:`list-style-type`},addCommand(t){let n=$z();e&&(n=n.filter(e=>!!nB(e))),t.commands.add(`listStyle`,new iB(t,uB,n))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`||e.getAttribute(`listType`)==`bulleted`},hasValidAttribute(e){if(!this.appliesToListItem(e))return!e.hasAttribute(`listStyle`);if(!e.hasAttribute(`listStyle`))return!1;let t=e.getAttribute(`listStyle`);return t==uB?!0:eB(t)==e.getAttribute(`listType`)},setAttributeOnDowncast(t,n,r){if(n&&n!==uB)if(e){let e=nB(n);if(e){t.setAttribute(`type`,e,r);return}}else{t.setStyle(`list-style-type`,n,r);return}t.removeStyle(`list-style-type`,r),t.removeAttribute(`type`,r)},getAttributeOnUpcast(e){let t=e.getStyle(`list-style-type`);if(t)return rB(t);let n=e.getAttribute(`type`);return n?tB(n):uB}})}return e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,viewConsumables:{attributes:`reversed`},addCommand(e){e.commands.add(`listReversed`,new aB(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listReversed`)},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,viewConsumables:{attributes:`start`},addCommand(e){e.commands.add(`listStart`,new Jz(e))},appliesToListItem(e){return qR(e.getAttribute(`listType`))},hasValidAttribute(e){return this.appliesToListItem(e)==e.hasAttribute(`listStart`)},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}var pB=class extends P{children;stylesView=null;additionalPropertiesCollapsibleView=null;startIndexFieldView=null;reversedSwitchButtonView=null;focusTracker=new M;keystrokes=new N;focusables=new pa;focusCycler;constructor(e,{enabledProperties:t,styleButtonViews:n,styleGridAriaLabel:r}){super(e);let i=[`ck`,`ck-list-properties`];this.children=this.createCollection(),this.focusCycler=new Hy({focusables:this.focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),n&&n.length?(this.stylesView=this._createStylesView(n,r),this.children.add(this.stylesView)):i.push(`ck-list-properties_without-styles`),(t.startIndex||t.reversed)&&(this._addNumberedListPropertyViews(t),i.push(`ck-list-properties_with-numbered-properties`)),this.setTemplate({tag:`div`,attributes:{class:i},children:this.children})}render(){if(super.render(),this.stylesView){this.focusables.add(this.stylesView),this.focusTracker.add(this.stylesView.element),(this.startIndexFieldView||this.reversedSwitchButtonView)&&(this.focusables.add(this.children.last.buttonView),this.focusTracker.add(this.children.last.buttonView.element));for(let e of this.stylesView.children)this.stylesView.focusTracker.add(e.element);$a({keystrokeHandler:this.stylesView.keystrokes,focusTracker:this.stylesView.focusTracker,gridItems:this.stylesView.children,numberOfColumns:()=>u.window.getComputedStyle(this.stylesView.element).getPropertyValue(`grid-template-columns`).split(` `).length,uiLanguageDirection:this.locale&&this.locale.uiLanguageDirection})}if(this.startIndexFieldView){this.focusables.add(this.startIndexFieldView),this.focusTracker.add(this.startIndexFieldView.element);let e=e=>e.stopPropagation();this.keystrokes.set(`arrowright`,e),this.keystrokes.set(`arrowleft`,e),this.keystrokes.set(`arrowup`,e),this.keystrokes.set(`arrowdown`,e)}this.reversedSwitchButtonView&&(this.focusables.add(this.reversedSwitchButtonView),this.focusTracker.add(this.reversedSwitchButtonView.element)),this.keystrokes.listenTo(this.element)}focus(){this.focusCycler.focusFirst()}focusLast(){this.focusCycler.focusLast()}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createStylesView(e,t){let n=new P(this.locale);return n.children=n.createCollection(),n.children.addMany(e),n.setTemplate({tag:`div`,attributes:{\"aria-label\":t,class:[`ck`,`ck-list-styles-list`]},children:n.children}),n.children.delegate(`execute`).to(this),n.focus=function(){for(let e of this.children)if(e instanceof H&&e.isOn){e.focus();return}this.children.first.focus()},n.focusTracker=new M,n.keystrokes=new N,n.render(),n.keystrokes.listenTo(n.element),n}_addNumberedListPropertyViews(e){let t=this.locale.t,n=[];e.startIndex&&(this.startIndexFieldView=this._createStartIndexField(),n.push(this.startIndexFieldView)),e.reversed&&(this.reversedSwitchButtonView=this._createReversedSwitchButton(),n.push(this.reversedSwitchButtonView)),this.stylesView?(this.additionalPropertiesCollapsibleView=new xb(this.locale,n),this.additionalPropertiesCollapsibleView.set({label:t(`List properties`),isCollapsed:!0}),this.additionalPropertiesCollapsibleView.buttonView.bind(`isEnabled`).toMany(n,`isEnabled`,(...e)=>e.some(e=>e)),this.additionalPropertiesCollapsibleView.buttonView.on(`change:isEnabled`,(e,t,n)=>{n||(this.additionalPropertiesCollapsibleView.isCollapsed=!0)}),this.children.add(this.additionalPropertiesCollapsibleView)):this.children.addMany(n)}_createStartIndexField(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.set({label:e(`Start at`),class:`ck-numbered-list-properties__start-index`}),t.fieldView.set({min:0,step:1,value:1,inputMode:`numeric`}),t.fieldView.on(`input`,()=>{let n=t.fieldView.element,r=n.valueAsNumber;if(Number.isNaN(r)){t.errorText=e(`Invalid start index value.`);return}n.checkValidity()?this.fire(`listStart`,{startIndex:r}):t.errorText=e(`Start index must be greater than 0.`)}),t}_createReversedSwitchButton(){let e=this.locale.t,t=new mb(this.locale);return t.set({withText:!0,label:e(`Reversed order`),class:`ck-numbered-list-properties__reversed-order`}),t.delegate(`execute`).to(this,`listReversed`),t}},mB=class extends F{static get pluginName(){return`ListPropertiesUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.locale.t,n=e.config.get(`list.properties`),r=cB(n),i=r.styles.listTypes;if(i.includes(`bulleted`)){let n=[{label:t(`Toggle the disc list style`),tooltip:t(`Disc`),type:`disc`,icon:tv},{label:t(`Toggle the circle list style`),tooltip:t(`Circle`),type:`circle`,icon:Q_},{label:t(`Toggle the square list style`),tooltip:t(`Square`),type:`square`,icon:iv}],i=t(`Bulleted List`),a=t(`Bulleted list styles toolbar`),o=`bulletedList`;e.ui.componentFactory.add(o,hB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,buttonIcon:o_,styleGridAriaLabel:a,styleDefinitions:n})),e.ui.componentFactory.add(`menuBar:${o}`,vB({editor:e,normalizedConfig:r,parentCommandName:o,buttonLabel:i,styleGridAriaLabel:a,styleDefinitions:n}))}if(i.includes(`numbered`)||n.startIndex||n.reversed){let n=[{label:t(`Toggle the decimal list style`),tooltip:t(`Decimal`),type:`decimal`,icon:ev},{label:t(`Toggle the decimal with leading zero list style`),tooltip:t(`Decimal with leading zero`),type:`decimal-leading-zero`,icon:$_},{label:t(`Toggle the lower–roman list style`),tooltip:t(`Lower–roman`),type:`lower-roman`,icon:rv},{label:t(`Toggle the upper–roman list style`),tooltip:t(`Upper-roman`),type:`upper-roman`,icon:ov},{label:t(`Toggle the lower–latin list style`),tooltip:t(`Lower-latin`),type:`lower-latin`,icon:nv},{label:t(`Toggle the upper–latin list style`),tooltip:t(`Upper-latin`),type:`upper-latin`,icon:av},{label:t(`Toggle the arabic-indic list style`),tooltip:t(`Arabic-indic`),type:`arabic-indic`,icon:sv}],a=t(`Numbered List`),o=t(`Numbered list styles toolbar`),s=`numberedList`;e.ui.componentFactory.add(s,hB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,buttonIcon:vv,styleGridAriaLabel:o,styleDefinitions:n})),i.includes(`numbered`)&&e.ui.componentFactory.add(`menuBar:${s}`,vB({editor:e,normalizedConfig:r,parentCommandName:s,buttonLabel:a,styleGridAriaLabel:o,styleDefinitions:n}))}}};function hB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,buttonIcon:i,styleGridAriaLabel:a,styleDefinitions:o}){let s=e.commands.get(n);return c=>{let l=Nx(c,Mx),u=l.buttonView;return l.bind(`isEnabled`).to(s),l.class=`ck-list-styles-dropdown`,u.on(`execute`,()=>{e.execute(n),e.editing.view.focus()}),u.set({label:r,icon:i,tooltip:!0,isToggleable:!0}),u.bind(`isOn`).to(s,`value`,e=>!!e),l.once(`change:isOpen`,()=>{let r=_B({editor:e,normalizedConfig:t,dropdownView:l,parentCommandName:n,styleGridAriaLabel:a,styleDefinitions:o});l.panelView.children.add(r)}),l.on(`execute`,()=>{e.editing.view.focus()}),l}}function gB({editor:e,listStyleCommand:t,parentCommandName:n}){let r=e.locale,i=e.commands.get(n);return({label:a,type:o,icon:s,tooltip:c})=>{let l=new H(r);return l.set({label:a,icon:s,tooltip:c}),l.bind(`isOn`).to(t,`value`,e=>e===o),l.on(`execute`,()=>{i.value?t.value===o?e.execute(n):t.value!==o&&e.execute(`listStyle`,{type:o}):e.model.change(()=>{e.execute(`listStyle`,{type:o})})}),l}}function _B({editor:e,normalizedConfig:t,dropdownView:n,parentCommandName:r,styleDefinitions:i,styleGridAriaLabel:a}){let o=e.locale,s={...t,...r==`numberedList`?null:{startIndex:!1,reversed:!1}},c=r.replace(`List`,``),l=null;if(t.styles.listTypes.includes(c)){let n=e.commands.get(`listStyle`),a=gB({editor:e,parentCommandName:r,listStyleCommand:n}),o=t.styles.listStyleTypes,s=i;if(o){let e=o[c];e&&(s=i.filter(t=>e.includes(t.type)))}let u=yB(n);l=s.filter(u).map(a)}let u=new pB(o,{styleGridAriaLabel:a,enabledProperties:s,styleButtonViews:l});if(t.styles.listTypes.includes(c)&&zx(n,()=>u.stylesView.children.find(e=>e.isOn)),s.startIndex){let t=e.commands.get(`listStart`);u.startIndexFieldView.bind(`isEnabled`).to(t),u.startIndexFieldView.fieldView.bind(`value`).to(t),u.on(`listStart`,(t,n)=>e.execute(`listStart`,n))}if(s.reversed){let t=e.commands.get(`listReversed`);u.reversedSwitchButtonView.bind(`isEnabled`).to(t),u.reversedSwitchButtonView.bind(`isOn`).to(t,`value`,e=>!!e),u.on(`listReversed`,()=>{let n=t.value;e.execute(`listReversed`,{reversed:!n})})}return u.delegate(`execute`).to(n),u}function vB({editor:e,normalizedConfig:t,parentCommandName:n,buttonLabel:r,styleGridAriaLabel:i,styleDefinitions:a}){return o=>{let s=new uw(o),c=e.commands.get(n),l=e.commands.get(`listStyle`),u=yB(l),d=gB({editor:e,parentCommandName:n,listStyleCommand:l}),f=t.styles.listStyleTypes,p=a;if(f){let e=f[c.type];e&&(p=a.filter(t=>e.includes(t.type)))}let m=p.filter(u).map(d),h=new pB(o,{styleGridAriaLabel:i,enabledProperties:{...t,startIndex:!1,reversed:!1},styleButtonViews:m});return h.delegate(`execute`).to(s),s.buttonView.set({label:r,icon:n===`bulletedList`?o_:vv}),s.panelView.children.add(h),s.bind(`isEnabled`).to(c,`isEnabled`),s.on(`execute`,()=>{e.editing.view.focus()}),s}}function yB(e){return typeof e.isStyleTypeSupported==`function`?t=>e.isStyleTypeSupported(t.type):()=>!0}var bB=class extends F{static get requires(){return[dB,mB]}static get pluginName(){return`ListProperties`}static get isOfficialPlugin(){return!0}},xB=class extends I{constructor(e){super(e),this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){let e=this._getSelectedItems();this.value=this._getValue(e),this.isEnabled=!!e.length}execute(e={}){this.editor.model.change(t=>{let n=this._getSelectedItems(),r=e.forceValue===void 0?!this._getValue(n):e.forceValue;for(let e of n)r?t.setAttribute(`todoListChecked`,!0,e):t.removeAttribute(`todoListChecked`,e)})}_getValue(e){return e.every(e=>e.getAttribute(`todoListChecked`))}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,`todoListChecked`)&&i.push(...kR(r));for(let e of n.getItems({shallow:!0}))t.checkAttribute(e,`todoListChecked`)&&!i.includes(e)&&i.push(...kR(e));return i}},SB=class extends jc{domEventType=[`change`];onDomEvent(e){if(e.target){let t=this.view.domConverter.mapDomToView(e.target);t&&t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&t.findAncestor({classes:`todo-list__label`})&&this.fire(`todoCheckboxChange`,e)}}};const CB=yi(`Ctrl+Enter`);var wB=class extends F{static get pluginName(){return`TodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[Bz]}init(){let e=this.editor,t=e.model,n=e.editing,r=e.plugins.get(Bz),i=e.config.get(`list.multiBlock`)?`paragraph`:`listItem`;e.commands.add(`todoList`,new QR(e,`todo`)),e.commands.add(`checkTodoList`,new xB(e)),n.view.addObserver(SB),t.schema.extend(`$listItem`,{allowAttributes:`todoListChecked`}),t.schema.addAttributeCheck(e=>{let t=e.last;if(!t.getAttribute(`listItemId`)||t.getAttribute(`listType`)!=`todo`)return!1},`todoListChecked`),e.conversion.for(`upcast`).add(e=>{e.on(`element:input`,EB()),e.on(`element:li`,TB(),{priority:`low`}),e.on(`element:label`,DB({name:`label`,classes:`todo-list__label`})),e.on(`element:label`,DB({name:`label`,classes:[`todo-list__label`,`todo-list__label_without-description`]})),e.on(`element:span`,DB({name:`span`,classes:`todo-list__label__description`})),e.on(`element:ul`,OB({name:`ul`,classes:`todo-list`}))}),e.conversion.for(`downcast`).elementToElement({model:i,view:(e,{writer:t})=>{if(kB(e,r.getListAttributeNames()))return t.createContainerElement(`span`,{class:`todo-list__label__description`})},converterPriority:`highest`}),r.registerDowncastStrategy({scope:`list`,attributeName:`listType`,setAttributeOnDowncast(e,t,n){t==`todo`?e.addClass(`todo-list`,n):e.removeClass(`todo-list`,n)}}),r.registerDowncastStrategy({scope:`itemMarker`,attributeName:`todoListChecked`,createElement(e,t,{dataPipeline:n}){if(t.getAttribute(`listType`)!=`todo`)return null;let r=e.createUIElement(`input`,{type:`checkbox`,...t.getAttribute(`todoListChecked`)?{checked:`checked`}:null,...n?{disabled:`disabled`}:{tabindex:`-1`}});if(n)return r;let i=e.createContainerElement(`span`,{contenteditable:`false`},r);return i.getFillerOffset=()=>null,i},canWrapElement(e){return kB(e,r.getListAttributeNames())},createWrapperElement(e,t,{dataPipeline:n}){let i=[`todo-list__label`];return kB(t,r.getListAttributeNames())||i.push(`todo-list__label_without-description`),e.createAttributeElement(n?`label`:`span`,{class:i.join(` `)})}}),r.on(`checkElement`,(e,{modelElement:t,viewElement:n})=>{let i=kB(t,r.getListAttributeNames());n.hasClass(`todo-list__label__description`)!=i&&(e.return=!0,e.stop())}),r.on(`checkElement`,(t,{modelElement:n,viewElement:r})=>{let i=n.getAttribute(`listType`)==`todo`&&NR(n),a=!1,o=e.editing.view.createPositionBefore(r).getWalker({direction:`backward`});for(let{item:t}of o){if(t.is(`element`)&&e.editing.mapper.toModelElement(t))break;t.is(`element`,`input`)&&t.getAttribute(`type`)==`checkbox`&&(a=!0)}a!=i&&(t.return=!0,t.stop())}),r.on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t){if(!i||i.getAttribute(`listItemId`)!=r.getAttribute(`listItemId`))continue;let t=i.hasAttribute(`todoListChecked`),a=r.hasAttribute(`todoListChecked`);a&&!t?(n.removeAttribute(`todoListChecked`,r),e.return=!0):!a&&t&&(n.setAttribute(`todoListChecked`,!0,r),e.return=!0)}}),t.document.registerPostFixer(e=>{let n=t.document.differ.getChanges(),r=!1;for(let t of n)if(t.type==`attribute`&&t.attributeKey==`listType`){let n=t.range.start.nodeAfter;t.attributeOldValue==`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0)}else if(t.type==`insert`&&t.name!=`$text`)for(let{item:n}of e.createRangeOn(t.position.nodeAfter))n.is(`element`)&&n.getAttribute(`listType`)!=`todo`&&n.hasAttribute(`todoListChecked`)&&(e.removeAttribute(`todoListChecked`,n),r=!0);return r}),this.listenTo(n.view.document,`keydown`,(t,n)=>{vi(n)===CB&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`}),this.listenTo(n.view.document,`todoCheckboxChange`,(e,t)=>{let r=t.target;if(!r||!r.is(`element`,`input`))return;let i=n.view.createPositionAfter(r),a=n.mapper.toModelPosition(i).parent;a&&G(a)&&a.getAttribute(`listType`)==`todo`&&this._handleCheckmarkChange(a)}),this.listenTo(n.view.document,`arrowKey`,jB(t,e.locale),{context:`$text`}),this.listenTo(n.mapper,`viewToModelPosition`,(e,n)=>{let r=n.viewPosition.parent,i=r.is(`attributeElement`,`li`)&&n.viewPosition.offset==0,a=MB(r)&&n.viewPosition.offset<=1,o=r.is(`element`,`span`)&&r.getAttribute(`contenteditable`)==`false`&&MB(r.parent);if(!i&&!a&&!o)return;let s=n.modelPosition.nodeAfter;s&&s.getAttribute(`listType`)==`todo`&&(n.modelPosition=t.createPositionAt(s,0))},{priority:`low`}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=NB(r),o=NB(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function TB(){return(e,t,n)=>{let{writer:r,schema:i}=n;if(!t.modelRange)return;let a=Array.from(t.modelRange.getItems({shallow:!0})).filter(e=>e.getAttribute(`listType`)===`todo`&&i.checkAttribute(e,`listItemId`)).reduce((e,t)=>{let n=t.getAttribute(`listItemId`);return e.has(n)||e.set(n,kR(t)),e},new Map);for(let[,e]of a.entries())if(e.some(e=>e.getAttribute(`todoListChecked`)))for(let t of e)r.setAttribute(`todoListChecked`,!0,t)}}function EB(){return(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(!n.consumable.test(a,{name:!0})||a.getAttribute(`type`)!=`checkbox`||!r.isAtStart||!i.hasAttribute(`listType`))return;n.consumable.consume(a,{name:!0});let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)}}function DB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);i&&r.consumable.consume(n.viewItem,i.match)&&Object.assign(n,r.convertChildren(n.viewItem,n.modelCursor))}}function OB(e){let t=new Po(e);return(e,n,r)=>{let i=t.match(n.viewItem);if(!i)return;let a=i.match;a.name=!1,r.consumable.consume(n.viewItem,a)}}function kB(e,t){return(e.is(`element`,`paragraph`)||e.is(`element`,`listItem`))&&e.getAttribute(`listType`)==`todo`&&NR(e)&&AB(e,t)}function AB(e,t){for(let n of e.getAttributeKeys())if(!n.startsWith(`selection:`)&&!t.includes(n))return!1;return!0}function jB(e,t){return(n,r)=>{let i=Si(r.keyCode,t.contentLanguageDirection),a=e.schema,o=e.document.selection;if(!o.isCollapsed)return;let s=o.getFirstPosition(),c=s.parent;if(i==`right`&&s.isAtEnd){let t=a.getNearestSelectionRange(e.createPositionAfter(c),`forward`);if(!t)return;let i=t.start.parent;i&&G(i)&&i.getAttribute(`listType`)==`todo`&&(e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop())}else if(i==`left`&&s.isAtStart&&G(c)&&c.getAttribute(`listType`)==`todo`){let t=a.getNearestSelectionRange(e.createPositionBefore(c),`backward`);if(!t)return;e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function MB(e){return!!e&&e.is(`attributeElement`)&&e.hasClass(`todo-list__label`)}function NB(e){return!e||!e.is(`element`,`paragraph`)&&!e.is(`element`,`listItem`)?!1:e.getAttribute(`listType`)==`todo`}var PB=class extends F{static get pluginName(){return`TodoListUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.t;Wz(this.editor,`todoList`,e(`To-do List`),Ey)}},FB=class extends F{static get requires(){return[wB,PB]}static get pluginName(){return`TodoList`}static get isOfficialPlugin(){return!0}},IB=class extends I{type;constructor(e,t){super(e),this.type=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){let t=this.editor.model,n=t.document,r=Array.from(n.selection.getSelectedBlocks()).filter(e=>RB(e,t.schema)),i=e.forceValue===void 0?this.value:!e.forceValue;t.change(e=>{if(i){let t=r[r.length-1].nextSibling,n=1/0,i=[];for(;t&&t.name==`listItem`&&t.getAttribute(`listIndent`)!==0;){let e=t.getAttribute(`listIndent`);e=n;)a>i.getAttribute(`listIndent`)&&(a=i.getAttribute(`listIndent`)),i.getAttribute(`listIndent`)==a&&e[t?`unshift`:`push`](i),i=i[t?`previousSibling`:`nextSibling`]}}function RB(e,t){return t.checkChild(e.parent,`listItem`)&&!t.isObject(e)}var zB=class extends I{_indentBy;constructor(e,t){super(e),this._indentBy=t==`forward`?1:-1}refresh(){this.isEnabled=this._checkEnabled()}execute(){let e=this.editor.model,t=e.document,n=Array.from(t.selection.getSelectedBlocks());e.change(e=>{let t=n[n.length-1],r=t.nextSibling;for(;r&&r.name==`listItem`&&r.getAttribute(`listIndent`)>t.getAttribute(`listIndent`);)n.push(r),r=r.nextSibling;this._indentBy<0&&(n=n.reverse());for(let t of n){let n=t.getAttribute(`listIndent`)+this._indentBy;n<0?e.rename(t,`paragraph`):e.setAttribute(`listIndent`,n,t)}this.fire(`_executeCleanup`,n)})}_checkEnabled(){let e=j(this.editor.model.document.selection.getSelectedBlocks());if(!e||!e.is(`element`,`listItem`))return!1;if(this._indentBy>0){let t=e.getAttribute(`listIndent`),n=e.getAttribute(`listType`),r=e.previousSibling;for(;r&&r.is(`element`,`listItem`)&&r.getAttribute(`listIndent`)>=t;){if(r.getAttribute(`listIndent`)==t)return r.getAttribute(`listType`)==n;r=r.previousSibling}return!1}return!0}};function BB(e){let t=e.createContainerElement(`li`);return t.getFillerOffset=QB,t}function VB(e,t){let n=t.mapper,r=t.writer,i=e.getAttribute(`listType`)==`numbered`?`ol`:`ul`,a=BB(r),o=r.createContainerElement(i,null);return r.insert(r.createPositionAt(o,0),a),n.bindElements(e,a),a}function HB(e,t,n,r){let i=t.parent,a=n.mapper,o=n.writer,s=a.toViewPosition(r.createPositionBefore(e)),c=GB(e.previousSibling,{sameIndent:!0,smallerIndent:!0,listIndent:e.getAttribute(`listIndent`)}),l=e.previousSibling;if(c&&c.getAttribute(`listIndent`)==e.getAttribute(`listIndent`)){let e=a.toViewElement(c);s=o.breakContainer(o.createPositionAfter(e))}else if(l&&l.name==`listItem`){s=a.toViewPosition(r.createPositionAt(l,`end`));let e=a.findMappedViewAncestor(s),t=KB(e);s=t?o.createPositionBefore(t):o.createPositionAt(e,`end`)}else s=a.toViewPosition(r.createPositionBefore(e));if(s=WB(s),o.insert(s,i),l&&l.name==`listItem`){let e=a.toViewElement(l),n=o.createRange(o.createPositionAt(e,0),s).getWalker({ignoreElementEnd:!0});for(let e of n)if(e.item.is(`element`,`li`)){let r=o.breakContainer(o.createPositionBefore(e.item)),i=e.item.parent,a=o.createPositionAt(t,`end`);UB(o,a.nodeBefore,a.nodeAfter),o.move(o.createRangeOn(i),a),n._position=r}}else{let n=i.nextSibling;if(n&&(n.is(`element`,`ul`)||n.is(`element`,`ol`))){let r=null;for(let t of n.getChildren()){let n=a.toModelElement(t);if(n&&n.getAttribute(`listIndent`)>e.getAttribute(`listIndent`))r=t;else break}r&&(o.breakContainer(o.createPositionAfter(r)),o.move(o.createRangeOn(r.parent),o.createPositionAt(t,`end`)))}}UB(o,i,i.nextSibling),UB(o,i.previousSibling,i)}function UB(e,t,n){return!t||!n||t.name!=`ul`&&t.name!=`ol`||t.name!=n.name||t.getAttribute(`class`)!==n.getAttribute(`class`)?null:e.mergeContainers(e.createPositionAfter(t))}function WB(e){return e.getLastMatchingPosition(e=>e.item.is(`uiElement`))}function GB(e,t){let n=!!t.sameIndent,r=!!t.smallerIndent,i=t.listIndent,a=e;for(;a&&a.name==`listItem`;){let e=a.getAttribute(`listIndent`);if(n&&i==e||r&&i>e)return a;a=t.direction===`forward`?a.nextSibling:a.previousSibling}return null}function KB(e){for(let t of e.getChildren())if(t.name==`ul`||t.name==`ol`)return t;return null}function qB(e,t){let n=[],r=e.parent,i={ignoreElementEnd:!1,startPosition:e,shallow:!0,direction:t},a=r.getAttribute(`listIndent`),o=[...new Xc(i)].filter(e=>e.item.is(`element`)).map(e=>e.item);for(let e of o){if(!e.is(`element`,`listItem`)||e.getAttribute(`listIndent`)a)){if(e.getAttribute(`listType`)!==r.getAttribute(`listType`)||e.getAttribute(`listStyle`)!==r.getAttribute(`listStyle`)||e.getAttribute(`listReversed`)!==r.getAttribute(`listReversed`)||e.getAttribute(`listStart`)!==r.getAttribute(`listStart`))break;t===`backward`?n.unshift(e):n.push(e)}}return n}function JB(e){let t=[...e.document.selection.getSelectedBlocks()].filter(e=>e.is(`element`,`listItem`)).map(t=>{let n=e.change(e=>e.createPositionAt(t,0));return[...qB(n,`backward`),...qB(n,`forward`)]}).flat();return t=[...new Set(t)],t}const YB=[`disc`,`circle`,`square`],XB=[`decimal`,`decimal-leading-zero`,`lower-roman`,`upper-roman`,`lower-latin`,`upper-latin`];function ZB(e){return YB.includes(e)?`bulleted`:XB.includes(e)?`numbered`:null}function QB(){let e=!this.isEmpty&&(this.getChild(0).name==`ul`||this.getChild(0).name==`ol`);return this.isEmpty||e?0:$o.call(this)}var $B=class extends F{static get pluginName(){return`LegacyListUtils`}static get isOfficialPlugin(){return!0}getListTypeFromListStyleType(e){return ZB(e)}getSelectedListItems(e){return JB(e)}getSiblingNodes(e,t){return qB(e,t)}};function eV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`))return;i.consume(n.item,`insert`),i.consume(n.item,`attribute:listType`),i.consume(n.item,`attribute:listIndent`);let a=n.item;HB(a,VB(a,r),r,e)}}function tV(e){return(t,n,r)=>{let i=r.mapper.toViewPosition(n.position).getLastMatchingPosition(e=>!e.item.is(`element`,`li`)).nodeAfter,a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o),l=a.remove(c);s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(r.mapper.toModelElement(i).getAttribute(`listIndent`)+1,n.position,c.start,i,r,e);for(let e of a.createRangeIn(l).getItems())r.mapper.unbindViewElement(e);t.stop()}}const nV=(e,t,n)=>{if(!n.consumable.test(t.item,e.name))return;let r=n.mapper.toViewElement(t.item),i=n.writer;i.breakContainer(i.createPositionBefore(r)),i.breakContainer(i.createPositionAfter(r));let a=r.parent,o=t.attributeNewValue==`numbered`?`ol`:`ul`;i.rename(o,a)},rV=(e,t,n)=>{n.consumable.consume(t.item,e.name);let r=n.mapper.toViewElement(t.item).parent,i=n.writer;UB(i,r,r.nextSibling),UB(i,r.previousSibling,r)};function iV(e){return(t,n,r)=>{if(!r.consumable.consume(n.item,`attribute:listIndent`))return;let i=r.mapper.toViewElement(n.item),a=r.writer;a.breakContainer(a.createPositionBefore(i)),a.breakContainer(a.createPositionAfter(i));let o=i.parent,s=o.previousSibling,c=a.createRangeOn(o);a.remove(c),s&&s.nextSibling&&UB(a,s,s.nextSibling),gV(n.attributeOldValue+1,n.range.start,c.start,i,r,e),HB(n.item,i,r,e);for(let e of n.item.getChildren())r.consumable.consume(e,`insert`)}}const aV=(e,t,n)=>{if(n.consumable.test(t.item,e.name)&&t.item.name!=`listItem`){let e=n.mapper.toViewPosition(t.range.start),r=n.writer,i=[];for(;(e.parent.name==`ul`||e.parent.name==`ol`)&&(e=r.breakContainer(e),e.parent.name==`li`);){let t=e,n=r.createPositionAt(e.parent,`end`);if(!t.isEqual(n)){let e=r.remove(r.createRange(t,n));i.push(e)}e=r.createPositionAfter(e.parent)}if(i.length>0){for(let t=0;t0){let t=UB(r,n,n.nextSibling);t&&t.parent==n&&e.offset--}}UB(r,e.nodeBefore,e.nodeAfter)}}},oV=(e,t,n)=>{let r=n.mapper.toViewPosition(t.position),i=r.nodeBefore,a=r.nodeAfter;UB(n.writer,i,a)},sV=(e,t,n)=>{if(n.consumable.consume(t.viewItem,{name:!0})){let e=n.writer,r=e.createElement(`listItem`),i=vV(t.viewItem);e.setAttribute(`listIndent`,i,r);let a=t.viewItem.parent&&t.viewItem.parent.name==`ol`?`numbered`:`bulleted`;if(e.setAttribute(`listType`,a,r),!n.safeInsert(r,t.modelCursor))return;let o=mV(r,t.viewItem.getChildren(),n);t.modelRange=e.createRange(t.modelCursor,o),n.updateConversionResult(r,t)}},cV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){let e=Array.from(t.viewItem.getChildren());for(let t of e)t.is(`element`,`li`)||_V(t)||t._remove()}},lV=(e,t,n)=>{if(n.consumable.test(t.viewItem,{name:!0})){if(t.viewItem.childCount===0)return;let e=[...t.viewItem.getChildren()],n=!1;for(let t of e)n&&!_V(t)&&t._remove(),_V(t)&&(n=!0)}};function uV(e){return(t,n)=>{if(n.isPhantom)return;let r=n.modelPosition.nodeBefore;if(r&&r.is(`element`,`listItem`)){let t=n.mapper.toViewElement(r),i=t.getAncestors().find(_V),a=e.createPositionAt(t,0).getWalker();for(let e of a)if(e.type==`elementStart`&&e.item.is(`element`,`li`)){n.viewPosition=e.previousPosition;break}else if(e.type==`elementEnd`&&e.item==i){n.viewPosition=e.nextPosition;break}}}}function dV(e){return(t,n)=>{let r=n.viewPosition,i=r.parent,a=n.mapper;if(i.name==`ul`||i.name==`ol`){if(r.isAtEnd){let t=a.toModelElement(r.nodeBefore),i=a.getModelLength(r.nodeBefore);n.modelPosition=e.createPositionBefore(t).getShiftedBy(i)}else{let t=a.toModelElement(r.nodeAfter);n.modelPosition=e.createPositionBefore(t)}t.stop()}else if(i.name==`li`&&r.nodeBefore&&(r.nodeBefore.name==`ul`||r.nodeBefore.name==`ol`)){let o=a.toModelElement(i),s=1,c=r.nodeBefore;for(;c&&_V(c);)s+=a.getModelLength(c),c=c.previousSibling;n.modelPosition=e.createPositionBefore(o).getShiftedBy(s),t.stop()}}}function fV(e,t){let n=e.document.differ.getChanges(),r=new Map,i=!1;for(let r of n)if(r.type==`insert`&&r.name==`listItem`)a(r.position);else if(r.type==`insert`&&r.name!=`listItem`){if(r.name!=`$text`){let n=r.position.nodeAfter;n.hasAttribute(`listIndent`)&&(t.removeAttribute(`listIndent`,n),i=!0),n.hasAttribute(`listType`)&&(t.removeAttribute(`listType`,n),i=!0),n.hasAttribute(`listStyle`)&&(t.removeAttribute(`listStyle`,n),i=!0),n.hasAttribute(`listReversed`)&&(t.removeAttribute(`listReversed`,n),i=!0),n.hasAttribute(`listStart`)&&(t.removeAttribute(`listStart`,n),i=!0);for(let t of Array.from(e.createRangeIn(n)).filter(e=>e.item.is(`element`,`listItem`)))a(t.previousPosition)}a(r.position.getShiftedBy(r.length))}else r.type==`remove`&&r.name==`listItem`?a(r.position):(r.type==`attribute`&&r.attributeKey==`listIndent`||r.type==`attribute`&&r.attributeKey==`listType`)&&a(r.range.start);for(let e of r.values())o(e),s(e);return i;function a(e){let t=e.nodeBefore;if(!t||!t.is(`element`,`listItem`)){let t=e.nodeAfter;t&&t.is(`element`,`listItem`)&&r.set(t,t)}else{let e=t;if(r.has(e))return;for(let t=e.previousSibling;t&&t.is(`element`,`listItem`);t=e.previousSibling)if(e=t,r.has(e))return;r.set(t,e)}}function o(e){let n=0,r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(a>n){let o;r===null?(r=a-n,o=n):(r>a&&(r=a),o=a-r),t.setAttribute(`listIndent`,o,e),i=!0}else r=null,n=e.getAttribute(`listIndent`)+1;e=e.nextSibling}}function s(e){let n=[],r=null;for(;e&&e.is(`element`,`listItem`);){let a=e.getAttribute(`listIndent`);if(r&&r.getAttribute(`listIndent`)>a&&(n=n.slice(0,a+1)),a!=0)if(n[a]){let r=n[a];e.getAttribute(`listType`)!=r&&(t.setAttribute(`listType`,r,e),i=!0)}else n[a]=e.getAttribute(`listType`);r=e,e=e.nextSibling}}}const pV=function(e,[t,n]){let r=this,i=t.is(`documentFragment`)?t.getChild(0):t,a;if(a=n?r.createSelection(n):r.document.selection,i&&i.is(`element`,`listItem`)){let e=a.getFirstPosition(),t=null;if(e.parent.is(`element`,`listItem`)?t=e.parent:e.nodeBefore&&e.nodeBefore.is(`element`,`listItem`)&&(t=e.nodeBefore),t){let e=t.getAttribute(`listIndent`);if(e>0)for(;i&&i.is(`element`,`listItem`);)i._setAttribute(`listIndent`,i.getAttribute(`listIndent`)+e),i=i.nextSibling}}};function mV(e,t,n){let{writer:r,schema:i}=n,a=r.createPositionAfter(e);for(let o of t)if(o.name==`ul`||o.name==`ol`)a=n.convertItem(o,a).modelCursor;else{let t=n.convertItem(o,r.createPositionAt(e,`end`)),s=t.modelRange.start.nodeAfter;s&&s.is(`element`)&&!i.checkChild(e,s.name)&&(e=t.modelCursor.parent.is(`element`,`listItem`)?t.modelCursor.parent:hV(t.modelCursor),a=r.createPositionAfter(e))}return a}function hV(e){let t=new Xc({startPosition:e}),n;do n=t.next();while(!n.value.item.is(`element`,`listItem`));return n.value.item}function gV(e,t,n,r,i,a){let o=GB(t.nodeBefore,{sameIndent:!0,smallerIndent:!0,listIndent:e}),s=i.mapper,c=i.writer,l=o?o.getAttribute(`listIndent`):null,u;if(!o)u=n;else if(l==e){let e=s.toViewElement(o).parent;u=c.createPositionAfter(e)}else{let e=a.createPositionAt(o,`end`);u=s.toViewPosition(e)}u=WB(u);for(let e of[...r.getChildren()])_V(e)&&(u=c.move(c.createRangeOn(e),u).end,UB(c,e,e.nextSibling),UB(c,e.previousSibling,e))}function _V(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function vV(e){let t=0,n=e.parent;for(;n;){if(n.is(`element`,`li`))t++;else{let e=n.previousSibling;e&&e.is(`element`,`li`)&&t++}n=n.parent}return t}var yV=class extends F{static get pluginName(){return`LegacyListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[TE,hT,$B]}init(){let e=this.editor;e.model.schema.register(`listItem`,{inheritAllFrom:`$block`,allowAttributes:[`listType`,`listIndent`]});let t=e.data,n=e.editing;e.model.document.registerPostFixer(t=>fV(e.model,t)),n.mapper.registerViewToModelLength(`li`,bV),t.mapper.registerViewToModelLength(`li`,bV),n.mapper.on(`modelToViewPosition`,uV(n.view)),n.mapper.on(`viewToModelPosition`,dV(e.model)),t.mapper.on(`modelToViewPosition`,uV(n.view)),e.conversion.for(`editingDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model)),t.on(`attribute:listType:listItem`,nV,{priority:`high`}),t.on(`attribute:listType:listItem`,rV,{priority:`low`}),t.on(`attribute:listIndent:listItem`,iV(e.model)),t.on(`remove:listItem`,tV(e.model)),t.on(`remove`,oV,{priority:`low`})}),e.conversion.for(`dataDowncast`).add(t=>{t.on(`insert`,aV,{priority:`high`}),t.on(`insert:listItem`,eV(e.model))}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ul`,cV,{priority:`high`}),e.on(`element:ol`,cV,{priority:`high`}),e.on(`element:li`,lV,{priority:`high`}),e.on(`element:li`,sV)}),e.model.on(`insertContent`,pV,{priority:`high`}),e.commands.add(`numberedList`,new IB(e,`numbered`)),e.commands.add(`bulletedList`,new IB(e,`bulleted`)),e.commands.add(`indentList`,new zB(e,`forward`)),e.commands.add(`outdentList`,new zB(e,`backward`));let r=n.view.document;this.listenTo(r,`enter`,(e,t)=>{let n=this.editor.model.document,r=n.selection.getLastPosition().parent;n.selection.isCollapsed&&r.name==`listItem`&&r.isEmpty&&(this.editor.execute(`outdentList`),t.preventDefault(),e.stop())},{context:`li`}),this.listenTo(r,`delete`,(e,t)=>{if(t.direction!==`backward`)return;let n=this.editor.model.document.selection;if(!n.isCollapsed)return;let r=n.getFirstPosition();if(!r.isAtStart)return;let i=r.parent;i.name===`listItem`&&(i.previousSibling&&i.previousSibling.name===`listItem`||(this.editor.execute(`outdentList`),t.preventDefault(),e.stop()))},{context:`li`}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentList`:`indentList`;this.editor.commands.get(r).isEnabled&&(e.execute(r),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`})}afterInit(){let e=this.editor.commands,t=e.get(`indent`),n=e.get(`outdent`);t&&t.registerChildCommand(e.get(`indentList`)),n&&n.registerChildCommand(e.get(`outdentList`))}};function bV(e){let t=1;for(let n of e.getChildren())if(n.name==`ul`||n.name==`ol`)for(let e of n.getChildren())t+=bV(e);return t}var xV=class extends F{static get requires(){return[yV,Kz]}static get pluginName(){return`LegacyList`}static get isOfficialPlugin(){return!0}},SV=class extends I{defaultType;constructor(e,t){super(e),this.defaultType=t}refresh(){this.value=this._getValue(),this.isEnabled=this._checkEnabled()}execute(e={}){this._tryToConvertItemsToList(e);let t=this.editor.model,n=JB(t);n.length&&t.change(t=>{for(let r of n)t.setAttribute(`listStyle`,e.type||this.defaultType,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)?e.getAttribute(`listStyle`):null}_checkEnabled(){let e=this.editor,t=e.commands.get(`numberedList`),n=e.commands.get(`bulletedList`);return t.isEnabled||n.isEnabled}_tryToConvertItemsToList(e){if(!e.type)return;let t=ZB(e.type);if(!t)return;let n=this.editor,r=`${t}List`;n.commands.get(r).value||n.execute(r)}},CV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute(e={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listReversed`,!!e.reversed,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listReversed`):null}},wV=class extends I{refresh(){let e=this._getValue();this.value=e,this.isEnabled=e!=null}execute({startIndex:e=1}={}){let t=this.editor.model,n=JB(t).filter(e=>e.getAttribute(`listType`)==`numbered`);t.change(t=>{for(let r of n)t.setAttribute(`listStart`,e>=0?e:1,r)})}_getValue(){let e=this.editor.model.document.selection.getFirstPosition().parent;return e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)==`numbered`?e.getAttribute(`listStart`):null}};const TV=`default`;var EV=class extends F{static get requires(){return[yV]}static get pluginName(){return`LegacyListPropertiesEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`list`,{properties:{styles:!0,startIndex:!1,reversed:!1}})}init(){let e=this.editor,t=e.model,n=DV(e.config.get(`list.properties`));t.schema.extend(`listItem`,{allowAttributes:n.map(e=>e.attributeName)});for(let t of n)t.addCommand(e);this.listenTo(e.commands.get(`indentList`),`_executeCleanup`,AV(e,n)),this.listenTo(e.commands.get(`outdentList`),`_executeCleanup`,jV(e,n)),this.listenTo(e.commands.get(`bulletedList`),`_executeCleanup`,IV(e)),this.listenTo(e.commands.get(`numberedList`),`_executeCleanup`,IV(e)),t.document.registerPostFixer(MV(e,n)),e.conversion.for(`upcast`).add(OV(n)),e.conversion.for(`downcast`).add(kV(n)),this._mergeListAttributesWhileMergingLists(n)}afterInit(){let e=this.editor;e.commands.get(`todoList`)&&e.model.document.registerPostFixer(FV(e))}_mergeListAttributesWhileMergingLists(e){let t=this.editor.model,n;this.listenTo(t,`deleteContent`,(e,[t])=>{let r=t.getFirstPosition(),i=t.getLastPosition();if(r.parent===i.parent||!r.parent.is(`element`,`listItem`))return;let a=i.parent.nextSibling;if(!a||!a.is(`element`,`listItem`))return;let o=GB(r.parent,{sameIndent:!0,listIndent:a.getAttribute(`listIndent`)});o&&o.getAttribute(`listType`)===a.getAttribute(`listType`)&&(n=o)},{priority:`high`}),this.listenTo(t,`deleteContent`,()=>{n&&=(t.change(t=>{let r=GB(n.nextSibling,{sameIndent:!0,listIndent:n.getAttribute(`listIndent`),direction:`forward`});if(!r){n=null;return}let i=[r,...qB(t.createPositionAt(r,0),`forward`)];for(let r of i)for(let i of e)if(i.appliesToListItem(r)){let e=i.attributeName,a=n.getAttribute(e);t.setAttribute(e,a,r)}}),null)},{priority:`low`})}};function DV(e){let t=[];return e.styles&&t.push({attributeName:`listStyle`,defaultValue:TV,addCommand(e){e.commands.add(`listStyle`,new SV(e,TV))},appliesToListItem(){return!0},setAttributeOnDowncast(e,t,n){t&&t!==TV?e.setStyle(`list-style-type`,t,n):e.removeStyle(`list-style-type`,n)},getAttributeOnUpcast(e){return rB(e.getStyle(`list-style-type`))||TV}}),e.reversed&&t.push({attributeName:`listReversed`,defaultValue:!1,addCommand(e){e.commands.add(`listReversed`,new CV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t?e.setAttribute(`reversed`,`reversed`,n):e.removeAttribute(`reversed`,n)},getAttributeOnUpcast(e){return e.hasAttribute(`reversed`)}}),e.startIndex&&t.push({attributeName:`listStart`,defaultValue:1,addCommand(e){e.commands.add(`listStart`,new wV(e))},appliesToListItem(e){return e.getAttribute(`listType`)==`numbered`},setAttributeOnDowncast(e,t,n){t==0||t>1?e.setAttribute(`start`,t,n):e.removeAttribute(`start`,n)},getAttributeOnUpcast(e){let t=e.getAttribute(`start`);return t>=0?t:1}}),t}function OV(e){return t=>{t.on(`element:li`,(t,n,r)=>{if(!n.modelRange)return;let i=n.viewItem.parent,a=n.modelRange.start.nodeAfter||n.modelRange.end.nodeBefore;for(let t of e)if(t.appliesToListItem(a)){let e=t.getAttributeOnUpcast(i);r.writer.setAttribute(t.attributeName,e,a)}},{priority:`low`})}}function kV(e){return n=>{for(let r of e)n.on(`attribute:${r.attributeName}:listItem`,(e,n,i)=>{let a=i.writer,o=n.item,s=GB(o.previousSibling,{sameIndent:!0,listIndent:o.getAttribute(`listIndent`),direction:`backward`}),c=i.mapper.toViewElement(o);t(o,s)||a.breakContainer(a.createPositionBefore(c)),r.setAttributeOnDowncast(a,n.attributeNewValue,c.parent)},{priority:`low`})};function t(e,t){return t&&e.getAttribute(`listType`)===t.getAttribute(`listType`)&&e.getAttribute(`listIndent`)===t.getAttribute(`listIndent`)&&e.getAttribute(`listStyle`)===t.getAttribute(`listStyle`)&&e.getAttribute(`listReversed`)===t.getAttribute(`listReversed`)&&e.getAttribute(`listStart`)===t.getAttribute(`listStart`)}}function AV(e,t){return(n,r)=>{let i=r[0],a=i.getAttribute(`listIndent`),o=r.filter(e=>e.getAttribute(`listIndent`)===a),s=null;i.previousSibling.getAttribute(`listIndent`)+1!==a&&(s=GB(i.previousSibling,{sameIndent:!0,direction:`backward`,listIndent:a})),e.model.change(e=>{for(let n of o)for(let r of t)if(r.appliesToListItem(n)){let t=s==null?r.defaultValue:s.getAttribute(r.attributeName);e.setAttribute(r.attributeName,t,n)}})}}function jV(e,t){return(n,r)=>{if(r=r.reverse().filter(e=>e.is(`element`,`listItem`)),!r.length)return;let i=r[0].getAttribute(`listIndent`),a=r[0].getAttribute(`listType`),o=r[0].previousSibling;if(o.is(`element`,`listItem`))for(;o.getAttribute(`listIndent`)!==i;)o=o.previousSibling;else o=null;o||=r[r.length-1].nextSibling,!(!o||!o.is(`element`,`listItem`))&&o.getAttribute(`listType`)===a&&e.model.change(e=>{let n=r.filter(e=>e.getAttribute(`listIndent`)===i);for(let r of n)for(let n of t)if(n.appliesToListItem(r)){let t=n.attributeName,i=o.getAttribute(t);e.setAttribute(t,i,r)}})}}function MV(e,t){return n=>{let r=!1,i=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)!==`todo`);if(!i.length)return r;let a=i[i.length-1].nextSibling;if((!a||!a.is(`element`,`listItem`))&&(a=i[0].previousSibling,a)){let e=i[0].getAttribute(`listIndent`);for(;a.is(`element`,`listItem`)&&a.getAttribute(`listIndent`)!==e&&(a=a.previousSibling,a););}for(let e of t){let t=e.attributeName;for(let o of i){if(!e.appliesToListItem(o)){n.removeAttribute(t,o);continue}if(!o.hasAttribute(t))NV(a,o,e)?n.setAttribute(t,a.getAttribute(t),o):n.setAttribute(t,e.defaultValue,o),r=!0;else{let i=o.previousSibling;PV(i,o,e.attributeName)&&(n.setAttribute(t,i.getAttribute(t),o),r=!0)}}}return r}}function NV(e,t,n){if(!e)return!1;let r=e.getAttribute(n.attributeName);return!(!r||r==n.defaultValue||e.getAttribute(`listType`)!==t.getAttribute(`listType`))}function PV(e,t,n){if(!e||!e.is(`element`,`listItem`)||t.getAttribute(`listType`)!==e.getAttribute(`listType`))return!1;let r=e.getAttribute(`listIndent`);if(r<1||r!==t.getAttribute(`listIndent`))return!1;let i=e.getAttribute(n);return!(!i||i===t.getAttribute(n))}function FV(e){return t=>{let n=LV(e.model.document.differ.getChanges()).filter(e=>e.getAttribute(`listType`)===`todo`&&(e.hasAttribute(`listStyle`)||e.hasAttribute(`listReversed`)||e.hasAttribute(`listStart`)));if(!n.length)return!1;for(let e of n)t.removeAttribute(`listStyle`,e),t.removeAttribute(`listReversed`,e),t.removeAttribute(`listStart`,e);return!0}}function IV(e){return(t,n)=>{n=n.filter(e=>e.is(`element`,`listItem`)),e.model.change(e=>{for(let t of n)e.removeAttribute(`listStyle`,t)})}}function LV(e){let t=[];for(let n of e){let e=RV(n);e&&e.is(`element`,`listItem`)&&t.push(e)}return t}function RV(e){return e.type===`attribute`?e.range.start.nodeAfter:e.type===`insert`?e.position.nodeAfter:null}var zV=class extends F{static get requires(){return[EV,mB]}static get pluginName(){return`LegacyListProperties`}static get isOfficialPlugin(){return!0}};const BV=`todoListChecked`;var VV=class extends I{_selectedElements;constructor(e){super(e),this._selectedElements=[],this.on(`execute`,()=>{this.refresh()},{priority:`highest`})}refresh(){this._selectedElements=this._getSelectedItems(),this.value=this._selectedElements.every(e=>!!e.getAttribute(BV)),this.isEnabled=!!this._selectedElements.length}_getSelectedItems(){let e=this.editor.model,t=e.schema,n=e.document.selection.getFirstRange(),r=n.start.parent,i=[];t.checkAttribute(r,BV)&&i.push(r);for(let e of n.getItems())t.checkAttribute(e,BV)&&!i.includes(e)&&i.push(e);return i}execute(e={}){this.editor.model.change(t=>{for(let n of this._selectedElements)(e.forceValue===void 0?!this.value:e.forceValue)?t.setAttribute(BV,!0,n):t.removeAttribute(BV,n)})}};function HV(e,t){return(n,r,i)=>{let a=i.consumable;if(!a.test(r.item,`insert`)||!a.test(r.item,`attribute:listType`)||!a.test(r.item,`attribute:listIndent`)||r.item.getAttribute(`listType`)!=`todo`)return;let o=r.item;a.consume(o,`insert`),a.consume(o,`attribute:listType`),a.consume(o,`attribute:listIndent`),a.consume(o,`attribute:todoListChecked`);let s=i.writer,c=VB(o,i),l=JV(o,s,!!o.getAttribute(`todoListChecked`),t),u=s.createContainerElement(`span`,{class:`todo-list__label__description`});s.addClass(`todo-list`,c.parent),s.insert(s.createPositionAt(c,0),l),s.insert(s.createPositionAfter(l),u),HB(o,c,i,e)}}function UV(e){return(t,n,r)=>{let i=r.consumable;if(!i.test(n.item,`insert`)||!i.test(n.item,`attribute:listType`)||!i.test(n.item,`attribute:listIndent`)||n.item.getAttribute(`listType`)!=`todo`)return;let a=n.item;i.consume(a,`insert`),i.consume(a,`attribute:listType`),i.consume(a,`attribute:listIndent`),i.consume(a,`attribute:todoListChecked`);let o=r.writer,s=VB(a,r);o.addClass(`todo-list`,s.parent);let c=o.createContainerElement(`label`,{class:`todo-list__label`}),l=o.createEmptyElement(`input`,{type:`checkbox`,disabled:`disabled`}),u=o.createContainerElement(`span`,{class:`todo-list__label__description`});a.getAttribute(`todoListChecked`)&&o.setAttribute(`checked`,`checked`,l),o.insert(o.createPositionAt(s,0),c),o.insert(o.createPositionAt(c,0),l),o.insert(o.createPositionAfter(l),u),HB(a,s,r,e)}}const WV=(e,t,n)=>{let r=t.modelCursor,i=r.parent,a=t.viewItem;if(a.getAttribute(`type`)!=`checkbox`||i.name!=`listItem`||!r.isAtStart||!n.consumable.consume(a,{name:!0}))return;let o=n.writer;o.setAttribute(`listType`,`todo`,i),t.viewItem.hasAttribute(`checked`)&&o.setAttribute(`todoListChecked`,!0,i),t.modelRange=o.createRange(r)};function GV(e,t){return(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=i.mapper.toViewElement(r.item),o=i.writer,s=YV(a,t);if(r.attributeNewValue==`todo`){let t=!!r.item.getAttribute(`todoListChecked`),n=JV(r.item,o,t,e),i=o.createContainerElement(`span`,{class:`todo-list__label__description`}),s=o.createRangeIn(a),c=KB(a),l=WB(s.start),u=c?o.createPositionBefore(c):s.end,d=o.createRange(l,u);o.addClass(`todo-list`,a.parent),o.move(d,o.createPositionAt(i,0)),o.insert(o.createPositionAt(a,0),n),o.insert(o.createPositionAfter(n),i)}else if(r.attributeOldValue==`todo`){let e=XV(a,t);o.removeClass(`todo-list`,a.parent),o.remove(s),o.move(o.createRangeIn(e),o.createPositionBefore(e)),o.remove(e)}}}function KV(e){return(t,n,r)=>{if(n.item.getAttribute(`listType`)!=`todo`||!r.consumable.consume(n.item,`attribute:todoListChecked`))return;let{mapper:i,writer:a}=r,o=!!n.item.getAttribute(`todoListChecked`),s=i.toViewElement(n.item).getChild(0),c=JV(n.item,a,o,e);a.insert(a.createPositionAfter(s),c),a.remove(s)}}function qV(e){return(t,n)=>{let r=n.modelPosition,i=r.parent;if(!i.is(`element`,`listItem`)||i.getAttribute(`listType`)!=`todo`)return;let a=XV(n.mapper.toViewElement(i),e);a&&(n.viewPosition=n.mapper.findPositionIn(a,r.offset))}}function JV(e,t,n,r){return t.createUIElement(`label`,{class:`todo-list__label`,contenteditable:!1},function(t){let i=mr(document,`input`,{type:`checkbox`,tabindex:`-1`});n&&i.setAttribute(`checked`,`checked`),i.addEventListener(`change`,()=>r(e));let a=this.toDomElement(t);return a.appendChild(i),a})}function YV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`uiElement`,`label`))return e.item}function XV(e,t){let n=t.createRangeIn(e);for(let e of n)if(e.item.is(`containerElement`,`span`)&&e.item.hasClass(`todo-list__label__description`))return e.item}const ZV=yi(`Ctrl+Enter`);var QV=class extends F{static get pluginName(){return`LegacyTodoListEditing`}static get isOfficialPlugin(){return!0}static get requires(){return[yV]}init(){let e=this.editor,{editing:t,data:n,model:r}=e;r.schema.extend(`listItem`,{allowAttributes:[`todoListChecked`]}),r.schema.addAttributeCheck((e,t)=>{let n=e.last;if(t==`todoListChecked`&&n.name==`listItem`&&n.getAttribute(`listType`)!=`todo`)return!1}),e.commands.add(`todoList`,new IB(e,`todo`));let i=new VV(e);e.commands.add(`checkTodoList`,i),e.commands.add(`todoListCheck`,i),n.downcastDispatcher.on(`insert:listItem`,UV(r),{priority:`high`}),n.upcastDispatcher.on(`element:input`,WV,{priority:`high`}),t.downcastDispatcher.on(`insert:listItem`,HV(r,e=>this._handleCheckmarkChange(e)),{priority:`high`}),t.downcastDispatcher.on(`attribute:listType:listItem`,GV(e=>this._handleCheckmarkChange(e),t.view)),t.downcastDispatcher.on(`attribute:todoListChecked:listItem`,KV(e=>this._handleCheckmarkChange(e))),t.mapper.on(`modelToViewPosition`,qV(t.view)),n.mapper.on(`modelToViewPosition`,qV(t.view)),this.listenTo(t.view.document,`arrowKey`,$V(r,e.locale),{context:`li`}),this.listenTo(t.view.document,`keydown`,(t,n)=>{vi(n)===ZV&&(e.execute(`checkTodoList`),t.stop())},{priority:`high`});let a=new Set;this.listenTo(r,`applyOperation`,(e,t)=>{let n=t[0];if(n.type==`rename`&&n.oldName==`listItem`){let e=n.position.nodeAfter;e.hasAttribute(`todoListChecked`)&&a.add(e)}else if(n.type==`changeAttribute`&&n.key==`listType`&&n.oldValue===`todo`)for(let e of n.range.getItems())e.hasAttribute(`todoListChecked`)&&e.getAttribute(`listType`)!==`todo`&&a.add(e)}),r.document.registerPostFixer(e=>{let t=!1;for(let n of a)e.removeAttribute(`todoListChecked`,n),t=!0;return a.clear(),t}),this._initAriaAnnouncements()}_handleCheckmarkChange(e){let t=this.editor,n=t.model,r=Array.from(n.document.selection.getRanges());n.change(n=>{n.setSelection(e,`end`),t.execute(`checkTodoList`),n.setSelection(r)})}_initAriaAnnouncements(){let{model:e,ui:t,t:n}=this.editor,r=null;t&&e.document.selection.on(`change:range`,()=>{let i=e.document.selection.focus.parent,a=eH(r),o=eH(i);a&&!o?t.ariaLiveAnnouncer.announce(n(`Leaving a to-do list`)):!a&&o&&t.ariaLiveAnnouncer.announce(n(`Entering a to-do list`)),r=i})}};function $V(e,t){return(n,r)=>{if(Si(r.keyCode,t.contentLanguageDirection)!=`left`)return;let i=e.schema,a=e.document.selection;if(!a.isCollapsed)return;let o=a.getFirstPosition(),s=o.parent;if(s.name===`listItem`&&s.getAttribute(`listType`)==`todo`&&o.isAtStart){let t=i.getNearestSelectionRange(e.createPositionBefore(s),`backward`);t&&e.change(e=>e.setSelection(t)),r.preventDefault(),r.stopPropagation(),n.stop()}}}function eH(e){return!!e&&e.is(`element`,`listItem`)&&e.getAttribute(`listType`)===`todo`}var tH=class extends F{static get requires(){return[QV,PB]}static get pluginName(){return`LegacyTodoList`}static get isOfficialPlugin(){return!0}},nH=class extends F{static get pluginName(){return`AdjacentListsSupport`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.model.schema.register(`listSeparator`,{allowWhere:`$block`,isBlock:!0}),e.conversion.for(`upcast`).add(e=>{e.on(`element:ol`,rH()),e.on(`element:ul`,rH())}).elementToElement({model:`listSeparator`,view:`ck-list-separator`}),e.conversion.for(`editingDowncast`).elementToElement({model:`listSeparator`,view:{name:`div`,classes:[`ck-list-separator`,`ck-hidden`]}}),e.conversion.for(`dataDowncast`).elementToElement({model:`listSeparator`,view:(e,t)=>{let n=t.writer.createContainerElement(`ck-list-separator`);return t.writer.setCustomProperty(`dataPipeline:transparentRendering`,!0,n),n.getFillerOffset=()=>null,n}})}};function rH(){return(e,t,n)=>{let r=t.viewItem,i=r.nextSibling;if(!i||r.name!==i.name)return;t.modelRange||Object.assign(t,n.convertChildren(t.viewItem,t.modelCursor));let a=n.writer,o=a.createElement(`listSeparator`);if(!n.safeInsert(o,t.modelCursor))return;let s=n.getSplitParts(o);t.modelRange=a.createRange(t.modelRange.start,a.createPositionAfter(s[s.length-1])),n.updateConversionResult(o,t)}}var iH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){let e=this._getFirstListItemIfSelectionIsAtListStart(this.editor.model.document.selection);this.isEnabled=!!e&&this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentList`))}execute(e={}){let t=this.editor,n=t.model,r=n.document.selection,i=t.plugins.get(`ListUtils`);n.change(t=>{let a=this._getFirstListItemIfSelectionIsAtListStart(r),o=[];if(e.firstListOnly)o.push(a);else{let e=Array.from(r.getSelectedBlocks());for(let t of e)G(t)&&t.getAttribute(`listIndent`)===0&&n.schema.checkAttribute(t,`blockIndentList`)&&o.push(t)}let s=i.expandListBlocksToCompleteList(o);for(let e of s){let n=e.getAttribute(`blockIndentList`),r=this._indentBehavior.getNextIndent(n);r?t.setAttribute(`blockIndentList`,r,e):t.removeAttribute(`blockIndentList`,e)}})}_getFirstListItemIfSelectionIsAtListStart(e){let t=e.getFirstPosition(),n=this.editor.plugins.get(`ListUtils`),r=t.parent,i=this.editor.model.schema;return t.isAtStart&&G(r)&&r.getAttribute(`listIndent`)==0&&i.checkAttribute(r,`blockIndentList`)&&n.isFirstListItemInList(r)?r:null}},aH=class extends I{_indentBehavior;constructor(e,t){super(e),this._indentBehavior=t}refresh(){this.isEnabled=this._getAffectedListItems().length>0}execute(){this.editor.model.change(e=>{for(let t of this._getAffectedListItems())e.removeAttribute(`blockIndentListItem`,t)})}_getAffectedListItems(){let e=this.editor.model.document.selection,t=this.editor.plugins.get(`ListUtils`),n=Array.from(e.getSelectedBlocks());return t.expandListBlocksToCompleteItems(n).filter(e=>this._isIndentationChangeAllowed(e))}_isIndentationChangeAllowed(e){return e.hasAttribute(`blockIndentListItem`)?this._indentBehavior.checkEnabled(e.getAttribute(`blockIndentListItem`)):!1}},oH=class extends CR{checkEnabled(e){let t=parseFloat(e);return this.isForward&&t<0||!this.isForward&&t>0}},sH=class extends wR{checkEnabled(e){return!this.isForward&&!!e}},cH=class extends F{static get pluginName(){return`IndentBlockListIntegration`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;if(!this.editor.plugins.has(`ListEditing`))return;let t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes,`ol`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`ul`,`blockIndentList`,`list`),this._setupConversionUsingClasses(t.classes,`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockList`,new iH(e,new wR({direction:`backward`,classes:t.classes}))),e.commands.add(`indentBlockListItem`,new aH(e,new sH({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlockListItem`,new aH(e,new sH({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(`ol`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`ul`,`blockIndentList`,`list`),this._setupConversionUsingOffset(`li`,`blockIndentListItem`,`item`),e.commands.add(`indentBlockList`,new iH(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockList`,new iH(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))),e.commands.add(`indentBlockListItem`,new aH(e,new oH({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlockListItem`,new aH(e,new oH({direction:`backward`,offset:t.offset,unit:t.unit})))),e.plugins.get(`ListEditing`).on(`postFixer`,(e,{listNodes:t,writer:n})=>{for(let{node:r,previousNodeInList:i}of t)i&&i.getAttribute(`listType`)==r.getAttribute(`listType`)&&(uH(`blockIndentList`,r,i,n)&&(e.return=!0),i.getAttribute(`listItemId`)==r.getAttribute(`listItemId`)&&uH(`blockIndentListItem`,r,i,n)&&(e.return=!0))}),this.listenTo(e.editing.view.document,`tab`,(t,n)=>{let r=n.shiftKey?`outdentBlockList`:`indentBlockList`;this.editor.commands.get(r).isEnabled&&(e.execute(r,{firstListOnly:!0}),n.stopPropagation(),n.preventDefault(),t.stop())},{context:`li`,priority:`high`})}afterInit(){let e=this.editor,t=e.model,n=t.schema;if(!e.plugins.has(`ListEditing`))return;n.extend(`$listItem`,{allowAttributes:[`blockIndentList`,`blockIndentListItem`]}),n.setAttributeProperties(`blockIndentList`,{isFormatting:!0}),n.setAttributeProperties(`blockIndentListItem`,{isFormatting:!0}),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentList`),t.schema.addAttributeCheck(e=>{if(!e.last.getAttribute(`listItemId`))return!1},`blockIndentListItem`);let r=(t,n)=>{e.model.change(e=>{for(let t of n)t.hasAttribute(`listItemId`)&&(t.hasAttribute(`blockIndentList`)&&e.removeAttribute(`blockIndentList`,t),t.hasAttribute(`blockIndentListItem`)&&e.removeAttribute(`blockIndentListItem`,t))})},i=e.commands.get(`indentList`),a=e.commands.get(`outdentList`);i&&this.listenTo(i,`afterExecute`,r),a&&this.listenTo(a,`afterExecute`,r);let o=e.commands.get(`indent`),s=e.commands.get(`outdent`);o.registerChildCommand(e.commands.get(`indentBlockList`),{priority:`highest`}),s.registerChildCommand(e.commands.get(`outdentBlockList`)),o.registerChildCommand(e.commands.get(`indentBlockListItem`)),s.registerChildCommand(e.commands.get(`outdentBlockListItem`))}_setupConversionUsingOffset(e,t,n){let r=this.editor,i=r.locale,a=r.conversion,o=i.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`,s=r.plugins.get(`ListEditing`);a.for(`upcast`).add(n=>{n.on(`element:${e}`,lH(t,e=>e.getStyle(o),(e,t)=>e.consume(t,{styles:o})),{priority:`low`})}),s.registerDowncastStrategy({scope:n,attributeName:t,setAttributeOnDowncast(e,t,n){t&&e.setStyle(o,t,n)}})}_setupConversionUsingClasses(e,t,n,r){let i=this.editor,a=i.conversion,o=i.plugins.get(`ListEditing`);a.for(`upcast`).add(r=>{r.on(`element:${t}`,lH(n,t=>e.find(e=>t.hasClass(e)),(e,t,n)=>e.consume(t,{classes:n})),{priority:`low`})}),o.registerDowncastStrategy({scope:r,attributeName:n,setAttributeOnDowncast(e,t,n){t&&e.addClass(t,n)}})}};function lH(e,t,n){return(r,i,a)=>{let{writer:o,consumable:s}=a;i.modelRange||Object.assign(i,a.convertChildren(i.viewItem,i.modelCursor));let c=t(i.viewItem);if(c===void 0)return;let l=!1,u;for(let t of i.modelRange.getItems({shallow:!0}))u===void 0&&(u=t.getAttribute(`listIndent`)),!t.hasAttribute(e)&&t.getAttribute(`listIndent`)===u&&(o.setAttribute(e,c,t),l=!0);l&&n(s,i.viewItem,c)}}function uH(e,t,n,r){let i=n.getAttribute(e);return t.getAttribute(e)===i?!1:(i?r.setAttribute(e,i,t):r.removeAttribute(e,t),!0)}const dH=[`paragraph`,`heading1`,`heading2`,`heading3`,`heading4`,`heading5`,`heading6`];var fH=class extends F{constructor(e){super(e),e.config.define(`indentBlock`,{offset:40,unit:`px`})}static get pluginName(){return`IndentBlock`}static get isOfficialPlugin(){return!0}static get requires(){return[cH]}init(){let e=this.editor,t=e.config.get(`indentBlock`);t.classes&&t.classes.length?(this._setupConversionUsingClasses(t.classes),e.commands.add(`indentBlock`,new SR(e,new wR({direction:`forward`,classes:t.classes}))),e.commands.add(`outdentBlock`,new SR(e,new wR({direction:`backward`,classes:t.classes})))):(e.data.addStyleProcessorRules(Wm),this._setupConversionUsingOffset(),e.commands.add(`indentBlock`,new SR(e,new CR({direction:`forward`,offset:t.offset,unit:t.unit}))),e.commands.add(`outdentBlock`,new SR(e,new CR({direction:`backward`,offset:t.offset,unit:t.unit}))))}afterInit(){let e=this.editor,t=e.model.schema,n=e.commands.get(`indent`),r=e.commands.get(`outdent`),i=e.config.get(`heading.options`);(i&&i.map(e=>e.model)||dH).forEach(e=>{t.isRegistered(e)&&t.extend(e,{allowAttributes:`blockIndent`})}),t.setAttributeProperties(`blockIndent`,{isFormatting:!0}),n.registerChildCommand(e.commands.get(`indentBlock`)),r.registerChildCommand(e.commands.get(`outdentBlock`))}_setupConversionUsingOffset(){let e=this.editor.conversion,t=this.editor.locale.contentLanguageDirection===`rtl`?`margin-right`:`margin-left`;e.for(`upcast`).attributeToAttribute({view:{styles:{[t]:/[\\s\\S]+/}},model:{key:`blockIndent`,value:e=>{if(!e.is(`element`,`li`))return e.getStyle(t)}}}),e.for(`downcast`).attributeToAttribute({model:`blockIndent`,view:e=>({key:`style`,value:{[t]:e}})})}_setupConversionUsingClasses(e){let t={model:{key:`blockIndent`,values:[]},view:{}};for(let n of e)t.model.values.push(n),t.view[n]={key:`class`,value:[n]};this.editor.conversion.attributeToAttribute(t)}};function pH(e,t){return t||=Ti(e),`${e}:${t}`}function mH(e){let[t,n]=e.split(`:`);return{languageCode:t,textDirection:n}}var hH=class extends I{refresh(){let e=this.editor.model,t=e.document;this.value=this._getValueFromFirstAllowedNode(),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,`language`)}execute({languageCode:e,textDirection:t}={}){let n=this.editor.model,r=n.document.selection,i=e?pH(e,t):!1;n.change(e=>{if(r.isCollapsed)i?e.setSelectionAttribute(`language`,i):e.removeSelectionAttribute(`language`);else{let t=n.schema.getValidRanges(r.getRanges(),`language`,{includeEmptyRanges:!0});for(let n of t){let t=n,r=`language`;n.isCollapsed&&(t=n.start.parent,r=Tl._getStoreAttributeKey(`language`)),i?e.setAttribute(r,i,t):e.removeAttribute(r,t)}}})}_getValueFromFirstAllowedNode(){let e=this.editor.model,t=e.schema,n=e.document.selection;if(n.isCollapsed)return n.getAttribute(`language`)||!1;for(let e of n.getRanges())for(let n of e.getItems())if(t.checkAttribute(n,`language`))return n.getAttribute(`language`)||!1;return!1}},gH=class extends F{static get pluginName(){return`TextPartLanguageEditing`}static get isOfficialPlugin(){return!0}constructor(e){super(e),e.config.define(`language`,{textPartLanguage:[{title:`Arabic`,languageCode:`ar`},{title:`French`,languageCode:`fr`},{title:`Spanish`,languageCode:`es`}]})}init(){let e=this.editor;e.model.schema.extend(`$text`,{allowAttributes:`language`}),e.model.schema.setAttributeProperties(`language`,{copyOnEnter:!0}),this._defineConverters(),e.commands.add(`textPartLanguage`,new hH(e))}_defineConverters(){let e=this.editor.conversion;e.for(`upcast`).elementToAttribute({model:{key:`language`,value:e=>pH(e.getAttribute(`lang`),e.getAttribute(`dir`))},view:{name:`span`,attributes:{lang:/[\\s\\S]+/}}}),e.for(`downcast`).attributeToElement({model:`language`,view:(e,{writer:t},n)=>{if(!e||!n.item.is(`$textProxy`)&&!n.item.is(`documentSelection`))return;let{languageCode:r,textDirection:i}=mH(e);return t.createAttributeElement(`span`,{lang:r,dir:i})}})}},_H=class extends F{static get pluginName(){return`TextPartLanguageUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.t,n=t(`Choose language`),r=t(`Language`);e.ui.componentFactory.add(`textPartLanguage`,t=>{let{definitions:i,titles:a}=this._getItemMetadata(),o=e.commands.get(`textPartLanguage`),s=Nx(t);return Lx(s,i,{ariaLabel:r,role:`menu`}),s.buttonView.set({ariaLabel:r,ariaLabelledBy:void 0,isOn:!1,withText:!0,tooltip:r}),s.extendTemplate({attributes:{class:[`ck-text-fragment-language-dropdown`]}}),s.bind(`isEnabled`).to(o,`isEnabled`),s.buttonView.bind(`label`).to(o,`value`,e=>e&&a[e]||n),s.buttonView.bind(`ariaLabel`).to(o,`value`,e=>{let t=e&&a[e];return t?`${t}, ${r}`:r}),this.listenTo(s,`execute`,t=>{o.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),s}),e.ui.componentFactory.add(`menuBar:textPartLanguage`,n=>{let{definitions:i}=this._getItemMetadata(),a=e.commands.get(`textPartLanguage`),o=new uw(n);o.buttonView.set({label:r});let s=new dw(n);s.set({ariaLabel:t(`Language`),role:`menu`});for(let e of i){if(e.type!=`button`){s.items.add(new fx(n));continue}let t=new rC(n,o),r=new U(n);r.set({role:`menuitemradio`,isToggleable:!0}),r.bind(...Object.keys(e.model)).to(e.model),r.delegate(`execute`).to(o),t.children.add(r),s.items.add(t)}return o.bind(`isEnabled`).to(a,`isEnabled`),o.panelView.children.add(s),o.on(`execute`,t=>{a.execute({languageCode:t.source.languageCode,textDirection:t.source.textDirection}),e.editing.view.focus()}),o})}_getItemMetadata(){let e=this.editor,t=new Fi,n={},r=e.commands.get(`textPartLanguage`),i=e.config.get(`language.textPartLanguage`),a=e.locale.t,o=a(`Remove language`);t.add({type:`button`,model:new RC({label:o,languageCode:!1,withText:!0})}),t.add({type:`separator`});for(let e of i){let i={type:`button`,model:new RC({label:e.title,languageCode:e.languageCode,role:`menuitemradio`,textDirection:e.textDirection,withText:!0})},a=pH(e.languageCode,e.textDirection);i.model.bind(`isOn`).to(r,`value`,e=>e===a),t.add(i),n[a]=e.title}return{definitions:t,titles:n}}},vH=class extends F{static get requires(){return[gH,_H]}static get pluginName(){return`TextPartLanguage`}static get isOfficialPlugin(){return!0}};function yH(e){if(e)throw e}var bH=o(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,i=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=function(e){return typeof Array.isArray==`function`?Array.isArray(e):r.call(e)===`[object Array]`},s=function(e){if(!e||r.call(e)!==`[object Object]`)return!1;var t=n.call(e,`constructor`),i=e.constructor&&e.constructor.prototype&&n.call(e.constructor.prototype,`isPrototypeOf`);if(e.constructor&&!t&&!i)return!1;for(var a in e);return a===void 0||n.call(e,a)},c=function(e,t){i&&t.name===`__proto__`?i(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},l=function(e,t){if(t===`__proto__`){if(!n.call(e,t))return;if(a)return a(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,a,u,d=arguments[0],f=1,p=arguments.length,m=!1;for(typeof d==`boolean`&&(m=d,d=arguments[1]||{},f=2),(d==null||typeof d!=`object`&&typeof d!=`function`)&&(d={});ft.length,o;r&&t.push(i);try{o=e.apply(this,t)}catch(e){let t=e;if(r&&n)throw t;return i(t)}r||(o&&o.then&&typeof o.then==`function`?o.then(a,i):o instanceof Error?i(o):a(o))}function i(e,...r){n||(n=!0,t(e,...r))}function a(e){i(null,e)}}function wH(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?EH(e.position):`start`in e||`end`in e?EH(e):`line`in e||`column`in e?TH(e):``}function TH(e){return DH(e&&e.line)+`:`+DH(e&&e.column)}function EH(e){return TH(e&&e.start)+`-`+TH(e&&e.end)}function DH(e){return e&&typeof e==`number`?e:1}var OH=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=wH(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};OH.prototype.file=``,OH.prototype.name=``,OH.prototype.reason=``,OH.prototype.message=``,OH.prototype.stack=``,OH.prototype.column=void 0,OH.prototype.line=void 0,OH.prototype.ancestors=void 0,OH.prototype.cause=void 0,OH.prototype.fatal=void 0,OH.prototype.place=void 0,OH.prototype.ruleId=void 0,OH.prototype.source=void 0;const kH={basename:AH,dirname:jH,extname:MH,join:NH,sep:`/`};function AH(e,t){if(t!==void 0&&typeof t!=`string`)throw TypeError(`\"ext\" argument must be a string`);IH(e);let n=0,r=-1,i=e.length,a;if(t===void 0||t.length===0||t.length>e.length){for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else r<0&&(a=!0,r=i+1);return r<0?``:e.slice(n,r)}if(t===e)return``;let o=-1,s=t.length-1;for(;i--;)if(e.codePointAt(i)===47){if(a){n=i+1;break}}else o<0&&(a=!0,o=i+1),s>-1&&(e.codePointAt(i)===t.codePointAt(s--)?s<0&&(r=i):(s=-1,r=o));return n===r?r=o:r<0&&(r=e.length),e.slice(n,r)}function jH(e){if(IH(e),e.length===0)return`.`;let t=-1,n=e.length,r;for(;--n;)if(e.codePointAt(n)===47){if(r){t=n;break}}else r||=!0;return t<0?e.codePointAt(0)===47?`/`:`.`:t===1&&e.codePointAt(0)===47?`//`:e.slice(0,t)}function MH(e){IH(e);let t=e.length,n=-1,r=0,i=-1,a=0,o;for(;t--;){let s=e.codePointAt(t);if(s===47){if(o){r=t+1;break}continue}n<0&&(o=!0,n=t+1),s===46?i<0?i=t:a!==1&&(a=1):i>-1&&(a=-1)}return i<0||n<0||a===0||a===1&&i===n-1&&i===r+1?``:e.slice(i,n)}function NH(...e){let t=-1,n;for(;++t0&&e.codePointAt(e.length-1)===47&&(n+=`/`),t?`/`+n:n}function FH(e,t){let n=``,r=0,i=-1,a=0,o=-1,s,c;for(;++o<=e.length;){if(o2){if(c=n.lastIndexOf(`/`),c!==n.length-1){c<0?(n=``,r=0):(n=n.slice(0,c),r=n.length-1-n.lastIndexOf(`/`)),i=o,a=0;continue}}else if(n.length>0){n=``,r=0,i=o,a=0;continue}}t&&(n=n.length>0?n+`/..`:`..`,r=2)}else n.length>0?n+=`/`+e.slice(i+1,o):n=e.slice(i+1,o),r=o-i-1;i=o,a=0}else s===46&&a>-1?a++:a=-1}return n}function IH(e){if(typeof e!=`string`)throw TypeError(`Path must be a string. Received `+JSON.stringify(e))}const LH={cwd:RH};function RH(){return`/`}function zH(e){return!!(typeof e==`object`&&e&&`href`in e&&e.href&&`protocol`in e&&e.protocol&&e.auth===void 0)}function BH(e){if(typeof e==`string`)e=new URL(e);else if(!zH(e)){let t=TypeError('The \"path\" argument must be of type string or an instance of URL. Received `'+e+\"`\");throw t.code=`ERR_INVALID_ARG_TYPE`,t}if(e.protocol!==`file:`){let e=TypeError(`The URL must be of scheme file`);throw e.code=`ERR_INVALID_URL_SCHEME`,e}return VH(e)}function VH(e){if(e.hostname!==``){let e=TypeError(`File URL host must be \"localhost\" or empty on darwin`);throw e.code=`ERR_INVALID_FILE_URL_HOST`,e}let t=e.pathname,n=-1;for(;++n0){let[r,...a]=t,o=n[i][1];xH(o)&&xH(r)&&(r=(0,YH.default)(!0,o,r)),n[i]=[e,r,...a]}}}}().freeze();function QH(e,t){if(typeof t!=`function`)throw TypeError(\"Cannot `\"+e+\"` without `parser`\")}function $H(e,t){if(typeof t!=`function`)throw TypeError(\"Cannot `\"+e+\"` without `compiler`\")}function eU(e,t){if(t)throw Error(\"Cannot call `\"+e+\"` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.\")}function tU(e){if(!xH(e)||typeof e.type!=`string`)throw TypeError(\"Expected node, got `\"+e+\"`\")}function nU(e,t,n){if(!n)throw Error(\"`\"+e+\"` finished async. Use `\"+t+\"` instead\")}function rU(e){return iU(e)?e:new UH(e)}function iU(e){return!!(e&&typeof e==`object`&&`message`in e&&`messages`in e)}function aU(e){return typeof e==`string`||oU(e)}function oU(e){return!!(e&&typeof e==`object`&&`byteLength`in e&&`byteOffset`in e)}function sU(e,t){let n=String(e);if(typeof t!=`string`)throw TypeError(`Expected character`);let r=0,i=n.indexOf(t);for(;i!==-1;)r++,i=n.indexOf(t,i+t.length);return r}const cU=vU(/[A-Za-z]/),lU=vU(/[\\dA-Za-z]/),uU=vU(/[#-'*+\\--9=?A-Z^-~]/);function dU(e){return e!==null&&(e<32||e===127)}const fU=vU(/\\d/),pU=vU(/[\\dA-Fa-f]/),mU=vU(/[!-/:-@[-`{-~]/);function K(e){return e!==null&&e<-2}function hU(e){return e!==null&&(e<0||e===32)}function q(e){return e===-2||e===-1||e===32}const gU=vU(/\\p{P}|\\p{S}/u),_U=vU(/\\s/);function vU(e){return t;function t(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function yU(e){if(typeof e!=`string`)throw TypeError(`Expected a string`);return e.replace(/[|\\\\{}()[\\]^$+*?.]/g,`\\\\$&`).replace(/-/g,`\\\\x2d`)}const bU=(function(e){if(e==null)return TU;if(typeof e==`function`)return wU(e);if(typeof e==`object`)return Array.isArray(e)?xU(e):SU(e);if(typeof e==`string`)return CU(e);throw Error(`Expected function, string, or object as test`)});function xU(e){let t=[],n=-1;for(;++n`:``))+`)`})}return u;function u(){let l=OU,u,d,f;if((!t||a(e,i,c[c.length-1]||void 0))&&(l=AU(n(e,c)),l[0]===!1))return l;if(`children`in e&&e.children){let t=e;if(t.children&&l[0]!==`skip`)for(d=(r?t.children.length:-1)+o,f=c.concat(t);d>-1&&d0?{type:`text`,value:a}:void 0),a===!1?r.lastIndex=n+1:(s!==n&&u.push({type:`text`,value:e.value.slice(s,n)}),Array.isArray(a)?u.push(...a):a&&u.push(a),s=n+d[0].length,l=!0),!r.global)break;d=r.exec(e.value)}return l?(s?\\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(`)`),i=sU(e,`(`),a=sU(e,`)`);for(;r!==-1&&i>a;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(`)`),a++;return[e,n]}function XU(e,t){let n=e.input.charCodeAt(e.index-1);return(e.index===0||_U(n)||gU(n))&&(!t||n!==47)}function ZU(e){return e.replace(/[\\t\\n\\r ]+/g,` `).replace(/^ | $/g,``).toLowerCase().toUpperCase()}sW.peek=oW;function QU(){this.buffer()}function $U(e){this.enter({type:`footnoteReference`,identifier:``,label:``},e)}function eW(){this.buffer()}function tW(e){this.enter({type:`footnoteDefinition`,identifier:``,label:``,children:[]},e)}function nW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function rW(e){this.exit(e)}function iW(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.identifier=ZU(this.sliceSerialize(e)).toLowerCase(),n.label=t}function aW(e){this.exit(e)}function oW(){return`[`}function sW(e,t,n,r){let i=n.createTracker(r),a=i.move(`[^`),o=n.enter(`footnoteReference`),s=n.enter(`reference`);return a+=i.move(n.safe(n.associationId(e),{after:`]`,before:a})),s(),o(),a+=i.move(`]`),a}function cW(){return{enter:{gfmFootnoteCallString:QU,gfmFootnoteCall:$U,gfmFootnoteDefinitionLabelString:eW,gfmFootnoteDefinition:tW},exit:{gfmFootnoteCallString:nW,gfmFootnoteCall:rW,gfmFootnoteDefinitionLabelString:iW,gfmFootnoteDefinition:aW}}}function lW(e){let t=!1;return e&&e.firstLineBlank&&(t=!0),{handlers:{footnoteDefinition:n,footnoteReference:sW},unsafe:[{character:`[`,inConstruct:[`label`,`phrasing`,`reference`]}]};function n(e,n,r,i){let a=r.createTracker(i),o=a.move(`[^`),s=r.enter(`footnoteDefinition`),c=r.enter(`label`);return o+=a.move(r.safe(r.associationId(e),{before:o,after:`]`})),c(),o+=a.move(`]:`),e.children&&e.children.length>0&&(a.shift(4),o+=a.move((t?`\n`:` `)+r.indentLines(r.containerFlow(e,a.current()),t?dW:uW))),s(),o}}function uW(e,t,n){return t===0?e:dW(e,t,n)}function dW(e,t,n){return(n?``:` `)+e}const fW=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`];_W.peek=vW;function pW(){return{canContainEols:[`delete`],enter:{strikethrough:hW},exit:{strikethrough:gW}}}function mW(){return{unsafe:[{character:`~`,inConstruct:`phrasing`,notInConstruct:fW}],handlers:{delete:_W}}}function hW(e){this.enter({type:`delete`,children:[]},e)}function gW(e){this.exit(e)}function _W(e,t,n,r){let i=n.createTracker(r),a=n.enter(`strikethrough`),o=i.move(`~~`);return o+=n.containerPhrasing(e,{...i.current(),before:o,after:`~`}),o+=i.move(`~~`),a(),o}function vW(){return`~`}function yW(e){return e.length}function bW(e,t){let n=t||{},r=(n.align||[]).concat(),i=n.stringLength||yW,a=[],o=[],s=[],c=[],l=0,u=-1;for(;++ul&&(l=e[u].length);++ac[a])&&(c[a]=e)}t.push(o)}o[u]=t,s[u]=r}let d=-1;if(typeof r==`object`&&`length`in r)for(;++dc[d]&&(c[d]=i),p[d]=i),f[d]=o}o.splice(1,0,f),s.splice(1,0,p),u=-1;let m=[];for(;++u `),a.shift(2);let o=n.indentLines(n.containerFlow(e,a.current()),AW);return i(),o}function AW(e,t,n){return`>`+(n?``:` `)+e}function jW(e,t){return MW(e,t.inConstruct,!0)&&!MW(e,t.notInConstruct,!1)}function MW(e,t,n){if(typeof t==`string`&&(t=[t]),!t||t.length===0)return n;let r=-1;for(;++ro&&(o=a):a=1,i=r+t.length,r=n.indexOf(t,i);return o}function FW(e,t){return!!(t.options.fences===!1&&e.value&&!e.lang&&/[^ \\r\\n]/.test(e.value)&&!/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(e.value))}function IW(e){let t=e.options.fence||\"`\";if(t!==\"`\"&&t!==`~`)throw Error(\"Cannot serialize code with `\"+t+\"` for `options.fence`, expected `` ` `` or `~`\");return t}function LW(e,t,n,r){let i=IW(n),a=e.value||``,o=i===\"`\"?`GraveAccent`:`Tilde`;if(FW(e,n)){let e=n.enter(`codeIndented`),t=n.indentLines(a,RW);return e(),t}let s=n.createTracker(r),c=i.repeat(Math.max(PW(a,i)+1,3)),l=n.enter(`codeFenced`),u=s.move(c);if(e.lang){let t=n.enter(`codeFencedLang${o}`);u+=s.move(n.safe(e.lang,{before:u,after:` `,encode:[\"`\"],...s.current()})),t()}if(e.lang&&e.meta){let t=n.enter(`codeFencedMeta${o}`);u+=s.move(` `),u+=s.move(n.safe(e.meta,{before:u,after:`\n`,encode:[\"`\"],...s.current()})),t()}return u+=s.move(`\n`),a&&(u+=s.move(a+`\n`)),u+=s.move(c),l(),u}function RW(e,t,n){return(n?``:` `)+e}function zW(e){let t=e.options.quote||`\"`;if(t!==`\"`&&t!==`'`)throw Error(\"Cannot serialize title with `\"+t+\"` for `options.quote`, expected `\\\"`, or `'`\");return t}function BW(e,t,n,r){let i=zW(n),a=i===`\"`?`Quote`:`Apostrophe`,o=n.enter(`definition`),s=n.enter(`label`),c=n.createTracker(r),l=c.move(`[`);return l+=c.move(n.safe(n.associationId(e),{before:l,after:`]`,...c.current()})),l+=c.move(`]: `),s(),!e.url||/[\\0- \\u007F]/.test(e.url)?(s=n.enter(`destinationLiteral`),l+=c.move(`<`),l+=c.move(n.safe(e.url,{before:l,after:`>`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`\n`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),o(),l}function VW(e){let t=e.options.emphasis||`*`;if(t!==`*`&&t!==`_`)throw Error(\"Cannot serialize emphasis with `\"+t+\"` for `options.emphasis`, expected `*`, or `_`\");return t}function HW(e){return`&#x`+e.toString(16).toUpperCase()+`;`}function UW(e){if(e===null||hU(e)||_U(e))return 1;if(gU(e))return 2}function WW(e,t,n){let r=UW(e),i=UW(t);return r===void 0?i===void 0?n===`_`?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:r===1?i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:i===void 0?{inside:!1,outside:!1}:i===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}GW.peek=KW;function GW(e,t,n,r){let i=VW(n),a=n.enter(`emphasis`),o=n.createTracker(r),s=o.move(i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function KW(e,t,n){return n.options.emphasis||`*`}function qW(e,t,n,r){let i,a,o;typeof t==`function`&&typeof n!=`function`?(a=void 0,o=t,i=n):(a=t,o=n,i=r),kU(e,a,s,i);function s(e,t){let n=t[t.length-1],r=n?n.children.indexOf(e):void 0;return o(e,r,n)}}const JW={};function YW(e,t){let n=t||JW;return XW(e,typeof n.includeImageAlt==`boolean`?n.includeImageAlt:!0,typeof n.includeHtml==`boolean`?n.includeHtml:!0)}function XW(e,t,n){if(QW(e)){if(`value`in e)return e.type===`html`&&!n?``:e.value;if(t&&`alt`in e&&e.alt)return e.alt;if(`children`in e)return ZW(e.children,t,n)}return Array.isArray(e)?ZW(e,t,n):``}function ZW(e,t,n){let r=[],i=-1;for(;++i`,...c.current()})),l+=c.move(`>`)):(s=n.enter(`destinationRaw`),l+=c.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...c.current()}))),s(),e.title&&(s=n.enter(`title${a}`),l+=c.move(` `+i),l+=c.move(n.safe(e.title,{before:l,after:i,...c.current()})),l+=c.move(i),s()),l+=c.move(`)`),o(),l}function iG(){return`!`}aG.peek=oG;function aG(e,t,n,r){let i=e.referenceType,a=n.enter(`imageReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`![`),l=n.safe(e.alt,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function oG(){return`!`}sG.peek=cG;function sG(e,t,n){let r=e.value||``,i=\"`\",a=-1;for(;RegExp(\"(^|[^`])\"+i+\"([^`]|$)\").test(r);)i+=\"`\";for(/[^ \\r\\n]/.test(r)&&(/^[ \\r\\n]/.test(r)&&/[ \\r\\n]$/.test(r)||/^`|`$/.test(r))&&(r=` `+r+` `);++a\\u007F]/.test(e.url))}uG.peek=dG;function uG(e,t,n,r){let i=zW(n),a=i===`\"`?`Quote`:`Apostrophe`,o=n.createTracker(r),s,c;if(lG(e,n)){let t=n.stack;n.stack=[],s=n.enter(`autolink`);let r=o.move(`<`);return r+=o.move(n.containerPhrasing(e,{before:r,after:`>`,...o.current()})),r+=o.move(`>`),s(),n.stack=t,r}s=n.enter(`link`),c=n.enter(`label`);let l=o.move(`[`);return l+=o.move(n.containerPhrasing(e,{before:l,after:`](`,...o.current()})),l+=o.move(`](`),c(),!e.url&&e.title||/[\\0- \\u007F]/.test(e.url)?(c=n.enter(`destinationLiteral`),l+=o.move(`<`),l+=o.move(n.safe(e.url,{before:l,after:`>`,...o.current()})),l+=o.move(`>`)):(c=n.enter(`destinationRaw`),l+=o.move(n.safe(e.url,{before:l,after:e.title?` `:`)`,...o.current()}))),c(),e.title&&(c=n.enter(`title${a}`),l+=o.move(` `+i),l+=o.move(n.safe(e.title,{before:l,after:i,...o.current()})),l+=o.move(i),c()),l+=o.move(`)`),s(),l}function dG(e,t,n){return lG(e,n)?`<`:`[`}fG.peek=pG;function fG(e,t,n,r){let i=e.referenceType,a=n.enter(`linkReference`),o=n.enter(`label`),s=n.createTracker(r),c=s.move(`[`),l=n.containerPhrasing(e,{before:c,after:`]`,...s.current()});c+=s.move(l+`][`),o();let u=n.stack;n.stack=[],o=n.enter(`reference`);let d=n.safe(n.associationId(e),{before:c,after:`]`,...s.current()});return o(),n.stack=u,a(),i===`full`||!l||l!==d?c+=s.move(d+`]`):i===`shortcut`?c=c.slice(0,-1):c+=s.move(`]`),c}function pG(){return`[`}function mG(e){let t=e.options.bullet||`*`;if(t!==`*`&&t!==`+`&&t!==`-`)throw Error(\"Cannot serialize items with `\"+t+\"` for `options.bullet`, expected `*`, `+`, or `-`\");return t}function hG(e){let t=mG(e),n=e.options.bulletOther;if(!n)return t===`*`?`-`:`*`;if(n!==`*`&&n!==`+`&&n!==`-`)throw Error(\"Cannot serialize items with `\"+n+\"` for `options.bulletOther`, expected `*`, `+`, or `-`\");if(n===t)throw Error(\"Expected `bullet` (`\"+t+\"`) and `bulletOther` (`\"+n+\"`) to be different\");return n}function gG(e){let t=e.options.bulletOrdered||`.`;if(t!==`.`&&t!==`)`)throw Error(\"Cannot serialize items with `\"+t+\"` for `options.bulletOrdered`, expected `.` or `)`\");return t}function _G(e){let t=e.options.rule||`*`;if(t!==`*`&&t!==`-`&&t!==`_`)throw Error(\"Cannot serialize rules with `\"+t+\"` for `options.rule`, expected `*`, `-`, or `_`\");return t}function vG(e,t,n,r){let i=n.enter(`list`),a=n.bulletCurrent,o=e.ordered?gG(n):mG(n),s=e.ordered?o===`.`?`)`:`.`:hG(n),c=t&&n.bulletLastUsed?o===n.bulletLastUsed:!1;if(!e.ordered){let t=e.children?e.children[0]:void 0;if((o===`*`||o===`-`)&&t&&(!t.children||!t.children[0])&&n.stack[n.stack.length-1]===`list`&&n.stack[n.stack.length-2]===`listItem`&&n.stack[n.stack.length-3]===`list`&&n.stack[n.stack.length-4]===`listItem`&&n.indexStack[n.indexStack.length-1]===0&&n.indexStack[n.indexStack.length-2]===0&&n.indexStack[n.indexStack.length-3]===0&&(c=!0),_G(n)===o&&t){let t=-1;for(;++t-1?t.start:1)+(n.options.incrementListMarker===!1?0:t.children.indexOf(e))+a);let o=a.length+1;(i===`tab`||i===`mixed`&&(t&&t.type===`list`&&t.spread||e.spread))&&(o=Math.ceil(o/4)*4);let s=n.createTracker(r);s.move(a+` `.repeat(o-a.length)),s.shift(o);let c=n.enter(`listItem`),l=n.indentLines(n.containerFlow(e,s.current()),u);return c(),l;function u(e,t,n){return t?(n?``:` `.repeat(o))+e:(n?a:a+` `.repeat(o-a.length))+e}}function xG(e,t,n,r){let i=n.enter(`paragraph`),a=n.enter(`phrasing`),o=n.containerPhrasing(e,r);return a(),i(),o}const SG=bU([`break`,`delete`,`emphasis`,`footnote`,`footnoteReference`,`image`,`imageReference`,`inlineCode`,`inlineMath`,`link`,`linkReference`,`mdxJsxTextElement`,`mdxTextExpression`,`strong`,`text`,`textDirective`]);function CG(e,t,n,r){return(e.children.some(function(e){return SG(e)})?n.containerPhrasing:n.containerFlow).call(n,e,r)}function wG(e){let t=e.options.strong||`*`;if(t!==`*`&&t!==`_`)throw Error(\"Cannot serialize strong with `\"+t+\"` for `options.strong`, expected `*`, or `_`\");return t}TG.peek=EG;function TG(e,t,n,r){let i=wG(n),a=n.enter(`strong`),o=n.createTracker(r),s=o.move(i+i),c=o.move(n.containerPhrasing(e,{after:i,before:s,...o.current()})),l=c.charCodeAt(0),u=WW(r.before.charCodeAt(r.before.length-1),l,i);u.inside&&(c=HW(l)+c.slice(1));let d=c.charCodeAt(c.length-1),f=WW(r.after.charCodeAt(0),d,i);f.inside&&(c=c.slice(0,-1)+HW(d));let p=o.move(i+i);return a(),n.attentionEncodeSurroundingInfo={after:f.outside,before:u.outside},s+c+p}function EG(e,t,n){return n.options.strong||`*`}function DG(e,t,n,r){return n.safe(e.value,r)}function OG(e){let t=e.options.ruleRepetition||3;if(t<3)throw Error(\"Cannot serialize rules with repetition `\"+t+\"` for `options.ruleRepetition`, expected `3` or more\");return t}function kG(e,t,n){let r=(_G(n)+(n.options.ruleSpaces?` `:``)).repeat(OG(n));return n.options.ruleSpaces?r.slice(0,-1):r}const AG={blockquote:kW,break:NW,code:LW,definition:BW,emphasis:GW,hardBreak:NW,heading:eG,html:tG,image:rG,imageReference:aG,inlineCode:sG,link:uG,linkReference:fG,list:vG,listItem:bG,paragraph:xG,root:CG,strong:TG,text:DG,thematicBreak:kG},jG=[MG];function MG(e,t,n,r){if(t.type===`code`&&FW(t,r)&&(e.type===`list`||e.type===t.type&&FW(e,r)))return!1;if(`spread`in n&&typeof n.spread==`boolean`)return e.type===`paragraph`&&(e.type===t.type||t.type===`definition`||t.type===`heading`&&$W(t,r))?void 0:+!!n.spread}const NG=[`autolink`,`destinationLiteral`,`destinationRaw`,`reference`,`titleQuote`,`titleApostrophe`],PG=[{character:`\t`,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`\t`,before:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`\t`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`\\r`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:`\n`,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`,`codeFencedMetaGraveAccent`,`codeFencedMetaTilde`,`destinationLiteral`,`headingAtx`]},{character:` `,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:` `,before:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:` `,inConstruct:[`codeFencedLangGraveAccent`,`codeFencedLangTilde`]},{character:`!`,after:`\\\\[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`\"`,inConstruct:`titleQuote`},{atBreak:!0,character:`#`},{character:`#`,inConstruct:`headingAtx`,after:`(?:[\\r\n]|$)`},{character:`&`,after:`[#A-Za-z]`,inConstruct:`phrasing`},{character:`'`,inConstruct:`titleApostrophe`},{character:`(`,inConstruct:`destinationRaw`},{before:`\\\\]`,character:`(`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,before:`\\\\d+`,character:`)`},{character:`)`,inConstruct:`destinationRaw`},{atBreak:!0,character:`*`,after:`(?:[ \t\\r\n*])`},{character:`*`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`+`,after:`(?:[ \t\\r\n])`},{atBreak:!0,character:`-`,after:`(?:[ \t\\r\n-])`},{atBreak:!0,before:`\\\\d+`,character:`.`,after:`(?:[ \t\\r\n]|$)`},{atBreak:!0,character:`<`,after:`[!/?A-Za-z]`},{character:`<`,after:`[!/?A-Za-z]`,inConstruct:`phrasing`,notInConstruct:NG},{character:`<`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`=`},{atBreak:!0,character:`>`},{character:`>`,inConstruct:`destinationLiteral`},{atBreak:!0,character:`[`},{character:`[`,inConstruct:`phrasing`,notInConstruct:NG},{character:`[`,inConstruct:[`label`,`reference`]},{character:`\\\\`,after:`[\\\\r\\\\n]`,inConstruct:`phrasing`},{character:`]`,inConstruct:[`label`,`reference`]},{atBreak:!0,character:`_`},{character:`_`,inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:\"`\"},{character:\"`\",inConstruct:[`codeFencedLangGraveAccent`,`codeFencedMetaGraveAccent`]},{character:\"`\",inConstruct:`phrasing`,notInConstruct:NG},{atBreak:!0,character:`~`}],FG=document.createElement(`i`);function IG(e){let t=`&`+e+`;`;FG.innerHTML=t;let n=FG.textContent;return n.charCodeAt(n.length-1)===59&&e!==`semi`||n===t?!1:n}function LG(e,t){let n=Number.parseInt(e,t);return n<9||n===11||n>13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(n&65535)==65535||(n&65535)==65534||n>1114111?`�`:String.fromCodePoint(n)}const RG=/\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;function zG(e){return e.replace(RG,BG)}function BG(e,t,n){if(t)return t;if(n.charCodeAt(0)===35){let e=n.charCodeAt(1),t=e===120||e===88;return LG(n.slice(t?2:1),t?16:10)}return IG(n)||e}function VG(e){return e.label||!e.identifier?e.label||``:zG(e.identifier)}function HG(e){if(!e._compiled){let t=(e.atBreak?`[\\\\r\\\\n][\\\\t ]*`:``)+(e.before?`(?:`+e.before+`)`:``);e._compiled=RegExp((t?`(`+t+`)`:``)+(/[|\\\\{}()[\\]^$+*?.-]/.test(e.character)?`\\\\`:``)+e.character+(e.after?`(?:`+e.after+`)`:``),`g`)}return e._compiled}function UG(e,t,n){let r=t.indexStack,i=e.children||[],a=[],o=-1,s=n.before,c;r.push(-1);let l=t.createTracker(n);for(;++o0&&(s===`\\r`||s===`\n`)&&u.type===`html`&&(a[a.length-1]=a[a.length-1].replace(/(\\r?\\n|\\r)$/,` `),s=` `,l=t.createTracker(n),l.move(a.join(``)));let f=t.handle(u,e,t,{...l.current(),after:d,before:s});c&&c===f.slice(0,1)&&(f=HW(c.charCodeAt(0))+f.slice(1));let p=t.attentionEncodeSurroundingInfo;t.attentionEncodeSurroundingInfo=void 0,c=void 0,p&&(a.length>0&&p.before&&s===a[a.length-1].slice(-1)&&(a[a.length-1]=a[a.length-1].slice(0,-1)+HW(s.charCodeAt(0))),p.after&&(c=d)),l.move(f),a.push(f),s=f.slice(-1)}return r.pop(),a.join(``)}function WG(e,t,n){let r=t.indexStack,i=e.children||[],a=t.createTracker(n),o=[],s=-1;for(r.push(-1);++s\n\n`}return`\n\n`}const KG=/\\r?\\n|\\r/g;function qG(e,t){let n=[],r=0,i=0,a;for(;a=KG.exec(e);)o(e.slice(r,a.index)),n.push(a[0]),r=a.index+a[0].length,i++;return o(e.slice(r)),n.join(``);function o(e){n.push(t(e,i,!e))}}function JG(e,t,n){let r=(n.before||``)+(t||``)+(n.after||``),i=[],a=[],o={},s=-1;for(;++s=l||e+1i?0:i+t:t>i?i:t,n=n>0?n:0,r.length<1e4)o=Array.from(r),o.unshift(t,n),e.splice(...o);else for(n&&e.splice(t,n);a0?(xK(e,e.length,0,t),e):t}const CK={}.hasOwnProperty;function wK(e){let t={},n=-1;for(;++n0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}function ZK(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&a<57344){let t=e.charCodeAt(n+1);a<56320&&t>56319&&t<57344?(o=String.fromCharCode(a,t),i=1):o=`�`}else o=String.fromCharCode(a);o&&=(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,``),i&&=(n+=i,0)}return t.join(``)+e.slice(r)}function QK(e,t,n){let r=[],i=-1;for(;++i1&&e[n][1].end.offset-e[n][1].start.offset>1?2:1;let d={...e[r][1].end},f={...e[n][1].start};nq(d,-c),nq(f,c),o={type:c>1?`strongSequence`:`emphasisSequence`,start:d,end:{...e[r][1].end}},s={type:c>1?`strongSequence`:`emphasisSequence`,start:{...e[n][1].start},end:f},a={type:c>1?`strongText`:`emphasisText`,start:{...e[r][1].end},end:{...e[n][1].start}},i={type:c>1?`strong`:`emphasis`,start:{...o.start},end:{...s.end}},e[r][1].end={...o.start},e[n][1].start={...s.end},l=[],e[r][1].end.offset-e[r][1].start.offset&&(l=SK(l,[[`enter`,e[r][1],t],[`exit`,e[r][1],t]])),l=SK(l,[[`enter`,i,t],[`enter`,o,t],[`exit`,o,t],[`enter`,a,t]]),l=SK(l,QK(t.parser.constructs.insideSpan.null,e.slice(r+1,n),t)),l=SK(l,[[`exit`,a,t],[`enter`,s,t],[`exit`,s,t],[`exit`,i,t]]),e[n][1].end.offset-e[n][1].start.offset?(u=2,l=SK(l,[[`enter`,e[n][1],t],[`exit`,e[n][1],t]])):u=0,xK(e,r-1,n-r+3,l),n=r+l.length-u-2;break}}for(n=-1;++n0&&q(t)?J(e,v,`linePrefix`,a+1)(t):v(t)}function v(t){return t===null||K(t)?e.check(hq,h,ee)(t):(e.enter(`codeFlowValue`),y(t))}function y(t){return t===null||K(t)?(e.exit(`codeFlowValue`),v(t)):(e.consume(t),y)}function ee(n){return e.exit(`codeFenced`),t(n)}function b(e,t,n){let i=0;return a;function a(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),c}function c(t){return e.enter(`codeFencedFence`),q(t)?J(e,l,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):l(t)}function l(t){return t===s?(e.enter(`codeFencedFenceSequence`),u(t)):n(t)}function u(t){return t===s?(i++,e.consume(t),u):i>=o?(e.exit(`codeFencedFenceSequence`),q(t)?J(e,d,`whitespace`)(t):d(t)):n(t)}function d(r){return r===null||K(r)?(e.exit(`codeFencedFence`),t(r)):n(r)}}}function vq(e,t,n){let r=this;return i;function i(t){return t===null?n(t):(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}const yq={name:`codeIndented`,tokenize:xq},bq={partial:!0,tokenize:Sq};function xq(e,t,n){let r=this;return i;function i(t){return e.enter(`codeIndented`),J(e,a,`linePrefix`,5)(t)}function a(e){let t=r.events[r.events.length-1];return t&&t[1].type===`linePrefix`&&t[2].sliceSerialize(t[1],!0).length>=4?o(e):n(e)}function o(t){return t===null?c(t):K(t)?e.attempt(bq,o,c)(t):(e.enter(`codeFlowValue`),s(t))}function s(t){return t===null||K(t)?(e.exit(`codeFlowValue`),o(t)):(e.consume(t),s)}function c(n){return e.exit(`codeIndented`),t(n)}}function Sq(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),i):J(e,a,`linePrefix`,5)(t)}function a(e){let a=r.events[r.events.length-1];return a&&a[1].type===`linePrefix`&&a[2].sliceSerialize(a[1],!0).length>=4?t(e):K(e)?i(e):n(e)}}const Cq={name:`codeText`,previous:Tq,resolve:wq,tokenize:Eq};function wq(e){let t=e.length-4,n=3,r,i;if((e[n][1].type===`lineEnding`||e[n][1].type===`space`)&&(e[t][1].type===`lineEnding`||e[t][1].type===`space`)){for(r=n;++r=this.left.length+this.right.length)throw RangeError(\"Cannot access index `\"+e+\"` in a splice buffer of size `\"+(this.left.length+this.right.length)+\"`\");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){let r=t||0;this.setCursor(Math.trunc(e));let i=this.right.splice(this.right.length-r,1/0);return n&&Oq(this.left,n),i.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),Oq(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Oq(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&this.right.length===0||e<0&&this.left.length===0))if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}function Iq(e,t,n,r,i,a,o,s,c){let l=c||1/0,u=0;return d;function d(t){return t===60?(e.enter(r),e.enter(i),e.enter(a),e.consume(t),e.exit(a),f):t===null||t===32||t===41||dU(t)?n(t):(e.enter(r),e.enter(o),e.enter(s),e.enter(`chunkString`,{contentType:`string`}),h(t))}function f(n){return n===62?(e.enter(a),e.consume(n),e.exit(a),e.exit(i),e.exit(r),t):(e.enter(s),e.enter(`chunkString`,{contentType:`string`}),p(n))}function p(t){return t===62?(e.exit(`chunkString`),e.exit(s),f(t)):t===null||t===60||K(t)?n(t):(e.consume(t),t===92?m:p)}function m(t){return t===60||t===62||t===92?(e.consume(t),p):p(t)}function h(i){return!u&&(i===null||i===41||hU(i))?(e.exit(`chunkString`),e.exit(s),e.exit(o),e.exit(r),t(i)):u999||l===null||l===91||l===93&&!c||l===94&&!s&&`_hiddenFootnoteSupport`in o.parser.constructs?n(l):l===93?(e.exit(a),e.enter(i),e.consume(l),e.exit(i),e.exit(r),t):K(l)?(e.enter(`lineEnding`),e.consume(l),e.exit(`lineEnding`),u):(e.enter(`chunkString`,{contentType:`string`}),d(l))}function d(t){return t===null||t===91||t===93||K(t)||s++>999?(e.exit(`chunkString`),u(t)):(e.consume(t),c||=!q(t),t===92?f:d)}function f(t){return t===91||t===92||t===93?(e.consume(t),s++,d):d(t)}}function Rq(e,t,n,r,i,a){let o;return s;function s(t){return t===34||t===39||t===40?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=t===40?41:t,c):n(t)}function c(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(a),l(n))}function l(t){return t===o?(e.exit(a),c(o)):t===null?n(t):K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),J(e,l,`linePrefix`)):(e.enter(`chunkString`,{contentType:`string`}),u(t))}function u(t){return t===o||t===null||K(t)?(e.exit(`chunkString`),l(t)):(e.consume(t),t===92?d:u)}function d(t){return t===o||t===92?(e.consume(t),u):u(t)}}function zq(e,t){let n;return r;function r(i){return K(i)?(e.enter(`lineEnding`),e.consume(i),e.exit(`lineEnding`),n=!0,r):q(i)?J(e,r,n?`linePrefix`:`lineSuffix`)(i):t(i)}}const Bq={name:`definition`,tokenize:Hq},Vq={partial:!0,tokenize:Uq};function Hq(e,t,n){let r=this,i;return a;function a(t){return e.enter(`definition`),o(t)}function o(t){return Lq.call(r,e,s,n,`definitionLabel`,`definitionLabelMarker`,`definitionLabelString`)(t)}function s(t){return i=ZU(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),c):n(t)}function c(t){return hU(t)?zq(e,l)(t):l(t)}function l(t){return Iq(e,u,n,`definitionDestination`,`definitionDestinationLiteral`,`definitionDestinationLiteralMarker`,`definitionDestinationRaw`,`definitionDestinationString`)(t)}function u(t){return e.attempt(Vq,d,d)(t)}function d(t){return q(t)?J(e,f,`whitespace`)(t):f(t)}function f(a){return a===null||K(a)?(e.exit(`definition`),r.parser.defined.push(i),t(a)):n(a)}}function Uq(e,t,n){return r;function r(t){return hU(t)?zq(e,i)(t):n(t)}function i(t){return Rq(e,a,n,`definitionTitle`,`definitionTitleMarker`,`definitionTitleString`)(t)}function a(t){return q(t)?J(e,o,`whitespace`)(t):o(t)}function o(e){return e===null||K(e)?t(e):n(e)}}const Wq={name:`hardBreakEscape`,tokenize:Gq};function Gq(e,t,n){return r;function r(t){return e.enter(`hardBreakEscape`),e.consume(t),i}function i(r){return K(r)?(e.exit(`hardBreakEscape`),t(r)):n(r)}}const Kq={name:`headingAtx`,resolve:qq,tokenize:Jq};function qq(e,t){let n=e.length-2,r=3,i,a;return e[r][1].type===`whitespace`&&(r+=2),n-2>r&&e[n][1].type===`whitespace`&&(n-=2),e[n][1].type===`atxHeadingSequence`&&(r===n-1||n-4>r&&e[n-2][1].type===`whitespace`)&&(n-=r+1===n?2:4),n>r&&(i={type:`atxHeadingText`,start:e[r][1].start,end:e[n][1].end},a={type:`chunkText`,start:e[r][1].start,end:e[n][1].end,contentType:`text`},xK(e,r,n-r+1,[[`enter`,i,t],[`enter`,a,t],[`exit`,a,t],[`exit`,i,t]])),e}function Jq(e,t,n){let r=0;return i;function i(t){return e.enter(`atxHeading`),a(t)}function a(t){return e.enter(`atxHeadingSequence`),o(t)}function o(t){return t===35&&r++<6?(e.consume(t),o):t===null||hU(t)?(e.exit(`atxHeadingSequence`),s(t)):n(t)}function s(n){return n===35?(e.enter(`atxHeadingSequence`),c(n)):n===null||K(n)?(e.exit(`atxHeading`),t(n)):q(n)?J(e,s,`whitespace`)(n):(e.enter(`atxHeadingText`),l(n))}function c(t){return t===35?(e.consume(t),c):(e.exit(`atxHeadingSequence`),s(t))}function l(t){return t===null||t===35||hU(t)?(e.exit(`atxHeadingText`),s(t)):(e.consume(t),l)}}const Yq=`address.article.aside.base.basefont.blockquote.body.caption.center.col.colgroup.dd.details.dialog.dir.div.dl.dt.fieldset.figcaption.figure.footer.form.frame.frameset.h1.h2.h3.h4.h5.h6.head.header.hr.html.iframe.legend.li.link.main.menu.menuitem.nav.noframes.ol.optgroup.option.p.param.search.section.summary.table.tbody.td.tfoot.th.thead.title.tr.track.ul`.split(`.`),Xq=[`pre`,`script`,`style`,`textarea`],Zq={concrete:!0,name:`htmlFlow`,resolveTo:eJ,tokenize:tJ},Qq={partial:!0,tokenize:rJ},$q={partial:!0,tokenize:nJ};function eJ(e){let t=e.length;for(;t--&&!(e[t][0]===`enter`&&e[t][1].type===`htmlFlow`););return t>1&&e[t-2][1].type===`linePrefix`&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function tJ(e,t,n){let r=this,i,a,o,s,c;return l;function l(e){return u(e)}function u(t){return e.enter(`htmlFlow`),e.enter(`htmlFlowData`),e.consume(t),d}function d(s){return s===33?(e.consume(s),f):s===47?(e.consume(s),a=!0,h):s===63?(e.consume(s),i=3,r.interrupt?t:fe):cU(s)?(e.consume(s),o=String.fromCharCode(s),g):n(s)}function f(a){return a===45?(e.consume(a),i=2,p):a===91?(e.consume(a),i=5,s=0,m):cU(a)?(e.consume(a),i=4,r.interrupt?t:fe):n(a)}function p(i){return i===45?(e.consume(i),r.interrupt?t:fe):n(i)}function m(i){return i===`CDATA[`.charCodeAt(s++)?(e.consume(i),s===6?r.interrupt?t:ie:m):n(i)}function h(t){return cU(t)?(e.consume(t),o=String.fromCharCode(t),g):n(t)}function g(s){if(s===null||s===47||s===62||hU(s)){let c=s===47,l=o.toLowerCase();return!c&&!a&&Xq.includes(l)?(i=1,r.interrupt?t(s):ie(s)):Yq.includes(o.toLowerCase())?(i=6,c?(e.consume(s),_):r.interrupt?t(s):ie(s)):(i=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(s):a?v(s):y(s))}return s===45||lU(s)?(e.consume(s),o+=String.fromCharCode(s),g):n(s)}function _(i){return i===62?(e.consume(i),r.interrupt?t:ie):n(i)}function v(t){return q(t)?(e.consume(t),v):S(t)}function y(t){return t===47?(e.consume(t),S):t===58||t===95||cU(t)?(e.consume(t),ee):q(t)?(e.consume(t),y):S(t)}function ee(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),ee):b(t)}function b(t){return t===61?(e.consume(t),x):q(t)?(e.consume(t),b):y(t)}function x(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),c=t,te):q(t)?(e.consume(t),x):ne(t)}function te(t){return t===c?(e.consume(t),c=null,re):t===null||K(t)?n(t):(e.consume(t),te)}function ne(t){return t===null||t===34||t===39||t===47||t===60||t===61||t===62||t===96||hU(t)?b(t):(e.consume(t),ne)}function re(e){return e===47||e===62||q(e)?y(e):n(e)}function S(t){return t===62?(e.consume(t),C):n(t)}function C(t){return t===null||K(t)?ie(t):q(t)?(e.consume(t),C):n(t)}function ie(t){return t===45&&i===2?(e.consume(t),ce):t===60&&i===1?(e.consume(t),le):t===62&&i===4?(e.consume(t),pe):t===63&&i===3?(e.consume(t),fe):t===93&&i===5?(e.consume(t),de):K(t)&&(i===6||i===7)?(e.exit(`htmlFlowData`),e.check(Qq,me,ae)(t)):t===null||K(t)?(e.exit(`htmlFlowData`),ae(t)):(e.consume(t),ie)}function ae(t){return e.check($q,oe,me)(t)}function oe(t){return e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),se}function se(t){return t===null||K(t)?ae(t):(e.enter(`htmlFlowData`),ie(t))}function ce(t){return t===45?(e.consume(t),fe):ie(t)}function le(t){return t===47?(e.consume(t),o=``,ue):ie(t)}function ue(t){if(t===62){let n=o.toLowerCase();return Xq.includes(n)?(e.consume(t),pe):ie(t)}return cU(t)&&o.length<8?(e.consume(t),o+=String.fromCharCode(t),ue):ie(t)}function de(t){return t===93?(e.consume(t),fe):ie(t)}function fe(t){return t===62?(e.consume(t),pe):t===45&&i===2?(e.consume(t),fe):ie(t)}function pe(t){return t===null||K(t)?(e.exit(`htmlFlowData`),me(t)):(e.consume(t),pe)}function me(n){return e.exit(`htmlFlow`),t(n)}}function nJ(e,t,n){let r=this;return i;function i(t){return K(t)?(e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),a):n(t)}function a(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}function rJ(e,t,n){return r;function r(r){return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),e.attempt(aq,t,n)}}const iJ={name:`htmlText`,tokenize:aJ};function aJ(e,t,n){let r=this,i,a,o;return s;function s(t){return e.enter(`htmlText`),e.enter(`htmlTextData`),e.consume(t),c}function c(t){return t===33?(e.consume(t),l):t===47?(e.consume(t),b):t===63?(e.consume(t),y):cU(t)?(e.consume(t),ne):n(t)}function l(t){return t===45?(e.consume(t),u):t===91?(e.consume(t),a=0,m):cU(t)?(e.consume(t),v):n(t)}function u(t){return t===45?(e.consume(t),p):n(t)}function d(t){return t===null?n(t):t===45?(e.consume(t),f):K(t)?(o=d,le(t)):(e.consume(t),d)}function f(t){return t===45?(e.consume(t),p):d(t)}function p(e){return e===62?ce(e):e===45?f(e):d(e)}function m(t){return t===`CDATA[`.charCodeAt(a++)?(e.consume(t),a===6?h:m):n(t)}function h(t){return t===null?n(t):t===93?(e.consume(t),g):K(t)?(o=h,le(t)):(e.consume(t),h)}function g(t){return t===93?(e.consume(t),_):h(t)}function _(t){return t===62?ce(t):t===93?(e.consume(t),_):h(t)}function v(t){return t===null||t===62?ce(t):K(t)?(o=v,le(t)):(e.consume(t),v)}function y(t){return t===null?n(t):t===63?(e.consume(t),ee):K(t)?(o=y,le(t)):(e.consume(t),y)}function ee(e){return e===62?ce(e):y(e)}function b(t){return cU(t)?(e.consume(t),x):n(t)}function x(t){return t===45||lU(t)?(e.consume(t),x):te(t)}function te(t){return K(t)?(o=te,le(t)):q(t)?(e.consume(t),te):ce(t)}function ne(t){return t===45||lU(t)?(e.consume(t),ne):t===47||t===62||hU(t)?re(t):n(t)}function re(t){return t===47?(e.consume(t),ce):t===58||t===95||cU(t)?(e.consume(t),S):K(t)?(o=re,le(t)):q(t)?(e.consume(t),re):ce(t)}function S(t){return t===45||t===46||t===58||t===95||lU(t)?(e.consume(t),S):C(t)}function C(t){return t===61?(e.consume(t),ie):K(t)?(o=C,le(t)):q(t)?(e.consume(t),C):re(t)}function ie(t){return t===null||t===60||t===61||t===62||t===96?n(t):t===34||t===39?(e.consume(t),i=t,ae):K(t)?(o=ie,le(t)):q(t)?(e.consume(t),ie):(e.consume(t),oe)}function ae(t){return t===i?(e.consume(t),i=void 0,se):t===null?n(t):K(t)?(o=ae,le(t)):(e.consume(t),ae)}function oe(t){return t===null||t===34||t===39||t===60||t===61||t===96?n(t):t===47||t===62||hU(t)?re(t):(e.consume(t),oe)}function se(e){return e===47||e===62||hU(e)?re(e):n(e)}function ce(r){return r===62?(e.consume(r),e.exit(`htmlTextData`),e.exit(`htmlText`),t):n(r)}function le(t){return e.exit(`htmlTextData`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),ue}function ue(t){return q(t)?J(e,de,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):de(t)}function de(t){return e.enter(`htmlTextData`),o(t)}}const oJ={name:`labelEnd`,resolveAll:uJ,resolveTo:dJ,tokenize:fJ},sJ={tokenize:pJ},cJ={tokenize:mJ},lJ={tokenize:hJ};function uJ(e){let t=-1,n=[];for(;++t=3&&(a===null||K(a))?(e.exit(`thematicBreak`),t(a)):n(a)}function c(t){return t===i?(e.consume(t),r++,c):(e.exit(`thematicBreakSequence`),q(t)?J(e,s,`whitespace`)(t):s(t))}}const wJ={continuation:{tokenize:OJ},exit:AJ,name:`list`,tokenize:DJ},TJ={partial:!0,tokenize:jJ},EJ={partial:!0,tokenize:kJ};function DJ(e,t,n){let r=this,i=r.events[r.events.length-1],a=i&&i[1].type===`linePrefix`?i[2].sliceSerialize(i[1],!0).length:0,o=0;return s;function s(t){let i=r.containerState.type||(t===42||t===43||t===45?`listUnordered`:`listOrdered`);if(i===`listUnordered`?!r.containerState.marker||t===r.containerState.marker:fU(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),i===`listUnordered`)return e.enter(`listItemPrefix`),t===42||t===45?e.check(SJ,n,l)(t):l(t);if(!r.interrupt||t===49)return e.enter(`listItemPrefix`),e.enter(`listItemValue`),c(t)}return n(t)}function c(t){return fU(t)&&++o<10?(e.consume(t),c):(!r.interrupt||o<2)&&(r.containerState.marker?t===r.containerState.marker:t===41||t===46)?(e.exit(`listItemValue`),l(t)):n(t)}function l(t){return e.enter(`listItemMarker`),e.consume(t),e.exit(`listItemMarker`),r.containerState.marker=r.containerState.marker||t,e.check(aq,r.interrupt?n:u,e.attempt(TJ,f,d))}function u(e){return r.containerState.initialBlankLine=!0,a++,f(e)}function d(t){return q(t)?(e.enter(`listItemPrefixWhitespace`),e.consume(t),e.exit(`listItemPrefixWhitespace`),f):n(t)}function f(n){return r.containerState.size=a+r.sliceSerialize(e.exit(`listItemPrefix`),!0).length,t(n)}}function OJ(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(aq,i,a);function i(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,J(e,t,`listItemIndent`,r.containerState.size+1)(n)}function a(n){return r.containerState.furtherBlankLines||!q(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(EJ,t,o)(n))}function o(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,J(e,e.attempt(wJ,t,n),`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(i)}}function kJ(e,t,n){let r=this;return J(e,i,`listItemIndent`,r.containerState.size+1);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`listItemIndent`&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)}}function AJ(e){e.exit(this.containerState.type)}function jJ(e,t,n){let r=this;return J(e,i,`listItemPrefixWhitespace`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:5);function i(e){let i=r.events[r.events.length-1];return!q(e)&&i&&i[1].type===`listItemPrefixWhitespace`?t(e):n(e)}}const MJ={name:`setextUnderline`,resolveTo:NJ,tokenize:PJ};function NJ(e,t){let n=e.length,r,i,a;for(;n--;)if(e[n][0]===`enter`){if(e[n][1].type===`content`){r=n;break}e[n][1].type===`paragraph`&&(i=n)}else e[n][1].type===`content`&&e.splice(n,1),!a&&e[n][1].type===`definition`&&(a=n);let o={type:`setextHeading`,start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[i][1].type=`setextHeadingText`,a?(e.splice(i,0,[`enter`,o,t]),e.splice(a+1,0,[`exit`,e[r][1],t]),e[r][1].end={...e[a][1].end}):e[r][1]=o,e.push([`exit`,o,t]),e}function PJ(e,t,n){let r=this,i;return a;function a(t){let a=r.events.length,s;for(;a--;)if(r.events[a][1].type!==`lineEnding`&&r.events[a][1].type!==`linePrefix`&&r.events[a][1].type!==`content`){s=r.events[a][1].type===`paragraph`;break}return!r.parser.lazy[r.now().line]&&(r.interrupt||s)?(e.enter(`setextHeadingLine`),i=t,o(t)):n(t)}function o(t){return e.enter(`setextHeadingLineSequence`),s(t)}function s(t){return t===i?(e.consume(t),s):(e.exit(`setextHeadingLineSequence`),q(t)?J(e,c,`lineSuffix`)(t):c(t))}function c(r){return r===null||K(r)?(e.exit(`setextHeadingLine`),t(r)):n(r)}}const FJ={tokenize:UJ,partial:!0};function IJ(){return{document:{91:{name:`gfmFootnoteDefinition`,tokenize:BJ,continuation:{tokenize:VJ},exit:HJ}},text:{91:{name:`gfmFootnoteCall`,tokenize:zJ},93:{name:`gfmPotentialFootnoteCall`,add:`after`,tokenize:LJ,resolveTo:RJ}}}}function LJ(e,t,n){let r=this,i=r.events.length,a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),o;for(;i--;){let e=r.events[i][1];if(e.type===`labelImage`){o=e;break}if(e.type===`gfmFootnoteCall`||e.type===`labelLink`||e.type===`label`||e.type===`image`||e.type===`link`)break}return s;function s(i){if(!o||!o._balanced)return n(i);let s=ZU(r.sliceSerialize({start:o.end,end:r.now()}));return s.codePointAt(0)!==94||!a.includes(s.slice(1))?n(i):(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(i),e.exit(`gfmFootnoteCallLabelMarker`),t(i))}}function RJ(e,t){let n=e.length;for(;n--;)if(e[n][1].type===`labelImage`&&e[n][0]===`enter`){e[n][1];break}e[n+1][1].type=`data`,e[n+3][1].type=`gfmFootnoteCallLabelMarker`;let r={type:`gfmFootnoteCall`,start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:`gfmFootnoteCallMarker`,start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;let a={type:`gfmFootnoteCallString`,start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},o={type:`chunkString`,contentType:`string`,start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],[`enter`,r,t],e[n+3],e[n+4],[`enter`,i,t],[`exit`,i,t],[`enter`,a,t],[`enter`,o,t],[`exit`,o,t],[`exit`,a,t],e[e.length-2],e[e.length-1],[`exit`,r,t]];return e.splice(n,e.length-n+1,...s),e}function zJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a=0,o;return s;function s(t){return e.enter(`gfmFootnoteCall`),e.enter(`gfmFootnoteCallLabelMarker`),e.consume(t),e.exit(`gfmFootnoteCallLabelMarker`),c}function c(t){return t===94?(e.enter(`gfmFootnoteCallMarker`),e.consume(t),e.exit(`gfmFootnoteCallMarker`),e.enter(`gfmFootnoteCallString`),e.enter(`chunkString`).contentType=`string`,l):n(t)}function l(s){if(a>999||s===93&&!o||s===null||s===91||hU(s))return n(s);if(s===93){e.exit(`chunkString`);let a=e.exit(`gfmFootnoteCallString`);return i.includes(ZU(r.sliceSerialize(a)))?(e.enter(`gfmFootnoteCallLabelMarker`),e.consume(s),e.exit(`gfmFootnoteCallLabelMarker`),e.exit(`gfmFootnoteCall`),t):n(s)}return hU(s)||(o=!0),a++,e.consume(s),s===92?u:l}function u(t){return t===91||t===92||t===93?(e.consume(t),a++,l):l(t)}}function BJ(e,t,n){let r=this,i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]),a,o=0,s;return c;function c(t){return e.enter(`gfmFootnoteDefinition`)._container=!0,e.enter(`gfmFootnoteDefinitionLabel`),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),l}function l(t){return t===94?(e.enter(`gfmFootnoteDefinitionMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionMarker`),e.enter(`gfmFootnoteDefinitionLabelString`),e.enter(`chunkString`).contentType=`string`,u):n(t)}function u(t){if(o>999||t===93&&!s||t===null||t===91||hU(t))return n(t);if(t===93){e.exit(`chunkString`);let n=e.exit(`gfmFootnoteDefinitionLabelString`);return a=ZU(r.sliceSerialize(n)),e.enter(`gfmFootnoteDefinitionLabelMarker`),e.consume(t),e.exit(`gfmFootnoteDefinitionLabelMarker`),e.exit(`gfmFootnoteDefinitionLabel`),f}return hU(t)||(s=!0),o++,e.consume(t),t===92?d:u}function d(t){return t===91||t===92||t===93?(e.consume(t),o++,u):u(t)}function f(t){return t===58?(e.enter(`definitionMarker`),e.consume(t),e.exit(`definitionMarker`),i.includes(a)||i.push(a),J(e,p,`gfmFootnoteDefinitionWhitespace`)):n(t)}function p(e){return t(e)}}function VJ(e,t,n){return e.check(aq,t,e.attempt(FJ,t,n))}function HJ(e){e.exit(`gfmFootnoteDefinition`)}function UJ(e,t,n){let r=this;return J(e,i,`gfmFootnoteDefinitionIndent`,5);function i(e){let i=r.events[r.events.length-1];return i&&i[1].type===`gfmFootnoteDefinitionIndent`&&i[2].sliceSerialize(i[1],!0).length===4?t(e):n(e)}}function WJ(e){let t=(e||{}).singleTilde,n={name:`strikethrough`,tokenize:i,resolveAll:r};return t??=!0,{text:{126:n},insideSpan:{null:[n]},attentionMarkers:{null:[126]}};function r(e,t){let n=-1;for(;++n1?r(a):(e.consume(a),o++,c);if(o<2&&!t)return r(a);let l=e.exit(`strikethroughSequenceTemporary`),u=UW(a);return l._open=!u||u===2&&!!s,l._close=!s||s===2&&!!u,n(a)}}}var GJ=class{constructor(){this.map=[]}add(e,t,n){KJ(this,e,t,n)}consume(e){if(this.map.sort(function(e,t){return e[0]-t[0]}),this.map.length===0)return;let t=this.map.length,n=[];for(;t>0;)--t,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(let t of r)e.push(t);r=n.pop()}this.map.length=0}};function KJ(e,t,n,r){let i=0;if(!(n===0&&r.length===0)){for(;i-1;){let e=r.events[t][1].type;if(e===`lineEnding`||e===`linePrefix`)t--;else break}let i=t>-1?r.events[t][1].type:null,a=i===`tableHead`||i===`tableRow`?x:c;return a===x&&r.parser.lazy[r.now().line]?n(e):a(e)}function c(t){return e.enter(`tableHead`),e.enter(`tableRow`),l(t)}function l(e){return e===124?u(e):(o=!0,a+=1,u(e))}function u(t){return t===null?n(t):K(t)?a>1?(a=0,r.interrupt=!0,e.exit(`tableRow`),e.enter(`lineEnding`),e.consume(t),e.exit(`lineEnding`),p):n(t):q(t)?J(e,u,`whitespace`)(t):(a+=1,o&&(o=!1,i+=1),t===124?(e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),o=!0,u):(e.enter(`data`),d(t)))}function d(t){return t===null||t===124||hU(t)?(e.exit(`data`),u(t)):(e.consume(t),t===92?f:d)}function f(t){return t===92||t===124?(e.consume(t),d):d(t)}function p(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter(`tableDelimiterRow`),o=!1,q(t)?J(e,m,`linePrefix`,r.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)(t):m(t))}function m(t){return t===45||t===58?g(t):t===124?(o=!0,e.enter(`tableCellDivider`),e.consume(t),e.exit(`tableCellDivider`),h):b(t)}function h(t){return q(t)?J(e,g,`whitespace`)(t):g(t)}function g(t){return t===58?(a+=1,o=!0,e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),_):t===45?(a+=1,_(t)):t===null||K(t)?ee(t):b(t)}function _(t){return t===45?(e.enter(`tableDelimiterFiller`),v(t)):b(t)}function v(t){return t===45?(e.consume(t),v):t===58?(o=!0,e.exit(`tableDelimiterFiller`),e.enter(`tableDelimiterMarker`),e.consume(t),e.exit(`tableDelimiterMarker`),y):(e.exit(`tableDelimiterFiller`),y(t))}function y(t){return q(t)?J(e,ee,`whitespace`)(t):ee(t)}function ee(n){return n===124?m(n):n===null||K(n)?!o||i!==a?b(n):(e.exit(`tableDelimiterRow`),e.exit(`tableHead`),t(n)):b(n)}function b(e){return n(e)}function x(t){return e.enter(`tableRow`),te(t)}function te(n){return n===124?(e.enter(`tableCellDivider`),e.consume(n),e.exit(`tableCellDivider`),te):n===null||K(n)?(e.exit(`tableRow`),t(n)):q(n)?J(e,te,`whitespace`)(n):(e.enter(`data`),ne(n))}function ne(t){return t===null||t===124||hU(t)?(e.exit(`data`),te(t)):(e.consume(t),t===92?re:ne)}function re(t){return t===92||t===124?(e.consume(t),ne):ne(t)}}function XJ(e,t){let n=-1,r=!0,i=0,a=[0,0,0,0],o=[0,0,0,0],s=!1,c=0,l,u,d,f=new GJ;for(;++nn[2]+1){let t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[[`exit`,o,t]])}return i!==void 0&&(a.end=Object.assign({},$J(t.events,i)),e.add(i,0,[[`exit`,a,t]]),a=void 0),a}function QJ(e,t,n,r,i){let a=[],o=$J(t.events,n);i&&(i.end=Object.assign({},o),a.push([`exit`,i,t])),r.end=Object.assign({},o),a.push([`exit`,r,t]),e.add(n+1,0,a)}function $J(e,t){let n=e[t],r=n[0]===`enter`?`start`:`end`;return n[1][r]}const eY={name:`tasklistCheck`,tokenize:nY};function tY(){return{text:{91:eY}}}function nY(e,t,n){let r=this;return i;function i(t){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(t):(e.enter(`taskListCheck`),e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),a)}function a(t){return hU(t)?(e.enter(`taskListCheckValueUnchecked`),e.consume(t),e.exit(`taskListCheckValueUnchecked`),o):t===88||t===120?(e.enter(`taskListCheckValueChecked`),e.consume(t),e.exit(`taskListCheckValueChecked`),o):n(t)}function o(t){return t===93?(e.enter(`taskListCheckMarker`),e.consume(t),e.exit(`taskListCheckMarker`),e.exit(`taskListCheck`),s):n(t)}function s(r){return K(r)?t(r):q(r)?e.check({tokenize:rY},t,n)(r):n(r)}}function rY(e,t,n){return J(e,r,`whitespace`);function r(e){return e===null?n(e):t(e)}}function iY(e){return wK([IK(),IJ(),WJ(e),JJ(),tY()])}const aY={};function oY(e){let t=this,n=e||aY,r=t.data(),i=r.micromarkExtensions||=[],a=r.fromMarkdownExtensions||=[],o=r.toMarkdownExtensions||=[];i.push(iY(n)),a.push(yK()),o.push(bK(n))}const sY={tokenize:cY};function cY(e){let t=e.attempt(this.parser.constructs.contentInitial,r,i),n;return t;function r(n){if(n===null){e.consume(n);return}return e.enter(`lineEnding`),e.consume(n),e.exit(`lineEnding`),J(e,t,`linePrefix`)}function i(t){return e.enter(`paragraph`),a(t)}function a(t){let r=e.enter(`chunkText`,{contentType:`text`,previous:n});return n&&(n.next=r),n=r,o(t)}function o(t){if(t===null){e.exit(`chunkText`),e.exit(`paragraph`),e.consume(t);return}return K(t)?(e.consume(t),e.exit(`chunkText`),a):(e.consume(t),o)}}const lY={tokenize:dY},uY={tokenize:fY};function dY(e){let t=this,n=[],r=0,i,a,o;return s;function s(i){if(ro))return;let n=t.events.length,a=n,s,c;for(;a--;)if(t.events[a][0]===`exit`&&t.events[a][1].type===`chunkFlow`){if(s){c=t.events[a][1].end;break}s=!0}for(_(r),e=n;er;){let r=n[i];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){i.write([null]),a=void 0,i=void 0,t.containerState._closeFlow=void 0}}function fY(e,t,n){return J(e,e.attempt(this.parser.constructs.document,t,n),`linePrefix`,this.parser.constructs.disable.null.includes(`codeIndented`)?void 0:4)}const pY={tokenize:mY};function mY(e){let t=this,n=e.attempt(aq,r,e.attempt(this.parser.constructs.flowInitial,i,J(e,e.attempt(this.parser.constructs.flow,i,e.attempt(jq,i)),`linePrefix`)));return n;function r(r){if(r===null){e.consume(r);return}return e.enter(`lineEndingBlank`),e.consume(r),e.exit(`lineEndingBlank`),t.currentConstruct=void 0,n}function i(r){if(r===null){e.consume(r);return}return e.enter(`lineEnding`),e.consume(r),e.exit(`lineEnding`),t.currentConstruct=void 0,n}}const hY={resolveAll:yY()},gY=vY(`string`),_Y=vY(`text`);function vY(e){return{resolveAll:yY(e===`text`?bY:void 0),tokenize:t};function t(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,a,o);return a;function a(e){return c(e)?i(e):o(e)}function o(e){if(e===null){t.consume(e);return}return t.enter(`data`),t.consume(e),s}function s(e){return c(e)?(t.exit(`data`),i(e)):(t.consume(e),s)}function c(e){if(e===null)return!0;let t=r[e],i=-1;if(t)for(;++ikY,contentInitial:()=>CY,disable:()=>AY,document:()=>SY,flow:()=>TY,flowInitial:()=>wY,insideSpan:()=>OY,string:()=>EY,text:()=>DY});const SY={42:wJ,43:wJ,45:wJ,48:wJ,49:wJ,50:wJ,51:wJ,52:wJ,53:wJ,54:wJ,55:wJ,56:wJ,57:wJ,62:sq},CY={91:Bq},wY={[-2]:yq,[-1]:yq,32:yq},TY={35:Kq,42:SJ,45:[MJ,SJ],60:Zq,61:MJ,95:SJ,96:gq,126:gq},EY={38:pq,92:dq},DY={[-5]:bJ,[-4]:bJ,[-3]:bJ,33:gJ,38:pq,42:$K,60:[rq,iJ],91:vJ,92:[Wq,dq],93:oJ,95:$K,96:Cq},OY={null:[$K,hY]},kY={null:[42,95]},AY={null:[]};function jY(e,t,n){let r={_bufferIndex:-1,_index:0,line:n&&n.line||1,column:n&&n.column||1,offset:n&&n.offset||0},i={},a=[],o=[],s=[],c={attempt:te(b),check:te(x),consume:v,enter:y,exit:ee,interrupt:te(x,{interrupt:!0})},l={code:null,containerState:{},defineSkip:h,events:[],now:m,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:d},u=t.tokenize.call(l,c);return t.resolveAll&&a.push(t),l;function d(e){return o=SK(o,e),g(),o[o.length-1]===null?(ne(t,0),l.events=QK(a,l.events,l),l.events):[]}function f(e,t){return NY(p(e),t)}function p(e){return MY(o,e)}function m(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:a}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:a}}function h(e){i[e.line]=e.column,S()}function g(){let e;for(;r._index-1){let e=o[0];typeof e==`string`?o[0]=e.slice(r):o.shift()}a>0&&o.push(e[i].slice(0,a))}return o}function NY(e,t){let n=-1,r=[],i;for(;++n0){let e=a.tokenStack[a.tokenStack.length-1];(e[1]||WY).call(a,void 0,e[0])}for(r.position={start:VY(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:VY(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},d=-1;++d{switch(e){case`Function`:case`SharedWorker`:case`Worker`:case`eval`:case`setInterval`:case`setTimeout`:throw TypeError(`unable to deserialize `+e)}return new KY[e](t)},JY=(e,t)=>{let n=(t,n)=>(e.set(n,t),t),r=i=>{if(e.has(i))return e.get(i);let[a,o]=t[i];switch(a){case 0:case-1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(qY(e,t),i)}case 8:return n(BigInt(o),i);case`BigInt`:return n(Object(BigInt(o)),i);case`ArrayBuffer`:return n(new Uint8Array(o).buffer,o);case`DataView`:{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(qY(a,o),i)};return r},YY=e=>JY(new Map,e)(0),{toString:XY}={},{keys:ZY}=Object,QY=e=>{let t=typeof e;if(t!==`object`||!e)return[0,t];let n=XY.call(e).slice(8,-1);switch(n){case`Array`:return[1,``];case`Object`:return[2,``];case`Date`:return[3,``];case`RegExp`:return[4,``];case`Map`:return[5,``];case`Set`:return[6,``];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]},$Y=([e,t])=>e===0&&(t===`function`||t===`symbol`),eX=(e,t,n,r)=>{let i=(e,t)=>{let i=r.push(e)-1;return n.set(t,i),i},a=r=>{if(n.has(r))return n.get(r);let[o,s]=QY(r);switch(o){case 0:{let t=r;switch(s){case`bigint`:o=8,t=r.toString();break;case`function`:case`symbol`:if(e)throw TypeError(`unable to serialize `+s);t=null;break;case`undefined`:return i([-1],r)}return i([o,t],r)}case 1:{if(s){let e=r;return s===`DataView`?e=new Uint8Array(r.buffer):s===`ArrayBuffer`&&(e=new Uint8Array(r)),i([s,[...e]],r)}let e=[],t=i([o,e],r);for(let t of r)e.push(a(t));return t}case 2:{if(s)switch(s){case`BigInt`:return i([s,r.toString()],r);case`Boolean`:case`Number`:case`String`:return i([s,r.valueOf()],r)}if(t&&`toJSON`in r)return a(r.toJSON());let n=[],c=i([o,n],r);for(let t of ZY(r))(e||!$Y(QY(r[t])))&&n.push([a(t),a(r[t])]);return c}case 3:return i([o,r.toISOString()],r);case 4:{let{source:e,flags:t}=r;return i([o,{source:e,flags:t}],r)}case 5:{let t=[],n=i([o,t],r);for(let[n,i]of r)(e||!($Y(QY(n))||$Y(QY(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!$Y(QY(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a},tX=(e,{json:t,lossy:n}={})=>{let r=[];return eX(!(t||n),!!t,new Map,r)(e),r};var nX=typeof structuredClone==`function`?(e,t)=>t&&(`json`in t||`lossy`in t)?YY(tX(e,t)):structuredClone(e):(e,t)=>YY(tX(e,t));function rX(e,t){let n=[{type:`text`,value:`↩`}];return t>1&&n.push({type:`element`,tagName:`sup`,properties:{},children:[{type:`text`,value:String(t)}]}),n}function iX(e,t){return`Back to reference `+(e+1)+(t>1?`-`+t:``)}function aX(e){let t=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,n=e.options.footnoteBackContent||rX,r=e.options.footnoteBackLabel||iX,i=e.options.footnoteLabel||`Footnotes`,a=e.options.footnoteLabelTagName||`h2`,o=e.options.footnoteLabelProperties||{className:[`sr-only`]},s=[],c=-1;for(;++c0&&d.push({type:`text`,value:` `});let e=typeof n==`string`?n:n(c,u);typeof e==`string`&&(e={type:`text`,value:e}),d.push({type:`element`,tagName:`a`,properties:{href:`#`+t+`fnref-`+l+(u>1?`-`+u:``),dataFootnoteBackref:``,ariaLabel:typeof r==`string`?r:r(c,u),className:[`data-footnote-backref`]},children:Array.isArray(e)?e:[e]})}let p=a[a.length-1];if(p&&p.type===`element`&&p.tagName===`p`){let e=p.children[p.children.length-1];e&&e.type===`text`?e.value+=` `:p.children.push({type:`text`,value:` `}),p.children.push(...d)}else a.push(...d);let m={type:`element`,tagName:`li`,properties:{id:t+`fn-`+l},children:e.wrap(a,!0)};e.patch(i,m),s.push(m)}if(s.length!==0)return{type:`element`,tagName:`section`,properties:{dataFootnotes:!0,className:[`footnotes`]},children:[{type:`element`,tagName:a,properties:{...nX(o),id:`footnote-label`},children:[{type:`text`,value:i}]},{type:`text`,value:`\n`},{type:`element`,tagName:`ol`,properties:{},children:e.wrap(s,!0)},{type:`text`,value:`\n`}]}}const oX=cX(`end`),sX=cX(`start`);function cX(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function lX(e){let t=sX(e),n=oX(e);if(t&&n)return{start:t,end:n}}function uX(e,t){let n={type:`element`,tagName:`blockquote`,properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)}function dX(e,t){let n={type:`element`,tagName:`br`,properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:`text`,value:`\n`}]}function fX(e,t){let n=t.value?t.value+`\n`:``,r={},i=t.lang?t.lang.split(/\\s+/):[];i.length>0&&(r.className=[`language-`+i[0]]);let a={type:`element`,tagName:`code`,properties:r,children:[{type:`text`,value:n}]};return t.meta&&(a.data={meta:t.meta}),e.patch(t,a),a=e.applyData(t,a),a={type:`element`,tagName:`pre`,properties:{},children:[a]},e.patch(t,a),a}function pX(e,t){let n={type:`element`,tagName:`del`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function mX(e,t){let n={type:`element`,tagName:`em`,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function hX(e,t){let n=typeof e.options.clobberPrefix==`string`?e.options.clobberPrefix:`user-content-`,r=String(t.identifier).toUpperCase(),i=ZK(r.toLowerCase()),a=e.footnoteOrder.indexOf(r),o,s=e.footnoteCounts.get(r);s===void 0?(s=0,e.footnoteOrder.push(r),o=e.footnoteOrder.length):o=a+1,s+=1,e.footnoteCounts.set(r,s);let c={type:`element`,tagName:`a`,properties:{href:`#`+n+`fn-`+i,id:n+`fnref-`+i+(s>1?`-`+s:``),dataFootnoteRef:!0,ariaDescribedBy:[`footnote-label`]},children:[{type:`text`,value:String(o)}]};e.patch(t,c);let l={type:`element`,tagName:`sup`,properties:{},children:[c]};return e.patch(t,l),e.applyData(t,l)}function gX(e,t){let n={type:`element`,tagName:`h`+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)}function _X(e,t){if(e.options.allowDangerousHtml){let n={type:`raw`,value:t.value};return e.patch(t,n),e.applyData(t,n)}}function vX(e,t){let n=t.referenceType,r=`]`;if(n===`collapsed`?r+=`[]`:n===`full`&&(r+=`[`+(t.label||t.identifier)+`]`),t.type===`imageReference`)return[{type:`text`,value:`![`+t.alt+r}];let i=e.all(t),a=i[0];a&&a.type===`text`?a.value=`[`+a.value:i.unshift({type:`text`,value:`[`});let o=i[i.length-1];return o&&o.type===`text`?o.value+=r:i.push({type:`text`,value:r}),i}function yX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={src:ZK(r.url||``),alt:t.alt};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`img`,properties:i,children:[]};return e.patch(t,a),e.applyData(t,a)}function bX(e,t){let n={src:ZK(t.url)};t.alt!==null&&t.alt!==void 0&&(n.alt=t.alt),t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`img`,properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)}function xX(e,t){let n={type:`text`,value:t.value.replace(/\\r?\\n|\\r/g,` `)};e.patch(t,n);let r={type:`element`,tagName:`code`,properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)}function SX(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return vX(e,t);let i={href:ZK(r.url||``)};r.title!==null&&r.title!==void 0&&(i.title=r.title);let a={type:`element`,tagName:`a`,properties:i,children:e.all(t)};return e.patch(t,a),e.applyData(t,a)}function CX(e,t){let n={href:ZK(t.url)};t.title!==null&&t.title!==void 0&&(n.title=t.title);let r={type:`element`,tagName:`a`,properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)}function wX(e,t,n){let r=e.all(t),i=n?TX(n):EX(t),a={},o=[];if(typeof t.checked==`boolean`){let e=r[0],n;e&&e.type===`element`&&e.tagName===`p`?n=e:(n={type:`element`,tagName:`p`,properties:{},children:[]},r.unshift(n)),n.children.length>0&&n.children.unshift({type:`text`,value:` `}),n.children.unshift({type:`element`,tagName:`input`,properties:{type:`checkbox`,checked:t.checked,disabled:!0},children:[]}),a.className=[`task-list-item`]}let s=-1;for(;++s1}function DX(e,t){let n={},r=e.all(t),i=-1;for(typeof t.start==`number`&&t.start!==1&&(n.start=t.start);++i0){let r={type:`element`,tagName:`tbody`,properties:{},children:e.wrap(n,!0)},a=sX(t.children[1]),o=oX(t.children[t.children.length-1]);a&&o&&(r.position={start:a,end:o}),i.push(r)}let a={type:`element`,tagName:`table`,properties:{},children:e.wrap(i,!0)};return e.patch(t,a),e.applyData(t,a)}function MX(e,t,n){let r=n?n.children:void 0,i=(r?r.indexOf(t):1)===0?`th`:`td`,a=n&&n.type===`table`?n.align:void 0,o=a?a.length:t.children.length,s=-1,c=[];for(;++s0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return a.push(FX(t.slice(i),i>0,!1)),a.join(``)}function FX(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;t===9||t===32;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;t===9||t===32;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):``}function IX(e,t){let n={type:`text`,value:PX(String(t.value))};return e.patch(t,n),e.applyData(t,n)}function LX(e,t){let n={type:`element`,tagName:`hr`,properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)}const RX={blockquote:uX,break:dX,code:fX,delete:pX,emphasis:mX,footnoteReference:hX,heading:gX,html:_X,imageReference:yX,image:bX,inlineCode:xX,linkReference:SX,link:CX,listItem:wX,list:DX,paragraph:OX,root:kX,strong:AX,table:jX,tableCell:NX,tableRow:MX,text:IX,thematicBreak:LX,toml:zX,yaml:zX,definition:zX,footnoteDefinition:zX};function zX(){}const BX={}.hasOwnProperty,VX={};function HX(e,t){let n=t||VX,r=new Map,i=new Map,a={all:s,applyData:WX,definitionById:r,footnoteById:i,footnoteCounts:new Map,footnoteOrder:[],handlers:{...RX,...n.handlers},one:o,options:n,patch:UX,wrap:KX};return qW(e,function(e){if(e.type===`definition`||e.type===`footnoteDefinition`){let t=e.type===`definition`?r:i,n=String(e.identifier).toUpperCase();t.has(n)||t.set(n,e)}}),a;function o(e,t){let n=e.type,r=a.handlers[n];if(BX.call(a.handlers,n)&&r)return r(a,e,t);if(a.options.passThrough&&a.options.passThrough.includes(n)){if(`children`in e){let{children:t,...n}=e,r=nX(n);return r.children=a.all(e),r}return nX(e)}return(a.options.unknownHandler||GX)(a,e,t)}function s(e){let t=[];if(`children`in e){let n=e.children,r=-1;for(;++r0&&n.push({type:`text`,value:`\n`}),n}function qX(e){let t=0,n=e.charCodeAt(t);for(;n===9||n===32;)t++,n=e.charCodeAt(t);return e.slice(t)}function JX(e,t){let n=HX(e,t),r=n.one(e,void 0),i=aX(n),a=Array.isArray(r)?{type:`root`,children:r}:r||{type:`root`,children:[]};return i&&(`children`in a,a.children.push({type:`text`,value:`\n`},i)),a}function YX(e,t){return e&&`run`in e?async function(n,r){let i=JX(n,{file:r,...t});await e.run(i,r)}:function(n,r){return JX(n,{file:r,...e||t})}}function XX(e){jU(e,[/\\r?\\n|\\r/g,ZX])}function ZX(){return{type:`break`}}function QX(){return function(e){XX(e)}}var $X=class{constructor(e,t,n){this.normal=t,this.property=e,n&&(this.space=n)}};$X.prototype.normal={},$X.prototype.property={},$X.prototype.space=void 0;function eZ(e,t){let n={},r={};for(let t of e)Object.assign(n,t.property),Object.assign(r,t.normal);return new $X(n,r,t)}function tZ(e){return e.toLowerCase()}var nZ=class{constructor(e,t){this.attribute=t,this.property=e}};nZ.prototype.attribute=``,nZ.prototype.booleanish=!1,nZ.prototype.boolean=!1,nZ.prototype.commaOrSpaceSeparated=!1,nZ.prototype.commaSeparated=!1,nZ.prototype.defined=!1,nZ.prototype.mustUseProperty=!1,nZ.prototype.number=!1,nZ.prototype.overloadedBoolean=!1,nZ.prototype.property=``,nZ.prototype.spaceSeparated=!1,nZ.prototype.space=void 0;var rZ=s({boolean:()=>Y,booleanish:()=>aZ,commaOrSpaceSeparated:()=>lZ,commaSeparated:()=>cZ,number:()=>X,overloadedBoolean:()=>oZ,spaceSeparated:()=>sZ});let iZ=0;const Y=uZ(),aZ=uZ(),oZ=uZ(),X=uZ(),sZ=uZ(),cZ=uZ(),lZ=uZ();function uZ(){return 2**++iZ}const dZ=Object.keys(rZ);var fZ=class extends nZ{constructor(e,t,n,r){let i=-1;if(super(e,t),pZ(this,`space`,r),typeof n==`number`)for(;++i4&&n.slice(0,4)===`data`&&TZ.test(t)){if(t.charAt(4)===`-`){let e=t.slice(5).replace(wZ,OZ);r=`data`+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!wZ.test(e)){let n=e.replace(CZ,DZ);n.charAt(0)!==`-`&&(n=`-`+n),t=`data`+n}}i=fZ}return new i(r,t)}function DZ(e){return`-`+e.toLowerCase()}function OZ(e){return e.charAt(1).toUpperCase()}const kZ=eZ([hZ,vZ,bZ,xZ,SZ],`html`),AZ=eZ([hZ,yZ,bZ,xZ,SZ],`svg`),jZ={html:`http://www.w3.org/1999/xhtml`,mathml:`http://www.w3.org/1998/Math/MathML`,svg:`http://www.w3.org/2000/svg`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`},MZ={}.hasOwnProperty;function NZ(e,t){let n=t||{};return PZ(e,{doc:n.document||document,fragment:n.fragment||!1,namespace:n.namespace||void 0,impliedNamespace:void 0,afterTransform:n.afterTransform||void 0})}function PZ(e,t){let n=FZ(e,t);return t.afterTransform&&t.afterTransform(e,n),n}function FZ(e,t){switch(e.type){case`root`:return IZ(e,t);case`text`:return RZ(e,t);case`doctype`:return LZ(e,t);case`comment`:return zZ(e,t);default:return BZ(e,t)}}function IZ(e,t){let n=e.children||[],r=n.length===0,i=-1,a;for(;++i`;let t=document.createElement(`template`);return t.content.append(e),t.innerHTML}const GZ=[`area`,`base`,`basefont`,`bgsound`,`br`,`col`,`command`,`embed`,`frame`,`hr`,`image`,`img`,`input`,`keygen`,`link`,`meta`,`param`,`source`,`track`,`wbr`],KZ=/[\"&'<>`]/g,qZ=/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,JZ=/[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g,YZ=/[|\\\\{}()[\\]^$+*?.]/g,XZ=new WeakMap;function ZZ(e,t){if(e=e.replace(t.subset?QZ(t.subset):KZ,r),t.subset||t.escapeOnly)return e;return e.replace(qZ,n).replace(JZ,r);function n(e,n,r){return t.format((e.charCodeAt(0)-55296)*1024+e.charCodeAt(1)-56320+65536,r.charCodeAt(n+2),t)}function r(e,n,r){return t.format(e.charCodeAt(0),r.charCodeAt(n+1),t)}}function QZ(e){let t=XZ.get(e);return t||(t=$Z(e),XZ.set(e,t)),t}function $Z(e){let t=[],n=-1;for(;++n`,OElig:`Œ`,oelig:`œ`,Scaron:`Š`,scaron:`š`,Yuml:`Ÿ`,circ:`ˆ`,tilde:`˜`,ensp:` `,emsp:` `,thinsp:` `,zwnj:`‌`,zwj:`‍`,lrm:`‎`,rlm:`‏`,ndash:`–`,mdash:`—`,lsquo:`‘`,rsquo:`’`,sbquo:`‚`,ldquo:`“`,rdquo:`”`,bdquo:`„`,dagger:`†`,Dagger:`‡`,permil:`‰`,lsaquo:`‹`,rsaquo:`›`,euro:`€`},oQ=[`cent`,`copy`,`divide`,`gt`,`lt`,`not`,`para`,`times`],sQ={}.hasOwnProperty,cQ={};let lQ;for(lQ in aQ)sQ.call(aQ,lQ)&&(cQ[aQ[lQ]]=lQ);const uQ=/[^\\dA-Za-z]/;function dQ(e,t,n,r){let i=String.fromCharCode(e);if(sQ.call(cQ,i)){let e=cQ[i],a=`&`+e;return n&&iQ.includes(e)&&!oQ.includes(e)&&(!r||t&&t!==61&&uQ.test(String.fromCharCode(t)))?a:a+`;`}return``}function fQ(e,t,n){let r=tQ(e,t,n.omitOptionalSemicolons),i;if((n.useNamedReferences||n.useShortestReferences)&&(i=dQ(e,t,n.omitOptionalSemicolons,n.attribute)),(n.useShortestReferences||!i)&&n.useShortestReferences){let i=rQ(e,t,n.omitOptionalSemicolons);i.length|^->||--!>|`],gQ=[`<`,`>`];function _Q(e,t,n,r){return r.settings.bogusComments?``:``;function i(e){return pQ(e,Object.assign({},r.settings.characterReferences,{subset:gQ}))}}function vQ(e,t,n,r){return``}function yQ(e){let t=[],n=String(e||``),r=n.indexOf(`,`),i=0,a=!1;for(;!a;){r===-1&&(r=n.length,a=!0);let e=n.slice(i,r).trim();(e||!a)&&t.push(e),i=r+1,r=n.indexOf(`,`,i)}return t}function bQ(e,t){let n=t||{};return(e[e.length-1]===``?[...e,``]:e).join((n.padRight?` `:``)+`,`+(n.padLeft===!1?``:` `)).trim()}function xQ(e){let t=String(e||``).trim();return t?t.split(/[ \\t\\n\\r\\f]+/g):[]}function SQ(e){return e.join(` `).trim()}const CQ=/[ \\t\\n\\f\\r]/g;function wQ(e){return typeof e==`object`?e.type===`text`?TQ(e.value):!1:TQ(e)}function TQ(e){return e.replace(CQ,``)===``}const EQ=kQ(1),DQ=kQ(-1),OQ=[];function kQ(e){return t;function t(t,n,r){let i=t?t.children:OQ,a=(n||0)+e,o=i[a];if(!r)for(;o&&wQ(o);)a+=e,o=i[a];return o}}const AQ={}.hasOwnProperty;function jQ(e){return t;function t(t,n,r){return AQ.call(e,t.tagName)&&e[t.tagName](t,n,r)}}const MQ=jQ({body:FQ,caption:NQ,colgroup:NQ,dd:zQ,dt:RQ,head:NQ,html:PQ,li:LQ,optgroup:VQ,option:HQ,p:IQ,rp:BQ,rt:BQ,tbody:WQ,td:qQ,tfoot:GQ,th:qQ,thead:UQ,tr:KQ});function NQ(e,t,n){let r=EQ(n,t,!0);return!r||r.type!==`comment`&&!(r.type===`text`&&wQ(r.value.charAt(0)))}function PQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function FQ(e,t,n){let r=EQ(n,t);return!r||r.type!==`comment`}function IQ(e,t,n){let r=EQ(n,t);return r?r.type===`element`&&(r.tagName===`address`||r.tagName===`article`||r.tagName===`aside`||r.tagName===`blockquote`||r.tagName===`details`||r.tagName===`div`||r.tagName===`dl`||r.tagName===`fieldset`||r.tagName===`figcaption`||r.tagName===`figure`||r.tagName===`footer`||r.tagName===`form`||r.tagName===`h1`||r.tagName===`h2`||r.tagName===`h3`||r.tagName===`h4`||r.tagName===`h5`||r.tagName===`h6`||r.tagName===`header`||r.tagName===`hgroup`||r.tagName===`hr`||r.tagName===`main`||r.tagName===`menu`||r.tagName===`nav`||r.tagName===`ol`||r.tagName===`p`||r.tagName===`pre`||r.tagName===`section`||r.tagName===`table`||r.tagName===`ul`):!n||!(n.type===`element`&&(n.tagName===`a`||n.tagName===`audio`||n.tagName===`del`||n.tagName===`ins`||n.tagName===`map`||n.tagName===`noscript`||n.tagName===`video`))}function LQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`li`}function RQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`))}function zQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`dt`||r.tagName===`dd`)}function BQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`rp`||r.tagName===`rt`)}function VQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`optgroup`}function HQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`option`||r.tagName===`optgroup`)}function UQ(e,t,n){let r=EQ(n,t);return!!(r&&r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`))}function WQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`tbody`||r.tagName===`tfoot`)}function GQ(e,t,n){return!EQ(n,t)}function KQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&r.tagName===`tr`}function qQ(e,t,n){let r=EQ(n,t);return!r||r.type===`element`&&(r.tagName===`td`||r.tagName===`th`)}const JQ=jQ({body:Mne,colgroup:ZQ,head:XQ,html:YQ,tbody:QQ});function YQ(e){let t=EQ(e,-1);return!t||t.type!==`comment`}function XQ(e){let t=new Set;for(let n of e.children)if(n.type===`element`&&(n.tagName===`base`||n.tagName===`title`)){if(t.has(n.tagName))return!1;t.add(n.tagName)}let n=e.children[0];return!n||n.type===`element`}function Mne(e){let t=EQ(e,-1,!0);return!t||t.type!==`comment`&&!(t.type===`text`&&wQ(t.value.charAt(0)))&&!(t.type===`element`&&(t.tagName===`meta`||t.tagName===`link`||t.tagName===`script`||t.tagName===`style`||t.tagName===`template`))}function ZQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1,!0);return n&&r&&r.type===`element`&&r.tagName===`colgroup`&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`col`)}function QQ(e,t,n){let r=DQ(n,t),i=EQ(e,-1);return n&&r&&r.type===`element`&&(r.tagName===`thead`||r.tagName===`tbody`)&&MQ(r,n.children.indexOf(r),n)?!1:!!(i&&i.type===`element`&&i.tagName===`tr`)}const $Q={name:[[`\t\n\\f\\r &/=>`.split(``),`\t\n\\f\\r \"&'/=>\\``.split(``)],[`\\0\t\n\\f\\r \"&'/<=>`.split(``),`\\0\t\n\\f\\r \"&'/<=>\\``.split(``)]],unquoted:[[`\t\n\\f\\r &>`.split(``),`\\0\t\n\\f\\r \"&'<=>\\``.split(``)],[`\\0\t\n\\f\\r \"&'<=>\\``.split(``),`\\0\t\n\\f\\r \"&'<=>\\``.split(``)]],single:[[`&'`.split(``),`\"&'\\``.split(``)],[`\\0&'`.split(``),`\\0\"&'\\``.split(``)]],double:[[`\"&`.split(``),`\"&'\\``.split(``)],[`\\0\"&`.split(``),`\\0\"&'\\``.split(``)]]};function e$(e,t,n,r){let i=r.schema,a=i.space===`svg`?!1:r.settings.omitOptionalTags,o=i.space===`svg`?r.settings.closeEmptyElements:r.settings.voids.includes(e.tagName.toLowerCase()),s=[],c;i.space===`html`&&e.tagName===`svg`&&(r.schema=AZ);let l=t$(r,e.properties),u=r.all(i.space===`html`&&e.tagName===`template`?e.content:e);return r.schema=i,u&&(o=!1),(l||!a||!JQ(e,t,n))&&(s.push(`<`,e.tagName,l?` `+l:``),o&&(i.space===`svg`||r.settings.closeSelfClosing)&&(c=l.charAt(l.length-1),(!r.settings.tightSelfClosing||c===`/`||c&&c!==`\"`&&c!==`'`)&&s.push(` `),s.push(`/`)),s.push(`>`)),s.push(u),!o&&(!a||!MQ(e,t,n))&&s.push(``),s.join(``)}function t$(e,t){let n=[],r=-1,i;if(t){for(i in t)if(t[i]!==null&&t[i]!==void 0){let r=n$(e,i,t[i]);r&&n.push(r)}}for(;++rsU(n,e.alternative)&&(o=e.alternative),s=o+pQ(n,Object.assign({},e.settings.characterReferences,{subset:(o===`'`?$Q.single:$Q.double)[i][a],attribute:!0}))+o),c+(s&&`=`+s))}const r$=[`<`,`&`];function i$(e,t,n,r){return n&&n.type===`element`&&(n.tagName===`script`||n.tagName===`style`)?e.value:pQ(e.value,Object.assign({},r.settings.characterReferences,{subset:r$}))}function a$(e,t,n,r){return r.settings.allowDangerousHtml?e.value:i$(e,t,n,r)}function o$(e,t,n,r){return r.all(e)}const s$=wW(`type`,{invalid:c$,unknown:l$,handlers:{comment:_Q,doctype:vQ,element:e$,raw:a$,root:o$,text:i$}});function c$(e){throw Error(\"Expected node, not `\"+e+\"`\")}function l$(e){throw Error(\"Cannot compile unknown node `\"+e.type+\"`\")}const u$={},d$={},f$=[];function p$(e,t){let n=t||u$,r=n.quote||`\"`,i=r===`\"`?`'`:`\"`;if(r!==`\"`&&r!==`'`)throw Error(\"Invalid quote `\"+r+\"`, expected `'` or `\\\"`\");return{one:m$,all:h$,settings:{omitOptionalTags:n.omitOptionalTags||!1,allowParseErrors:n.allowParseErrors||!1,allowDangerousCharacters:n.allowDangerousCharacters||!1,quoteSmart:n.quoteSmart||!1,preferUnquoted:n.preferUnquoted||!1,tightAttributes:n.tightAttributes||!1,upperDoctype:n.upperDoctype||!1,tightDoctype:n.tightDoctype||!1,bogusComments:n.bogusComments||!1,tightCommaSeparatedLists:n.tightCommaSeparatedLists||!1,tightSelfClosing:n.tightSelfClosing||!1,collapseEmptyAttributes:n.collapseEmptyAttributes||!1,allowDangerousHtml:n.allowDangerousHtml||!1,voids:n.voids||GZ,characterReferences:n.characterReferences||d$,closeSelfClosing:n.closeSelfClosing||!1,closeEmptyElements:n.closeEmptyElements||!1},schema:n.space===`svg`?AZ:kZ,quote:r,alternative:i}.one(Array.isArray(e)?{type:`root`,children:e}:e,void 0,void 0)}function m$(e,t,n){return s$(e,t,n,this)}function h$(e){let t=[],n=e&&e.children||f$,r=-1;for(;++r`,``)}};function z$(){return e=>{qW(e,`element`,e=>{(e.tagName===`ul`||e.tagName===`ol`||e.tagName===`li`)&&(e.children=e.children.filter(e=>e.type!==`text`||!!e.value.trim()),delete e.properties.className)})}}function B$(){return e=>{qW(e,[`root`,`element`],e=>{if(!V$(e)||!e.children.some(e=>e.type===`raw`))return;let t=document.createElement(`template`);t.innerHTML=p$({type:`root`,children:e.children},{allowDangerousHtml:!0}),e.children=Array.from(t.content.childNodes).map(e=>O$(e))})}}function V$(e){return(e.type===`root`||e.type===`element`)&&e.children}function H$(e){let t=this,n={...t.data(`settings`),...e};t.parser=r;function r(e){return O$((n.fragment===!1?U$:W$)(e))}}function U$(e){return new DOMParser().parseFromString(e,`text/html`)}function W$(e){let t=document.createElement(`template`);return t.innerHTML=e,t.content}const G$=(function(e,t,n,r,i){let a=K$(t);if(n!=null&&(typeof n!=`number`||n<0||n===1/0))throw Error(\"Expected positive finite `index`\");if(r!=null&&(!r.type||!r.children))throw Error(\"Expected valid `parent`\");if(n==null!=(r==null))throw Error(\"Expected both `index` and `parent`\");return Z$(e)?a.call(i,e,n,r):!1}),K$=(function(e){if(e==null)return X$;if(typeof e==`string`)return J$(e);if(typeof e==`object`)return q$(e);if(typeof e==`function`)return Y$(e);throw Error(\"Expected function, string, or array as `test`\")});function q$(e){let t=[],n=-1;for(;++nl&&(l=e):e&&(l!==void 0&&l>-1&&c.push(`\n`.repeat(l)||` `),l=-1,c.push(e))}return c.join(``)}function N1(e,t,n){return e.type===`element`?P1(e,t,n):e.type===`text`?n.whitespace===`normal`?F1(e,n):I1(e):[]}function P1(e,t,n){let r=R1(e,n),i=e.children||[],a=-1,o=[];if(A1(e))return o;let s,c;for(E1(e)||k1(e)&&C1(t,e,k1)?c=`\n`:O1(e)?(s=2,c=2):j1(e)&&(s=1,c=1);++a0;){let e=t.codePointAt(n-1);if(e!==void 0&&(e===10||e===13))n--;else break}return t.slice(0,n)}function U1(e,t){let n=t.children,r=-1,i,a;if(t.tagName===`pre`)for(;++r`};return e.patch(t,n),n}function G1(e,t){let n={type:`delete`,children:e.all(t)};return e.patch(t,n),n}function K1(e){let t=-1;if(e.length>1){for(;++t0&&o.push({type:`listItem`,spread:t.length>1,checked:null,children:t})}if(o.length>0){let n={type:`list`,ordered:!1,start:null,spread:K1(o),children:o};return e.patch(t,n),n}}function J1(e,t){let n=e.all({type:`root`,children:t}),r=e.toSpecificContent(n,Y1);return r.length===0?[]:r.length===1?r[0].children:[{type:`list`,ordered:!1,start:null,spread:K1(r),children:r}]}function Y1(){return{type:`listItem`,spread:!1,checked:null,children:[]}}function X1(e,t){let n={type:`emphasis`,children:e.all(t)};return e.patch(t,n),n}function Z1(e){let t=0,n=e.length;for(;tt&&e[n-1].type===`break`;)n--;return t===0&&n===e.length?e:e.slice(t,n)}function Q1(e,t){let n={type:`heading`,depth:Number(t.tagName.charAt(1))||1,children:Z1(e.all(t))};return e.patch(t,n),n}function $1(e,t){let n={type:`thematicBreak`};return e.patch(t,n),n}function e0(e,t){let n=t.properties||{},r=String(n.src||``),i=String(n.title||``);if(r&&i){let n={type:`link`,title:null,url:e.resolve(r),children:[{type:`text`,value:i}]};return e.patch(t,n),n}}function t0(e,t){let n=t.properties||{},r={type:`image`,url:e.resolve(String(n.src||``)||null),title:n.title?String(n.title):null,alt:n.alt?String(n.alt):``};return e.patch(t,r),r}function n0(e,t){let n={type:`inlineCode`,value:M1(t)};return e.patch(t,n),n}function r0(e,t){let n=[],r=[],i=t||e.properties||{},a=i0(e),o=Math.min(Number.parseInt(String(i.size),10),0)||(i.multiple?4:1),s=-1;for(;++s0?n:a,l=Math.min(c.length,o);for(s=-1;++s0&&(i.push(...t(a)),a=[]),i.push(n(e)))}return a.length>0&&(i.push(...t(a)),a=[]),i}function S0(e){let t=[],n=-1;for(;++n0){let r={type:`paragraph`,children:n};return e.patch(t,r),r}}const D0=[`\"`];function O0(e,t){let n=e.options.quotes||D0;e.qNesting++;let r=e.all(t);e.qNesting--;let i=n[e.qNesting%n.length],a=r[0],o=r[r.length-1],s=i.charAt(0),c=i.length>1?i.charAt(1):i;return a&&a.type===`text`?a.value=s+a.value:r.unshift({type:`text`,value:s}),o&&o.type===`text`?o.value+=c:r.push({type:`text`,value:c}),r}function k0(e,t){let n=e.all(t);(e.options.document||v0(n))&&(n=y0(n));let r={type:`root`,children:n};return e.patch(t,r),r}function A0(e,t){let n=r0(t),r=-1,i=[];for(;++r0){let n={type:`text`,value:i.join(`, `)};return e.patch(t,n),n}}function j0(e,t){let n={type:`strong`,children:e.all(t)};return e.patch(t,n),n}function M0(e,t){let n={type:`tableCell`,children:e.all(t)};if(e.patch(t,n),t.properties){let e=t.properties.rowSpan,r=t.properties.colSpan;if(e||r){let t=n.data||={};e&&(t.hastUtilToMdastTemporaryRowSpan=e),r&&(t.hastUtilToMdastTemporaryColSpan=r)}}return n}function N0(e,t){let n={type:`tableRow`,children:e.toSpecificContent(e.all(t),P0)};return e.patch(t,n),n}function P0(){return{type:`tableCell`,children:[]}}function F0(e,t){if(e.inTable){let n={type:`text`,value:M1(t)};return e.patch(t,n),n}e.inTable=!0;let{align:n,headless:r}=I0(t),i=e.toSpecificContent(e.all(t),R0);r&&i.unshift(R0());let a=-1;for(;++a1||o>1){let e=a-1;for(;++eo&&(o=e.length)}for(a=-1;++a0&&(t.children.unshift(...i),i=[]),r.push(t);else{let e=t;i.push(e)}}if(i.length>0){let e=r[r.length-1];e||(e=t(),r.push(e)),e.children.push(...i),i=[]}return r;function o(e){return e.type===n.type}}const $0={};function e2(e,t){let n=nX(e),r=t||$0,i=v1({newlines:r.newlines===!0}),a=K0(r),o;i(n),qW(n,function(e){if(e&&e.type===`element`&&e.properties){let t=String(e.properties.id||``)||void 0;t&&!a.elementById.has(t)&&a.elementById.set(t,e)}});let s=a.one(n,void 0);return o=s?Array.isArray(s)?{type:`root`,children:s}:s:{type:`root`,children:[]},qW(o,function(e,t,n){if(e.type===`text`&&t!==void 0&&n){let r=n.children[t-1];if(r&&r.type===e.type)return r.value+=e.value,n.children.splice(t,1),r.position&&e.position&&(r.position.end=e.position.end),t-1;if(e.value=e.value.replace(/[\\t ]*(\\r?\\n|\\r)[\\t ]*/,`$1`),n&&(n.type===`heading`||n.type===`paragraph`||n.type===`root`)&&(t||(e.value=e.value.replace(/^[\\t ]+/,``)),t===n.children.length-1&&(e.value=e.value.replace(/[\\t ]+$/,``))),!e.value)return n.children.splice(t,1),t}}),o}const t2={document:!0};function n2(e,t){return e&&`run`in e?async function(n,r){let i=e2(n,{...t2,...t});await e.run(i,r)}:function(t){return e2(t,{...t2,...e})}}function r2(e){let t=this;t.compiler=n;function n(n){return QG(n,{...t.data(`settings`),...e,extensions:t.data(`toMarkdownExtensions`)||[]})}}var i2=class{_processor;_keepRawTags=[];constructor(){this._buildProcessor()}keep(e){this._keepRawTags.push(e.toLowerCase()),this._buildProcessor()}parse(e){return this._processor.processSync(e).toString().trim()}_getRawTagsHandlers(){return this._keepRawTags.reduce((e,t)=>(e[t]=(e,t)=>{let n=p$(E$(t.tagName,t.properties),{allowDangerousHtml:!0,closeSelfClosing:!0}),r=n.indexOf(`>`),i=n.slice(0,r+1),a=n.slice(r+1);return[{type:`html`,value:i},...e.all(t),{type:`html`,value:a}]},e),{})}_buildProcessor(){this._processor=ZH().use(H$).use(a2).use(n2,{handlers:this._getRawTagsHandlers()}).use(oY,{singleTilde:!0}).use(QX).use(r2,{resourceLink:!0,emphasis:`_`,rule:`-`,handlers:{break:()=>`\n`},unsafe:[{character:`<`}]})}};function a2(){return function(e){qW(e,`element`,(e,t,n)=>{t!==null&&e.tagName===`label`&&n.type===`element`&&n.tagName===`li`&&n.children.splice(t,1,...e.children)})}}var o2=class{_htmlDP;_markdown2html;_html2markdown;constructor(e){this._htmlDP=new Td(e),this._markdown2html=new R$,this._html2markdown=new i2}keepHtml(e){this._html2markdown.keep(e)}toView(e){let t=this._markdown2html.parse(e);return this._htmlDP.toView(t)}toData(e){let t=this._htmlDP.toData(e);return this._html2markdown.parse(t)}registerRawContentMatcher(e){this._htmlDP.registerRawContentMatcher(e)}useFillerType(){}},s2=class extends F{constructor(e){super(e),e.data.processor=new o2(e.data.viewDocument)}static get pluginName(){return`Markdown`}static get isOfficialPlugin(){return!0}};const c2=[`SPAN`,`BR`,`PRE`,`CODE`];var l2=class extends F{_gfmDataProcessor;constructor(e){super(e),this._gfmDataProcessor=new o2(e.data.viewDocument)}static get pluginName(){return`PasteFromMarkdownExperimental`}static get isOfficialPlugin(){return!0}static get requires(){return[_O]}init(){let e=this.editor,t=e.editing.view.document,n=e.plugins.get(`ClipboardPipeline`),r=!1;this.listenTo(t,`keydown`,(e,t)=>{r=t.shiftKey}),this.listenTo(n,`inputTransformation`,(e,t)=>{if(r)return;let n=t.dataTransfer.getData(`text/html`);if(!n){let e=t.dataTransfer.getData(`text/plain`);t.content=this._gfmDataProcessor.toView(e);return}let i=this._parseMarkdownFromHtml(n);i&&(t.content=this._gfmDataProcessor.toView(i))})}_parseMarkdownFromHtml(e){let t=this._removeOsSpecificTags(e);if(!this._containsOnlyAllowedFirstLevelTags(t))return null;let n=this._removeFirstLevelWrapperTagsAndBrs(t);return this._containsAnyRemainingHtmlTags(n)?null:this._replaceHtmlReservedEntitiesWithCharacters(n)}_removeOsSpecificTags(e){return e.replace(/^]*>/,``).trim().replace(/^/,``).replace(/<\\/html>$/,``).trim().replace(/^/,``).replace(/<\\/body>$/,``).trim().replace(/^/,``).replace(/$/,``).trim()}_containsOnlyAllowedFirstLevelTags(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`);return Array.from(t.children).map(e=>e.tagName).every(e=>c2.includes(e))}_removeFirstLevelWrapperTagsAndBrs(e){let{body:t}=new DOMParser().parseFromString(e,`text/html`),n=t.querySelectorAll(`br`);for(let e of n)e.replaceWith(`\n`);let r=t.querySelectorAll(`:scope > *`);for(let e of r){let t=e.cloneNode(!0);e.replaceWith(...t.childNodes)}return t.innerHTML}_containsAnyRemainingHtmlTags(e){return e.includes(`<`)}_replaceHtmlReservedEntitiesWithCharacters(e){return e.replace(/>/g,`>`).replace(/</g,`<`).replace(/ /g,` `)}};function u2(e,t){let n=(n,r,i)=>{if(!i.consumable.consume(r.item,n.name))return;let a=r.attributeNewValue,o=i.writer,s=i.mapper.toViewElement(r.item),c=[...s.getChildren()].find(e=>e.getCustomProperty(`media-content`));o.remove(c);let l=e.getMediaViewElement(o,a,t);o.insert(o.createPositionAt(s,0),l)};return e=>{e.on(`attribute:url:media`,n)}}function d2(e,t,n){return t.setCustomProperty(`media`,!0,e),UE(e,t,{label:n})}function f2(e){let t=e.getSelectedElement();return t&&p2(t)?t:null}function p2(e){return!!e.getCustomProperty(`media`)&&HE(e)}function m2(e,t,n,r){return e.createContainerElement(`figure`,{class:`media`},[t.getMediaViewElement(e,n,r),e.createSlot()])}function h2(e){let t=e.getSelectedElement();return t&&t.is(`element`,`media`)?t:null}function g2(e,t,n,r){e.change(i=>{let a=i.createElement(`media`,{url:t});e.insertObject(a,n,null,{setSelection:`on`,findOptimalPosition:r?`auto`:void 0})})}var _2=class extends I{refresh(){let e=this.editor.model,t=e.document.selection,n=h2(t);this.value=n?n.getAttribute(`url`):void 0,this.isEnabled=y2(t)||v2(t,e)}execute(e){let t=this.editor.model,n=t.document.selection,r=h2(n);r?t.change(t=>{t.setAttribute(`url`,e,r)}):g2(t,e,n,!0)}};function v2(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!t.schema.isLimit(n)&&(n=n.parent),t.schema.checkChild(n,`media`)}function y2(e){let t=e.getSelectedElement();return!!t&&t.name===`media`}var b2=class{locale;providerDefinitions;constructor(e,t){let n=t.providers,r=t.extraProviders||[],i=new Set(t.removeProviders),a=n.concat(r).filter(e=>{let t=e.name;return t?!i.has(t):(T(`media-embed-no-provider-name`,{provider:e}),!1)});this.locale=e,this.providerDefinitions=a}hasMedia(e){return!!this._getMedia(e)}getMediaViewElement(e,t,n){return this._getMedia(t).getViewElement(e,n)}_getMedia(e){if(!e)return new x2(this.locale);e=e.trim();for(let t of this.providerDefinitions){let n=t.html,r=A(t.url);for(let t of r){let r=this._getUrlMatches(e,t);if(r)return new x2(this.locale,e,r,n)}}return null}_getUrlMatches(e,t){let n=e.match(t);if(n)return n;let r=e.replace(/^https?:\\/\\//,``);return n=r.match(t),n||(r=r.replace(/^www\\./,``),n=r.match(t),n)?n:null}},x2=class{url;_locale;_match;_previewRenderer;constructor(e,t,n,r){this.url=this._getValidUrl(t),this._locale=e,this._match=n,this._previewRenderer=r}getViewElement(e,t){let n={},r;if(t.renderForEditingView||t.renderMediaPreview&&this.url&&this._previewRenderer){this.url&&(n[`data-oembed-url`]=this.url),t.renderForEditingView&&(n.class=`ck-media__wrapper`);let i=this._getPreviewHtml(t);r=e.createRawElement(`div`,n,(e,t)=>{t.setContentOf(e,i)})}else this.url&&(n.url=this.url),r=e.createEmptyElement(t.elementName,n);return e.setCustomProperty(`media-content`,!0,r),r}_getPreviewHtml(e){return this._previewRenderer?this._previewRenderer(this._match):this.url&&e.renderForEditingView?this._getPlaceholderHtml():``}_getPlaceholderHtml(){let e=new Ly,t=this._locale.t;return e.content=fv,e.viewBox=`0 0 64 42`,new ga({tag:`div`,attributes:{class:`ck ck-reset_all ck-media__placeholder`},children:[{tag:`div`,attributes:{class:`ck-media__placeholder__icon`},children:[e]},{tag:`a`,attributes:{class:`ck-media__placeholder__url`,target:`_blank`,rel:`noopener noreferrer`,href:this.url,\"data-cke-tooltip-text\":t(`Open media in new tab`)},children:[{tag:`span`,attributes:{class:`ck-media__placeholder__url__text`},children:[this.url]}]}]}).render().outerHTML}_getValidUrl(e){return e?e.match(/^https?/)?e:`https://`+e:null}},S2=class extends F{static get pluginName(){return`MediaEmbedEditing`}static get isOfficialPlugin(){return!0}registry;constructor(e){super(e),e.config.define(`mediaEmbed`,{elementName:`oembed`,providers:[{name:`dailymotion`,url:[/^dailymotion\\.com\\/video\\/(\\w+)/,/^dai.ly\\/(\\w+)/],html:e=>`
    `},{name:`spotify`,url:[/^open\\.spotify\\.com\\/(artist\\/\\w+)/,/^open\\.spotify\\.com\\/(album\\/\\w+)/,/^open\\.spotify\\.com\\/(track\\/\\w+)/],html:e=>{let t=e[1],n=t.startsWith(`track/`);return`
    `}},{name:`youtube`,url:[/^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,/^(?:m\\.)?youtube\\.com\\/shorts\\/([\\w-]+)(?:\\?t=(\\d+))?/,/^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,/^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,/^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/],html:e=>{let t=e[1],n=e[2];return`
    `}},{name:`vimeo`,url:[/^vimeo\\.com\\/(\\d+)/,/^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,/^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,/^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,/^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,/^player\\.vimeo\\.com\\/video\\/(\\d+)/],html:e=>`
    `},{name:`instagram`,url:[/^instagram\\.com\\/p\\/(\\w+)/,/^instagram\\.com\\/reel\\/(\\w+)/]},{name:`twitter`,url:[/^twitter\\.com/,/^x\\.com/]},{name:`googleMaps`,url:[/^google\\.com\\/maps/,/^goo\\.gl\\/maps/,/^maps\\.google\\.com/,/^maps\\.app\\.goo\\.gl/]},{name:`flickr`,url:/^flickr\\.com/},{name:`facebook`,url:/^facebook\\.com/}]}),this.registry=new b2(e.locale,e.config.get(`mediaEmbed`))}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion,i=e.config.get(`mediaEmbed.previewsInData`),a=e.config.get(`mediaEmbed.elementName`),o=this.registry;e.commands.add(`mediaEmbed`,new _2(e)),t.register(`media`,{inheritAllFrom:`$blockObject`,allowAttributes:[`url`]}),r.for(`dataDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>{let n=e.getAttribute(`url`);return m2(t,o,n,{elementName:a,renderMediaPreview:!!n&&i})}}),r.for(`dataDowncast`).add(u2(o,{elementName:a,renderMediaPreview:i})),r.for(`editingDowncast`).elementToStructure({model:`media`,view:(e,{writer:t})=>d2(m2(t,o,e.getAttribute(`url`),{elementName:a,renderForEditingView:!0}),t,n(`media widget`))}),r.for(`editingDowncast`).add(u2(o,{elementName:a,renderForEditingView:!0})),r.for(`upcast`).elementToElement({view:e=>[`oembed`,a].includes(e.name)&&e.getAttribute(`url`)?{name:!0}:null,model:(e,{writer:t})=>{let n=e.getAttribute(`url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).elementToElement({view:{name:`div`,attributes:{\"data-oembed-url\":!0}},model:(e,{writer:t})=>{let n=e.getAttribute(`data-oembed-url`);return o.hasMedia(n)?t.createElement(`media`,{url:n}):null}}).add(e=>{e.on(`element:figure`,(e,t,n)=>{if(!n.consumable.consume(t.viewItem,{name:!0,classes:`media`}))return;let{modelRange:r,modelCursor:i}=n.convertChildren(t.viewItem,t.modelCursor);t.modelRange=r,t.modelCursor=i,j(r.getItems())||n.consumable.revert(t.viewItem,{name:!0,classes:`media`})})})}};const C2=/^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;var w2=class extends F{static get requires(){return[PO,hT,Ik]}static get pluginName(){return`AutoMediaEmbed`}static get isOfficialPlugin(){return!0}_timeoutId;_positionToInsert;constructor(e){super(e),this._timeoutId=null,this._positionToInsert=null}init(){let e=this.editor,t=e.model.document,n=e.plugins.get(`ClipboardPipeline`);this.listenTo(n,`inputTransformation`,()=>{let e=t.selection.getFirstRange(),n=pf.fromPosition(e.start);n.stickiness=`toPrevious`;let r=pf.fromPosition(e.end);r.stickiness=`toNext`,t.once(`change:data`,()=>{this._embedMediaBetweenPositions(n,r),n.detach(),r.detach()},{priority:`high`})}),e.commands.get(`undo`).on(`execute`,()=>{this._timeoutId&&(u.window.clearTimeout(this._timeoutId),this._positionToInsert.detach(),this._timeoutId=null,this._positionToInsert=null)},{priority:`high`})}_embedMediaBetweenPositions(e,t){let n=this.editor,r=n.plugins.get(S2).registry,i=new xl(e,t),a=i.getWalker({ignoreElementEnd:!0}),o=``;for(let e of a)e.item.is(`$textProxy`)&&(o+=e.item.data);if(o=o.trim(),!o.match(C2)){i.detach();return}if(!r.hasMedia(o)){i.detach();return}if(!n.commands.get(`mediaEmbed`).isEnabled){i.detach();return}this._positionToInsert=pf.fromPosition(e),this._timeoutId=u.window.setTimeout(()=>{n.model.change(e=>{this._timeoutId=null,e.remove(i),i.detach();let t=null;this._positionToInsert.root.rootName!==`$graveyard`&&(t=this._positionToInsert),g2(n.model,o,t,!1),this._positionToInsert.detach(),this._positionToInsert=null}),n.plugins.get(hT).requestUndoOnBackspace()},100)}},T2=class extends P{focusTracker;keystrokes;urlInputView;_validators;_urlInputViewInfoDefault;_urlInputViewInfoTip;constructor(e,t){super(t),this.focusTracker=new M,this.keystrokes=new N,this.set(`mediaURLInputValue`,``),this.urlInputView=this._createUrlInput(),this._validators=e,this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-media-form`,`ck-responsive-form`],tabindex:`-1`},children:[this.urlInputView]})}render(){super.render(),Qa({view:this}),this.focusTracker.add(this.urlInputView.element),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}focus(){this.urlInputView.focus()}get url(){return this.urlInputView.fieldView.element.value.trim()}set url(e){this.urlInputView.fieldView.value=e.trim()}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.urlInputView.errorText=t,!1}return!0}resetFormStatus(){this.urlInputView.errorText=null,this.urlInputView.infoText=this._urlInputViewInfoDefault}_createUrlInput(){let e=this.locale.t,t=new Qb(this.locale,Jx),n=t.fieldView;return this._urlInputViewInfoDefault=e(`Paste the media URL in the input.`),this._urlInputViewInfoTip=e(`Tip: Paste the URL into the content to embed faster.`),t.label=e(`Media URL`),t.infoText=this._urlInputViewInfoDefault,n.inputMode=`url`,n.on(`input`,()=>{t.infoText=n.element.value?this._urlInputViewInfoTip:this._urlInputViewInfoDefault,this.mediaURLInputValue=n.element.value.trim()}),t}},E2=class extends F{static get requires(){return[S2,Qy]}static get pluginName(){return`MediaEmbedUI`}static get isOfficialPlugin(){return!0}_formView;init(){let e=this.editor;e.ui.componentFactory.add(`mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(H);return t.tooltip=!0,t.label=e(`Insert media`),t}),e.ui.componentFactory.add(`menuBar:mediaEmbed`,()=>{let e=this.editor.locale.t,t=this._createDialogButton(U);return t.label=e(`Media`),t})}_createDialogButton(e){let t=this.editor,n=new e(t.locale),r=t.commands.get(`mediaEmbed`),i=this.editor.plugins.get(`Dialog`);return n.icon=pv,n.bind(`isEnabled`).to(r,`isEnabled`),n.on(`execute`,()=>{i.id===`mediaEmbed`?i.hide():this._showDialog()}),n}_showDialog(){let e=this.editor,t=e.plugins.get(`Dialog`),n=e.commands.get(`mediaEmbed`),r=e.locale.t,i=n.value!==void 0;if(!this._formView){let t=e.plugins.get(S2).registry;this._formView=new(Xa(T2))(D2(e.t,t),e.locale),this._formView.on(`submit`,()=>this._handleSubmitForm())}t.show({id:`mediaEmbed`,title:r(`Media embed`),content:this._formView,isModal:!0,onShow:()=>{this._formView.url=n.value||``,this._formView.resetFormStatus(),this._formView.urlInputView.fieldView.select()},actionButtons:[{label:r(`Cancel`),withText:!0,onExecute:()=>t.hide()},{label:r(i?`Save`:`Insert`),class:`ck-button-action`,withText:!0,onExecute:()=>this._handleSubmitForm()}]})}_handleSubmitForm(){let e=this.editor,t=e.plugins.get(`Dialog`);this._formView.isValid()&&(e.execute(`mediaEmbed`,this._formView.url),t.hide(),e.editing.view.focus())}};function D2(e,t){return[t=>{if(!t.url.length)return e(`The URL must not be empty.`)},n=>{if(!t.hasMedia(n.url))return e(`This media URL is not supported.`)}]}var O2=class extends F{static get requires(){return[S2,E2,w2,xD]}static get pluginName(){return`MediaEmbed`}static get isOfficialPlugin(){return!0}};const k2={alignLeft:{name:`alignLeft`,title:`Left aligned media`,icon:xv,className:`media-style-align-left`},alignBlockLeft:{name:`alignBlockLeft`,title:`Left aligned media`,icon:wv,className:`media-style-block-align-left`},alignCenter:{name:`alignCenter`,title:`Centered media`,icon:yv,isDefault:!0},alignBlockRight:{name:`alignBlockRight`,title:`Right aligned media`,icon:Tv,className:`media-style-block-align-right`},alignRight:{name:`alignRight`,title:`Right aligned media`,icon:Sv,className:`media-style-align-right`}},A2={inlineLeft:xv,left:wv,center:yv,right:Tv,inlineRight:Sv},j2=[{name:`mediaEmbed:wrapText`,title:`Wrap text`,items:[`mediaEmbed:alignLeft`,`mediaEmbed:alignRight`],defaultItem:`mediaEmbed:alignLeft`},{name:`mediaEmbed:breakText`,title:`Break text`,items:[`mediaEmbed:alignBlockLeft`,`mediaEmbed:alignCenter`,`mediaEmbed:alignBlockRight`],defaultItem:`mediaEmbed:alignCenter`}];function M2(e){return(e.options||[]).map(e=>N2(e)).filter(e=>P2(e))}function N2(e){let t=typeof e==`string`?{name:e}:e,n={...k2[t.name],...t};return typeof n.icon==`string`&&A2[n.icon]&&(n.icon=A2[n.icon]),n}function P2(e){return!e.name||!e.title||!e.icon||!e.isDefault&&!e.className?(F2({style:e}),!1):!0}function F2(e){T(`media-style-configuration-definition-invalid`,e)}function I2(e){return typeof e==`object`&&!!e&&typeof e.defaultItem==`string`}var L2=class extends F{static get requires(){return[kD]}static get pluginName(){return`MediaEmbedToolbar`}static get isOfficialPlugin(){return!0}afterInit(){let e=this.editor,t=e.t;e.plugins.get(kD).register(`mediaEmbed`,{ariaLabel:t(`Media toolbar`),items:R2(e.ui.componentFactory,e.config.get(`mediaEmbed.toolbar`)||[]),getRelatedElement:f2})}};function R2(e,t){return t.map(e=>I2(e)?e.name:e).filter(t=>typeof t!=`string`||!t.startsWith(`mediaEmbed:`)||e.has(t))}var z2=class extends I{refresh(){let e=h2(this.editor.model.document.selection);this.isEnabled=!!e,!e||!e.hasAttribute(`resizedWidth`)?this.value=null:this.value=e.getAttribute(`resizedWidth`)}execute(e){let t=this.editor.model,n=h2(t.document.selection);n&&t.change(t=>{t.setAttribute(`resizedWidth`,e.width,n)})}};const B2=`media_resized`;var V2=class extends F{static get requires(){return[S2]}static get pluginName(){return`MediaEmbedResizeEditing`}static get licenseFeatureCode(){return`MER`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}constructor(e){super(e),e.config.define(`mediaEmbed`,{resizeUnit:`%`,resizeOptions:[{name:`resizeMediaEmbed:original`,value:null,icon:`original`},{name:`resizeMediaEmbed:custom`,value:`custom`,icon:`custom`},{name:`resizeMediaEmbed:25`,value:`25`,icon:`small`},{name:`resizeMediaEmbed:50`,value:`50`,icon:`medium`},{name:`resizeMediaEmbed:75`,value:`75`,icon:`large`}]})}init(){let e=this.editor;e.commands.add(`resizeMediaEmbed`,new z2(e)),this._registerConverters()}afterInit(){this._registerSchema()}_registerSchema(){let e=this.editor.model.schema;e.extend(`media`,{allowAttributes:[`resizedWidth`]}),e.setAttributeProperties(`resizedWidth`,{isFormatting:!0})}_registerConverters(){let e=this.editor;e.conversion.for(`downcast`).add(e=>e.on(`attribute:resizedWidth:media`,(e,t,n)=>{if(!n.consumable.consume(t.item,e.name))return;let r=n.writer,i=n.mapper.toViewElement(t.item);t.attributeNewValue===null?(r.removeStyle(`width`,i),r.removeClass(B2,i)):(r.setStyle(`width`,t.attributeNewValue,i),r.addClass(B2,i))})),e.conversion.for(`upcast`).attributeToAttribute({view:{name:`figure`,styles:{width:/.+/}},model:{key:`resizedWidth`,value:e=>e.hasClass(`media`)?e.getStyle(`width`):null}}),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,t,n)=>{n.consumable.consume(t.viewItem,{classes:[B2]})})})}},H2=class extends F{static get requires(){return[GD]}static get pluginName(){return`MediaEmbedResizeHandles`}static get isOfficialPlugin(){return!0}init(){let e=this.editor.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(e),this._setupResizerCreator()}_setupResizerCreator(){let e=this.editor,t=e.model,n=e.plugins.get(GD);this.listenTo(t.document,`change:data`,()=>{for(let r of t.document.differ.getChanges()){if(r.type!==`insert`||r.name===`$text`)continue;let i=t.createRange(r.position,r.position.getShiftedBy(r.length));for(let t of i.getItems()){if(!t.is(`element`,`media`))continue;let r=e.editing.mapper.toViewElement(t);r&&(n.getResizerByViewElement(r)||this._attachResizer(t,r))}}},{priority:`low`})}_attachResizer(e,t){let n=this.editor,r=n.editing.view,i=n.plugins.get(GD).attachTo({unit:n.config.get(`mediaEmbed.resizeUnit`),modelElement:e,viewElement:t,editor:n,getHandleHost:e=>e.querySelector(`.ck-media__wrapper`),getResizeHost:e=>e,onCommit:e=>{r.change(e=>e.removeClass(B2,t)),n.execute(`resizeMediaEmbed`,{width:e})}});i.bind(`isEnabled`).to(this),i.on(`updateSize`,()=>{t.hasClass(`media_resized`)||r.change(e=>e.addClass(B2,t))}),r.once(`render`,()=>i.redraw())}};const U2={small:Av,medium:kv,large:Ov,custom:Ev,original:Dv};var W2=class extends F{static get requires(){return[V2]}static get pluginName(){return`MediaEmbedResizeButtons`}static get isOfficialPlugin(){return!0}_resizeUnit;constructor(e){super(e),this._resizeUnit=e.config.get(`mediaEmbed.resizeUnit`)}init(){let e=this.editor,t=e.config.get(`mediaEmbed.resizeOptions`),n=e.commands.get(`resizeMediaEmbed`);this.bind(`isEnabled`).to(n);for(let e of t)this._registerMediaEmbedResizeButton(e);this._registerMediaEmbedResizeDropdown(t)}_registerMediaEmbedResizeButton(e){let t=this.editor,{name:n,value:r,icon:i}=e;t.ui.componentFactory.add(n,n=>{let a=new H(n),o=t.commands.get(`resizeMediaEmbed`),s=this._getOptionLabelValue(e,!0);if(!U2[i])throw new w(`mediaembedresizebuttons-missing-icon`,t,e);if(a.set({label:s,icon:U2[i],tooltip:s,isToggleable:!0}),a.bind(`isEnabled`).to(this),t.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let e=t.plugins.get(`MediaEmbedCustomResizeUI`);this.listenTo(a,`execute`,()=>{e._showForm(this._resizeUnit)})}else{let e=r?r+this._resizeUnit:null;a.bind(`isOn`).to(o,`value`,o,`isEnabled`,K2(e)),this.listenTo(a,`execute`,()=>{t.execute(`resizeMediaEmbed`,{width:e})})}return a})}_registerMediaEmbedResizeDropdown(e){let t=this.editor,n=t.t,r=e.find(e=>!e.value);t.ui.componentFactory.add(`resizeMediaEmbed`,i=>{let a=t.commands.get(`resizeMediaEmbed`),o=Nx(i,cx),s=o.buttonView,c=n(`Resize media`);return s.set({tooltip:c,commandValue:r?r.value:null,icon:U2.medium,isToggleable:!0,label:r?this._getOptionLabelValue(r):``,withText:!0,class:`ck-resize-media-embed-button`,ariaLabel:c,ariaLabelledBy:void 0}),s.bind(`label`).to(a,`value`,e=>e||(r?this._getOptionLabelValue(r):``)),o.bind(`isEnabled`).to(this),Lx(o,()=>this._getResizeDropdownListItemDefinitions(e,a),{ariaLabel:n(`Media resize list`),role:`menu`}),this.listenTo(o,`execute`,e=>{`onClick`in e.source?e.source.onClick():(t.execute(e.source.commandName,{width:e.source.commandValue}),t.editing.view.focus())}),o})}_getOptionLabelValue(e,t=!1){let n=this.editor.t;if(e.label)return e.label;let r=G2(e);return t?r?n(`Custom media size`):e.value?n(`Resize media to %0`,e.value+this._resizeUnit):n(`Resize media to the original size`):r?n(`Custom`):e.value?e.value+this._resizeUnit:n(`Original`)}_getResizeDropdownListItemDefinitions(e,t){let{editor:n}=this,r=new Fi,i=e.map(e=>G2(e)?{...e,valueWithUnits:`custom`}:e.value?{...e,valueWithUnits:`${e.value}${this._resizeUnit}`}:{...e,valueWithUnits:null});for(let e of i){let a=null;if(n.plugins.has(`MediaEmbedCustomResizeUI`)&&G2(e)){let r=n.plugins.get(`MediaEmbedCustomResizeUI`);a={type:`button`,model:new RC({label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null,onClick:()=>{r._showForm(this._resizeUnit)}})};let o=Object.values(i).map(e=>e.valueWithUnits);a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,q2(o))}else a={type:`button`,model:new RC({commandName:`resizeMediaEmbed`,commandValue:e.valueWithUnits,label:this._getOptionLabelValue(e),role:`menuitemradio`,withText:!0,icon:null})},a.model.bind(`isOn`).to(t,`value`,t,`isEnabled`,K2(e.valueWithUnits));a.model.bind(`isEnabled`).to(t,`isEnabled`),r.add(a)}return r}};function G2(e){return e.value===`custom`}function K2(e){return(t,n)=>t===void 0||!n?!1:t===e}function q2(e){return(t,n)=>!e.some(e=>K2(e)(t,n))}function J2(e){let{editing:t}=e,n=h2(e.model.document.selection);if(!n)return null;let r=t.mapper.toViewElement(n);return{model:n,view:r,dom:t.view.domConverter.mapViewToDom(r)}}function Y2(e,t){let n=J2(e);if(!n)return null;let r=da(n.model.getAttribute(`resizedWidth`)||null);return r?r.unit===t?r:fa(eD(n.dom),{unit:`px`,value:new O(n.dom).width},t):null}function X2(e,t){let n=J2(e);if(!n)return null;let r=eD(n.dom),i=da(window.getComputedStyle(n.dom).minWidth)||{value:1,unit:`px`};return{unit:t,lower:Math.max(.1,fa(r,i,t).value),upper:t===`px`?r:100}}var Z2=class extends P{focusTracker;keystrokes;unit;backButtonView;saveButtonView;labeledInput;children;_focusables;_focusCycler;_validators;constructor(e,t,n){super(e),this.focusTracker=new M,this.keystrokes=new N,this.unit=t,this.backButtonView=this._createBackButton(),this.saveButtonView=this._createSaveButton(),this.labeledInput=this._createLabeledInputView(),this.children=this.createCollection([this._createHeaderView()]),this.children.add(new MC(e,{children:[this.labeledInput,this.saveButtonView],class:[`ck-form__row_with-submit`,`ck-form__row_large-top-padding`]})),this._focusables=new pa,this._validators=n,this.keystrokes.set(`Esc`,(e,t)=>{this.fire(`cancel`),t()}),this._focusCycler=new Hy({focusables:this._focusables,focusTracker:this.focusTracker,keystrokeHandler:this.keystrokes,actions:{focusPrevious:`shift + tab`,focusNext:`tab`}}),this.setTemplate({tag:`form`,attributes:{class:[`ck`,`ck-form`,`ck-media-embed-custom-resize-form`,`ck-responsive-form`],tabindex:`-1`},children:this.children})}render(){super.render(),Qa({view:this}),[this.backButtonView,this.labeledInput,this.saveButtonView].forEach(e=>{this._focusables.add(e),this.focusTracker.add(e.element)}),this.keystrokes.listenTo(this.element)}destroy(){super.destroy(),this.focusTracker.destroy(),this.keystrokes.destroy()}_createBackButton(){let e=this.locale.t,t=new H(this.locale);return t.set({class:`ck-button-back`,label:e(`Back`),icon:Wv,tooltip:!0}),t.delegate(`execute`).to(this,`cancel`),t}_createSaveButton(){let e=this.locale.t,t=new H(this.locale);return t.set({label:e(`Save`),withText:!0,type:`submit`,class:`ck-button-action ck-button-bold`}),t}_createHeaderView(){let e=this.locale.t,t=new By(this.locale,{label:e(`Media Resize`)});return t.children.add(this.backButtonView,0),t}_createLabeledInputView(){let e=this.locale.t,t=new Qb(this.locale,Yx);return t.label=e(`Resize media (in %0)`,this.unit),t.class=`ck-labeled-field-view_full-width`,t.fieldView.set({min:.1,step:.1}),t}isValid(){this.resetFormStatus();for(let e of this._validators){let t=e(this);if(t)return this.labeledInput.errorText=t,!1}return!0}resetFormStatus(){this.labeledInput.errorText=null}get rawSize(){let{element:e}=this.labeledInput.fieldView;return e?e.value:null}get parsedSize(){let{rawSize:e}=this;if(e===null)return null;let t=Number.parseFloat(e);return Number.isNaN(t)?null:t}get sizeWithUnits(){let{parsedSize:e,unit:t}=this;return e===null?null:`${e}${t}`}},Q2=class extends F{_balloon;_form;static get requires(){return[BC]}static get pluginName(){return`MediaEmbedCustomResizeUI`}static get isOfficialPlugin(){return!0}destroy(){super.destroy(),this._form&&this._form.destroy()}_createForm(e){let t=this.editor;this._balloon=this.editor.plugins.get(`ContextualBalloon`);let n=Xa(Z2);this._form=new n(t.locale,e,e4(t)),this._form.render(),this.listenTo(this._form,`submit`,()=>{this._form.isValid()&&(t.execute(`resizeMediaEmbed`,{width:this._form.sizeWithUnits}),this._hideForm(!0))}),this.listenTo(this._form.labeledInput,`change:errorText`,()=>{t.ui.update()}),this.listenTo(this._form,`cancel`,()=>{this._hideForm(!0)}),Ya({emitter:this._form,activator:()=>this._isVisible,contextElements:()=>[this._balloon.view.element],callback:()=>this._hideForm()})}_showForm(e){if(this._isVisible)return;this._form||this._createForm(e);let t=this.editor,n=this._form.labeledInput;this._form.disableCssTransitions(),this._form.resetFormStatus(),this._isInBalloon||this._balloon.add({view:this._form,position:$2(t)});let r=Y2(t,e),i=r?r.value.toFixed(1):``,a=X2(t,e);n.fieldView.value=n.fieldView.element.value=i,a&&Object.assign(n.fieldView,{min:a.lower.toFixed(1),max:Math.ceil(a.upper).toFixed(1)}),this._form.labeledInput.fieldView.select(),this._form.enableCssTransitions()}_hideForm(e=!1){this._isInBalloon&&(this._form.focusTracker.isFocused&&this._form.saveButtonView.focus(),this._balloon.remove(this._form),e&&this.editor.editing.view.focus())}get _isVisible(){return!!this._balloon&&this._balloon.visibleView===this._form}get _isInBalloon(){return!!this._balloon&&this._balloon.hasView(this._form)}};function $2(e){let t=e.editing.view,n=ab.defaultPositions;return{target:t.domConverter.mapViewToDom(f2(t.document.selection)),positions:[n.northArrowSouth,n.northArrowSouthWest,n.northArrowSouthEast,n.southArrowNorth,n.southArrowNorthWest,n.southArrowNorthEast,n.viewportStickyNorth]}}function e4(e){let t=e.t;return[e=>{if(e.rawSize.trim()===``)return t(`The value must not be empty.`);if(e.parsedSize===null)return t(`The value should be a plain number.`)}]}var t4=class extends F{static get requires(){return[V2,H2,Q2,W2]}static get pluginName(){return`MediaEmbedResize`}static get isOfficialPlugin(){return!0}},n4=class extends I{_styles;_defaultStyleName;constructor(e,t){super(e),this._styles=new Map(t.map(e=>[e.name,e]));let n=t.find(e=>e.isDefault);this._defaultStyleName=n?n.name:null}refresh(){let e=h2(this.editor.model.document.selection);if(this.isEnabled=!!e,!e)this.value=!1;else if(e.hasAttribute(`mediaStyle`)){let t=e.getAttribute(`mediaStyle`);this.value=this._styles.has(t)?t:this._defaultStyleName??!1}else this.value=this._defaultStyleName??!1}execute(e){let t=this.editor.model,n=h2(t.document.selection),r=e.value;if(!r||this._styles.get(r)?.isDefault){t.change(e=>{e.removeAttribute(`mediaStyle`,n)});return}this._styles.has(r)&&t.change(e=>{e.setAttribute(`mediaStyle`,r,n)})}},r4=class extends F{normalizedStyles;static get requires(){return[S2]}static get pluginName(){return`MediaEmbedStyleEditing`}static get isOfficialPlugin(){return!0}init(){let e=this.editor,t=e.model.schema;e.config.define(`mediaEmbed.styles`,{options:Object.keys(k2)}),this.normalizedStyles=M2(e.config.get(`mediaEmbed.styles`)),t.extend(`media`,{allowAttributes:[`mediaStyle`]}),t.setAttributeProperties(`mediaStyle`,{isFormatting:!0}),e.commands.add(`mediaStyle`,new n4(e,this.normalizedStyles)),this._registerConverters()}_registerConverters(){let e=this.editor,t=new Map(this.normalizedStyles.filter(e=>!e.isDefault&&e.className).map(e=>[e.name,e.className]));e.conversion.for(`downcast`).add(e=>e.on(`attribute:mediaStyle:media`,(e,n,r)=>{if(!r.consumable.consume(n.item,e.name))return;let i=r.mapper.toViewElement(n.item),a=r.writer,o=t.get(n.attributeOldValue),s=t.get(n.attributeNewValue);o&&a.removeClass(o,i),s&&a.addClass(s,i)})),e.conversion.for(`upcast`).add(e=>{e.on(`element:figure`,(e,n,r)=>{if(!n.modelRange)return;let i=j(n.modelRange.getItems());if(!(!i||!i.is(`element`,`media`)))for(let[e,a]of t)r.consumable.consume(n.viewItem,{classes:a})&&r.writer.setAttribute(`mediaStyle`,e,i)},{priority:`low`})})}},i4=class extends F{static get requires(){return[r4]}static get pluginName(){return`MediaEmbedStyleUI`}static get isOfficialPlugin(){return!0}init(){let e=this._getLocalizedTitles();for(let t of this._getButtonDefinitions(e))this._createButton(t);for(let t of this._getDropdownDefinitions(e))this._createDropdown(t)}_getButtonDefinitions(e){return this.editor.plugins.get(r4).normalizedStyles.map(t=>({name:t.name,label:e[t.title]||t.title,icon:t.icon}))}_getLocalizedTitles(){let e=this.editor.t;return{\"Left aligned media\":e(`Left aligned media`),\"Centered media\":e(`Centered media`),\"Right aligned media\":e(`Right aligned media`),\"Wrap text\":e(`Wrap text`),\"Break text\":e(`Break text`)}}_getDropdownDefinitions(e){let t=this.editor.plugins.get(r4),n=new Set(t.normalizedStyles.map(({name:e})=>`mediaEmbed:${e}`)),r=[],i=(t,i)=>{let a=t.items.filter(e=>n.has(e));if(i&&a.length!==t.items.length&&s4({dropdown:t}),a.length<2)return;let o=n.has(t.defaultItem)?t.defaultItem:a[0];r.push({name:t.name,title:e[t.title]||t.title,items:a,defaultItem:o})};for(let e of j2)i(e,!1);for(let e of this._collectCustomDropdowns())i(e,!0);return r}_collectCustomDropdowns(){return(this.editor.config.get(`mediaEmbed.toolbar`)||[]).filter(e=>I2(e)&&o4(e))}_createButton(e){let t=this.editor,n=`mediaEmbed:${e.name}`;t.ui.componentFactory.add(n,n=>{let r=t.commands.get(`mediaStyle`),i=new H(n);return i.set({label:e.label,icon:e.icon,tooltip:!0,isToggleable:!0}),i.bind(`isEnabled`).to(r,`isEnabled`),i.bind(`isOn`).to(r,`value`,t=>t===e.name),i.on(`execute`,()=>{t.execute(`mediaStyle`,{value:e.name}),t.editing.view.focus()}),i})}_createDropdown(e){let t=this.editor,n=t.ui.componentFactory;n.add(e.name,r=>{let i=e.items.map(e=>n.create(e)),a=i[e.items.indexOf(e.defaultItem)],o=(...e)=>{let t=e.findIndex(Boolean);return t<0?a:i[t]},s=Nx(r,Mx),c=s.buttonView;return Fx(s,i,{enableActiveItemFocusOnDropdownOpen:!0}),c.set({label:a4(e.title,a.label),class:null,tooltip:!0}),c.arrowView.unbind(`label`),c.arrowView.set({label:e.title}),c.bind(`icon`).toMany(i,`isOn`,(...e)=>o(...e).icon),c.bind(`label`).toMany(i,`isOn`,(...t)=>a4(e.title,o(...t).label)),c.bind(`isOn`).toMany(i,`isOn`,(...e)=>e.some(Boolean)),c.bind(`class`).toMany(i,`isOn`,(...e)=>e.some(Boolean)?`ck-splitbutton_flatten`:void 0),this.listenTo(c,`execute`,()=>{i.some(({isOn:e})=>e)?s.isOpen=!s.isOpen:a.fire(`execute`)}),s.bind(`isEnabled`).toMany(i,`isEnabled`,(...e)=>e.some(Boolean)),this.listenTo(s,`execute`,()=>{t.editing.view.focus()}),s})}};function a4(e,t){return`${e}: ${t}`}function o4(e){let t=e.name.startsWith(`mediaEmbed:`)&&typeof e.title==`string`&&e.title.length>0&&e.items.length>0&&e.items.every(e=>typeof e==`string`&&e.startsWith(`mediaEmbed:`))&&e.items.includes(e.defaultItem);return t||s4({dropdown:e}),t}function s4(e){T(`media-style-configuration-definition-invalid`,e)}var c4=class extends F{static get requires(){return[r4,i4]}static get pluginName(){return`MediaEmbedStyle`}static get isOfficialPlugin(){return!0}};const l4=Wr(`px`);var u4=class extends NC{_options;constructor(e,t){super(e);let n=this.bindTemplate;this.set(`top`,0),this.set(`height`,0),this._options=t,this.extendTemplate({attributes:{tabindex:-1,\"aria-hidden\":`true`,class:[`ck-minimap__iframe`],style:{top:n.to(`top`,e=>l4(e)),height:n.to(`height`,e=>l4(e))}}})}render(){return super.render().then(()=>{this._prepareDocument()})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}_prepareDocument(){let e=this.element.contentWindow.document,t=e.adoptNode(this._options.domRootClone),n=this._options.useSimplePreview?`\n\t\t\t.ck.ck-editor__editable_inline img {\n\t\t\t\tfilter: contrast( 0 );\n\t\t\t}\n\n\t\t\tp, li, a, figcaption, span {\n\t\t\t\tbackground: hsl(0, 0%, 80%) !important;\n\t\t\t\tcolor: hsl(0, 0%, 80%) !important;\n\t\t\t}\n\n\t\t\th1, h2, h3, h4 {\n\t\t\t\tbackground: hsl(0, 0%, 60%) !important;\n\t\t\t\tcolor: hsl(0, 0%, 60%) !important;\n\t\t\t}\n\t\t`:``,r=`\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t${this._options.pageStyles.map(e=>typeof e==`string`?``:``).join(`\n`)}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t`;e.open(),e.write(r),e.close(),e.body.appendChild(t)}};const d4=Wr(`px`);var f4=class extends P{constructor(e){super(e);let t=this.bindTemplate;this.set(`height`,0),this.set(`top`,0),this.set(`scrollProgress`,0),this.set(`_isDragging`,!1),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap__position-tracker`,t.if(`_isDragging`,`ck-minimap__position-tracker_dragging`)],style:{top:t.to(`top`,e=>d4(e)),height:t.to(`height`,e=>d4(e))},\"data-progress\":t.to(`scrollProgress`)},on:{mousedown:t.to(()=>{this._isDragging=!0})}})}render(){super.render(),this.listenTo(u.document,`mousemove`,(e,t)=>{this._isDragging&&this.fire(`drag`,t.movementY)},{useCapture:!0}),this.listenTo(u.document,`mouseup`,()=>{this._isDragging=!1},{useCapture:!0})}setHeight(e){this.height=e}setTopOffset(e){this.top=e}setScrollProgress(e){this.scrollProgress=e}},p4=class extends P{_positionTrackerView;_scaleRatio;_minimapIframeView;constructor({locale:e,scaleRatio:t,pageStyles:n,extraClasses:r,useSimplePreview:i,domRootClone:a}){super(e);let o=this.bindTemplate;this._positionTrackerView=new f4(e),this._positionTrackerView.delegate(`drag`).to(this),this._scaleRatio=t,this._minimapIframeView=new u4(e,{useSimplePreview:i,pageStyles:n,extraClasses:r,scaleRatio:t,domRootClone:a}),this.setTemplate({tag:`div`,attributes:{class:[`ck`,`ck-minimap`]},children:[this._positionTrackerView],on:{click:o.to(this._handleMinimapClick.bind(this)),wheel:o.to(this._handleMinimapMouseWheel.bind(this))}})}destroy(){this._minimapIframeView.destroy(),super.destroy()}get height(){return new O(this.element).height}get scrollHeight(){return Math.max(0,Math.min(this.height,this._minimapIframeView.height)-this._positionTrackerView.height)}render(){super.render(),this._minimapIframeView.render(),this.element.appendChild(this._minimapIframeView.element)}setContentHeight(e){this._minimapIframeView.setHeight(e*this._scaleRatio)}setScrollProgress(e){let t=this._minimapIframeView,n=this._positionTrackerView;if(t.heighta.markToSync(`children`,t)),r.on(`change:attributes`,(e,t)=>a.markToSync(`attributes`,t)),r.on(`change:text`,(e,t)=>a.markToSync(`text`,t)),a.render(),e.editing.view.on(`render`,()=>a.render()),e.on(`destroy`,()=>{i.unbindDomElement(o)}),o}function h4(){return Array.from(u.document.styleSheets).map(e=>e.href&&!e.href.startsWith(u.window.location.origin)?{href:e.href}:Array.from(e.cssRules).filter(e=>!(e instanceof CSSMediaRule)).map(e=>e.cssText).join(` \n`))}function g4(e){return new O(e===u.document.body?u.window:e)}function _4(e){return e===u.document.body?u.window.innerHeight:e.clientHeight}function v4(e){return e===u.document.body?u.window:e}var y4=class extends F{static get pluginName(){return`Minimap`}static get isOfficialPlugin(){return!0}_minimapView;_scrollableRootAncestor;_editingRootElement;init(){let e=this.editor;this._minimapView=null,this._scrollableRootAncestor=null,this.listenTo(e.ui,`ready`,this._onUiReady.bind(this))}destroy(){super.destroy(),this._minimapView.destroy(),this._minimapView.element.remove()}_onUiReady(){let e=this.editor,t=this._editingRootElement=e.ui.getEditableElement();if(this._scrollableRootAncestor=wr(t),!t.ownerDocument.body.contains(t)){e.ui.once(`update`,this._onUiReady.bind(this));return}this._initializeMinimapView(),this.listenTo(e.editing.view,`render`,()=>{e.state===`ready`&&this._syncMinimapToEditingRootScrollPosition()}),this._syncMinimapToEditingRootScrollPosition()}_initializeMinimapView(){let e=this.editor,t=e.locale,n=e.config.get(`minimap.useSimplePreview`),r=e.config.get(`minimap.container`),i=this._scrollableRootAncestor,a=g4(this._editingRootElement).width,o=g4(r).width/a,s=this._minimapView=new p4({locale:t,scaleRatio:o,pageStyles:h4(),extraClasses:e.config.get(`minimap.extraClasses`),useSimplePreview:n,domRootClone:m4(e)});s.render(),s.listenTo(u.document,`scroll`,(e,t)=>{if(i===u.document.body){if(t.target!==u.document)return}else if(t.target!==i)return;this._syncMinimapToEditingRootScrollPosition()},{useCapture:!0,usePassive:!0}),s.listenTo(u.window,`resize`,()=>{this._syncMinimapToEditingRootScrollPosition()}),s.on(`drag`,(e,t)=>{let n;n=s.scrollHeight===0?0:t/s.scrollHeight;let r=n*(i.scrollHeight-_4(i));v4(i).scrollBy(0,Math.round(r))}),s.on(`click`,(e,t)=>{let n=t*i.scrollHeight;v4(i).scrollBy(0,Math.round(n))}),r.appendChild(s.element)}_syncMinimapToEditingRootScrollPosition(){let e=this._editingRootElement,t=this._minimapView;t.setContentHeight(e.offsetHeight);let n=g4(e),r=g4(this._scrollableRootAncestor),i;r.getIntersection(n)&&(r.contains(n)||n.top>r.top?i=0:(i=(n.top-r.top)/(r.height-n.height),i=Math.max(0,Math.min(i,1))),t.setPositionTrackerHeight(r.getIntersection(n).height),t.setScrollProgress(i))}},b4=class extends I{refresh(){let e=this.editor.model,t=e.schema,n=e.document.selection;this.isEnabled=x4(n,t,e)}execute(){let e=this.editor.model;e.change(t=>{let n=t.createElement(`pageBreak`);e.insertObject(n,null,null,{setSelection:`after`})})}};function x4(e,t,n){let r=S4(e,n);return t.checkChild(r,`pageBreak`)}function S4(e,t){let n=XE(e,t).start.parent;return n.isEmpty&&!n.is(`rootElement`)?n.parent:n}var C4=class extends F{static get pluginName(){return`PageBreakEditing`}static get licenseFeatureCode(){return`PB`}static get isOfficialPlugin(){return!0}static get isPremiumPlugin(){return!0}init(){let e=this.editor,t=e.model.schema,n=e.t,r=e.conversion;t.register(`pageBreak`,{inheritAllFrom:`$blockObject`}),r.for(`dataDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>t.createContainerElement(`div`,{class:`page-break`,style:`page-break-after: always`},t.createContainerElement(`span`,{style:`display: none`}))}),r.for(`editingDowncast`).elementToStructure({model:`pageBreak`,view:(e,{writer:t})=>{let r=n(`Page break`),i=t.createContainerElement(`div`),a=t.createRawElement(`span`,{class:`page-break__label`},function(e){e.innerText=n(`Page break`)});return t.addClass(`page-break`,i),t.insert(t.createPositionAt(i,0),a),w4(i,t,r)}}),r.for(`upcast`).elementToElement({view:e=>{let t=e.getStyle(`page-break-before`)==`always`,n=e.getStyle(`page-break-after`)==`always`;if(!t&&!n)return null;if(e.childCount==1){let t=e.getChild(0);if(!t.is(`element`,`span`)||t.getStyle(`display`)!=`none`)return null}else if(e.childCount>1)return null;return{name:!0,styles:[...t?[`page-break-before`]:[],...n?[`page-break-after`]:[]],...e.hasClass(`page-break`)&&{classes:[`page-break`]}}},model:`pageBreak`,converterPriority:`high`}),e.commands.add(`pageBreak`,new b4(e))}};function w4(e,t,n){return t.setCustomProperty(`pageBreak`,!0,e),UE(e,t,{label:n})}var T4=class extends F{static get pluginName(){return`PageBreakUI`}static get isOfficialPlugin(){return!0}init(){let e=this.editor;e.ui.componentFactory.add(`pageBreak`,()=>{let e=this._createButton(H);return e.set({tooltip:!0}),e}),e.ui.componentFactory.add(`menuBar:pageBreak`,()=>this._createButton(U))}_createButton(e){let t=this.editor,n=t.locale,r=t.commands.get(`pageBreak`),i=new e(t.locale),a=n.t;return i.set({label:a(`Page break`),icon:Mv}),i.bind(`isEnabled`).to(r,`isEnabled`),this.listenTo(i,`execute`,()=>{t.execute(`pageBreak`),t.editing.view.focus()}),i}},E4=class extends F{static get requires(){return[C4,T4,xD]}static get pluginName(){return`PageBreak`}static get isOfficialPlugin(){return!0}};function D4(e,t){let n=[];for(let r of t.createRangeIn(e)){let e=r.item;e.is(`element`,`a`)&&!e.hasAttribute(`href`)&&(e.hasAttribute(`id`)||e.hasAttribute(`name`))&&n.push(e)}for(let e of n){let n=e.parent.getChildIndex(e)+1,r=e.getChildren();t.insertChild(n,r,e.parent),O4(e)&&t.remove(e)}}function O4(e){let t=e.getAttribute(`name`);return!!t&&t.startsWith(`_`)}function k4(e){let t=parseFloat(e);return e.endsWith(`pt`)?j4(t*96/72):e.endsWith(`pc`)?j4(t*12*96/72):e.endsWith(`in`)?j4(t*96):e.endsWith(`cm`)?j4(t*96/2.54):e.endsWith(`mm`)?j4(t/10*96/2.54):e}function A4(e){return e!==void 0&&e.endsWith(`px`)}function j4(e){return Math.round(e)+`px`}function M4(e,t,n,r=!1){if(!e.childCount)return;let i=new Np(e.document),a=L4(e,i);if(!a.length)return;let o=[],s=[],c=P4();for(let e of a)if(e.indent!==void 0){R4(e)||(F4(i,s,c),c=P4(),o.length=1,s.length=0);let a=`${e.id}:${e.indent}`,l=r?e.indent-1:Math.min(e.indent-1,s.length);l0&&(F4(i,s,c),c=P4()),o.length=l,s.length=l),ls.length-1||s[l].listElement.name!=u.type){u.type==`ol`&&e.id!==void 0&&o[l]&&o[l][a]&&(u.startIndex=o[l][a]);let t=G4(u,i,n);if(s.length==0){let n=e.element.parent,r=n.getChildIndex(e.element)+1;i.insertChild(r,t,n)}else if(l==0){let e=s[0].listElement,n=e.parent,r=n.getChildIndex(e)+1;i.insertChild(r,t,n)}else{let e=s[l-1].listItemElements;i.appendChild(t,e[e.length-1])}s[l]={...e,listElement:t,listItemElements:[]},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1)}else s[l].isIntermediate&&(K4(s[l].listElement,u,i,n),s[l]={...e,listElement:s[l].listElement,listItemElements:s[l].listItemElements},e.id!==void 0&&(o[l]||(o[l]={}),o[l][a]=u.startIndex||1));let d=e.element.name==`li`?e.element:i.createElement(`li`);N4(i,s,c,e,d,l),i.appendChild(d,s[l].listElement),s[l].listItemElements.push(d),e.id!==void 0&&o[l]&&o[l][a]++,e.element!=d&&i.appendChild(e.element,d),J4(e.element,i),i.removeStyle(`text-indent`,e.element),i.removeStyle(`margin-left`,e.element)}else{let t=s.find(t=>t.marginLeft==e.marginLeft);if(t){let n=t.listItemElements;i.appendChild(e.element,n[n.length-1]),i.removeStyle(`margin-left`,e.element),s.length=s.indexOf(t)+1,o.length=s.length+1}else F4(i,s,c),c=P4(),s.length=0}F4(i,s,c)}function N4(e,t,n,r,i,a){if(r.marginLeft===void 0){a==0&&(n.canApplyMarginOnList=!1);return}let o=parseFloat(r.marginLeft),s=0;for(let e=0;e0){e.setStyle(`margin-left`,n.marginLeft,t[0].listElement);for(let t of n.topLevelListItemElements)e.removeStyle(`margin-left`,t)}}function I4(e,t){for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`li`)){let n=e.getChild(0);n&&n.is(`element`,`p`)&&t.unwrapElement(n)}}}function L4(e,t){let n=t.createRangeIn(e),r=[],i=new Set;for(let e of n.getItems()){if(!e.is(`element`)||!e.name.match(/^(p|h\\d+|li|div)$/))continue;let t=Y4(e);if(t!==void 0&&parseFloat(t)==0&&!Array.from(e.getClassNames()).find(e=>e.startsWith(`MsoList`))&&(t=void 0),e.hasStyle(`mso-list`)&&e.getStyle(`mso-list`)!==`none`||t!==void 0&&i.has(t)){let n=q4(e);r.push({element:e,id:n.id,order:n.order,indent:n.indent,marginLeft:t}),t!==void 0&&i.add(t)}else i.clear()}return r}function R4(e){let t=e.element.previousSibling;for(;t&&z4(t);)t=t.previousSibling;if(!t){let t=e.element.parent;return B4(t)&&(!t.previousSibling||B4(t.previousSibling))}return B4(t)}function z4(e){return e.is(`element`)&&e.childCount===0&&/^(?:span|a|o:p)$/.test(e.name)}function B4(e){return e.is(`element`,`ol`)||e.is(`element`,`ul`)}function V4(e,t){let n=RegExp(`@list l${e.id}:level${e.indent}\\\\s*({[^}]*)`,`gi`),r=/mso-level-number-format:([^;]{0,100});/gi,i=/mso-level-start-at:\\s{0,100}([0-9]{0,10})\\s{0,100};/gi,a=RegExp(`@list\\\\s+l${e.id}:level\\\\d\\\\s*{[^{]*mso-level-text:\"%\\\\d\\\\\\\\.`,`gi`),o=RegExp(`@list l${e.id}:level\\\\d\\\\s*{[^{]*mso-level-number-format:`,`gi`),s=a.exec(t),c=o.exec(t),l=s&&!c,u=n.exec(t),d=`decimal`,f=`ol`,p=null;if(u&&u[1]){let t=r.exec(u[1]);if(t&&t[1]&&(d=t[1].trim(),f=d!==`bullet`&&d!==`image`?`ol`:`ul`),d===`bullet`){let t=H4(e.element);t&&(d=t)}else{let e=i.exec(u[1]);e&&e[1]&&(p=parseInt(e[1]))}l&&(f=`ol`)}return{type:f,startIndex:p,style:W4(d),isLegalStyleList:l}}function H4(e){if(e.name==`li`&&e.parent.name==`ul`&&e.parent.hasAttribute(`type`))return e.parent.getAttribute(`type`);let t=U4(e);if(!t)return null;let n=t._data;return n===`o`?`circle`:n===`·`?`disc`:n===`§`?`square`:null}function U4(e){if(e.getChild(0).is(`$text`))return null;for(let t of e.getChildren()){if(!t.is(`element`,`span`))continue;let e=t.getChild(0);if(e)return e.is(`$text`)?e:e.getChild(0)}return null}function W4(e){if(e.startsWith(`arabic-leading-zero`))return`decimal-leading-zero`;switch(e){case`alpha-upper`:return`upper-alpha`;case`alpha-lower`:return`lower-alpha`;case`roman-upper`:return`upper-roman`;case`roman-lower`:return`lower-roman`;case`circle`:case`disc`:case`square`:return e;default:return null}}function G4(e,t,n){let r=t.createElement(e.type);return K4(r,e,t,n),r}function K4(e,t,n,r){t.style&&n.setStyle(`list-style-type`,t.style,e),t.startIndex&&t.startIndex>1&&n.setAttribute(`start`,t.startIndex,e),t.isLegalStyleList&&r&&n.addClass(`legal-list`,e)}function q4(e){let t=e.getStyle(`mso-list`);if(t===void 0)return{};let n=t.match(/(^|\\s{1,100})l(\\d+)/i),r=t.match(/\\s{0,100}lfo(\\d+)/i),i=t.match(/\\s{0,100}level(\\d+)/i);return n&&r&&i?{id:n[2],order:r[1],indent:parseInt(i[1])}:{indent:1}}function J4(e,t){let n=new Po({name:`span`,styles:{\"mso-list\":`Ignore`}}),r=t.createRangeIn(e);for(let e of r)e.type===`elementStart`&&n.match(e.item)&&t.remove(e.item)}function Y4(e){let t=e.getStyle(`margin-left`);return t===void 0||t.endsWith(`px`)?t:k4(t)}function X4(e,t){if(!e.childCount)return;let n=new Np(e.document),r=Q4(e,n);$4(r,e,n),t3(r,e,n),e3(e,n);let i=n3(e,n);i.length&&i3(i,r3(t),n)}function Z4(e){return btoa(e.match(/\\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(``))}function Q4(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n){if(e.type!=`elementStart`)continue;let t=e.item,n=t.previousSibling,a=n&&n.is(`element`)?n.name:null,o=[`Chart`],s=r.match(t),c=t.getAttribute(`o:gfxdata`),l=a===`v:shapetype`,u=c&&o.some(e=>t.getAttribute(`id`).includes(e));s&&c&&!l&&!u&&i.push(e.item.getAttribute(`id`))}return i}function $4(e,t,n){let r=n.createRangeIn(t),i=new Po({name:`img`}),a=[];for(let t of r)if(t.item.is(`element`)&&i.match(t.item)){let n=t.item,r=n.getAttribute(`v:shapes`)?n.getAttribute(`v:shapes`).split(` `):[];r.length&&r.every(t=>e.indexOf(t)>-1)?a.push(n):n.getAttribute(`src`)||a.push(n)}for(let e of a)n.remove(e)}function e3(e,t){let n=t.createRangeIn(e),r=new Po({name:/v:(.+)/}),i=[];for(let e of n)e.type==`elementStart`&&r.match(e.item)&&i.push(e.item);for(let e of i)t.remove(e)}function t3(e,t,n){let r=n.createRangeIn(t),i=[];for(let t of r)if(t.type==`elementStart`&&t.item.is(`element`,`v:shape`)){let n=t.item.getAttribute(`id`);if(e.includes(n))continue;a(t.item.parent.getChildren(),n)||i.push(t.item)}for(let e of i){let t={src:o(e)};e.hasAttribute(`alt`)&&(t.alt=e.getAttribute(`alt`));let r=n.createElement(`img`,t);n.insertChild(e.index+1,r,e.parent)}function a(e,t){for(let n of e)if(n.is(`element`)&&(n.name==`img`&&n.getAttribute(`v:shapes`)==t||a(n.getChildren(),t)))return!0;return!1}function o(e){for(let t of e.getChildren())if(t.is(`element`)&&t.getAttribute(`src`))return t.getAttribute(`src`)}}function n3(e,t){let n=t.createRangeIn(e),r=new Po({name:`img`}),i=[],a=0;for(let e of n)e.item.is(`element`)&&r.match(e.item)&&(e.item.getAttribute(`src`).startsWith(`file://`)&&i.push({element:e.item,imageIndex:a}),a++);return i}function r3(e){if(!e)return[];let t=/{\\\\pict[\\s\\S]+?\\\\bliptag-?\\d+(\\\\blipupi-?\\d+)?({\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s}]*?/,n=RegExp(`(?:(`+t.source+`))([\\\\da-fA-F\\\\s]+)\\\\}`,`g`),r=e.match(n),i=[];if(r)for(let e of r){let n=!1;e.includes(`\\\\pngblip`)?n=`image/png`:e.includes(`\\\\jpegblip`)&&(n=`image/jpeg`),n&&i.push({hex:e.replace(t,``).replace(/[^\\da-fA-F]/g,``),type:n})}return i}function i3(e,t,n){for(let r=0;r!r.hasStyle(`border-${e}-style`)))t.setStyle(`border-style`,`none`,r);else for(let n of e)r.hasStyle(`border-${n}-style`)||t.setStyle(`border-${n}-style`,`none`,r);let i=[`width`,`height`,...e.map(e=>`border-${e}-width`),...e.map(e=>`padding-${e}`)];for(let e of i)r.hasStyle(e)&&t.setStyle(e,k4(r.getStyle(e)),r)}}function s3(e,t){for(let n of t.createRangeIn(e).getItems())n.is(`element`,`table`)&&(n.getStyle(`width`)===`0px`&&t.removeStyle(`width`,n),n.getAttribute(`width`)===`0`&&t.removeAttribute(`width`,n))}function c3(e,t){let n=new Map,r=new Map,i=null;for(let{item:a}of t.createRangeIn(e))if(a.is(`element`)){if(a.getStyle(`mso-element`)===`footnote-list`){i=a;continue}if(a.hasStyle(`mso-footnote-id`)){let e=a.findAncestor(`element`,e=>e.getStyle(`mso-element`)===`footnote`);if(e){let t=e.getAttribute(`id`);r.set(t,e)}else{let e=a.getStyle(`mso-footnote-id`);n.set(e,a)}continue}}if(!n.size||!i)return;let a=u3(t);t.replace(i,a.wrapper);for(let[e,i]of n){let n=r.get(e);if(!n)continue;t.replace(i,d3(t,e));let o=f3(t,e);l3(t,n);for(let e of n.getChildren()){let n=e;e.is(`element`)&&(n=t.clone(e,!0)),t.appendChild(n,o.content)}t.appendChild(o.listItem,a.list)}}function l3(e,t){let n=[],r=[];for(let{item:i}of e.createRangeIn(t))if(i.is(`element`)&&i.getStyle(`mso-footnote-id`)){n.unshift(i);let{nextSibling:e}=i;e?.is(`$text`)&&e.data.startsWith(` `)&&r.unshift(e)}for(let t of n)e.remove(t);for(let t of r){let n=t.data.substring(1);if(n.length>0){let r=t.parent,i=r.getChildIndex(t),a=e.createText(n);e.remove(t),e.insertChild(i,a,r)}else e.remove(t)}return t}function u3(e){let t=e.createElement(`hr`,{class:`footnotes-divider`}),n=e.createElement(`ol`,{class:`footnotes-list`});return{list:n,wrapper:e.createElement(`div`,{class:`footnotes`},[t,n])}}function d3(e,t){let n=e.createElement(`sup`,{class:`footnote`}),r=e.createElement(`a`,{id:`ref-${t}`,href:`#${t}`});return e.appendChild(r,n),n}function f3(e,t){let n=e.createElement(`li`,{id:t,class:`footnote-definition`}),r=e.createElement(`a`,{href:`#ref-${t}`,class:`footnote-backlink`}),i=e.createElement(`div`,{class:`footnote-content`});return e.appendChild(e.createText(`^`),r),e.appendChild(r,n),e.appendChild(i,n),{listItem:n,content:i}}const p3=//i,m3=/xmlns:o=\"urn:schemas-microsoft-com/i,h3=//i;var g3=class{document;hasMultiLevelListPlugin;hasTablePropertiesPlugin;enableSkipLevelLists;constructor(e,t=!1,n=!1,r=!1){this.document=e,this.hasMultiLevelListPlugin=t,this.hasTablePropertiesPlugin=n,this.enableSkipLevelLists=r}isActive(e){return p3.test(e)||m3.test(e)||h3.test(e)}execute(e){let t=new Np(this.document),n=e.extraContent.stylesString;D4(e.content,t),M4(e.content,n,this.hasMultiLevelListPlugin,this.enableSkipLevelLists),X4(e.content,e.dataTransfer.getData(`text/rtf`)),o3(e.content,t,this.hasTablePropertiesPlugin),s3(e.content,t),c3(e.content,t),a3(e.content)}};function _3(e,t){for(let n of e.getChildren())if(n.is(`element`,`b`)&&n.getStyle(`font-weight`)===`normal`){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function v3(e,t){let n=new _c(new Cs(t.document.stylesProcessor),{renderingMode:`data`}),r=n.blockElements,i=n.inlineObjectElements,a=[];for(let n of t.createRangeIn(e)){let e=n.item;if(e.is(`element`,`br`)){let n=y3(e,`forward`,t,{blockElements:r,inlineObjectElements:i}),o=y3(e,`backward`,t,{blockElements:r,inlineObjectElements:i}),s=b3(n,r);(b3(o,r)||s)&&a.push(e)}}for(let e of a)e.hasClass(`Apple-interchange-newline`)?t.remove(e):t.replace(e,t.createElement(`p`))}function y3(e,t,n,{blockElements:r,inlineObjectElements:i}){let a=n.createPositionAt(e,t==`forward`?`after`:`before`);return a=a.getLastMatchingPosition(({item:e})=>e.is(`element`)&&!r.includes(e.name)&&!i.includes(e.name),{direction:t}),t==`forward`?a.nodeAfter:a.nodeBefore}function b3(e,t){return!!e&&e.is(`element`)&&t.includes(e.name)}function x3(e,t,n){let r=new Set;for(let n of t.createRangeIn(e).getItems())!n.is(`view:$textProxy`)||!n.data.includes(`\t`)||S3(n.parent)&&r.add(n.textNode);for(let e of r)C3(e,t,n)}function S3(e){let t=e;for(;t;){if(t.is(`element`)&&t.getStyle?.(`white-space`)===`pre-wrap`)return!0;t=t.parent}return!1}function C3(e,t,n){let{parent:r,data:i}=e,a=i.replaceAll(`\t`,` `.repeat(n)),o=r.getChildIndex(e);t.remove(e),t.insertChild(o,t.createText(a),r)}const w3=/id=(\"|')docs-internal-guid-[-0-9a-f]+(\"|')/i;var T3=class{document;constructor(e){this.document=e}isActive(e){return w3.test(e)}execute(e){let t=new Np(this.document);_3(e.content,t),I4(e.content,t),v3(e.content,t),x3(e.content,t,8)}};function E3(e,t){for(let n of e.getChildren())n.is(`element`,`table`)&&n.hasAttribute(`xmlns`)&&t.removeAttribute(`xmlns`,n)}function D3(e,t){for(let n of e.getChildren())if(n.is(`element`,`google-sheets-html-origin`)){let r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}function O3(e,t){for(let n of Array.from(e.getChildren()))n.is(`element`,`style`)&&t.remove(n)}const k3=/[^\\S\\r\\n]*?)[\\r\\n]+([^\\S\\r\\n]*<\\/span>)/g,`$1$2`).replace(/<\\/span>/g,``).replace(/()[\\r\\n]+(<\\/span>)/g,`$1 $2`).replace(/ <\\//g,`\\xA0<\\/o:p>/g,`\\xA0`).replace(/( |\\u00A0)<\\/o:p>/g,``).replace(/>([^\\S\\r\\n]*[\\r\\n]\\s*)<`)}function M3(e){e.querySelectorAll(`span[style*=spacerun]`).forEach(e=>{let t=e,n=t.innerText.length||0;t.innerText=Array(n+1).join(`\\xA0 `).substr(0,n)})}function N3(e){return e.replace(/(\\s+)<\\/span>/g,(e,t)=>t.length===1?` `:Array(t.length+1).join(`\\xA0 `).substr(0,t.length))}function P3(e,t){let n=new DOMParser;e=e.replace(/

    abc

    \n\t\t\t//\n\t\t\tif ( isAttribute && child._canMergeAttributesFrom( wrapElement ) ) {\n\t\t\t\tchild._mergeAttributesFrom( wrapElement );\n\t\t\t\twrapPositions.push( new ViewPosition( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// Wrap the child if it is not an attribute element or if it is an attribute element that should be inside\n\t\t\t// `wrapElement` (due to priority).\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//

    abc

    -->

    abc

    \n\t\t\telse if ( isText || !isAttribute || shouldABeOutsideB( wrapElement, child ) ) {\n\t\t\t\t// Clone attribute.\n\t\t\t\tconst newAttribute = wrapElement._clone();\n\n\t\t\t\t// Wrap current node with new attribute.\n\t\t\t\tchild._remove();\n\t\t\t\tnewAttribute._appendChild( child );\n\n\t\t\t\tparent._insertChild( i, newAttribute );\n\t\t\t\tthis._addToClonedElementsGroup( newAttribute );\n\n\t\t\t\twrapPositions.push( new ViewPosition( parent, i ) );\n\t\t\t}\n\t\t\t//\n\t\t\t// If other nested attribute is found and it wasn't wrapped (see above), continue wrapping inside it.\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//\n\t\t\telse /* if ( isAttribute ) */ {\n\t\t\t\tthis._wrapChildren( child, 0, child.childCount, wrapElement );\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each wrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of wrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn ViewRange._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n\t * `startOffset` and `endOffset` will be unwrapped.\n\t */\n\tprivate _unwrapChildren( parent: ViewElement, startOffset: number, endOffset: number, unwrapElement: ViewAttributeElement ) {\n\t\tlet i = startOffset;\n\t\tconst unwrapPositions: Array = [];\n\n\t\t// Iterate over each element between provided offsets inside parent.\n\t\t// We don't use tree walker or range iterator because we will be removing and merging potentially multiple nodes,\n\t\t// so it could get messy. It is safer to it manually in this case.\n\t\twhile ( i < endOffset ) {\n\t\t\tconst child = parent.getChild( i )!;\n\n\t\t\t// Skip all text nodes. There should be no container element's here either.\n\t\t\tif ( !child.is( 'attributeElement' ) ) {\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// (In all examples, assume that `unwrapElement` is `` element.)\n\t\t\t//\n\t\t\t// If the child is similar to the given attribute element, unwrap it - it will be completely removed.\n\t\t\t//\n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//\n\t\t\tif ( child.isSimilar( unwrapElement ) ) {\n\t\t\t\tconst unwrapped = child.getChildren();\n\t\t\t\tconst count = child.childCount;\n\n\t\t\t\t// Replace wrapper element with its children\n\t\t\t\tchild._remove();\n\t\t\t\tparent._insertChild( i, unwrapped );\n\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\n\t\t\t\t// Save start and end position of moved items.\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew ViewPosition( parent, i ),\n\t\t\t\t\tnew ViewPosition( parent, i + count )\n\t\t\t\t);\n\n\t\t\t\t// Skip elements that were unwrapped. Assuming there won't be another element to unwrap in child elements.\n\t\t\t\ti += count;\n\t\t\t\tendOffset += count - 1;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If the child is not similar but is an attribute element, try partial unwrapping - remove the same attributes/styles/classes.\n\t\t\t// Partial unwrapping will happen only if the elements have the same name.\n\t\t\t//\n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//

    abcxyz

    -->

    abcxyz

    \n\t\t\t//\n\t\t\tif ( child._canSubtractAttributesOf( unwrapElement ) ) {\n\t\t\t\tchild._subtractAttributesOf( unwrapElement );\n\t\t\t\tunwrapPositions.push(\n\t\t\t\t\tnew ViewPosition( parent, i ),\n\t\t\t\t\tnew ViewPosition( parent, i + 1 )\n\t\t\t\t);\n\n\t\t\t\ti++;\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//\n\t\t\t// If other nested attribute is found, look through it's children for elements to unwrap.\n\t\t\t//\n\t\t\t//

    abc

    -->

    abc

    \n\t\t\t//\n\t\t\tthis._unwrapChildren( child, 0, child.childCount, unwrapElement );\n\n\t\t\ti++;\n\t\t}\n\n\t\t// Merge at each unwrap.\n\t\tlet offsetChange = 0;\n\n\t\tfor ( const position of unwrapPositions ) {\n\t\t\tposition.offset -= offsetChange;\n\n\t\t\t// Do not merge with elements outside selected children.\n\t\t\tif ( position.offset == startOffset || position.offset == endOffset ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst newPosition = this.mergeAttributes( position );\n\n\t\t\t// If nodes were merged - other merge offsets will change.\n\t\t\tif ( !newPosition.isEqual( position ) ) {\n\t\t\t\toffsetChange++;\n\t\t\t\tendOffset--;\n\t\t\t}\n\t\t}\n\n\t\treturn ViewRange._createFromParentsAndOffsets( parent, startOffset, parent, endOffset );\n\t}\n\n\t/**\n\t * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement}.\n\t *\n\t * @returns New range after wrapping, spanning over wrapping attribute element.\n\t */\n\tprivate _wrapRange( range: ViewRange, attribute: ViewAttributeElement ): ViewRange {\n\t\t// Break attributes at range start and end.\n\t\tconst { start: breakStart, end: breakEnd } = this._breakAttributesRange( range, true );\n\t\tconst parentContainer = breakStart.parent as ViewElement;\n\n\t\t// Wrap all children with attribute.\n\t\tconst newRange = this._wrapChildren( parentContainer, breakStart.offset, breakEnd.offset, attribute );\n\n\t\t// Merge attributes at the both ends and return a new range.\n\t\tconst start = this.mergeAttributes( newRange.start );\n\n\t\t// If start position was merged - move end position back.\n\t\tif ( !start.isEqual( newRange.start ) ) {\n\t\t\tnewRange.end.offset--;\n\t\t}\n\t\tconst end = this.mergeAttributes( newRange.end );\n\n\t\treturn new ViewRange( start, end );\n\t}\n\n\t/**\n\t * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n\t * This method will also merge newly added attribute element with its siblings whenever possible.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n\t * an instance of {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement}.\n\t *\n\t * @returns New position after wrapping.\n\t */\n\tprivate _wrapPosition( position: ViewPosition, attribute: ViewAttributeElement ): ViewPosition {\n\t\t// Return same position when trying to wrap with attribute similar to position parent.\n\t\tif ( attribute.isSimilar( position.parent as any ) ) {\n\t\t\treturn movePositionToTextNode( position.clone() );\n\t\t}\n\n\t\t// When position is inside text node - break it and place new position between two text nodes.\n\t\tif ( position.parent.is( '$text' ) ) {\n\t\t\tposition = breakTextNode( position );\n\t\t}\n\n\t\t// Create fake element that will represent position, and will not be merged with other attributes.\n\t\tconst fakeElement = this.createAttributeElement( '_wrapPosition-fake-element' );\n\t\t( fakeElement as any )._priority = Number.POSITIVE_INFINITY;\n\t\tfakeElement.isSimilar = () => false;\n\n\t\t// Insert fake element in position location.\n\t\t( position.parent as ViewElement )._insertChild( position.offset, fakeElement );\n\n\t\t// Range around inserted fake attribute element.\n\t\tconst wrapRange = new ViewRange( position, position.getShiftedBy( 1 ) );\n\n\t\t// Wrap fake element with attribute (it will also merge if possible).\n\t\tthis.wrap( wrapRange, attribute );\n\n\t\t// Remove fake element and place new position there.\n\t\tconst newPosition = new ViewPosition( fakeElement.parent!, fakeElement.index! );\n\t\tfakeElement._remove();\n\n\t\t// If position is placed between text nodes - merge them and return position inside.\n\t\tconst nodeBefore = newPosition.nodeBefore;\n\t\tconst nodeAfter = newPosition.nodeAfter;\n\n\t\tif ( nodeBefore && nodeBefore.is( 'view:$text' ) && nodeAfter && nodeAfter.is( 'view:$text' ) ) {\n\t\t\treturn mergeTextNodes( nodeBefore, nodeAfter );\n\t\t}\n\n\t\t// If position is next to text node - move position inside.\n\t\treturn movePositionToTextNode( newPosition );\n\t}\n\n\t/**\n\t * Helper function used by other `ViewDowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n\t *\n\t * @param range Range which `start` and `end` positions will be used to break attributes.\n\t * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns New range with located at break positions.\n\t */\n\tprivate _breakAttributesRange( range: ViewRange, forceSplitText: boolean = false ) {\n\t\tconst rangeStart = range.start;\n\t\tconst rangeEnd = range.end;\n\n\t\tvalidateRangeContainer( range, this.document );\n\n\t\t// Break at the collapsed position. Return new collapsed range.\n\t\tif ( range.isCollapsed ) {\n\t\t\tconst position = this._breakAttributes( range.start, forceSplitText );\n\n\t\t\treturn new ViewRange( position, position );\n\t\t}\n\n\t\tconst breakEnd = this._breakAttributes( rangeEnd, forceSplitText );\n\t\tconst count = ( breakEnd.parent as ViewElement ).childCount;\n\t\tconst breakStart = this._breakAttributes( rangeStart, forceSplitText );\n\n\t\t// Calculate new break end offset.\n\t\tbreakEnd.offset += ( breakEnd.parent as ViewElement ).childCount - count;\n\n\t\treturn new ViewRange( breakStart, breakEnd );\n\t}\n\n\t/**\n\t * Helper function used by other `ViewDowncastWriter` methods. Breaks attribute elements at given position.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n\t * is placed inside {@link module:engine/view/emptyelement~ViewEmptyElement ViewEmptyElement}.\n\t *\n\t * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n\t * is placed inside {@link module:engine/view/uielement~ViewUIElement UIElement}.\n\t *\n\t * @param position Position where to break attributes.\n\t * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n\t * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n\t * @returns New position after breaking the attributes.\n\t */\n\tprivate _breakAttributes( position: ViewPosition, forceSplitText: boolean = false ): ViewPosition {\n\t\tconst positionOffset = position.offset;\n\t\tconst positionParent = position.parent;\n\n\t\t// If position is placed inside ViewEmptyElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'emptyElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break an `EmptyElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-empty-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-empty-element', this.document );\n\t\t}\n\n\t\t// If position is placed inside UIElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'uiElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break a `UIElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-ui-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-ui-element', this.document );\n\t\t}\n\n\t\t// If position is placed inside RawElement - throw an exception as we cannot break inside.\n\t\tif ( position.parent.is( 'rawElement' ) ) {\n\t\t\t/**\n\t\t\t * Cannot break a `RawElement` instance.\n\t\t\t *\n\t\t\t * This error is thrown if\n\t\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#breakAttributes `ViewDowncastWriter#breakAttributes()`}\n\t\t\t * was executed in an incorrect position.\n\t\t\t *\n\t\t\t * @error view-writer-cannot-break-raw-element\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-cannot-break-raw-element', this.document );\n\t\t}\n\n\t\t// There are no attributes to break and text nodes breaking is not forced.\n\t\tif ( !forceSplitText && positionParent.is( '$text' ) && isContainerOrFragment( positionParent.parent! ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Position's parent is container, so no attributes to break.\n\t\tif ( isContainerOrFragment( positionParent ) ) {\n\t\t\treturn position.clone();\n\t\t}\n\n\t\t// Break text and start again in new position.\n\t\tif ( positionParent.is( '$text' ) ) {\n\t\t\treturn this._breakAttributes( breakTextNode( position ), forceSplitText );\n\t\t}\n\n\t\tconst length = ( positionParent as any ).childCount;\n\n\t\t//

    foobar{}

    \n\t\t//

    foobar[]

    \n\t\t//

    foobar[]

    \n\t\tif ( positionOffset == length ) {\n\t\t\tconst newPosition = new ViewPosition( positionParent.parent as any, ( positionParent as any ).index + 1 );\n\n\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t} else {\n\t\t\t//

    foo{}bar

    \n\t\t\t//

    foo[]bar

    \n\t\t\t//

    foo{}bar

    \n\t\t\tif ( positionOffset === 0 ) {\n\t\t\t\tconst newPosition = new ViewPosition( positionParent.parent as ViewElement, ( positionParent as any ).index );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t\t//

    foob{}ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\t//

    foob[]ar

    \n\t\t\telse {\n\t\t\t\tconst offsetAfter = ( positionParent as any ).index + 1;\n\n\t\t\t\t// Break element.\n\t\t\t\tconst clonedNode = ( positionParent as any )._clone();\n\n\t\t\t\t// Insert cloned node to position's parent node.\n\t\t\t\t( positionParent.parent as any )._insertChild( offsetAfter, clonedNode );\n\t\t\t\tthis._addToClonedElementsGroup( clonedNode );\n\n\t\t\t\t// Get nodes to move.\n\t\t\t\tconst count = ( positionParent as any ).childCount - positionOffset;\n\t\t\t\tconst nodesToMove = ( positionParent as any )._removeChildren( positionOffset, count );\n\n\t\t\t\t// Move nodes to cloned node.\n\t\t\t\tclonedNode._appendChild( nodesToMove );\n\n\t\t\t\t// Create new position to work on.\n\t\t\t\tconst newPosition = new ViewPosition( ( positionParent as any ).parent, offsetAfter );\n\n\t\t\t\treturn this._breakAttributes( newPosition, forceSplitText );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Stores the information that an {@link module:engine/view/attributeelement~ViewAttributeElement attribute element} was\n\t * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n\t * from the group now keep a reference to the given attribute element.\n\t *\n\t * The clones group can be obtained using {@link module:engine/view/attributeelement~ViewAttributeElement#getElementsWithSameId}.\n\t *\n\t * Does nothing if added element has no {@link module:engine/view/attributeelement~ViewAttributeElement#id id}.\n\t *\n\t * @param element Attribute element to save.\n\t */\n\tprivate _addToClonedElementsGroup( element: ViewNode ): void {\n\t\t// Add only if the element is in document tree.\n\t\tif ( !element.root.is( 'rootElement' ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Traverse the element's children recursively to find other attribute elements that also might got inserted.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._addToClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = ( element as any ).id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\tgroup = new Set();\n\t\t\tthis._cloneGroups.set( id, group );\n\t\t}\n\n\t\tgroup.add( element as ViewAttributeElement );\n\t\t( element as any )._clonesGroup = group;\n\t}\n\n\t/**\n\t * Removes all the information about the given {@link module:engine/view/attributeelement~ViewAttributeElement attribute element}\n\t * from its clones group.\n\t *\n\t * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n\t * This allows to reference the whole group even if the element was already removed from the tree.\n\t *\n\t * Does nothing if the element has no {@link module:engine/view/attributeelement~ViewAttributeElement#id id}.\n\t *\n\t * @param element Attribute element to remove.\n\t */\n\tprivate _removeFromClonedElementsGroup( element: ViewNode ) {\n\t\t// Traverse the element's children recursively to find other attribute elements that also got removed.\n\t\t// The loop is at the beginning so we can make fast returns later in the code.\n\t\tif ( element.is( 'element' ) ) {\n\t\t\tfor ( const child of element.getChildren() ) {\n\t\t\t\tthis._removeFromClonedElementsGroup( child );\n\t\t\t}\n\t\t}\n\n\t\tconst id = ( element as any ).id;\n\n\t\tif ( !id ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst group = this._cloneGroups.get( id );\n\n\t\tif ( !group ) {\n\t\t\treturn;\n\t\t}\n\n\t\tgroup.delete( element as ViewAttributeElement );\n\t\t// Not removing group from element on purpose!\n\t\t// If other parts of code have reference to this element, they will be able to get references to other elements from the group.\n\t}\n}\n\n// Helper function for `view.writer.wrap`. Checks if given element has any children that are not ui elements.\nfunction _hasNonUiChildren( parent: ViewElement ): boolean {\n\treturn Array.from( parent.getChildren() ).some( child => !child.is( 'uiElement' ) );\n}\n\n/**\n * The `attribute` passed to {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#wrap()`}\n * must be an instance of {@link module:engine/view/attributeelement~ViewAttributeElement `AttributeElement`}.\n *\n * @error view-writer-wrap-invalid-attribute\n */\n\n/**\n * Returns first parent container of specified {@link module:engine/view/position~ViewPosition Position}.\n * Position's parent node is checked as first, then next parents are checked.\n * Note that {@link module:engine/view/documentfragment~ViewDocumentFragment DocumentFragment} is treated like a container.\n *\n * @param position Position used as a start point to locate parent container.\n * @returns Parent container element or `undefined` if container is not found.\n */\nfunction getParentContainer( position: ViewPosition ): ViewContainerElement | ViewDocumentFragment | undefined {\n\tlet parent = position.parent;\n\n\twhile ( !isContainerOrFragment( parent ) ) {\n\t\tif ( !parent ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tparent = parent.parent as any;\n\t}\n\n\treturn ( parent as ViewContainerElement | ViewDocumentFragment );\n}\n\n/**\n * Checks if first {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement} provided to the function\n * can be wrapped outside second element. It is done by comparing elements'\n * {@link module:engine/view/attributeelement~ViewAttributeElement#priority priorities}, if both have same priority\n * {@link module:engine/view/element~ViewElement#getIdentity identities} are compared.\n */\nfunction shouldABeOutsideB( a: ViewAttributeElement, b: ViewAttributeElement ): boolean {\n\tif ( a.priority < b.priority ) {\n\t\treturn true;\n\t} else if ( a.priority > b.priority ) {\n\t\treturn false;\n\t}\n\n\t// When priorities are equal and names are different - use identities.\n\treturn a.getIdentity() < b.getIdentity();\n}\n\n/**\n * Returns new position that is moved to near text node. Returns same position if there is no text node before of after\n * specified position.\n *\n * ```html\n *

    foo[]

    ->

    foo{}

    \n *

    []foo

    ->

    {}foo

    \n * ```\n *\n * @returns Position located inside text node or same position if there is no text nodes\n * before or after position location.\n */\nfunction movePositionToTextNode( position: ViewPosition ): ViewPosition {\n\tconst nodeBefore = position.nodeBefore;\n\n\tif ( nodeBefore && nodeBefore.is( '$text' ) ) {\n\t\treturn new ViewPosition( nodeBefore, nodeBefore.data.length );\n\t}\n\n\tconst nodeAfter = position.nodeAfter;\n\n\tif ( nodeAfter && nodeAfter.is( '$text' ) ) {\n\t\treturn new ViewPosition( nodeAfter, 0 );\n\t}\n\n\treturn position;\n}\n\n/**\n * Breaks text node into two text nodes when possible.\n *\n * ```html\n *

    foo{}bar

    ->

    foo[]bar

    \n *

    {}foobar

    ->

    []foobar

    \n *

    foobar{}

    ->

    foobar[]

    \n * ```\n *\n * @param position Position that need to be placed inside text node.\n * @returns New position after breaking text node.\n */\nfunction breakTextNode( position: ViewPosition ): ViewPosition {\n\tif ( position.offset == ( position.parent as ViewText ).data.length ) {\n\t\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! + 1 );\n\t}\n\n\tif ( position.offset === 0 ) {\n\t\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! );\n\t}\n\n\t// Get part of the text that need to be moved.\n\tconst textToMove = ( position.parent as ViewText ).data.slice( position.offset );\n\n\t// Leave rest of the text in position's parent.\n\t( position.parent as ViewText )._data = ( position.parent as ViewText ).data.slice( 0, position.offset );\n\n\t// Insert new text node after position's parent text node.\n\t( position.parent.parent as any )._insertChild(\n\t\t( position.parent as ViewText ).index! + 1,\n\t\tnew ViewText( position.root.document, textToMove )\n\t);\n\n\t// Return new position between two newly created text nodes.\n\treturn new ViewPosition( position.parent.parent as any, ( position.parent as ViewText ).index! + 1 );\n}\n\n/**\n * Merges two text nodes into first node. Removes second node and returns merge position.\n *\n * @param t1 First text node to merge. Data from second text node will be moved at the end of this text node.\n * @param t2 Second text node to merge. This node will be removed after merging.\n * @returns Position after merging text nodes.\n */\nfunction mergeTextNodes( t1: ViewText, t2: ViewText ): ViewPosition {\n\t// Merge text data into first text node and remove second one.\n\tconst nodeBeforeLength = t1.data.length;\n\tt1._data += t2.data;\n\tt2._remove();\n\n\treturn new ViewPosition( t1, nodeBeforeLength );\n}\n\nconst validNodesToInsert = [ ViewText, ViewAttributeElement, ViewContainerElement, ViewEmptyElement, ViewRawElement, ViewUIElement ];\n\n/**\n * Checks if provided nodes are valid to insert.\n *\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n * contains instances that are not supported ones (see error description for valid ones.\n */\nfunction validateNodesToInsert( nodes: Iterable, errorContext: ViewDocument ): void {\n\tfor ( const node of nodes ) {\n\t\tif ( !validNodesToInsert.some( validNode => node instanceof validNode ) ) {\n\t\t\t/**\n\t\t\t * One of the nodes to be inserted is of an invalid type.\n\t\t\t *\n\t\t\t * Nodes to be inserted with {@link module:engine/view/downcastwriter~ViewDowncastWriter#insert `ViewDowncastWriter#insert()`}\n\t\t\t * should be of the following types:\n\t\t\t *\n\t\t\t * * {@link module:engine/view/attributeelement~ViewAttributeElement ViewAttributeElement},\n\t\t\t * * {@link module:engine/view/containerelement~ViewContainerElement ViewContainerElement},\n\t\t\t * * {@link module:engine/view/emptyelement~ViewEmptyElement ViewEmptyElement},\n\t\t\t * * {@link module:engine/view/uielement~ViewUIElement UIElement},\n\t\t\t * * {@link module:engine/view/rawelement~ViewRawElement RawElement},\n\t\t\t * * {@link module:engine/view/text~ViewText Text}.\n\t\t\t *\n\t\t\t * @error view-writer-insert-invalid-node-type\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-writer-insert-invalid-node-type', errorContext );\n\t\t}\n\n\t\tif ( !node.is( '$text' ) ) {\n\t\t\tvalidateNodesToInsert( ( node as ViewElement ).getChildren(), errorContext );\n\t\t}\n\t}\n}\n\n/**\n * Checks if node is ViewContainerElement or DocumentFragment, because in most cases they should be treated the same way.\n *\n * @returns Returns `true` if node is instance of ViewContainerElement or DocumentFragment.\n */\nfunction isContainerOrFragment( node: ViewNode | ViewDocumentFragment ): boolean {\n\treturn node && ( node.is( 'containerElement' ) || node.is( 'documentFragment' ) );\n}\n\n/**\n * Checks if {@link module:engine/view/range~ViewRange#start range start} and {@link module:engine/view/range~ViewRange#end range end}\n * are placed inside same {@link module:engine/view/containerelement~ViewContainerElement container element}.\n * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when validation fails.\n */\nfunction validateRangeContainer( range: ViewRange, errorContext: ViewDocument ) {\n\tconst startContainer = getParentContainer( range.start );\n\tconst endContainer = getParentContainer( range.end );\n\n\tif ( !startContainer || !endContainer || startContainer !== endContainer ) {\n\t\t/**\n\t\t * The container of the given range is invalid.\n\t\t *\n\t\t * This may happen if {@link module:engine/view/range~ViewRange#start range start} and\n\t\t * {@link module:engine/view/range~ViewRange#end range end} positions are not placed inside the same container element or\n\t\t * a parent container for these positions cannot be found.\n\t\t *\n\t\t * Methods like {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#remove()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#clean()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#wrap()`},\n\t\t * {@link module:engine/view/downcastwriter~ViewDowncastWriter#wrap `ViewDowncastWriter#unwrap()`} need to be called\n\t\t * on a range that has its start and end positions located in the same container element. Both positions can be\n\t\t * nested within other elements (e.g. an attribute element) but the closest container ancestor must be the same.\n\t\t *\n\t\t * @error view-writer-invalid-range-container\n\t\t */\n\t\tthrow new CKEditorError( 'view-writer-invalid-range-container', errorContext );\n\t}\n}\n\n/**\n * Checks if the provided argument is a plain object that can be used as options for container element.\n */\nfunction isContainerOptions(\n\tchildrenOrOptions: ViewNode | Iterable | { renderUnsafeAttributes?: Array }\n): childrenOrOptions is { renderUnsafeAttributes?: Array } {\n\treturn isPlainObject( childrenOrOptions );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * Set of utilities related to handling block and inline fillers.\n *\n * Browsers do not allow to put caret in elements which does not have height. Because of it, we need to fill all\n * empty elements which should be selectable with elements or characters called \"fillers\". Unfortunately there is no one\n * universal filler, this is why two types are uses:\n *\n * * Block filler is an element which fill block elements, like `

    `. CKEditor uses `
    ` as a block filler during the editing,\n * as browsers do natively. So instead of an empty `

    ` there will be `


    `. The advantage of block filler is that\n * it is transparent for the selection, so when the caret is before the `
    ` and user presses right arrow he will be\n * moved to the next paragraph, not after the `
    `. The disadvantage is that it breaks a block, so it cannot be used\n * in the middle of a line of text. The {@link module:engine/view/filler~BR_FILLER `
    ` filler} can be replaced with any other\n * character in the data output, for instance {@link module:engine/view/filler~NBSP_FILLER non-breaking space} or\n * {@link module:engine/view/filler~MARKED_NBSP_FILLER marked non-breaking space}.\n *\n * * Inline filler is a filler which does not break a line of text, so it can be used inside the text, for instance in the empty\n * `` surrendered by text: `foobar`, if we want to put the caret there. CKEditor uses a sequence of the zero-width\n * spaces as an {@link module:engine/view/filler~INLINE_FILLER inline filler} having the predetermined\n * {@link module:engine/view/filler~INLINE_FILLER_LENGTH length}. A sequence is used, instead of a single character to\n * avoid treating random zero-width spaces as the inline filler. Disadvantage of the inline filler is that it is not\n * transparent for the selection. The arrow key moves the caret between zero-width spaces characters, so the additional\n * code is needed to handle the caret.\n *\n * Both inline and block fillers are handled by the {@link module:engine/view/renderer~ViewRenderer renderer} and are not present in the\n * view.\n *\n * @module engine/view/filler\n */\n\nimport { keyCodes, isText, type KeystrokeInfo } from '@ckeditor/ckeditor5-utils';\nimport { type EditingView } from './view.js';\nimport { type ViewDocumentDomEventData } from './observer/domeventdata.js';\nimport type { ViewDocumentArrowKeyEvent } from './observer/arrowkeysobserver.js';\n\n/**\n * Non-breaking space filler creator. This function creates the ` ` text node.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n * @internal\n */\nexport const NBSP_FILLER = ( domDocument: Document ): Text => domDocument.createTextNode( '\\u00A0' );\n\n/**\n * Marked non-breaking space filler creator. This function creates the ` ` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~BR_FILLER\n * @internal\n */\nexport const MARKED_NBSP_FILLER = ( domDocument: Document ): HTMLSpanElement => {\n\tconst span = domDocument.createElement( 'span' );\n\tspan.dataset.ckeFiller = 'true';\n\tspan.innerText = '\\u00A0';\n\n\treturn span;\n};\n\n/**\n * `
    ` filler creator. This function creates the `
    ` element.\n * It defines how the filler is created.\n *\n * @see module:engine/view/filler~NBSP_FILLER\n * @see module:engine/view/filler~MARKED_NBSP_FILLER\n * @internal\n */\nexport const BR_FILLER = ( domDocument: Document ): HTMLBRElement => {\n\tconst fillerBr = domDocument.createElement( 'br' );\n\tfillerBr.dataset.ckeFiller = 'true';\n\n\treturn fillerBr;\n};\n\n/**\n * Length of the {@link module:engine/view/filler~INLINE_FILLER INLINE_FILLER}.\n *\n * @internal\n */\nexport const INLINE_FILLER_LENGTH = 7;\n\n/**\n * Inline filler which is a sequence of the word joiners.\n *\n * @internal\n */\nexport const INLINE_FILLER: string = '\\u2060'.repeat( INLINE_FILLER_LENGTH );\n\n/**\n * Checks if the node is a text node which starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * startsWithFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * startsWithFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // true\n * startsWithFiller( document.createTextNode( 'foo' ) ); // false\n * startsWithFiller( document.createElement( 'p' ) ); // false\n * ```\n *\n * @param domNode DOM node.\n * @returns True if the text node starts with the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n * @internal\n */\nexport function startsWithFiller( domNode: Node | string ): boolean {\n\tif ( typeof domNode == 'string' ) {\n\t\treturn domNode.substr( 0, INLINE_FILLER_LENGTH ) === INLINE_FILLER;\n\t}\n\n\treturn isText( domNode ) && ( domNode.data.substr( 0, INLINE_FILLER_LENGTH ) === INLINE_FILLER );\n}\n\n/**\n * Checks if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n *\n * ```ts\n * isInlineFiller( document.createTextNode( INLINE_FILLER ) ); // true\n * isInlineFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ); // false\n * ```\n *\n * @param domText DOM text node.\n * @returns True if the text node contains only the {@link module:engine/view/filler~INLINE_FILLER inline filler}.\n * @internal\n */\nexport function isInlineFiller( domText: Text ): boolean {\n\treturn domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller( domText );\n}\n\n/**\n * Get string data from the text node, removing an {@link module:engine/view/filler~INLINE_FILLER inline filler} from it,\n * if text node contains it.\n *\n * ```ts\n * getDataWithoutFiller( document.createTextNode( INLINE_FILLER + 'foo' ) ) == 'foo' // true\n * getDataWithoutFiller( document.createTextNode( 'foo' ) ) == 'foo' // true\n * ```\n *\n * @param domText DOM text node, possible with inline filler.\n * @returns Data without filler.\n * @internal\n */\nexport function getDataWithoutFiller( domText: Text | string ): string {\n\tconst data = typeof domText == 'string' ? domText : domText.data;\n\n\tif ( startsWithFiller( domText ) ) {\n\t\treturn data.slice( INLINE_FILLER_LENGTH );\n\t}\n\n\treturn data;\n}\n\n/**\n * Assign key observer which move cursor from the end of the inline filler to the beginning of it when\n * the left arrow is pressed, so the filler does not break navigation.\n *\n * @param view View controller instance we should inject quirks handling on.\n * @internal\n */\nexport function injectQuirksHandling( view: EditingView ): void {\n\tview.document.on( 'arrowKey', jumpOverInlineFiller, { priority: 'low' } );\n}\n\n/**\n * Move cursor from the end of the inline filler to the beginning of it when, so the filler does not break navigation.\n */\nfunction jumpOverInlineFiller( evt: unknown, data: ViewDocumentDomEventData & KeystrokeInfo ) {\n\tif ( data.keyCode == keyCodes.arrowleft ) {\n\t\tconst domSelection = data.domTarget.ownerDocument.defaultView!.getSelection()!;\n\n\t\tif ( domSelection.rangeCount == 1 && domSelection.getRangeAt( 0 ).collapsed ) {\n\t\t\tconst domParent = domSelection.getRangeAt( 0 ).startContainer;\n\t\t\tconst domOffset = domSelection.getRangeAt( 0 ).startOffset;\n\n\t\t\tif ( startsWithFiller( domParent ) && domOffset <= INLINE_FILLER_LENGTH ) {\n\t\t\t\tdomSelection.collapse( domParent, 0 );\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module engine/view/renderer\n */\n\nimport { ViewText } from './text.js';\nimport { ViewPosition } from './position.js';\nimport { INLINE_FILLER, INLINE_FILLER_LENGTH, startsWithFiller, isInlineFiller } from './filler.js';\n\nimport {\n\tCKEditorError,\n\tObservableMixin,\n\tdiff,\n\tenv,\n\tfastDiff,\n\tinsertAt,\n\tisComment,\n\tisNode,\n\tisText,\n\tremove,\n\tindexOf,\n\ttype DiffResult,\n\ttype ObservableChangeEvent,\n\ttype ObservableMixinConstructor\n} from '@ckeditor/ckeditor5-utils';\n\nimport type { ViewDocumentChangeType } from './document.js';\nimport { type ViewDocumentSelection } from './documentselection.js';\nimport { type ViewDomConverter } from './domconverter.js';\nimport { type ViewElement } from './element.js';\nimport { type ViewNode } from './node.js';\n\n// @if CK_DEBUG_TYPING // const { _buildLogMessage } = require( '../dev-utils/utils.js' );\n\nimport '../../theme/renderer.css';\n\ntype DomText = globalThis.Text;\ntype DomNode = globalThis.Node;\ntype DomDocument = globalThis.Document;\ntype DomElement = globalThis.HTMLElement;\ntype DomSelection = globalThis.Selection;\n\nconst ViewRendererBase: ObservableMixinConstructor = /* #__PURE__ */ ObservableMixin();\n\n/**\n * Renderer is responsible for updating the DOM structure and the DOM selection based on\n * the {@link module:engine/view/renderer~ViewRenderer#markToSync information about updated view nodes}.\n * In other words, it renders the view to the DOM.\n *\n * Its main responsibility is to make only the necessary, minimal changes to the DOM. However, unlike in many\n * virtual DOM implementations, the primary reason for doing minimal changes is not the performance but ensuring\n * that native editing features such as text composition, autocompletion, spell checking, selection's x-index are\n * affected as little as possible.\n *\n * Renderer uses {@link module:engine/view/domconverter~ViewDomConverter} to transform view nodes and positions\n * to and from the DOM.\n */\nexport class ViewRenderer extends ViewRendererBase {\n\t/**\n\t * Set of DOM Documents instances.\n\t */\n\tpublic readonly domDocuments: Set = new Set();\n\n\t/**\n\t * Converter instance.\n\t */\n\tpublic readonly domConverter: ViewDomConverter;\n\n\t/**\n\t * Set of nodes which attributes changed and may need to be rendered.\n\t */\n\tpublic readonly markedAttributes: Set = new Set();\n\n\t/**\n\t * Set of elements which child lists changed and may need to be rendered.\n\t */\n\tpublic readonly markedChildren: Set = new Set();\n\n\t/**\n\t * Set of text nodes which text data changed and may need to be rendered.\n\t */\n\tpublic readonly markedTexts: Set = new Set();\n\n\t/**\n\t * View selection. Renderer updates DOM selection based on the view selection.\n\t */\n\tpublic readonly selection: ViewDocumentSelection;\n\n\t/**\n\t * Indicates if the view document is focused and selection can be rendered. Selection will not be rendered if\n\t * this is set to `false`.\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isFocused: boolean;\n\n\t/**\n\t * Indicates whether the user is making a selection in the document (e.g. holding the mouse button and moving the cursor).\n\t * When they stop selecting, the property goes back to `false`.\n\t *\n\t * Note: In some browsers, the renderer will stop rendering the selection and inline fillers while the user is making\n\t * a selection to avoid glitches in DOM selection\n\t * (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isSelecting: boolean;\n\n\t/**\n\t * True if composition is in progress inside the document.\n\t *\n\t * This property is bound to the {@link module:engine/view/document~ViewDocument#isComposing `Document#isComposing`} property.\n\t *\n\t * @observable\n\t */\n\tdeclare public readonly isComposing: boolean;\n\n\t/**\n\t * The text node in which the inline filler was rendered.\n\t */\n\tprivate _inlineFiller: DomText | null = null;\n\n\t/**\n\t * DOM element containing fake selection.\n\t */\n\tprivate _fakeSelectionContainer: DomElement | null = null;\n\n\t/**\n\t * Creates a renderer instance.\n\t *\n\t * @param domConverter Converter instance.\n\t * @param selection View selection.\n\t */\n\tconstructor( domConverter: ViewDomConverter, selection: ViewDocumentSelection ) {\n\t\tsuper();\n\n\t\tthis.domConverter = domConverter;\n\t\tthis.selection = selection;\n\n\t\tthis.set( 'isFocused', false );\n\t\tthis.set( 'isSelecting', false );\n\t\tthis.set( 'isComposing', false );\n\n\t\t// Rendering the selection and inline filler manipulation should be postponed in (non-Android) Blink until the user finishes\n\t\t// creating the selection in DOM to avoid accidental selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\t// When the user stops selecting, all pending changes should be rendered ASAP, though.\n\t\tif ( env.isBlink && !env.isAndroid ) {\n\t\t\tthis.on( 'change:isSelecting', () => {\n\t\t\t\tif ( !this.isSelecting ) {\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t}\n\n\t/**\n\t * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n\t *\n\t * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n\t *\n\t * @see #markedAttributes\n\t * @see #markedChildren\n\t * @see #markedTexts\n\t *\n\t * @param type Type of the change.\n\t * @param node ViewNode to be marked.\n\t */\n\tpublic markToSync( type: ViewDocumentChangeType, node: ViewNode ): void {\n\t\tif ( type === 'text' ) {\n\t\t\tif ( this.domConverter.mapViewToDom( node.parent! ) ) {\n\t\t\t\tthis.markedTexts.add( node );\n\t\t\t}\n\t\t} else {\n\t\t\t// If the node has no DOM element it is not rendered yet,\n\t\t\t// its children/attributes do not need to be marked to be sync.\n\t\t\tif ( !this.domConverter.mapViewToDom( node as ViewElement ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( type === 'attributes' ) {\n\t\t\t\tthis.markedAttributes.add( node as ViewElement );\n\t\t\t} else if ( type === 'children' ) {\n\t\t\t\tthis.markedChildren.add( node as ViewElement );\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t\tconst unreachable: never = type;\n\n\t\t\t\t/**\n\t\t\t\t * Unknown type passed to Renderer.markToSync.\n\t\t\t\t *\n\t\t\t\t * @error view-renderer-unknown-type\n\t\t\t\t */\n\t\t\t\tthrow new CKEditorError( 'view-renderer-unknown-type', this );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n\t * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n\t *\n\t * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n\t * so it does as little as it is needed to update the DOM.\n\t *\n\t * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n\t * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n\t * removed as long as the selection is in the text node which needed it at first.\n\t */\n\tpublic render(): void {\n\t\t// Ignore rendering while in the composition mode. Composition events are not cancellable and browser will modify the DOM tree.\n\t\t// All marked elements, attributes, etc. will wait until next render after the composition ends.\n\t\t// On Android composition events are immediately applied to the model, so we don't need to skip rendering,\n\t\t// and we should not do it because the difference between view and DOM could lead to position mapping problems.\n\t\tif ( this.isComposing && !env.isAndroid ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cRendering aborted while isComposing.',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cRendering',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: bold'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tlet inlineFillerPosition: ViewPosition | null = null;\n\t\tconst isInlineFillerRenderingPossible = env.isBlink && !env.isAndroid ? !this.isSelecting : true;\n\n\t\t// Refresh mappings.\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildrenMappings( element );\n\t\t}\n\n\t\t// Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n\t\t// DOM selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\tif ( isInlineFillerRenderingPossible ) {\n\t\t\t// There was inline filler rendered in the DOM but it's not\n\t\t\t// at the selection position any more, so we can remove it\n\t\t\t// (cause even if it's needed, it must be placed in another location).\n\t\t\tif ( this._inlineFiller && !this._isSelectionInInlineFiller() ) {\n\t\t\t\tthis._removeInlineFiller();\n\t\t\t}\n\n\t\t\t// If we've got the filler, let's try to guess its position in the view.\n\t\t\tif ( this._inlineFiller ) {\n\t\t\t\tinlineFillerPosition = this._getInlineFillerPosition();\n\t\t\t}\n\t\t\t// Otherwise, if it's needed, create it at the selection position.\n\t\t\telse if ( this._needsInlineFillerAtSelection() ) {\n\t\t\t\tinlineFillerPosition = this.selection.getFirstPosition()!;\n\n\t\t\t\t// Do not use `markToSync` so it will be added even if the parent is already added.\n\t\t\t\tthis.markedChildren.add( inlineFillerPosition.parent as ViewElement );\n\t\t\t}\n\t\t}\n\t\t// Make sure the inline filler has any parent, so it can be mapped to view position by ViewDomConverter.\n\t\telse if ( this._inlineFiller && this._inlineFiller.parentNode ) {\n\t\t\t// While the user is making selection, preserve the inline filler at its original position.\n\t\t\tinlineFillerPosition = this.domConverter.domPositionToView( this._inlineFiller )!;\n\n\t\t\t// While down-casting the document selection attributes, all existing empty\n\t\t\t// attribute elements (for selection position) are removed from the view and DOM,\n\t\t\t// so make sure that we were able to map filler position.\n\t\t\t// https://github.com/ckeditor/ckeditor5/issues/12026\n\t\t\tif ( inlineFillerPosition && inlineFillerPosition.parent.is( '$text' ) ) {\n\t\t\t\t// The inline filler position is expected to be before the text node.\n\t\t\t\tinlineFillerPosition = ViewPosition._createBefore( inlineFillerPosition.parent );\n\t\t\t}\n\t\t}\n\n\t\tfor ( const element of this.markedAttributes ) {\n\t\t\tthis._updateAttrs( element );\n\t\t}\n\n\t\tfor ( const element of this.markedChildren ) {\n\t\t\tthis._updateChildren( element, { inlineFillerPosition } );\n\t\t}\n\n\t\tfor ( const node of this.markedTexts ) {\n\t\t\tif ( !this.markedChildren.has( node.parent as ViewElement ) && this.domConverter.mapViewToDom( node.parent as ViewElement ) ) {\n\t\t\t\tthis._updateText( node as ViewText, { inlineFillerPosition } );\n\t\t\t}\n\t\t}\n\n\t\t// * Check whether the inline filler is required and where it really is in the DOM.\n\t\t// At this point in most cases it will be in the DOM, but there are exceptions.\n\t\t// For example, if the inline filler was deep in the created DOM structure, it will not be created.\n\t\t// Similarly, if it was removed at the beginning of this function and then neither text nor children were updated,\n\t\t// it will not be present. Fix those and similar scenarios.\n\t\t// * Don't manipulate inline fillers while the selection is being made in (non-Android) Blink to prevent accidental\n\t\t// DOM selection collapsing\n\t\t// (https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723).\n\t\tif ( isInlineFillerRenderingPossible ) {\n\t\t\tif ( inlineFillerPosition ) {\n\t\t\t\tconst fillerDomPosition = this.domConverter.viewPositionToDom( inlineFillerPosition )!;\n\t\t\t\tconst domDocument = fillerDomPosition.parent.ownerDocument!;\n\n\t\t\t\tif ( !startsWithFiller( fillerDomPosition.parent ) ) {\n\t\t\t\t\t// Filler has not been created at filler position. Create it now.\n\t\t\t\t\tthis._inlineFiller = addInlineFiller( domDocument, fillerDomPosition.parent, fillerDomPosition.offset );\n\t\t\t\t} else {\n\t\t\t\t\t// Filler has been found, save it.\n\t\t\t\t\tthis._inlineFiller = fillerDomPosition.parent as DomText;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// There is no filler needed.\n\t\t\t\tthis._inlineFiller = null;\n\t\t\t}\n\t\t}\n\n\t\t// First focus the new editing host, then update the selection.\n\t\t// Otherwise, FF may throw an error (https://github.com/ckeditor/ckeditor5/issues/721).\n\t\tthis._updateFocus();\n\t\tthis._updateSelection();\n\n\t\tthis.domConverter._clearTemporaryCustomProperties();\n\n\t\tthis.markedTexts.clear();\n\t\tthis.markedAttributes.clear();\n\t\tthis.markedChildren.clear();\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Updates mappings of view element's children.\n\t *\n\t * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n\t * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n\t * Thanks to that these elements do not need to be re-rendered completely.\n\t *\n\t * @param viewElement The view element whose children mappings will be updated.\n\t */\n\tprivate _updateChildrenMappings( viewElement: ViewElement ): void {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM and there is no need to process it.\n\t\t\treturn;\n\t\t}\n\n\t\t// Removing nodes from the DOM as we iterate can cause `actualDomChildren`\n\t\t// (which is a live-updating `NodeList`) to get out of sync with the\n\t\t// indices that we compute as we iterate over `actions`.\n\t\t// This would produce incorrect element mappings.\n\t\t//\n\t\t// Converting live list to an array to make the list static.\n\t\tconst actualDomChildren = Array.from(\n\t\t\tdomElement.childNodes\n\t\t);\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, { withChildren: false } )\n\t\t);\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\t\tconst actions = this._findUpdateActions( diff, actualDomChildren, expectedDomChildren, areSimilarElements );\n\n\t\tif ( actions.indexOf( 'update' ) !== -1 ) {\n\t\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\t\tfor ( const action of actions ) {\n\t\t\t\tif ( action === 'update' ) {\n\t\t\t\t\tconst insertIndex = counter.equal + counter.insert;\n\t\t\t\t\tconst deleteIndex = counter.equal + counter.delete;\n\t\t\t\t\tconst viewChild = viewElement.getChild( insertIndex );\n\n\t\t\t\t\t// UIElement and RawElement are special cases. Their children are not stored in a view.\n\t\t\t\t\t// See https://github.com/ckeditor/ckeditor5/issues/799.\n\t\t\t\t\t// so we cannot use them with replacing flow (since they use view children during rendering\n\t\t\t\t\t// which will always result in rendering empty elements).\n\t\t\t\t\tif ( viewChild && !viewChild.is( 'uiElement' ) && !viewChild.is( 'rawElement' ) ) {\n\t\t\t\t\t\tthis._updateElementMappings( viewChild as ViewElement, actualDomChildren[ deleteIndex ] as DomElement );\n\t\t\t\t\t}\n\n\t\t\t\t\tremove( expectedDomChildren[ insertIndex ] );\n\t\t\t\t\tcounter.equal++;\n\t\t\t\t} else {\n\t\t\t\t\tcounter[ action ]++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Updates mappings of a given view element.\n\t *\n\t * @param viewElement The view element whose mappings will be updated.\n\t * @param domElement The DOM element representing the given view element.\n\t */\n\tprivate _updateElementMappings( viewElement: ViewElement, domElement: DomElement ): void {\n\t\t// Remap 'DomConverter' bindings.\n\t\tthis.domConverter.unbindDomElement( domElement );\n\t\tthis.domConverter.bindElements( domElement, viewElement );\n\n\t\t// View element may have children which needs to be updated, but are not marked, mark them to update.\n\t\tthis.markedChildren.add( viewElement );\n\n\t\t// Because we replace new view element mapping with the existing one, the corresponding DOM element\n\t\t// will not be rerendered. The new view element may have different attributes than the previous one.\n\t\t// Since its corresponding DOM element will not be rerendered, new attributes will not be added\n\t\t// to the DOM, so we need to mark it here to make sure its attributes gets updated.\n\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1427 for more detailed case study.\n\t\t// Also there are cases where replaced element is removed from the view structure and then has\n\t\t// its attributes changed or removed. In such cases the element will not be present in `markedAttributes`\n\t\t// and also may be the same (`element.isSimilar()`) as the reused element not having its attributes updated.\n\t\t// To prevent such situations we always mark reused element to have its attributes rerenderd.\n\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1560.\n\t\tthis.markedAttributes.add( viewElement );\n\t}\n\n\t/**\n\t * Gets the position of the inline filler based on the current selection.\n\t * Here, we assume that we know that the filler is needed and\n\t * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n\t * it is somewhere at the selection position.\n\t *\n\t * Note: The filler position cannot be restored based on the filler's DOM text node, because\n\t * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n\t * bindings are only dependable after rendering.\n\t */\n\tprivate _getInlineFillerPosition(): ViewPosition {\n\t\tconst firstPos = this.selection.getFirstPosition()!;\n\n\t\tif ( firstPos.parent.is( '$text' ) ) {\n\t\t\treturn ViewPosition._createBefore( firstPos.parent );\n\t\t} else {\n\t\t\treturn firstPos;\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` if the selection has not left the inline filler's text node.\n\t * If it is `true`, it means that the filler had been added for a reason and the selection did not\n\t * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n\t *\n\t * @returns `true` if the inline filler and selection are in the same place.\n\t */\n\tprivate _isSelectionInInlineFiller(): boolean {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Note, we can't check if selection's position equals position of the\n\t\t// this._inlineFiller node, because of #663. We may not be able to calculate\n\t\t// the filler's position in the view at this stage.\n\t\t// Instead, we check it the other way – whether selection is anchored in\n\t\t// that text node or next to it.\n\n\t\t// Possible options are:\n\t\t// \"FILLER{}\"\n\t\t// \"FILLERadded-text{}\"\n\t\tconst selectionPosition = this.selection.getFirstPosition()!;\n\t\tconst position = this.domConverter.viewPositionToDom( selectionPosition );\n\n\t\tif ( position && isText( position.parent ) && startsWithFiller( position.parent ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Removes the inline filler.\n\t */\n\tprivate _removeInlineFiller(): void {\n\t\tconst domFillerNode = this._inlineFiller!;\n\n\t\t// Something weird happened and the stored node doesn't contain the filler's text.\n\t\tif ( !startsWithFiller( domFillerNode ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.log( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Inline filler node: ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( domFillerNode.data ) }%c (${ domFillerNode.data.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t/**\n\t\t\t * The inline filler node was lost. Most likely, something overwrote the filler text node\n\t\t\t * in the DOM.\n\t\t\t *\n\t\t\t * @error view-renderer-filler-was-lost\n\t\t\t */\n\t\t\tthrow new CKEditorError( 'view-renderer-filler-was-lost', this );\n\t\t}\n\n\t\tif ( isInlineFiller( domFillerNode ) ) {\n\t\t\tdomFillerNode.remove();\n\t\t} else {\n\t\t\tdomFillerNode.data = domFillerNode.data.substr( INLINE_FILLER_LENGTH );\n\t\t}\n\n\t\tthis._inlineFiller = null;\n\t}\n\n\t/**\n\t * Checks if the inline {@link module:engine/view/filler filler} should be added.\n\t *\n\t * @returns `true` if the inline filler should be added.\n\t */\n\tprivate _needsInlineFillerAtSelection(): boolean {\n\t\tif ( this.selection.rangeCount != 1 || !this.selection.isCollapsed ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst selectionPosition = this.selection.getFirstPosition()!;\n\t\tconst selectionParent = selectionPosition.parent;\n\t\tconst selectionOffset = selectionPosition.offset;\n\n\t\t// If there is no DOM root we do not care about fillers.\n\t\tif ( !this.domConverter.mapViewToDom( selectionParent.root ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !( selectionParent.is( 'element' ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Prevent adding inline filler inside elements with contenteditable=false.\n\t\t// https://github.com/ckeditor/ckeditor5-engine/issues/1170\n\t\tif ( !isEditable( selectionParent ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst nodeBefore = selectionPosition.nodeBefore;\n\t\tconst nodeAfter = selectionPosition.nodeAfter;\n\n\t\tif ( nodeBefore instanceof ViewText || nodeAfter instanceof ViewText ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// We have block filler, we do not need inline one.\n\t\tif ( selectionOffset === selectionParent.getFillerOffset!() && ( !nodeBefore || !nodeBefore.is( 'element', 'br' ) ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Do not use inline filler while typing outside inline elements on Android.\n\t\t// The deleteContentBackward would remove part of the inline filler instead of removing last letter in a link.\n\t\tif ( env.isAndroid && ( nodeBefore || nodeAfter ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks if text needs to be updated and possibly updates it.\n\t *\n\t * @param viewText View text to update.\n\t * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n\t */\n\tprivate _updateText( viewText: ViewText, options: { inlineFillerPosition?: ViewPosition | null } ) {\n\t\tconst domText = this.domConverter.findCorrespondingDomText( viewText )!;\n\t\tconst newDomText = this.domConverter.viewToDom( viewText );\n\n\t\tlet expectedText = newDomText.data;\n\t\tconst filler = options.inlineFillerPosition;\n\n\t\tif ( filler && filler.parent == viewText.parent && filler.offset == viewText.index ) {\n\t\t\texpectedText = INLINE_FILLER + expectedText;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate text',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: normal'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tthis._updateTextNode( domText, expectedText );\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Checks if attribute list needs to be updated and possibly updates it.\n\t *\n\t * @param viewElement The view element to update.\n\t */\n\tprivate _updateAttrs( viewElement: ViewElement ): void {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that 'viewElement' is outdated as its mapping was updated\n\t\t\t// in 'this._updateChildrenMappings()'. There is no need to process it as new view element which\n\t\t\t// replaced old 'viewElement' mapping was also added to 'this.markedAttributes'\n\t\t\t// in 'this._updateChildrenMappings()' so it will be processed separately.\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove attributes from DOM elements if they do not exist in the view.\n\t\t//\n\t\t// Note: It is important to first remove DOM attributes and then set new ones, because some view attributes may be renamed\n\t\t// as they are set on DOM (due to unsafe attributes handling). If we set the view attribute first, and then remove\n\t\t// non-existing DOM attributes, then we would remove the attribute that we just set.\n\t\t//\n\t\t// Note: The domElement.attributes is a live collection, so we need to convert it to an array to avoid issues.\n\t\tfor ( const domAttr of Array.from( ( domElement as DomElement ).attributes ) ) {\n\t\t\tconst key = domAttr.name;\n\n\t\t\t// All other attributes not present in the DOM should be removed.\n\t\t\tif ( !viewElement.hasAttribute( key ) ) {\n\t\t\t\tthis.domConverter.removeDomElementAttribute( domElement as DomElement, key );\n\t\t\t}\n\t\t}\n\n\t\t// Add or overwrite attributes.\n\t\tfor ( const key of viewElement.getAttributeKeys() ) {\n\t\t\tthis.domConverter.setDomElementAttribute( domElement as DomElement, key, viewElement.getAttribute( key )!, viewElement );\n\t\t}\n\t}\n\n\t/**\n\t * Checks if elements child list needs to be updated and possibly updates it.\n\t *\n\t * Note that on Android, to reduce the risk of composition breaks, it tries to update data of an existing\n\t * child text nodes instead of replacing them completely.\n\t *\n\t * @param viewElement View element to update.\n\t * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n\t */\n\tprivate _updateChildren( viewElement: ViewElement, options: { inlineFillerPosition: ViewPosition | null } ) {\n\t\tconst domElement = this.domConverter.mapViewToDom( viewElement );\n\n\t\tif ( !domElement ) {\n\t\t\t// If there is no `domElement` it means that it was already removed from DOM.\n\t\t\t// There is no need to process it. It will be processed when re-inserted.\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate children',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-weight: normal'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t// IME on Android inserts a new text node while typing after a link\n\t\t// instead of updating an existing text node that follows the link.\n\t\t// We must normalize those text nodes so the diff won't get confused.\n\t\t// https://github.com/ckeditor/ckeditor5/issues/12574.\n\t\tif ( env.isAndroid ) {\n\t\t\tlet previousDomNode = null;\n\n\t\t\tfor ( const domNode of Array.from( domElement.childNodes ) ) {\n\t\t\t\tif ( previousDomNode && isText( previousDomNode ) && isText( domNode ) ) {\n\t\t\t\t\tdomElement.normalize();\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tpreviousDomNode = domNode;\n\t\t\t}\n\t\t}\n\n\t\tconst inlineFillerPosition = options.inlineFillerPosition;\n\t\tconst actualDomChildren = domElement.childNodes;\n\t\tconst expectedDomChildren = Array.from(\n\t\t\tthis.domConverter.viewChildrenToDom( viewElement, { bind: true } )\n\t\t);\n\n\t\t// Inline filler element has to be created as it is present in the DOM, but not in the view. It is required\n\t\t// during diffing so text nodes could be compared correctly and also during rendering to maintain\n\t\t// proper order and indexes while updating the DOM.\n\t\tif ( inlineFillerPosition && inlineFillerPosition.parent === viewElement ) {\n\t\t\taddInlineFiller( ( domElement as DomElement ).ownerDocument, expectedDomChildren, inlineFillerPosition.offset );\n\t\t}\n\n\t\tconst diff = this._diffNodeLists( actualDomChildren, expectedDomChildren );\n\n\t\t// We need to make sure that we update the existing text node and not replace it with another one.\n\t\t// The composition and different \"language\" browser extensions are fragile to text node being completely replaced.\n\t\tconst actions = this._findUpdateActions( diff, actualDomChildren, expectedDomChildren, areTextNodes );\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping && actions.every( a => a == 'equal' ) ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cNothing to update.',\n\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tlet i = 0;\n\t\tconst nodesToUnbind: Set = new Set();\n\n\t\t// Handle deletions first.\n\t\t// This is to prevent a situation where an element that already exists in `actualDomChildren` is inserted at a different\n\t\t// index in `actualDomChildren`. Since `actualDomChildren` is a `NodeList`, this works like move, not like an insert,\n\t\t// and it disrupts the whole algorithm. See https://github.com/ckeditor/ckeditor5/issues/6367.\n\t\t//\n\t\t// It doesn't matter in what order we remove or add nodes, as long as we remove and add correct nodes at correct indexes.\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'delete' ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\tconst node = actualDomChildren[ i ];\n\t\t\t\t// @if CK_DEBUG_TYPING // \tif ( isText( node ) ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'%cRemove text node' +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'color: blue', ''\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // \t} else {\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t'%cRemove element' +\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: `,\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t\tnode\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // \t}\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tnodesToUnbind.add( actualDomChildren[ i ] as DomElement );\n\t\t\t\tremove( actualDomChildren[ i ] );\n\t\t\t} else if ( action === 'equal' || action === 'update' ) {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\ti = 0;\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\tconst node = expectedDomChildren[ i ];\n\t\t\t\t// @if CK_DEBUG_TYPING //\tif ( isText( node ) ) {\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'%cInsert text node' +\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t`%c${ _escapeTextNodeData( node.data ) }%c (${ node.data.length })`,\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'color: blue',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t''\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING //\t} else {\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'%cInsert element:',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\t'font-weight: normal',\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t\tnode\n\t\t\t\t// @if CK_DEBUG_TYPING //\t\t) );\n\t\t\t\t// @if CK_DEBUG_TYPING //\t}\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tinsertAt( domElement as DomElement, i, expectedDomChildren[ i ] );\n\t\t\t\ti++;\n\t\t\t}\n\t\t\t// Update the existing text node data.\n\t\t\telse if ( action === 'update' ) {\n\t\t\t\tthis._updateTextNode( actualDomChildren[ i ] as DomText, ( expectedDomChildren[ i ] as DomText ).data );\n\t\t\t\ti++;\n\t\t\t} else if ( action === 'equal' ) {\n\t\t\t\t// Force updating text nodes inside elements which did not change and do not need to be re-rendered.\n\t\t\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/1125.\n\t\t\t\t// Do it here (not in the loop above) because only after insertions the `i` index is correct.\n\t\t\t\tthis._markDescendantTextToSync( this.domConverter.domToView( expectedDomChildren[ i ] ) as any );\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\n\t\t// Unbind removed nodes. When node does not have a parent it means that it was removed from DOM tree during\n\t\t// comparison with the expected DOM. We don't need to check child nodes, because if child node was reinserted,\n\t\t// it was moved to DOM tree out of the removed node.\n\t\tfor ( const node of nodesToUnbind ) {\n\t\t\tif ( !node.parentNode ) {\n\t\t\t\tthis.domConverter.unbindDomElement( node as DomElement );\n\t\t\t}\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n\n\t/**\n\t * Shorthand for diffing two arrays or node lists of DOM nodes.\n\t *\n\t * @param actualDomChildren Actual DOM children\n\t * @param expectedDomChildren Expected DOM children.\n\t * @returns The list of actions based on the {@link module:utils/diff~diff} function.\n\t */\n\tprivate _diffNodeLists( actualDomChildren: Array | NodeList, expectedDomChildren: Array | NodeList ) {\n\t\tactualDomChildren = filterOutFakeSelectionContainer( actualDomChildren, this._fakeSelectionContainer );\n\n\t\treturn diff( actualDomChildren, expectedDomChildren, sameNodes.bind( null, this.domConverter ) );\n\t}\n\n\t/**\n\t * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n\t * within one `insert`/`delete` action group, for example:\n\t *\n\t * ```\n\t * Actual DOM:\t\t

    FooBarBazBax

    \n\t * Expected DOM:\t

    Bar123Baz456

    \n\t * Input actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n\t * Output actions:\t[ insert, replace, delete, equal, replace ]\n\t * ```\n\t *\n\t * @param actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n\t * @param actualDom Actual DOM children\n\t * @param expectedDom Expected DOM children.\n\t * @param comparator A comparator function that should return `true` if the given node should be reused\n\t * (either by the update of a text node data or an element children list for similar elements).\n\t * @returns Actions array modified with the `update` actions.\n\t */\n\tprivate _findUpdateActions(\n\t\tactions: Array,\n\t\tactualDom: Array | NodeList,\n\t\texpectedDom: Array,\n\t\tcomparator: ( a: DomNode, b: DomNode ) => boolean\n\t): Array {\n\t\t// If there is no both 'insert' and 'delete' actions, no need to check for replaced elements.\n\t\tif ( actions.indexOf( 'insert' ) === -1 || actions.indexOf( 'delete' ) === -1 ) {\n\t\t\treturn actions;\n\t\t}\n\n\t\tlet newActions: Array = [];\n\t\tlet actualSlice = [];\n\t\tlet expectedSlice = [];\n\n\t\tconst counter = { equal: 0, insert: 0, delete: 0 };\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action === 'insert' ) {\n\t\t\t\texpectedSlice.push( expectedDom[ counter.equal + counter.insert ] );\n\t\t\t} else if ( action === 'delete' ) {\n\t\t\t\tactualSlice.push( actualDom[ counter.equal + counter.delete ] );\n\t\t\t} else { // equal\n\t\t\t\tnewActions = newActions.concat(\n\t\t\t\t\tdiff( actualSlice, expectedSlice, comparator )\n\t\t\t\t\t\t.map( action => action === 'equal' ? 'update' : action )\n\t\t\t\t);\n\n\t\t\t\tnewActions.push( 'equal' );\n\n\t\t\t\t// Reset stored elements on 'equal'.\n\t\t\t\tactualSlice = [];\n\t\t\t\texpectedSlice = [];\n\t\t\t}\n\t\t\tcounter[ action ]++;\n\t\t}\n\n\t\treturn newActions.concat(\n\t\t\tdiff( actualSlice, expectedSlice, comparator )\n\t\t\t\t.map( action => action === 'equal' ? 'update' : action )\n\t\t);\n\t}\n\n\t/**\n\t * Checks if text needs to be updated and possibly updates it by removing and inserting only parts\n\t * of the data from the existing text node to reduce impact on the IME composition.\n\t *\n\t * @param domText DOM text node to update.\n\t * @param expectedText The expected data of a text node.\n\t */\n\tprivate _updateTextNode( domText: DomText, expectedText: string ): void {\n\t\tconst actualText = domText.data;\n\n\t\tif ( actualText == expectedText ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cText node does not need update:%c ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`${ _escapeTextNodeData( actualText ) }%c (${ actualText.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Our approach to interleaving space character with NBSP might differ with the one implemented by the browser.\n\t\t// Avoid modifying the text node in the DOM if only NBSPs and spaces are interchanged.\n\t\t// We should avoid DOM modifications while composing to avoid breakage of composition.\n\t\t// See: https://github.com/ckeditor/ckeditor5/issues/13994.\n\t\tif ( env.isAndroid && this.isComposing && actualText.replace( /\\u00A0/g, ' ' ) == expectedText.replace( /\\u00A0/g, ' ' ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cText node ignore NBSP changes while composing: ' +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) -> ` +\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'%cUpdate text node' +\n\t\t// @if CK_DEBUG_TYPING // \t\t`${ this.isComposing ? ' while composing (may break composition)' : '' }: ` +\n\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( actualText ) }%c (${ actualText.length }) -> ` +\n\t\t// @if CK_DEBUG_TYPING // \t\t`%c${ _escapeTextNodeData( expectedText ) }%c (${ expectedText.length })`,\n\t\t// @if CK_DEBUG_TYPING // \t\tthis.isComposing ? 'color: red; font-weight: bold' : '',\n\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t// @if CK_DEBUG_TYPING // \t\t'',\n\t\t// @if CK_DEBUG_TYPING // \t\t'color: blue',\n\t\t// @if CK_DEBUG_TYPING // \t\t''\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tthis._updateTextNodeInternal( domText, expectedText );\n\t}\n\n\t/**\n\t * Part of the `_updateTextNode` method extracted for easier testing.\n\t */\n\tprivate _updateTextNodeInternal( domText: DomText, expectedText: string ): void {\n\t\tconst actions = fastDiff( domText.data, expectedText );\n\n\t\tfor ( const action of actions ) {\n\t\t\tif ( action.type === 'insert' ) {\n\t\t\t\tdomText.insertData( action.index, action.values.join( '' ) );\n\t\t\t} else { // 'delete'\n\t\t\t\tdomText.deleteData( action.index, action.howMany );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Marks text nodes to be synchronized.\n\t *\n\t * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n\t *\n\t * @param viewNode View node to sync.\n\t */\n\tprivate _markDescendantTextToSync( viewNode: ViewNode | undefined ): void {\n\t\tif ( !viewNode ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( viewNode.is( '$text' ) ) {\n\t\t\tthis.markedTexts.add( viewNode );\n\t\t} else if ( viewNode.is( 'element' ) ) {\n\t\t\tfor ( const child of viewNode.getChildren() ) {\n\t\t\t\tthis._markDescendantTextToSync( child );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the selection needs to be updated and possibly updates it.\n\t */\n\tprivate _updateSelection(): void {\n\t\t// Block updating DOM selection in (non-Android) Blink while the user is selecting to prevent accidental selection collapsing.\n\t\t// Note: Structural changes in DOM must trigger selection rendering, though. Nodes the selection was anchored\n\t\t// to, may disappear in DOM which would break the selection (e.g. in real-time collaboration scenarios).\n\t\t// https://github.com/ckeditor/ckeditor5/issues/10562, https://github.com/ckeditor/ckeditor5/issues/10723\n\t\tif ( env.isBlink && !env.isAndroid && this.isSelecting && !this.markedChildren.size ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is no selection - remove DOM and fake selections.\n\t\tif ( this.selection.rangeCount === 0 ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection: remove all ranges'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\tthis._removeDomSelection();\n\t\t\tthis._removeFakeSelection();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst domEditable = this.domConverter.mapViewToDom( this.selection.editableElement! );\n\n\t\t// Do not update DOM selection if there is no focus, or there is no DOM element corresponding to selection's editable element.\n\t\tif ( !this.isFocused || !domEditable ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'Skip updating DOM selection:',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t`isFocused: ${ this.isFocused }, hasDomEditable: ${ !!domEditable }`\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t// But if there was a fake selection, and it is not fake anymore - remove it as it can map to no longer existing widget.\n\t\t\t// See https://github.com/ckeditor/ckeditor5/issues/18123.\n\t\t\tif ( !this.selection.isFake && this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t\t// @if CK_DEBUG_TYPING // \t\t'Remove fake selection (not focused editable)'\n\t\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\t\tthis._removeFakeSelection();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t// Render fake selection - create the fake selection container (if needed) and move DOM selection to it.\n\t\tif ( this.selection.isFake ) {\n\t\t\tthis._updateFakeSelection( domEditable );\n\t\t}\n\t\t// There was a fake selection so remove it and update the DOM selection.\n\t\t// This is especially important on Android because otherwise IME will try to compose over the fake selection container.\n\t\telse if ( this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected ) {\n\t\t\tthis._removeFakeSelection();\n\t\t\tthis._updateDomSelection( domEditable );\n\t\t}\n\t\t// Update the DOM selection in case of a plain selection change (no fake selection is involved).\n\t\t// On non-Android the whole rendering is disabled in composition mode (including DOM selection update),\n\t\t// but updating DOM selection should be also disabled on Android if in the middle of the composition\n\t\t// (to not interrupt it).\n\t\telse if ( !( this.isComposing && env.isAndroid ) ) {\n\t\t\tthis._updateDomSelection( domEditable );\n\t\t}\n\t}\n\n\t/**\n\t * Updates the fake selection.\n\t *\n\t * @param domEditable A valid DOM editable where the fake selection container should be added.\n\t */\n\tprivate _updateFakeSelection( domEditable: DomElement ): void {\n\t\tconst domDocument = domEditable.ownerDocument;\n\n\t\tif ( !this._fakeSelectionContainer ) {\n\t\t\tthis._fakeSelectionContainer = createFakeSelectionContainer( domDocument );\n\t\t}\n\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\t// Bind fake selection container with the current selection *position*.\n\t\tthis.domConverter.bindFakeSelection( container, this.selection );\n\n\t\tif ( !this._fakeSelectionNeedsUpdate( domEditable ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !container.parentElement || container.parentElement != domEditable ) {\n\t\t\tdomEditable.appendChild( container );\n\t\t}\n\n\t\tcontainer.textContent = this.selection.fakeSelectionLabel || '\\u00A0';\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Set DOM fake selection'\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tconst domSelection = domDocument.getSelection()!;\n\t\tconst domRange = domDocument.createRange();\n\n\t\tdomSelection.removeAllRanges();\n\t\tdomRange.selectNodeContents( container );\n\t\tdomSelection.addRange( domRange );\n\t}\n\n\t/**\n\t * Updates the DOM selection.\n\t *\n\t * @param domEditable A valid DOM editable where the DOM selection should be rendered.\n\t */\n\tprivate _updateDomSelection( domEditable: DomElement ) {\n\t\tconst domSelection = domEditable.ownerDocument.defaultView!.getSelection()!;\n\n\t\t// Let's check whether DOM selection needs updating at all.\n\t\tif ( !this._domSelectionNeedsUpdate( domSelection ) ) {\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'%cDOM selection is already correct',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'font-style: italic;'\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Multi-range selection is not available in most browsers, and, at least in Chrome, trying to\n\t\t// set such selection, that is not continuous, throws an error. Because of that, we will just use anchor\n\t\t// and focus of view selection.\n\t\t// Since we are not supporting multi-range selection, we also do not need to check if proper editable is\n\t\t// selected. If there is any editable selected, it is okay (editable is taken from selection anchor).\n\t\tconst anchor = this.domConverter.viewPositionToDom( this.selection.anchor! )!;\n\t\tconst focus = this.domConverter.viewPositionToDom( this.selection.focus! )!;\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t'Update DOM selection:',\n\t\t// @if CK_DEBUG_TYPING // \t\tanchor,\n\t\t// @if CK_DEBUG_TYPING // \t\tfocus\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tdomSelection.setBaseAndExtent( anchor.parent, anchor.offset, focus.parent, focus.offset );\n\n\t\t// Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n\t\tif ( env.isGecko ) {\n\t\t\tfixGeckoSelectionAfterBr( focus, domSelection );\n\t\t}\n\t}\n\n\t/**\n\t * Checks whether a given DOM selection needs to be updated.\n\t *\n\t * @param domSelection The DOM selection to check.\n\t */\n\tprivate _domSelectionNeedsUpdate( domSelection: Selection ): boolean {\n\t\tif ( !this.domConverter.isDomSelectionCorrect( domSelection ) ) {\n\t\t\t// Current DOM selection is in incorrect position. We need to update it.\n\t\t\treturn true;\n\t\t}\n\n\t\tconst oldViewSelection = domSelection && this.domConverter.domSelectionToView( domSelection );\n\n\t\tif ( oldViewSelection && this.selection.isEqual( oldViewSelection ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If selection is not collapsed, it does not need to be updated if it is similar.\n\t\tif ( !this.selection.isCollapsed && this.selection.isSimilar( oldViewSelection ) ) {\n\t\t\t// Selection did not changed and is correct, do not update.\n\t\t\treturn false;\n\t\t}\n\n\t\t// Selections are not similar.\n\t\treturn true;\n\t}\n\n\t/**\n\t * Checks whether the fake selection needs to be updated.\n\t *\n\t * @param domEditable A valid DOM editable where a new fake selection container should be added.\n\t */\n\tprivate _fakeSelectionNeedsUpdate( domEditable: DomElement ): boolean {\n\t\tconst container = this._fakeSelectionContainer;\n\t\tconst domSelection = domEditable.ownerDocument.getSelection()!;\n\n\t\t// Fake selection needs to be updated if there's no fake selection container, or the container currently sits\n\t\t// in a different root.\n\t\tif ( !container || container.parentElement !== domEditable ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Make sure that the selection actually is within the fake selection.\n\t\tif ( domSelection.anchorNode !== container && !container.contains( domSelection.anchorNode ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn container.textContent !== this.selection.fakeSelectionLabel;\n\t}\n\n\t/**\n\t * Removes the DOM selection.\n\t */\n\tprivate _removeDomSelection(): void {\n\t\tfor ( const doc of this.domDocuments ) {\n\t\t\tconst domSelection = doc.getSelection()!;\n\n\t\t\tif ( domSelection.rangeCount ) {\n\t\t\t\tconst activeDomElement = doc.activeElement!;\n\t\t\t\tconst viewElement = this.domConverter.mapDomToView( activeDomElement as DomElement );\n\n\t\t\t\tif ( activeDomElement && viewElement ) {\n\t\t\t\t\tdomSelection.removeAllRanges();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Removes the fake selection.\n\t */\n\tprivate _removeFakeSelection(): void {\n\t\tconst container = this._fakeSelectionContainer;\n\n\t\tif ( container ) {\n\t\t\tcontainer.remove();\n\t\t}\n\t}\n\n\t/**\n\t * Checks if focus needs to be updated and possibly updates it.\n\t */\n\tprivate _updateFocus(): void {\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.group( ..._buildLogMessage( this, 'Renderer',\n\t\t// @if CK_DEBUG_TYPING // \t\t`update focus: ${ this.isFocused ? 'focused' : 'not focused' }`\n\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t// @if CK_DEBUG_TYPING // }\n\n\t\tif ( this.isFocused ) {\n\t\t\tconst editable = this.selection.editableElement;\n\n\t\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t\t// @if CK_DEBUG_TYPING // \tconsole.info( ..._buildLogMessage( this, 'Renderer',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t'focus editable:',\n\t\t\t// @if CK_DEBUG_TYPING // \t\t{ editable }\n\t\t\t// @if CK_DEBUG_TYPING // \t) );\n\t\t\t// @if CK_DEBUG_TYPING // }\n\n\t\t\tif ( editable ) {\n\t\t\t\tthis.domConverter.focus( editable );\n\t\t\t}\n\t\t}\n\n\t\t// @if CK_DEBUG_TYPING // if ( ( window as any ).logCKETyping ) {\n\t\t// @if CK_DEBUG_TYPING // \tconsole.groupEnd();\n\t\t// @if CK_DEBUG_TYPING // }\n\t}\n}\n\n/**\n * Checks if provided element is editable.\n */\nfunction isEditable( element: ViewElement ): boolean {\n\tif ( element.getAttribute( 'contenteditable' ) == 'false' ) {\n\t\treturn false;\n\t}\n\n\tconst parent = element.findAncestor( element => element.hasAttribute( 'contenteditable' ) );\n\n\treturn !parent || parent.getAttribute( 'contenteditable' ) == 'true';\n}\n\n/**\n * Adds inline filler at a given position.\n *\n * The position can be given as an array of DOM nodes and an offset in that array,\n * or a DOM parent element and an offset in that element.\n *\n * @returns The DOM text node that contains an inline filler.\n */\nfunction addInlineFiller( domDocument: DomDocument, domParentOrArray: DomNode | Array, offset: number ): DomText {\n\tconst childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n\tconst nodeAfterFiller = childNodes[ offset ];\n\n\tif ( isText( nodeAfterFiller ) ) {\n\t\tnodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n\n\t\treturn nodeAfterFiller;\n\t} else {\n\t\tconst fillerNode = domDocument.createTextNode( INLINE_FILLER );\n\n\t\tif ( Array.isArray( domParentOrArray ) ) {\n\t\t\t( childNodes as Array ).splice( offset, 0, fillerNode );\n\t\t} else {\n\t\t\tinsertAt( domParentOrArray as DomElement, offset, fillerNode );\n\t\t}\n\n\t\treturn fillerNode;\n\t}\n}\n\n/**\n * Whether two DOM nodes should be considered as similar.\n * Nodes are considered similar if they have the same tag name.\n */\nfunction areSimilarElements( node1: DomNode, node2: DomNode ): boolean {\n\treturn isNode( node1 ) && isNode( node2 ) &&\n\t\t!isText( node1 ) && !isText( node2 ) &&\n\t\t!isComment( node1 ) && !isComment( node2 ) &&\n\t\t( node1 as DomElement ).tagName.toLowerCase() === ( node2 as DomElement ).tagName.toLowerCase();\n}\n\n/**\n * Whether two DOM nodes are text nodes.\n */\nfunction areTextNodes( node1: DomNode, node2: DomNode ): boolean {\n\treturn isNode( node1 ) && isNode( node2 ) &&\n\t\tisText( node1 ) && isText( node2 );\n}\n\n/**\n * Whether two dom nodes should be considered as the same.\n * Two nodes which are considered the same are:\n *\n * * Text nodes with the same text.\n * * Element nodes represented by the same object.\n * * Two block filler elements.\n *\n * @param blockFillerMode Block filler mode, see {@link module:engine/view/domconverter~ViewDomConverter#blockFillerMode}.\n */\nfunction sameNodes( domConverter: ViewDomConverter, actualDomChild: DomNode, expectedDomChild: DomNode ): boolean {\n\t// Elements.\n\tif ( actualDomChild === expectedDomChild ) {\n\t\treturn true;\n\t}\n\t// Texts.\n\telse if ( isText( actualDomChild ) && isText( expectedDomChild ) ) {\n\t\treturn actualDomChild.data === expectedDomChild.data;\n\t}\n\t// Block fillers.\n\telse if ( domConverter.isBlockFiller( actualDomChild ) &&\n\t\tdomConverter.isBlockFiller( expectedDomChild ) ) {\n\t\treturn true;\n\t}\n\n\t// Not matching types.\n\treturn false;\n}\n\n/**\n * The following is a Firefox–specific hack (https://github.com/ckeditor/ckeditor5-engine/issues/1439).\n * When the native DOM selection is at the end of the block and preceded by
    e.g.\n *\n * ```html\n *

    foo
    []

    \n * ```\n *\n * which happens a lot when using the soft line break, the browser fails to (visually) move the\n * caret to the new line. A quick fix is as simple as force–refreshing the selection with the same range.\n */\nfunction fixGeckoSelectionAfterBr( focus: ReturnType, domSelection: DomSelection ) {\n\tlet parent = focus!.parent;\n\tlet offset = focus!.offset;\n\n\tif ( isText( parent ) && isInlineFiller( parent ) ) {\n\t\toffset = indexOf( parent ) + 1;\n\t\tparent = parent.parentNode!;\n\t}\n\n\t// This fix works only when the focus point is at the very end of an element.\n\t// There is no point in running it in cases unrelated to the browser bug.\n\tif ( parent.nodeType != Node.ELEMENT_NODE || offset != parent.childNodes.length - 1 ) {\n\t\treturn;\n\t}\n\n\tconst childAtOffset = parent.childNodes[ offset ];\n\n\t// To stay on the safe side, the fix being as specific as possible, it targets only the\n\t// selection which is at the very end of the element and preceded by
    .\n\tif ( childAtOffset && ( childAtOffset as DomElement ).tagName == 'BR' ) {\n\t\tdomSelection.addRange( domSelection.getRangeAt( 0 ) );\n\t}\n}\n\nfunction filterOutFakeSelectionContainer( domChildList: Array | NodeList, fakeSelectionContainer: DomElement | null ) {\n\tconst childList = Array.from( domChildList );\n\n\tif ( childList.length == 0 || !fakeSelectionContainer ) {\n\t\treturn childList;\n\t}\n\n\tconst last = childList[ childList.length - 1 ];\n\n\tif ( last == fakeSelectionContainer ) {\n\t\tchildList.pop();\n\t}\n\n\treturn childList;\n}\n\n/**\n * Creates a fake selection container for a given document.\n */\nfunction createFakeSelectionContainer( domDocument: DomDocument ): DomElement {\n\tconst container = domDocument.createElement( 'div' );\n\n\tcontainer.className = 'ck-fake-selection-container';\n\n\tObject.assign( container.style, {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: '-9999px',\n\t\t// See https://github.com/ckeditor/ckeditor5/issues/752.\n\t\twidth: '42px'\n\t} );\n\n\t// Fill it with a text node so we can update it later.\n\tcontainer.textContent = '\\u00A0';\n\n\treturn container;\n}\n\n// @if CK_DEBUG_TYPING // function _escapeTextNodeData( text ) {\n// @if CK_DEBUG_TYPING // \tconst escapedText = text\n// @if CK_DEBUG_TYPING // \t\t.replace( /&/g, '&' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u00A0/g, ' ' )\n// @if CK_DEBUG_TYPING // \t\t.replace( /\\u2060/g, '⁠' );\n// @if CK_DEBUG_TYPING //\n// @if CK_DEBUG_TYPING // \treturn `\"${ escapedText }\"`;\n// @if CK_DEBUG_TYPING // }\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module engine/view/domconverter\n */\n\nimport { ViewText } from './text.js';\nimport { ViewElement } from './element.js';\nimport { ViewUIElement } from './uielement.js';\nimport { ViewPosition } from './position.js';\nimport { ViewRange } from './range.js';\nimport { ViewSelection } from './selection.js';\nimport { ViewDocumentFragment } from './documentfragment.js';\nimport { ViewTreeWalker } from './treewalker.js';\nimport { Matcher, type MatcherPattern } from './matcher.js';\nimport {\n\tBR_FILLER, INLINE_FILLER_LENGTH, NBSP_FILLER, MARKED_NBSP_FILLER,\n\tgetDataWithoutFiller, isInlineFiller, startsWithFiller\n} from './filler.js';\n\nimport {\n\tglobal,\n\tlogWarning,\n\tindexOf,\n\tgetAncestors,\n\tisText,\n\tisComment,\n\tisValidAttributeName,\n\tfirst,\n\tenv\n} from '@ckeditor/ckeditor5-utils';\n\nimport { type ViewNode } from './node.js';\nimport { type ViewDocument } from './document.js';\nimport { type ViewDocumentSelection } from './documentselection.js';\nimport { type ViewEditableElement } from './editableelement.js';\nimport { type ViewTextProxy } from './textproxy.js';\nimport { type ViewRawElement } from './rawelement.js';\n\n// @if CK_DEBUG_TYPING // const { _buildLogMessage } = require( '../dev-utils/utils.js' );\n\ntype DomNode = globalThis.Node;\ntype DomElement = globalThis.HTMLElement;\ntype DomDocument = globalThis.Document;\ntype DomDocumentFragment = globalThis.DocumentFragment;\ntype DomComment = globalThis.Comment;\ntype DomRange = globalThis.Range;\ntype DomText = globalThis.Text;\ntype DomSelection = globalThis.Selection;\n\nconst BR_FILLER_REF = BR_FILLER( global.document ); // eslint-disable-line new-cap\nconst NBSP_FILLER_REF = NBSP_FILLER( global.document ); // eslint-disable-line new-cap\nconst MARKED_NBSP_FILLER_REF = MARKED_NBSP_FILLER( global.document ); // eslint-disable-line new-cap\nconst UNSAFE_ATTRIBUTE_NAME_PREFIX = 'data-ck-unsafe-attribute-';\nconst UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE = 'data-ck-unsafe-element';\n\n/**\n * `ViewDomConverter` is a set of tools to do transformations between DOM nodes and view nodes. It also handles\n * {@link module:engine/view/domconverter~ViewDomConverter#bindElements bindings} between these nodes.\n *\n * An instance of the DOM converter is available under\n * {@link module:engine/view/view~EditingView#domConverter `editor.editing.view.domConverter`}.\n *\n * The DOM converter does not check which nodes should be rendered (use {@link module:engine/view/renderer~ViewRenderer}), does not keep the\n * state of a tree nor keeps the synchronization between the tree view and\n * the DOM tree (use {@link module:engine/view/document~ViewDocument}).\n *\n * The DOM converter keeps DOM elements to view element bindings, so when the converter gets destroyed, the bindings are lost.\n * Two converters will keep separate binding maps, so one tree view can be bound with two DOM trees.\n */\nexport class ViewDomConverter {\n\tpublic readonly document: ViewDocument;\n\n\t/**\n\t * Whether to leave the View-to-DOM conversion result unchanged or improve editing experience by filtering out interactive data.\n\t */\n\tpublic readonly renderingMode: 'data' | 'editing';\n\n\t/**\n\t * The mode of a block filler used by the DOM converter.\n\t */\n\tpublic blockFillerMode: ViewBlockFillerMode;\n\n\t/**\n\t * Elements which are considered pre-formatted elements.\n\t */\n\tpublic readonly preElements: Array;\n\n\t/**\n\t * Elements which are considered block elements (and hence should be filled with a\n\t * {@link #isBlockFiller block filler}).\n\t *\n\t * Whether an element is considered a block element also affects handling of trailing whitespaces.\n\t *\n\t * You can extend this array if you introduce support for block elements which are not yet recognized here.\n\t */\n\tpublic readonly blockElements: Array;\n\n\t/**\n\t * A list of elements that exist inline (in text) but their inner structure cannot be edited because\n\t * of the way they are rendered by the browser. They are mostly HTML form elements but there are other\n\t * elements such as `` or `' +\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'spotify',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(album\\/\\w+)/,\n\t\t\t\t\t\t/^open\\.spotify\\.com\\/(track\\/\\w+)/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\t\t\t\t\t\tconst isTrack = id.startsWith( 'track/' );\n\t\t\t\t\t\tconst iframeStyle = isTrack ?\n\t\t\t\t\t\t\t'width: 100%; height: 80px; border: 0; display: block;' :\n\t\t\t\t\t\t\t'width: 100%; height: auto; aspect-ratio: 100 / 126; border: 0; display: block;';\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'youtube',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/shorts\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n\t\t\t\t\t\t/^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n\t\t\t\t\t\t/^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,\n\t\t\t\t\t\t/^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\t\t\t\t\t\tconst time = match[ 2 ];\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'vimeo',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^vimeo\\.com\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n\t\t\t\t\t\t/^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n\t\t\t\t\t\t/^player\\.vimeo\\.com\\/video\\/(\\d+)/\n\t\t\t\t\t],\n\t\t\t\t\thtml: match => {\n\t\t\t\t\t\tconst id = match[ 1 ];\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t\t`' +\n\t\t\t\t\t\t\t'
    '\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tname: 'instagram',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^instagram\\.com\\/p\\/(\\w+)/,\n\t\t\t\t\t\t/^instagram\\.com\\/reel\\/(\\w+)/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'twitter',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^twitter\\.com/,\n\t\t\t\t\t\t/^x\\.com/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'googleMaps',\n\t\t\t\t\turl: [\n\t\t\t\t\t\t/^google\\.com\\/maps/,\n\t\t\t\t\t\t/^goo\\.gl\\/maps/,\n\t\t\t\t\t\t/^maps\\.google\\.com/,\n\t\t\t\t\t\t/^maps\\.app\\.goo\\.gl/\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'flickr',\n\t\t\t\t\turl: /^flickr\\.com/\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'facebook',\n\t\t\t\t\turl: /^facebook\\.com/\n\t\t\t\t}\n\t\t\t]\n\t\t} as MediaEmbedConfig );\n\n\t\tthis.registry = new MediaRegistry( editor.locale, editor.config.get( 'mediaEmbed' )! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\t\tconst t = editor.t;\n\t\tconst conversion = editor.conversion;\n\t\tconst renderMediaPreview = editor.config.get( 'mediaEmbed.previewsInData' );\n\t\tconst elementName = editor.config.get( 'mediaEmbed.elementName' )!;\n\n\t\tconst registry = this.registry;\n\n\t\teditor.commands.add( 'mediaEmbed', new MediaEmbedCommand( editor ) );\n\n\t\t// Configure the schema.\n\t\tschema.register( 'media', {\n\t\t\tinheritAllFrom: '$blockObject',\n\t\t\tallowAttributes: [ 'url' ]\n\t\t} );\n\n\t\t// Model -> Data\n\t\tconversion.for( 'dataDowncast' ).elementToStructure( {\n\t\t\tmodel: 'media',\n\t\t\tview: ( modelElement, { writer } ) => {\n\t\t\t\tconst url = modelElement.getAttribute( 'url' ) as string;\n\n\t\t\t\treturn createMediaFigureElement( writer, registry, url, {\n\t\t\t\t\telementName,\n\t\t\t\t\trenderMediaPreview: !!url && renderMediaPreview\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t// Model -> Data (url -> data-oembed-url)\n\t\tconversion.for( 'dataDowncast' ).add(\n\t\t\tmodelToViewUrlAttributeConverter( registry, {\n\t\t\t\telementName,\n\t\t\t\trenderMediaPreview\n\t\t\t} ) );\n\n\t\t// Model -> View (element)\n\t\tconversion.for( 'editingDowncast' ).elementToStructure( {\n\t\t\tmodel: 'media',\n\t\t\tview: ( modelElement, { writer } ) => {\n\t\t\t\tconst url = modelElement.getAttribute( 'url' ) as string;\n\t\t\t\tconst figure = createMediaFigureElement( writer, registry, url, {\n\t\t\t\t\telementName,\n\t\t\t\t\trenderForEditingView: true\n\t\t\t\t} );\n\n\t\t\t\treturn toMediaWidget( figure, writer, t( 'media widget' ) );\n\t\t\t}\n\t\t} );\n\n\t\t// Model -> View (url -> data-oembed-url)\n\t\tconversion.for( 'editingDowncast' ).add(\n\t\t\tmodelToViewUrlAttributeConverter( registry, {\n\t\t\t\telementName,\n\t\t\t\trenderForEditingView: true\n\t\t\t} ) );\n\n\t\t// View -> Model (data-oembed-url -> url)\n\t\tconversion.for( 'upcast' )\n\t\t\t// Upcast semantic media.\n\t\t\t.elementToElement( {\n\t\t\t\tview: element => [ 'oembed', elementName ].includes( element.name ) && element.getAttribute( 'url' ) ?\n\t\t\t\t\t{ name: true } :\n\t\t\t\t\tnull,\n\t\t\t\tmodel: ( viewMedia, { writer } ) => {\n\t\t\t\t\tconst url = viewMedia.getAttribute( 'url' ) as string;\n\n\t\t\t\t\tif ( registry.hasMedia( url ) ) {\n\t\t\t\t\t\treturn writer.createElement( 'media', { url } );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t// Upcast non-semantic media.\n\t\t\t.elementToElement( {\n\t\t\t\tview: {\n\t\t\t\t\tname: 'div',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-oembed-url': true\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodel: ( viewMedia, { writer } ) => {\n\t\t\t\t\tconst url = viewMedia.getAttribute( 'data-oembed-url' ) as string;\n\n\t\t\t\t\tif ( registry.hasMedia( url ) ) {\n\t\t\t\t\t\treturn writer.createElement( 'media', { url } );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t// Consume `
    ` elements, that were left after upcast.\n\t\t\t.add( dispatcher => {\n\t\t\t\tconst converter: GetCallback = ( evt, data, conversionApi ) => {\n\t\t\t\t\tif ( !conversionApi.consumable.consume( data.viewItem, { name: true, classes: 'media' } ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { modelRange, modelCursor } = conversionApi.convertChildren( data.viewItem, data.modelCursor );\n\n\t\t\t\t\tdata.modelRange = modelRange;\n\t\t\t\t\tdata.modelCursor = modelCursor;\n\n\t\t\t\t\tconst modelElement = first( modelRange!.getItems() );\n\n\t\t\t\t\tif ( !modelElement ) {\n\t\t\t\t\t\t// Revert consumed figure so other features can convert it.\n\t\t\t\t\t\tconversionApi.consumable.revert( data.viewItem, { name: true, classes: 'media' } );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tdispatcher.on( 'element:figure', converter );\n\t\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/automediaembed\n */\n\nimport { type Editor, Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { ModelLiveRange, ModelLivePosition } from '@ckeditor/ckeditor5-engine';\nimport { Clipboard, type ClipboardInputTransformationEvent, type ClipboardPipeline } from '@ckeditor/ckeditor5-clipboard';\nimport { Delete } from '@ckeditor/ckeditor5-typing';\nimport { Undo, type UndoCommand } from '@ckeditor/ckeditor5-undo';\nimport { global } from '@ckeditor/ckeditor5-utils';\n\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport { insertMedia } from './utils.js';\nimport { type MediaEmbedCommand } from './mediaembedcommand.js';\n\nconst URL_REGEXP = /^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;\n\n/**\n * The auto-media embed plugin. It recognizes media links in the pasted content and embeds\n * them shortly after they are injected into the document.\n */\nexport class AutoMediaEmbed extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ Clipboard, Delete, Undo ]> {\n\t\treturn [ Clipboard, Delete, Undo ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'AutoMediaEmbed' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * The paste–to–embed `setTimeout` ID. Stored as a property to allow\n\t * cleaning of the timeout.\n\t */\n\tprivate _timeoutId: number | null;\n\n\t/**\n\t * The position where the `` element will be inserted after the timeout,\n\t * determined each time the new content is pasted into the document.\n\t */\n\tprivate _positionToInsert: ModelLivePosition | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\tthis._timeoutId = null;\n\t\tthis._positionToInsert = null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst modelDocument = editor.model.document;\n\n\t\t// We need to listen on `Clipboard#inputTransformation` because we need to save positions of selection.\n\t\t// After pasting, the content between those positions will be checked for a URL that could be transformed\n\t\t// into media.\n\t\tconst clipboardPipeline: ClipboardPipeline = editor.plugins.get( 'ClipboardPipeline' );\n\t\tthis.listenTo( clipboardPipeline, 'inputTransformation', () => {\n\t\t\tconst firstRange = modelDocument.selection.getFirstRange()!;\n\n\t\t\tconst leftLivePosition = ModelLivePosition.fromPosition( firstRange.start );\n\t\t\tleftLivePosition.stickiness = 'toPrevious';\n\n\t\t\tconst rightLivePosition = ModelLivePosition.fromPosition( firstRange.end );\n\t\t\trightLivePosition.stickiness = 'toNext';\n\n\t\t\tmodelDocument.once( 'change:data', () => {\n\t\t\t\tthis._embedMediaBetweenPositions( leftLivePosition, rightLivePosition );\n\n\t\t\t\tleftLivePosition.detach();\n\t\t\t\trightLivePosition.detach();\n\t\t\t}, { priority: 'high' } );\n\t\t} );\n\n\t\tconst undoCommand: UndoCommand = editor.commands.get( 'undo' )!;\n\t\tundoCommand.on( 'execute', () => {\n\t\t\tif ( this._timeoutId ) {\n\t\t\t\tglobal.window.clearTimeout( this._timeoutId );\n\t\t\t\tthis._positionToInsert!.detach();\n\n\t\t\t\tthis._timeoutId = null;\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t}\n\t\t}, { priority: 'high' } );\n\t}\n\n\t/**\n\t * Analyzes the part of the document between provided positions in search for a URL representing media.\n\t * When the URL is found, it is automatically converted into media.\n\t *\n\t * @param leftPosition Left position of the selection.\n\t * @param rightPosition Right position of the selection.\n\t */\n\tprivate _embedMediaBetweenPositions( leftPosition: ModelLivePosition, rightPosition: ModelLivePosition ): void {\n\t\tconst editor = this.editor;\n\t\tconst mediaRegistry = editor.plugins.get( MediaEmbedEditing ).registry;\n\t\t// TODO: Use marker instead of ModelLiveRange & LivePositions.\n\t\tconst urlRange = new ModelLiveRange( leftPosition, rightPosition );\n\t\tconst walker = urlRange.getWalker( { ignoreElementEnd: true } );\n\n\t\tlet url = '';\n\n\t\tfor ( const node of walker ) {\n\t\t\tif ( node.item.is( '$textProxy' ) ) {\n\t\t\t\turl += node.item.data;\n\t\t\t}\n\t\t}\n\n\t\turl = url.trim();\n\n\t\t// If the URL does not match to universal URL regexp, let's skip that.\n\t\tif ( !url.match( URL_REGEXP ) ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// If the URL represents a media, let's use it.\n\t\tif ( !mediaRegistry.hasMedia( url ) ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst mediaEmbedCommand: MediaEmbedCommand = editor.commands.get( 'mediaEmbed' )!;\n\n\t\t// Do not anything if media element cannot be inserted at the current position.\n\t\t// See https://github.com/ckeditor/ckeditor5-media-embed/issues/47.\n\t\tif ( !mediaEmbedCommand.isEnabled ) {\n\t\t\turlRange.detach();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Position won't be available in the `setTimeout` function so let's clone it.\n\t\tthis._positionToInsert = ModelLivePosition.fromPosition( leftPosition );\n\n\t\t// This action mustn't be executed if undo was called between pasting and auto-embedding.\n\t\tthis._timeoutId = global.window.setTimeout( () => {\n\t\t\teditor.model.change( writer => {\n\t\t\t\tthis._timeoutId = null;\n\n\t\t\t\twriter.remove( urlRange );\n\t\t\t\turlRange.detach();\n\n\t\t\t\tlet insertionPosition: ModelLivePosition | null = null;\n\n\t\t\t\t// Check if position where the media element should be inserted is still valid.\n\t\t\t\t// Otherwise leave it as undefined to use document.selection - default behavior of model.insertContent().\n\t\t\t\tif ( this._positionToInsert!.root.rootName !== '$graveyard' ) {\n\t\t\t\t\tinsertionPosition = this._positionToInsert;\n\t\t\t\t}\n\n\t\t\t\tinsertMedia( editor.model, url, insertionPosition, false );\n\n\t\t\t\tthis._positionToInsert!.detach();\n\t\t\t\tthis._positionToInsert = null;\n\t\t\t} );\n\n\t\t\teditor.plugins.get( Delete ).requestUndoOnBackspace();\n\t\t}, 100 );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/ui/mediaformview\n */\n\nimport {\n\ttype InputTextView,\n\tLabeledFieldView,\n\tView,\n\tcreateLabeledInputText,\n\tsubmitHandler\n} from '@ckeditor/ckeditor5-ui';\nimport { FocusTracker, KeystrokeHandler, type Locale } from '@ckeditor/ckeditor5-utils';\n\nimport '../../theme/mediaform.css';\n\n/**\n * The media form view controller class.\n *\n * See {@link module:media-embed/ui/mediaformview~MediaFormView}.\n */\nexport class MediaFormView extends View {\n\t/**\n\t * Tracks information about the DOM focus in the form.\n\t */\n\tpublic readonly focusTracker: FocusTracker;\n\n\t/**\n\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t */\n\tpublic readonly keystrokes: KeystrokeHandler;\n\n\t/**\n\t * The value of the URL input.\n\t */\n\tdeclare public mediaURLInputValue: string;\n\n\t/**\n\t * The URL input view.\n\t */\n\tpublic urlInputView: LabeledFieldView;\n\n\t/**\n\t * An array of form validators used by {@link #isValid}.\n\t */\n\tprivate readonly _validators: Array<( v: MediaFormView ) => string | undefined>;\n\n\t/**\n\t * The default info text for the {@link #urlInputView}.\n\t */\n\tprivate _urlInputViewInfoDefault?: string;\n\n\t/**\n\t * The info text with an additional tip for the {@link #urlInputView},\n\t * displayed when the input has some value.\n\t */\n\tprivate _urlInputViewInfoTip?: string;\n\n\t/**\n\t * @param validators Form validators used by {@link #isValid}.\n\t * @param locale The localization services instance.\n\t */\n\tconstructor( validators: Array<( v: MediaFormView ) => string | undefined>, locale: Locale ) {\n\t\tsuper( locale );\n\n\t\tthis.focusTracker = new FocusTracker();\n\t\tthis.keystrokes = new KeystrokeHandler();\n\t\tthis.set( 'mediaURLInputValue', '' );\n\t\tthis.urlInputView = this._createUrlInput();\n\n\t\tthis._validators = validators;\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'form',\n\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-media-form',\n\t\t\t\t\t'ck-responsive-form'\n\t\t\t\t],\n\n\t\t\t\ttabindex: '-1'\n\t\t\t},\n\n\t\t\tchildren: [\n\t\t\t\tthis.urlInputView\n\t\t\t]\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override render(): void {\n\t\tsuper.render();\n\n\t\tsubmitHandler( {\n\t\t\tview: this\n\t\t} );\n\n\t\t// Register the view in the focus tracker.\n\t\tthis.focusTracker.add( this.urlInputView.element! );\n\n\t\t// Start listening for the keystrokes coming from #element.\n\t\tthis.keystrokes.listenTo( this.element! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tthis.focusTracker.destroy();\n\t\tthis.keystrokes.destroy();\n\t}\n\n\t/**\n\t * Focuses the {@link #urlInputView}.\n\t */\n\tpublic focus(): void {\n\t\tthis.urlInputView.focus();\n\t}\n\n\t/**\n\t * The native DOM `value` of the {@link #urlInputView} element.\n\t *\n\t * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n\t * which works one way only and may not represent the actual state of the component in the DOM.\n\t */\n\tpublic get url(): string {\n\t\treturn this.urlInputView.fieldView.element!.value.trim();\n\t}\n\n\tpublic set url( url: string ) {\n\t\tthis.urlInputView.fieldView.value = url.trim();\n\t}\n\n\t/**\n\t * Validates the form and returns `false` when some fields are invalid.\n\t */\n\tpublic isValid(): boolean {\n\t\tthis.resetFormStatus();\n\n\t\tfor ( const validator of this._validators ) {\n\t\t\tconst errorText = validator( this );\n\n\t\t\t// One error per field is enough.\n\t\t\tif ( errorText ) {\n\t\t\t\t// Apply updated error.\n\t\t\t\tthis.urlInputView.errorText = errorText;\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Cleans up the supplementary error and information text of the {@link #urlInputView}\n\t * bringing them back to the state when the form has been displayed for the first time.\n\t *\n\t * See {@link #isValid}.\n\t */\n\tpublic resetFormStatus(): void {\n\t\tthis.urlInputView.errorText = null;\n\t\tthis.urlInputView.infoText = this._urlInputViewInfoDefault!;\n\t}\n\n\t/**\n\t * Creates a labeled input view.\n\t *\n\t * @returns Labeled input view instance.\n\t */\n\tprivate _createUrlInput(): LabeledFieldView {\n\t\tconst t = this.locale!.t;\n\n\t\tconst labeledInput = new LabeledFieldView( this.locale, createLabeledInputText );\n\t\tconst inputField = labeledInput.fieldView;\n\n\t\tthis._urlInputViewInfoDefault = t( 'Paste the media URL in the input.' );\n\t\tthis._urlInputViewInfoTip = t( 'Tip: Paste the URL into the content to embed faster.' );\n\n\t\tlabeledInput.label = t( 'Media URL' );\n\t\tlabeledInput.infoText = this._urlInputViewInfoDefault;\n\n\t\tinputField.inputMode = 'url';\n\t\tinputField.on( 'input', () => {\n\t\t\t// Display the tip text only when there is some value. Otherwise fall back to the default info text.\n\t\t\tlabeledInput.infoText = inputField.element!.value ? this._urlInputViewInfoTip! : this._urlInputViewInfoDefault!;\n\t\t\tthis.mediaURLInputValue = inputField.element!.value.trim();\n\t\t} );\n\n\t\treturn labeledInput;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedui\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { IconMedia } from '@ckeditor/ckeditor5-icons';\nimport { ButtonView, CssTransitionDisablerMixin, MenuBarMenuListItemButtonView, Dialog } from '@ckeditor/ckeditor5-ui';\n\nimport { MediaFormView } from './ui/mediaformview.js';\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport type { LocaleTranslate } from '@ckeditor/ckeditor5-utils';\nimport { type MediaRegistry } from './mediaregistry.js';\n\n/**\n * The media embed UI plugin.\n */\nexport class MediaEmbedUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing, Dialog ]> {\n\t\treturn [ MediaEmbedEditing, Dialog ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\tprivate _formView: MediaFormView | undefined;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.ui.componentFactory.add( 'mediaEmbed', () => {\n\t\t\tconst t = this.editor.locale.t;\n\t\t\tconst button = this._createDialogButton( ButtonView );\n\n\t\t\tbutton.tooltip = true;\n\t\t\tbutton.label = t( 'Insert media' );\n\n\t\t\treturn button;\n\t\t} );\n\n\t\teditor.ui.componentFactory.add( 'menuBar:mediaEmbed', () => {\n\t\t\tconst t = this.editor.locale.t;\n\t\t\tconst button = this._createDialogButton( MenuBarMenuListItemButtonView );\n\n\t\t\tbutton.label = t( 'Media' );\n\n\t\t\treturn button;\n\t\t} );\n\t}\n\n\t/**\n\t * Creates a button for menu bar that will show media embed dialog.\n\t */\n\tprivate _createDialogButton( ButtonClass: T ): InstanceType {\n\t\tconst editor = this.editor;\n\t\tconst buttonView = new ButtonClass( editor.locale ) as InstanceType;\n\t\tconst command = editor.commands.get( 'mediaEmbed' )!;\n\t\tconst dialogPlugin = this.editor.plugins.get( 'Dialog' );\n\n\t\tbuttonView.icon = IconMedia;\n\n\t\tbuttonView.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\n\t\tbuttonView.on( 'execute', () => {\n\t\t\tif ( dialogPlugin.id === 'mediaEmbed' ) {\n\t\t\t\tdialogPlugin.hide();\n\t\t\t} else {\n\t\t\t\tthis._showDialog();\n\t\t\t}\n\t\t} );\n\n\t\treturn buttonView;\n\t}\n\n\tprivate _showDialog() {\n\t\tconst editor = this.editor;\n\t\tconst dialog = editor.plugins.get( 'Dialog' );\n\t\tconst command = editor.commands.get( 'mediaEmbed' )!;\n\t\tconst t = editor.locale.t;\n\n\t\tconst isMediaSelected = command.value !== undefined;\n\n\t\tif ( !this._formView ) {\n\t\t\tconst registry = editor.plugins.get( MediaEmbedEditing ).registry;\n\n\t\t\tthis._formView = new ( CssTransitionDisablerMixin( MediaFormView ) )( getFormValidators( editor.t, registry ), editor.locale );\n\t\t\tthis._formView.on( 'submit', () => this._handleSubmitForm() );\n\t\t}\n\n\t\tdialog.show( {\n\t\t\tid: 'mediaEmbed',\n\t\t\ttitle: t( 'Media embed' ),\n\t\t\tcontent: this._formView,\n\t\t\tisModal: true,\n\t\t\tonShow: () => {\n\t\t\t\tthis._formView!.url = command.value || '';\n\t\t\t\tthis._formView!.resetFormStatus();\n\t\t\t\tthis._formView!.urlInputView.fieldView.select();\n\t\t\t},\n\t\t\tactionButtons: [\n\t\t\t\t{\n\t\t\t\t\tlabel: t( 'Cancel' ),\n\t\t\t\t\twithText: true,\n\t\t\t\t\tonExecute: () => dialog.hide()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: isMediaSelected ? t( 'Save' ) : t( 'Insert' ),\n\t\t\t\t\tclass: 'ck-button-action',\n\t\t\t\t\twithText: true,\n\t\t\t\t\tonExecute: () => this._handleSubmitForm()\n\t\t\t\t}\n\t\t\t]\n\t\t} );\n\t}\n\n\tprivate _handleSubmitForm() {\n\t\tconst editor = this.editor;\n\t\tconst dialog = editor.plugins.get( 'Dialog' );\n\n\t\tif ( this._formView!.isValid() ) {\n\t\t\teditor.execute( 'mediaEmbed', this._formView!.url );\n\t\t\tdialog.hide();\n\t\t\teditor.editing.view.focus();\n\t\t}\n\t}\n}\n\nfunction getFormValidators( t: LocaleTranslate, registry: MediaRegistry ): Array<( v: MediaFormView ) => string | undefined> {\n\treturn [\n\t\tform => {\n\t\t\tif ( !form.url.length ) {\n\t\t\t\treturn t( 'The URL must not be empty.' );\n\t\t\t}\n\t\t},\n\t\tform => {\n\t\t\tif ( !registry.hasMedia( form.url ) ) {\n\t\t\t\treturn t( 'This media URL is not supported.' );\n\t\t\t}\n\t\t}\n\t];\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembed\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { Widget } from '@ckeditor/ckeditor5-widget';\n\nimport { MediaEmbedEditing } from './mediaembedediting.js';\nimport { AutoMediaEmbed } from './automediaembed.js';\nimport { MediaEmbedUI } from './mediaembedui.js';\n\nimport '../theme/mediaembed.css';\n\n/**\n * The media embed plugin.\n *\n * For a detailed overview, check the {@glink features/media-embed/media-embed Media Embed feature documentation}.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * The {@link module:media-embed/mediaembedediting~MediaEmbedEditing media embed editing feature},\n * * The {@link module:media-embed/mediaembedui~MediaEmbedUI media embed UI feature} and\n * * The {@link module:media-embed/automediaembed~AutoMediaEmbed auto-media embed feature}.\n */\nexport class MediaEmbed extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget ]> {\n\t\treturn [ MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbed' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/constants\n */\n\nimport {\n\tIconObjectCenter,\n\tIconObjectInlineLeft,\n\tIconObjectInlineRight,\n\tIconObjectLeft,\n\tIconObjectRight\n} from '@ckeditor/ckeditor5-icons';\nimport type { MediaStyleDropdownDefinition, NormalizedMediaStyleOption } from '../mediaembedconfig.js';\n\n/**\n * Built-in style options provided by the plugin. Integrators can refer to these by\n * name in {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * to opt out, override individual fields, or coexist with custom styles.\n *\n * @internal\n */\nexport const DEFAULT_OPTIONS: Record = {\n\talignLeft: {\n\t\tname: 'alignLeft',\n\t\ttitle: 'Left aligned media',\n\t\ticon: IconObjectInlineLeft,\n\t\tclassName: 'media-style-align-left'\n\t},\n\talignBlockLeft: {\n\t\tname: 'alignBlockLeft',\n\t\ttitle: 'Left aligned media',\n\t\ticon: IconObjectLeft,\n\t\tclassName: 'media-style-block-align-left'\n\t},\n\talignCenter: {\n\t\tname: 'alignCenter',\n\t\ttitle: 'Centered media',\n\t\ticon: IconObjectCenter,\n\t\tisDefault: true\n\t},\n\talignBlockRight: {\n\t\tname: 'alignBlockRight',\n\t\ttitle: 'Right aligned media',\n\t\ticon: IconObjectRight,\n\t\tclassName: 'media-style-block-align-right'\n\t},\n\talignRight: {\n\t\tname: 'alignRight',\n\t\ttitle: 'Right aligned media',\n\t\ticon: IconObjectInlineRight,\n\t\tclassName: 'media-style-align-right'\n\t}\n};\n\n/**\n * Short icon-name aliases that can be used as the `icon` value in a media style\n * option definition. Matches the alias set exposed by the image styles feature so\n * the two APIs feel symmetrical.\n *\n * @internal\n */\nexport const DEFAULT_ICONS: Record = {\n\tinlineLeft: IconObjectInlineLeft,\n\tleft: IconObjectLeft,\n\tcenter: IconObjectCenter,\n\tright: IconObjectRight,\n\tinlineRight: IconObjectInlineRight\n};\n\n/**\n * Built-in dropdown groupings. Each entry references built-in style component names. If any\n * items are filtered out by configuration, the dropdown is rebuilt from the remaining names\n * (or skipped entirely if fewer than two remain).\n *\n * @internal\n */\nexport const DEFAULT_DROPDOWN_DEFINITIONS: Array = [\n\t{\n\t\tname: 'mediaEmbed:wrapText',\n\t\ttitle: 'Wrap text',\n\t\titems: [ 'mediaEmbed:alignLeft', 'mediaEmbed:alignRight' ],\n\t\tdefaultItem: 'mediaEmbed:alignLeft'\n\t},\n\t{\n\t\tname: 'mediaEmbed:breakText',\n\t\ttitle: 'Break text',\n\t\titems: [ 'mediaEmbed:alignBlockLeft', 'mediaEmbed:alignCenter', 'mediaEmbed:alignBlockRight' ],\n\t\tdefaultItem: 'mediaEmbed:alignCenter'\n\t}\n];\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/utils\n */\n\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\nimport type { ToolbarConfigItem } from '@ckeditor/ckeditor5-core';\nimport type {\n\tMediaStyleConfig,\n\tMediaStyleDropdownDefinition,\n\tMediaStyleOptionDefinition,\n\tNormalizedMediaStyleOption\n} from '../mediaembedconfig.js';\nimport { DEFAULT_ICONS, DEFAULT_OPTIONS } from './constants.js';\n\n/**\n * In-flight shape used inside the normalizer. After string-to-default resolution every entry\n * carries at least a `name`. The remaining required fields (`title`, `icon`, `className` unless\n * `isDefault`) are checked by {@link ~isValidOption} before the entry reaches the resolved list.\n */\ntype DraftStyle = Partial & { name: string };\n\n/**\n * Normalizes the {@link module:media-embed/mediaembedconfig~MediaStyleConfig#options style options}\n * provided by the integrator. Each entry is resolved into a full\n * {@link module:media-embed/mediaembedconfig~MediaStyleOptionDefinition} and invalid entries\n * are filtered out with a console warning.\n *\n * @internal\n */\nexport function normalizeStyles( configuredStyles: MediaStyleConfig ): Array {\n\tconst configured = configuredStyles.options || [];\n\n\treturn configured\n\t\t.map( entry => normalizeDefinition( entry ) )\n\t\t.filter( ( entry ): entry is NormalizedMediaStyleOption => isValidOption( entry ) );\n}\n\n/**\n * Resolves a single config entry into a style option definition. A string entry is first\n * promoted to its object form (`{ name }`) and then shallow-merged on top of the matching\n * built-in default — entries without a matching built-in pass through unchanged and are\n * rejected by {@link ~isValidOption} if they lack required fields.\n *\n * Also resolves icon-name aliases (`'left'`, `'inlineLeft'`, etc.) to the corresponding\n * SVG sources from {@link module:media-embed/mediaembedstyle/constants~DEFAULT_ICONS}.\n */\nfunction normalizeDefinition( entry: string | DraftStyle ): DraftStyle {\n\t// Spread of `undefined` is a no-op, so unknown-name overrides produce a clean passthrough.\n\tconst override: DraftStyle = typeof entry === 'string' ? { name: entry } : entry;\n\tconst definition: DraftStyle = { ...DEFAULT_OPTIONS[ override.name ], ...override };\n\n\tif ( typeof definition.icon === 'string' && DEFAULT_ICONS[ definition.icon ] ) {\n\t\tdefinition.icon = DEFAULT_ICONS[ definition.icon ];\n\t}\n\n\treturn definition;\n}\n\n/**\n * Validates a normalized style option. `name`, `title`, and `icon` are always required.\n * `className` is required unless the entry is the default style (defaults encode as\n * attribute-absence and intentionally have no class). Emits a console warning and returns\n * `false` when any of these checks fails.\n */\nfunction isValidOption( option: DraftStyle ): boolean {\n\tif ( !option.name || !option.title || !option.icon || ( !option.isDefault && !option.className ) ) {\n\t\twarnInvalidStyle( { style: option } );\n\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nfunction warnInvalidStyle( info: object ): void {\n\t/**\n\t * The media style configuration provided in the editor config is invalid. The warning is\n\t * emitted in two situations:\n\t *\n\t * * An entry in {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles.options`}\n\t * does not reference a built-in style by name (`'alignLeft'`, `'alignBlockLeft'`,\n\t * `'alignCenter'`, `'alignBlockRight'`, `'alignRight'`) and does not follow the\n\t * {@link module:media-embed/mediaembedconfig~MediaStyleOptionDefinition} shape —\n\t * `name`, `title`, `icon`, and (unless `isDefault: true`) `className` are required.\n\t * The offending entry is reported under the `style` parameter.\n\t * * A dropdown entry placed inline in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `config.mediaEmbed.toolbar`}\n\t * does not follow the {@link module:media-embed/mediaembedconfig~MediaStyleDropdownDefinition} shape\n\t * (`name` and every `items[]` entry must use the full `mediaEmbed:` prefix, `defaultItem` must\n\t * be one of the `items`, `title` must be a non-empty string), or its `items[]` reference styles\n\t * that are not in the resolved\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`} list.\n\t * The offending entry is reported under the `dropdown` parameter.\n\t *\n\t * @error media-style-configuration-definition-invalid\n\t */\n\tlogWarning( 'media-style-configuration-definition-invalid', info );\n}\n\n/**\n * Type guard for toolbar config entries shaped like a media style dropdown definition. The\n * discriminator is `defaultItem` — generic toolbar groupings use `items` + `label` and never\n * carry a `defaultItem` field.\n *\n * @internal\n */\nexport function isMediaStyleDropdown(\n\titem: ToolbarConfigItem | MediaStyleDropdownDefinition\n): item is MediaStyleDropdownDefinition {\n\treturn typeof item === 'object' && item !== null && typeof ( item as MediaStyleDropdownDefinition ).defaultItem === 'string';\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedtoolbar\n */\n\nimport { Plugin, type PluginDependenciesOf, type ToolbarConfigItem } from '@ckeditor/ckeditor5-core';\nimport type { ComponentFactory } from '@ckeditor/ckeditor5-ui';\nimport { WidgetToolbarRepository } from '@ckeditor/ckeditor5-widget';\n\nimport { getSelectedMediaViewWidget } from './utils.js';\nimport { isMediaStyleDropdown } from './mediaembedstyle/utils.js';\nimport type { MediaStyleDropdownDefinition } from './mediaembedconfig.js';\n\n/**\n * The media embed toolbar plugin. It creates a toolbar for media embed that shows up when the media element is selected.\n *\n * Instances of toolbar components (e.g. buttons) are created based on the\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `media.toolbar` configuration option}.\n */\nexport class MediaEmbedToolbar extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ WidgetToolbarRepository ]> {\n\t\treturn [ WidgetToolbarRepository ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedToolbar' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic afterInit(): void {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\tconst widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );\n\t\twidgetToolbarRepository.register( 'mediaEmbed', {\n\t\t\tariaLabel: t( 'Media toolbar' ),\n\t\t\titems: normalizeDeclarativeConfig(\n\t\t\t\teditor.ui.componentFactory,\n\t\t\t\teditor.config.get( 'mediaEmbed.toolbar' ) || []\n\t\t\t),\n\t\t\tgetRelatedElement: getSelectedMediaViewWidget\n\t\t} );\n\t}\n}\n\n/**\n * Flattens dropdown definitions to their factory names, dropping any `mediaEmbed:`-prefixed\n * name the style UI did not register — otherwise the toolbar crashes with `componentfactory-item-missing`.\n * Non-string entries (e.g. generic `{ label, items }` toolbar groupings) pass through unchanged.\n */\nfunction normalizeDeclarativeConfig(\n\tfactory: ComponentFactory,\n\tconfig: ReadonlyArray\n): Array {\n\treturn config\n\t\t.map( item => isMediaStyleDropdown( item ) ? item.name : item )\n\t\t.filter( item =>\n\t\t\ttypeof item !== 'string' || !item.startsWith( 'mediaEmbed:' ) || factory.has( item )\n\t\t);\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/resizemediaembedcommand\n */\n\nimport { Command } from '@ckeditor/ckeditor5-core';\nimport { getSelectedMediaModelWidget } from '../utils.js';\n\n/**\n * The resize media embed command.\n */\nexport class ResizeMediaEmbedCommand extends Command {\n\t/**\n\t * The current width of the selected media embed, or `null` if not resized.\n\t */\n\tdeclare public value: string | null;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override refresh(): void {\n\t\tconst element = getSelectedMediaModelWidget( this.editor.model.document.selection );\n\n\t\tthis.isEnabled = !!element;\n\n\t\tif ( !element || !element.hasAttribute( 'resizedWidth' ) ) {\n\t\t\tthis.value = null;\n\t\t} else {\n\t\t\tthis.value = element.getAttribute( 'resizedWidth' ) as string;\n\t\t}\n\t}\n\n\t/**\n\t * Executes the command.\n\t *\n\t * ```ts\n\t * // Sets the width as a percentage of the parent width:\n\t * editor.execute( 'resizeMediaEmbed', { width: '50%' } );\n\t *\n\t * // Removes the resize and restores the default width:\n\t * editor.execute( 'resizeMediaEmbed', { width: null } );\n\t * ```\n\t *\n\t * @param options\n\t * @param options.width The new width of the media embed as a CSS `width` value\n\t * (e.g. `'50%'`), or `null` to remove the resize.\n\t * @fires execute\n\t */\n\tpublic override execute( options: { width: string | null } ): void {\n\t\tconst model = this.editor.model;\n\t\tconst mediaElement = getSelectedMediaModelWidget( model.document.selection );\n\n\t\tif ( mediaElement ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.setAttribute( 'resizedWidth', options.width, mediaElement );\n\t\t\t} );\n\t\t}\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/constants\n */\n\n/**\n * The view class applied to a resized media embed figure.\n *\n * Shared between the editing plugin (which toggles it via downcast of `resizedWidth` and consumes\n * it on upcast) and the handles plugin (which adds it during drag and strips it on commit), so\n * both layers agree on the exact class name.\n *\n * @internal\n */\nexport const RESIZED_MEDIA_CLASS = 'media_resized';\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizeediting\n */\n\nimport type { ViewElement } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedEditing } from '../mediaembedediting.js';\nimport { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport { RESIZED_MEDIA_CLASS } from './constants.js';\n\n/**\n * The media embed resize editing feature.\n *\n * It adds the ability to resize each media embed using handles.\n */\nexport class MediaEmbedResizeEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing ]> {\n\t\treturn [ MediaEmbedEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeEditing' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t * @internal\n\t */\n\tpublic static get licenseFeatureCode(): string {\n\t\treturn 'MER';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isPremiumPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\teditor.config.define( 'mediaEmbed', {\n\t\t\tresizeUnit: '%',\n\t\t\tresizeOptions: [\n\t\t\t\t{ name: 'resizeMediaEmbed:original', value: null, icon: 'original' },\n\t\t\t\t{ name: 'resizeMediaEmbed:custom', value: 'custom', icon: 'custom' },\n\t\t\t\t{ name: 'resizeMediaEmbed:25', value: '25', icon: 'small' },\n\t\t\t\t{ name: 'resizeMediaEmbed:50', value: '50', icon: 'medium' },\n\t\t\t\t{ name: 'resizeMediaEmbed:75', value: '75', icon: 'large' }\n\t\t\t]\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\n\t\teditor.commands.add( 'resizeMediaEmbed', new ResizeMediaEmbedCommand( editor ) );\n\n\t\tthis._registerConverters();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic afterInit(): void {\n\t\tthis._registerSchema();\n\t}\n\n\tprivate _registerSchema(): void {\n\t\tconst schema = this.editor.model.schema;\n\n\t\tschema.extend( 'media', { allowAttributes: [ 'resizedWidth' ] } );\n\t\tschema.setAttributeProperties( 'resizedWidth', { isFormatting: true } );\n\t}\n\n\t/**\n\t * Registers media embed resize converters.\n\t */\n\tprivate _registerConverters(): void {\n\t\tconst editor = this.editor;\n\n\t\t// Downcast (model → view): resizedWidth → style.width + class on
    .\n\t\teditor.conversion.for( 'downcast' ).add( dispatcher =>\n\t\t\tdispatcher.on( 'attribute:resizedWidth:media', ( evt, data, conversionApi ) => {\n\t\t\t\tif ( !conversionApi.consumable.consume( data.item, evt.name ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst viewWriter = conversionApi.writer;\n\t\t\t\tconst figure = conversionApi.mapper.toViewElement( data.item );\n\n\t\t\t\tif ( data.attributeNewValue !== null ) {\n\t\t\t\t\tviewWriter.setStyle( 'width', data.attributeNewValue, figure );\n\t\t\t\t\tviewWriter.addClass( RESIZED_MEDIA_CLASS, figure );\n\t\t\t\t} else {\n\t\t\t\t\tviewWriter.removeStyle( 'width', figure );\n\t\t\t\t\tviewWriter.removeClass( RESIZED_MEDIA_CLASS, figure );\n\t\t\t\t}\n\t\t\t} )\n\t\t);\n\n\t\t// Upcast: style.width on
    → resizedWidth.\n\t\t//\n\t\t// The `hasClass` guard lives in the value callback (not the matcher) because the `media`\n\t\t// class is already consumed upstream by MediaEmbedEditing. Without the guard, any figure\n\t\t// with a width style would match and could race image resize's upcast on image figures.\n\t\teditor.conversion.for( 'upcast' )\n\t\t\t.attributeToAttribute( {\n\t\t\t\tview: {\n\t\t\t\t\tname: 'figure',\n\t\t\t\t\tstyles: {\n\t\t\t\t\t\twidth: /.+/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmodel: {\n\t\t\t\t\tkey: 'resizedWidth',\n\t\t\t\t\tvalue: ( viewElement: ViewElement ) => {\n\t\t\t\t\t\tif ( !viewElement.hasClass( 'media' ) ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn viewElement.getStyle( 'width' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// Consume the media_resized class during upcast so it does not cause conversion issues.\n\t\teditor.conversion.for( 'upcast' ).add( dispatcher => {\n\t\t\tdispatcher.on( 'element:figure', ( evt, data, conversionApi ) => {\n\t\t\t\tconversionApi.consumable.consume( data.viewItem, { classes: [ RESIZED_MEDIA_CLASS ] } );\n\t\t\t} );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizehandles\n */\n\nimport type { ModelElement, ViewContainerElement } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { WidgetResize } from '@ckeditor/ckeditor5-widget';\nimport type { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport { RESIZED_MEDIA_CLASS } from './constants.js';\n\n/**\n * The media embed resize by handles feature.\n *\n * It adds the ability to resize each media embed using handles.\n */\nexport class MediaEmbedResizeHandles extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ WidgetResize ]> {\n\t\treturn [ WidgetResize ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeHandles' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst command: ResizeMediaEmbedCommand = this.editor.commands.get( 'resizeMediaEmbed' )!;\n\t\tthis.bind( 'isEnabled' ).to( command );\n\n\t\tthis._setupResizerCreator();\n\t}\n\n\t/**\n\t * Attaches a resizer to every newly inserted media widget. Walks only the ranges\n\t * reported by the differ — never the whole document — so unrelated inserts (e.g.\n\t * pressing Enter to create a paragraph) cost only the differ check.\n\t *\n\t * Each resizer's `isEnabled` is bound to the plugin in {@link #_attachResizer},\n\t * so it auto-tracks the resize command's state.\n\t */\n\tprivate _setupResizerCreator(): void {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst widgetResize = editor.plugins.get( WidgetResize );\n\n\t\t// Low priority ensures downcast has run before we look up view elements.\n\t\tthis.listenTo( model.document, 'change:data', () => {\n\t\t\tfor ( const change of model.document.differ.getChanges() ) {\n\t\t\t\tif ( change.type !== 'insert' || change.name === '$text' ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst insertedRange = model.createRange(\n\t\t\t\t\tchange.position,\n\t\t\t\t\tchange.position.getShiftedBy( change.length )\n\t\t\t\t);\n\n\t\t\t\tfor ( const item of insertedRange.getItems() ) {\n\t\t\t\t\tif ( !item.is( 'element', 'media' ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst viewElement = editor.editing.mapper.toViewElement( item ) as ViewContainerElement | undefined;\n\n\t\t\t\t\t/* v8 ignore next -- @preserve */\n\t\t\t\t\tif ( !viewElement ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* v8 ignore else -- @preserve */\n\t\t\t\t\tif ( !widgetResize.getResizerByViewElement( viewElement ) ) {\n\t\t\t\t\t\tthis._attachResizer( item, viewElement );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, { priority: 'low' } );\n\t}\n\n\t/**\n\t * Attaches a resizer to a single media widget.\n\t */\n\tprivate _attachResizer( modelElement: ModelElement, widgetView: ViewContainerElement ) {\n\t\tconst editor = this.editor;\n\t\tconst editingView = editor.editing.view;\n\n\t\tconst resizer = editor.plugins.get( WidgetResize ).attachTo( {\n\t\t\tunit: editor.config.get( 'mediaEmbed.resizeUnit' )!,\n\t\t\tmodelElement,\n\t\t\tviewElement: widgetView,\n\t\t\teditor,\n\n\t\t\tgetHandleHost: domWidgetElement => domWidgetElement.querySelector( '.ck-media__wrapper' )!,\n\t\t\tgetResizeHost: domWidgetElement => domWidgetElement,\n\n\t\t\tonCommit: newValue => {\n\t\t\t\teditingView.change( writer => writer.removeClass( RESIZED_MEDIA_CLASS, widgetView ) );\n\t\t\t\teditor.execute( 'resizeMediaEmbed', { width: newValue } );\n\t\t\t}\n\t\t} );\n\n\t\tresizer.bind( 'isEnabled' ).to( this );\n\n\t\tresizer.on( 'updateSize', () => {\n\t\t\tif ( !widgetView.hasClass( RESIZED_MEDIA_CLASS ) ) {\n\t\t\t\teditingView.change( writer => writer.addClass( RESIZED_MEDIA_CLASS, widgetView ) );\n\t\t\t}\n\t\t} );\n\n\t\t// Redraw once the view has flushed to DOM — otherwise the freshly inserted resizer\n\t\t// UIElement has no inline styles and handles cluster at the top-left corner (visible\n\t\t// after drag-and-drop until another event eventually triggers a redraw).\n\t\teditingView.once( 'render', () => resizer.redraw() );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedresizebuttons\n */\n\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport {\n\tButtonView,\n\tDropdownButtonView,\n\tUIModel,\n\tcreateDropdown,\n\taddListToDropdown,\n\ttype ListDropdownItemDefinition\n} from '@ckeditor/ckeditor5-ui';\nimport { CKEditorError, Collection, type Locale } from '@ckeditor/ckeditor5-utils';\nimport {\n\tIconObjectSizeCustom,\n\tIconObjectSizeFull,\n\tIconObjectSizeLarge,\n\tIconObjectSizeMedium,\n\tIconObjectSizeSmall\n} from '@ckeditor/ckeditor5-icons';\n\nimport { MediaEmbedResizeEditing } from './mediaembedresizeediting.js';\nimport type { ResizeMediaEmbedCommand } from './resizemediaembedcommand.js';\nimport type { MediaEmbedResizeOption } from '../mediaembedconfig.js';\n\nconst RESIZE_ICONS = /* #__PURE__ */ ( () => ( {\n\tsmall: IconObjectSizeSmall,\n\tmedium: IconObjectSizeMedium,\n\tlarge: IconObjectSizeLarge,\n\tcustom: IconObjectSizeCustom,\n\toriginal: IconObjectSizeFull\n} ) )();\n\n/**\n * The media embed resize buttons plugin.\n *\n * It adds a possibility to resize media embeds using the toolbar dropdown or individual buttons,\n * depending on the plugin configuration.\n */\nexport class MediaEmbedResizeButtons extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedResizeEditing ]> {\n\t\treturn [ MediaEmbedResizeEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResizeButtons' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\tprivate readonly _resizeUnit: 'px' | '%';\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor: Editor ) {\n\t\tsuper( editor );\n\n\t\tthis._resizeUnit = editor.config.get( 'mediaEmbed.resizeUnit' )!;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst options = editor.config.get( 'mediaEmbed.resizeOptions' )!;\n\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\n\t\tthis.bind( 'isEnabled' ).to( command );\n\n\t\tfor ( const option of options ) {\n\t\t\tthis._registerMediaEmbedResizeButton( option );\n\t\t}\n\n\t\tthis._registerMediaEmbedResizeDropdown( options );\n\t}\n\n\t/**\n\t * Creates a standalone button component for the given resize option.\n\t */\n\tprivate _registerMediaEmbedResizeButton( option: MediaEmbedResizeOption ): void {\n\t\tconst editor = this.editor;\n\t\tconst { name, value, icon } = option;\n\n\t\teditor.ui.componentFactory.add( name, locale => {\n\t\t\tconst button = new ButtonView( locale );\n\t\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\t\t\tconst labelText = this._getOptionLabelValue( option, true );\n\n\t\t\tif ( !RESIZE_ICONS[ icon as keyof typeof RESIZE_ICONS ] ) {\n\t\t\t\t/**\n\t\t\t\t * When configuring {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#resizeOptions\n\t\t\t\t * `config.mediaEmbed.resizeOptions`} for standalone buttons, a valid `icon` token must be set for each option.\n\t\t\t\t *\n\t\t\t\t * See all valid options described in the\n\t\t\t\t * {@link module:media-embed/mediaembedconfig~MediaEmbedResizeOption plugin configuration}.\n\t\t\t\t *\n\t\t\t\t * @error mediaembedresizebuttons-missing-icon\n\t\t\t\t * @param {module:media-embed/mediaembedconfig~MediaEmbedResizeOption} option Invalid media embed resize option.\n\t\t\t\t */\n\t\t\t\tthrow new CKEditorError(\n\t\t\t\t\t'mediaembedresizebuttons-missing-icon',\n\t\t\t\t\teditor,\n\t\t\t\t\toption\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbutton.set( {\n\t\t\t\tlabel: labelText,\n\t\t\t\ticon: RESIZE_ICONS[ icon as keyof typeof RESIZE_ICONS ],\n\t\t\t\ttooltip: labelText,\n\t\t\t\tisToggleable: true\n\t\t\t} );\n\n\t\t\tbutton.bind( 'isEnabled' ).to( this );\n\n\t\t\tif ( editor.plugins.has( 'MediaEmbedCustomResizeUI' ) && isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\tconst customResizeUI = editor.plugins.get( 'MediaEmbedCustomResizeUI' );\n\n\t\t\t\tthis.listenTo( button, 'execute', () => {\n\t\t\t\t\tcustomResizeUI._showForm( this._resizeUnit );\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tconst optionValueWithUnit = value ? value + this._resizeUnit : null;\n\n\t\t\t\tbutton.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnButtonCallback( optionValueWithUnit )\n\t\t\t\t);\n\n\t\t\t\tthis.listenTo( button, 'execute', () => {\n\t\t\t\t\teditor.execute( 'resizeMediaEmbed', { width: optionValueWithUnit } );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn button;\n\t\t} );\n\t}\n\n\t/**\n\t * Creates the dropdown component containing all resize options.\n\t */\n\tprivate _registerMediaEmbedResizeDropdown( options: Array ): void {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\t\tconst originalSizeOption = options.find( option => !option.value )!;\n\n\t\tconst componentCreator = ( locale: Locale ) => {\n\t\t\tconst command: ResizeMediaEmbedCommand = editor.commands.get( 'resizeMediaEmbed' )!;\n\t\t\tconst dropdownView = createDropdown( locale, DropdownButtonView );\n\t\t\tconst dropdownButton: typeof dropdownView.buttonView & { commandValue?: string | null } = dropdownView.buttonView;\n\t\t\tconst accessibleLabel = t( 'Resize media' );\n\n\t\t\tdropdownButton.set( {\n\t\t\t\ttooltip: accessibleLabel,\n\t\t\t\tcommandValue: originalSizeOption ? originalSizeOption.value : null,\n\t\t\t\ticon: RESIZE_ICONS.medium,\n\t\t\t\tisToggleable: true,\n\t\t\t\tlabel: originalSizeOption ? this._getOptionLabelValue( originalSizeOption ) : '',\n\t\t\t\twithText: true,\n\t\t\t\tclass: 'ck-resize-media-embed-button',\n\t\t\t\tariaLabel: accessibleLabel,\n\t\t\t\tariaLabelledBy: undefined\n\t\t\t} );\n\n\t\t\tdropdownButton.bind( 'label' ).to( command, 'value', commandValue => {\n\t\t\t\tif ( commandValue ) {\n\t\t\t\t\treturn commandValue;\n\t\t\t\t}\n\n\t\t\t\treturn originalSizeOption ? this._getOptionLabelValue( originalSizeOption ) : '';\n\t\t\t} );\n\t\t\tdropdownView.bind( 'isEnabled' ).to( this );\n\n\t\t\taddListToDropdown( dropdownView, () => this._getResizeDropdownListItemDefinitions( options, command ), {\n\t\t\t\tariaLabel: t( 'Media resize list' ),\n\t\t\t\trole: 'menu'\n\t\t\t} );\n\n\t\t\tthis.listenTo( dropdownView, 'execute', evt => {\n\t\t\t\tif ( 'onClick' in evt.source ) {\n\t\t\t\t\t( evt.source as any ).onClick();\n\t\t\t\t} else {\n\t\t\t\t\teditor.execute( ( evt.source as any ).commandName, { width: ( evt.source as any ).commandValue } );\n\t\t\t\t\teditor.editing.view.focus();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn dropdownView;\n\t\t};\n\n\t\teditor.ui.componentFactory.add( 'resizeMediaEmbed', componentCreator );\n\t}\n\n\t/**\n\t * Returns a label for the given resize option.\n\t */\n\tprivate _getOptionLabelValue( option: MediaEmbedResizeOption, forTooltip: boolean = false ): string {\n\t\tconst t = this.editor.t;\n\n\t\tif ( option.label ) {\n\t\t\treturn option.label;\n\t\t}\n\n\t\tconst isCustom = isCustomMediaEmbedResizeOption( option );\n\n\t\tif ( forTooltip ) {\n\t\t\tif ( isCustom ) {\n\t\t\t\treturn t( 'Custom media size' );\n\t\t\t}\n\n\t\t\treturn option.value ?\n\t\t\t\tt( 'Resize media to %0', option.value + this._resizeUnit ) :\n\t\t\t\tt( 'Resize media to the original size' );\n\t\t}\n\n\t\tif ( isCustom ) {\n\t\t\treturn t( 'Custom' );\n\t\t}\n\n\t\treturn option.value ?\n\t\t\toption.value + this._resizeUnit :\n\t\t\tt( 'Original' );\n\t}\n\n\t/**\n\t * Returns list item definitions for the resize dropdown.\n\t */\n\tprivate _getResizeDropdownListItemDefinitions(\n\t\toptions: Array,\n\t\tcommand: ResizeMediaEmbedCommand\n\t): Collection {\n\t\tconst { editor } = this;\n\t\tconst itemDefinitions = new Collection();\n\n\t\tconst optionsWithSerializedValues = options.map( option => {\n\t\t\tif ( isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\treturn {\n\t\t\t\t\t...option,\n\t\t\t\t\tvalueWithUnits: 'custom'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif ( !option.value ) {\n\t\t\t\treturn {\n\t\t\t\t\t...option,\n\t\t\t\t\tvalueWithUnits: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...option,\n\t\t\t\tvalueWithUnits: `${ option.value }${ this._resizeUnit }`\n\t\t\t};\n\t\t} );\n\n\t\tfor ( const option of optionsWithSerializedValues ) {\n\t\t\tlet definition: ListDropdownItemDefinition | null = null;\n\n\t\t\tif ( editor.plugins.has( 'MediaEmbedCustomResizeUI' ) && isCustomMediaEmbedResizeOption( option ) ) {\n\t\t\t\tconst customResizeUI = editor.plugins.get( 'MediaEmbedCustomResizeUI' );\n\n\t\t\t\tdefinition = {\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tmodel: new UIModel( {\n\t\t\t\t\t\tlabel: this._getOptionLabelValue( option ),\n\t\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t\t\twithText: true,\n\t\t\t\t\t\ticon: null,\n\t\t\t\t\t\tonClick: () => {\n\t\t\t\t\t\t\tcustomResizeUI._showForm( this._resizeUnit );\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t};\n\n\t\t\t\tconst allDropdownValues = Object.values( optionsWithSerializedValues ).map( option => option.valueWithUnits );\n\n\t\t\t\tdefinition.model.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnCustomButtonCallback( allDropdownValues )\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tdefinition = {\n\t\t\t\t\ttype: 'button',\n\t\t\t\t\tmodel: new UIModel( {\n\t\t\t\t\t\tcommandName: 'resizeMediaEmbed',\n\t\t\t\t\t\tcommandValue: option.valueWithUnits,\n\t\t\t\t\t\tlabel: this._getOptionLabelValue( option ),\n\t\t\t\t\t\trole: 'menuitemradio',\n\t\t\t\t\t\twithText: true,\n\t\t\t\t\t\ticon: null\n\t\t\t\t\t} )\n\t\t\t\t};\n\n\t\t\t\tdefinition.model.bind( 'isOn' ).to(\n\t\t\t\t\tcommand, 'value',\n\t\t\t\t\tcommand, 'isEnabled',\n\t\t\t\t\tgetIsOnButtonCallback( option.valueWithUnits )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tdefinition.model.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\t\t\titemDefinitions.add( definition );\n\t\t}\n\n\t\treturn itemDefinitions;\n\t}\n}\n\nfunction isCustomMediaEmbedResizeOption( option: MediaEmbedResizeOption ) {\n\treturn option.value === 'custom';\n}\n\nfunction getIsOnButtonCallback( value: string | null ) {\n\treturn ( commandValue: ResizeMediaEmbedCommand['value'], isEnabled: boolean ): boolean => {\n\t\tif ( commandValue === undefined || !isEnabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn commandValue === value;\n\t};\n}\n\nfunction getIsOnCustomButtonCallback( allDropdownValues: Array ) {\n\treturn ( commandValue: ResizeMediaEmbedCommand['value'], isEnabled: boolean ): boolean => !allDropdownValues.some(\n\t\tdropdownValue => getIsOnButtonCallback( dropdownValue )( commandValue, isEnabled )\n\t);\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembededitornodes\n */\n\nimport type { ViewElement, ModelElement } from '@ckeditor/ckeditor5-engine';\nimport type { Editor } from '@ckeditor/ckeditor5-core';\n\nimport { getSelectedMediaModelWidget } from '../../utils.js';\n\n/**\n * Finds model, view and DOM element for selected media embed element.\n * Returns `null` if there is no media embed selected.\n *\n * @param editor Editor instance.\n * @internal\n */\nexport function getSelectedMediaEmbedEditorNodes( editor: Editor ): MediaEmbedEditorNodes | null {\n\tconst { editing } = editor;\n\n\tconst mediaModelElement = getSelectedMediaModelWidget( editor.model.document.selection );\n\n\tif ( !mediaModelElement ) {\n\t\treturn null;\n\t}\n\n\tconst mediaViewElement = editing.mapper.toViewElement( mediaModelElement )!;\n\tconst mediaDOMElement = editing.view.domConverter.mapViewToDom( mediaViewElement )!;\n\n\treturn {\n\t\tmodel: mediaModelElement,\n\t\tview: mediaViewElement,\n\t\tdom: mediaDOMElement\n\t};\n}\n\ntype MediaEmbedEditorNodes = {\n\tmodel: ModelElement;\n\tview: ViewElement;\n\tdom: HTMLElement;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembedwidthinunits\n */\n\nimport { Rect, _tryCastDimensionsToUnit, _tryParseDimensionWithUnit, type _DimensionWithUnit } from '@ckeditor/ckeditor5-utils';\nimport { calculateResizeHostAncestorWidth } from '@ckeditor/ckeditor5-widget';\nimport type { Editor } from '@ckeditor/ckeditor5-core';\n\nimport { getSelectedMediaEmbedEditorNodes } from './getselectedmediaembededitornodes.js';\n\n/**\n * Returns media embed width in specified units after resize.\n *\n * \t* If no media embed is selected or command is disabled, `null` will be returned.\n *\t* If `targetUnit` percentage is passed then it will return width percentage relative to its ancestor.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Parsed media embed width after resize (with unit).\n * @internal\n */\nexport function getSelectedMediaEmbedWidthInUnits( editor: Editor, targetUnit: string ): _DimensionWithUnit | null {\n\tconst mediaNodes = getSelectedMediaEmbedEditorNodes( editor );\n\n\tif ( !mediaNodes ) {\n\t\treturn null;\n\t}\n\n\tconst parsedResizedWidth = _tryParseDimensionWithUnit(\n\t\tmediaNodes.model.getAttribute( 'resizedWidth' ) as string || null\n\t);\n\n\tif ( !parsedResizedWidth ) {\n\t\treturn null;\n\t}\n\n\tif ( parsedResizedWidth.unit === targetUnit ) {\n\t\treturn parsedResizedWidth;\n\t}\n\n\tconst mediaParentWidthPx = calculateResizeHostAncestorWidth( mediaNodes.dom );\n\tconst mediaHolderDimension = {\n\t\tunit: 'px',\n\t\tvalue: new Rect( mediaNodes.dom ).width\n\t};\n\n\treturn _tryCastDimensionsToUnit( mediaParentWidthPx, mediaHolderDimension, targetUnit );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/utils/getselectedmediaembedpossibleresizerange\n */\n\nimport type { Editor } from '@ckeditor/ckeditor5-core';\nimport { calculateResizeHostAncestorWidth } from '@ckeditor/ckeditor5-widget';\nimport { _tryCastDimensionsToUnit, _tryParseDimensionWithUnit } from '@ckeditor/ckeditor5-utils';\n\nimport { getSelectedMediaEmbedEditorNodes } from './getselectedmediaembededitornodes.js';\n\n/**\n * Returns the min and max resize values for the selected media embed in the specified unit.\n *\n * @param editor Editor instance.\n * @param targetUnit Unit in which dimension will be returned.\n * @returns Possible resize range in numeric form.\n * @internal\n */\nexport function getSelectedMediaEmbedPossibleResizeRange( editor: Editor, targetUnit: string ): PossibleResizeMediaEmbedRange | null {\n\tconst mediaNodes = getSelectedMediaEmbedEditorNodes( editor );\n\n\tif ( !mediaNodes ) {\n\t\treturn null;\n\t}\n\n\tconst mediaParentWidthPx = calculateResizeHostAncestorWidth( mediaNodes.dom );\n\tconst minimumMediaWidth = _tryParseDimensionWithUnit( window.getComputedStyle( mediaNodes.dom ).minWidth ) || {\n\t\tvalue: 1,\n\t\tunit: 'px'\n\t};\n\n\tconst lower = Math.max( 0.1, _tryCastDimensionsToUnit( mediaParentWidthPx, minimumMediaWidth, targetUnit ).value );\n\tconst upper = targetUnit === 'px' ? mediaParentWidthPx : 100;\n\n\treturn {\n\t\tunit: targetUnit,\n\t\tlower,\n\t\tupper\n\t};\n}\n\n/**\n * @internal\n */\nexport type PossibleResizeMediaEmbedRange = {\n\tunit: string;\n\tlower: number;\n\tupper: number;\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/ui/mediaembedcustomresizeformview\n */\n\nimport {\n\tButtonView,\n\tFocusCycler,\n\tFormHeaderView,\n\tFormRowView,\n\tLabeledFieldView,\n\tView,\n\tViewCollection,\n\tcreateLabeledInputNumber,\n\tsubmitHandler,\n\ttype FocusableView,\n\ttype InputNumberView\n} from '@ckeditor/ckeditor5-ui';\n\nimport { FocusTracker, KeystrokeHandler, type Locale } from '@ckeditor/ckeditor5-utils';\nimport { IconPreviousArrow } from '@ckeditor/ckeditor5-icons';\n\nimport '../../../theme/mediaembedcustomresizeform.css';\n\n/**\n * The MediaEmbedCustomResizeFormView class.\n *\n * @internal\n */\nexport class MediaEmbedCustomResizeFormView extends View {\n\t/**\n\t * Tracks information about the DOM focus in the form.\n\t */\n\tpublic readonly focusTracker: FocusTracker;\n\n\t/**\n\t * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n\t */\n\tpublic readonly keystrokes: KeystrokeHandler;\n\n\t/**\n\t * Resize unit shortcut.\n\t */\n\tpublic readonly unit: string;\n\n\t/**\n\t * The Back button view displayed in the header.\n\t */\n\tpublic backButtonView: ButtonView;\n\n\t/**\n\t * A button used to submit the form.\n\t */\n\tpublic saveButtonView: ButtonView;\n\n\t/**\n\t * An input with a label.\n\t */\n\tpublic labeledInput: LabeledFieldView;\n\n\t/**\n\t * A collection of child views.\n\t */\n\tpublic readonly children: ViewCollection;\n\n\t/**\n\t * A collection of views which can be focused in the form.\n\t */\n\tprotected readonly _focusables: ViewCollection;\n\n\t/**\n\t * Helps cycling over {@link #_focusables} in the form.\n\t */\n\tprotected readonly _focusCycler: FocusCycler;\n\n\t/**\n\t * An array of form validators used by {@link #isValid}.\n\t */\n\tprivate readonly _validators: Array;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( locale: Locale, unit: string, validators: Array ) {\n\t\tsuper( locale );\n\n\t\tthis.focusTracker = new FocusTracker();\n\t\tthis.keystrokes = new KeystrokeHandler();\n\t\tthis.unit = unit;\n\n\t\tthis.backButtonView = this._createBackButton();\n\t\tthis.saveButtonView = this._createSaveButton();\n\t\tthis.labeledInput = this._createLabeledInputView();\n\n\t\tthis.children = this.createCollection( [ this._createHeaderView() ] );\n\t\tthis.children.add( new FormRowView( locale, {\n\t\t\tchildren: [\n\t\t\t\tthis.labeledInput,\n\t\t\t\tthis.saveButtonView\n\t\t\t],\n\t\t\tclass: [\n\t\t\t\t'ck-form__row_with-submit',\n\t\t\t\t'ck-form__row_large-top-padding'\n\t\t\t]\n\t\t} ) );\n\n\t\tthis._focusables = new ViewCollection();\n\t\tthis._validators = validators;\n\n\t\tthis.keystrokes.set( 'Esc', ( data, cancel ) => {\n\t\t\tthis.fire( 'cancel' );\n\t\t\tcancel();\n\t\t} );\n\n\t\tthis._focusCycler = new FocusCycler( {\n\t\t\tfocusables: this._focusables,\n\t\t\tfocusTracker: this.focusTracker,\n\t\t\tkeystrokeHandler: this.keystrokes,\n\t\t\tactions: {\n\t\t\t\tfocusPrevious: 'shift + tab',\n\t\t\t\tfocusNext: 'tab'\n\t\t\t}\n\t\t} );\n\n\t\tthis.setTemplate( {\n\t\t\ttag: 'form',\n\n\t\t\tattributes: {\n\t\t\t\tclass: [\n\t\t\t\t\t'ck',\n\t\t\t\t\t'ck-form',\n\t\t\t\t\t'ck-media-embed-custom-resize-form',\n\t\t\t\t\t'ck-responsive-form'\n\t\t\t\t],\n\n\t\t\t\t// https://github.com/ckeditor/ckeditor5-image/issues/40\n\t\t\t\ttabindex: '-1'\n\t\t\t},\n\n\t\t\tchildren: this.children\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override render(): void {\n\t\tsuper.render();\n\n\t\tsubmitHandler( {\n\t\t\tview: this\n\t\t} );\n\n\t\tconst childViews = [\n\t\t\tthis.backButtonView,\n\t\t\tthis.labeledInput,\n\t\t\tthis.saveButtonView\n\t\t];\n\n\t\tchildViews.forEach( v => {\n\t\t\tthis._focusables.add( v );\n\t\t\tthis.focusTracker.add( v.element! );\n\t\t} );\n\n\t\tthis.keystrokes.listenTo( this.element! );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tthis.focusTracker.destroy();\n\t\tthis.keystrokes.destroy();\n\t}\n\n\tprivate _createBackButton(): ButtonView {\n\t\tconst t = this.locale!.t;\n\t\tconst backButton = new ButtonView( this.locale );\n\n\t\tbackButton.set( {\n\t\t\tclass: 'ck-button-back',\n\t\t\tlabel: t( 'Back' ),\n\t\t\ticon: IconPreviousArrow,\n\t\t\ttooltip: true\n\t\t} );\n\n\t\tbackButton.delegate( 'execute' ).to( this, 'cancel' );\n\n\t\treturn backButton;\n\t}\n\n\tprivate _createSaveButton(): ButtonView {\n\t\tconst t = this.locale!.t;\n\t\tconst saveButton = new ButtonView( this.locale );\n\n\t\tsaveButton.set( {\n\t\t\tlabel: t( 'Save' ),\n\t\t\twithText: true,\n\t\t\ttype: 'submit',\n\t\t\tclass: 'ck-button-action ck-button-bold'\n\t\t} );\n\n\t\treturn saveButton;\n\t}\n\n\tprivate _createHeaderView(): FormHeaderView {\n\t\tconst t = this.locale!.t;\n\n\t\tconst header = new FormHeaderView( this.locale, {\n\t\t\tlabel: t( 'Media Resize' )\n\t\t} );\n\n\t\theader.children.add( this.backButtonView, 0 );\n\n\t\treturn header;\n\t}\n\n\tprivate _createLabeledInputView(): LabeledFieldView {\n\t\tconst t = this.locale!.t;\n\t\tconst labeledInput = new LabeledFieldView( this.locale, createLabeledInputNumber );\n\n\t\tlabeledInput.label = t( 'Resize media (in %0)', this.unit );\n\t\tlabeledInput.class = 'ck-labeled-field-view_full-width';\n\t\tlabeledInput.fieldView.set( {\n\t\t\tmin: 0.1,\n\t\t\tstep: 0.1\n\t\t} );\n\n\t\treturn labeledInput;\n\t}\n\n\t/**\n\t * Validates the form and returns `false` when some fields are invalid.\n\t */\n\tpublic isValid(): boolean {\n\t\tthis.resetFormStatus();\n\n\t\tfor ( const validator of this._validators ) {\n\t\t\tconst errorText = validator( this );\n\n\t\t\tif ( errorText ) {\n\t\t\t\tthis.labeledInput.errorText = errorText;\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Cleans up error and information text of {@link #labeledInput}.\n\t */\n\tpublic resetFormStatus(): void {\n\t\tthis.labeledInput.errorText = null;\n\t}\n\n\t/**\n\t * The native DOM `value` of the input element of {@link #labeledInput}.\n\t */\n\tpublic get rawSize(): string | null {\n\t\tconst { element } = this.labeledInput.fieldView;\n\n\t\tif ( !element ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn element.value;\n\t}\n\n\t/**\n\t * Get numeric value of size. Returns `null` if value is not a number.\n\t */\n\tpublic get parsedSize(): number | null {\n\t\tconst { rawSize } = this;\n\n\t\tif ( rawSize === null ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parsed = Number.parseFloat( rawSize );\n\n\t\tif ( Number.isNaN( parsed ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn parsed;\n\t}\n\n\t/**\n\t * Returns serialized media embed input size with unit.\n\t * Returns `null` if value is not a number.\n\t */\n\tpublic get sizeWithUnits(): string | null {\n\t\tconst { parsedSize, unit } = this;\n\n\t\tif ( parsedSize === null ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn `${ parsedSize }${ unit }`;\n\t}\n}\n\n/**\n * Callback used by {@link ~MediaEmbedCustomResizeFormView} to check if passed form value is valid.\n *\n * @internal\n */\nexport type MediaEmbedCustomResizeFormValidatorCallback = ( form: MediaEmbedCustomResizeFormView ) => string | undefined;\n\n/**\n * Fired when the form view is submitted.\n *\n * @eventName ~MediaEmbedCustomResizeFormView#submit\n */\nexport type MediaEmbedCustomResizeFormViewSubmitEvent = {\n\tname: 'submit';\n\targs: [];\n};\n\n/**\n * Fired when the form view is canceled.\n *\n * @eventName ~MediaEmbedCustomResizeFormView#cancel\n */\nexport type MediaEmbedCustomResizeFormViewCancelEvent = {\n\tname: 'cancel';\n\targs: [];\n};\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize/mediaembedcustomresizeui\n */\n\nimport { Plugin, type Editor, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport {\n\tContextualBalloon,\n\tBalloonPanelView,\n\tclickOutsideHandler,\n\tCssTransitionDisablerMixin,\n\ttype ViewWithCssTransitionDisabler\n} from '@ckeditor/ckeditor5-ui';\nimport type { DomOptimalPositionOptions } from '@ckeditor/ckeditor5-utils';\n\nimport { getSelectedMediaViewWidget } from '../utils.js';\nimport { getSelectedMediaEmbedWidthInUnits } from './utils/getselectedmediaembedwidthinunits.js';\nimport { getSelectedMediaEmbedPossibleResizeRange } from './utils/getselectedmediaembedpossibleresizerange.js';\n\nimport {\n\tMediaEmbedCustomResizeFormView,\n\ttype MediaEmbedCustomResizeFormValidatorCallback,\n\ttype MediaEmbedCustomResizeFormViewCancelEvent,\n\ttype MediaEmbedCustomResizeFormViewSubmitEvent\n} from './ui/mediaembedcustomresizeformview.js';\n\n/**\n * The custom resize media embed UI plugin.\n *\n * The plugin uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon}.\n */\nexport class MediaEmbedCustomResizeUI extends Plugin {\n\t/**\n\t * The contextual balloon plugin instance.\n\t */\n\tprivate _balloon?: ContextualBalloon;\n\n\t/**\n\t * A form used to set the custom resize width.\n\t */\n\tprivate _form?: MediaEmbedCustomResizeFormView & ViewWithCssTransitionDisabler;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ ContextualBalloon ]> {\n\t\treturn [ ContextualBalloon ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedCustomResizeUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override destroy(): void {\n\t\tsuper.destroy();\n\n\t\tif ( this._form ) {\n\t\t\tthis._form.destroy();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the {@link module:media-embed/mediaembedresize/ui/mediaembedcustomresizeformview~MediaEmbedCustomResizeFormView} form.\n\t */\n\tprivate _createForm( unit: string ): void {\n\t\tconst editor = this.editor;\n\n\t\tthis._balloon = this.editor.plugins.get( 'ContextualBalloon' );\n\n\t\tconst FormViewClass = CssTransitionDisablerMixin( MediaEmbedCustomResizeFormView );\n\n\t\tthis._form = new FormViewClass( editor.locale, unit, getFormValidators( editor ) );\n\n\t\tthis._form.render();\n\n\t\tthis.listenTo( this._form, 'submit', () => {\n\t\t\tif ( this._form!.isValid() ) {\n\t\t\t\teditor.execute( 'resizeMediaEmbed', {\n\t\t\t\t\twidth: this._form!.sizeWithUnits\n\t\t\t\t} );\n\n\t\t\t\tthis._hideForm( true );\n\t\t\t}\n\t\t} );\n\n\t\tthis.listenTo( this._form.labeledInput, 'change:errorText', () => {\n\t\t\teditor.ui.update();\n\t\t} );\n\n\t\tthis.listenTo( this._form, 'cancel', () => {\n\t\t\tthis._hideForm( true );\n\t\t} );\n\n\t\tclickOutsideHandler( {\n\t\t\temitter: this._form,\n\t\t\tactivator: () => this._isVisible,\n\t\t\tcontextElements: () => [ this._balloon!.view.element! ],\n\t\t\tcallback: () => this._hideForm()\n\t\t} );\n\t}\n\n\t/**\n\t * Shows the {@link #_form} in the {@link #_balloon}.\n\t *\n\t * @internal\n\t */\n\tpublic _showForm( unit: string ): void {\n\t\tif ( this._isVisible ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !this._form ) {\n\t\t\tthis._createForm( unit );\n\t\t}\n\n\t\tconst editor = this.editor;\n\t\tconst labeledInput = this._form!.labeledInput;\n\n\t\tthis._form!.disableCssTransitions();\n\t\tthis._form!.resetFormStatus();\n\n\t\t/* v8 ignore else -- @preserve */\n\t\tif ( !this._isInBalloon ) {\n\t\t\tthis._balloon!.add( {\n\t\t\t\tview: this._form!,\n\t\t\t\tposition: getBalloonPositionData( editor )\n\t\t\t} );\n\t\t}\n\n\t\tconst currentParsedWidth = getSelectedMediaEmbedWidthInUnits( editor, unit );\n\t\tconst initialInputValue = currentParsedWidth ? currentParsedWidth.value.toFixed( 1 ) : '';\n\t\tconst possibleRange = getSelectedMediaEmbedPossibleResizeRange( editor, unit );\n\n\t\tlabeledInput.fieldView.value = labeledInput.fieldView.element!.value = initialInputValue;\n\n\t\tif ( possibleRange ) {\n\t\t\tObject.assign( labeledInput.fieldView, {\n\t\t\t\tmin: possibleRange.lower.toFixed( 1 ),\n\t\t\t\tmax: Math.ceil( possibleRange.upper ).toFixed( 1 )\n\t\t\t} );\n\t\t}\n\n\t\tthis._form!.labeledInput.fieldView.select();\n\t\tthis._form!.enableCssTransitions();\n\t}\n\n\t/**\n\t * Removes the {@link #_form} from the {@link #_balloon}.\n\t *\n\t * @param focusEditable Controls whether the editing view is focused afterwards.\n\t */\n\tprivate _hideForm( focusEditable: boolean = false ): void {\n\t\tif ( !this._isInBalloon ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._form!.focusTracker.isFocused ) {\n\t\t\tthis._form!.saveButtonView.focus();\n\t\t}\n\n\t\tthis._balloon!.remove( this._form! );\n\n\t\tif ( focusEditable ) {\n\t\t\tthis.editor.editing.view.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Returns `true` when the {@link #_form} is the visible view in the {@link #_balloon}.\n\t */\n\tprivate get _isVisible(): boolean {\n\t\treturn !!this._balloon && this._balloon.visibleView === this._form;\n\t}\n\n\t/**\n\t * Returns `true` when the {@link #_form} is in the {@link #_balloon}.\n\t */\n\tprivate get _isInBalloon(): boolean {\n\t\treturn !!this._balloon && this._balloon.hasView( this._form! );\n\t}\n}\n\nfunction getBalloonPositionData( editor: Editor ): Partial {\n\tconst editingView = editor.editing.view;\n\tconst defaultPositions = BalloonPanelView.defaultPositions;\n\n\treturn {\n\t\ttarget: editingView.domConverter.mapViewToDom(\n\t\t\tgetSelectedMediaViewWidget( editingView.document.selection )!\n\t\t) as HTMLElement,\n\t\tpositions: [\n\t\t\tdefaultPositions.northArrowSouth,\n\t\t\tdefaultPositions.northArrowSouthWest,\n\t\t\tdefaultPositions.northArrowSouthEast,\n\t\t\tdefaultPositions.southArrowNorth,\n\t\t\tdefaultPositions.southArrowNorthWest,\n\t\t\tdefaultPositions.southArrowNorthEast,\n\t\t\tdefaultPositions.viewportStickyNorth\n\t\t]\n\t};\n}\n\nfunction getFormValidators( editor: Editor ): Array {\n\tconst t = editor.t;\n\n\treturn [\n\t\tform => {\n\t\t\tif ( form.rawSize!.trim() === '' ) {\n\t\t\t\treturn t( 'The value must not be empty.' );\n\t\t\t}\n\n\t\t\tif ( form.parsedSize === null ) {\n\t\t\t\treturn t( 'The value should be a plain number.' );\n\t\t\t}\n\t\t}\n\t];\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedresize\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedResizeEditing } from './mediaembedresize/mediaembedresizeediting.js';\nimport { MediaEmbedResizeHandles } from './mediaembedresize/mediaembedresizehandles.js';\nimport { MediaEmbedResizeButtons } from './mediaembedresize/mediaembedresizebuttons.js';\nimport { MediaEmbedCustomResizeUI } from './mediaembedresize/mediaembedcustomresizeui.js';\n\nimport '../theme/mediaembedresize.css';\n\n/**\n * The media embed resize plugin.\n *\n * It adds a possibility to resize each media embed using handles, toolbar buttons,\n * or a balloon-hosted custom-width input.\n */\nexport class MediaEmbedResize extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[\n\t\tMediaEmbedResizeEditing,\n\t\tMediaEmbedResizeHandles,\n\t\tMediaEmbedCustomResizeUI,\n\t\tMediaEmbedResizeButtons\n\t]> {\n\t\treturn [\n\t\t\tMediaEmbedResizeEditing,\n\t\t\tMediaEmbedResizeHandles,\n\t\t\tMediaEmbedCustomResizeUI,\n\t\t\tMediaEmbedResizeButtons\n\t\t];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedResize' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstylecommand\n */\n\nimport { Command, type Editor } from '@ckeditor/ckeditor5-core';\nimport { getSelectedMediaModelWidget } from '../utils.js';\nimport type { NormalizedMediaStyleOption } from '../mediaembedconfig.js';\n\n/**\n * The media embed style command. It is used to apply a style option (e.g. an alignment) to a\n * selected media embed.\n *\n * The set of accepted style values comes from the resolved\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * options. Values not in that set are silently rejected by {@link #execute}.\n */\nexport class MediaEmbedStyleCommand extends Command {\n\t/**\n\t * The currently-applied style name. `false` when no style applies — either no media is\n\t * selected, or the selected media has no `mediaStyle` attribute and no style in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n\t * is marked `isDefault: true`.\n\t */\n\tdeclare public value: string | false;\n\n\t/**\n\t * Resolved styles indexed by `name`. Used to look up the `isDefault` flag at execute time\n\t * (any default-marked style clears the attribute) and to validate that a requested style\n\t * is part of the resolved options list.\n\t */\n\tprivate readonly _styles: Map;\n\n\t/**\n\t * The `name` of the first style with `isDefault: true` in the resolved options, or `null`\n\t * when the integrator did not designate a default. Exposed via {@link #value} when the\n\t * selected media has no `mediaStyle` attribute, so the default-state UI button can light up.\n\t * Does not gate the \"clear attribute\" branch in {@link #execute} — that uses the per-style\n\t * `isDefault` flag so multi-default configs behave consistently with the downcast.\n\t */\n\tprivate readonly _defaultStyleName: string | null;\n\n\t/**\n\t * Creates an instance of the media embed style command.\n\t *\n\t * @param editor The editor instance.\n\t * @param styles The resolved list of style options that this command will accept.\n\t */\n\tconstructor( editor: Editor, styles: Array ) {\n\t\tsuper( editor );\n\n\t\tthis._styles = new Map( styles.map( style => [ style.name, style ] ) );\n\n\t\tconst defaultStyle = styles.find( style => style.isDefault );\n\n\t\tthis._defaultStyleName = defaultStyle ? defaultStyle.name : null;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic override refresh(): void {\n\t\tconst element = getSelectedMediaModelWidget( this.editor.model.document.selection );\n\n\t\tthis.isEnabled = !!element;\n\n\t\tif ( !element ) {\n\t\t\tthis.value = false;\n\t\t} else if ( element.hasAttribute( 'mediaStyle' ) ) {\n\t\t\tconst styleName = element.getAttribute( 'mediaStyle' ) as string;\n\n\t\t\t// A previously-applied style may have been dropped from the resolved options list\n\t\t\t// (e.g. by a config change). Fall back to the effective default so the UI stays\n\t\t\t// consistent with what the downcast actually renders (no class for unknown names).\n\t\t\tthis.value = this._styles.has( styleName ) ? styleName : ( this._defaultStyleName ?? false );\n\t\t} else {\n\t\t\tthis.value = this._defaultStyleName ?? false;\n\t\t}\n\t}\n\n\t/**\n\t * Executes the command and applies the chosen style to the currently selected media embed.\n\t *\n\t * ```ts\n\t * editor.execute( 'mediaStyle', { value: 'alignLeft' } );\n\t * editor.execute( 'mediaStyle', { value: 'alignCenter' } ); // removes the attribute — alignCenter is the built-in default\n\t * editor.execute( 'mediaStyle', { value: null } ); // removes the attribute\n\t * ```\n\t *\n\t * The default style is encoded on the model as the absence of the `mediaStyle` attribute.\n\t * Passing any `isDefault: true` style name (or `null`) therefore clears the attribute. Values\n\t * that are neither falsy, an `isDefault` style, nor present in the resolved options list are\n\t * silently rejected.\n\t *\n\t * @param options\n\t * @param options.value The name of the style to apply, or `null` to clear the alignment.\n\t * @fires execute\n\t */\n\tpublic override execute( options: { value: string | null } ): void {\n\t\tconst model = this.editor.model;\n\t\tconst element = getSelectedMediaModelWidget( model.document.selection )!;\n\t\tconst requestedStyle = options.value;\n\n\t\t// Falsy value or any `isDefault: true` style clears the attribute. Default styles encode\n\t\t// as attribute-absence on the model. The downcast emits no class for them.\n\t\tif ( !requestedStyle || this._styles.get( requestedStyle )?.isDefault ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.removeAttribute( 'mediaStyle', element );\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Reject names that are not part of the resolved options list.\n\t\tif ( !this._styles.has( requestedStyle ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.change( writer => {\n\t\t\twriter.setAttribute( 'mediaStyle', requestedStyle, element );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstyleediting\n */\n\nimport { first } from '@ckeditor/ckeditor5-utils';\nimport type { UpcastElementEvent } from '@ckeditor/ckeditor5-engine';\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedEditing } from '../mediaembedediting.js';\nimport { MediaEmbedStyleCommand } from './mediaembedstylecommand.js';\nimport type { NormalizedMediaStyleOption } from '../mediaembedconfig.js';\nimport { DEFAULT_OPTIONS } from './constants.js';\nimport { normalizeStyles } from './utils.js';\n\n/**\n * The media embed style engine plugin. It extends the schema with the `mediaStyle` attribute,\n * registers the {@link module:media-embed/mediaembedstyle/mediaembedstylecommand~MediaEmbedStyleCommand} command,\n * and adds the converters that apply alignment CSS classes to the figure.\n */\nexport class MediaEmbedStyleEditing extends Plugin {\n\t/**\n\t * The resolved list of media style options. Built once from\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n\t * during {@link #init} and consumed by both the command and the UI plugin (single source of truth).\n\t *\n\t * @internal\n\t * @readonly\n\t */\n\tpublic normalizedStyles!: Array;\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedEditing ]> {\n\t\treturn [ MediaEmbedEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyleEditing' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst editor = this.editor;\n\t\tconst schema = editor.model.schema;\n\n\t\teditor.config.define( 'mediaEmbed.styles', { options: Object.keys( DEFAULT_OPTIONS ) } );\n\n\t\tthis.normalizedStyles = normalizeStyles( editor.config.get( 'mediaEmbed.styles' )! );\n\n\t\tschema.extend( 'media', { allowAttributes: [ 'mediaStyle' ] } );\n\t\tschema.setAttributeProperties( 'mediaStyle', { isFormatting: true } );\n\n\t\teditor.commands.add( 'mediaStyle', new MediaEmbedStyleCommand( editor, this.normalizedStyles ) );\n\n\t\tthis._registerConverters();\n\t}\n\n\t/**\n\t * Registers the downcast and upcast converters for the `mediaStyle` attribute.\n\t */\n\tprivate _registerConverters(): void {\n\t\tconst editor = this.editor;\n\n\t\t// Runtime lookup of style `name` → CSS `className`. Excludes the default style, which is\n\t\t// encoded as the absence of the attribute (no class). Iteration order follows the configured\n\t\t// options order — the upcast relies on this so the last matching class wins on a figure\n\t\t// that has multiple alignment classes.\n\t\tconst styleClassMap = new Map(\n\t\t\tthis.normalizedStyles\n\t\t\t\t.filter( style => !style.isDefault && style.className )\n\t\t\t\t.map( style => [ style.name, style.className! ] )\n\t\t);\n\n\t\t// Downcast: `mediaStyle` → CSS class on the
    . Covers both editing and data pipelines.\n\t\teditor.conversion.for( 'downcast' ).add( dispatcher =>\n\t\t\tdispatcher.on( 'attribute:mediaStyle:media', ( evt, data, conversionApi ) => {\n\t\t\t\tif ( !conversionApi.consumable.consume( data.item, evt.name ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst figure = conversionApi.mapper.toViewElement( data.item )!;\n\t\t\t\tconst viewWriter = conversionApi.writer;\n\t\t\t\tconst oldClass = styleClassMap.get( data.attributeOldValue as string );\n\t\t\t\tconst newClass = styleClassMap.get( data.attributeNewValue as string );\n\n\t\t\t\tif ( oldClass ) {\n\t\t\t\t\tviewWriter.removeClass( oldClass, figure );\n\t\t\t\t}\n\n\t\t\t\tif ( newClass ) {\n\t\t\t\t\tviewWriter.addClass( newClass, figure );\n\t\t\t\t}\n\t\t\t} )\n\t\t);\n\n\t\t// Upcast: alignment class on a media
    → `mediaStyle` attribute. Runs at `low`\n\t\t// priority so the main media upcast creates the `media` model element first.\n\t\teditor.conversion.for( 'upcast' ).add( dispatcher => {\n\t\t\tdispatcher.on( 'element:figure', ( _evt, data, conversionApi ) => {\n\t\t\t\tif ( !data.modelRange ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst modelElement = first( data.modelRange.getItems() );\n\n\t\t\t\tif ( !modelElement || !modelElement.is( 'element', 'media' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Iterate in insertion order — last consumed class wins when multiple\n\t\t\t\t// alignment classes are present on the same figure.\n\t\t\t\tfor ( const [ styleName, className ] of styleClassMap ) {\n\t\t\t\t\tif ( conversionApi.consumable.consume( data.viewItem, { classes: className } ) ) {\n\t\t\t\t\t\tconversionApi.writer.setAttribute( 'mediaStyle', styleName, modelElement );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, { priority: 'low' } );\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle/mediaembedstyleui\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { ButtonView, createDropdown, addToolbarToDropdown, SplitButtonView } from '@ckeditor/ckeditor5-ui';\nimport { logWarning } from '@ckeditor/ckeditor5-utils';\nimport { MediaEmbedStyleEditing } from './mediaembedstyleediting.js';\nimport { type MediaEmbedStyleCommand } from './mediaembedstylecommand.js';\nimport { DEFAULT_DROPDOWN_DEFINITIONS } from './constants.js';\nimport { isMediaStyleDropdown } from './utils.js';\nimport type { MediaStyleDropdownDefinition } from '../mediaembedconfig.js';\n\n/**\n * Definition of a single alignment button registered by `MediaEmbedStyleUI`.\n */\ntype ButtonDefinition = {\n\tname: string;\n\tlabel: string;\n\ticon: string;\n};\n\n/**\n * The media embed style UI plugin.\n *\n * It registers a button for every style in the resolved\n * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#styles `config.mediaEmbed.styles`}\n * list, and the default split-button dropdowns (`mediaEmbed:wrapText`, `mediaEmbed:breakText`)\n * — filtered to the styles that survived configuration. The resulting components can be placed\n * in the {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar media embed toolbar}.\n */\nexport class MediaEmbedStyleUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedStyleEditing ]> {\n\t\treturn [ MediaEmbedStyleEditing ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyleUI' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic init(): void {\n\t\tconst titles = this._getLocalizedTitles();\n\n\t\tfor ( const button of this._getButtonDefinitions( titles ) ) {\n\t\t\tthis._createButton( button );\n\t\t}\n\n\t\tfor ( const dropdown of this._getDropdownDefinitions( titles ) ) {\n\t\t\tthis._createDropdown( dropdown );\n\t\t}\n\t}\n\n\t/**\n\t * Returns the alignment button definitions sourced from the resolved options list.\n\t */\n\tprivate _getButtonDefinitions( titles: Record ): Array {\n\t\tconst editing = this.editor.plugins.get( MediaEmbedStyleEditing );\n\n\t\treturn editing.normalizedStyles.map( option => ( {\n\t\t\tname: option.name,\n\t\t\tlabel: titles[ option.title ] || option.title,\n\t\t\ticon: option.icon\n\t\t} ) );\n\t}\n\n\t/**\n\t * Returns the localized titles of the built-in styles and dropdowns.\n\t */\n\tprivate _getLocalizedTitles(): Record {\n\t\tconst t = this.editor.t;\n\n\t\treturn {\n\t\t\t'Left aligned media': t( 'Left aligned media' ),\n\t\t\t'Centered media': t( 'Centered media' ),\n\t\t\t'Right aligned media': t( 'Right aligned media' ),\n\t\t\t'Wrap text': t( 'Wrap text' ),\n\t\t\t'Break text': t( 'Break text' )\n\t\t};\n\t}\n\n\t/**\n\t * Returns the split-button dropdown definitions, filtered to the styles present in the\n\t * resolved options list. Combines the {@link module:media-embed/mediaembedstyle/constants~DEFAULT_DROPDOWN_DEFINITIONS\n\t * built-in dropdowns} with custom dropdowns declared inline in\n\t * {@link module:media-embed/mediaembedconfig~MediaEmbedConfig#toolbar `config.mediaEmbed.toolbar`}.\n\t *\n\t * A dropdown with fewer than two items is skipped — a single-item dropdown carries no value\n\t * over the flat button. If the configured `defaultItem` was filtered out, the first surviving\n\t * item becomes the default.\n\t *\n\t * When a *custom* dropdown's items reference styles that are not in the resolved options list,\n\t * a console warning is emitted (the integrator's config was not fully honored). Built-in\n\t * dropdowns auto-skip silently — they are added by the plugin, not the integrator.\n\t */\n\tprivate _getDropdownDefinitions( titles: Record ): Array {\n\t\tconst editor = this.editor;\n\t\tconst editing = editor.plugins.get( MediaEmbedStyleEditing );\n\t\tconst availableComponentNames = new Set(\n\t\t\tediting.normalizedStyles.map( ( { name } ) => `mediaEmbed:${ name }` )\n\t\t);\n\n\t\tconst dropdowns: Array = [];\n\n\t\tconst resolveDropdown = ( definition: MediaStyleDropdownDefinition, warnOnFilter: boolean ): void => {\n\t\t\tconst items = definition.items.filter( itemName => availableComponentNames.has( itemName ) );\n\n\t\t\tif ( warnOnFilter && items.length !== definition.items.length ) {\n\t\t\t\twarnInvalidDropdown( { dropdown: definition } );\n\t\t\t}\n\n\t\t\tif ( items.length < 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst defaultItem = availableComponentNames.has( definition.defaultItem ) ?\n\t\t\t\tdefinition.defaultItem :\n\t\t\t\titems[ 0 ];\n\n\t\t\tdropdowns.push( {\n\t\t\t\tname: definition.name,\n\t\t\t\ttitle: titles[ definition.title ] || definition.title,\n\t\t\t\titems,\n\t\t\t\tdefaultItem\n\t\t\t} );\n\t\t};\n\n\t\tfor ( const definition of DEFAULT_DROPDOWN_DEFINITIONS ) {\n\t\t\tresolveDropdown( definition, false );\n\t\t}\n\n\t\tfor ( const definition of this._collectCustomDropdowns() ) {\n\t\t\tresolveDropdown( definition, true );\n\t\t}\n\n\t\treturn dropdowns;\n\t}\n\n\t/**\n\t * Scans `config.mediaEmbed.toolbar` for entries shaped like a dropdown definition\n\t * (objects with both `items` and `defaultItem`) and returns the valid ones. `defaultItem`\n\t * is the discriminator between our split-button dropdowns and generic toolbar groupings\n\t * (which use `items` + `label` and have no `defaultItem`).\n\t *\n\t * Invalid entries (wrong name prefix, `defaultItem` missing from `items`) are warned and\n\t * dropped here. Items that reference filtered-out styles are filtered later by\n\t * {@link #_getDropdownDefinitions}, alongside the same logic that applies to built-in\n\t * dropdowns.\n\t */\n\tprivate _collectCustomDropdowns(): Array {\n\t\tconst toolbarConfig = this.editor.config.get( 'mediaEmbed.toolbar' ) || [];\n\n\t\treturn toolbarConfig.filter( ( item ): item is MediaStyleDropdownDefinition =>\n\t\t\tisMediaStyleDropdown( item ) && isValidCustomDropdown( item )\n\t\t);\n\t}\n\n\t/**\n\t * Registers a single alignment toggle button in the component factory.\n\t */\n\tprivate _createButton( definition: ButtonDefinition ): void {\n\t\tconst editor = this.editor;\n\t\tconst componentName = `mediaEmbed:${ definition.name }`;\n\n\t\teditor.ui.componentFactory.add( componentName, locale => {\n\t\t\tconst command: MediaEmbedStyleCommand = editor.commands.get( 'mediaStyle' )!;\n\t\t\tconst view = new ButtonView( locale );\n\n\t\t\tview.set( {\n\t\t\t\tlabel: definition.label,\n\t\t\t\ticon: definition.icon,\n\t\t\t\ttooltip: true,\n\t\t\t\tisToggleable: true\n\t\t\t} );\n\n\t\t\tview.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\t\t\tview.bind( 'isOn' ).to( command, 'value', value => value === definition.name );\n\n\t\t\tview.on( 'execute', () => {\n\t\t\t\teditor.execute( 'mediaStyle', { value: definition.name } );\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn view;\n\t\t} );\n\t}\n\n\t/**\n\t * Registers a split-button dropdown grouping a set of alignment buttons. The action button\n\t * reflects whichever child option is currently `isOn`, falling back to the dropdown's\n\t * `defaultItem` when nothing is active.\n\t */\n\tprivate _createDropdown( definition: MediaStyleDropdownDefinition ): void {\n\t\tconst editor = this.editor;\n\t\tconst factory = editor.ui.componentFactory;\n\n\t\tfactory.add( definition.name, locale => {\n\t\t\t// Build child buttons via the factory; pick the default by name.\n\t\t\tconst buttonViews = definition.items.map(\n\t\t\t\titemName => factory.create( itemName ) as ButtonView\n\t\t\t);\n\t\t\tconst defaultButton = buttonViews[ definition.items.indexOf( definition.defaultItem ) ];\n\n\t\t\t// Resolve the currently-active child or fall back to the default. Used by the\n\t\t\t// reactive `icon` and `label` bindings on the split button.\n\t\t\tconst activeOrDefault = ( ...areOn: Array ): ButtonView => {\n\t\t\t\tconst index = areOn.findIndex( Boolean );\n\n\t\t\t\treturn index < 0 ? defaultButton : buttonViews[ index ];\n\t\t\t};\n\n\t\t\t// Build the dropdown shell.\n\t\t\tconst dropdownView = createDropdown( locale, SplitButtonView );\n\t\t\tconst splitButtonView = dropdownView.buttonView as SplitButtonView;\n\n\t\t\taddToolbarToDropdown( dropdownView, buttonViews, { enableActiveItemFocusOnDropdownOpen: true } );\n\n\t\t\tsplitButtonView.set( {\n\t\t\t\tlabel: getDropdownButtonTitle( definition.title, defaultButton.label! ),\n\t\t\t\tclass: null,\n\t\t\t\ttooltip: true\n\t\t\t} );\n\n\t\t\tsplitButtonView.arrowView.unbind( 'label' );\n\t\t\tsplitButtonView.arrowView.set( { label: definition.title } );\n\n\t\t\t// Reactive: action button mirrors the active child's icon and label.\n\t\t\tsplitButtonView.bind( 'icon' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => activeOrDefault( ...areOn ).icon\n\t\t\t);\n\n\t\t\tsplitButtonView.bind( 'label' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => getDropdownButtonTitle( definition.title, activeOrDefault( ...areOn ).label! )\n\t\t\t);\n\n\t\t\t// Reactive: split button shows the \"active\" state when any child is on.\n\t\t\tsplitButtonView.bind( 'isOn' ).toMany( buttonViews, 'isOn', ( ...areOn ) => areOn.some( Boolean ) );\n\n\t\t\tsplitButtonView.bind( 'class' ).toMany( buttonViews, 'isOn',\n\t\t\t\t( ...areOn ) => areOn.some( Boolean ) ? 'ck-splitbutton_flatten' : undefined\n\t\t\t);\n\n\t\t\t// Action click: re-fire the default child when nothing is active; otherwise toggle the dropdown.\n\t\t\tthis.listenTo( splitButtonView, 'execute', () => {\n\t\t\t\tif ( buttonViews.some( ( { isOn } ) => isOn ) ) {\n\t\t\t\t\tdropdownView.isOpen = !dropdownView.isOpen;\n\t\t\t\t} else {\n\t\t\t\t\tdefaultButton.fire( 'execute' );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Reactive: dropdown is enabled when any child is enabled.\n\t\t\tdropdownView.bind( 'isEnabled' ).toMany( buttonViews, 'isEnabled',\n\t\t\t\t( ...areEnabled ) => areEnabled.some( Boolean )\n\t\t\t);\n\n\t\t\t// Refocus the editing view so the dropdown action doesn't steal caret position.\n\t\t\tthis.listenTo( dropdownView, 'execute', () => {\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn dropdownView;\n\t\t} );\n\t}\n}\n\n/**\n * Combines the dropdown title and the default action item label for the split-button label.\n */\nfunction getDropdownButtonTitle( dropdownTitle: string, buttonTitle: string ): string {\n\treturn `${ dropdownTitle }: ${ buttonTitle }`;\n}\n\n/**\n * Validates a user-supplied dropdown definition. Emits a console warning under\n * `media-style-configuration-definition-invalid` and returns `false` when any of these rules is\n * broken: `name` must start with `mediaEmbed:`, `title` must be a non-empty string, `items` must\n * be non-empty and every entry must be a `mediaEmbed:`-prefixed string, and `defaultItem` must be\n * one of the `items`.\n *\n * Item-membership against the resolved styles is checked separately, downstream, alongside the\n * same logic that applies to built-in dropdowns.\n */\nfunction isValidCustomDropdown( definition: MediaStyleDropdownDefinition ): boolean {\n\tconst valid =\n\t\tdefinition.name.startsWith( 'mediaEmbed:' ) &&\n\t\ttypeof definition.title === 'string' && definition.title.length > 0 &&\n\t\tdefinition.items.length > 0 &&\n\t\tdefinition.items.every( name => typeof name === 'string' && name.startsWith( 'mediaEmbed:' ) ) &&\n\t\tdefinition.items.includes( definition.defaultItem );\n\n\tif ( !valid ) {\n\t\twarnInvalidDropdown( { dropdown: definition } );\n\t}\n\n\treturn valid;\n}\n\n/**\n * Emits a console warning under `media-style-configuration-definition-invalid` for an invalid\n * or partially-honored dropdown definition. Called from {@link ~isValidCustomDropdown} for\n * structural problems and from {@link MediaEmbedStyleUI#_getDropdownDefinitions} when items\n * reference styles that are not in the resolved options list.\n */\nfunction warnInvalidDropdown( info: object ): void {\n\tlogWarning( 'media-style-configuration-definition-invalid', info );\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module media-embed/mediaembedstyle\n */\n\nimport { Plugin, type PluginDependenciesOf } from '@ckeditor/ckeditor5-core';\nimport { MediaEmbedStyleEditing } from './mediaembedstyle/mediaembedstyleediting.js';\nimport { MediaEmbedStyleUI } from './mediaembedstyle/mediaembedstyleui.js';\n\nimport '../theme/mediaembedstyle.css';\n\n/**\n * The media embed style plugin.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n * * {@link module:media-embed/mediaembedstyle/mediaembedstyleediting~MediaEmbedStyleEditing},\n * * {@link module:media-embed/mediaembedstyle/mediaembedstyleui~MediaEmbedStyleUI}\n *\n * For a detailed overview, check the {@glink features/media-embed/media-embed-styles Media embed styles feature documentation}.\n */\nexport class MediaEmbedStyle extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get requires(): PluginDependenciesOf<[ MediaEmbedStyleEditing, MediaEmbedStyleUI ]> {\n\t\treturn [ MediaEmbedStyleEditing, MediaEmbedStyleUI ];\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static get pluginName() {\n\t\treturn 'MediaEmbedStyle' as const;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tpublic static override get isOfficialPlugin(): true {\n\t\treturn true;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options\n */\n\n/**\n * @module minimap/minimapiframeview\n */\n\nimport { IframeView } from '@ckeditor/ckeditor5-ui';\nimport { toUnit, type Locale } from '@ckeditor/ckeditor5-utils';\nimport type { MinimapViewOptions } from './minimapview.js';\n\nconst toPx = /* #__PURE__ */ toUnit( 'px' );\n\n/**\n * The internal `